Documentation
How GitForge works — for maintainers and contributors. For protocol details and contract addresses, see the API reference.
Concepts
keccak256("github:owner/repo#issue").cancel, release, or dispute. The arbiter resolves disputes.release() automatically on PR merge.Maintainer flow
/bounty 0.001 ETH on the issue. The bot replies with a funding link./claim on the issue. First valid claim locks the bounty.Closes #N in the body is merged, the bot auto-releases payment. For manual control, use the actions on the bounty page.Contributor flow
/claim on the issue. The bot DMs you a one-time link to lock the bounty with your wallet (no funds spent — claim is free).Closes #N.Issue commands
| Command | Who | Effect |
|---|---|---|
| /bounty <amount> <token> | Maintainer | Bot replies with a prefilled funding link. |
| /claim | Contributor | Bot replies with a one-time claim link. |
Token currently supported: ETH. ERC-20 (USDC) is wired in the contract but not yet exposed in commands.
Status states
| Status | Meaning | Possible next |
|---|---|---|
| Open | Funded, awaiting a claim. | Claimed, Cancelled, Expired |
| Claimed | Locked by a contributor. | Submitted, Cancelled, Disputed |
| Submitted | Contributor marked work complete. | Completed (release), Disputed |
| Disputed | Arbiter resolves. | Completed, Cancelled |
| Completed | Paid out — terminal. | — |
| Cancelled | Refunded — terminal. | — |
| Expired | Past deadline, refunded minus fee — terminal. | — |
Frequent questions
Does GitForge hold my funds?
release(), which is bounded by the contract logic.What's the fee?
Where is this deployed?
What if a contributor submits low-quality work?
dispute() from the dashboard. The arbiter then decides between release (to contributor) and refund (to maintainer).Can I close a bounty without paying out?
cancel if no one has claimed yet (full refund), or wait for the deadline and call expire (refund minus fee).Roadmap cleanup
Programmatic access
GitForge ships three integration surfaces for agents, scripts, and apps.
| Tool | Use it for | Default endpoint |
|---|---|---|
| CLI | Terminal workflows, quick lookups, bounty IDs, and stats. | https://api.gitforge.work |
| SDK | TypeScript apps, dashboards, bots, and test scripts. | https://api.gitforge.work |
| MCP | AI assistants that need GitForge tools inside Claude/Cursor/Codex-style clients. | https://api.gitforge.work |
CLI
The CLI is published from @gitforge/mcp and exposes the gitforge binary.
# from this monorepo cd mcp npm install npm run build npm link # configure production API export GITFORGE_API_URL=https://api.gitforge.work # common commands gitforge list gitforge active gitforge list --status Open --repo owner/repo gitforge get github:owner/repo#123 gitforge id github:owner/repo#123 gitforge stats gitforge chain
Supported command groups: list, active, get, stats, id, parse, and chain.
SDK
Use @gitforge/sdk when you need typed API calls, bounty ID utilities, ABIs, or onchain reads/writes.
import { GitForgeClient, computeBountyId } from "@gitforge/sdk";
const client = new GitForgeClient({
baseUrl: "https://api.gitforge.work",
});
const bountyId = computeBountyId("github:owner/repo#123");
const bounty = await client.getBounty(bountyId);
const open = await client.listBounties({ status: ["Open"], limit: 20 });
const stats = await client.getStats();Main exports: GitForgeClient, GitForgeContract, computeBountyId, parseIssueUri, escrowAbi, attestationAbi, and shared response types.
MCP server
The MCP server exposes GitForge read tools to AI clients over stdio. It uses GITFORGE_API_URL for the bot API and RPC_URL for chain metadata.
# build the server
cd mcp
npm install
npm run build
# example MCP client config
{
"mcpServers": {
"gitforge": {
"command": "node",
"args": ["/absolute/path/to/bountykit/mcp/dist/index.js"],
"env": {
"GITFORGE_API_URL": "https://api.gitforge.work",
"RPC_URL": "https://mainnet.base.org",
"CHAIN_ID": "8453"
}
}
}
}MCP tools include listing bounties, fetching bounty detail, computing issue bounty IDs, reading platform stats, and checking chain configuration.
HTTP API
The bot also exposes read endpoints for dashboards and integrations:
GET /api/stats GET /api/bounties?status=Open&limit=20 GET /api/bounties/:bountyId
Full schema and examples in the API reference.