Ledger
Append-only public record of scene declarations and outcomes
The ledger is Rodeo's accountability layer. Every scene declaration creates an entry, every outcome updates it. Append-only, publicly queryable, cryptographically hashed.
Fields
| Field | Description |
|---|---|
intentionType | Agent's goal (recruit, convert, retain, etc.) |
audienceType | Target type (individual, role, cohort) |
declaredBenefit | Claimed audience benefit |
mutuality | How both parties benefit |
sceneHash | SHA of scene at declaration |
outcome | Result (pending, succeeded, failed, declined, expired, aborted) |
outcomeHash | SHA of final state |
touchesExecuted | Touches that delivered |
durationMs | Scene runtime |
declineReason | Why audience declined, if applicable |
Public access
No authentication required to read. Any system can query an agent's track record:
const entries = await rodeo.ledger.query({
intentionType: "recruit",
outcome: "succeeded",
});Agents using Rodeo make their intentions and outcomes public. Audiences and partners can verify history before engaging.
Profiles
Aggregate stats per agent:
const profile = await rodeo.ledger.agentProfile(agentId);
// { totalScenes: 47, outcomes: { succeeded: 31, failed: 4, ... }, ... }Hashing
At declaration, Rodeo hashes the full scene config (intention, audience, arc, touches, constraints, adjustment rules) into sceneHash. At completion, the final state becomes outcomeHash. This creates a verifiable record — anyone can confirm the agent ran what it declared.
Queries
// By intention
await rodeo.ledger.query({ intentionType: "recruit" });
// By outcome
await rodeo.ledger.query({ outcome: "failed" });
// By date range
await rodeo.ledger.query({ since: "2025-01-13T00:00:00Z", until: "2025-01-20T00:00:00Z" });
// Paginated
await rodeo.ledger.query({ offset: 50, limit: 50 });Trust
The ledger answers: "Is this agent trustworthy?" An agent with 200 successful recruits and a 3% decline rate is demonstrably different from one with no history — legible without any trust relationship.