This project uses tk for ticket tracking. Tickets are stored as markdown files with YAML frontmatter in the .tickets/ directory.
tk ready # Find available work (no blockers)
tk show <id> # View ticket details
tk start <id> # Claim work (set status to in_progress)
tk close <id> # Complete work (set status to closed)
tk ls --status=open # List all open ticketstk ready- Show open/in-progress tickets with all dependencies resolved (sorted by priority ascending, 0=highest)tk ready --sort date- Same, sorted by creation date (newest first)tk show <id>- Detailed ticket view with metadata and relationshipstk start <id>- Set status to in_progress (claim work)tk ls- List all ticketstk ls --status=open- All open ticketstk ls --status=in_progress- Your active worktk ls --status=closed- Recently closed ticketstk blocked- Show open/in-progress tickets with unresolved dependenciestk dep tree <id>- Show dependency tree (deduplicates by default)tk dep tree --full <id>- Show full tree (all occurrences, no deduplication)
tk new "Ticket title"- Create a new ticket (defaults to status: open, type: task, priority: 2)--type=bug|feature|task|epic|chore- Ticket type-p, --priority 0-4- Priority (0=critical, 2=medium, 4=backlog)-d, --description "..."- Description text-a, --assignee username- Assign to someone--parent <id>- Parent ticket ID--acceptance "..."- Acceptance criteria--design "..."- Design notes--external-ref "..."- External reference (e.g., gh-123)
tk close <id>- Set status to closed (mark complete)tk reopen <id>- Set status to opentk note <id> "..."- Append timestamped note to tickettk dep <id> <dependency-id>- Add dependency (first ticket depends on second)tk undep <id> <dependency-id>- Remove dependencytk link <id> <id> [id...]- Create symmetric link between tickets (bidirectional)
tk query- Output all tickets as JSON, one per linetk query '.priority == "0"'- Query with jq-style filterstk query '.status == "open"'- Find open ticketstk query '.type == "bug"'- Find bugs
tk prune- Dry-run: show dangling references (refs to deleted tickets)tk prune --fix- Actually remove dangling references from deps, links, and parent fields- Use case: After manually deleting ticket files (e.g.,
rm .tickets/x-abc1.md) - Ensures store consistency by cleaning up orphaned references
- Use case: After manually deleting ticket files (e.g.,
tk ready # Find available work
tk show <id> # Review ticket details
tk start <id> # Claim ittk close <id> # Mark complete (can provide full or partial ID)tk new "Implement feature X" --type=feature
tk new "Write tests for X" --type=task --parent=<feature-id>
tk dep <test-id> <feature-id> # Tests depend on Feature (Feature blocks tests)tk blocked # See what's blocking progress
tk show <id> # View dependencies preventing work
tk close <blocker-id> # Close the blocking ticket- File issues for remaining work - Create tickets with
tk newfor anything that needs follow-up- Create tickets for tracking strategic and/or discovered work (multi-session, dependencies, discovered work)
- Update ticket status - Close finished work with
tk close <id>- Work is NOT complete until tickets are properly closed
- NEVER leave work in ambiguous state (e.g., started but unclear if done)
- Ticket state is the source of truth for project progress