AgentTasker
Officialby BadbotAI
README.md
# AgentTasker
A local-first, project-namespaced task tracker built for AI agents and humans working
on the same projects. GitHub-Projects-style board (CLI + curses TUI), one SQLite file,
no server, no accounts.
- **CLI** — `agenttasker add|ls|show|update|move|done|rm|projects|board|mcp`
- **TUI** — `agenttasker board`: interactive 6-column kanban for humans
- **MCP** — `agenttasker mcp`: stdio MCP server exposing the same board to agents
## Statuses
Board order:
| Status | Meaning |
|---|---|
| `deferred` | parked; revisit later, not in the active set |
| `backlog` | accepted, not yet ready/prioritized |
| `todo` | ready to work once deps/blockers clear |
| `in_progress` | actively being worked (claim before starting) |
| `in_review` | done, awaiting verification |
| `done` | complete and verified |
Tasks carry a **name**, **description**, **evidence** (analysis gathered pre-task),
free-form external **blockers**, **depends_on** (hard task deps), **affects**
(informational links), **priority** (`P0`…`P3`, default `P2`), **type**
(`task`/`feature`/`bugfix`/`improvement`/`chore`), **tags** (workstream labels),
an atomic **owner** claim, and **attachments** (any binary file,
sha256-addressed on disk). Listings sort by status, then priority. A task is *ready*
when it sits in `backlog`/`todo`, has no blockers, and all dependencies are `done`.
## Install
```bash
python3 -m venv .venv && .venv/bin/pip install -e '.[mcp]' # [mcp] only needed for the MCP server
```
Installs two equivalent commands: `agenttasker` and the short alias `atx`.
Or standalone: `pipx install 'agenttasker[mcp]'` (once published / from a checkout:
`pipx install '/path/to/AgentTasker[mcp]'`).
## Use as a Codex skill
```bash
scripts/install-codex-skill.sh # copies SKILL.md into ~/.codex/skills/agenttasker/
```
Codex loads skills at session start (restart to pick up changes) and needs a real
file, not a symlink. Invoke explicitly with `$agenttasker`, or let Codex select it
from the description.
## Quick start
```bash
agenttasker add "Fix login redirect" -d "Session cookie lost on 302" -e "traced to SameSite=None" --status todo --priority P1 --tag web
agenttasker add "Write regression test" --dep 1
agenttasker ls --ready # work that can start now, P0s first
agenttasker claim 1 --owner agent-7 # atomically take it (refuses if held)
agenttasker ls --blocked # stuck work (unfinished deps or external blockers)
agenttasker update 1 --append-evidence "repro confirmed"
agenttasker done 1
agenttasker board # TUI for humans (picks a project if none given)
agenttasker list # flat table: id title status pri type blocked-by created
```
Tasks are namespaced per **project**: the git repo name (or cwd name outside a repo),
overridable with `--project`/`-p` or `$AGENTTASKER_PROJECT`. References accept `12`
or `ProjectName-12`.
## Storage
One SQLite file, WAL mode:
- default: `~/.local/share/agenttasker/tasks.db`
- override: `AGENTTASKER_DB=/path/to/tasks.db`
- attachments: `<db dir>/attachments/`, content-addressed by sha256
## Coordination, snapshots, attachments
```bash
agenttasker claim REF --owner NAME [--force] # atomic ownership; also sets in_progress
agenttasker release REF [--owner NAME] # give a task back
agenttasker handoff REF --to NAME [--from ME] # explicit transfer
agenttasker claims [--stale HOURS] # who holds what, and what's rotting
agenttasker attach REF FILE # any binary (image, zip, json…)
agenttasker attachments REF
agenttasker detach REF ID
agenttasker export [PATH] [-a] # portable JSON; attachments base64-embedded
agenttasker import PATH [--mode merge|replace] [--dry-run]
```
## Web UI
```bash
agenttasker serve # http://127.0.0.1:8988 (opens your browser)
agenttasker serve -p PROJ --port 9000 --no-browser
```
Same features as the TUI plus adding/deleting tasks: board and list views,
full field editing, status moves, claim/release, evidence appends, and
attachments — click one to open it in a new tab, or upload new files.
Polls for changes every 2s. Stdlib only; binds 127.0.0.1 by default.
## TUI keys
`agenttasker board [-p PROJECT]`
| Key | Action |
|---|---|
| `←`/`→` or `h`/`l` | select column |
| `↑`/`↓` or `k`/`j` | select task |
| `Enter` | full task detail — `↑↓` selects a field, `e` edits it, `q` closes |
| `m` | move task (status menu) |
| `<`/`,` and `>`/`.` | shift task one column left/right |
| `r` | manual reload (the board also auto-reloads when the db changes) |
| `v` | switch board ↔ list view (priority table, same columns as `list`) |
Cards are bordered mini-cards: a 2-line inverted title head in the status color,
a rule, then a 4-line description/evidence body and a deps/blockers/ready meta
line. `!` = blocked (red), `*` = ready, dimmed = done. The board watches the
database file and its WAL side files, so changes from the CLI, MCP agents, or
other TUI sessions appear within ~0.5s.
## MCP
Run the stdio MCP server:
```bash
agenttasker mcp
```
Client config (Claude Desktop / any MCP client):
```json
{
"mcpServers": {
"agenttasker": {
"command": "/path/to/.venv/bin/agenttasker",
"args": ["mcp"],
"env": { "AGENTTASKER_DB": "/home/you/.local/share/agenttasker/tasks.db" }
}
}
}
```
The server resolves its project from its working directory (git repo name), or
`$AGENTTASKER_PROJECT`; every tool also takes an explicit `project` argument.
Tools: `add_task`, `get_task`, `list_tasks` (filters: `ready`/`blocked`/`priority`/`tag`/`stale_hours`),
`update_task`, `set_status`, `delete_task`, `list_projects`,
`claim_task`, `release_task`, `handoff_task`,
`add_attachment` (base64 in), `list_attachments`, `read_attachment` (base64 out).
Agents: see [SKILL.md](SKILL.md) for the full working discipline.
## Development
```bash
python3 -m unittest discover -s tests
```
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues