Skip to content
kanbnv2.6.0
❯ docs menu
docs / commands

Command reference

Every Kanbn command, exactly as the CLI describes it. The same text is available in your terminal with kanbn help <command> or kanbn <command> --help.

❯ kanbn help#

Show help menu.

Usage:
kanbn ......... Show help menu
kanbn <command> [options]
Where <command> is one of:
help .......... Show help menu
version ....... Show package version
init .......... Initialise kanbn board
board ......... Show the kanbn board
boards ........ List the boards in this workspace
task .......... Show a kanbn task
add ........... Add a kanbn task
edit .......... Edit a kanbn task
rename ........ Rename a kanbn task
move .......... Move a kanbn task to another column
comment ....... Add a comment to a task
remove ........ Remove a kanbn task
find .......... Search for kanbn tasks
status ........ Get project and task statistics
sort .......... Sort a column in the index
sprint ........ Start a new sprint
burndown ...... View a burndown chart
gantt ......... View a gantt chart
validate ...... Validate index and task files
archive ....... Archive a task
restore ....... Restore a task from the archive
remove-all .... Remove the kanbn board and all tasks
history ....... Show task history
contributors .. List the workspace's contributors
completion .... Set up tab completion for your shell
For more help with commands, try:
kanbn help <command>
kanbn h <command>
kanbn <command> --help
kanbn <command> -h

❯ kanbn version#

Show package version.

kanbn version
kanbn v
Show package version.

❯ kanbn init#

Initialise kanbn board.

kanbn init
kanbn i
Initialise a kanbn board in the current working directory.
Options:
kanbn init --interactive
kanbn init -i
Initialise a kanbn board interactively.
kanbn init --name "name"
kanbn init -n "name"
Initialise a kanbn board with the specified name.
kanbn init --description "description"
kanbn init -d "description"
Initialise a kanbn board with the specified description.
kanbn init --column "column"
kanbn init -c "column"
Initialise a kanbn board and add the specified column. This option can be repeated to add multiple columns.
kanbn init --board "board-slug"
kanbn init -b "board-slug"
Create a secondary board beside the main one, at .kanbn/board-slug.md. Secondary boards
share the main board's task folder, so a task can appear on several boards, in a different
column on each. Combine with -n, -d and -c to set the board's name,
description and columns:
kanbn init -b design -n "Design Pipeline" -c Ideas -c Designing -c "Signed Off"
Running it again on an existing board updates its name, description and columns, exactly as
kanbn init does for the main board. A new board only picks up the default started and
completed columns if it actually has columns by those names, so a board with its own workflow
doesn't silently inherit "In Progress" and "Done".
The workspace has to exist first - run kanbn init with no -b to create it.

❯ kanbn board#

Show the kanbn board.

kanbn board
kanbn b
Show the kanbn board.
Options:
kanbn board --view "view"
kanbn board -v "view"
Show the specified board view. Views are defined in the "views" project option and can re-arrange, filter, sort and group tasks without moving them between columns.
See docs/views.md for the view format and worked examples.
kanbn board --json
kanbn board -j
Output raw data instead of rendering the board. The data will be returned in JSON format.
This is the quickest way to check what a view's filters actually match.
kanbn board --board "board-slug"
kanbn board -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.
Simple tasks - lines in a column that aren't task links - are shown dimmed at the end of their
column. They only appear in the default layout: a view filters and sorts tasks, and a simple task
has no fields to filter or sort on. They are left out of --json for the same reason.

❯ kanbn boards#

List the boards in this workspace.

kanbn boards
List the boards in this workspace.
A board is a markdown file directly inside the kanbn folder, in the same format as the index. The
index file is the main board; every other markdown file beside it is a secondary board. All boards
share one task folder, so a task can appear on several boards, in a different column on each.
Create a board with kanbn init -b "board-slug", and target one with -b "board-slug" on
any board-scoped command.
Options:
kanbn boards --tasks
kanbn boards -t
Show every task that appears on more than one board, with the column it occupies on each.
kanbn boards --tasks --all
kanbn boards -t -a
Show every tracked task, not only the ones on more than one board.
kanbn boards --rename "board-slug" --name "Board Name"
kanbn boards -r "board-slug" -n "Board Name"
Rename a board. The positional argument is the new slug, and --name sets the display name:
kanbn boards --rename design ux --name "UX Pipeline"
Either the new slug or --name may be omitted, but not both. The main board can't be renamed.
kanbn boards --delete "board-slug"
kanbn boards -d "board-slug"
Delete a board file. Task files are never deleted, but tasks referenced only by this board become
untracked - if that would happen, the tasks are listed and -f is required to go ahead.
kanbn boards --json
kanbn boards -j
Output the board list, or the cross-board task overview, in JSON format.

❯ kanbn task#

Show a kanbn task.

kanbn task "task-id"
kanbn t "task-id"
Show information about a kanbn task.
Options:
kanbn task "task-id" --json
kanbn task "task-id" -j
Show task information in JSON format.
kanbn task "task-id" --board "board-slug"
kanbn task "task-id" -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.
kanbn task "Buy milk"
A simple task - a line in a column that isn't a task link - has no task file to show, so this
reports which column it's in and how to promote it.

❯ kanbn add#

Add a kanbn task.

kanbn add
kanbn a
Create a new task and add it to the index.
Options:
kanbn add --interactive
kanbn add -i
Create a new task or add untracked tasks interactively.
kanbn add --name "name"
kanbn add --n "name"
Create a new task with the specified name. This option is required if not adding a task interactively.
kanbn add --description "description"
kanbn add -d "description"
Create a new task with the specified description.
kanbn add --column "column"
kanbn add -c "column"
Create a new task and add it to the specified column in the index. If this is not specified, the task will be added to the first available column.
kanbn add --due "date"
kanbn add -e "date"
Create a new task and set the due date. The date can be in (almost) any format.
kanbn add --plannedStart "date"
Create a new task and set the planned start date used for gantt scheduling. The date can be in (almost) any format.
kanbn add --plannedFinish "date"
Create a new task and set the planned finish date used for gantt scheduling. The date can be in (almost) any format.
kanbn add --progress N
Create a new task and set its progress. This should be a number between 0 (not started) and 1 (complete).
kanbn add --assigned "name"
kanbn add -a "name"
Create a new task and set the assigned user name. If this option is left blank, the task is assigned to the current user.
The current user comes from KANBN_USER or your git identity, canonicalised against the contributors list if the workspace has one - see kanbn contributors --help.
kanbn add --sub-task "sub-task"
kanbn add -s "sub-task"
Create a new task with a sub-task. The sub-task text can be prefixed with "[ ] " or "[x] " to set the completion status.
kanbn add --tag "tag"
kanbn add -t "tag"
Create a new task with a tag.
kanbn add --relation "relation"
kanbn add -r "relation"
Create a new task with a relation. The relation should be an existing task id, optionally prefixed with a relation type.
Examples:
"blocks my-task-1"
"duplicates my-task-2"
kanbn add --<custom field name> <value>
Create a new task with a custom metadata field.
The custom field must be declared in the customFields project option.
kanbn add --untracked
kanbn add -u
Find all untracked tasks and add them to the index. If a column name is not specified, the tasks will be added to the first column.
kanbn add --untracked "filename"
kanbn add -u "filename"
Add untracked tasks in the specified file(s) to the the index. This option can be repeated to add multiple files.
Examples:
kanbn a -n "My Task #1" -c "Todo" -s "[x] My sub-task" -t "Tag 1" -t "Tag 2" -r "duplicates my-task-2"
Creates a task with id "my-task-1" in column "Todo" with a completed sub-task, 2 tags, and a "duplicates" relation to "my-task-2".
kanbn a -ui -f "my-task-3" -f "my-task-4" -c "Done"
Interactively adds untracked tasks "my-task-3.md" and "my-task-4.md" to the "Done" column.
kanbn add --board "board-slug"
kanbn add -b "board-slug"
Add the task to a board other than the main one. This option can be repeated to put one task on
several boards at once - the task file is created once and every board named references it:
kanbn add -n "Task" -b index -b design -c Todo -c Designing
Each -b pairs with the -c in the same position; boards with no -c of their own
use the first one given, and a board that hasn't got that column falls back to its first column
with a notice. With a single board an unknown column is still an error.
Boards can declare actions - rules that fire when a task changes, e.g. "when this enters In
Progress, assign it to me and tag it active". See docs/actions.md.
kanbn add --no-actions
Run without firing any action rules. KANBN_NO_ACTIONS=1 does the same for a whole shell.

❯ kanbn edit#

Edit a kanbn task.

kanbn edit "task-id"
kanbn e "task-id"
Edit an existing task and set its 'updated' date. This command can be used to rename and move tasks as well.
Options:
kanbn edit "task-id" --interactive
kanbn edit "task-id" -i
Edit a task interactively.
kanbn edit "task-id" --name "name"
kanbn edit "task-id" -n "name"
Modify a task name.
kanbn edit "task-id" --description "description"
kanbn edit "task-id" -d "description"
Modify a task description.
kanbn edit "task-id" --column "column"
kanbn edit "task-id" -c "column"
Move a task to a different column.
kanbn edit "task-id" --due "date"
kanbn edit "task-id" -e "date"
Modify a task due date. The date can be in (almost) any format.
kanbn edit "task-id" --plannedStart "date"
Modify the planned start date used for gantt scheduling. The date can be in (almost) any format.
kanbn edit "task-id" --plannedFinish "date"
Modify the planned finish date used for gantt scheduling. The date can be in (almost) any format.
kanbn edit "task-id" --progress N
Modify a task's progress. This should be a number between 0 (not started) and 1 (complete).
kanbn edit "task-id" --assigned "name"
Modify a task assigned user name. If this option is left blank, the task is assigned to the current user.
The current user comes from KANBN_USER or your git identity, canonicalised against the contributors list if the workspace has one - see kanbn contributors --help.
kanbn edit "task-id" --remove-sub-task "sub-task"
Remove a sub-task.
kanbn edit "task-id" --sub-task "sub-task"
kanbn edit "task-id" -s "sub-task"
Add or modify a sub-task. The sub-task text can be prefixed with "[ ] " or "[x] " to set the completion status.
kanbn edit "task-id" --remove-tag "tag"
Remove a tag.
kanbn edit "task-id" --tag "tag"
kanbn edit "task-id" -t "tag"
Add a tag.
kanbn edit "task-id" --remove-relation "relation"
Remove a relation.
kanbn edit "task-id" --relation "relation"
kanbn edit "task-id" -r "relation"
Add or modify a relation. The relation should be an existing task id, optionally prefixed with a relation type.
Examples:
"blocks my-task-1"
"duplicates my-task-2"
kanbn edit "task-id" --unset "field"
Remove a metadata field from a task. This option can be repeated to remove several fields.
Available fields: started, completed, due, plannedStart, plannedFinish, assigned, progress, tags,
plus any custom fields declared in the customFields project option.
Examples:
kanbn edit "task-id" --unset completed
Reopen a completed task by clearing its completed date.
kanbn edit "task-id" --unset started --unset completed
Clear both dates.
A field cannot be set and unset in the same command. If a task is moved into a started or
completed column by the same command, the unset is applied afterwards, so it wins.
kanbn edit --<custom field name> <value>
Add or modify a custom metadata field.
The custom field must be declared in the customFields project option.
kanbn edit --remove-<custom field name>
Remove a custom metadata field.
kanbn edit "task-id" --board "board-slug"
kanbn edit "task-id" -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.
kanbn edit "Buy milk"
Editing a simple task - a line in a column that isn't a task link - promotes it to a real task
file first, and then applies the edit. The new task is created in the column the line was in,
with a created date as of the promotion. There is no way back.
Boards can declare actions - rules that fire when a task changes, e.g. "when this enters In
Progress, assign it to me and tag it active". See docs/actions.md.
kanbn edit --no-actions
Run without firing any action rules. KANBN_NO_ACTIONS=1 does the same for a whole shell.

❯ kanbn rename#

Rename a kanbn task.

kanbn rename "task-id"
kanbn ren "task-id"
Rename a task. This will change the task filename and update the index. The task 'updated' date will also be set.
Options:
kanbn rename "task-id" --interactive
kanbn rename "task-id" -i
Rename a task interactively.
kanbn rename "task-id" --name "name"
kanbn rename "task-id" -n "name"
Rename the task with the specified name. This option is required if not renaming a task interactively.
kanbn rename "task-id" --board "board-slug"
kanbn rename "task-id" -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.

❯ kanbn move#

Move a kanbn task to another column.

kanbn move "task-id"
kanbn mv "task-id"
Move an existing task to a different column or position. The task 'updated' date will also be set.
Options:
kanbn move "task-id" --interactive
kanbn move "task-id" -i
Move a task interactively.
kanbn move "task-id" --column "column"
kanbn move "task-id" -c "column"
Move the task to this column in the index. If this option is not specified, the task will remain in its current column.
kanbn move "task-id" --position N
kanbn move "task-id" -p N
Move the task to a specific position in the target column. If this option is not specified, the task will be moved to the end of the target column.
kanbn move "task-id" --position N --relative
kanbn move "task-id" --position N -r
Move the task to a position relative to its current position in the target column.
When specifying a negative value for N, the negative sign can be escaped with '/' or '\\' to prevent the value being recognised as an option. For example:
kanbn mv "task-1" -p \\-1 --relative
kanbn move "task-id" --board "board-slug"
kanbn move "task-id" -b "board-slug"
Move the task on a board other than the main one. If the task isn't on that board yet it is
added, with a notice - so pulling work onto a board is one command rather than two.
kanbn move "task-id" -b "board-slug" --no-add
Refuse to move a task that isn't on the target board, instead of adding it.
The main board never adds implicitly: moving an untracked task there is an error either way.
Simple tasks - lines in a column that aren't task links - can be moved too, by title:
kanbn move "Buy milk" -c "Done"
Move a simple task to another column. The title matches exactly, ignoring case, or slugified.
A real task with the same id always wins. Leave off -c to reposition it in its own column.
kanbn move "Buy milk" -b "board-slug" -c "column"
Move a simple task onto another board. A simple task is content in one board file rather than a
shared task file, so this moves the line: it leaves this board and joins the other one.
Boards can declare actions - rules that fire when a task changes, e.g. "when this enters In
Progress, assign it to me and tag it active". See docs/actions.md.
kanbn move --no-actions
Run without firing any action rules. KANBN_NO_ACTIONS=1 does the same for a whole shell.

❯ kanbn comment#

Add a comment to a task.

kanbn comment "task-id"
kanbn c "task-id"
Add a comment to a task.
Options:
kanbn comment "task-id" --interactive
kanbn comment "task-id" -i
Add a comment interactively.
kanbn comment "task-id" --author "name"
kanbn comment "task-id" -a "name"
Set the comment author. If this option is left blank or omitted, the current user is used, and the comment has no author at all if there isn't one.
The current user comes from KANBN_USER or your git identity, canonicalised against the contributors list if the workspace has one - see kanbn contributors --help.
kanbn comment "task-id" --text "text"
kanbn comment "task-id" -t "text"
Set the comment text.
kanbn comment "task-id" --board "board-slug"
kanbn comment "task-id" -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.
Boards can declare actions - rules that fire when a task changes, e.g. "when this enters In
Progress, assign it to me and tag it active". See docs/actions.md.
kanbn comment --no-actions
Run without firing any action rules. KANBN_NO_ACTIONS=1 does the same for a whole shell.

❯ kanbn remove#

Remove a kanbn task.

kanbn remove "task-id"
kanbn rm "task-id"
Remove an existing task. This deletes the task file and its index entry. A partial id (a unique
prefix or part of the id) is resolved to the task it matches, and the confirmation prompt names it.
Options:
kanbn remove "task-id" --index
kanbn remove "task-id" -x
Only remove the task from the index. The task file will not be deleted.
kanbn remove "task-id" --force
kanbn remove "task-id" -f
Force remove the task without asking for confirmation.
kanbn remove "task-id" --board "board-slug"
kanbn remove "task-id" -b "board-slug"
Remove the task from that board. Combine this with --index to remove it from that board
only - boards own membership, so the task file and its entries on every other board are
untouched.
kanbn remove "task-id" --all-boards
Task files are shared between boards, so deleting one while another board still references it is
refused. This removes the task from every board that references it, then deletes the file.
kanbn remove "Buy milk"
Remove a simple task - a line in a column that isn't a task link - by title. There is no file to
delete and nothing to archive, so --index and --all-boards don't apply.
Boards can declare actions - rules that fire when a task changes, e.g. "when this enters In
Progress, assign it to me and tag it active". See docs/actions.md.
kanbn remove --no-actions
Run without firing any action rules. KANBN_NO_ACTIONS=1 does the same for a whole shell.

❯ kanbn find#

Search for kanbn tasks.

kanbn find
kanbn f
Search all tasks in the index and show search results. If no filters are specified, this command will list all tracked tasks.
String search terms are treated as case-insensitive regular expressions.
Date filters match a single day, or a range if the option is repeated.
Numeric filters match a single value, or a range if the option is repeated.
Only tasks that match all of the filters will be returned.
Filters ignore hidden columns - use --column to exclude them.
See docs/filtering-and-sorting.md for a full description of the filter model.
Options:
kanbn find --interactive
kanbn find -i
Build search filters interactively.
kanbn find --quiet
kanbn find -q
Only show task ids in the output.
kanbn find --json
kanbn find -j
Output results in JSON format. If used with the --quiet option, this will return an array of task ids.
kanbn find --id "search term"
Find tasks that have an id containing "search term".
kanbn find --name "search term"
kanbn find -n "search term"
Find tasks that have a name containing "search term".
kanbn find --description "search term"
kanbn find -d "search term"
Find tasks that have a description containing "search term".
kanbn find --column "column"
kanbn find -c "column"
Find tasks that are in a specific column. This option can be repeated to find tasks in any one of multiple columns.
kanbn find --created "date"
Find tasks that were created on a specific date. The time part of the date will be ignored, unless searching between multiple dates.
This option can be repeated - if multiple dates are specified, find tasks that were created between the earliest and latest dates.
The date can be in (almost) any format.
kanbn find --updated "date"
Find tasks that were updated on a specific date. The time part of the date will be ignored, unless searching between multiple dates.
This option can be repeated - if multiple dates are specified, find tasks that were updated between the earliest and latest dates.
The date can be in (almost) any format.
kanbn find --started "date"
Find tasks that have a started date that matches the specified date. The time part of the date will be ignored, unless searching between multiple dates.
This option can be repeated - if multiple dates are specified, find tasks that were started between the earliest and latest dates.
The date can be in (almost) any format.
kanbn find --completed "date"
Find tasks that have a completed date that matches the specified date. The time part of the date will be ignored, unless searching between multiple dates.
This option can be repeated - if multiple dates are specified, find tasks that were completed between the earliest and latest dates.
The date can be in (almost) any format.
kanbn find --due "date"
kanbn find -e "date"
Find tasks that are due on a specific date. The time part of the date will be ignored, unless searching between multiple dates.
This option can be repeated - if multiple dates are specified, find tasks that are due between the earliest and latest dates.
The date can be in (almost) any format.
kanbn find --plannedStart "date"
Find tasks that have a planned start date that matches the specified date. The time part of the date will be ignored, unless searching between multiple dates.
This option can be repeated - if multiple dates are specified, find tasks with a planned start date between the earliest and latest dates.
The date can be in (almost) any format.
kanbn find --plannedFinish "date"
Find tasks that have a planned finish date that matches the specified date. The time part of the date will be ignored, unless searching between multiple dates.
This option can be repeated - if multiple dates are specified, find tasks with a planned finish date between the earliest and latest dates.
The date can be in (almost) any format.
kanbn find --assigned "name"
Find tasks assigned to a specific user. Use "^$" to find unassigned tasks, and @me for tasks assigned to you.
kanbn find --workload N
Find tasks with a specific calculated workload.
If multiple values are specified, find tasks with a workload between the lowest and highest inputs.
kanbn find --progress N
Find tasks with a specific progress value (between 0 and 1).
If multiple values are specified, find tasks with progress between the lowest and highest inputs.
kanbn find --overdue
kanbn find --no-overdue
Find tasks that are (or are not) overdue. A task is overdue if it has a due date in the past and
hasn't been completed. A task with no due date is never overdue.
kanbn find --is-started
kanbn find --no-is-started
Find tasks that do (or don't) have a started date in their metadata.
kanbn find --is-completed
kanbn find --no-is-completed
Find tasks that do (or don't) have a completed date in their metadata.
kanbn find --in-started-column
kanbn find --no-in-started-column
Find tasks that are (or aren't) in one of the board's startedColumns. If the board declares no
startedColumns, no task is in a started column.
kanbn find --in-completed-column
kanbn find --no-in-completed-column
Find tasks that are (or aren't) in one of the board's completedColumns.
kanbn find --sub-task "search term"
kanbn find -s "search term"
Find tasks that have sub-tasks matching the search term.
kanbn find --count-sub-tasks N
Find tasks that have a specific number of sub-tasks.
If multiple counts are specified, find tasks with a number of sub-tasks between the lowest and highest inputs.
kanbn find --tag "search term"
kanbn find -t "search term"
Find tasks that have tags matching the search term.
kanbn find --count-tags N
Find tasks that have a specific number of tags.
If multiple counts are specified, find tasks with a number of tags between the lowest and highest inputs.
kanbn find --relation "search term"
kanbn find -r "search term"
Find tasks that have relations matching the search term.
kanbn find --count-relations N
Find tasks that have a specific number of relations.
If multiple counts are specified, find tasks with a number of relations between the lowest and highest inputs.
kanbn find --comment "search term"
Find tasks that have comments matching the search term.
kanbn find --count-comments N
Find tasks that have a specific number of comments.
If multiple counts are specified, find tasks with a number of comments between the lowest and highest inputs.
kanbn find --<custom field name> "search term"|N|date
Find tasks with a custom metadata field that matches the search filter.
The custom field must be declared in the customFields project option.
If the custom field is a string and multiple filters are specified, find tasks with a value that matches one of the inputs.
If the custom field is numeric and multiple filters are specified, find tasks with a value between the lowest and highest inputs.
If the custom field is a date and multiple filters are specified, find tasks with a value between the earliest and latest dates.
If the custom field is a boolean, use --<custom field name> to match true and --no-<custom field name> to match false.
Examples:
kanbn find --column Todo --column "In Progress" --assigned "^Ana$"
Find tasks assigned to exactly "Ana" that are in either the "Todo" or "In Progress" column.
kanbn find --tag "(^|\n)Bug($|\n)" --due "1 July 2026" --due "31 July 2026"
Find tasks with the exact tag "Bug" that are due in July 2026.
Tags are matched against a newline-separated list, so anchoring on line breaks matches a whole tag.
kanbn find --count-sub-tasks 1 --count-sub-tasks 99 --progress 0 -q
List the ids of tasks that have sub-tasks but no progress yet.
kanbn find --overdue --no-in-started-column -q
List the ids of overdue tasks that nobody has picked up yet.
kanbn find --board "board-slug"
kanbn find -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.
kanbn find --all-boards
Search every board in the workspace. A task on several boards appears once, annotated with the
board and column it occupies on each. Without this, the search is scoped to the target board.
Computed values are evaluated per board, so a task matches --in-started-column if it is in
a started column on any of them.
This can't be combined with --sprint: sprint numbers and names are relative to one board's
list, so there is no sensible answer across several.

❯ kanbn status#

Get project and task statistics.

kanbn status
kanbn s
Show status information for the current project.
Options:
kanbn status --quiet
kanbn status -q
Only show a count of tasks in each column, without loading all tracked tasks.
If used with the --untracked option, only show a list of untracked task filenames.
kanbn status --json
kanbn status -j
Output status information in JSON format.
kanbn status --untracked
kanbn status -u
Show a list of untracked task filenames. "Untracked" is workspace-scoped: a task is tracked if
any board references it, so this lists task files that are on no board at all.
When other boards track tasks that the target board doesn't, they're listed separately under
tasksOnOtherBoards, with the column each one occupies - the "what could I pull onto this
board" list.
kanbn status --due
kanbn status -e
Check for overdue tasks and include time remaining information in the output.
kanbn status --sprint N|"name"
kanbn status -p N|"name"
Show sprint workload for a specific sprint.
The sprint can be selected by number or name.
This option will be ignored if the --quiet option is set or if no sprint options are defined in the index.
kanbn status --date "date"
kanbn status -d "date"
Show task workloads for a specific date. The time part of the date will be ignored, unless searching between multiple dates.
This option can be repeated - if multiple dates are specified, show task workloads for tasks between the earliest and latest dates.
The date can be in (almost) any format.
This option will be ignored if the --quiet or --sprint options are set.
kanbn status --board "board-slug"
kanbn status -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.

❯ kanbn sort#

Sort a column in the index.

kanbn sort "column"
Sort a column in the index. The "column" value is optional if sorting a column interactively.
Some task attributes can be optionally transformed using case-insensitive regular expressions.
If a filter is specified, the matched text will be used when sorting.
If the filter regular expression has numbered capturing groups, the value of the first group will be used.
If the filter regular expression has named capturing groups, the value of all named groups will be concatenated.
If there are multiple matches, their values will be concatenated.
See docs/filtering-and-sorting.md for a full description of the sorting model.
Options:
kanbn sort --interactive
kanbn sort -i
Sort a column interactively.
kanbn sort --save
Save the column sort settings in the index file (as a columnSorting option). This means that any tasks added to the column will be automatically sorted.
If this option is not set, the column is sorted once and any saved sorting settings for the specified column will be removed.
kanbn sort --ascending
kanbn sort -a
Sort the column in ascending order. This is the default order. This option can be set after each sorting field. If this option is set before any sorting fields, all fields will be sorted in ascending order.
kanbn sort --descending
kanbn sort -z
Sort the column in descending order instead of default ascending order. This option can be set after each sorting field. If this option is set before any sorting fields, all fields will be sorted in descending order.
kanbn sort --id "filter"
Sort tasks by id.
kanbn sort --name "filter"
kanbn sort -n "filter"
Sort tasks by name.
kanbn sort --description "filter"
kanbn sort -d "filter"
Sort tasks by description.
kanbn sort --created
Sort tasks by created date.
kanbn sort --updated
Sort tasks by updated date.
kanbn sort --started
Sort tasks by started date.
kanbn sort --completed
Sort tasks by completed date.
kanbn sort --due
kanbn sort -e
Sort tasks by due date.
kanbn sort --plannedStart
Sort tasks by planned start date.
kanbn sort --plannedFinish
Sort tasks by planned finish date.
kanbn sort --assigned
Sort tasks by assigned user name.
kanbn sort --progress
Sort tasks by progress.
kanbn sort --sub-task "filter"
kanbn sort -s "filter"
Sort tasks by sub-tasks.
kanbn sort --count-sub-tasks
Sort tasks by the number of sub-tasks.
kanbn sort --tag "filter"
kanbn sort -t "filter"
Sort tasks by tags.
kanbn sort --count-tags
Sort tasks by the number of tags.
kanbn sort --relation "filter"
kanbn sort -r "filter"
Sort tasks by relations.
kanbn sort --count-relations
Sort tasks by the number of relations.
kanbn sort --comment "filter"
Sort tasks by comments.
kanbn sort --count-comments
Sort task by the number of comments.
kanbn sort --workload
kanbn sort -w
Sort tasks by workload.
kanbn sort --overdue
Sort tasks by whether they are overdue. Ascending puts overdue tasks last.
kanbn sort --is-started
Sort tasks by whether they have a started date in their metadata.
kanbn sort --is-completed
Sort tasks by whether they have a completed date in their metadata.
kanbn sort --in-started-column
Sort tasks by whether they are in one of the board's startedColumns.
kanbn sort --in-completed-column
Sort tasks by whether they are in one of the board's completedColumns.
kanbn sort --<custom field name>
Sort tasks by a custom field value.
Examples:
kanbn sort "Todo" --created -z -n "Task (\\d+)" -w
Sort tasks in the "Todo" column first by created date in descending order, then by their name (filtered such that only numeric characters after the string "Task " are used) in ascending order, then by workload in ascending order
kanbn sort "Todo" -z -n --count-tags
Sort tasks in the "Todo" column first by name, then by the number of tags, all in descending order
kanbn sort "Todo" --overdue -z -e -a
Sort tasks in the "Todo" column so that overdue tasks come first, then by due date in ascending order
kanbn sort "column" --board "board-slug"
kanbn sort "column" -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.

❯ kanbn sprint#

Start a new sprint.

kanbn sprint
kanbn sp
Start a new sprint.
Options:
kanbn sprint --interactive
kanbn sprint -i
Start a new sprint interactively.
kanbn sprint --name "name"
kanbn sprint -n "name"
Start a new sprint with the specified name.
kanbn sprint --description "description"
kanbn sprint -d "description"
Start a new sprint with the specified description.
kanbn sprint --board "board-slug"
kanbn sprint -b "board-slug"
Add a sprint from the context of another board. Sprints are workspace-level by default, so this
appends to the workspace list and says so. A board that declares its own sprints in its
front matter gets the sprint appended there instead, auto-named {Board name} Sprint {n} so
that two boards' sprints can't be confused.
A board with its own list can't see the workspace sprints at all - that's the cost of forking,
and it's why forking is a deliberate front-matter edit rather than a flag.

❯ kanbn burndown#

View a burndown chart.

kanbn burndown
kanbn bd
Show a burndown chart between a date range, or for a particular sprint.
If no dates or sprint identifiers are specified, show data for the current sprint.
If no sprints are defined, show data from the earliest created date to the current date.
Burndown data source:
When a task has a structured `History` section, burndown uses its lifecycle events (created, moved, progress, archived, restored) to reconstruct task activity over time.
For older tasks without history, burndown falls back to metadata/date inference (created/started/completed + startedColumns/completedColumns).
Options:
kanbn burndown --json
kanbn burndown -j
Output raw data instead of rendering a chart. The data will be returned in JSON format.
kanbn burndown --sprint N|"name"
kanbn burndown -p N|"name"
Show burndown data for the specified sprint. This option can be repeated to show burndown data for multiple sprints.
kanbn burndown --date "date"
kanbn burndown -d "date"
Show burndown data for the specified dates.
If only one date is provided, show burndown data from this date up to the present date.
If more than 2 dates are provided, show burndown data from the earliest to latest date.
This option will be ignored if a valid sprint number or name is specified.
kanbn burndown --column "column"
kanbn burndown -c "column"
Filter for tasks in a particular column. This option can be repeated to include multiple columns.
kanbn burndown --assigned "user"
kanbn burndown --assigned @me
kanbn burndown -a "user"
Filter for tasks that are assigned to a particular user.
kanbn burndown --normalise "days"|"hours"|"minutes"|"seconds"
kanbn burndown --n "days"|"hours"|"minutes"|"seconds"
Normalise dates. Task event times (history events or legacy created/started/completed dates) will be rounded down to the nearest day, hour, minute or second. This may cause task events to be grouped together.
If this option is set to a blank or unsupported value, the normalisation mode will be automatically selected based on the date range.
kanbn burndown --board "board-slug"
kanbn burndown -b "board-slug"
Chart a board other than the main one. Burndown measures work in flight, so a board that
declares no startedColumns has nothing to chart and says so rather than drawing an empty
chart.

❯ kanbn gantt#

View a gantt chart.

kanbn gantt
kanbn gt
Show a gantt chart for tracked tasks.
Tasks are ordered using `depends-on` relations when present. The chart prioritizes optional `plannedStart`/`plannedFinish` metadata when arranging bars, then falls back through `started`/`completed` dates, and finally uses workload-based best-effort scheduling when no timeline dates are available.
The rendered chart includes:
Dependency arrows (└─→) showing which tasks depend on others
A blocked indicator (⧗) showing tasks delayed by dependencies
Options:
kanbn gantt --json
kanbn gantt -j
Output raw data instead of rendering a chart. The data will be returned in JSON format.
kanbn gantt --assigned "user"
kanbn gantt --assigned @me
kanbn gantt -a "user"
Filter for tasks that are assigned to a particular user.
kanbn gantt --column "column"
kanbn gantt -c "column"
Filter for tasks in a particular column. This option can be repeated to include multiple columns.
kanbn gantt --date "date"
kanbn gantt -d "date"
Filter for tasks created within a specified date range.
If only one date is provided, show tasks created from this date up to the present date.
If more than one date is provided, show tasks created between the earliest and latest date.
kanbn gantt --now "date"
kanbn gantt -n "date"
Mock the current date used for the "now" line and single-date range filtering.
kanbn gantt --board "board-slug"
kanbn gantt -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.

❯ kanbn validate#

Validate index and task files.

kanbn validate
Validate kanbn index file and all task files, and report any formatting errors.
If the files are valid, this also reports tasks whose started/completed dates don't match the column
they're in - which usually means the task was moved by hand or by a merge, rather than through kanbn.
It also lists any line in a column that isn't a task link. Those lines are kept in the board file and
ignored by every other command, so this is information rather than a problem - except for a line that
looks like a task link with a typo in it, or one naming a task file that exists, both of which mean a
task isn't being tracked when it probably should be.
Options:
kanbn validate --save
Re-save the index and task files. This will ensure that all index column sorting settings are applied and that all tasks are formatted correctly.
kanbn validate --fix
kanbn validate -f
Fill in missing started and completed dates for tasks that are sitting in a started or completed
column without one. Each date is taken from the task's history where the move was recorded,
falling back to the task's updated date and then its created date.
Tasks that have a completed date while sitting outside a completed column are reported but never
changed, because the date records something that actually happened. Use
kanbn edit "task-id" --unset completed to clear one deliberately.
kanbn validate --json
kanbn validate -j
Output validation errors in JSON format. When there is nothing to report beyond date drift this
is the bare list of drift entries; when there are warnings as well - or the workspace has more
than one board - it is an object with drift and warnings keys.
kanbn validate --board "board-slug"
kanbn validate -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.
kanbn validate --all-boards
Validate every board in the workspace and the tasks each of them references, rather than just
the target board.
In a workspace with more than one board, validate also reports multi-board warnings - a
workspace-scoped option in a board file, several boards stamping the same shared date, sprints out
of order, a task on no board at all, history naming a board that has been deleted, and markdown
files beside the boards that don't parse as one. These are warnings, not errors: each describes a
workspace that still works, just not the way its author probably meant it to.
Action rules are checked too. A rule that names an unknown event or verb, moves to a column that
doesn't exist, or writes a field Kanbn manages is an error - the same commands that would have
run it fail before writing anything. Rules that work but probably don't do what they look like -
two rules writing the same field on the same event, or @me where no user can be resolved - are
reported as warnings.

❯ kanbn archive#

Archive a task.

kanbn archive "task-id"
kanbn arc "task-id"
Move an existing task to the archive. The task's column will be stored in the task metadata.
Options:
kanbn archive "task-id"
Move a task to the archive. A partial id (a unique prefix or part of the id) asks for
confirmation before archiving the task it matched.
kanbn archive "task-id" --force
kanbn archive "task-id" -f
Don't ask for confirmation when a partial id is matched.
kanbn archive --list
kanbn archive -l
Show a list of archived task filenames.
kanbn archive "task-id" --board "board-slug"
kanbn archive "task-id" -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.
Boards can declare actions - rules that fire when a task changes, e.g. "when this enters In
Progress, assign it to me and tag it active". See docs/actions.md.
kanbn archive --no-actions
Run without firing any action rules. KANBN_NO_ACTIONS=1 does the same for a whole shell.

❯ kanbn restore#

Restore a task from the archive.

kanbn restore "task-id"
kanbn res "task-id"
Restore an archived task from the archive.
Options:
kanbn restore "task-id"
Restore a task from the archive and place it in the task's original column.
kanbn restore "task-id" --column "column"
kanbn restore "task-id" -c "column"
Restore a task from the archive and place it in the specified column.
kanbn restore "task-id" --board "board-slug"
kanbn restore "task-id" -b "board-slug"
Restore the task to that board only. Without this, the task goes back to every board it was on
when it was archived, in the column it occupied on each. A board that has since been deleted is
reported and skipped rather than failing the restore.
Boards can declare actions - rules that fire when a task changes, e.g. "when this enters In
Progress, assign it to me and tag it active". See docs/actions.md.
kanbn restore --no-actions
Run without firing any action rules. KANBN_NO_ACTIONS=1 does the same for a whole shell.

❯ kanbn remove-all#

Remove the kanbn board and all tasks.

kanbn remove-all
Completely remove the Kanbn directory and all of the contents.
Make sure you have anything that you want to keep backed-up before running this.
Options:
kanbn remove-all --force
kanbn remove-all -f
Force delete without asking for confirmation.

❯ kanbn history#

Show task history.

kanbn history
kanbn hi
Show a chronological listing of task events.
Options:
kanbn history --json
kanbn history -j
Output raw history data in JSON format.
kanbn history --sprint N|"name"
kanbn history -p N|"name"
Filter history to one or more sprints.
This option can be repeated to include multiple sprints.
kanbn history --date "date"
kanbn history -d "date"
Filter history by date.
If one date is provided, show history from this date up to the present date.
If two or more dates are provided, show history from the earliest to latest date.
kanbn history --assigned "user"
kanbn history --assigned @me
kanbn history -a "user"
Filter for tasks assigned to a specific user.
kanbn history --task "task-id"
kanbn history -t "task-id"
Filter for one or more task ids.
This option can be repeated.
kanbn history --board "board-slug"
kanbn history -b "board-slug"
Target a board other than the main one. Falls back to the KANBN_BOARD environment variable and
then to the defaultBoard option. See kanbn boards for the list of boards.

❯ kanbn contributors#

List the workspace's contributors.

kanbn contributors
List the people who work on this workspace, and say which of them Kanbn thinks you are.
Contributors are an optional, workspace-scoped list declared in kanbn.yml / kanbn.json, or
in the main board's front matter:
contributors:
- gordon
- dave
- name: sam
displayName: Sam Vimes
email: sam@example.com
aliases:
- Samuel Vimes
- samv
colour: '#7c5cff'
A contributor can be a bare name or an object; only name is required, and it is the value
written into a task's assigned field or a comment's author.
Contributors are advisory. assigned and author stay free text and are never
validated against the list, never rejected and never rewritten - the list makes the common case one
keystroke instead of a retyped name, and makes the names a workspace uses discoverable.
The current user
Kanbn resolves "you" in this order, first match wins:
1. the KANBN_USER environment variable, used exactly as given
2. git config user.email matched against a contributor's email
3. git config user.name matched against a contributor's name, displayName or
aliases, ignoring case
4. git config user.name as-is
5. nobody
That value is what kanbn add --assigned and kanbn edit --assigned write when given no
value, what a comment's author defaults to, and what @me expands to in
kanbn find --assigned, kanbn burndown --assigned, kanbn gantt --assigned and
kanbn history --assigned.
Steps 2 and 3 are what canonicalise: on a machine whose git username is "Gordon Larrigan", a
workspace listing gordon with that name as an alias writes gordon into the task file.
With no contributors declared, this is exactly the git username Kanbn has always used.
Options:
kanbn contributors --usage
kanbn contributors -u
Show how many tasks and comments each contributor appears in, and every name used in a task that
isn't a known contributor. This is how you adopt contributors in an existing workspace: it tells
you what to put in the list, and which spellings to add as aliases.
It is read-only. Nothing is rewritten - renaming "Gordon" to "gordon" across every task file is a
bulk mutation and isn't done here.
kanbn contributors --json
kanbn contributors -j
Output the contributor list, or the usage report, in JSON format.

❯ kanbn completion#

Set up tab completion for your shell.

kanbn completion <shell>
Print a script that adds tab completion for kanbn to your shell. The shells supported are bash, zsh
and fish.
Commands, options, task ids, columns, boards, tags, assignees and sprints are completed. Task ids and
columns come from the board the command would target - so --board, KANBN_BOARD and the
defaultBoard option are all taken into account.
Options:
kanbn completion bash
Add eval "$(kanbn completion bash)" to ~/.bashrc. bash doesn't complete values that contain
spaces, such as most column names - zsh and fish do.
kanbn completion zsh
Add eval "$(kanbn completion zsh)" to ~/.zshrc, after compinit - it does nothing before it.
Or save it as _kanbn in a directory on your $fpath:
kanbn completion zsh > ~/.zsh/completions/_kanbn
kanbn completion fish
Save it where fish looks for completions:
kanbn completion fish > ~/.config/fish/completions/kanbn.fish
See docs/completion.md for more.

Found a mistake? Edit this page on GitHub.