sigelo — portable identity for AI agents

Draft: the wire may change; the keeper is experimental, stagenet only; unaudited. Wire sigelo/0, packages 0.1.0, nothing published to a registry yet. SPEC.md: "Nothing is stable until v1.0"; VERSIONING.md: sigelo/0 freezes at tag v0.2 after 30 days with no wire change. See versioning.

Security policy

sigelo is maintained by one pseudonymous person, csigelo. Nobody here will ask for your real name, and you need not give one. Reports are read by that maintainer only.

Draft. Decided at D1 (2026-10-01): the pseudonym and GitHub account csigelo (https://github.com/csigelo/sigelo), the domain sigelo.io, security@sigelo.io for reports and contact@sigelo.io for anything that is not a vulnerability — both mailboxes exist and are read — and a SimpleX contact address for both. Still <angle brackets>: the age recipient and the SimpleX address itself. Until the repository is public, e-mail is the working channel. All contacts: https://sigelo.io/contact.html.

Reporting

In order of preference:

  1. GitHub private vulnerability reporting on this repository ("Security" → "Report a vulnerability"). No account linkage beyond your GitHub handle.
  2. Email security@sigelo.io (the mailbox exists and is read), encrypted to this age recipient once it is published: age1<to-be-filled-at-D1> — also published at https://sigelo.io/.well-known/security.txt (RFC 9116). Unencrypted mail is read, but assume it was not private.
  3. SimpleX: https://smp10.simplex.im/a#18LjfJawmkVxvFtCHFo-yyzPo8Kr3gPLNts_ovwxmZM. The address lives on public SimpleX relays, not on a server this project runs, and the same address also serves general contact (https://sigelo.io/contact.html).

Say what you ran, against which commit, what happened and what you expected. A failing vector, bundle or request is worth more than prose. State what you did not verify.

Scope

Out of scope

What to expect

Safe harbour

Good-faith research on your own keys, identities, keepers and wallets, on stagenet or testnet, is welcome and will not be pursued in any way. Do not touch other people's keepers, tokens, wallets or identities, do not spend coins that are not yours, and do not publish before the 90 days are up or a fix ships, whichever comes first, unless we agree otherwise. If you are unsure whether something is in bounds, ask first through any channel above.

A live keeper compromise

If you run a keeper and believe its host, a token or spend.key is compromised, act first: follow INCIDENT.md (stop, sweep to the vault, recovery-rotate, report). Report to us afterwards if you suspect a sigelo bug caused it, with the preserved spend.log (it holds no secrets; it names destinations, amounts and purposes, so redact what you must). Never send spend.key, a token, a seed or the 25 words to anyone, including us.

Known unaudited areas

Nothing here has been reviewed by anyone outside the project; every review so far was done by Claude models. External review targets, in priority order (ROADMAP §5.4):

  1. go/jcs.go, ts/src/jcs.ts — canonicalisation and the strict parser.
  2. go/sigelo.go, ts/src/sigelo.ts §9 — chain walk, precedence, forks, cycles, discard.
  3. go/monero.go, ts/src/monero.ts — Keccak, base58, point decoding, SigV2, subaddresses.
  4. ts/src/keys.ts, go/keys.go — HKDF paths, sc_reduce32, the 25-word mnemonic.
  5. ts/src/ceremony.ts, ts/src/offline.ts — secret handling, age invocation.
  6. spend/service.ts, approval.ts, tree.ts, policy.ts — the keeper.

The keeper is experimental and stagenet-only until this list is reviewed.