by dtormoen
Task manager and sandbox for coding agents
# Add to your Claude Code skills
git clone https://github.com/dtormoen/tskA Rust CLI tool that lets you delegate development tasks to AI agents running in sandboxed Docker or Podman environments. Get back git branches for human review.
Currently Claude Code and Codex coding agents are supported.

TSK enables a "lead engineer + AI team" workflow:
Think of it as having a team of engineers who work independently and submit pull requests for review.
# Install using cargo
cargo install tsk-ai
# Or build from source!
gh repo clone dtormoen/tsk
cd tsk
cargo install --path .
Claude Code users: Install TSK skills to teach Claude how to use TSK commands directly in your conversations and help you configure your projects for use with TSK:
No comments yet. Be the first to share your thoughts!
/plugin marketplace add dtormoen/tsk
/plugin install tsk-help@dtormoen/tsk
/plugin install tsk-config@dtormoen/tsk
/plugin install tsk-add@dtormoen/tsk
See Claude Code Skills Marketplace for more details.
TSK can be used in multiple ways. Here are some of the main workflows to get started. Try testing these in the TSK repository!
Start up sandbox with an interactive shell so you can work interactively with a coding agent. This is similar to a git worktrees workflow, but provides stronger isolation. claude is the default coding agent, but you can also specify --agent codex to use codex.
tsk shell
The tsk shell command will:
After you exit the interactive shell (ctrl-d or exit), TSK will save any work you've done as a new branch in your original repo.
This workflow is really powerful when used with terminal multiplexers like tmux or zellij. It allows you to start multiple agents that are working on completely isolated copies of your repository with no opportunity to interfere with each other or access resources outside of the container.
TSK has flags that help you avoid repetitive instructions like "make sure unit tests pass", "update documentation", or "write a descriptive commit message". Consider this command which immediately kicks off an autonomous agent in a sandbox to implement a new feature:
tsk run --type feat --name greeting --prompt "Add a greeting to all TSK commands."
Some important parts of the command:
--type specifies the type of task the agent is working on. Using TSK built-in tasks or writing your own can save a lot of boilerplate. Check out feat.md for the feat type and templates for all task types.--name will be used in the final git branch to help you remember what task the branch contains.--prompt is used to fill in the {{PROMPT}} placeholder in feat.md.Similar to tsk shell, the agent will run in a sandbox so it will not interfere with any ongoing work and will create a new branch in your repository in the background once it is done working.
After you try this command out, try out these next steps:
--edit flag to edit the full prompt that is sent to the agent.tsk template list to see existing task templates and where you can add your own custom tasks.
The TSK server allows you to have a single process that manages parallel task execution so you can easily background agents working. First, we start the server set up to handle up to 4 tasks in parallel:
tsk server start --workers 4
Now, in another terminal window, we can quickly queue up multiple tasks:
# Add a task. Notice the similarity to the `tsk run` command
tsk add --type doc --name tsk-architecture --prompt "Tell me how TSK works"
# Look at the task queue. Your task `tsk-architecture` should be present in the list
tsk list
# Add another task. Notice the short flag names
tsk add -t feat -n greeting -p "Add a silly robot greeting to every TSK command"
# Now there should be two running tasks
tsk list
# Wait for the tasks to finish. After they complete, look at the two new branches
git branch --format="%(refname:short) - %(subject) (%(committerdate:relative))"
After you try this command out, try these next steps:
--agent codex will use codex to perform the task--agent codex,claude will have codex and claude do the task in parallel with the same environment and instructions so you can compare agent performance--agent claude,claude will have claude do the task twice. This can be useful for exploratory changes to get ideas quicklyChain tasks together with --parent so a child task starts from where its parent left off:
# First task: set up the foundation
tsk add -t feat -n add-api -p "Add a REST API endpoint for users"
# Check the task list to get the task ID
tsk list
# Second task: chain it to the first (replace <taskid> with the parent's ID)
tsk add -t feat -n add-tests -p "Add integration tests for the users API" --parent <taskid>
Child tasks wait for their parent to complete, then start from the parent's final commit. tsk list shows these tasks as WAITING. If a parent fails, its children are automatically marked as FAILED; if a parent is cancelled, its children are marked as CANCELLED. Chains of any length (A → B → C) are supported.
Let's create a very basic way to automate working on GitHub issues:
# First create the tsk template configuration directory
mkdir -p ~/.config/tsk/templates
# Create a very simple template. Notice the use of the "{{PROMPT}}" placeholder
cat > ~/.config/tsk/templates/issue-bot.md << 'EOF'
Solve the GitHub issue below. Make sure it is tested and write a descriptive commit
message describing the changes after you are done.
{{PROMPT}}
EOF
# Make sure tsk sees the new `issue-bot` task template
tsk template list
# Pipe in some input to start the task
# Piped input automatically replaces the {{PROMPT}} placeholder
gh issue view <issue-number> | tsk add -t issue-bot -n fix-my-issue
Now it's easy to solve GitHub issues with a simple task template. Try this with code reviews as well to easily respond to feedback.
Create, manage, and monitor tasks assigned to AI agents.
tsk run - Execute a task immediately (Ctrl+C marks task as CANCELLED)tsk shell - Start a sandbox container with an interactive shelltsk add - Queue a task (supports --parent <taskid> for task chaining)tsk list - View task status and branchestsk cancel <task-id>... - Cancel one or more running or queued taskstsk clean - Clean up completed taskstsk delete <task-id>... - Delete one or more taskstsk retry <task-id>... - Retry one or more tasksManage the TSK server daemon for parallel task execution. The server automatically cleans up completed, failed, and cancelled tasks older than 7 days.
tsk server start - Start the TSK server daemontsk server stop - Stop the running TSK serverGraceful shutdown (via q, Ctrl+C, or tsk server stop) marks any in-progress tasks as CANCELLED.
When running in an interactive terminal, tsk server start shows a TUI dashboard with a split-pane view: task list on the left, log viewer on the right. In the task list, active tasks (Running, Queued, Waiting) appear above completed or failed tasks. The log viewer starts at the bottom of the selected task's output and auto-follows new content. Scrolling up pauses follow mode; scrolling back to the bottom resumes it. When stdout is piped or non-interactive (e.g. tsk server start | cat), plain text output is used instead.
TUI Controls:
Left / h: Focus the task list panelRight / l: Focus the log viewer panelUp / k, Down / j: Navigate tasks or scroll logs (depends on focused panel)Page Up / Page Down: Jump scroll in log viewerShift+click / Shift+drag: Select text (bypasses mouse capture for clipboard use)c: Cancel the selected task (when task panel is focused, only RUNNING/QUEUED tasks)d: Delete the selected task (when task panel is focused, only terminal-state tasks)q: Quit the server (graceful shutdown)Build container images and manage task templates.
tsk docker build - Build required container imagestsk template list - View available task type templates and where they are installedtsk template show <template> - Display the contents of a template