DEV Community

Cover image for The 12 tools I use to pilot Claude Code in production: kept, dropped, contested
Michel Faure
Michel Faure

Posted on • Originally published at dev.to

The 12 tools I use to pilot Claude Code in production: kept, dropped, contested

The incident that frames the question

Tuesday May 20, late afternoon. Niran lifts his head from his laptop and says, putting a can of soda on the desk: "Computer use, for pushing that mockup onto the site — wouldn't that be faster?"

I answer without turning around: "Ten times the token cost of a normal session. To click three buttons."

Silence. He reopens his editor. Françoise crosses the hallway calling out to nobody in particular: "Right, let's go" — she's talking about something else, but the timing is perfect.

This scene, in variants, I've lived through about thirty times over the last two months. Not on the code, on the dispositif around the code, the toolkit that frames the Claude Code session, that loads context, constrains output, interrupts the run. We talk a lot about prompts and very little about prostheses. Here are the twelve tools that survived sixty days of solo production on a hundred-and-eighteen-thousand-line ERP. Some stayed. One was dropped. One is contested. I counted materially before writing — ls ~/.claude/skills/ returns three files, ls ~/.claude/hooks/ returns six, ls ~/tef-erp/.claude/agents/ returns one. At time of writing, the count holds at twelve.

The context that survives the session

(1) Root project CLAUDE.md, KEPT. Six versions in thirty-two days, auto-loaded by Claude Code on session open, single source of stack conventions. Without it, the agent rediscovers every session that Next 16 is not the Next.js of its training data, and it takes an hour for it to stop writing onClick handlers in Server Components. With it, the first iteration already knows what's forbidden. ROI measured in minutes saved per session, times five to ten sessions per day.

(2) User-scope persistent memory, KEPT. About eighty files indexed in ~/.claude/agent-memory/, organised by feedback, project, reference. The rule that has saved me most relapses is feedback_db_constraints_phase_zero. Before any feature that filters or inserts, list UNIQUE/CHECK/FK in DB, because these constraints are invisible in TypeScript and condition the design. User memory transcends projects, and a cross-scope audit caught an index/repo drift in less than an hour because it had an explicit canonicalisation policy.

(3) ~/tef-erp/.claude/rules/ rules, KEPT. Eighteen files currently, each documenting a project invariant and the historical reason that produced it. liste-rouge.md prevented three CSV imports from reactivating discarded contacts. cache-auth-contract.md documents that lib/cache.ts bypasses RLS and that any caller must verify auth upstream. This is code doctrine, not meta doctrine, and it's what makes the sub-agent capable of refusing a refactor that would violate the invariant.

The invocable devices

(4) Skills, three active files, KEPT. challenger, close-session, rembrandt-conventions. The skill that converted me is called falsify-before-fix, an operational instance of R4 of the Counterpart Toolkit. Five to ten minutes of protocol upstream of the fix avoid thirty to ninety minutes of fix-then-rollback cycle when the first plausible hypothesis turns out wrong. ROI six to eighteen times per incident. A textual rule in CLAUDE.md was not enough, since I had R4 under my eyes for three weeks when I committed the wrong fix on May 6. A skill is a material mechanism that loads automatically on keywords "fix", "bug", "hotfix", and imposes its protocol on the active session.

(5) User-scope hooks, six active files at 21/05/2026, KEPT. secret-scanner.sh, deploy-safeguard.sh, audit-memory-reminder.sh, check-workaround-assumed.sh, pre-bulk-mutation-count-staleness.sh, r15-autonomous-counter.sh. Drift note: the initial brief documented five hooks, material counting returns six — r15-autonomous-counter.sh was added in July as an R15 meta-hook prototype and already figured in ~/.claude/hooks/ at writing time. The total of twelve tools holds; the sixth hook is a refinement of tool 5, not a thirteenth distinct tool. The deploy-safeguard.sh hook started with two forbidden patterns (vercel --prod and supabase db push), it covers six today after a disguised command nearly slipped through. Backport to the doctrine's public source within forty-eight hours. No secret has leaked into chat since deployment, and the hook blocks before the command, not before the commit.

On check-workaround-assumed.sh, v0.2 included patterns "fix" and "temp", empirically sixty percent false positives on conventional-commits commits prefixed fix:. v0.3 narrowed to actual workaround vocabulary, and the hook went from irritating to useful.

# ~/.claude/hooks/check-workaround-assumed.sh
# v0.3 reformulation: pattern narrowed to actual workaround vocabulary.
# v0.2 included "fix" and "temp" — empirically too broad (60% false positives
# on conventional-commits `fix:` prefix and template/tempdir collisions).
# Test against the author's last 50 commits before promoting to error.
Enter fullscreen mode Exit fullscreen mode

(6) Project-scope agent-challenger sub-agent, KEPT. Output format enforced: Tool / Question / Refutation criterion. Material disagreement, never the emotional "are you sure?" that pushes you to revise without a new fact. When I ask the challenger to attack an incident hypothesis, it produces three probes designed to refute, not confirm, each probe carrying its three fields, and the output stays raw. It's the opposite of the complacent agent, and it's what the Counterpart Toolkit aims at as a whole.

Material observability

(7) Daily Supabase drift probes, KEPT. ADR-0039 documents five probes that run every night. sonde_contacts_orphelins_inscrits would have prevented an attendance incident on May 14 if it had existed two weeks earlier, and it later served to detect sixteen enrolled contacts without a first name or a last name. The median appearance-to-detection delay of a silent divergence went from invisible to 35.3 days over a ninety-day rolling window. The doctrine target is thirty days, we're closing in.

(8) Sentry withMonitor plus Sentry.flush(2000) on serverless crons, KEPT. April 14, forty-one false-positive timeouts because Vercel crons terminated before the Sentry send. The Sentry.flush(2000) in finally eliminated the entire class. Low-volume SLO equals anomaly above bounds, never percentage threshold. A cron that goes from one failure per day to three triggers a statistical anomaly without triggering a threshold.

Delegation and arbitration

(9) agent-erp-tef sub-agent, CONTESTED. The agent overstates build and ESLint without raw output, and relapsed on May 8 by pushing a silent ADR-0042 warning onto main. I keep using it for complex multi-file tasks on two conditions. Raw output required (never "the build passes" without stdout), and any DDL migration produces a supabase/migrations/ file committed with its path in the report. The contested status holds because there's no alternative: hand-editing remains safer but slower.

(10) agent-academique (DEV.to series), KEPT. Three-pass protocol: scaffold, flesh, voice. Fifty drafts in forty days. Off the code stack, same principle of effort shifted to the dispositif rather than the execution. ROI invisible per session, visible over forty days.

(11) Computer use MCP, DROPPED. Prohibitive token cost, roughly ten times a normal session. The decision is explicit, since computer use requires a prior validation that is never granted except for cases where no dedicated MCP alternative exists for the target. In sixty days, I've invoked it twice, for macOS Photos and a native PDF. Everything else goes through dedicated MCPs (Slack, Gmail, Airtable, Supabase, WordPress) or Chrome MCP. The dropped here isn't a rejection of the tool, it's a numbered usage discipline.

(12) Counterpart Toolkit doctrine v0.7, KEPT. Sixteen operational rules in two hundred lines, install by ./install.sh --yes /path/to/project. Six versions in thirty-two days, four external reviewers integrated, cumulative ROI on R4 (falsify), R6 (Live/Snapshot/Cache), R10 (silent failure forbidden). The meta-doctrine that makes the eleven preceding tools coherent with each other, without which each would remain a local patch with no common grammar.

What I learned from the catalogue

The pattern jumps out. The tools that survive are the ones that interrupt the run at the moment complacency composes, mine and the agent's. CLAUDE.md interrupts stack forgetting, skills interrupt the reflex before the fix, hooks interrupt the command before it hits the database, probes interrupt drift before production cracks. Computer use, on the other hand, interrupts nothing and prolongs the run by generating tokens. That's why it was dropped.

The contested tool, agent-erp-tef, is the most instructive. It doesn't interrupt its own complacency, and produces green builds that aren't. If I were to fix it, I'd impose a raw-output protocol, the way falsify-before-fix imposes its probes at fix time.

When a tool can't interrupt you, it accompanies you in the drift. When it interrupts you, it begins to be worth its cost.


Material verdict at May 21, 2026, on a 118,808-line ERP, sixty days of solo production. Reference doctrine: Counterpart Toolkit v0.7, CC-BY-4.0, github.com/michelfaure/doctrine-counterpart. Names and scenes recomposed.

Top comments (0)