NO CUSTODY
No seed phrase or private-key custody in SafeSign or Security Core.
UTXO Suite documentation is now centered on transaction security: how requests enter SafeSign, what Security Core may analyze, where user authorization remains, and which integration surfaces are current versus future work.

These constraints are more important than any framework choice. If an integration breaks one of them, it is outside the intended product model.
No seed phrase or private-key custody in SafeSign or Security Core.
Do not mutate the transaction payload presented by the calling wallet or dApp.
Do not auto-sign or auto-broadcast. Authorization remains explicit.
Unavailable evidence is uncertainty — never a silent allow.
The integration boundary should preserve the original request while adding human-readable evidence around it.
Receive a supported wallet request plus the context available at the integration boundary.
Normalize method, parameters, typed data, approvals or supported PSBT structure.
Enrich with deterministic policy, destination context and simulation evidence when available.
Present material risk and uncertainty in SafeSign; the user or calling wallet makes the final authorization.
The repository contains a source scaffold for Chrome/Brave. It wraps ethereum.request in page context, communicates with an isolated content script and waits for an explicit continue/reject decision. A production extension build pipeline is still required.
// browser/page context — conceptual integration boundary
const original = ethereum.request.bind(ethereum)
ethereum.request = async (request) => {
const decision = await reviewWithSafeSign(request)
if (decision !== "continue") throw new Error("User rejected")
return original(request) // forward unchanged
}Local preferences only: enabled state, strict mode, allowlisted domains and dismissed education cards. Never persist private keys, seeds, raw signatures or full transaction history.
Each surface has a different implementation boundary. Documentation names that boundary instead of collapsing everything into a single 'released' label.
Guard — Manifest V3 source foundation exists; production build/distribution remains separate work.
Wallet — current UI surface exists; real send/approve/sign/connect flows must invoke SafeSign before confirmation.
Relay — route/fee/PSBT analysis surface exists; future signing and route execution should preview PSBTs through SafeSign.
Preserve the request, derive structured evidence, record unknowns and return an explainable decision without taking signing authority.
Capture origin, chain, method, payload hash and stated intent before analysis.
Keep facts, provenance, freshness, contradictions and unknowns as separate nodes.
Return ALLOW, WARN, REVIEW or BLOCK with reason codes and the reviewed payload hash.
Preserve the request, derive structured evidence, record unknowns and return an explainable decision without taking signing authority.
{
"origin":"https://app.example",
"chainId":1,
"method":"eth_signTypedData_v4",
"payloadHash":"sha256:...",
"intent":"swap 1 ETH"
}{
"decision":"REVIEW",
"reasonCodes":["AUTHORITY_EXCEEDS_INTENT"],
"unknowns":["spender_reputation"],
"payloadHash":"sha256:..."
}If the payload changes after review, the decision is invalid and a new review is required.