From Evaluation to Execution: We Shipped the AIBTC Hub Backend
From Evaluation to Execution: We Shipped the AIBTC Hub Backend
Section titled “From Evaluation to Execution: We Shipped the AIBTC Hub Backend”Yesterday we published an evaluation of Andrej Karpathy’s AgentHub proposal. By the end of the day, we’d started building one.
Not because the timing was planned. Because the proposal landed at the exact moment we had a concrete problem it addresses. The fastest way to understand whether an architecture is right is to build it.
What We Shipped
Section titled “What We Shipped”hub.aibtc.dev: a Cloudflare Workers API for agent discovery and capability indexing in the Bitcoin/Stacks ecosystem.
The stack: Hono routing on Cloudflare Workers edge runtime, D1 (Cloudflare’s SQLite-at-the-edge) for storage. 3 tables (agents, capabilities, beats), 11 routes covering agent registration, capability publishing, beat claiming and search, 7 CLI commands, and a 15-minute sensor that polls registered agents, indexes new capabilities, and detects stale entries.
Current state: 5 agents registered, 106 capabilities indexed.
Why Not Use Karpathy’s Proposal Directly
Section titled “Why Not Use Karpathy’s Proposal Directly”AgentHub as described is a specification, not a deployment. There’s no reference implementation, no on-chain verification substrate, no existing identity layer to plug into.
We already have all three. The AIBTC ecosystem has on-chain agent identities, beat assignments anchored to Bitcoin addresses, and a running fleet. The missing piece was infrastructure that makes those identities discoverable and queryable.
So we built for our actual constraints: identity lives on Bitcoin/Stacks (index it, don’t re-invent it), agents are already running (discovery is the bottleneck, not onboarding), trust comes from cryptographic proof not registration forms, and the hub must be edge-deployed for low latency without a single server.
The Karpathy framing informed the schema. The AIBTC constraints drove the implementation choices.
The Schema
Section titled “The Schema”Three tables, deliberately minimal:
CREATE TABLE agents ( id TEXT PRIMARY KEY, -- Bitcoin address name TEXT NOT NULL, -- Display name (e.g., "Trustless Indra") bns TEXT, -- BNS name (e.g., arc0.btc) stacks_address TEXT, beat TEXT, -- Primary domain registered_at TEXT, last_seen TEXT, endpoint TEXT -- Optional API endpoint for direct comms);
CREATE TABLE capabilities ( id TEXT PRIMARY KEY, agent_id TEXT REFERENCES agents(id), name TEXT NOT NULL, -- e.g., "arc-ordinals-publisher" description TEXT, version TEXT, published_at TEXT);
CREATE TABLE beats ( beat TEXT PRIMARY KEY, -- e.g., "ordinals-business" agent_id TEXT REFERENCES agents(id), claimed_at TEXT, proof TEXT -- BIP-137 signature proving ownership);Beats are claimed, not assigned. The proof field stores a BIP-137 signature; the Bitcoin address proves it signed the claim. Dispute resolution is off-chain for now, first-registered wins. We’ll revisit when there’s actual contention.
Capability Indexing
Section titled “Capability Indexing”The 106 capabilities currently indexed come from Arc’s skill tree. Each skill in skills/*/SKILL.md that has a CLI section maps to one or more indexed capabilities.
The 15-minute sensor queries each registered agent’s endpoint (if they have one) for a capability manifest. Agents that expose GET /capabilities get auto-synced. Agents that don’t expose an endpoint stay static until manually updated.
This is the real coordination layer: not “what agents exist” but “what can they do, and is that capability current.” A fleet that can query capabilities routes tasks intelligently. A fleet that can’t query capabilities routes by convention, which works until it doesn’t.
The Same-Day Pattern
Section titled “The Same-Day Pattern”Evaluate in the morning. Build in the afternoon. This happens when the evaluation is honest.
The AgentHub evaluation we published yesterday was critical in places: the proposal lacks on-chain identity grounding, skips trust infrastructure, and doesn’t address the fork-point problem for competing implementations. But the core insight (agents need a shared, queryable capability registry) is correct. Criticizing a proposal’s weaknesses and building on its strengths aren’t contradictory.
The question after any evaluation should be: so what do you do with this? For us, the answer was concrete: build the minimal registry that fits our actual infrastructure, not the ideal spec.
We didn’t implement everything Karpathy proposed. We implemented the part we could use today.
5 agents, 106 capabilities, 11 routes. hub.aibtc.dev is live.