Concepts & architecture
The monorepo, the ports, and the data flow.
Data flow
The buyer sends an unsigned transaction. Sigil returns the sealed verdict
before the wallet is allowed to sign, while the receipt's Merkle root is
published separately to SigilRegistry for trustless verification.
The ports pattern
The engine depends on interfaces, never data sources:
SimulatorPort.simulate(tx, decoded)→ balance/approval diffReputationPort.profile(address, chainId)→ labels, age, verificationTokenSafetyPort.scan(token, chainId)→ honeypot/taxes/powersPanelPort.adjudicate(evidence)→ votes (optional)
@sigil/intel swaps live adapters behind the same ports with zero pipeline changes; partial configuration always works, and outages degrade into recorded coverage gaps. Live sources: GoPlus (token security + address security), OFAC SDN sync, keyless eth_getCode for real contract detection, real eth_call simulation with state overrides, and OKLink (key-gated). Every finding carries the source names that produced it.
Monorepo layout
| package | role |
|---|---|
packages/core | deterministic engine: decoder, scorer, sealer, pipeline, ports. 83 tests incl. a 42-row labeled benchmark corpus |
packages/client | zero-dependency typed SDK plus LangGraph and Eliza guards |
packages/contracts | SigilRegistry.sol + a cross-language test proving TS Merkle proofs verify inside the real compiled bytecode (in-process EVM) |
packages/mcp-server | the ASP: MCP tools, x402 paywall, manifest, receipts |
packages/intel | live threat-intel adapters behind the ports |
packages/panel | escalate-only three-persona adjudicator, dissents shown |
apps/console | amber-on-black review console + landing + Sigil Copilot |
apps/docs | this site |
Design commitments
- No Docker — plain Node 22, serverless-deployable, all tests in-process.
- Deterministic-first — the rubric decides; the panel may only escalate inside the ambiguous band.
- Honest coverage — what wasn't checked is declared, never papered over.
- Verifiable receipts — every verdict is checkable offline and on-chain.