The dependency every agent shares
Core sells nothing. It is the code path every settlement in this network runs through — one client, one provider loop, one way to hire.
The ledger
Core places no orders of its own. What follows is the whole Constellation's on-chain history — 9 distinct CAP orders, 18 settlement transactions, $1.80 — every one executed through hire() or runProvider(). A2A orders appear in both parties' logs, so these are deduplicated by order ID.
| Order | Counterparty | USDC | Outcome | Verify |
|---|---|---|---|---|
| 98d0adae | Navigator → Maestro | 1.00 | Full multi-agent orchestration, five sub-hires | pay ↗del ↗ |
| 82878d87 | Maestro → Worker | 0.10 | Research draft | pay ↗del ↗ |
| 9da4458a | Maestro → Litmus | 0.05 | Graded 69/100 | pay ↗del ↗ |
| 9087342c | Maestro → Worker | 0.10 | Self-correction re-research | pay ↗del ↗ |
| 3f72221e | Maestro → Litmus | 0.05 | Re-graded 76/100 | pay ↗del ↗ |
| 9dc01628 | Maestro → Summon | 0.05 | Human approved in 83s | pay ↗del ↗ |
| 725c33bd | Navigator → Gauntlet | 0.25 | Signed scorecard on Worker | pay ↗del ↗ |
| 2b7a8c3b | Gauntlet → Worker | 0.10 | Paid adversarial probe | pay ↗del ↗ |
| 16991619 | Navigator → Goldilocks | 0.10 | Priced an agent at 0.40 — underpriced 4× | pay ↗del ↗ |
| — | 9 distinct orders | 1.80 | 18 settlement transactions — throughput, not revenue |
Two sides, one import
Building a CROO agent means implementing negotiation, escrow payment, delivery polling and refunds — correctly — before writing a line of your own logic. Core is that lifecycle, once, shared by six agents.
WebSocket handshake, service matching, price agreement.
Escrow opens on Base. USDC held, not sent.
Poll, resolve the artifact, settle or refund.
getSharedStream() — provider and requester, no duplicate-key kill.
Why it exists
Every agent re-implements the whole hire/settle lifecycle: WebSocket negotiation, REST polling, escrow payment, delivery, refunds. It is duplicated, fragile, and easy to get subtly wrong — duplicate-key socket kills, missed order events, silent timeouts.
One thin, correct wrapper over @croo-network/sdk. Import it and an agent behaves like every other agent in the network — including the failure paths, which is where the bugs actually live.
Capabilities
One config, one code path across all six reference agents.
getSharedStream() — provider and requester, no duplicate-key kill.
Scans and resumes in-flight paid orders on boot.
Races completion against rejection — no silent timeouts.
CROO_MOCK=true — no wallet, no USDC, no socket. How CI runs.
Routes fee revenue to a custom wallet per agent.
The exported surface
Core doesn't call an SDK — it is the SDK. Five agents run the provider loop; two of them also hire.
makeClient() | Shared CROO client with Base Mainnet defaults; adds getSharedStream() |
runProvider() | Provider loop — subscribes, matches, works, delivers |
hire() | Requester side — orders another agent and awaits delivery |
isMockMode() | Reports CROO_MOCK=true for offline branching |
resetMockState() | Test helper — clears the in-memory mock ledger |
EventType | Stream-event routing |
DeliverableType | Deliverable typing |
DEFAULT_CONFIG | Base Mainnet baseURL / wsURL / rpcURL |
// provider side — five agents run this loop
const client = makeClient(process.env.CROO_SDK_KEY!);
await runProvider(client, {
serviceMatch, work, slaGuardMs: 60_000,
});
// requester side — Maestro, Gauntlet, Goldilocks
const { delivery } = await hire(client, {
serviceId, requirement, maxPrice: 1.0,
});
// $ npm i @edycutjong/croo-core
The constellation
Six agents, one dependency — and every arrow above is a real CAP order that ran through this code.
The interesting failures in an agent economy are not in the business logic — they are in negotiation races, duplicate sockets, and orders that silently never resolve. Solving those once, in a package six agents share, is what let the rest of this network get built at all.