Sign at the edge
DeepBookie’s tools come in two kinds.
- A read runs on the server and returns JSON. No wallet, no signing.
- A write builds an unsigned Sui transaction and hands it back. It stops there. Nothing is signed. Nothing is sent.
The agent proposes the transaction. You sign it. The agent never holds your key.
The core never holds a key
@deepbookie/core has no key and no way to sign. A write tool is typed as a build() that returns an unsigned Transaction — there is no execute():
/** A write tool builds an unsigned Sui transaction. You sign it at the edge. */
export interface WriteTool {
kind: 'write';
build: (args, ctx) => Promise<Transaction>;
}
The adapter exposes read() and build() — and nothing else. No code in core touches a private key, signs bytes, or submits a transaction. The same registry powers the web app, MCP, CLI, and the Claude skill. So this holds true everywhere.
The transaction the agent builds is the exact transaction you sign. There is no second, hidden step in between.
Where signing happens
The unsigned transaction travels to the edge — the device in front of you — and that is the only place a signature gets added.
// @deepbookie/node — the edge for CLI and MCP
const tx = await api.build(tool.name, args); // unsigned, from core
const res = await signAndExecute(ctx.client, tx, kp); // signed locally, then submitted
The agent can build any trade. It can never commit one. If there is no edge — no wallet connected, no local key — the transaction just never gets signed.
What the receipt shows
Every write shows up as a receipt with two states:
- Ink — the proposed, unsigned transaction the agent built.
- Green — the signed transaction, confirmed on-chain by its digest.
Ink means proposed. Green means done. You move from one to the other when you sign at the edge.