# Build on Kapable Source: https://docs.kapable.ai/ Section: Start here v0.23.0 TS · v0.19.1 Rust · v0.19.0 CLI — customer + operator SDK tiers Build on Kapable Use the API, ship an app, or run Kapable on your own server. Call the API Ship an app Run it on your server API Modules Pick a building block below when your app needs it. Skills Use a ready-made skill to publish work from your coding agent. Browse Skills → Apps & Deployment Create, deploy, and operate an app at its live Kapable URL. Explore Apps API → Board Track product work from the first story to the release. Explore Board API → Store Store files and give browsers short-lived upload or download links. Explore Store API → Data Give an app typed tables, rows, search, and live change events. Explore Data API → Comms Let agents and people exchange messages, email, and live room events. Explore Comms API → Knowledge Store claims with sources, context, and links between entities. Explore Knowledge API → AI Call AI providers without placing provider keys in your client app. Explore AI API → Secrets Keep org secrets out of source code and review their access. Explore Secrets API → Billing Read a subscription and send an owner to checkout or billing. Explore Billing API → Wiki Write searchable Markdown pages from your org knowledge. Explore Wiki API → Harbor Issue releases and check licenses inside software you ship. Explore Harbor API → Runners Build and host apps on machines that you control. Connect a Runner → Warrant Sell products with plans and license checks that work offline. Explore Warrant API → Quick Start Install the SDK, create a client, and make your first API call. TypeScript Rust cURL import { KapableClient } from '@kapable/sdk'; const client = new KapableClient({ baseUrl: 'https://api.kapable.ai', apiKey: 'sk_live_...', }); // Who am I? (works with any fresh API key) const me = await client.auth.me(); console.log(`Authenticated as ${me.identity_type} in org ${me.org_id}`); // List available AI providers const { data: providers } = await client.ai.listProviders(); console.log(`${providers.length} AI providers available`); use kapable_sdk::KapableClient; let client = KapableClient::new("https://api.kapable.ai") .api_key("sk_live_...") .build(); // Who am I? (works with any fresh API key) let me = client.auth().me().await?; println!("Authenticated in org {}", me.org_id); // List available AI providers let providers = client.ai().list_providers().await?; println!("{} AI providers available", providers.data.len()); curl -s https://api.kapable.ai/v1/me \ -H "x-api-key: sk_live_..." | jq . Authentication All API requests require authentication via either an x-api-key header or a JWT bearer token. See the Authentication guide for details. Base URL All endpoints are served under https://api.kapable.ai. Each service is mounted at a versioned path prefix (e.g. /v1/board/). API-key scope note A fresh sk_live_ key reaches the auth and AI surfaces (plus scope-gated board routes) today. The data, board, and knowledge services additionally permission-gate API keys — use session-token auth for those, or watch the changelog for the scope-to-permission bridge currently in flight. See Authentication. AI-readable docs Point your agent at kapable.ai/llms.txt (concise index) or llms-full.txt (full per-endpoint reference, 352 endpoints) — generated from the same manifest that drives the SDKs, so every documented path is real. Ready to build? Get started with the Kapable SDK in under two minutes. Quick Start Guide Open Console --- # Getting Started Source: https://docs.kapable.ai/getting-started Section: Start here Getting Started Go from a new workspace to a working API call and a live app. You need A plan and card, a Kapable workspace, a console API key, and a shell with Bun or Cargo. 1. Create a workspace Open join.kapable.ai. Pick a plan and enter a card before you create the workspace. You should see your new workspace and its console. 2. Make an API key Open the console for your workspace. Create an API key with the read scope. Copy the secret when the console shows it. It appears once. You should see a key that starts with sk_live_. 3. Install the SDK and set the key Choose your language. Run the install command in your project folder. Set KAPABLE_API_KEY in the same shell. TypeScript Rust echo '@kapable:registry=https://git.kapable.dev/api/packages/kapable/npm/' >> .npmrc bun add @kapable/sdk export KAPABLE_API_KEY='sk_live_...' # Add this to .cargo/config.toml [registries.kapable] index = "sparse+https://git.kapable.dev/api/packages/kapable/cargo/" # Add this to Cargo.toml [dependencies] kapable-sdk = { registry = "kapable", version = "0.2" } # Then set the key in your shell export KAPABLE_API_KEY='sk_live_...' You should see the SDK in your dependency file and the key in your shell environment. 4. Make the first call Ask Kapable who you are. Save the TypeScript or Rust code as a small program, or run the curl command as written. TypeScript Rust cURL import { KapableClient } from '@kapable/sdk'; const client = new KapableClient({ baseUrl: 'https://api.kapable.ai', apiKey: process.env.KAPABLE_API_KEY!, }); const me = await client.auth.me(); console.log(me); use kapable_sdk::KapableClient; let client = KapableClient::new("https://api.kapable.ai") .api_key(std::env::var("KAPABLE_API_KEY")?) .build(); let me = client.auth().me().await?; println!("{:?}", me); curl -sS https://api.kapable.ai/v1/me \ -H "x-api-key: $KAPABLE_API_KEY" You should see your identity and workspace ID in the response. 5. Create and deploy an app Use the installed CLI. The blank starter is in the live template catalog. kapable app templates kapable app create hello-kapable --template blank kapable app clone hello-kapable cd hello-kapable kapable app deploy hello-kapable kapable app open hello-kapable --print You should see a deployment with status live and a URL that ends in .kapable.run. Next Authentication · Apps and Deployment --- # Authentication Source: https://docs.kapable.ai/authentication Section: Start here Authentication Kapable supports two customer authentication methods: API keys for server-to-server calls and session/JWT bearer tokens for user-context requests. Operator surfaces use a separate token tier and a separate SDK — see Operator SDK. Building an app and want your users to sign in to it? This page is about calling the Kapable API. For sign-in inside your own app, see Sign users in to your app. You need A Kapable org and a `kses_` session. Use the role and permission named in the endpoint. First call curl -sS https://api.kapable.ai/v1/me \ -H "Authorization: Bearer $KAPABLE_SESSION_TOKEN" You should see your identity and org ID. Token Types Token Tier Header Use sk_live_* / sk_org_* Customer x-api-key Server-to-server, org-bound, scoped (read/write/admin) sk_test_* (retired) Customer x-api-key Retired. Kapable no longer issues these keys. A key you already hold is still accepted; new keys start with sk_live_ kses_* (session) Customer Authorization: Bearer User-context calls; carries the member's role permissions at_* (app token) Customer Authorization: Bearer Per-org service-to-service integrations. Required (with a session) by the Comms API, which rejects sk_ keys with 401 ak_* (agent key) Customer x-api-key Per-agent key for Comms SSE streaming and message sending RS256 JWT Customer Authorization: Bearer Frontend/user flows via the auth service st_* (service token) Customer x-api-key Org-scoped automation credential for CI / deploy / webhook workloads (see Service Tokens below). Minted with a session under keys.manage sk_admin_* Operator varies Platform operations — only via @kapable/ops-sdk, never the customer SDK API Key Authentication API keys are the simplest way to authenticate. Pass the key in the x-api-key header on every request. # API key auth curl https://api.kapable.ai/v1/me \ -H "x-api-key: sk_live_abc123..." Getting an API Key Mint keys with your session via the auth API, or manage them in the console under Settings → API Keys. Every key-management call is session-gated and requires the keys.manage permission — owners and admins hold it by default, and an owner can delegate it to a custom role (see Roles & Permissions). # Create. Optional fields: expires_at (absolute RFC3339 timestamp; omit = never), # project_id / workspace_id (bind the key to a project or workspace). curl -s -X POST https://api.kapable.ai/v1/auth/api-keys \ -H "Authorization: Bearer kses_..." \ -H "Content-Type: application/json" \ -d '{"name":"production","scopes":["read","write"],"expires_at":"2027-01-01T00:00:00Z"}' # → { "id": "...", "key_prefix": "sk_live_...", "last_used_at": null, "secret": "sk_live_..." } ← secret shown ONCE # List (prefixes + last_used_at, never the secret) and revoke: curl -s https://api.kapable.ai/v1/auth/api-keys -H "Authorization: Bearer kses_..." curl -s -X DELETE https://api.kapable.ai/v1/auth/api-keys/{id} -H "Authorization: Bearer kses_..." Rotating a Key Rotate mints a fresh secret and prefix onto the same key row, so the key id, scopes, and bindings are preserved. The optional overlap_hours (0–72, default 0) is the grace window the previous secret keeps validating — use it to migrate live callers without an outage; omit it (or send 0) to kill the old secret immediately, the compromised-key path. # Immediate cutover (default) — bodyless POST: curl -s -X POST https://api.kapable.ai/v1/auth/api-keys/{id}/rotate \ -H "Authorization: Bearer kses_..." # 24-hour grace window on the old secret: curl -s -X POST https://api.kapable.ai/v1/auth/api-keys/{id}/rotate \ -H "Authorization: Bearer kses_..." \ -H "Content-Type: application/json" \ -d '{"overlap_hours":24}' # → { "id": "...", "key_prefix": "sk_live_...", "secret": "sk_live_..." } ← NEW secret, shown ONCE Keys are org-bound and scoped — not omnipotent An API key is bound to your org and carries scopes (read/write/admin), not your member role's permissions. Scope-gated surfaces (auth, AI, the Data API, some board routes) accept keys directly; permission-gated surfaces (board stories, knowledge) return 403 permission required for keys — use session auth there. A key may optionally be bound to a project at mint time ({"project_id":"…"}) to pin its Data-API schema. Never expose keys in client-side code or commit them to version control. SDK Usage TypeScript Rust const client = new KapableClient({ baseUrl: 'https://api.kapable.ai', apiKey: process.env.KAPABLE_API_KEY, }); // Rust SDK let client = KapableClient::new("https://api.kapable.ai") .api_key(std::env::var("KAPABLE_API_KEY").unwrap()) .build(); JWT Bearer Token For user-context requests (e.g. from a frontend), use a JWT token obtained via the Auth service's login endpoint. Pass it in the Authorization header. # Bearer token auth curl https://api.kapable.ai/v1/board/stories \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." Obtaining a Token TypeScript Rust // Login. Response fields: session_token, access_token (JWT), // access_token_expires_in, role, org_id, member_id, email, name. const res = await client.auth.login({ email: 'user@example.com', password: '...', }); // Use the session token (kses_) as the Bearer `token` for subsequent requests. const authedClient = new KapableClient({ baseUrl: 'https://api.kapable.ai', token: res.session_token, }); // Rust SDK use kapable_sdk::auth::types::LoginRequest; let resp = client.auth().login(&LoginRequest { email: "user@example.com".into(), password: "...".into(), }).await?; let authed_client = KapableClient::new("https://api.kapable.ai") .token(resp.token) .build(); Org Context All API calls are scoped to the authenticated org. API keys are org-bound. JWT tokens carry the org ID in the token claims. Multi-org users select their active org during login. Agent Keys (Comms) The Comms service supports a third auth model: agent keys. These are per-agent API keys minted via POST /v1/agents/{id}/keys that allow agent processes to authenticate directly for SSE streaming and message sending. TypeScript Rust // Mint an agent key const { key } = await client.comms.mintAgentKey(agentId, { label: 'production', }); // Use it to connect the agent's SSE stream const stream = new EventSource( `https://api.kapable.ai/v1/agents/${agentId}/stream`, { headers: { 'x-api-key': key } } ); // Rust SDK use kapable_sdk::comms::types::MintAgentKeyRequest; let resp = client.comms().mint_agent_key(agent_id, MintAgentKeyRequest { label: "production".into(), }).await?; println!("Agent key: {}", resp.key); App Tokens (Comms) For service-to-service integration with the Comms endpoints, use app tokens (at_* prefix). These are org-scoped tokens for programmatic access to intercept and send operations. The Comms customer surface requires a session or an at_ app token — it rejects sk_ API keys with 401. TypeScript Rust // Mint an app token for your integration const { token } = await client.comms.mintAppToken(orgId, { label: 'email-worker', }); // Rust SDK use kapable_sdk::comms::types::MintAppTokenRequest; let resp = client.comms().mint_app_token(org_id, MintAppTokenRequest { label: "email-worker".into(), }).await?; Service Tokens Service tokens (st_*) are long-lived, org-scoped automation credentials for CI, deploy, and webhook workloads. They are minted with your session and gated by the same keys.manage permission as API keys. Manage them in the console under Settings → Service Tokens or via the auth API: # Create. token_type ∈ { ci, deploy, webhook, ... } sets the secret prefix # (ci → st_ci_, deploy → st_deploy_, webhook → st_wh_, anything else → st_svc_). # expires_in_days is a RELATIVE day count (1–365, default 90). curl -s -X POST https://api.kapable.ai/v1/auth/service-tokens \ -H "Authorization: Bearer kses_..." \ -H "Content-Type: application/json" \ -d '{"name":"ci-runner","token_type":"ci","scopes":["read","write"],"expires_in_days":90}' # → { "id": "...", "key_prefix": "st_ci_...", "secret": "st_ci_..." } ← secret shown ONCE # List (metadata + last_used_at) and revoke (idempotent — 200 even if already revoked): curl -s https://api.kapable.ai/v1/auth/service-tokens -H "Authorization: Bearer kses_..." curl -s -X DELETE https://api.kapable.ai/v1/auth/service-tokens/{id} -H "Authorization: Bearer kses_..." Reserved token types The internal types dispatch-minter and ci-dispatch are reserved for platform provisioning and are rejected with 403 on this endpoint. Everything else is free-form and falls back to the st_svc_ prefix. Org Auth Settings (Console) Beyond API credentials, org owners and admins configure the organisation's sign-in experience and account-security posture in the console under Auth Settings: Login-page branding — four layouts (centered, left panel, right panel, full background), a custom logo, a background image, and light or dark mode. Session policies — session lifetime (default 24 hours), an optional idle timeout that auto-logs-out inactive sessions, and an account-lockout threshold after repeated failed logins (default 5 attempts). Multi-factor authentication — members enroll TOTP (Google Authenticator, Authy, …) with backup codes; MFA can be optional or enforced for the whole org. Password policy — minimum length and required character classes (uppercase, numbers, special characters). Member access levels (owner / admin / member / viewer, plus custom roles with granular permissions) are covered in Roles & Permissions. Error Responses Kapable returns {error:{code,message,details}}. The message field is the line a person can act on. Code What you see What to do UNAUTHORIZED missing auth token Send x-api-key, a Bearer token, or a session cookie. UNAUTHORIZED authentication required via x-api-key, Authorization: Bearer, or session cookie Use one of the listed auth methods. FORBIDDEN permission required Use a session with the needed role or permission. Next Getting Started · Authentication --- # kapable CLI Source: https://docs.kapable.ai/cli Section: Start here 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. You need The `kapable` binary and a Kapable login session or org key. First call kapable whoami You should see your signed-in identity and org. 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 changes the install location (default ~/.local/bin). KAPABLE_CHANNEL / --channel 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]). Interactive login Org key (agents / CI) 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 Name Kind Effect --api-key global flag Credential for this invocation only. Highest precedence. --api-url global flag Base URL for this invocation only. KAPABLE_API_KEY env var Credential, second precedence. Recommended for CI/agents. KAPABLE_API_URL env var Base URL, second precedence. --config global flag Config file path (default ~/.kapable/kapable.toml). KAPABLE_RELEASES_URL env var self-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 Every command in the CLI, generated from its own command tree at version 0.21.4 — 28 groups, 243 commands in all. --help on any of them prints its flags. kapable activity Activity: inspect, watch, and publish org-scoped Herald events · 5 commands kapable activity list List recent events without arbitrary payload or metadata fields kapable activity show Show one event, including its payload and metadata kapable activity earliest Return the earliest position still retained for this principal kapable activity watch Watch the live event stream as NDJSON until cancelled or bounded kapable activity publish Publish an org-scoped event. kapable login Sign in — the fastest way to get started. Takes no subcommand. Run kapable login --help for its flags. kapable logout Sign out — clears the stored session (device- or password-minted alike). Takes no subcommand. Run kapable logout --help for its flags. kapable whoami Who am I — show the authenticated identity (org, email/key, role). Takes no subcommand. Run kapable whoami --help for its flags. kapable app App lifecycle: create, list, status, clone, open, deploy, logs, pat mint, templates, delete · 11 commands kapable app deploy Deploy an app and follow it to `live`/`failed` (push-verify built in). kapable app logs Print the newest deployment's build log tail (stdout = the raw log) kapable app list List your org's apps (JSON default; --table for columns) kapable app status Show an app row + its newest deployment (works with sessions AND read-scope org keys — composed from routes both can call, D15) kapable app clone git-clone an app's repo (git.kapable.dev/customer-{org}/{app}) kapable app open Print the app's live URL (and open it in a browser) kapable app pat App repo PATs kapable app pat mint Print the app's repo bot PAT as JSON on stdout (owner session required; the server mints one on demand for apps that predate bot PATs) kapable app create Create an app from a starter template and follow provisioning to `created` (repo ready) — requires a login session (`kapable login`) kapable app templates List the starter-template catalog (`--template` values for `create`) kapable app delete Delete an app (soft-delete; container + routes torn down, repo archived). kapable brand Brand: install the Kapable brand kit — theme tokens, the four faces and their licences, the mark — and check a copy for drift. · 3 commands kapable brand install Download the brand kit into a directory and record what was fetched kapable brand check Compare the copies in a directory with what the platform serves kapable brand show Print the live brand facts — the faces and the accent, as served kapable artifact Artifacts: publish a document to the org gallery, list, read, verdict · 9 commands kapable artifact publish Publish a document — a new slug creates v1, an existing slug appends the next version. kapable artifact list List the org gallery (latest-version metadata only, never the body) kapable artifact get Show one artifact's metadata and its full version list kapable artifact html Fetch a published document's rendered body kapable artifact skill Install the artifact-publishing doctrine as a Claude Code skill, so an agent on a fresh machine publishes to taste without being told how kapable artifact skill install Write the skill into a Claude Code skills directory kapable artifact skill show Print the skill to stdout instead of writing it kapable artifact skill status Report the embedded version and what is installed, without writing kapable artifact verdict Read a decided ballot's verdict. kapable agent Agent: LLM-powered agentic TUI over the platform (bare `agent` or `agent -p "…"` headless); `run`/`swap`/`status` remain the local worker supervisor · 3 commands kapable agent run kapable agent swap kapable agent status kapable auth Auth: login, orgs, API keys, apps · 21 commands kapable auth login Login: with --email (password prompted, or read from stdin when piped), with --email/--password for classic command-line credentials, or with neither to sign in via the browser (device login) and persist the session for future commands. kapable auth set-key Persist a durable org API key (`sk_org_…`) as the stored credential kapable auth clear-key Remove the stored org API key (leaves any stored login session intact). kapable auth logout Remove the stored login session (leaves any stored org key intact) kapable auth me Show current authenticated user info kapable auth orgs Manage organisations kapable auth orgs get Get an organisation by ID kapable auth orgs members List members of an organisation kapable auth keys Manage API keys kapable auth keys list List API keys for the current org kapable auth keys create Create a new API key kapable auth keys rotate Rotate an API key: mint a fresh secret onto the same key row. kapable auth keys revoke Revoke an API key kapable auth service-tokens Manage service tokens (`sig_st_*` and legacy `st_*`) — automation credentials kapable auth service-tokens list List service tokens for the current org kapable auth service-tokens create Create a new Signet service token (`sig_st_*`). kapable auth service-tokens rotate Rotate a service token; Signet keeps its id and reveals a new value once kapable auth service-tokens revoke Revoke a service token (idempotent) kapable auth apps List apps in an organisation kapable auth apps list List apps in an organisation kapable auth apps get Get app detail (with deployments) kapable board Board: stories, sprints, plans, products, comments · 30 commands kapable board stories Manage stories kapable board stories list List stories with optional filters kapable board stories get Get a story by UUID or code kapable board stories create Create a new story kapable board stories update Update an existing story kapable board stories delete Delete a story kapable board stories transition Transition a story to a new status kapable board sprints Manage sprints kapable board sprints list List sprints with optional filters kapable board sprints get Get a sprint by UUID or code (includes attached stories) kapable board sprints create Create a new sprint kapable board sprints start Start a planned sprint kapable board sprints complete Complete an active sprint kapable board sprints attach Attach a story to a sprint kapable board sprints detach Detach a story from a sprint kapable board plans Manage plans kapable board plans list List plans with optional filters kapable board plans get Get a plan by UUID or code kapable board plans create Create a new plan kapable board plans update Update an existing plan kapable board plans revisions List revisions for a plan kapable board products Manage products kapable board products list List all products kapable board products get Get a product by slug or UUID kapable board products create Create a new product kapable board products update Update an existing product kapable board comments Manage comments kapable board comments list List comments for a target kapable board comments create Create a comment kapable board comments delete Delete a comment kapable builder Designer: live previews for the design.kapable.ai workspace · 2 commands kapable builder preview Manage live preview sources for designer sessions kapable builder preview register Register a preview tunnel URL so the workspace iframe can load it kapable comms Comms: agents, rooms, messages, email · 13 commands kapable comms agents Manage agents kapable comms agents list List all agents in the org kapable comms agents create Create (or upsert) an agent kapable comms agents get Get agent detail by ID kapable comms agents delete Delete an agent kapable comms rooms Manage rooms kapable comms rooms list List rooms kapable comms rooms create Create a new room kapable comms rooms get Get room details (with participants) kapable comms rooms messages List messages in a room kapable comms rooms post Post a message to a room kapable comms email Send email via a mailbox kapable comms email send Send an email via a mailbox kapable conductor Conductor: run the agent daemon on this Mac — install, setup, status, uninstall · 4 commands kapable conductor install Download the daemon and (unless --no-setup) run the full setup kapable conductor setup Platform-side setup only — re-runnable for repair kapable conductor status Report what is installed, running, and registered. kapable conductor uninstall Stop and remove the launchd job. kapable data Data: tables, rows, search · 10 commands kapable data tables Manage tables kapable data tables list List all tables kapable data tables create Create a new table (columns as JSON array) kapable data tables drop Drop a table kapable data rows Manage rows kapable data rows list List rows in a table kapable data rows get Get a single row by UUID kapable data rows create Create one or more rows (JSON object or array) kapable data rows delete Delete a row kapable data search Full-text search within a table kapable dev Dev: spawn the local dev server + open a preview tunnel Takes no subcommand. Run kapable dev --help for its flags. kapable feedback Feedback: file a bug report or propose an idea (IMP-2190) · 2 commands kapable feedback bug Report a bug (files a `ticket_type: "bug"` ticket) kapable feedback idea Propose an idea (files a `ticket_type: "feature"` ticket) kapable knowledge Knowledge: sources, claims, predicates, tensions · 13 commands kapable knowledge sources Manage knowledge sources kapable knowledge sources list List knowledge sources kapable knowledge sources create Create a new knowledge source kapable knowledge sources delete Delete a knowledge source kapable knowledge claims Manage knowledge claims kapable knowledge claims list List claims with optional filters kapable knowledge claims get Get a single claim by UUID kapable knowledge claims create Create a new claim kapable knowledge claims search Search claims (lexical, vector, or hybrid) kapable knowledge predicates List predicates in the ontology kapable knowledge predicates list List all predicates kapable knowledge predicates ontology Show ontology info for a predicate kapable knowledge tensions Detect tensions (contradictions) in the knowledge graph kapable inbox Inbox: notification feed, unread count, read receipts, and previews · 5 commands kapable inbox list List unread notifications (or history with --include-read) kapable inbox count Return the unread badge count without fetching feed rows kapable inbox read Mark explicit notification ids read, or mark everything through an instant kapable inbox replay Replay an existing stored audio render on an org sink kapable inbox preview Preview how many stored notifications a subscription pattern matches kapable kap Kaps: create, list, versions, triggers, runs, tokens, secrets, db · 33 commands kapable kap list List your org's kaps kapable kap get Show one kap with its files, version and triggers kapable kap create Create a kap from local files; prints the address and the bypass token once kapable kap save Save a whole new file snapshot to a kap kapable kap versions List a kap's versions, newest first kapable kap diff Show what changed between two versions kapable kap restore Restore an old version as a new version kapable kap delete Delete a kap (recoverable for a while afterwards) kapable kap recover Recover a deleted kap kapable kap recovery List deleted kaps that can still be recovered kapable kap token Bypass tokens: skip the audience check for one kap kapable kap token list List a kap's bypass tokens kapable kap token create Mint a bypass token; the token is printed once kapable kap token revoke Revoke a bypass token kapable kap secret Per-kap secrets: values come from stdin or a file, never the command line kapable kap secret list List a kap's secret names (values never come back) kapable kap secret set Set a secret's value; read from stdin, or --value-file kapable kap secret delete Delete a secret kapable kap trigger Triggers: request, schedule and inbox kapable kap trigger list List a kap's triggers kapable kap trigger add-schedule Attach a schedule trigger that runs a file on a cadence kapable kap trigger add-inbox Attach an inbox trigger that runs a file when mail arrives kapable kap trigger pause Pause a trigger kapable kap trigger resume Resume a paused trigger kapable kap trigger delete Delete a trigger kapable kap trigger run-now Run a schedule trigger now, even while paused kapable kap runs List a kap's runs, newest first kapable kap disable Switch a kap off; it refuses calls until enabled kapable kap enable Switch a kap back on kapable kap usage What your org consumed, per kap, per day, for the last 30 days kapable kap db The kap's own PostgreSQL database kapable kap db query Run one SQL statement against the kap's database kapable kap db tables List the kap's tables and columns kapable model Model catalogue: facts, freshness, and role-based model recommendations · 5 commands kapable model list List catalogue models with bounded filtering, sorting, and pagination kapable model show Show the full facts for one canonical model id or exact alias kapable model status Show catalogue freshness, source health, and latest published diff kapable model roles List the work roles in an org's public model roster kapable model recommend Return the org-approved ranked model fallback for a work role. kapable notify Notify: send a one-liner update to the operator (the D8 agent surface) Takes no subcommand. Run kapable notify --help for its flags. kapable self-update Self-update: replace this binary with the channel's latest published build Takes no subcommand. Run kapable self-update --help for its flags. kapable drop Drops: one-time secret handoff — mint a link, claim it, check its state · 3 commands kapable drop claim Claim a drop and put the secret somewhere that is not your screen kapable drop mint Mint a drop and print the one link that can claim it kapable drop status What is the state of a drop I minted? Never reveals the secret kapable store Store: buckets, objects · 9 commands kapable store buckets Manage buckets kapable store buckets list List all buckets kapable store buckets create Create a new bucket kapable store objects Manage objects kapable store objects list List objects in a bucket kapable store objects upload Upload a file to a bucket kapable store objects download Download an object from a bucket kapable store objects delete Delete an object from a bucket kapable store objects head Check if an object exists kapable todo Todos: the obligation primitive — list, add, claim, complete, dependencies (IMP-2715) · 15 commands kapable todo list List todos. kapable todo summary The launchpad-badge summary counts (open/blocked/overdue/… + by-kind) kapable todo add File (add) a new todo kapable todo show Show a todo's detail, including its dependency edges kapable todo wait Wait until a todo is completed, dropped, or deleted. kapable todo update Update an existing todo. kapable todo delete Soft-delete a todo kapable todo done Mark a todo done. kapable todo drop Drop (abandon) a todo. kapable todo reopen Reopen a closed (done/dropped) todo kapable todo claim Claim shared (unassigned, or workspace-assigned) work. kapable todo release Release a held claim. kapable todo dep Manage prerequisite (dependency) edges kapable todo dep add Add prerequisites: `id` waits on every id in --depends-on (max 50 per call, D20) kapable todo dep remove Remove a prerequisite edge kapable vault Vault: secrets, forwarded to the operator CLI (`kapable-ops vault …`) Takes no subcommand. Run kapable vault --help for its flags. kapable voice Voice: talk to the platform agent — local web console, spoken results Takes no subcommand. Run kapable voice --help for its flags. kapable workspace Workspaces: collaboration containers, membership, roles, and audit · 19 commands kapable workspace list List workspaces visible to the current principal kapable workspace show Show a workspace, its member role assignments, and bound resources kapable workspace create Create a workspace kapable workspace update Rename or re-describe a workspace kapable workspace delete Delete a workspace (workspace-owner only) kapable workspace member Manage workspace members kapable workspace member add Add an existing org user by user id kapable workspace member set-role Change an existing member's role kapable workspace member remove Remove a member from the workspace kapable workspace invite Manage workspace invitations kapable workspace invite create Create an invitation. kapable workspace invite list List invitations with email addresses masked kapable workspace invite revoke Revoke an unused invitation kapable workspace role Manage fixed and custom workspace roles kapable workspace role list List built-in and custom roles kapable workspace role create Create a custom role kapable workspace role update Replace a custom role's capability set kapable workspace role delete Delete a custom role kapable workspace audit Read the org audit trail, optionally narrowed to one workspace Every subcommand supports --help. Output defaults to JSON (scriptable); this mirrors the SDK's ListResponse 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 kapable artifact html --version 2 -o old.html kapable artifact verdict # '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