kapable CLI

A single native binary (linux-amd64, darwin-arm64) that mirrors the SDK's customer-tier surface from your terminal — auth, board, data, comms, knowledge, store, and a local dev/preview supervisor. It rides kapable-sdk exclusively, so anything you can do with the Rust SDK you can do from the CLI.

Install

curl -fsSL https://cli.kapable.ai/install.sh | sh

Detects your OS/arch (linux or darwin, amd64 or arm64), downloads the latest stable build from the public release registry, verifies its SHA-256, and installs to ~/.local/bin/kapable (no sudo). Re-running the same command upgrades in place.

Overrides

KAPABLE_INSTALL_DIR / --install-dir <dir> changes the install location (default ~/.local/bin). KAPABLE_CHANNEL / --channel <name> picks a release channel (default stable). If ~/.local/bin isn't on your PATH, the installer prints how to add it.

Verify the install:

kapable --version

Staying current

The installed binary updates itself — no need to re-run the installer:

kapable self-update --check   # report whether a newer stable build exists; changes nothing
kapable self-update            # download, verify SHA-256, and atomically replace this binary

The replace is atomic: the new binary is staged, proven to run (--version succeeds), and only then swapped in with a single rename. Any failure before that point leaves your current binary untouched. On macOS, a Gatekeeper quarantine strip runs automatically; if the staged binary still won't launch, an ad-hoc codesign retry kicks in as a safety net.

Authenticating

Two credential shapes, resolved in the same precedence order on every command: flag > environment variable > stored config (an org key in [api] outranks a stored session in [session]).

kapable auth login --email you@example.com   # prompts for your password
kapable auth me                 # confirm — prints identity, org, role
kapable auth logout             # clear the stored session (any [api] org key stays)

Login persists a session grant to ~/.kapable/kapable.toml under [session] (session_token — the durable kses_… token; the short-lived JWT is never persisted).

kapable auth set-key sk_org_...   # persists a durable org key under [api]

# or, for a single invocation / headless agent — no file written:
export KAPABLE_API_KEY=sk_org_...
kapable auth me

# or, per-command override (highest precedence):
kapable --api-key sk_org_... auth me

Env vars & flags

NameKindEffect
--api-key <key>global flagCredential for this invocation only. Highest precedence.
--api-url <url>global flagBase URL for this invocation only.
KAPABLE_API_KEYenv varCredential, second precedence. Recommended for CI/agents.
KAPABLE_API_URLenv varBase URL, second precedence.
--config <path>global flagConfig file path (default ~/.kapable/kapable.toml).
KAPABLE_RELEASES_URLenv varself-update only — override the release registry (staging/testing).

With nothing set, the base URL defaults to https://api.kapable.ai and an unauthenticated command fails with an actionable Not authenticated. Run `kapable auth login …` … error — never a silent 401.

Command tree

GroupCovers
kapable artifactpublish a document to the org gallery, list, get, html, verdict (below)
kapable authlogin, set-key, logout, me, orgs, keys, apps
kapable boardstories, sprints, plans, products, comments
kapable builderlive previews for the design.kapable.ai workspace
kapable commsagents, rooms, messages, email
kapable datatables, rows, search
kapable feedbackfile a bug or idea straight into the org's Tickets queue (feedback bug|idea "<title>", body via --body/stdin; needs a logged-in session)
kapable knowledgesources, claims, predicates, tensions
kapable storebuckets, objects
kapable devlocal dev server + preview tunnel
kapable notifysend a one-line status update to the operator (agent surface)
kapable self-updatecheck for / install the latest published build
kapable agentlocal worker supervisor (run/swap/status) — node-agent role, not the customer surface

Every subcommand supports --help. Output defaults to JSON (scriptable); this mirrors the SDK's ListResponse<T> shape for list endpoints (data + total).

Publishing artifacts — kapable artifact

The document is read from a file, never from an argument. That is the point of the command: prose passed through a shell string can break an interpolation on an apostrophe or a $, leaving the previous content in the payload — and the publish still returns 200. Use - to read stdin.

kapable artifact publish --slug q3-report --title "Q3 Delivery" \
  --kind report --markdown report.md \
  --summary "…" --favicon "🧾" --grounding repo:platform/kapable-artifacts

# a ballot — see the Artifacts guide for the grammar and its bounds
kapable artifact publish --slug the-call --title "The call" \
  --kind decision --html body.html --decision ballot.json
kapable artifact publish --slug the-call --title "…" --kind decision \
  --html body.html --decision carry        # forward the existing ballot unchanged

kapable artifact list --kind decision -t
kapable artifact get   <slug>
kapable artifact html  <slug> --version 2 -o old.html
kapable artifact verdict <slug>           # 'still open' until a member rules

--dry-run validates locally and stops. Every mechanically checkable publish rule runs before the network call — the 2 MiB cap, external resource loads, forbidden <iframe>/<object>/<embed>, meta refresh, and a full-page wrapper where a fragment belongs — and each error names the fix. Publish warnings go to stderr, so piping the JSON cannot hide an unstyled-document.

--markdown and --html are not interchangeable

--markdown is server-rendered in the platform’s house reading register — the right default, and impossible to publish slop through, since you never author CSS. But the register has its own palette, so a markdown artifact cannot carry your org’s brand accent. Only --html can, and only if it inherits the platform theme tokens rather than restating colours. Deciding is always a member action in the browser; agent keys get a 403.

Example session

curl -fsSL https://cli.kapable.ai/install.sh | sh
kapable auth login --email you@example.com   # prompts for your password
kapable auth me
kapable board stories list --status active
kapable data tables list
Two binaries: kapable vs. kapable-ops

kapable is the customer/developer surface documented here. kapable-ops is a separate, privileged operator binary (deploy, vault, caddy, migrate) — it is not published on this registry and is not what cli.kapable.ai/install.sh installs.

Next Steps