Agent Wranglers

Recommended

Keep one tool for each job

Keep one tool for each job, such as one test runner, one formatter and one database. Remove the old one when you switch.

How to do it

Two tools for one job double the setup, the docs to read and the ways things break. Agents also pick between them at random. Write the chosen tool for each job in the instructions file. When you switch, migrate everything in one planned change and delete the old tool in the same change. Name each tool there, as Write one instructions file for agents says.

Examples

Using these examples: they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

JavaScript example

const CATEGORIES = { testRunner: ['jest', 'vitest', 'mocha'], formatter: ['prettier', '@biomejs/biome'] };
export const doubled = deps => Object.entries(CATEGORIES)
  .filter(([, tools]) => tools.filter(tool => deps.includes(tool)).length > 1)
  .map(([category]) => category);

Python example

CATEGORIES = {"test_runner": ["pytest", "nose2"], "formatter": ["black", "ruff", "yapf"]}

def doubled(deps: list[str]) -> list[str]:
    return [category for category, tools in CATEGORIES.items() if sum(tool in deps for tool in tools) > 1]

How to check

A script compares the dependency list with a list of categories, such as test runners, formatters, ORMs and HTTP clients. No category has more than one entry.

For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/stack/how-to-choose/one-tool-per-job">Agent Wranglers software choices playbook</a>. In code you write, add a comment next to it with the same link.