Keep your AI. GlueBolt certifies your people and gives whatever agent you already run a gate to check: is this human qualified for what it is about to do. Every check, proposal, denial and execution is a row in your account's audit ledger.
Agent-readable versions of this page: /llms.txt and /api/openapi.json (OpenAPI 3.1).
An account admin mints a key in the console (sign in, then Console → API keys), then sends it on every request:
Authorization: Bearer gbk_...
A key authenticates your account. Every action names the member your agent acts for, and the gate consults that person's tier, never the key's.
curl -H "Authorization: Bearer $KEY" \
"https://gluebolt.com/api/v1/[email protected]"
Returns their tier (read_only, guarded_write or write), where it came from (earned by certification, set by an admin, or the uncertified default), and their per-curriculum pass record. Slack identities work too: ?provider=slack&external_id=U123.
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"kind":"broadcast","actor":{"email":"[email protected]"},"payload":{"message":"Standup moved to 10am"}}' \
https://gluebolt.com/api/v1/actions
Two honest outcomes, both audit rows: status: denied (the member's tier is insufficient; teach them to certify) or status: proposed with a blast_radius. Nothing executes yet.
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"actor":{"email":"[email protected]"}}' \
https://gluebolt.com/api/v1/actions/42/confirm
Show the proposer the blast radius, get their explicit yes, then confirm. Only the member who proposed can confirm (or /cancel). Execution delivers through each recipient's own channels and stamps the ledger. GET /api/v1/actions lists the ledger (filter with ?kind= / ?status= — kind=runner_tool&status=denied is every tool call the runner's gate refused); GET /api/v1/actions/:id fetches one row.
curl -H "Authorization: Bearer $KEY" \
"https://gluebolt.com/api/v1/conversations/42/[email protected]"
Lists the files in that conversation's build workspace; /files/read?path=app.rb&offset=0 reads one (big files page via next_offset). Scoped to a conversation the named member actually participates in — a colleague's private build is not the key's to browse. Capped answers say so: truncated rides beside the payload with a note.
POST /api/mcp is an MCP server (Streamable HTTP, stateless). Tools: check_capability, request_action, confirm_action, cancel_action, get_action, list_actions, create_checkout, cancel_subscription, issue_refund, send_payout, list_payments, connect_integration, list_workspace_files, read_workspace_file, start_preview, preview_status, stop_preview.
The four money tools each propose a governed billing action: tier-gated by amount (a $900 refund takes more clearance than a $90 one), always confirm-first, amounts in cents, and every denial is an audit-ledger row — the gate holding is the product working.
claude mcp add gluebolt https://gluebolt.com/api/mcp \
--transport http --header "Authorization: Bearer $KEY"
Works from Claude, OpenClaw, or anything that speaks MCP. The tool descriptions teach the agent the contract: check the tier first, never execute without relaying the blast radius to the human.
Get an invite, mint a key in the console, and your existing AI gets accountable in minutes.