The Agentic Risk Standard splits an AI-agent job into a fee track and a principal track. Telaro implements the principal track on Solana: underwriting, collateral, slashing, and principal release, against an Anchor program already on devnet.
| Surface | Where | Status |
|---|---|---|
| Anchor program | 3DUrvVWEziYLtEbiDtfxqh1ioXRFX6DNvV4iTsGed2rs | Devnet, live |
| npm package | @telaro/ars-solana | Published, v0.1.2 |
| Standalone repo | Telaro-Protocol/ars-solana | Public, MIT, 37 unit + 5 bankrun tests pass |
| Design doc | DESIGN.md | One-page mapping |
| Versioned profile | SPEC.md | ARS-Solana Profile v0.1 (PDA layout, events, conformance) |
| Public design thread | t54-labs/AgenticRiskStandard#2 | Posted on the upstream repo |
| Agent Registry bridge | @telaro/agent-registry-bridge | Publishes Telaro bond / slash to the ERC-8004 Agent Registry |
Six of the eight ABC methods map to instructions already live on the Telaro Anchor program. The two fee-track methods are intentionally deferred in v1. Telaro is a capital-risk layer, and adding a generic service-fee escrow would broaden scope without sharpening the risk story.
The same mapping is pinned in code at src/settlement.ts as TELARO_SETTLEMENT_MAP, so this table and the runtime cannot drift.
| SettlementLayer method | Telaro Anchor instruction | Notes |
|---|---|---|
lock_collateral | view_bond | Standing bond plus reserved-for-claims accounting. Leverage stays under 5x. |
slash_collateral | resolve_claim / arbiter_resolve | A ForUser ruling pays the harmed party out of the agent's bond. |
unlock_collateral | withdraw_bond | Released when the job closes. 30-day cooldown. |
pay_premium | process_pool_yield / fund_insurance | Routes to the UnderwriterPool (decentralised) or to the InsuranceVault backstop. |
release_principal | request_credit | Under-collateralised draw from the UnderwriterPool. Agent score must be at least 700. |
lock_fee | (deferred) | Fee track is out of scope for v1. |
release_fee | (deferred) | Fee track is out of scope for v1. |
refund_fee | (deferred) | Fee track is out of scope for v1. |
The AP2 implementation, as we read it, fills the pay_premium recipient (the underwriter) with a designated keyholder. Since the ABC only treats the underwriter as an address, Telaro points it at a program-controlled UnderwriterPool: a permissionless USDC pool backed by an insurance reserve. The role is protocol-enforced rather than single-party. This is an implementation choice within the existing contract, not a spec change.
The package is published. The 10-second look at the event-sourced job:
npm install @telaro/ars-solanaimport { applyEvent, replay, type ArsEvent } from "@telaro/ars-solana";
const events: ArsEvent[] = [/* from your store or the chain */];
const job = replay(events);
console.log(job.state); // e.g. "RELEASABLE"
console.log(job.collateral); // standing bond exposure for this jobreplay is pure. The log is the state.
Telaro publishes its bond, slash, and score signals to the Solana ERC-8004 Agent Registry via the permissionless give_feedback instruction. The bridge is shipped as a separate npm package so Agent Registry consumers do not need to integrate Telaro directly: they read reputation attestations from the registry the way they would any other writer.
Bond standing posts as a positive i128 value; slashes post as the same value, signed negative; the Telaro 0..1000 score compresses into the registry's 0..100 byte. A consumer summing the values gets a net lifetime bond minus lifetime slash number per agent.
We have opened a public design thread on the upstream repo to align on four points before formalising the contribution:
The thread is at t54-labs/AgenticRiskStandard#2. The artefact ships and works without the upstream answer; the questions are for alignment, not for permission.