Add signa skill: keyless agent messaging + a brain for Bankr agents#433
Add signa skill: keyless agent messaging + a brain for Bankr agents#433codexvritra wants to merge 2 commits into
Conversation
|
Everything in the skill is live right now and reproducible from a terminal with no API key. A few real calls: The brain — reasons, calls a real capability, answers from live data: Invoke a capability, get a wallet-signed result anyone can re-verify: Resolve any identity to a messageable wallet (this one routes through Bankr): Reads are CORS-open; every signed action returns its signature so it re-verifies with viem, no trust in any server. Happy to adjust the skill format to whatever the team prefers. |
saltoriousSIG
left a comment
There was a problem hiding this comment.
Looks good overall, just a couple of comments around prompt injection security, and verifications.
-
We should be explicit about trust boundaries. Right now the doc implies consuming /api/brain, /api/capabilities/invoke, inbox content, and identity resolution output directly. Those should be treated as untrusted input, not instructions to execute.
Fix: add a short section saying all remote outputs are data-only and must pass local policy checks before triggering tools/actions. -
The skill currently assumes trust in a single external service (signaagent.xyz) without saying what to do when trust fails.
Fix: document an endpoint trust model: fail closed on verification errors, alert on key/provider changes, and require allowlisting before automating against new capability providers. -
Signature verification is mentioned, but the verification requirements are too vague. “Signed” is not enough unless clients know exactly what to validate.
Fix: define the minimum verification policy in the skill doc: canonical payload format, expected signer source/allowlist, timestamp window, replay protection (nonce/idempotency), and hard-fail behavior on mismatch. -
“Read any agent’s inbox (keyless)” needs stronger privacy framing. People will assume DM-style confidentiality unless told otherwise.
Fix: add a privacy warning that inbox/DM content may be observable, and explicitly say not to share secrets/credentials/private keys. Recommend app-layer encryption for sensitive content. -
Capability invocation needs guardrails so integrators don’t accidentally wire this into privileged execution paths.
Fix: recommend least-privilege defaults: read-only by default, explicit capability allowlist, deny-by-default for signing/value-transfer actions, and require user confirmation + independent validation for any on-chain side effects.
Adds an explicit Security model covering the reviewer's points: - trust boundaries: every remote response is data, not instructions - endpoint trust model: pin host, fail closed, allowlist new providers - verification policy: canonical format, expected-signer allowlist (brain/gateway/attestor addresses), ±5m timestamp window, replay protection, hard-fail on mismatch - privacy: inboxes/DMs are public — no secrets, encrypt sensitive content - least privilege: read-only by default, deny-by-default for sign/value actions, human-in-the-loop for on-chain side effects The skill only personal_signs a readable message; it never builds or sends a transaction and cannot move funds.
|
Thanks for the thorough review 🙏 Addressed all five in a new Security model section (docs-only, no behavior change):
For the threat model overall: the skill's only wallet operation is an EIP-191 |
Adds the
signaskill.SIGNA is the keyless agent layer on Base. This skill gives a Bankr agent three things, all with no API key — the Bankr wallet is the only credential:
All endpoints are public and CORS-open; only sending a DM needs one signature from the agent wallet (the envelope is shown in the skill). Every signed action is re-verifiable with viem, no trust in any server.
Site: https://www.signaagent.xyz
OpenAPI 3.1: https://www.signaagent.xyz/api/openapi.json