name: tsk description: Use tsk, the task tracker maintained alongside this repository, to inspect task queues, manage local task records, create agent follow-ups, audit task history, and sync refs/tsk task state. Use when Codex is working in this repo and needs to choose queued work, record TODOs, mark tasks done, or coordinate task state with users or other agents. #
tsk Skill for Codex #
Use tsk as the source of truth for local task work in this repository. Start by
looking at the active queue, keep user-visible task state accurate, and prefer
tsk records over ad hoc TODO comments or plan files.
Basic workflow #
tsk list
tsk show -t 12
tsk push -- "Fix parser panic
Reproduce with an empty input file, then add a regression test."
tsk push -e -- "Draft task" # open $EDITOR before saving
tsk append -- "Follow up: document parser edge cases"
tsk append -e -- "Follow up" # open $EDITOR before saving
tsk drop -t 12
tsk abandon -t 12
tsk listprints the active queue top first.tsk show -t Nrenders a task; add-xto include properties as YAML front matter, or-Rfor raw task text.tsk push -- "title"creates a task at the top of the active queue.tsk append -- "title"creates a task at the bottom of the active queue.- Add
-etopushorappendto open$EDITORbefore saving the new task. tsk drop -x -t Nrecords the current git commit inclosed-on, marks work done, and removes it from the active queue. Use plaindroponly when there is no implementing commit to record.tsk abandon -t Nremoves a task from the active queue without changing its status.- All commands that reference a task may implicitly reference to task at the top
of the active queue by omitting selectors. Favor using explicit selectors such as
-t Nor-t N
Creating and editing tasks #
Use a single argument for a title, or put a body after the first newline:
tsk push -- "Investigate flaky sync test
Seen in CI after git-pull merge reconciliation. Capture the failing command and
decide whether the merge driver or test fixture owns the fix."
Read the body from stdin when another command already produced the detail:
printf 'Failure details...\n' | tsk push -- "Record failing CI output" -b -
Read the whole task (title + body) from stdin with - as the title. Parsed
the same way tsk edit parses its editor buffer: first line is the title,
the remainder is the body. Round-trips a task across repos:
tsk show -t 9 -R | tsk push - # import a task from another clone
tsk show -t 9 -R | tsk append - # ...or append it to the bottom
Edit an existing task interactively with $EDITOR, or replace only the body
non-interactively with -b. Use -b - to read the replacement body from stdin:
tsk edit -t 12
tsk edit -t 12 -b "New body text"
printf 'New body from a script\n' | tsk edit -t 12 -b -
Reopen completed work when it becomes active again:
tsk reopen -t 12
tsk reopen --no-queue -t 12
Task text syntax #
The first line is the title. The remaining lines form the body. Line breaks stay intact. Task text uses these markers, not standard Markdown emphasis:
| Syntax | Meaning |
|---|---|
!important! |
Bold |
*optional* |
Italic |
_required_ |
Underline |
~obsolete~ |
Strikethrough |
=warning= |
Highlight |
`cargo test` |
Inline code |
[docs](https://example.com) |
External link |
<https://example.com> |
Raw URL link |
[[tsk-12]] |
Task link in the active namespace |
[[claude/tsk-3]] |
Task link in another namespace |
[> provision database <] |
Create a new dependency task |
Keep inline markers on one line. Separate marked text from adjacent text with whitespace or punctuation.
tsk push -- "Deploy service
Run \`cargo test\`. See [docs](https://example.com) and [[tsk-12]].
Blocked by [> provision database <]."
tsk follow -t 12 # list links
tsk follow -t 12 -l 1 # open the first link
On save, [> title <] creates a task and becomes a task link.
It also sets the protected depends-on and blocks properties.
Ordinary task links reference existing tasks without creating dependencies.
Use tsk show -R to print the text without rendering its markers.
Queue order #
Move important work up and park lower-priority work at the bottom:
tsk prioritize -t 9
tsk deprioritize -t 15
tsk swap
tsk rot
tsk tor
prioritizemoves a task to the top of the active queue.deprioritizemoves a task to the bottom.swap,rot, andtorare quick stack operations for the top tasks.
History and audit #
Every task, namespace, and queue is backed by git history:
tsk log task -t 9
tsk log namespace
tsk log namespace claude
tsk log queue
tsk log queue review
Use logs to understand who changed task text, id bindings, or queue order before you overwrite or reorganize work.
Sharing, assigning, and inboxes #
Share a task into another namespace when another user or agent needs a local id for the same underlying task:
tsk share claude -t 9
Assign a task from the active queue to another queue's inbox:
tsk assign review -t 9
tsk assign review -t 9 -R ""
The -R "" form skips the default auto-push. Without it, assign tries to push
the relevant refs/tsk/* refs to the default remote.
Work an inbox from the receiving queue:
tsk queue switch review
tsk inbox
tsk accept
tsk accept -t 9
tsk accept review-1
tsk reject review-2
tsk inbox -R ""
tsk accept review-1 -R ""
tsk reject review-2 -R ""
tsk inboxlists pending items for the active queue and auto-pulls first by default.tsk accept [key]moves an inbox item onto the active queue; with no key, it accepts the top inbox item.tsk accept -t Nmoves an open task with no queue assignment onto the active queue.tsk reject [key]returns an inbox item to its source queue's inbox.- Use
-R ""on inbox, accept, or reject to skip the default remote action.
Namespaces #
Namespaces control human-readable task ids such as tsk-12. The same stable task
can be bound into multiple namespaces with different local ids.
tsk namespace current
tsk namespace list
tsk namespace switch claude
tsk switch tsk
tsk namespace tasks
tsk namespace tasks claude
namespace currentprints the active namespace.namespace listlists known namespaces.namespace switch <name>changes the active namespace;tsk switch <name>is shorthand.namespace tasks [name]lists every task bound in a namespace, independent of queue membership.
Use a separate agent namespace such as claude when you need agent-owned ids or
follow-up bookkeeping that should not disturb the user's namespace.
Queues #
Queues are ordered work stacks. Task lifecycle comes from the protected
status property, not queue membership. Keep the user's queue focused; put
agent-created follow-ups in an agent queue when they are not part of the current
request.
tsk queue current
tsk queue list
tsk queue switch claude
tsk --queue review list
queue currentprints the active queue.queue listlists known queues.queue switch <name>changes the active queue.--queue <name>overrides the active queue for one invocation.
Example agent follow-up:
tsk queue switch claude
tsk push -- "Add regression test for imported task conflict
The current change fixed the bug, but there is no test covering an imported task
whose namespace id collides after git-pull."
tsk queue switch tsk
Remote sync #
Use tsk sync commands for refs/tsk/*; plain git fetch can overwrite task
refs without running tsk's reconciliation logic.
tsk remote default
tsk remote set-default origin
tsk git-setup -r origin
tsk git-pull
tsk git-pull --rebase
tsk git-push
git-setupconfigures refspecs for sharingrefs/tsk/*.git-pullfetches and reconciles divergent task histories.git-pushpushes task refs to the default or supplied remote.
Agent rules of thumb #
- Run
tsk listbefore choosing work unless the user gave an explicit task. - Commit completed code changes before dropping the task. Include the
human-readable task id at the bottom of the commit message body, then drop the
task with
./target/release/tsk drop -x -t Nsoclosed-onrecords the implementing commit. Drop without-xonly when the user explicitly confirms or there is no code commit. - Treat properties and queue changes as user-visible state.
- Prefer
tsk pushin an agent queue for follow-up work instead of adding unrelatedTODOcomments in code. - When creating an overarching task that is composed of many smaller tasks, use the
shorthand by writing a title between
[>and<]. For example,blocked by [> provision database <]creates a new task titledprovision database, replaces that text with an internal link such as[[tsk-12]], and records protecteddepends-on/blocksproperties between the two tasks. - Update tasks with information discovered during implementation. This can be later
discovered and referenced using
tsk namespace tasks -band filtered with text filtering tools.