Know what your agents are doing. Answer when they ask.

Kabu brings your coding agents to your iPhone: what finished, what failed, the file to look at. When an agent needs you, approve, pick an option or type a reply, and your answer goes back to it, signed.

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

The line above installs kabu and prints a code to approve in the Kabu app. No key to paste. You need an iPhone, and Python 3.9 or later for the CLI.

acme-api · claude-code
$ kabu send "Tests passed" "412 passed, 0 failed"
{"ok": true, "id": "msg_01K8ZB4TQ2N6X9M3C7D5F8H1JW", "status": "sent", "attachments": 0}
$ kabu ask "Deploy v1.4.2 to prod?" "Canary green for 30 min"
# waiting for your answer…
{"choices": ["approve"], "decision": "approve", "id": "msg_01K8ZD6N2Q9V4T8X1M5R7W3PHC", "option": "approve", "outcome": "answered", "status": "answered", "text": null, "values": null, "via": "lock_screen"}
# exit 0 · deploying v1.4.2…

Signed receipt · ES256 · verify with JWKS

An agent tells you something, then asks; your answer goes back. The terminal runs kabu send "Tests passed", and a pigeon carries it to the phone's Lock Screen. Then it runs kabu ask "Deploy v1.4.2 to prod?"; the question lands above the first notification with Approve and Reject. Approve is tapped, the pigeon carries the answer back, and the terminal prints decision approve, exit 0, with a signed receipt.

Know when it finishes, or fails.

kabu send puts the result on your Lock Screen, with the screenshot or report that shows it.

Learn how
acme-api — zsh
$ kabu send "Tests passed" "412 passed, 0 failed" --file coverage.png
{"ok": true, "id": "msg_01K8ZB4TQ2N6X9M3C7D5F8H1JW", "status": "sent", "attachments": 1}

Answer when they ask.

kabu ask waits for you. Approve, pick an option or type a reply from the notification, and the agent carries on with your answer.

Learn how
acme-api — zsh
$ kabu ask "Deploy v1.4.2 to prod?" "Canary green for 30 min"
{"choices": ["approve"], "decision": "approve", "id": "msg_01K8ZD6N2Q9V4T8X1M5R7W3PHC", "option": "approve", "outcome": "answered", "status": "answered", "text": null, "values": null, "via": "lock_screen"}
# exit 0: approved, so the deploy goes ahead (a reject exits 10)

Every answer comes back signed.

Each answer carries an ES256 receipt over what was asked and what you answered, which anyone can check against Kabu's public keys.

Learn how
A receipt's payload, decoded (excerpt)
{
  "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
}

What's new

  1. · Deprecated · MCP

    The kabu_* MCP tools are retired

    kabu_notify, kabu_ask and the other kabu_* tools now get the MCP error unknown tool. Use notify_human, ask_human, wait_for_human_answer and upload_file_for_human.

  2. · New · MCP

    MCP asks can wait up to an hour

    ask_human and wait_for_human_answer take max_wait_seconds, up to 3600, and send a progress notification about every 15 seconds while they wait, so an agent can wait until you reply.

  3. · New · CLI, App

    Log in without a key, and report a long run's progress

    Connect a computer by approving a code in Kabu, with no key to paste, and report a long run's status and progress with kabu session start, update and end.

View the changelog

Put your agents on your phone.

One 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