I run several AI coding agents at once on the same project. One fixes a backend bug, one checks a screen in the browser, one writes tests. For a while I tracked their work in chat and in notes, and the same problems kept coming back:

  • Two agents picked up the same task and changed the same files.
  • An agent asked me something in the middle of a long session, I missed it, and it went ahead on a guess.
  • An agent said "done" with nothing to show for it.
  • When a session ended, what it learned ended with it.

So I built qtask, a task tracker for agents and the person working with them. It is one Python file that uses only the standard library, and it keeps everything in one SQLite database on your machine.

Repo: https://github.com/Abubakr-Alsheikh/qtask

What a session looks like

$ qtask add "Fix the login redirect" --kind bug --pri P1 Created APP-14: Fix the login redirect $ qtask claim APP-14 --agent fe-fix-1 Claimed APP-14 as fe-fix-1 until 2026-11-02T17:56:49Z. Status: in_progress. $ qtask ask APP-14 "Keep the old URL working?" --to developer --agent fe-fix-1 Question #1 on APP-14 sent to developer. Status: needs_confirm. $ qtask inbox --for developer #1 on APP-14 [question, open] fe-fix-1 to developer: Keep the old URL working? $ qtask answer 1 "Yes, redirect it" --agent developer Answer #2 added. Question #1 resolved. APP-14 status: in_progress. $ qtask done APP-14 --evidence "npm test: 412 passed" --agent fe-fix-1 Done APP-14. 

Four rules that fixed my problems

1. Claim before you work. claim gives the agent a lease, two hours by default. If another agent tries to claim the same task, it gets exit code 3 and picks something else. When the lease runs out, ready offers the task again, so a crashed session doesn't hold work forever.

2. Questions wait for the human. ask sends a question to developer and parks the task in needs_confirm. I answer when I get to it, with qtask inbox and qtask answer. The agent finds the answer in its own inbox, even in a new session.

3. No evidence, no done. done refuses without --evidence, which holds the commands the agent ran and what they printed. It also refuses while a question or a subtask is still open.

4. Findings live on the task. Agents write what they learn with qtask comment. A subagent gets a task ID instead of a long prompt, works on it, and hands back the ID. I read the whole story with qtask show.

Why another tracker

I looked at the existing ones first. Most needed a package install, a server or an account, and I wanted something I could read top to bottom before handing it to agents that run commands on my machine. qtask is about 2,000 lines in one file, with no dependencies.

Two more choices came from how I work:

  • Tasks stay out of the repo. The database lives in ~/.qtask, so half-ideas and private notes never land in a commit.
  • It knows your project. The project comes from the git remote of the folder you are in, so every clone and worktree of a repo shares one list, and IDs get a short prefix from the repo name, like APP-14.

Using it with your agents

For Claude Code there is a skill in the repo that tells the agent when to load qtask and how to use it. For Codex, Cursor, Aider or Gemini CLI, the README has a short block to paste into your AGENTS.md or rules file. Any agent that can run a shell command can use qtask, and every command takes --json for output a program can read.

Under the hood

  • SQLite in WAL mode. Every write runs in a BEGIN IMMEDIATE transaction, and a claim is one conditional UPDATE, so two agents can't both win.
  • The tests start 20 processes at the same moment to race for one claim, and only one may get it.
  • Full-text search with SQLite FTS5, with a plain LIKE fallback for builds without it.
  • A backup of the database and a JSONL export on the first write of each day.
  • It runs on Windows, Linux and macOS. I built it on Windows, so Git Bash path conversion and PowerShell quoting have their own tests.

Try it

Python 3.11 or newer and git 2.31 or newer:

pipx install git+https://github.com/Abubakr-Alsheikh/qtask qtask --version 

It is version 0.1, so commands may still change before 1.0. Next on the roadmap: turning a local task into a GitHub issue, keeping the two in sync, and a read-only HTML board.

If you run more than one agent at a time, I'd like to hear what breaks for you. Issues and pull requests are open.