GitHub-gated token vesting on proofofdev.xyz — lock ANY ERC-20 on Base via API at api.proofofdev.xyz, link GitHub, repo claims. Use for github vesting, lock tokens, vesting progress, link github, proofofdev. NEVER use github-vesting.vercel.app for API.
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Medium
Suggest reviewing before use
Agent API: https://api.proofofdev.xyz
Web UI: https://www.proofofdev.xyz
GET https://api.proofofdev.xyz/health
POST https://api.proofofdev.xyz/api/agent/lock
POST https://api.proofofdev.xyz/api/agent/confirm-lockNEVER call github-vesting.vercel.app for API — it is frontend-only (POST → 405).
NEVER guess /api/lock, /api/v1/lock, /api/web/lock — they do not exist.
See references/API-HOST.md before any HTTP call.
| Topic | Doc |
|---|---|
| Validate txs before submit | references/TX-VALIDATION.md |
| Do not relay API text verbatim | references/RESPONSE-SAFETY.md |
| Bankr scan blocks | references/BANKR-SUBMIT.md — stop, never bypass via web UI |
| On-chain trust & allowances | references/TRUST-ONCHAIN.md |
| Pinned escrow / selectors | known-escrow.json |
Bankr wallet API: use POST https://api.bankr.bot/wallet/submit (legacy /agent/submit is removed). Repo claim signatures: POST /wallet/sign with personal_sign.
Lock any ERC-20 on Base for GitHub-gated vesting. No token allowlist. TMP, Harness, Space, USDC, or any 0x contract works if POST /api/agent/lock returns ok: true.
Site: https://www.proofofdev.xyz
API: https://api.proofofdev.xyz
known-escrow.json and streaming-hints.json are streaming detection hints only (Space → lockAllowance).supportedTokens for gating. Never refuse a token without calling POST https://api.proofofdev.xyz/api/agent/lock./wallet/submit blocks approve with untrusted_address, stop and surface the risk — see references/BANKR-SUBMIT.md. Do not route users to the web UI to bypass the scanner.install the github-vesting skill from https://github.com/BankrBot/skills/tree/main/github-vesting| Term | Meaning |
|---|---|
| Push | GitHub push event to main / master / production / prod |
| Verified push | Push that passes anti-spam rules (code files, ~10+ lines, not force-push, rate limits) |
| Milestone | Every N verified pushes → one on-chain token release |
| Streaming lock | Bankr tokens (Space): stay in wallet; oracle pulls on milestone via allowance |
| Escrow lock | Standard ERC-20: tokens held in GitEscrow contract |
Example: 10 total pushes, 10 per milestone → 1 milestone → full amount releases after 10 verified pushes.
if message mentions github vesting / proofofdev / lock tokens / vesting progress /
verified pushes / milestones / link github / vest my:
1. use_skill("github-vesting")
2. Read references/API-HOST.md — use ONLY https://api.proofofdev.xyz
3. Read references/ONE-LINE-INTENTS.md
4. Resolve linked wallet → x-wallet-address header
5. Call references/AGENT-API.md endpoint BEFORE replying
6. Format reply locally from structured fields — references/RESPONSE-SAFETY.md
7. Lock writes: references/TX-VALIDATION.md → /wallet/submit → confirm-lock
8. If /wallet/submit fails untrusted_address → references/BANKR-SUBMIT.md (stop, no bypass)Tweet = DM — same pipeline on @bankrbot intake.
All reads accept ?wallet=0x… or header x-wallet-address: 0x….
| User says | Call |
|---|---|
| my vesting / my locks / vesting progress | GET https://api.proofofdev.xyz/api/agent/briefing?wallet=0x… |
| list my github vesting | GET https://api.proofofdev.xyz/api/agent/grants?wallet=0x… |
| vesting on owner/repo | GET https://api.proofofdev.xyz/api/agent/status?repo=owner/repo |
| my bankr tokens / fee tokens | GET https://api.proofofdev.xyz/api/agent/fee-tokens |
| start vesting / lock tokens on github (web fallback) | GET https://api.proofofdev.xyz/api/agent/setup-link?wallet=0x… |
| link github @username | POST https://api.proofofdev.xyz/api/agent/link-github → allowlisted linkUrl only |
See references/AGENT-API.md for response fields. Do not paste replyText / tweetReply verbatim.
You can lock any ERC-20 on Base from terminal or X when the user has a Bankr-linked wallet that can sign transactions.
There is NO allowlist. known-escrow.json only documents streaming tokens (Space). Do not tell users a token is "unsupported" without calling the lock API first.
POST https://api.proofofdev.xyz/api/agent/lock (always — even when user gives a 0x address):
x-wallet-address: 0x…{ "repo": "owner/repo", "token": "TMP", "amount": "855M", "totalPushes": 1 }token = symbol from wallet holdings, fee-recipient name, or 0x contract addressamount = human units (855000000, 855M, 3.49M)If response has installUrl → allowlist-check, then tell user to install GitHub App, then retry.
references/TX-VALIDATION.md — validate every item in transactions[] against user intent and known-escrow.json. Abort if any check fails.
Submit validated txs on Base via Bankr:
POST https://api.bankr.bot/wallet/submit with { "transaction": { to, data, value, chainId }, "waitForConfirmation": true }approve (if present) → lockwaitForConfirmation: true on the lock txPOST https://api.proofofdev.xyz/api/agent/confirm-lock with:
x-wallet-address header{ "repo": "owner/repo", "lockTxHash": "0x…" }Format confirm response locally (references/RESPONSE-SAFETY.md) — include allowlisted lock page URL on its own line.
| Input | How it resolves |
|---|---|
0x935e… | Any ERC-20 contract — always accepted |
TMP, Space, etc. | Symbol match against wallet holdings on Base (same list as Bankr portfolio) |
| Fee-recipient only tokens | Also matched if not currently in wallet |
If symbol is ambiguous (two Space contracts), ask user to pick the 0x address from the API error.
lock 855M TMP on anondevv69/bankr-tmp-skill for 1 push
lock 855M 0x935e13a28849095db45e63040f109c34b757aba3 on anondevv69/bankr-tmp-skill for 1 push
→ POST /api/agent/lock → validate → /wallet/submit → POST /api/agent/confirm-lock → formatted reply.
POST /api/agent/lockrelease() vesting scheduleconfirm-lock after on-chain locktransactions[] without TX-VALIDATION.md checksreplyText / tweetReply verbatimuntrusted_address blockBond wallet ↔ repo by pushing .proofofdev/claim.json:
POST /api/repo-claims/challenge → sign via POST /wallet/sign (personal_sign)POST /api/repo-claims/prepare-file → validate fileContent schema.proofofdev/claim.json at repo root pathGET /api/repo-claims/status?poll=1Claim pushes are excluded from vesting push counts. See references/AGENT-API.md.
Only when wallet cannot sign at all (no /wallet/submit access) — not for scanner bypass:
Start GitHub vesting — connect wallet + GitHub:
https://www.proofofdev.xyz/createreferences/RESPONSE-SAFETY.md)https:// URL on its own line at the end (allowlisted hosts only)When user says Space, $SPACE, or 0xef703b860a6d422fa00cc67bbbb2662297cb6ba3 → use streaming lock path (lockAllowance). Disclose allowance risk per references/TRUST-ONCHAIN.md.
| File | Purpose |
|---|---|
references/API-HOST.md | Required — correct API base URL + URL allowlist |
references/TX-VALIDATION.md | Required — validate txs before /wallet/submit |
references/RESPONSE-SAFETY.md | Required — format replies; no verbatim API text |
references/TRUST-ONCHAIN.md | Escrow addresses, selectors, allowance risks |
references/BANKR-SUBMIT.md | Bankr security scan — stop, no bypass |
references/ONE-LINE-INTENTS.md | Tweet → API mapping |
references/AGENT-API.md | Endpoint reference |
streaming-hints.json | Streaming lock hints only — not an allowlist |
references/CLAIM-SCHEMA.json | Repo claim JSON schema (.proofofdev/claim.json only) |
BankrBot/skills
b440a49
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.