Dev Tool Experiences
All articles

· 7 min read

Most Developers Don’t Need One AI Coding Tool. They Need Clear Jobs for Three.

By J. Park

  • tools

Yes, running two or three AI coding tools can be rational—and increasingly normal—because they fit different parts of a change better than one tool does. The workable setup is an editor agent for tight local edits, a terminal agent for investigation and test-driven work, and a GitHub-native agent for asynchronous PR follow-up; don’t ask all three to build the same feature.

The failure mode is familiar: Cursor, Claude Code, Copilot, Codex, or another agent all get pointed at the same ticket, all receive slightly different context, and all make plausible but incompatible edits. You don’t get parallelism. You get three expensive interpretations of a half-written requirement and a review queue nobody wants.

Assign tools by where the work happens, not by whose model won last week

A useful split is based on the interface and the artifact you need next. Keep the tool you already inhabit for the short loop: inspect a component, edit two files, run a focused test, look at the diff. Cursor’s foreground Agent is built around exactly that editor-side loop: it can search code, edit files, and use the terminal from the side pane. Keep it close to your hands, because you’re supplying the missing product judgment continuously.

Use a terminal agent when the task starts with evidence rather than an edit. “Why did this integration test become flaky after the queue migration?” is usually a shell session: grep logs, inspect git history, reproduce, alter a narrow assumption, rerun a command. Claude Code makes this shape explicit: claude -p "..." is scriptable, --max-turns bounds a non-interactive run, and --allowedTools can allow read-only commands such as git log and git diff without opening the rest of your shell permissions.

Use a PR-native or cloud agent for work that can survive a branch boundary: a contained issue, routine dependency migration, docs repair, or responding to a review comment while you do something else. GitHub’s coding-agent workflow can start from an issue or PR comment and return a pull request for review. That’s valuable because the output is already in the unit your team accepts or rejects: a branch, a diff, checks, comments, and a PR—not a long terminal transcript you have to reconstruct.

What each is bad at matters. An editor agent is poor at unattended work because it keeps asking for your attention. A terminal agent is poor at visual verification unless you feed it screenshots or deliberately make it inspect the running app. A cloud agent is poor at ambiguous product work and risky environment assumptions; it may be isolated, but it still needs credentials, setup, network policy, and a reviewer who understands the blast radius. Cursor’s cloud-agent documentation explicitly warns that agents can run terminal commands automatically and that internet access raises prompt-injection and exfiltration concerns.

Put the shared context in the repository, once

The first thing to standardize is not the model. It’s the instructions the models see. Put a short AGENTS.md in the repository root and make it the portable version of your project’s operating manual. Cursor automatically reads AGENTS.md; GitHub Copilot CLI discovers it alongside CLAUDE.md and GEMINI.md; and OpenAI’s Codex guidance recommends maintaining it for persistent repository context. That overlap is the rare bit of agent plumbing worth betting on.

Keep this file operational. It should answer questions an agent otherwise answers by guessing: package manager, bootstrap command, focused test commands, generated directories, architectural boundaries, secrets policy, and the definition of done. Don’t put a 400-line style guide in it. A giant instruction file becomes background noise, costs context, and causes agents to follow stale ceremony instead of the task.

# AGENTS.md

## Setup
- Use pnpm only. Run `pnpm install` after lockfile changes.
- Start the app with `pnpm dev`.

## Validation
- For API changes: `pnpm test:api`.
- For web changes: `pnpm lint && pnpm test:web`.
- Do not run the full E2E suite unless the task changes checkout, auth, or payments.

## Boundaries
- Do not edit `packages/generated/`.
- Database migrations require a migration file and a rollback note in the PR.
- Never print, commit, or upload values from `.env` files.

## Done means
- Make the smallest diff that fixes the stated problem.
- Report commands run, commands that failed, and anything not verified.

Then add tool-specific files only for genuine differences. Put detailed interactive workflow guidance in .cursor/rules/ if the editor agent needs it. Put Claude-specific permissions or hooks in its settings. Put path-scoped Copilot instructions in .github/instructions/ when, for example, your Rails models and Terraform modules need different rules. Don’t duplicate the shared build and safety rules in four files. Divergence is how one agent learns that pnpm test:web is mandatory while another confidently skips it.

Use a handoff protocol, not a relay race

You don’t need an orchestration platform to coordinate three tools. You need a rule: one tool may edit a working tree at a time. The others can investigate, plan, review, or work in a separate branch. If you ignore this, you’ll spend the saved implementation time resolving agent-on-agent conflicts and figuring out which one deleted the test fixture.

  1. Start locally. Ask the terminal agent for a bounded investigation: reproduce the failure, name the likely files, propose a plan, and stop before editing. For a non-interactive Claude Code probe, use a hard cap such as claude -p --max-turns 3 "Reproduce the failing test and report the smallest likely fix. Do not edit files."
  2. Make the implementation in one place. Use the editor agent for a change you want to steer line by line, or create a dedicated branch and delegate a self-contained issue to a cloud/PR agent. Never run both against the same checkout.
  3. Turn the output into a reviewable contract. Require the implementing agent to state changed files, validation commands run, validation commands not run, and assumptions. Paste that summary into the PR description if the tool doesn’t create it.
  4. Use the second tool as a reviewer, not a second author. Give it the diff plus the ticket and ask for missing tests, violated boundaries, and incorrect assumptions. A reviewer agent that only says “looks good” is not a gate; it’s autocomplete for reassurance.

For review work, use separate context on purpose. The implementation agent knows every dead end it explored and is biased toward its own design. A fresh terminal or editor session can read git diff --check, inspect the changed call sites, and challenge the premise without carrying the earlier conversation. Ask a narrow question: “Does this diff preserve retry behavior when attempts is zero?” You’ll get a more useful answer than “review my changes.”

Make the boundary enforceable

The tools need guardrails that match their job. For local exploration, default to approval prompts and permit only the commands you’re comfortable approving repeatedly. Claude Code supports a plan permission mode and tool allowlists; that’s a better daily default than a blanket permission bypass. For a background task, use a repository with branch protection, required checks, and no shortcut around human review. GitHub’s own Copilot guidance says agent-created pull requests still need thorough review; depending on repository settings, the agent’s workflow runs may not execute automatically, so verify the CI behavior before treating a cloud-agent PR as tested.

Give every agent run a stopping condition. “Implement auth” is a request for scope creep. “Add a failing test for expired refresh tokens, make it pass without changing the public API, run pnpm test:api, and stop if a migration is required” is a task another tool can inherit and a human can review. If it takes longer than you expected, don’t add another agent. Narrow the task.

The practical end state isn’t a personal swarm. It’s a small toolchain where the editor helps you think in code, the terminal agent reduces time-to-evidence, and the PR agent turns isolated work into a reviewable branch. When all three share repository instructions and only one owns an edit at a time, using multiple coding tools feels less like model shopping and more like using a debugger, shell, and CI for the jobs they’re each good at.

Sources & citations

  1. [1]Cursor Agent overview and capabilities
  2. [2]Cursor rules and AGENTS.md documentation
  3. [3]Cursor background-agent security documentation
  4. [4]Anthropic Claude Code CLI reference
  5. [5]GitHub Copilot CLI custom instructions documentation
  6. [6]GitHub documentation on third-party coding agents and pull-request workflows
  7. [7]GitHub guidance for reviewing Copilot cloud-agent output
  8. [8]OpenAI Codex guidance on AGENTS.md