Frequently asked questions.
The honest version — how Watchfire fits together, what it does, what it doesn’t, and where to look when something breaks. 41 questions across 8 categories. Use the filter or jump straight to a section.
Stuck on a word? See the Glossary →
Getting started
Install, prerequisites, and the first hour of using Watchfire.
What do I need installed before running Watchfire?
How do I install Watchfire on macOS?
brew tap watchfire-io/tap then brew install --cask watchfire-io/tap/watchfire for the GUI + CLI, or brew install watchfire-io/tap/watchfire for just the CLI and daemon. A Universal .dmg is also available from GitHub Releases. Full install instructions.How do I install Watchfire on Linux?
.deb from GitHub Releases for the full GUI + CLI, or run the install script for just the CLI and daemon: curl -fsSL https://raw.githubusercontent.com/watchfire-io/watchfire/main/scripts/install.sh | bash. Watchfire auto-detects the best sandbox backend — Landlock on kernel 5.13+, Bubblewrap on older kernels. Linux install details.Does Watchfire work on Windows?
.exe installer bundles the GUI, CLI, and daemon. There is one caveat: Windows currently runs without sandboxing. Agent processes are not isolated from the rest of the system, so for security-sensitive work prefer macOS or a recent Linux kernel. See /security for the platform matrix.How do I start my first Watchfire project?
watchfire init. That creates a .watchfire/ directory with a project.yaml, adds the directory to .gitignore, and walks you through naming the project, picking a default agent, and answering a few yes/no settings (auto-merge, auto-delete branch, auto-start tasks). Then add a task with watchfire task add or let watchfire wildfire generate them. Quick start walkthrough.How it works
The runtime model: daemon, clients, agent modes, worktrees, and the sandbox.
What’s the difference between the daemon, the CLI, the TUI, and the GUI?
watchfired) is the single orchestrator: it spawns agent PTYs, manages git worktrees, tracks task state, and serves gRPC. The CLI, TUI, and GUI are all thin clients that talk to that daemon — they show different UIs over the same state, so you can mix them on the same machine and they stay in sync. Architecture overview.What are Chat, Task, Start All, and Wildfire mode, and when do I pick which?
How do git worktrees keep tasks isolated?
.watchfire/worktrees/<n>/ on a dedicated watchfire/<n>branch. That means parallel tasks never touch each other’s files, a failed or half-done run never pollutes main, and a finished task can be reviewed like any other branch before merging. Worktree isolation.What does the sandbox actually block?
sandbox-exec) on macOS, Landlock on Linux 5.13+ with Bubblewrap as a fallback — that denies read and write access to ~/.ssh, ~/.aws, ~/.gnupg, ~/.netrc, ~/.npmrc, and .git/hooks by default. Enforcement is at the kernel level, so it does not rely on the agent being well-behaved. Sandboxing details.When does Watchfire merge a task branch into my main branch?
auto_mergeis enabled for the project (it’s a per-project setting you chose at watchfire init). If auto-merge is off, the task lands on its branch and waits for you to review and merge it yourself. Either way, nothing rewrites your default branch silently.Does Watchfire react when I edit task files outside the GUI/TUI?
.watchfire/tasks/and reacts to edits in real time — changing a task from draft to ready in your editor will auto-start an agent if auto_start_tasks is on. This is how the YAML-as-source-of-truth design holds together regardless of which client you use.Tasks & projects
How task files, project definitions, and generated tasks fit together.
What does a task YAML file look like?
.watchfire/tasks/<n>.yaml with at minimum a title, a prompt, acceptance criteria, and a status. The daemon fills in IDs, timestamps, and outcome fields after a run completes. Files are plain text by design — you can edit them in your editor, diff them with git, and treat them like any other source-controlled artefact (even though .watchfire/ is gitignored by default). Project and task schemas.What do the task statuses (draft, ready, done) mean?
draftmeans “don’t run me yet” — safe to edit. Flipping a task to ready tells the daemon it can be executed; if auto_start_tasks is on, an agent will pick it up immediately, otherwise it sits in the queue for Start All or Wildfire. done marks completion — check the success flag to see whether it finished or bailed.What is a project definition, and do I need one?
watchfire definition generate will draft it for you by reading the repo, and you can keep editing it after.Where do generated tasks come from?
watchfire generate (and the generate phase of wildfire) asks the agent to propose tasks against the project definition. Tasks land as draft YAML files, so you can read them, edit them, delete the bad ones, and promote the good ones to ready. The agent never quietly executes a task it generated — the promotion step is yours.What does Wildfire mode loop through?
Agents & models
Which CLIs Watchfire drives, how auth works, and how to mix and match.
Which agent CLIs does Watchfire support today?
Can I use different agents for different projects?
project.yaml. One project can use Claude Code, another Codex, another opencode. The daemon handles them concurrently, so a slow Codex session won’t block a Claude Code session in another repo.Where do my agent’s API keys go?
claude CLI login, codex login, gh auth login), and Watchfire reuses that setup from ~/.claude/, ~/.codex/, ~/.config/opencode/, etc. Security model.Can I switch a project to a different agent later?
default_agent in project.yaml (or via watchfire settings) and new sessions will use the new backend. In-flight sessions keep running on their original backend until they finish.Can I bring my own model?
Security & privacy
What stays on your machine and what the sandbox actually does.
Does anything I do in Watchfire leave my machine?
Where does Watchfire store integration secrets?
IntegrationsService.Save gRPC is write-only on the wire: clients can replace secrets but never read existing values back over RPC. Where Watchfire keeps your secrets.How do I give agents API keys for external services?
.watchfire/secrets/instructions.md — a Markdown file the agent sees read-only via its system prompt. The directory is gitignored by default; it’s your file, not ours. Use it for “the production database URL is X,” “run migrations against this Stripe test key,” and similar setup notes. Secrets & setup instructions.Can the agent read my SSH keys?
~/.ssh, ~/.aws, ~/.gnupg, ~/.netrc, and ~/.npmrc for every agent process. Enforcement is at the kernel level, so it does not rely on the agent being well-behaved.Why is there no sandbox on Windows?
What stops a rogue agent from doing something destructive?
watchfire/<n> branch, not on your default branch), and you (nothing merges without a review you triggered, unless you turned auto-merge on). Restart protection also caps runaway loops before they burn budget. Threat model.Comparisons
How Watchfire compares to other tools in the agent-coding space.
How does Watchfire compare to Aider?
Why not just run Claude Code or Codex directly, without Watchfire?
main, a platform sandbox that blocks ~/.ssh and credential stores, and parallelism across projects from one daemon. Same agent, safer boundary. Watchfire vs raw CLI.How does Watchfire compare to Cursor’s agent mode?
cursor-agentCLI is also a Watchfire backend, so you can orchestrate Cursor’s models in the worktree-isolated flow. Watchfire vs Cursor agents.How does Watchfire compare to Devin and other cloud autonomous agents?
How does Watchfire compare to GitHub Copilot Workspace?
Pricing & licensing
Cost, license, and what “open source” means here.
How much does Watchfire cost?
What’s the license?
Can I use Watchfire commercially?
Troubleshooting
The failure modes that come up most often, and where to look first.
The daemon won’t start — what should I check first?
watchfired --foreground so stderr lands in your terminal. Two common culprits: another process is already on 127.0.0.1:8765 (set a different ListenAddr or stop the conflict), or a stale ~/.watchfire/daemon.yaml with a live-but-unrelated PID (delete it and re-run watchfire daemon start). Full daemon-startup runbook.`watchfire status` returns ‘connection refused’ — how do I fix it?
watchfire daemon status first. If it reports the daemon isn’t running, start it with watchfire daemon start. If it reports a PID but the CLI still can’t connect, the recorded PID is stale — run watchfire daemon stop then watchfire daemon start to clear it. Connection-refused runbook.The GUI says ‘no daemon’ — what now?
watchfired itself by walking PATH and then a couple of standard install locations. If none resolve, the GUI surfaces the connection error. Check which watchfired from a normal terminal; if nothing comes back, reinstall (Homebrew is the easy path on macOS). If the binary exists, start the daemon manually before opening the app. GUI runbook.A task is stuck in ‘in progress’ after a crash — how do I recover?
watchfire task stop <n> to clear the in-progress flag, then inspect the worktree under .watchfire/worktrees/<n> for partial work. You can resume by flipping the task back to ready, or set success: false with a failure_reason if the run is unrecoverable. Stuck-task runbook.A worktree won’t merge cleanly — what should I do?
Wildfire mode never stops — how do I cap it?
watchfire wildfire --help, or stop it interactively from the TUI/GUI. Restart protection already caps obvious runaway loops, but Wildfire’s job is to keep working — you tell it when to stop. Wildfire-loop runbook.Get started with Watchfire
Install in seconds. Define tasks. Let agents ship code for you.
Download for macOSAvailable for macOS, Linux, and Windows
# Install via Homebrew (macOS)brew tap watchfire-io/tapbrew install --cask watchfire-io/tap/watchfire# Set up your project and gowatchfire initwatchfire task add "Build the login page"watchfire start --allIncludes GUI, CLI, and daemon. Also available via Homebrew.