The ct command line
Manage todos from the terminal with JSON-first output — built for scripts, git hooks, and coding agents.
ct is createtodo in your terminal. Every command prints JSON, so results pipe straight
into jq, git hooks, or an agent’s context.
Install and sign in
npm install -g @createtodo/cli
ct login # opens the browser to approve this device
ct status # which workspace and member you are
ct login approves the device in your browser and stores a workspace
API key locally. ct login --api-key <key> stores a key you made yourself;
CREATETODO_API_KEY in the environment skips login for CI.
The core loop
ct ready # actionable work: open, not blocked, not claimed by another session
ct claim MZ-123 # assign to yourself, mark it started, take a lease
ct show MZ-123 # description, subtodos and relations
ct check MZ-123 2 --note "covered by the e2e spec" # tick acceptance criterion 2
ct close MZ-123 # done — response lists newly unblocked todos
Dependencies make the loop self-organizing: ct dep add MZ-124 MZ-123
means MZ-124 waits on MZ-123, ct ready hides blocked work, and closing a blocker reports
what it freed up. ct health surfaces stale, orphaned and thin todos before they rot.
Filing work
ct create "Fix sync retry loop" -l engineering -p high --label AI \
-d "Retries hammer the API after a 401." --acceptance="- backoff caps at 60s"
ct create "Extract the retry helper" --parent MZ-123 # a subtodo
ct update MZ-123 -s "In Progress" -a me --due 2026-11-01
ct label add MZ-123 Bug
ct comment MZ-123 "Root cause: the token refresh raced the retry."
ct create warns when a top-level todo has no description or acceptance criteria, and
agents label what they file AI.
Claims and leases
ct claim takes a lease on the todo for this session, renewed by every ct command that
names the todo and expiring 15 minutes after the last one. The app shows it as a chip beside
the assignee with the session’s name, and ct ready hides todos another live session holds.
ct claim refuses a live foreign lease unless you pass --force; ct close releases the
lease, ct release MZ-123 releases it without closing.
Asking and remembering
ct ask "title" --todo MZ-123 --questions '[…]' files a questionnaire
you answer in the app; ct answers <id> reads it back, ct questionnaires --status open
lists what is waiting and ct dismiss <id> withdraws one asked by mistake. ct remember, ct memories and ct forget manage
workspace memory.
Repos and offline
ct link <list>binds a repository to a list:ct createfiles there andct primescopes to it.ct unlinkremoves the binding.ct pullbuilds a local replica; reads fall back to it when the API is unreachable, and--localforces it. Writes made offline wait inct queue(flush,drop <id>,clear).ct syncmirrors every todo into the repo as JSON files.
Teach your agent the conventions
ct skill install claude-code # also: codex, cursor, gemini, universal
ct init # runs `ct prime` on session start and after compaction
The skill teaches the commands and the conventions that matter: reference todos by
identifier, never invent one, write real descriptions, ask instead of guessing. ct prime
prints what is in progress, what is ready and those conventions. Run ct help for the full
command surface and ct <command> --help for any command’s flags.