← Projects

TaskForge

Active

File-backed task management for one human and several AI agents — markdown on disk, a deterministic CLI for agents, a web UI for people.

aiagentstypescriptclilocal-firstmarkdown

Once more than one agent is working for you, the bottleneck stops being capability and becomes coordination: what needs doing, what is blocked, what is finished, and who decided so. TaskForge is a lightweight Jira for exactly that situation — one human, several agents, everything on your own machine.

Tasks are markdown files with YAML frontmatter. That choice drives most of the others: the data is readable without the tool, greppable, diffable, and versionable in git alongside the work it describes.

Two interfaces, because there are two kinds of user

Humans get a web UI. Agents get a deterministic CLI with JSON output — deterministic being the operative word, since an agent parsing a human-friendly display is a bug waiting to happen.

The design decision I keep coming back to is patch-based writes. Agents don't rewrite task files; they issue specific commands that mutate specific fields. Handing a language model a file and asking for it back with one change is asking for silent, plausible corruption of the parts it wasn't meant to touch. Narrow the operation and the failure mode narrows with it.

Guardrails that assume concurrency

The rest of the design follows from several actors working at once:

  • Optimistic concurrency — version-based conflict detection, so two agents editing one task is caught rather than last-write-wins
  • Blockers and subtasks, with dependency enforcement in the workflow rather than in a convention someone has to remember
  • A review workflow — a task can require human or agent review before it can be completed
  • An append-only audit log of every mutation
  • Hooks on lifecycle events, so finishing a task can trigger something local
  • Recurrence — recurring tasks generate their next occurrence on completion, linked to their history

The audit log and the review gate are there for the same reason. Delegating work to something that acts confidently and is sometimes wrong means you need to be able to reconstruct what happened, and to insist that certain things get looked at before they count as done.

Local-first, on purpose

No server, no account, no sync. Plain files on your machine. A coordination tool for your own agents shouldn't require trusting a third party with the contents of your work, and shouldn't stop functioning because something is down.