Short instructions, clear next action.
atask context gives the operating contract. atask context TASK_ID gives one worker its outcome, checks, workspace and handoff.
An execution engine for coding agents
ATask takes a dependency graph, assigns isolated work to coding agents, and requires fresh proof and regression checks before recording completion.
No ticket board. No model to configure. No command to mark your own work done.
A task is not done because an agent says so. It's done when the committed revision passes both checks.
Why it is built for agents
People can negotiate whether a ticket is finished. Coding agents need a smaller interface and a completion rule they cannot bypass with a status update.
atask context gives the operating contract. atask context TASK_ID gives one worker its outcome, checks, workspace and handoff.
One leased claim per task. Stale session tokens lose authority; progress and next steps remain available for the next attempt.
Agents can run checks, inspect failures, and retry. Only passing required checks on committed code establish completion.
How execution works
Bring a plan from any agent or planning tool. Dependencies determine which tasks can run—and which verified revisions their branches start from.
Import tasks and requires edges. Each claimable task declares proof and regression checks.
atask add -f plan.yamlAn atomic lease gives an eligible task to a worker in an isolated Worktrunk worktree.
atask claimDependent branches include completed prerequisite revisions. The agent edits and commits its change.
atask context TASK_IDBoth checks run fresh on committed code. Completion unlocks dependent work.
atask verify completeIf B requires A, B cannot be claimed before A completes. Its starting code includes A's verified revision.
A → verified → B readyThe completion contract
Task checks demonstrate the requested behavior. Regression checks protect existing behavior covered by tests. Each check runs fresh with its own time budget.
A focused, executable check for the specific task outcome. Named test presets require a test to actually run.
go_test: ./auth name=TestRejectExpiredA separate check against regressions. Its passing result must come from the same committed revision.
go_test: ./authsize=The CLI rejects incomplete tasks at claim time. Both checks are attached to the task, not hidden in a human checklist.
atask add "Reject expired tokens" \
--proof "go_test: ./auth name=TestRejectExpired" \
--regression "go_test: ./auth"
Checks enforce a repeatable gate, not absolute correctness. Meaningful tests are still necessary. size=eternal explicitly removes a check's time limit.
How it fits
ATask is the execution backend beneath your agent workflow, not another place to move tickets between columns.
Beads tracks issue state and ready work.
ATask: an executable proof gate decides whether work completed.
Task Master turns requirements into actionable tasks.
ATask: accepts the plan and verifies the resulting code.
GSD structures execution and verification.
ATask: makes completion an engine-level rule independent of the model.
Worktrunk manages task worktrees and merges.
ATask: adds the execution graph, leases, proofs and completion records.
Get started
Requires Go 1.24+, Git, and Worktrunk (wt on your PATH). No server or API key required.
ATask installs instructions in AGENTS.md and a Claude import. Your planner creates tasks; your coding agents claim and verify them.
Verification records completion on the task branch. It does not automatically advance the target branch. Your host can merge verified work with Worktrunk.
# Install ATask (Worktrunk must already be installed)
go install github.com/zachbornheimer/ai-task/cmd/atask@main
# Initialize agent instructions
atask init
git add AGENTS.md CLAUDE.md .claude/settings.json
git commit -m "Set up atask"
# Configure the project and check setup
atask project --target-branch main
atask doctor
main branch · no tagged release yet