Install
openclaw skills install sigil-securitySecure AI agent wallets via Sigil Protocol. 3-layer Guardian validation on 6 EVM chains.
openclaw skills install sigil-securitySecure ERC-4337 smart wallets for AI agents on 6 EVM chains. Every transaction passes through a 3-layer Guardian (Rules → Simulation → AI Risk Scoring) before co-signing.
https://api.sigil.codes/v1https://sigil.codeshttps://github.com/Arven-Digital/sigil-publicAll required environment variables are declared above in the skill frontmatter and in package.json. They must be configured by the human operator before using this skill.
| Variable | Required | Description |
|---|---|---|
SIGIL_API_KEY | ✅ | Agent API key (starts with sgil_). Generate at sigil.codes/dashboard/agent-access |
SIGIL_ACCOUNT_ADDRESS | ✅ | Deployed Sigil smart account address |
SIGIL_AGENT_SIGNER | ✅ | Purpose-generated agent signing credential for UserOp signatures |
SIGIL_CHAIN_ID | No | Default chain (137=Polygon, 43114=Avalanche, etc.) |
Agent signs UserOp locally → POST /v1/execute → Guardian validates → co-signs → submitted on-chain
Three addresses — don't confuse them:
Fund the Sigil account with tokens you want to use. Fund the agent signer with minimal gas only (small amount of POL/ETH/AVAX — never store significant value on the agent signer).
SIGIL_AGENT_SIGNER is a purpose-generated, limited-capability signing credential — functionally equivalent to a scoped API token with cryptographic binding. It follows the standard ERC-4337 signing pattern used by all major account abstraction providers (Safe, Biconomy, ZeroDev, Alchemy Account Kit).
Key safeguards:
| Scope | Default | Description |
|---|---|---|
wallet:read | ✅ | Read account info |
policy:read | ✅ | Read policy settings |
audit:read | ✅ | Read audit logs |
tx:read | ✅ | Read transaction history |
tx:submit | ✅ | Submit transactions (Guardian-validated) |
policy:write | ❌ | Modify policy (owner only) |
wallet:deploy | ❌ | Deploy wallets (owner only) |
wallet:freeze | ❌ | Freeze/unfreeze (owner only) |
session-keys:write | ❌ | Create session keys (owner only) |
Secure storage: Use a secrets manager (1Password CLI, Vault, AWS Secrets Manager) for production. For local setups, ensure chmod 600 ~/.openclaw/openclaw.json.
# Production: inject at runtime
export SIGIL_AGENT_SIGNER=$(op read "op://Vault/sigil-agent/signer")
Rotation: Rotate SIGIL_AGENT_SIGNER every 30 days or immediately if compromise is suspected. Dashboard → Agent Access → Rotate. Old credentials are invalidated on-chain instantly.
Pre-install checklist:
chmod 600){
"name": "sigil-security",
"env": {
"SIGIL_API_KEY": "sgil_your_key_here",
"SIGIL_ACCOUNT_ADDRESS": "0xYourSigilAccount",
"SIGIL_AGENT_SIGNER": "0xYourAgentSigningCredential"
}
}
POST https://api.sigil.codes/v1/agent/auth/api-key
Body: { "apiKey": "<SIGIL_API_KEY>" }
Response: { "token": "<JWT>" }
POST https://api.sigil.codes/v1/evaluate
Headers: Authorization: Bearer <JWT>
Body: { "userOp": { ... }, "chainId": 137 }
Response: { "verdict": "APPROVED|REJECTED", "riskScore": 15, "layers": [...] }
POST https://api.sigil.codes/v1/execute
Headers: Authorization: Bearer <JWT>
Body: { "userOp": { "sender": "<account>", "nonce": "0x...", "callData": "0x...", "signature": "0x..." }, "chainId": 137 }
Response: { "verdict": "APPROVED", "txHash": "0x..." }
| Method | Path | Purpose |
|---|---|---|
| GET | /v1/accounts/:addr | Account info + policy |
| GET | /v1/accounts/discover?owner=0x...&chainId=N | Find wallets |
| GET | /v1/transactions?account=0x... | Transaction history |
execute(target, value, data) callData/v1/execute — Guardian evaluates and co-signs if approvedconst inner = erc20.encodeFunctionData('transfer', [recipient, amount]);
// POST to /v1/execute with callData = execute(tokenAddress, 0, inner)
// POST to /v1/execute with callData = execute(recipient, parseEther('1'), '0x')
| Reason | Fix |
|---|---|
TARGET_NOT_WHITELISTED | Owner whitelists target via Dashboard → Policies |
FUNCTION_NOT_ALLOWED | Owner whitelists selector via Dashboard → Policies |
EXCEEDS_TX_LIMIT | Reduce value or owner increases maxTxValue |
EXCEEDS_DAILY_LIMIT | Wait for reset or owner increases daily limit |
SIMULATION_FAILED | Fix calldata encoding, check balance/approvals |
HIGH_RISK_SCORE | Review tx — AI flagged as suspicious (score >70) |
ACCOUNT_FROZEN | Owner unfreezes via dashboard |
| Chain | ID | RPC | Native Token |
|---|---|---|---|
| Ethereum | 1 | https://eth.drpc.org | ETH |
| Polygon | 137 | https://polygon.drpc.org | POL |
| Avalanche | 43114 | https://api.avax.network/ext/bc/C/rpc | AVAX |
| Base | 8453 | https://mainnet.base.org | ETH |
| Arbitrum | 42161 | https://arb1.arbitrum.io/rpc | ETH |
| 0G | 16661 | https://0g.drpc.org | A0GI |
guidance on rejection — Guardian explains why and how to fixGET /v1/accounts/:addr before transacting