This guide covers the Signboard command-line interface.
- How to Run It
- Choose a Board
- Command Groups
- Reference Matching
- Machine-Readable Output for Agents
- Common Workflows
- Archive Workflows
- Settings and Imports
- Markdown and Due-Date Conventions
- Troubleshooting
On macOS and Linux, the desktop app can install the Signboard wrapper from Help > Install Signboard CLI. Sorry for those of you on Windows, but you can use WSL (it is good, and you should!).
Once installed, try it out!
signboard --helpIf you want to run this at its full path...
/Applications/Signboard.app/Contents/MacOS/Signboard --helpOther packaged examples:
- Linux AppImage:
./signboard_*.AppImage --help
Most commands operate on one board root. To simplify subsequent calls, you can first "choose a board" for Signboard CLI to interact with.
signboard use /Path/To/BoardYou can always supply a differen't board's path with --board.
Example:
signboard lists --board /Path/To/BoardYou can print the current chosen board by running:
signboard useThe CLI is organized into six command groups:
listscardsarchivesettingsimport
List, create, or rename lists.
signboard lists
signboard lists --include-archive
signboard lists create "Waiting"
signboard lists rename "Waiting" "Blocked"Notes:
signboard listsexcludesXXX-Archiveunless you add--include-archive.- Newly created lists get an ordering prefix and a unique suffix automatically. This helps with name collisions.
List, read, create, or edit cards.
signboard cards
signboard cards "To do"
signboard cards --search release
signboard cards --label Urgent
signboard cards --label Urgent --label Writing --label-mode all
signboard cards --due today
signboard cards --due next:7 --due-source any
signboard cards --due overdue --task-status open
signboard cards --sort due
signboard cards --limit 10
signboard cards --include-archiveUseful filters:
--list <ref>repeatable--label <ref>repeatable--label-mode any|all--search <query>--due today|tomorrow|overdue|upcoming|this-week|next:7|next:14|next:30|YYYY-MM-DD|none--due-source any|card|task--task-status open|any--sort list|due|title|updated--limit <n>--include-archive
signboard cards read --card ab123
signboard cards read --list Doing --card "Ship release notes"
signboard cards read --card 003-ship-release-notes-ab123.mdcards read always returns JSON so it is safe for scripts and agents.
signboard cards create --list "To do" --title "Ship release notes"
signboard cards create --list "To do" --title "Write announcement" --due 2026-04-10
signboard cards create --list "To do" --title "Draft copy" --label Writing --label MarketingCreate options:
--list <list-ref>required--title <title>required--body <text>--body-file <path>--due <YYYY-MM-DD|none>--label <ref>repeatable
Using a body file means you can make your commands much shorter and import previous content faster, potentially.
Example with a body file:
signboard cards create \
--list "To do" \
--title "Launch checklist" \
--body-file ./launch-checklist.mdsignboard cards edit --card ab123 --title "Ship v1.2.0"
signboard cards edit --card ab123 --due 2026-04-12
signboard cards edit --card ab123 --due none
signboard cards edit --card ab123 --move-to Doing
signboard cards edit --card ab123 --append-body $'\n\nFollow up with QA.'
signboard cards edit --card ab123 --set-label Urgent
signboard cards edit --card ab123 --add-label Docs --remove-label BacklogEdit options:
--card <card-ref>required--list <list-ref>optional disambiguation when card refs are not unique--title <title>--body <text>--body-file <path>--append-body <text>--due <YYYY-MM-DD|none>--set-label <ref>repeatable, replaces all labels--add-label <ref>repeatable--remove-label <ref>repeatable--move-to <list-ref>
The CLI accepts flexible references so you do not always need exact filenames.
Lists can be matched by:
- directory name
- display name
- unique partial match of either
Example:
signboard lists rename wait blockedIf wait matches exactly one list, the command succeeds. If it matches multiple lists, the CLI fails with an ambiguity error.
Cards can be matched by:
- filename
- 5-character card id
- title
- unique partial match of any of those
Examples:
signboard cards read --card ab123
signboard cards read --card "Ship release notes"
signboard cards read --card ship-releaseLabels can be matched by:
- label id
- label name
- unique partial match
Prefer --json whenever you need reliable parsing.
Examples:
signboard lists --json
signboard cards --due next:7 --json
signboard archive cards --search launch --json
signboard settings --json
signboard import obsidian --source ~/Vault/Boards --jsonRecommended agent workflow:
- Pass
--board <path>instead of changing global state withsignboard use. - Read before write when references may be ambiguous.
- Use
--jsonfor reads and verification. - Use exact list or card references when possible.
signboard cards --due this-week --sort due --jsonsignboard cards --due overdue --due-source task --task-status open --jsonsignboard cards create --list Backlog --title "Write release post" --label Docs --due 2026-04-08
signboard cards edit --card "Write release post" --move-to Doingsignboard cards --search releasesignboard cards --label Docs --label Review --label-mode allsignboard cards --sort updated --limit 20 --jsonThe CLI can find and restore archived cards and lists.
signboard archive cards
signboard archive cards --search launch --jsonsignboard archive lists
signboard archive lists --search done --jsonsignboard archive read --kind card --entry ab123
signboard archive read --kind list --entry "Done"signboard archive restore-card --card ab123 --to-list "To do"The --card value can be an archive path, archived filename, card id, or title as long as it resolves uniquely.
signboard archive restore-list --list "Completed Sprint"
signboard archive restore-list --list "Completed Sprint" --as 010-Completed-Sprint-restoredIf you use --as, provide the directory name you want for the restored list.
signboard settings
signboard settings --jsonThis returns the board settings Markdown document, including labels, color scheme data, notifications, and tooltip settings.
Current CLI editing support is intentionally narrow.
For label editing, color-scheme changes, and notification changes, use the desktop app or edit board-settings.md carefully.
Trello will give you a JSON export of any board. You can import it into the current board.
signboard import trello --file ~/Downloads/trello-export.jsonYou can import any Markdown files. But also Signboard supports the frontmatter and metadata created by most of the leading popular community kanban plugins for Obsidian.
signboard import obsidian --source ~/Vault/Kanban.md
signboard import obsidian --source ~/Vault/Boards --source ~/Vault/ExtraBoard.mdTasks.md is one of the most popular Markdown kanban apps on GitHub. You can import data created with that app into Signboard.
signboard import tasksmd --source ~/Projects/MyTasksBoardAll import commands support --json.
Cards are Markdown files with frontmatter. The CLI reads and writes that structure for you. So you don't need to worry about that unless you are supplying your own files.
Use ISO local dates:
YYYY-MM-DD
Examples:
2026-04-022026-04-14noneto clear the card due date
Checklist items may also contain due dates in the body:
- [ ] (due: 2026-04-05) Review screenshots
- [x] (due: 2026-04-01) Draft release notesThese task due dates participate in due-date filtering and temporal views.