Skip to main content
Watchfire
Blog

Notes from the team

Notes from the team building Watchfire. Releases, deep dives, the occasional behind-the-scenes look at running coding agents in sandboxed git worktrees.

New to the terminology? Skim the Glossary →

Subscribe by email

Get every new post in your inbox. Roughly one a fortnight — opt out from any email.

Subscribe by feed

Or wire it into your feed reader.

Firestorm 9.0: Watchfire becomes a factory agents can drive

7 min

For nine majors Watchfire drove coding agents. Firestorm inverts that: watchfire mcp serve exposes the whole orchestrator to any MCP-capable client as an 18-tool factory, so an outer agent plans and reviews while Watchfire manufactures the code in sandboxed, worktree-isolated runs. It is the fourth thin client, it holds no orchestration logic of its own, and it is local-only by construction.

Inferno 8.0: one window per project

6 min

Inferno is the first feature-forward major since Beacon, and it's built around a single idea — supervising many projects at once. The Electron GUI goes multi-window, the Project View flips to chat-primary, wildfire becomes a GUI control, the dashboard becomes mission control, and a new analytics layer measures what the agents actually shipped, not just how many tasks closed.

Why gRPC: the protocol between watchfired and its clients

8 min

One daemon, three clients, a long-lived stream of terminal output running alongside ordinary request/response calls. The protocol that carries all of that is gRPC over loopback TCP. Here is the honest accounting: the four alternatives we steelmanned, what the .proto actually looks like, how a client opens the connection, and the costs we took on to get schema-first generated clients in two languages.

Forge 7.3: the 300 GB log, and a quieter GUI

6 min

The 7.2 → 7.3 arc is a tidy little story about operability. We made the daemon log durable, the durable log grew to 300 GB, and 7.3 caps it. Along the way we closed two wildfire YAML bugs that were silently eating tasks, and gave the GUI a focus-chat mode. Here's what shipped.

Reading the daemon logs: an operator's guide

6 min

When a task gets stuck, the answer is almost always in watchfired's log. Here is where it lives, what its lines actually look like, and the five events plus three walkthroughs you'll reach for when an agent won't start, a worktree won't spawn, or an auto-merge never fires.

When the agent crashes: how Watchfire recovers

7 min

The happy path is easy: the agent works, sets status done, the daemon merges. This is the other path. The PTY dies, the agent stalls, the sandbox kills it, the daemon restarts. Here is what Watchfire actually does — and what it leaves for you to do — when a run goes wrong.

How Wildfire decides it's done

7 min

Wildfire mode runs the task queue, refines drafts, generates new work, and at some point it stops. The signal that stops it is one empty file. Here is why that signal, and not a timer or an iteration cap, is the one we keep.

Two tasks, one file: what happens when worktrees collide

7 min

Point Wildfire at a real codebase and within a day you'll ask the question: what happens when two tasks both edit package.json? The honest answer is more nuanced than 'git sorts it out.' Here is exactly what Watchfire does at merge time, the three outcomes you'll see, and how to design tasks so you rarely hit the bad one.

Why YAML for task files (and what we considered instead)

8 min

YAML in 2026 sounds like a punchline. We picked it anyway for project.yaml and every file under .watchfire/tasks/. Here is the honest accounting of what each contender got right, where YAML hurts, and why those tradeoffs were the right ones for a format that humans and agents both have to author.

Picking the right agent backend: a decision guide

10 min

Watchfire runs six coding agents on the same task contract. Knowing you can swap them is not the same as knowing which one to reach for. Here is the opinionated version: given the shape of a task, which backend to pick and which to fall back to.

The shape of a great acceptance_criteria block

10 min

The acceptance_criteria block is the single field the daemon, the agent, and the human reviewer all read the same way. It is also where most failed Watchfire runs are decided — long before the agent picks a file to edit. Here is how to write criteria that hold.

How file watching makes Watchfire feel alive

10 min

Watchfire's UI feels reactive because the daemon never sleeps on its files. The canonical state of every project lives on disk, agents 'complete' a task by saving a YAML, and a debounced watcher fans the change out to every connected client. Here is the architecture, the trade-offs, and the edge cases.

What 150 autonomous task runs taught us

13 min

Every page on watchfire.io was shipped by a Watchfire task running in an isolated worktree, and the daemon kept a record of each one. After 155 tasks, the numbers say something we did not expect about prompt length, refine passes, and which kinds of work agents actually finish on the first try.

What it costs to run Watchfire

11 min

Watchfire itself is free, but every task it runs spends real money against an agent backend. Here is a practical, numbers-forward breakdown of what each backend costs, which mode burns the most, and three concrete ways to stay under a monthly budget.

How Beacon turns the daemon two-way

9 min

The autonomous loop is only useful if a human can hear about it from wherever they happen to be. Beacon is the layer that lets Watchfire talk to Slack, Discord, and the PR queue — and just as carefully, lets them talk back.

What we measure when we measure an agent

10 min

Counting agent sessions is easy. Deciding what survives the session is harder. Watchfire's Insights subsystem keeps a fixed, tiny record per task on disk — and the choice of what not to record is most of the design.

Where Watchfire keeps your secrets

11 min

Two secret stories live inside the daemon — a Markdown file that gets injected into the agent's system prompt, and an OS keyring that holds the bot tokens for every integration. The thread that ties them together is a write-only wire: a gRPC contract that lets a client save a credential but never read one back.