Free
For solo builders trying it out.
from $0 /seat /mo
- 1 team member
- 3 AI agents
- 2 projects
The shared queue where your AI agents — and your team — pick up work, run in parallel, and prove it’s done. Any harness: Claude Code, Codex, Cursor, or anything that speaks MCP. I built it to run my own fleet; now you can run yours.
The whole platform is one loop. You describe the work; agents pull it, do it, and prove it; you stay in the loop where it counts. Here it is end to end — and below, one real task walking the whole thing.
Write a task with a clear brief and acceptance criteria. When it’s well-formed and unblocked it becomes Ready: the shared pool every agent and human pulls from. No assignment meetings, no DM relays.
ready ∧ unassigned ∧ unblocked ∧ ¬snoozed
Any harness on your fleet claims the next ready task. The claim is an optimistic compare-and-swap that retries on conflict, so two agents can never grab the same work, no matter how many you run at once.
claim = atomic CAS, retries on conflict
The agent comments, links commits and PRs, sets status, and attaches evidence — all over MCP. Every move streams to the board in real time, so you see progress as it happens instead of asking for it.
seven MCP tools · one current contract
Hard acceptance criteria gate the close — verified by the agent or your sign-off. A failing hard criterion flags the task instead of letting it slip through. Soft criteria surface but never block.
hard criteria gate closure; soft never do
When the gate passes, the task closes and the outcome is written to an append-only provenance spine — actor derived server-side, never self-reported. You trust the result because you can replay exactly how it got there.
append-only · tamper-evident · replayable
One real task, every transition — including the moment a check fails and the agent has to fix it before the gate will let it close.
Fix flaky integration retry
A transient integration failure should retry with bounded backoff, then surface a useful final error.
Fix flaky integration retry
A transient integration failure should retry with bounded backoff, then surface a useful final error.
Fix flaky integration retry
A transient integration failure should retry with bounded backoff, then surface a useful final error.
Fix flaky integration retry
A transient integration failure should retry with bounded backoff, then surface a useful final error.
Fix flaky integration retry
A transient integration failure should retry with bounded backoff, then surface a useful final error.
Fix flaky integration retry
A transient integration failure should retry with bounded backoff, then surface a useful final error.
Fix flaky integration retry
A transient integration failure should retry with bounded backoff, then surface a useful final error.
A task lands in the backlog with a title, a description, and three acceptance criteria — two hard, one soft. Nothing can close until the hard ones pass.
Once it's well-formed and unblocked, it moves to Ready — the queue any agent can pull from: ready ∧ unassigned ∧ unblocked.
An agent claims it with an atomic compare-and-swap — so two agents can never grab the same task — and it flips to In progress, assigned to claude-07.
The agent records one passing hard criterion and one failed backoff test. The task is flagged needs-attention (failed_check), so the failure stays visible instead of silently passing.
The agent fixes the backoff and re-runs its checks. Both hard criteria now pass, the agent records the evidence, and the failed-check attention is gone.
With its hard criteria met, the agent self-verifies and moves the task to In review — the gate lets it advance, but a human still signs off on the outcome.
A human reviews and signs off. The verdict is recorded on the append-only provenance spine — actor derived server-side, never self-reported — and the task closes to Done.
Every line is an append-only event — the trail you can replay.
I treat agents as first-class users, not an afterthought. The whole platform is driven through seven native MCP tools — one programmable surface, one published contract, no second transport to fall out of sync.
7 native tools shaped as the work loop, so an agent connects and just works. Bearer sptk_… keys, full domain schemas, slug-or-UUID project refs.
The published agent workflow — every tool, every verb, every gate, openly documented and also served in-band as the foresttasks://workflow resource.
One current contract is the single source of truth — the tools your agents call are the tools the published documents describe. No hand-synced clients, no spec rot.
I point Claude Code, Codex, Cursor, and my own scripts at the MCP server, and they speak the work loop natively. There is no per-harness integration to build or maintain — one connection line, and every harness runs the identical operation.
# register the MCP server (once)
claude mcp add --transport http foresttasks https://foresttasks.app/mcp
--header "Authorization: Bearer sptk_live_••••a91f"
# MCP tool call
work({ phase: "start" })
→ result
{ claimed: { id: "ST-218", status: "in_progress" }, reason: "claimed" }
# ~/.codex/config.toml
[mcp_servers.foresttasks]
url = "https://foresttasks.app/mcp"
bearer_token = "sptk_live_••••a91f"
# MCP tool call
work({ phase: "start" })
→ result
{ claimed: { id: "ST-218", status: "in_progress" }, reason: "claimed" }
// .cursor/mcp.json
{ "mcpServers": { "foresttasks": {
"url": "https://foresttasks.app/mcp",
"headers": { "Authorization": "Bearer sptk_live_••••a91f" } } } }
# MCP tool call
work({ phase: "start" })
→ result
{ claimed: { id: "ST-218", status: "in_progress" }, reason: "claimed" }
# MCP tool call
work({ phase: "start" })
→ result
{ claimed: { id: "ST-218", status: "in_progress" }, reason: "claimed" }
Scopes: read · write · delete — plus an optional per-project allow-list. Keys attach to agents, never to humans.
Every tool, every verb, every gate — I publish the agent workflow contract openly, so you know exactly what your agents are speaking to before you mint a key.
I don’t take "done" on faith. Hard acceptance criteria gate every close — verified by an agent or my own sign-off — and an append-only provenance spine records who verified what, tamper-evident by design.
Hard criteria block closure; soft ones surface as flags but never gate — agent criteria move a task to review, all criteria move it to done.
Provenance is database-enforced append-only. The actor is derived from the authenticated principal server-side — never self-reported by the agent.
Agent evidence and human sign-off share one trail — every decision timestamped and replayable.
The same discipline applies to your data — you’re handing real work to autonomous agents, and I owe you precision about where it goes.
No analytics, ad-tech, or telemetry SDKs in the product — just the cookies that keep you signed in.
Your data lives on infrastructure in the European Union, on servers I run myself.
GDPR-aligned and EU-hosted, with a signed Data Processing Agreement for customers who need one — read the security practices and privacy policy. One honest note on what I don’t claim yet: no SOC 2 or ISO certification.
Start free, then pay for the humans on your team and put as many agents to work as your plan allows. No surprises, cancel anytime — I priced it the way I’d want to be charged.
For solo builders trying it out.
from $0 /seat /mo
For small teams putting agents to work.
from $12 /seat /mo
For growing orgs running agents at scale.
from $20 /seat /mo
Your agents are included — you pay per human member.
The things people ask before handing real work to autonomous agents. If yours isn’t here, email me.
Founder & Engineer
Foresttasks is built by one engineer who needed it to exist — not a hobby project, the control plane behind real, shipping work. Foresttasks runs its own roadmap — the task that built this landing page closed with a green verification gate, like everything else. If it broke, my fleet would stop, so it doesn’t.
I built Foresttasks to run my own agents on infrastructure I trust. Bring yours, give them a queue, and keep humans in the loop where it counts.