agent task board

A local backlog, built for agents

Tasks with IDs,
search, and history.

An agent can create, find, and update work through JSON commands or a stdio MCP server. One SQLite file is the source of truth.

See an actual command sequence
PROJECT / API #1

Review webhook retries

Check duplicate events before changing the worker.

status
in_progress
priority
2
source
cli
Event trail

01 created as todo

02 status changed to in_progress

Fictional task. The page does not write a database.
01 / USE IT

The CLI speaks JSON. The MCP server uses the same core.

Each command returns structured output, so an agent can read a task ID and use it in the next step without scraping a web interface.

A SHORT LOCAL SESSION selected JSON fields
$ export AGENT_TASK_DB=./tasks.db
$ bun run src/cli.ts add "Review webhook retries"   "Check duplicate events" api issue-123
{ "id": 1, "status": "todo", "project": "api" }

$ bun run src/cli.ts search webhook
[{ "id": 1, "title": "Review webhook retries" }]

$ bun run src/cli.ts status 1 in_progress
{ "id": 1, "status": "in_progress" }

The stdio server exposes task_add, task_search, task_list, task_get, task_update, and task_stats.

02 / HOW IT HOLDS UP

One SQLite file, three connected pieces.

tasks

Current title, description, status, priority, project, source, and idempotency key.

events

Creation and updates are recorded with the task change in one transaction.

FTS5

SQLite triggers keep the text index synchronized when a task changes.

Creating with the same idempotency key and identical fields returns the existing task. Changing the content under that key fails, which prevents a retry from quietly creating a second version.

03 / SCOPE

The database file is the access boundary.

Attach the MCP server only to agents that may read and write this backlog. The project has no multi-user authentication, hosted HTTP endpoint, remote synchronization, or issue-tracker bridge.

Back up the SQLite file if the task history matters to your workflow.