Your answers, signed. Your keys, scoped.
An agent gets only what it needs to reach you, never a key to paste, and nothing it can approve on its own. Every answer you give comes back with a signature anyone can check.
An agent gets only what it needs to reach you, never a key to paste, and nothing it can approve on its own. Every answer you give comes back with a signature anyone can check.
kabu login --device prints a code. Approve it in the Kabu app, and this computer gets its own key, saved with mode 600 and never printed.
$ kabu login --device
In the Kabu app, open Connect a computer and enter the code: KBRT-QNWX
Or approve it in a browser: https://usekabu.com/app/connect?user_code=KBRT-QNWX
Only an admin or owner of the workspace can approve it.
{"ok": true, "org_name": "Acme", "project": "acme-api", "config_path": "/Users/you/.config/kabu/config.json"}Agent, service and admin keys carry only their own scopes. No key may both send asks and answer them, so an agent cannot approve itself.
Learn how{"status": 403, "code": "self_response_forbidden", "detail": "A key that sends as an agent cannot speak as a human."}An ES256 receipt binds what was asked, the action and the answer. Check it with the public keys at /.well-known/jwks.json. A receipt holds digests, never your answer itself.
{
"v": "1",
"iss": "https://api.usekabu.com",
"aud": "org_01K8Y3M7Q2T9X5W1N6P4R8V3KD",
"msg": "msg_01K8ZD6N2Q9V4T8X1M5R7W3PHC",
"decision": "approve",
"sub": "rcp_01K8Y4N2T7Q5W9X3M1P6R8V2JE",
"assurance": "app",
"via": "lock_screen",
"req_digest": "sha256:9c1e5b7f…",
"value_digest": "sha256:4d2a8e60…",
"resolved_at": 1793347212
}Message content, answers, API keys and webhook secrets are sealed with AES-256-GCM under their organisation's own key.
With --sensitive, notifications on the Lock Screen show only that Kabu needs you; the details open in the app.
Kabunow
Kabu needs you
Open Kabu to review
An ask marked --irreversible gets no Lock Screen buttons. You answer it in the app after Face ID, Touch ID or your passcode, and it is never settled by default.
$ kabu ask "Drop the staging database?" --irreversible
{"choices": ["approve"], "decision": "approve", "id": "msg_01K8ZJ8T3W6Q1X9M4P7N2R5VKC", "option": "approve", "outcome": "answered", "status": "answered", "text": null, "values": null, "via": "app"}
# exit 0: approved in the app, after Face IDOne line installs the kabu CLI and connects this computer. Approve its code in the Kabu app, and your agents can tell you what they are doing, and ask.
mkdir -p ~/.local/bin && curl -fsSL https://usekabu.com/kabu -o ~/.local/bin/kabu && chmod +x ~/.local/bin/kabu && export PATH="$HOME/.local/bin:$PATH" && kabu login --device