CLI reference
Every command, flag and example, generated from the binary rather than written about it.
Generated from kadence 0.11.0, the version on npm — every command, flag
and example below came out of that binary rather than being described from
memory. The contract an agent reads is the same file: kadence schema --json.
Setting up
kadence init needs a git repository and writes .kadence/ plus the agent instruction files. Everything below needs that directory, except kadence schema, which describes the tool rather than your project and answers anywhere.
Since 0.9, run by a person at a terminal with no flag, init is a guided setup: Coda says what it found — the agents in use, an ADR folder — asks one question with a recommended answer, offers the ADRs as decisions with a preview, and shows what a teammate's agent will see when someone proposes what you ruled out. Nothing is written before the answer, Ctrl-C keeps what is written, and running it again is a checkup. An agent, a script, CI or any flag gets no question at all, and the output ends with what an agent should do next. KADENCE_INTERACTIVE=0 turns the questions off.
kadence init
Set up kadence in this repository
Usage: kadence init
Options:
--no-hooks Leave .claude/settings.json alone: no prime at session start, no journal search on each prompt (default: true)
--hooks Accepted for older scripts; the hooks are on by default now
--hooks-for <agents> Also write hooks for: codex, cursor, copilot (comma-separated). Without it, only for those already in use
-h, --help Display this message
Examples:
kadence init
kadence init --no-hooks
kadence init --hooks-for codex,cursorStarting a session
These two are what an agent runs before it does anything else: the state that moves, and the work that can be started. The state that does not move already lives in AGENTS.md, where init put it.
kadence prime
Everything a session needs before it starts. Short by design
Usage: kadence prime
Options:
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence prime
kadence prime --jsonHeld to 40 lines and 3 KB by a test in the product, because it enters an agent's context on every session. Long context files were measured to cost more than they return; this one carries what changes and points at the rest. Since 0.5 it does not open with "No active sprint." when there is none, and with no decision in force it spends one line on how to record one.
kadence ready
What can be started right now: open, unblocked, unclaimed
Usage: kadence ready
Options:
-a, --assignee <who> Only this person; "me" for yourself
--limit <n> At most this many tasks
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence ready
kadence ready --assignee me --jsonThe work and its reasons
kadence task
Tasks: add | list | show | move | assign | ac | doc
Usage: kadence task [action] [arg] [value] [extra]
Options:
--title <text> New title (for edit)
-d, --description <text> Full description; use quotes for multiple lines
--type <type> Type: task | bug | story | epic
--priority <level> Priority: low | normal | high | urgent
-a, --assignee <who> Assignee, e.g. dev@example.com
--label <name> Label; repeat the flag for several. On edit, the set becomes exactly this
--add-label <name> Add one label, leaving the rest; repeat for several
--remove-label <name> Remove one label, leaving the rest; repeat for several
--estimate <points> Estimate in points, a positive number
--due <date> Due date, YYYY-MM-DD; empty string clears it
--status <status> Filter by status: backlog | todo | in_progress | blocked | in_review | done | cancelled
--search <text> Words in title, description, criteria and comments, matched as kadence search matches them; most relevant first unless --sort
--milestone <ref> list: only the tasks in this milestone — MS-N or its name
--why <text> ac waive: why the criterion does not apply to this task
--overdue Only tasks past their due date
--due-before <date> Only tasks due before YYYY-MM-DD
--sort <key> Sort by: created | priority | due | estimate
--tree Show parent/child structure
--branch Only the work this branch introduced
--base <name> What --branch compares against; main by default
--parent <task> Parent task, e.g. KAD-1 (use "none" to detach)
--template <name> Pre-fill fields from a saved template
--no-dod Skip the board's definition of done for this task (default: true)
--ac <text> add: an acceptance criterion; repeat for more
--fields <list> JSON only: comma-separated task fields to return
--limit <n> list: at most this many; 0 for all of them
--offset <n> list: start the page here; use with --limit
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence task add "Fix login" -d "Broken since 2.3" --type bug --priority high --estimate 3
kadence task list --status in_progress --sort priority
kadence task list --search cookie --overdue
kadence task list --assignee me --label auth
kadence task list --tree
kadence task list --branch what this branch is about
kadence task list --branch --base release/1.0
kadence task list --json --fields id,label,status
kadence task move KAD-1,KAD-2,KAD-3 done bulk: all or nothing
kadence task add "Login form" --parent KAD-1 KAD-1 can be an epic
kadence task add "Login form" --ac "rejects a bad password" --ac "remembers the email"
kadence task claim take the top of `kadence ready`
kadence task claim KAD-1
kadence task release KAD-1
kadence task ac add KAD-1 "tests green"
kadence task ac check KAD-1 1
kadence task ac list KAD-1
kadence task doc add KAD-1 docs/design.md create it and link it
kadence task parent KAD-2 KAD-1
kadence task block KAD-2 KAD-1 KAD-2 waits for KAD-1
kadence task unblock KAD-2 KAD-1
kadence task log KAD-1 2h also 90m, or -30m to correct
kadence task add "Crash on save" --template bug
kadence task show KAD-1
kadence task move KAD-1 done
kadence task edit KAD-1 --priority urgent --due 2026-09-30
kadence task edit KAD-1 opens $EDITOR for the description
kadence task comment KAD-1 "Needs review"
kadence task assign KAD-1 dev@example.com (use "none" to unassign)
kadence task cancel KAD-1 keeps it in history
kadence task delete KAD-1 drops it from the boardclaim has no lock behind it. Two machines can each claim a task before either pushes; after the merge the earliest claim holds and the task reads contested under both names. Rejecting the later one would make the owner depend on which branch merged first, which is the same reason a dependency cycle is reported rather than refused.
Moving a task to done with unchecked acceptance criteria warns and proceeds. The board marks it. A tool that refuses would be a tool people work around.
--label sets the whole set; --add-label and --remove-label change one and leave the rest. The second pair exists because the first loses a label when two branches add different ones — measured, and fixed in 0.4 by moving labels as deltas.
Bulk is all or nothing: kadence task move KAD-1,KAD-2 done either moves both or changes nothing, so a typo cannot leave half a board.
kadence decision
Decisions: add | list | show — the why behind the work
Usage: kadence decision [action] [arg]
Options:
--why <text> Why this was chosen. Required — without it this is a changelog line
--rejected <text> The alternative that was turned down
--task <ref> The task this decision came out of
--supersedes <ref> The decision this one replaces
--doc <path> A document that carries the detail; repeat for several
--limit <n> list: at most this many decisions; 0 for all of them
--offset <n> list: start the page here
--all Include superseded decisions, hidden by default
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence decision add "Use ULIDs" --why "Clocks disagree between machines"
kadence decision add "Use Avro" --why "..." --supersedes DEC-1
kadence decision list --json--why is required. Without it the record says only what changed, and git already says that.
Superseding is one event. --supersedes writes a single record and the backward link is derived while folding, so the two directions cannot fall out of step — the failure that makes a reversed decision keep looking current in a file-based tool, where it takes two edits and people reliably make one.
kadence note
Record something learned; note list and note show <ULID> read them back
Usage: kadence note [text] [id]
Options:
--task <ref> The task it came out of
--limit <n> At most this many, newest first; 0 for all of them
--offset <n> list: start the page here
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence note "Tests need a git identity"
kadence note "The redirect drops the cookie" --task KAD-1
kadence note list --limit 5
kadence note show 01K5...A note is something learned. When there was a choice and something was turned down, that is a decision instead — the help says so when you reach for the wrong one.
kadence doc
Documentation: add | edit | show | list | link — kept in the journal, not in files
Usage: kadence doc [action] [arg] [arg2]
Options:
--body <text> The text
--stdin Read the text from standard input — for text too long for an argument
--file <path> Read the text from a file; the file is not kept or linked
--title <text> A new title, for edit
--task <ref> The task this explains (add), or narrow the list to one task
--limit <n> list: at most this many documents; 0 for all of them
--offset <n> list: start the page here
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence doc add "Auth" --body "How login works." --task KAD-1
kadence doc edit DOC-1 --file draft.txt
kadence doc edit DOC-1 opens $EDITOR at a terminal
kadence doc show DOC-1 --json
kadence doc link DOC-1 KAD-2Documentation is an entity in the journal since 0.6, not a file beside it: DOC-N, written and revised as doc.written events. A note records a moment and never changes; a document is the current account of how something works, and the reader wants the latest.
Every revision names the revisions it was written on top of. Two people revising the same version leave a conflict that is reported and settled by writing text — never a silent overwrite, and never a winner picked by whichever branch merged first.
Agents reach it without a search term: task show carries the documents linked to a task and prime names the documentation of the work you hold, both without bodies. One body arrives only when something asks for it.
kadence task doc is still there for linking a markdown file that already exists. It records the link, which is the part git cannot express.
Looking at it
kadence board
Kanban board in the terminal; "config" edits it, "export" writes a snapshot
Usage: kadence board [action]
Options:
--fields <list> JSON only: comma-separated task fields to return
--statuses <list> Comma-separated columns, e.g. "todo,doing,done"
--dod <list> Criteria every new task starts with, e.g. "tests green,docs updated"
--started <status> The column where work counts as started; cycle time is measured from it
--history JSON only: every task in full, with its history and comments
--summary JSON only: what --json returns already; kept so older calls still work
--html export: one self-contained HTML file, no server and no network
--md export: markdown for a README or a pull request
--readme export: update the section between markers in README.md
--file <path> export: where to write it
-a, --assignee <who> Only this person's tasks; "me" means you
--sprint Only tasks in the active sprint
--limit <n> At most this many tasks across the board; 0 for all of them
--offset <n> Start the page here, counted across the columns
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence board
kadence board --assignee me --sprint
kadence board --json --fields label,status,assignee
kadence board --json the state of each task, without the history
kadence board --json --history every task in full
kadence board config
kadence board config --statuses "todo,doing,review,done"
kadence board config --dod "tests green,docs updated"
kadence board config --started doing where cycle time starts counting
kadence board export --html
kadence board export --md --readmeSince 0.9, board --json returns the state of each task — the fields --summary selected — and leaves out the history and comments that grow with how long the work took. --history returns every task in full; --summary still works and answers the same as no flag.
board export writes a file: one self-contained HTML page, or markdown for a README or a pull request. There is no server and no port, which is what lets a browser view exist at all in a tool that promises none.
kadence ui
Interactive kanban board
Usage: kadence ui
Options:
-h, --help Display this message
Examples:
kadence uiThe contract
kadence schema
The machine-readable --json contract, for agents
Usage: kadence schema
Options:
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence schema --jsonRead this instead of guessing. It lists every command, the fields you can rely on, and every error code, and it works outside a repository so an agent can read it before init. The contract is deliberately narrower than the output: fields kadence emits but does not list may still change.
Planning
kadence sprint
Sprints: create | add | edit | start | close | status | list | burndown
Usage: kadence sprint [action] [name]
Options:
--sprint <name> Which sprint to add to; defaults to the active one
--name <name> New name (for edit)
-d, --description <text> Sprint description (for edit)
--start <date> Start date, YYYY-MM-DD
--end <date> End date, YYYY-MM-DD
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence sprint create "Sprint 1" first one starts right away
kadence sprint create "Sprint 2" later ones are planned
kadence sprint add KAD-1 --sprint "Sprint 2"
kadence sprint start starts the next planned sprint
kadence sprint edit --start 2026-09-01 --end 2026-09-14
kadence sprint edit "Sprint 2" --name "Sprint 2: auth"
kadence sprint burndown chart from the journal, any day
kadence sprint close closes the active one, reports velocitykadence milestone
Milestones: create | add | list | close — grouping by outcome
Usage: kadence milestone [action] [arg]
Options:
--due <date> Target date, YYYY-MM-DD
--milestone <ref> Which milestone, by MS-N or name
--all Include closed milestones, hidden by default
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence milestone create "1.0" --due 2026-12-01
kadence milestone add KAD-1 --milestone 1.0
kadence milestone list --json
kadence milestone close 1.0kadence template
Task templates: save | list | delete
Usage: kadence template [action] [name]
Options:
-d, --description <text> Default description
--type <type> Default type
--priority <level> Default priority
-a, --assignee <who> Default assignee
--label <name> Default label; repeat for several
--estimate <points> Default estimate
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence template save bug --type bug --priority high --label triage
kadence template listReading the project
kadence report
Reports folded from the journal: flow | cfd | attention | burndown | velocity | workload | burnup
Usage: kadence report [name]
Options:
--list Name every report and what each one answers
--since <days> flow, cfd, attention: window ending today, in calendar days (default 30d)
--sprint <name> burndown, burnup: a sprint by name, rather than the active one
--by-status flow: time in each status and flow efficiency, instead of the usual report
--html Write one self-contained page instead of printing; charts included, no network
--file <path> html: where to write it (default kadence-<report>.html)
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence report --list every report, and what it answers
kadence report flow cycle time, throughput, aging work
kadence report flow --since 90d
kadence report cfd tasks per column, per day
kadence report attention work in flight that nobody is moving
kadence report burndown the active sprint against an even burn
kadence report velocity committed against finished, sprint by sprint
kadence report workload who is carrying what right now
kadence report flow --html the same numbers as a page, with charts
kadence report cfd --html --file docs/cfd.html
kadence report flow --by-status where the time went, column by columnkadence report --list names all six and what each answers, attention first. report <name> --html writes one self-contained page with inline SVG charts that asks the network for nothing, and every chart is followed by the rows it was drawn from. Every report is a fold over events the journal already holds. None of them adds an event type or a field, and none of them is written down — attention costs half a millisecond over ten thousand events on top of the fold.
kadence stats
Where the project stands: counts, blockers, contested claims, velocity
Usage: kadence stats
Options:
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence statsMaintenance
kadence doctor
Rebuild the cache from the events, check the journal reads cleanly, report what it found
Usage: kadence doctor
Options:
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence doctor
kadence doctor --jsonFolds the whole journal whatever the cache says, writes the result to .kadence/state.json, and reports how many events read, which files did not, whether the cache it found had agreed with the journal, and what the fold surfaces — contested claims, cycles, columns not in the board. It never touches an event. A file that cannot be read exits 1 with journal_damaged; a surfaced conflict is not an error, because keeping both sides is the journal doing its job.
kadence compact
Fold old months into one file each; cold start on a long journal drops from ~200 ms to ~20 ms
Usage: kadence compact
Options:
--keep-months <n> Months to keep as separate files, counting this one (default 2)
--dry-run Say what would be archived and write nothing
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence compact --dry-run
kadence compact --keep-months 3Only the shape on disk changes. The same events fold to the same state afterwards, which is the property the whole product rests on, and the archive is merged rather than replaced — a branch that compacts, merges and then delivers one more event for that month used to lose the archive.
kadence completion
Shell completion; "install" writes it where your shell looks
Usage: kadence completion [action]
Options:
--shell <name> Shell: zsh | bash | fish; detected from $SHELL by default
--force Overwrite a completion file kadence did not write
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence completion print the script
kadence completion install --shell zshWrites the script where your shell looks for it, and says what it wrote. Without install it prints the script instead, for you to place yourself.
Everything else
kadence search
Find it across tasks, decisions, notes and documents
Usage: kadence search <query>
Options:
--kind <list> Narrow to: task | decision | note | doc | sprint | milestone; comma-separated
--limit <n> At most this many passages
--all Include superseded decisions, left out by default
--also <phrasing> The same question in other words; repeat for 2-3. Fused into one answer
--json Machine-readable output for agents
-h, --help Display this message
Examples:
kadence search "why are events append-only"
kadence search "where is the website hosted" --also "landing page" --also "GitHub Pages"
kadence search "cookie redirect" --kind task,note
kadence search "ordering between machines" --jsonkadence hook
For agent hooks: prompt reads a UserPromptSubmit payload; cursor-session and copilot-session print prime as JSON; log shows what they added to the last session
Usage: kadence hook <event>
Options:
--json log: machine-readable output
-h, --help Display this message
Examples:
echo '{"prompt":"why are events append-only"}' | kadence hook prompt
kadence hook cursor-session
kadence hook log what kadence put into your agent's context, and its sizeEverywhere
--json machine-readable output; stdout is JSON and nothing else
--help this, for any commandExit codes: 0 success, 1 runtime error — the command understood you and could not comply, 2 bad arguments — nothing was attempted.
Environment:
KADENCE_SOURCE Set to "agent" so events record agent authorship. Without it an event counts as human — we do not guess.
KADENCE_ACTOR Who holds a claim, when that is not your git email: one of several agents a person runs, e.g. "you@example.com#agent-2". Without it, an agent (KADENCE_SOURCE=agent) in a linked git worktree claims as "email#<worktree>". Events are still authored by the git email.
NO_COLOR Any value disables colour.
KADENCE_INTERACTIVE "0" means `init` never asks a question; "1" lets it ask past an agent marker. It never asks in a pipe, with a flag, in CI, or where AI_AGENT, CLAUDECODE, CURSOR_AGENT, CODEX_SANDBOX or GEMINI_CLI is set.The error codes a --json failure can carry, and the fields on a task you can
rely on, are written for agents.