Getting Started
Policy 2.3 can block or redact exact covered MCP tool results and can use an
operator-hosted scanner or time-bounded observe mode on the maintained,
inspection-enabled Sigil MCP Proxy path. Response content stays inside the
operator trust boundary. See Policy 2.3 response controls
for exact coverage and limitations.
https://sign.sigilcore.com
Choose Your Path
Three roles, three starting points:- Integrating an agent with SOF? This page is for you. Use the Sigil API or self-host the reference implementation. The API Quick Start below is the fastest route.
- Hacking on SOF locally? Use the Developer Toolkit, with a mock Express.js engine and Python LangChain authorizer, no API key required.
- Building your own SOF-conforming signer? (Audit firms, custodians, enterprise security teams.) Read the Conformance Contract. It defines what your implementation must honor to interoperate with the SOF ecosystem.
API Quick Start
The fastest path to your first governed action. The Sigil API handles signing infrastructure, key management, and attestation issuance so you do not have to run anything yourself. 1. Get your API key. Register your email at sigilcore.com/tools/keys to receive a Developer tier key. 1,000 governed actions per month, free. 2. Sign your warranty.md. Use Sigil Warrant to define your policy and generate a signedwarranty.md. The tool produces your Ed25519 keypair in the browser, signs the policy, and gives you your SIGIL_OPERATOR_PUBLIC_KEY value.
3. Authorize your first action. Submit an intent to POST /v1/authorize with your API key. If the intent passes your policy, you receive an Ed25519-signed JWT. Attach it to your transaction via Authorization: Bearer <jwt> and route through the Sigil RPC gateway.
That is the complete flow. The sections below cover each step in detail.
Pricing tiers:
Need to run your own signing infrastructure? sigil-sign is MIT-licensed and self-hostable. See the Self-hosted deployment section below. For most teams, managing your own cryptographic signing layer is unnecessary overhead.
Before You Deploy: Two Prerequisites
Whether you use the hosted Sigil API or self-host sigil-sign, two things must be in place. Without both, the service refuses to authorize anything. This is intentional: the service will not run without a verified operator policy.1. A signed warranty.md file
Your warranty.md defines what your agent is allowed to do. The file must be signed with your Ed25519 operator key. An unsigned policy file is rejected at startup. Use Sigil Warrant to generate, sign, and download yourwarranty.md. Two paths are available:
- Warrant Builder: guided step-by-step flow for common policies, including repository and Git controls plus the 28 supported database operations. No policy syntax required. Recommended for first-time operators.
- Manual Warrant: choose the structured Form for common policies or Advanced Mode to author any field that the current Sign policy contract accepts. Advanced Mode preserves the exact source bytes through validation, signing, download, re-import, and deployment. See the current generated authoring-capability matrix before choosing a surface.
SIGIL_OPERATOR_PUBLIC_KEY value ready to paste. An unchanged signed import verifies with its operator public key and can download or deploy without generating a new keypair or re-signing.
Deploy the signed warranty.md to your server and set WARRANTY_PATH to its location. If you omit this path, the service looks for config/warranty.md relative to process.cwd().
2. SIGIL_OPERATOR_PUBLIC_KEY environment variable
Set this to the base64url-encoded public key value Sigil Warrant gives you in Step 1. Sigil Lex verifies your policy signature against this key at startup..env.local (development) or your production environment. If it is missing, the service throws with:
operator signature β policy content β Intent Attestation JWT
Every attestation your service issues is verifiably linked to the exact policy version you signed and deployed. If anyone modifies the warranty.md after signing, Sigil Lex detects it on the next restart and refuses to start.
Sigil Warrant is the tool that satisfies both requirements. It lives at sigilcore.com/tools/warrant. Use the guided Builder or Manual flow to generate your keypair, define your policy, and download the signed file. The whole flow takes under two minutes.
The Execution Flow
Once your policy is deployed, executing an agent-driven transaction is a strict two-step process:- Request Authorization: Submit your intent to the firewall to receive a short-lived Intent Attestation.
- Execute: Submit the transaction to the Sigil RPC/Bundler gateway, attaching the attestation as your authorization bearer token.
Step 1: Request an Intent Attestation
Before your agent can route a write transaction, it must obtain an Intent Attestation. Endpoint:POST /v1/authorize
framework: A string identifying your agent framework (e.g."agent-hooks","eliza","langchain","ironclaw"). Any non-empty string is accepted. See the Framework Registry for known values.txCommit: Must be a lowercase 64-character hex SHA-256 string. Do not include a0xprefix.chainId: Must be in your warranty.mdallowed_chainslist. Supported values: 1, 10, 56, 137, 999, 8453, 42161.intent.action: Must be in your warranty.mdallowed_actionslist (or the per-chain override for the requested chain).intent.token(optional): ERC-20 token symbol ("USDC") or0xcontract address. When present, the policyβstoken.<SYM>.*rules govern the amount; without a matching rule the intent isDENIED. If the matched rule pins addresses,targetAddressmust match one of them. Omit for native ETH.intent.to(optional): recipient email address or array of addresses foremail.sendintents. Required when the policy declaresemail.allowed_recipientsoremail.blocked_recipients.
intent_attestation field, with a parallel ML-DSA-65 post-quantum signature embedded in its pqc claim. The JWT embeds a policyHash, a SHA-256 of the exact policy content that was evaluated, excluding the signature block. This is your cryptographic proof that the correct policy version was in effect.
Step 2: Route the Transaction
Once you hold a valid Intent Attestation, you have exactly 60 seconds to execute the transaction. Read operations are public. Write operations require your Intent Attestation. Endpoints:- Standard EVM:
POST /rpc/:chainId - Account Abstraction:
POST /bundler/:chainId
Authorization: Bearer <jwt> or Sigil-Receipt: <jwt>.
Verifying Attestations Locally
You do not need to trust the firewall blindly. You can verify Intent Attestations locally using Sigilβs published JWK set. Endpoint:GET /.well-known/jwks.json
Verification rules are strictly defined in our canonical specification: sigil-attestations.
Defining Your Policy
Your warranty.md uses typed section blocks. Sigil Lex evaluates them at runtime to govern agent behavior. Use Sigil Warrant to generate a signed policy interactively. The tool produces a signedwarranty.md with an embedded Ed25519 operator signature, the cryptographic proof that the policy evaluated at runtime is the one you authorized.
Pre-built templates for common deployment contexts are available in the FAF policy-templates directory.
Policy Format Reference
Sigil Lex parses a strict structured Markdown format. A 1.x policy requires an enforceable EVM, tool-call, custom, or model-budget rule. A 2.0 or profileless 2.1 policy may also consist of enforced## soft_limits. A 2.1 resource profile adds a trusted execution-shim boundary only when the policy declares one of the resource-profile blocks. Unknown fields are rejected at parse time. The ## signature block at the end is generated by Sigil Warrant; do not edit it manually.
## mcp block declares an allowed server or allowed tool boundary. blocked_tools only narrows an existing allow boundary and never grants access by itself, so a block containing only blocked_tools remains deny-by-default. Named caps live under ## soft_limits and consume budget only after the base policy approves the action.
Model budget brakes require a compatible adapter to report cumulative provider usage for the current
intent.task_id in intent.metadata.model_usage. Sigil does not proxy LLM inference, bill model calls, or maintain a provider price table. Dollar caps depend on adapter-reported estimated_spend_usd; token caps depend on provider-reported token usage.
Compatibility:token.<SYM>.*,email.allowed_recipients/email.blocked_recipients,allow_only, and tool-callexecution_limitsship with sigil-sign builds from June 2026 onward. Model budget fields require v2-compatible sigil-sign and adapter builds. Older strict runtimes can reject these fields at parse time; upgrade before publishing policies that rely on them. Policies that do not use the new fields keep their existingpolicyHashunchanged.
Updating Your Policy
If you update your warranty.md, you must re-sign it with Sigil Warrant before redeploying. An updated but unsigned policy will be rejected at startup. Keepversion: 2.0.0 unchanged for typed HTTP policies because version selects the policy format, not an operator-managed revision. The schema has no separate revision field; policyHash changes with the signed policy content and distinguishes one deployed revision from another in subsequent attestations.
Self-hosted Deployment
sigil-sign is MIT-licensed and can be run on your own infrastructure. This path gives you full control over the execution firewall, policy storage, and signing keys. For most teams, the hosted Sigil API is the faster and lower-maintenance option.
The minimum deployment surface:
SIGIL_OPERATOR_PUBLIC_KEY in .env.local and place your signed warranty.md at the path WARRANTY_PATH points to (defaults to config/warranty.md). The prerequisites and execution flow documented above apply identically to self-hosted deployments.
Building a Conforming Signer
If you are an audit firm, custody provider, or enterprise security team building your own SOF-conforming signer rather than running the reference implementation, the integration path is different. Start with the Conformance Contract. It defines exactly what your signer must implement (six MUST clauses) and what it may extend. The sigil-attestations specification defines the wire format. The Conformance Contract defines the obligations against that format. Together they are the complete contract for any third-party signer. Until the SOF Conformance Test Suite ships, conformance is asserted by the signer operator and verified through direct integration testing with the reference implementation atsign.sigilcore.com. See the self-assertion protocol for the registry process.