Conformance
This document defines the conformance contract for the Sigil Open Framework (SOF). It is the source of truth for any party building an SOF-conforming implementation, whether that party is Sigil Core, an audit firm, a custodian, an enterprise security team, or an independent open-source project. SOF is a specification, not a product. Sigil Sign is the reference implementation. Other implementations are explicitly welcome.Who this document is for. If you are integrating with an existing SOF deployment as a policy author or agent developer, you don’t need to read this; start with Getting Started. If you are building an implementation that issues Intent Attestations on behalf of operators, this document is the contract you must honor.
Conformance Vocabulary
This document uses the keywords MUST, MUST NOT, REQUIRED, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL with the meanings defined in RFC 2119 and RFC 8174. Implementations that fail to honor any MUST or MUST NOT clause are non-conforming.Conformance Surfaces
A conforming implementation is a signer: a service that accepts intent submissions, evaluates them against operator policy, and issues cryptographically signed authorization decisions. Conformance is evaluated across four surfaces:- Intent Submission Interface: the HTTP endpoint(s) operators use to submit intents
- Policy Evaluation: the
warranty.mdschema interpretation - Intent Attestation Issuance: the cryptographic envelope and claim set
- Verification Surface: how downstream gateways verify issued attestations
warranty.md schema for surface (2) is documented in the Fiduciary Agent Framework (FAF).
Conformance Levels
SOF defines two conformance levels.Core Conformance
A Core Conformant signer implements the minimum surface required for interoperability with SOF-aware policy authors and gateways. Most third-party signers will start here. Core Conformance does not expand an implementation’s enforcement surface beyond the interception point it controls. When a signer supportsbash intents, it evaluates the submitted command string. The integrating hook must submit that string before execution and block execution without approval. That command-string gate alone does not intercept child-process network egress after the shell starts. The bash.blocked_commands policy key is a command-string control, not a network control. A signer MUST NOT claim network-egress coverage from a bash gate alone.
Core Conformance requires implementation of the six behaviors detailed in CR-01 through CR-06 below:
- CR-01: Intent submission interface
- CR-02: Policy evaluation against Class 1 structural rules
- CR-03: Ed25519-signed Intent Attestation issuance per the spec
- CR-04: JWKS publication and issuer trust
- CR-05: Structured non-approval responses
- CR-06: Versioning
Extended Conformance
An Extended Conformant signer implements Core Conformance plus one or more advanced capabilities:- Class 2 semantic rules (intent pattern matching, contextual analysis)
- Class 3 consensus rules (durable holds, multi-party sign-off, human-in-loop gating)
- Capability broker integration (Sigil Vault or equivalent JIT credential release)
- Operator-facing oversight surface (real-time monitoring, kill switch, cryptographic countersignature)
Required Behaviors (Core Conformance)
A Core Conformant signer MUST implement the following behaviors. Each behavior maps to aMUST or MUST NOT obligation. Failure to honor any of them disqualifies the implementation from claiming conformance.
CR-01 — Intent Submission Interface
The signer MUST expose an HTTPPOST endpoint that accepts intent submissions in the request format defined in the sigil-attestations specification. The endpoint MUST be reachable over TLS 1.2 or higher.
The signer MUST NOT accept intent submissions over unencrypted transports.
CR-02 — Policy Evaluation
The signer MUST evaluate every received intent against the operator’swarranty.md policy before issuing any authorization decision.
At minimum, the signer MUST support the following Class 1 (structural) rule classes:
max_transaction_eth: hard ceiling on EVM transaction valueallowed_actions: global action allowlistallowed_chains: permitted chain ID allowlistchain_actions: per-chain action overrides
chain_actions defines rules for the submitted chainId, those per-chain actions take precedence over allowed_actions.
The signer MUST reject any intent that violates any Class 1 rule. The signer MUST NOT issue an Intent Attestation for an intent that fails policy evaluation.
CR-03 — Intent Attestation Issuance
For every intent that passes policy evaluation, the signer MUST issue an Intent Attestation conforming to the sigil-attestations specification. The attestation MUST:- Be a JWT signed with Ed25519 (
alg: EdDSA,crv: Ed25519) - Include the required claim set:
iss,sub,aud,exp,iat,jti,chainId, and one oftxCommitoruserOpHash - Set
issto a stable issuer identifier that downstream verifiers can configure as trusted - Include a
policyHashclaim: SHA-256 of the canonical JSON serialization of the evaluatedwarranty.mdpolicy - Have an expiry (
exp) of no more than 60 seconds from issuance (iat) - Be bound to the specific transaction commit or UserOp hash submitted
pqc claim (an ML-DSA-65 signature over the canonicalized claim set, per the sigil-attestations specification). A signer that does so SHOULD declare the pqc_hybrid_attestations extended capability and publish its ML-DSA-65 public key set. The Ed25519 signature remains mandatory; the pqc claim never replaces it.
CR-04 — JWKS Publication and Issuer Trust
The signer MUST publish its public verification key set at a stable URL using the JWKS format defined in RFC 7517. The conventional path is/.well-known/jwks.json.
The JWKS endpoint MUST be reachable without authentication. The signer MUST include the kid header in every issued attestation matching a key entry in the published JWKS.
The signer SHOULD rotate signing keys at least every 90 days. The signer MUST retain superseded public keys in the JWKS for at least the maximum attestation lifetime (60 seconds) plus a 24-hour grace window.
Conforming execution layers that consume attestations MUST treat issuer trust as verifier configuration. A valid signature from an untrusted iss MUST be rejected. Hosted Sigil verifiers default to sigil-core; federated deployments add approved issuers explicitly.
CR-05 — Structured Non-Approval Responses
When an intent fails policy evaluation, the signer MUST return a structured response instead of silently passing the request through. The response MUST use one of two statuses:DENIED: the intent violates policy and execution is blocked immediatelyPENDING: the intent requires a durable hold or human approval before any attestation may be issued
DENIED responses, the body MUST include:
status:DENIEDerror_code: a machine-readable code namespaced underSIGIL_*message: human-readable explanationintent_attestation: explicitlynull
PENDING responses, the body MUST include:
status:PENDINGmessage: human-readable explanationintent_attestation: explicitlynullunless and until the hold is resolved
PENDING response MUST also identify the durable hold and its expiry. The signer MUST NOT issue an attestation for that hold until the Class 3 resolution requirements in XR-02 complete.
The signer MUST NOT return silently passed-through responses, empty bodies, or generic HTTP error codes for policy violations.
CR-06 — Versioning
The signer MUST declare which SOF specification version it conforms to in:- The HTTP response header
X-SOF-Versionon every authorization decision - A versioned advertisement at
/.well-known/sof-conformance.json
sigil-attestations-v1.
Optional Behaviors (Extended Conformance)
Extended Conformance is opt-in. A signer MAY implement any subset of the following.XR-01 — Class 2 Semantic Rules
The signer MAY implement Class 2 rule evaluation, including:- Intent pattern matching against
warranty.md## customblocks deny_iffield-match expressionsdeny_stringsubstring matchingallow_onlyaffirmative allowlists (exact-match value sets per intent field; missing or unlisted values MUST be denied fail-closed, and deny rules MUST take precedence when both match)- Per-token threshold rules (
token.<SYM>.*in## evm):decimalsMUST be required for every token rule, a token-carrying intent with no matching rule MUST be denied fail-closed, missing or unparseable token amounts MUST be denied fail-closed, and ETH-denominated limits MUST NOT be applied to token amounts - Pinned token contract binding: when a matching token rule includes
addresses, the intenttargetAddressMUST match one of those addresses email.sendrecipient allowlist/denylist evaluation in the order denylist, allowlist, approval holdexecution_limitshard ceilings for tool calls, including fail-closedSIGIL_LIMIT_STORE_UNAVAILABLEbehavior when counter state cannot be updated- Policy format 2.0 typed HTTP method and host boundaries, MCP server and tool taxonomy, trailing-wildcard validation, shim provenance gates, and named count or USD caps
XR-02 — Class 3 Consensus Rules
A signer MAY implement Class 3 consensus rule evaluation, including durable hold creation, multi-party countersignature, and human-in-the-loop gating. A signer that claims Class 3 MUST expose active hold state at a documented authenticated HTTP endpoint or equivalent operator surface and MUST honor the 24-hour TTL minimum on consensus holds. For each hold, the signer MUST durably retain the tenant scope, exact intent binding, triggering policy rule, policy hash, creation time, expiry, and current status. It MUST accept a resolution only from an authenticated actor authorized for the hold’s tenant and MUST durably record resolver identity,APPROVE or REJECT decision, resolution time, an idempotency key or equivalent request identifier, and any reason the resolver supplies.
The signer MUST allow resolution only while the hold is active. An APPROVE MUST apply only to the exact held intent and MUST issue at most one short-lived attestation after the approval record is durable. A REJECT, expired hold, unauthorized resolver, tenant mismatch, intent mismatch, duplicate conflicting resolution, or unavailable hold store MUST fail closed and issue no attestation. A modified action MUST be rejected and resubmitted as a new intent. A resolved or expired hold MUST NOT return to PENDING.
XR-03 — Capability Broker Integration
The signer MAY integrate with downstream JIT capability brokers (Sigil Vault or equivalent) for credential release. The integration contract is defined separately in the Vault specification.XR-04 — Operator Oversight Surface
The signer MAY expose an operator-facing oversight surface providing real-time monitoring, manual countersignature, and emergency pause (kill-switch) functionality. Sigil Command is the reference implementation of this surface.Branding and Naming
A conforming signer MAY brand and market its implementation under any name. The phrase “Sigil Open Framework” and the spec version identifier (sigil-attestations-v1) are reserved namespaces and MUST appear truthfully in conformance declarations.
A signer MUST NOT advertise itself as the reference implementation unless explicitly authorized to do so by Sigil Core. Currently, the only reference implementation is the engine published by Sigil Core at sign.sigilcore.com.
A signer MAY describe itself as “SOF-conforming,” “an implementation of the Sigil Open Framework,” “a third-party SOF signer,” or equivalent.
Conformance Verification
Policy 2.0 and 2.1 Vector Corpus
The SOF Conformance Test Suite starts with the portable Policy 2.0 and Policy 2.1 vector corpus. A signer harness should run these fixtures against its parser, evaluator, counter store, and audit projection. The corpus provides:- A vector format covering typed HTTP, MCP, provenance, approval, and aggregate-cap decisions
- A negative-test corpus for adversarial intent submissions
- Promotion rules for connector-specific vectors, including one controlled OBSERVE-to-ENFORCE run
conformance-suite.
Self-Assertion (Interim)
Until an automated runner and formal verification workflow ship, conformance is asserted by the signer operator. To self-assert:- Implement every Core Conformance behavior in this document
- Verify interoperability against the reference implementation at
sign.sigilcore.com - Publish a conformance declaration at
/.well-known/sof-conformance.jsonon your signer’s domain (schema below) - Open a registry issue on the sigil-open-framework repository with a link to your conformance declaration
self-asserted flag. Once the automated runner ships, self-asserted implementations are invited to undergo formal verification.
Conformance Declaration Schema
Schema field notes:conformance_levelMUST be eithercoreorextended.extended_capabilitiesMUST be an array. Core-only signers use an empty array.- Valid extended capability identifiers are
class_2,class_3,capability_broker,operator_oversight, andpqc_hybrid_attestations. policy_schema_versions_supportedMUST list everywarranty.mdpolicy schema version the signer accepts.
Registry of Conforming Implementations
Third-party implementations are added to this registry by opening a PR against this document, including a link to the implementation’s conformance declaration.
Stability and Versioning
The conformance contract is versioned with the underlying specification. Currently, the contract is defined forsigil-attestations-v1.
Backwards-incompatible changes to the conformance contract will result in a new specification version (sigil-attestations-v2, etc.). Conforming implementations are expected to declare which spec version(s) they support; multi-version support is OPTIONAL but RECOMMENDED.
Deprecation policy: any deprecated MUST or MUST NOT clause will remain in effect for a minimum of 180 days after deprecation is announced, and will be retired only on a major version bump.