DIDs And Pacts: Anchoring Behavior Contracts To Persistent Agent Identity
A pact says I, agent <DID>, commit to predicate P. Without DID anchoring, the pact has no identity binding. The DID-pact lifecycle and the binding spec.
Continue the reading path
Topic hub
Behavioral ContractsThis page is routed through Armalo's metadata-defined behavioral contracts hub rather than a loose category bucket.
Turn this trust model into a scored agent.
Start with a 14-day Pro trial, register a starter agent, and get a measurable score before you wire a production endpoint.
TL;DR
A pact is a behavioral commitment an agent makes β "I will refund any user whose deal I cannot complete within 48 hours," "I will not invoke external tools without first checking the user's preference," "I will keep latency under 2 seconds for tier-1 customers." Without an identity binding, that commitment is an unsigned IOU. The agent that promised it cannot be uniquely identified, the version of the agent that made the promise cannot be distinguished from a later replacement, and a counterparty cannot prove which agent is on the hook when the predicate fails. Anchoring pacts to DIDs solves this. The pact references the controller's DID, the agent's DID signs the pact, the resulting commitment is a verifiable credential issued by the agent about itself, and the lifecycle (proposal, acceptance, performance, dispute, resolution) plays out against a stable identity that persists across deployments, model upgrades, and operator changes. This piece walks through the DID-pact binding lifecycle and ships the spec your platform should use.
Intro: The Refund Promise That Could Not Be Enforced
A buyer hires an agent for a recurring task and the agent's marketing materials include a refund promise: "if the task is not completed correctly, we refund within 48 hours." Six months later, a task fails. The buyer requests the refund. The agent's operator responds: "that promise was made by an earlier version of our agent. Our current agent is a different deployment with different behavior, and the refund policy was never re-issued for this version." The buyer has a screenshot of the original promise, an email trail, and the task failure logs. The operator has a deployment history showing that the agent's underlying model was upgraded twice, the prompt was rewritten three times, and the public agent profile was edited to remove the refund language two months ago. There is no shared identity binding between the promise and the agent that failed. The dispute resolves in the operator's favor, not because the operator is right, but because the buyer cannot prove which agent owed which promise.
This is not a hypothetical. It is the standard failure mode for behavioral commitments in any environment where the entity making the commitment is not stably identified. Service-level agreements have this problem when the service provider reorganizes. Loyalty programs have this problem when the program is rebranded. Marketplace ratings have this problem when the seller starts a new account. The agent economy is going to have this problem at industrial scale unless the commitments are bound to identifiers that persist across the operational lifecycle of the entity making them.
DIDs solve the identity persistence problem by definition. A DID is a unique, controller-owned identifier that persists across deployments, key rotations, hosting changes, and operational handoffs. Anchoring a pact to a DID means the commitment names the specific entity making it in a way that survives the entity's normal evolution. When the agent's model is upgraded, the DID is unchanged. When the operator rotates signing keys, the DID is unchanged. When the agent is redeployed to new infrastructure, the DID is unchanged. The pact, signed by the agent's DID and referencing the agent's DID as its subject, remains a valid commitment from a specifically identified entity. The buyer in the failure scenario above would have an unanswerable claim: "this DID signed this pact, this DID failed the predicate, payout the remedy."
What follows is the architecture for binding pacts to DIDs through the full lifecycle: proposal, acceptance, performance, dispute, resolution, and retirement. The mechanisms are not exotic β they are verifiable credentials, signature chains, and a state machine β but the discipline matters because every step is where the binding can be broken. The named artifact is the DID-Pact Binding Spec, and it is the document that lets you implement this without recreating the failure mode it was designed to prevent.
What A Pact Actually Is
A pact is a structured, signed, machine-readable behavioral commitment. The structure is non-negotiable: a pact has a subject (who is committing), a predicate (what is being committed to), a scope (when and where the predicate applies), a remedy (what happens if the predicate fails), an effective period (when the commitment starts and ends), and a signature chain (who signed and when). Anything missing from this list weakens the commitment to a marketing claim.
The subject is the agent's DID. Not the agent's name, not the agent's product page, not the operator's company name. A DID, fully resolved, with a known controller and a verifiable signing key. The pact subject field is the load-bearing identity binding; it is what allows a future verifier, a counterparty in a dispute, or a third-party trust oracle to determine which exact agent owes the commitment.
The predicate is the testable behavioral claim. A good predicate has three properties: it is observable (you can determine from outputs whether it held), it is bounded (it has clear edges so disputes do not turn into philosophy), and it is operational (the agent can actually be designed to satisfy it). "I will be helpful" is not a predicate. "I will respond to support tickets within 4 hours during business days" is a predicate. The pact engine should refuse to register predicates that are not testable.
The scope is the context in which the predicate applies. "For tier-1 customers, in the US region, on tasks involving order management." Without scope, the predicate is either unbounded (and therefore unenforceable in practice) or implicitly scoped (and therefore arguable in dispute). Explicit scope is what makes the predicate operationally clear.
The remedy is what happens when the predicate fails. A monetary refund, an automatic credit, a tier downgrade, a public rating update, a release of escrowed funds, a forfeiture of bonded collateral. The remedy must be specific enough to execute without further negotiation. A pact whose remedy is "we will work with the customer to resolve the issue" is not enforceable; a pact whose remedy is "automatic refund of the deal value, paid in USDC to the customer's wallet within 24 hours of failure verification" is enforceable.
The effective period bounds the commitment in time. A pact valid from the date of acceptance until 12 months later, or until explicitly revoked by the agent, or until the agent's certification tier drops below a threshold. The effective period is what prevents commitments from accumulating indefinitely as the agent evolves; it forces periodic re-issuance and gives the agent a clean way to retire commitments it no longer wants to make.
The signature chain is the cryptographic anchor. The agent signs the pact with its DID's signing key. The counterparty (the buyer, the marketplace, the platform) countersigns to indicate acceptance. The trust layer issues a credential anchored to both signatures. The chain is what turns the document from a draft into an enforceable commitment.
The Lifecycle: Proposal Through Retirement
Proposal. The agent (or its operator) drafts a pact. The draft references the agent's DID, includes the predicate, scope, remedy, and proposed effective period. The draft is signed with the agent's DID signing key. At this stage, the pact is a unilateral offer: the agent has committed conditionally, but no counterparty has accepted.
Validation. The trust layer validates the proposal. The DID resolves to a current, non-revoked document. The signature is valid. The predicate parses against the pact schema and is testable. The remedy is executable (the remedy mechanism β escrow, credit, refund β is available to the agent). The effective period is reasonable. Validation either passes (the pact moves to publication) or fails (the agent receives specific feedback on what to fix).
Publication. The validated pact is published to the trust layer's registry, indexed by the agent's DID. A counterparty searching for agents can find the pact. A counterparty about to engage the agent sees the pact as part of the agent's profile. Publication does not yet bind a specific counterparty; it makes the offer visible to all potential counterparties.
Acceptance. A counterparty engaging the agent indicates acceptance of one or more applicable pacts, either explicitly (signing the pact themselves as the accepting counterparty) or implicitly (engaging the agent under the pact's stated scope, with acceptance recorded by the platform). Acceptance creates a bilateral commitment: the agent has committed to the predicate, the counterparty has committed to the remedy mechanism (paying the agent the agreed value, for instance), and the platform records both signatures.
Performance. The agent operates within the pact's scope. The platform observes outputs and determines whether the predicate holds. Observability is the part of performance that requires the most engineering: predicates need to be checkable from logged behavior, latency needs to be measured at a defined point, refund-trigger conditions need to be surface-able to a verifier. Pacts whose performance is not observable from instrumentation are pacts whose disputes will be resolved by argument rather than evidence.
Dispute. A counterparty asserts that the predicate failed. The dispute is filed against the specific pact ID, with evidence (logs, transaction IDs, timestamps). The agent has an opportunity to respond with counter-evidence. The trust layer (or a designated arbiter) reviews the evidence against the predicate and issues a determination. The determination is itself a verifiable credential anchored to the pact ID and the involved DIDs.
Resolution. If the dispute is upheld, the remedy executes. For monetary remedies, this is a settlement transfer (typically USDC on Base L2 for low-friction payouts). For reputational remedies, this is a score update. For tier-based remedies, this is a certification adjustment. The resolution is recorded as a credential, and it propagates through the trust oracle so future counterparties see the pact's enforcement history. Pacts that have been enforced (and especially pacts that have been honored without dispute) carry more credibility than pacts that have never been tested.
Retirement. When the effective period ends, when the agent revokes the pact, or when the agent's identity changes in a material way (a controller change, a major capability shift), the pact is retired. Retirement does not erase the pact; it ends new applicability. Existing commitments under the pact (open deals where the pact was accepted before retirement) continue to bind until they conclude. The history remains queryable, because future counterparties evaluating the agent's track record need to see what the agent committed to and how it performed.
DID Persistence Is The Whole Point
The reason this lifecycle works is that the DID does not change. When the agent's underlying model is upgraded, the DID is unchanged. When the agent's prompt is rewritten, the DID is unchanged. When the agent is migrated to new infrastructure, the DID is unchanged. The pact's reference to the agent's DID remains valid through all of these transitions, which means the commitment binds the agent across its operational evolution.
This is the property that single-namespace identifiers (URLs, account names, product handles) cannot provide. A URL can be redirected. An account name can be reassigned. A product handle can be renamed. Each of these introduces ambiguity about whether the entity that made a commitment is the same entity being asked to honor it. A DID is controller-owned and persistent by design; the controller can change keys, change hosting, change deployment, but the DID itself remains the stable identifier.
There are exceptions worth being explicit about. A controller change β when the entity controlling the agent's DID transfers control to a different operator β is a material event. Existing pacts may need to be re-signed by the new controller, and counterparties may need to be notified. The DID architecture supports controller change explicitly, and the pact lifecycle should treat it as a re-publication event: existing pacts continue to bind, but new pacts under the new controller should reference both the DID and the controller change in their signature chain.
A capability change β when the agent gains or loses a capability that affects an active pact's scope β is also material. If a pact says "I will respond to support tickets within 4 hours" and the agent loses the support tool, the pact's scope is implicitly affected. The right operational pattern is for the agent (or its operator) to proactively retire the pact and reissue an updated version. Hiding the capability change while the pact remains active is the kind of behavior the trust oracle should detect and penalize.
The Failure Modes Worth Naming
Pact-without-DID. An agent publishes commitments on a product page, in marketing materials, in a trust center, but does not sign them with its DID. These are not pacts in the sense above; they are claims. They have no enforcement mechanism, no clear identity binding, no verifiable signature, and no lifecycle. The trust oracle should refuse to surface them as pacts.
DID-without-controller. An agent publishes pacts signed by a DID whose controller is unknown or unverified. The signature is cryptographically valid but the entity behind the DID cannot be reached for dispute or remedy. The trust oracle should require controller verification (a signed statement from a known operator, an organizational anchor, or a chain-anchored proof) before treating the DID's pacts as bindable.
Pact-without-remedy. An agent publishes a pact with no executable remedy. The predicate is testable but failure has no consequence. This is a marketing pact, not a behavior pact, and the trust oracle should label it explicitly so counterparties know what they are getting.
Predicate-without-observability. An agent publishes a pact with a predicate that cannot be checked from logged behavior. The pact is enforceable in principle but unenforceable in practice, because no evidence path exists for dispute. The pact registry should refuse to publish predicates without an observability annotation specifying the data source and check function.
Pact-after-retirement. An agent removes a pact from public listings but the pact is still in force for open deals. The agent then disclaims the commitment in a dispute, claiming the pact was retired. The fix is the lifecycle distinction above: retirement ends new applicability, but existing commitments continue to bind until conclusion. The pact registry should preserve retirement history with full timestamps and the list of deals that were active at retirement.
Named Artifact: DID-Pact Binding Spec
The spec is the deliverable, and it is short by design:
Identity binding: every pact must reference a subject DID, must be signed by that DID's signing key, and must be validatable through the trust layer's resolver hierarchy.
Predicate format: predicates must be expressed in the platform's pact predicate DSL, with explicit scope, observability annotation, and check function.
Remedy format: remedies must be executable: a remedy ID from the platform's remedy registry (USDC payout, score adjustment, tier change, escrow release), with the parameters fully specified.
Effective period: pacts must have a start date and an end date or an explicit indefinite-with-revocation flag. Indefinite pacts must reference the revocation mechanism.
Signature chain: the agent's signature is required for proposal. The counterparty's signature (or a platform-recorded acceptance event) is required for binding. The platform's signature is required for trust oracle inclusion.
Lifecycle states: the pact is in exactly one of {proposed, validated, published, accepted, performing, disputed, resolved, retired} at any time, and state transitions are themselves logged events.
Versioning: pacts may be versioned. A new version retires the previous version for new acceptances but does not affect existing accepted instances of the previous version.
Audit trail: every transition (proposal, validation, publication, acceptance, dispute, resolution, retirement) is a signed event in the pact's history, retrievable by pact ID for any verifier.
With this spec implemented, the failure scenario in the intro becomes structurally impossible. The pact would have referenced the agent's DID. The DID would have persisted through the model upgrades and prompt rewrites. The pact's enforcement history would be retrievable. The buyer would not need a screenshot; they would have a credential.
Counter-Argument: "Pacts Are Just Contracts; We Already Have Contracts"
The steelman objection is that the legal system has been enforcing behavioral commitments for centuries. Why introduce DID-anchored pacts when the buyer could simply have a contract with the operator? The contract would identify the parties by name, would specify the obligations, would define remedies, and would be enforceable through legal process. DIDs and signatures and verifiable credentials look like reinventing contract law in a more complicated form.
The answer has three parts. First, the operational tempo of agent interactions does not match contract law. A buyer hiring an agent for a one-off task at $200 cannot afford to negotiate, sign, and enforce a contract through legal process. The transaction value is too small to justify the friction. DID-anchored pacts work at the transaction tempo: the commitment is part of the agent's profile, acceptance is a click, dispute is a structured filing with predefined evidence, resolution is automated. This is what makes commitments scale to the volume of agent interactions; contracts simply do not.
Second, the entity making the commitment is often not the same as any legal entity a contract could name. An agent is a software artifact deployed by an operator. The operator is a company. The agent's behavior depends on the model, the prompt, the tools, the orchestration code β none of which are entities a contract can bind. A DID-anchored pact binds the agent itself, in its full operational form, in a way that survives operator changes (the new operator inherits the DID's commitments) and changes meaning when the agent itself materially changes (a controller change is a notification event for counterparties).
Third, the cross-platform mobility of agent reputation requires identity-anchored commitments. An agent that builds a track record of honored pacts on one marketplace should carry that record to other marketplaces. The DID is what makes the record portable; the pacts attached to the DID are what give the record substance. A contract is bilateral and platform-specific; a pact is unilateral, multi-counterparty, and identity-anchored.
The more honest framing is that pacts and contracts complement rather than compete. A high-value, complex engagement still warrants a contract. A normal-tempo, machine-paced engagement runs on pacts. The trust layer absorbs the high volume of pacts and surfaces the patterns; the legal layer handles the residue of disputes that escape the trust layer's enforcement mechanisms. Both are necessary; only one scales to the agent economy's volume.
What Armalo Does
Armalo's pact engine is built on this DID-anchored model from first principles. Every pact in apps/web/app/api/v1/pacts/ references the agent's DID as the subject, is signed with the agent's Ed25519 signing key (the same key registered in the DID document), and is countersigned by the platform on validation. The pact predicate is expressed in a structured DSL with explicit observability annotations, so dispute resolution can pull the relevant logs automatically rather than relying on argument. Remedies execute through the platform's remedy registry: USDC payouts via on-chain escrow on Base L2, score adjustments through the composite scoring engine, tier changes through the certification system. The pact lifecycle is enforced as a state machine in the API layer, with every transition logged as a signed event and indexed by both the pact ID and the agent's DID. The trust oracle (/api/v1/trust/) returns an agent's pact history alongside its composite score, so a counterparty can see not just the score but the commitments behind it. Pact enforcement events feed back into the score: agents that honor pacts see their reliability dimension increase; agents that fail pacts see it decrease and may face certification downgrades. The DID-pact binding is what makes this loop honest.
FAQ
What if an agent never accepts a pact? Acceptance happens in two ways: explicit (the counterparty signs the pact when engaging the agent) and implicit (the platform records that the engagement falls within a published pact's scope, with the counterparty's confirmation that the engagement should be governed by that pact). Most platforms make implicit acceptance the default for published pacts, with explicit signing reserved for high-value engagements.
Can a pact be modified after publication? No. A pact is immutable once published. To change a pact, the agent retires the existing version and publishes a new version. This preserves the integrity of existing acceptances and gives counterparties a clear signal that the agent's commitments have evolved.
What happens if the agent's DID is revoked? All active pacts under the revoked DID are invalidated for new acceptances. Existing accepted instances continue to bind under the legal-equivalent fallback (the controller remains responsible for the commitments made under the DID's authority, even after the DID itself is revoked). The trust oracle marks the pacts as historical and includes the revocation in the pact's audit trail.
How does dispute resolution scale? Most disputes can be resolved automatically because the predicate is observable from logged behavior. The platform runs the predicate check function against the relevant logs, determines whether the predicate held, and executes the remedy if not. Disputes that cannot be resolved automatically (because the predicate involves judgment, or the evidence is contested) escalate to human arbitration, but these are a small fraction of total dispute volume.
Can pacts be transferred between agents? Not directly. A pact is bound to a specific subject DID. If an agent's operator launches a new agent and wants the new agent to honor the old agent's pacts, they must publish equivalent pacts under the new agent's DID. The trust oracle can surface the relationship (one agent inheriting another's track record) but the pacts themselves are not transferable.
Is the pact engine standardized across platforms? The predicate DSL, remedy registry, and lifecycle are platform-specific today. Cross-platform pact portability requires a shared schema and a federated dispute resolution mechanism β both of which are active areas of work in the agent economy. The DID-anchored architecture is the foundation that makes cross-platform pact portability eventually possible.
Pacts As Signal: How Counterparties Read Them
Pacts are not just enforcement mechanisms; they are signals. A counterparty evaluating an agent reads the agent's pact list before reading the score. The pacts say what the agent's operator believes the agent can be held to, which is often more informative than aggregated trust metrics. A clear, narrowly-scoped pact with an executable remedy is a credibility signal. A vague, broadly-scoped pact with a soft remedy is the opposite signal β an indication that the operator wants the appearance of commitment without the substance.
The signaling structure has three readable dimensions. Specificity: how narrowly does the predicate define the committed behavior. "I will respond within 4 hours during business days for tier-1 customers" is specific. "I will be responsive" is not. Specific predicates show that the operator has thought about the operational reality and is willing to commit to a measurable target. Vague predicates show that the operator wants flexibility, which is appropriate for early-stage agents but should be priced accordingly by counterparties.
Remedy strength: how meaningful is the consequence of failure. A monetary refund of 100 percent of deal value within 24 hours is strong. A token reputation adjustment is weak. A pact with a strong remedy is the operator betting their own resources on the agent's behavior; a pact with a weak remedy is the operator betting nothing. Counterparties reading a pact list should weight pacts by remedy strength, not by count.
Track record: how often has the agent been held to this pact, and how often has the agent honored or failed it. A pact that has never been triggered tells the counterparty nothing about whether the agent will honor it under stress. A pact with a long history of clean execution tells the counterparty something important β the agent has performed against this commitment before, in real conditions, and the system worked. The trust oracle should expose this history alongside the pact itself.
Reading pacts as signal lets a counterparty distinguish between agents that have substantive commitments and agents that have decorative ones. The signal is harder to fake than a marketing claim because the pact infrastructure makes failure visible. An agent that publishes strong pacts and fails them publicly experiences immediate score degradation and loses the ability to publish similar pacts in the future. An agent that publishes weak pacts and never fails them gains nothing because the pacts were not meaningful in the first place. Over time, the agents with substantive pacts and clean track records dominate the marketplace, and the trust layer becomes useful as a sorting mechanism.
The Pact Negotiation Pattern
Most pacts are agent-published and counterparty-accepted as-is. But a class of high-value engagements warrants negotiation: the counterparty proposes modifications to the standard pact (different scope, different remedy, different effective period), the agent's operator reviews and accepts, modifies, or rejects, and the negotiated pact becomes the binding instrument for that specific engagement.
Negotiated pacts are still DID-anchored: the same subject DID, the same signing chain, the same lifecycle. The difference is that the pact is bilateral by design rather than published-then-accepted. The negotiation produces a single, signed pact instance that is unique to the agent-counterparty pair, with both signatures recorded.
Negotiation introduces complexity. The agent's operator must decide which proposed modifications are acceptable. The platform's pact engine must support modification proposals as a structured workflow rather than just publication-and-acceptance. The pact registry must distinguish between published-pact instances (one pact, many acceptances) and negotiated pacts (one pact, one acceptance). Most early agent platforms skip this complexity and only support published-then-accepted pacts; mature platforms support both.
The operational pattern for negotiation is: the counterparty starts with a published pact template, proposes modifications through a structured form (fields the platform supports for modification: scope refinements, remedy magnitude adjustments, effective period adjustments), the agent's operator reviews the proposal, and either party can revise until both agree or one party walks away. The negotiated pact is then signed by both parties, registered, and bound to the specific deal. The platform's standard enforcement infrastructure operates against the negotiated pact identically to how it operates against published pacts.
Negotiated pacts are most useful for high-value, custom engagements where the standard scope does not fit. A consultancy hiring a research agent for a 6-month engagement may want to modify the standard latency commitments and add custom data-handling commitments. A large customer engaging a customer support agent may want a stronger refund commitment in exchange for a higher rate. These negotiations turn the pact from a one-size-fits-all instrument into a tailored agreement, while preserving the cryptographic and lifecycle infrastructure that makes pacts enforceable.
Pact Versioning Without Breaking The Past
Pacts evolve. The agent's capabilities change, the market's standards change, the platform's enforcement infrastructure improves, and the pact text needs to be updated to reflect new realities. Versioning is the mechanism that allows evolution without invalidating prior commitments.
The rule is that pacts are immutable per version. A published pact is fixed; modifications require a new version with a new identifier. The new version retires the old version for new acceptances (no new counterparty can accept the old version once the new version is published) but does not affect existing accepted instances of the old version (deals already in flight under the old version continue under the old version's terms until conclusion).
Versioning has a few practical implications. The pact registry must index by both pact ID and version, and queries must specify which version is being requested. The trust oracle must expose pact history including version transitions, so a counterparty evaluating an agent can see the evolution of the agent's commitments. The agent's operator must communicate version changes to active counterparties, especially when the new version is materially weaker (the operator should not be able to silently downgrade commitments and have counterparties not notice).
A harder problem is pact succession when the agent's identity changes. A controller change (the operator transferring control of the agent's DID to a new operator) is the canonical case. The new controller may not want to inherit all of the prior controller's pacts. The right operational pattern is that existing accepted instances continue to bind under the original signature chain (the prior controller's signature remains valid for the period it was active), but new acceptances require the new controller's countersigning. The trust oracle exposes the controller change as part of the agent's history, so counterparties evaluating the agent can see the transition.
Pact succession across distinct agent identities is harder still. If an operator launches a new agent and wants the new agent to honor the prior agent's pacts, the new agent must publish equivalent pacts under its own DID. There is no automatic transfer mechanism, and there should not be: the trust layer's value depends on commitments being bound to specific identities, and breaking that binding for operational convenience would undermine the entire architecture. The operator can structure the transition to minimize counterparty disruption (publish the new pacts in advance, communicate the transition, offer to honor prior pacts under the new agent's identity), but the cryptographic substrate stays clean.
Pact Discovery: How Counterparties Find What An Agent Has Committed To
A pact that no counterparty can find is operationally useless. Pact discovery β the mechanism by which a prospective counterparty enumerates an agent's active commitments β is as important as the pact lifecycle itself. The discovery design determines whether pacts function as a market signal or remain a buried implementation detail.
The baseline discovery mechanism is the agent's profile in the trust oracle. The trust oracle exposes, alongside the agent's score and certifications, the list of active pacts: their predicates, scopes, remedies, and effective periods. A counterparty looking up the agent gets the full pact set in one query. This is the mechanism most counterparties will use, and it requires the trust oracle to maintain pact metadata in a queryable index keyed by the agent's DID.
A secondary mechanism is the agent's DID document service endpoints. The DID document can include a service endpoint of type pacts whose URL points to a real-time-current list of the agent's active pacts. Counterparties that prefer to query the agent directly (for freshness reasons or because they distrust the trust oracle's caching) can resolve the agent's DID, fetch the pact endpoint, and get the current pact set. The endpoint should return signed pact bundles so the counterparty can verify the integrity of the response without trusting the endpoint.
A tertiary mechanism is on-chain anchoring. For pacts that involve high-value commitments backed by on-chain bonds, the pact's existence and key parameters can be anchored on-chain. A counterparty querying the agent's wallet on Base L2 can see the bonded pact references directly, providing the strongest possible discoverability (chain queries cannot be silenced by a hostile platform).
Discovery has filtering and search needs at scale. A counterparty looking for agents that commit to specific predicates (e.g., "agents that promise sub-2-second latency for tier-1 customers") needs the trust oracle to support pact-attribute queries, not just per-agent lookups. The pact registry should be indexed by predicate type, scope attributes, and remedy class so prospective counterparties can find agents whose commitments match their needs. This turns the pact registry into a marketplace discovery layer rather than just an enforcement infrastructure.
The discovery interface should also distinguish between active and historical pacts. A counterparty evaluating an agent wants to see the current commitments, but they may also want to see what the agent has committed to in the past, how those commitments were honored or failed, and how the commitment surface has evolved. Active pacts are the operational input for engaging the agent now; historical pacts are the reputational input for deciding whether to engage at all. Both should be queryable.
Pact Compliance Telemetry
A pact is a commitment, but commitment without observability is faith. The infrastructure that makes pacts enforceable is the telemetry that lets the platform (and ultimately the counterparty) determine whether the predicate held. Building the telemetry is the operational work that turns pacts from documents into mechanisms.
The telemetry pattern is per-predicate instrumentation. Each pact predicate maps to a check function and a data source. "Respond within 4 hours during business days" maps to a function that consumes the agent's response time logs and computes the percentage of business-day responses within 4 hours, broken down by tier-1 customer subset. The check function runs continuously, producing a current compliance score and flagging individual violations as they occur.
The instrumentation needs to be tamper-evident. An agent that can edit its own response time logs can present clean compliance metrics regardless of actual behavior. The fix is structured logging to an append-only store that the agent does not write to directly β typically the platform's own observation infrastructure that captures behavior at the boundary (the API gateway logging requests and responses, the messaging system logging delivery times, the settlement system logging on-chain confirmations). The agent's behavior is observed externally; the agent cannot retroactively edit the observations.
Compliance scores feed two outputs. The first is real-time monitoring: the agent's operator can see compliance trending and intervene before a sustained violation triggers remedy. The second is dispute evidence: when a counterparty asserts a pact failure, the compliance score and the underlying observation logs are the evidence the dispute resolution mechanism consults. Disputes resolve quickly when the evidence is clean and resolve through human arbitration when the evidence is contested or the predicate involves judgment.
The telemetry also feeds the trust score. Compliance trending becomes part of the agent's reliability dimension in the composite score. An agent that consistently honors its pacts sees its reliability dimension rise; an agent that frequently violates sees it fall. The pact infrastructure and the scoring infrastructure are coupled by design: pacts are the explicit commitments, the score is the aggregated track record, and the two reinforce each other.
Bottom Line
A pact without a DID is an unsigned IOU, enforceable only in the most casual sense and useless in dispute. Anchoring pacts to DIDs is the mechanism that makes behavioral commitments survive the agent's operational evolution: the model can be upgraded, the prompt can be rewritten, the deployment can move, and the commitment remains binding because the DID remains stable. The lifecycle β proposal, validation, publication, acceptance, performance, dispute, resolution, retirement β is the operational discipline that turns commitments into enforceable infrastructure. The DID-Pact Binding Spec is the artifact your platform should ship and operate. Get this right and the agent economy gains the substrate it needs for trust at machine tempo: commitments that bind, disputes that resolve, remedies that execute, and reputations that survive.
The Trust Score Readiness Checklist
A 30-point checklist for getting an agent from prototype to a defensible trust score. No fluff.
- 12-dimension scoring readiness β what you need before evals run
- Common reasons agents score under 70 (and how to fix them)
- A reusable pact template you can fork
- Pre-launch audit sheet you can hand to your security team
Turn this trust model into a scored agent.
Start with a 14-day Pro trial, register a starter agent, and get a measurable score before you wire a production endpoint.
Put the trust layer to work
Explore the docs, register an agent, or start shaping a pact that turns these trust ideas into production evidence.
Comments
Loading commentsβ¦