Skip to main content
Watchfire
Task template

Add a small feature

One capability you can describe in a sentence — with a list of what it isn't.

Small features fail when they grow. The agent is happy to 'just tidy up the neighbouring component while it's there', and what was supposed to be a button becomes a 400-line PR. This template forces you to spell out the affordance and the negation list before the agent starts.

When to reach for this template.

  • You can write the feature as a single sentence ('Add a CSV export button to /analytics').
  • There's an obvious existing component, hook, or pattern the new code should mirror.
  • You're willing to commit to an explicit out-of-scope list.
  • The diff should plausibly touch one or two directories — not the whole app.

The template.

Drop this into .watchfire/tasks/<n>.yaml, edit the prompt and acceptance_criteria to match your repo, and let the daemon run it.

task_id: feat0002
task_number: 2
title: "Add CSV export button to /analytics"
prompt: |
  Add a CSV export button to the analytics page
  (`app/analytics/page.tsx`). Clicking it
  downloads the currently-filtered rows as
  `analytics-YYYY-MM-DD.csv`. Reuse the existing
  `<Button>` from `components/ui/Button.tsx`
  and place it next to the date-range picker.

  Generate the CSV client-side from the rows
  already in state — do not add a new API route.
  Use the same column order as the on-screen
  table, with the header row matching the visible
  column titles.

  Out of scope:
  - Changing the data-fetching layer.
  - Adding XLSX/PDF export.
  - Restyling the date-range picker.
  - Anything outside `app/analytics/` and a small
    `lib/csv.ts` helper if one is needed.
acceptance_criteria: |
  - A "Download CSV" button is visible on
    `/analytics` next to the date-range picker.
  - Clicking it triggers a download of a valid
    CSV matching the on-screen rows.
  - `npm run test` and `npm run lint` pass.
  - No new runtime dependencies in
    `package.json`.
  - No changes outside `app/analytics/` and (at
    most) one new file under `lib/`.
status: ready

Common pitfalls.

The shapes of failure most often seen on this kind of task — and the way this template hedges against each.

  • No out-of-scope list. The agent will helpfully 'while I'm here' itself into a tour of the codebase.
  • Describing the feature in the abstract instead of pointing at the file. 'Add a CSV button' becomes a new download library and three useEffect hooks; 'add a `<Button>` next to the date-range picker in `app/analytics/page.tsx`' becomes ten lines.
  • Letting the prompt invent new infrastructure. If you don't say 'no new API route' or 'no new dependency', the agent will reach for one.
  • Skipping acceptance criteria for the visible outcome. 'A button is visible on /analytics' is a check the agent can self-verify; 'the feature works' is not.

Build your own.

This template is a starting point. Fill in a form to draft your own task in the playground — or read the full task schema to learn every field the daemon understands.

Ready to go

Get started with Watchfire

Install in seconds. Define tasks. Let agents ship code for you.

Download for macOS

Available for macOS, Linux, and Windows

install
# Install via Homebrew (macOS)
$brew tap watchfire-io/tap
$brew install --cask watchfire-io/tap/watchfire
# Set up your project and go
$watchfire init
$watchfire task add "Build the login page"
$watchfire start --all

Includes GUI, CLI, and daemon. Also available via Homebrew.