# How Birgitta Böckeler actually uses coding agents

Thoughtworks, harness engineering

**If you take one thing:** `sensors check`, a sidecar the agent polls. she built a CLI that keeps linters, tests, coverage and mutation testing running beside the agent and hands it a short status with fix guidance, so it can self-correct before she reviews.

- **Agent:** Cursor (ide) ([source, 2026-05-27](https://martinfowler.com/articles/sensors-for-coding-agents.html))
- **Agent:** Claude Code ([source, 2026-05-27](https://martinfowler.com/articles/sensors-for-coding-agents.html))
- **Agent:** Pi (cli) ([source, 2026-07-13](https://martinfowler.com/articles/sensors-for-coding-agents.html))
- **Model:** Claude Sonnet ([source, 2026-05-27](https://martinfowler.com/articles/sensors-for-coding-agents.html))
- **Model:** Claude Opus 4.8 ([source, 2026-08-10](https://martinfowler.com/articles/exploring-gen-ai/tdd-in-the-agent-loop.html))
- **Review:** Risk triage: probability, impact and detectability set how much she reads; sensors point her to where ([source, 2026-07-22](https://se-radio.net/2026/07/se-radio-730-birgitta-boeckeler-on-harness-engineering-for-ai-agents/))
- **Harness:** Sensors sidecar running lint, types, tests, coverage and mutation testing next to the agent; weekly review skills ([source, 2026-07-13](https://martinfowler.com/articles/sensors-for-coding-agents.html))
- **Rules file:** AGENTS.md and CLAUDE.md (identical): use uv, check the sensors ([source, 2026-06-11](https://github.com/birgitta410/sensors-cli/blob/b0ecac7e102720967a8e5815653ec20a857f4b1f/AGENTS.md#L5))
- **Skills:** _local-setup, _new-parser, sensors_config-default, sensors_config-python, sensors_config-typescript, sensors_wrap-tool ([source, 2026-06-15](https://github.com/birgitta410/sensors-cli/tree/9778caaf6ffdf51fa6bac48de09a0a421a0d0ae2/.claude/skills))
- **Hooks:** gitleaks pre-commit (git hook) ([source, 2026-05-27](https://martinfowler.com/articles/sensors-for-coding-agents.html))
- **MCP servers:** playwright ([source, 2026-06-18](https://github.com/birgitta410/local-coding-evals/blob/cb0a90ce986d727ff07543592beabcecb978baaf/.mcp.json#L6))

## In their words

> Throughout building the application, I used a mix of Cursor, Claude Code, and OpenCode (in that order of frequency).

> Throughout building the application, I used a mix of Cursor, Claude Code, and OpenCode (in that order of frequency).

> I tried this by building an extension for (and with) Pi.

> My default model was usually Claude Sonnet, for some of the planning and analysis tasks I used Claude Opus, and for implementation tasks I frequently used Cursor's composer-2 model.

> Opus 4.8 compared the quality of both solutions and their tests, without knowledge of how the solutions were created.


Archetype (our label): Toolsmith. Newest source: 2026-08-10.
Card: https://www.prehistoriq.com/stacks/birgitta410/ · Data: https://github.com/prehistoriq/stacks/blob/main/data/stacks/birgitta410.json
