Coding Agents' Tooling Preferences: A Large-Scale Study

Understanding the underlying mechanisms of AI coding agents is crucial for developers looking to leverage these tools effectively. A recent analysis, involving over 17,000 runs across three prominent AI models—Claude, Codex, and Cursor—sheds light on their distinct preferences for external tools. This study moves beyond anecdotal evidence to provide quantitative data on which tools these agents select, and more importantly, the reasoning behind those choices.

The research categorized tools into several types: interpreters (like Python, Node.js), linters (e.g., Pylint, ESLint), formatters (e.g., Black, Prettier), and package managers (e.g., Pip, NPM). The core finding is that while all agents can access a broad spectrum, their default choices and fallback strategies reveal underlying biases and strengths.

Bar chart showing frequency of tool usage by AI coding agent type

Claude's Pragmatism: Versatile and Reliable

Claude, known for its strong reasoning capabilities, demonstrated a preference for robust and widely adopted tools. In the Python ecosystem, it consistently favored pip for package management and black for code formatting. For linting, pylint was its go-to, indicating a reliance on established, feature-rich tools that offer comprehensive checks and consistent output. When executing code, Claude showed a strong preference for the standard Python interpreter.

Claude's selection pattern suggests an emphasis on correctness and maintainability. Tools like black enforce a single, opinionated style, reducing debates and ensuring consistency. pylint, while sometimes verbose, offers deep static analysis that can catch subtle errors. This pragmatic approach means Claude is less likely to choose niche or experimental tools, opting instead for those with proven track records and extensive documentation. This makes it a reliable choice for projects where adherence to standards and long-term maintainability are paramount.

Codex's Developer-Centric Approach: Familiarity Breeds Efficiency

Codex, particularly when integrated into developer environments, showed a tendency to align with tools commonly found in modern JavaScript and Python development workflows. For Node.js projects, npm and yarn were frequently selected for package management, mirroring common developer practices. In the JavaScript world, eslint and prettier were the dominant choices for linting and formatting, respectively. These are industry standards, and Codex's selection suggests it's tuned to produce code that fits seamlessly into existing developer-centric projects.

When working with Python, Codex also leaned towards pip but showed a slightly higher propensity than Claude to fall back to pipenv or poetry when context suggested a more managed dependency approach. This adaptability points to Codex's training on a vast corpus of code that reflects evolving developer tooling trends. The agent appears to prioritize tools that developers are likely to be familiar with, potentially reducing the friction of integrating AI-generated code into human-led projects.

Cursor's Focus on Speed and Integration

Cursor, an AI-first code editor, exhibited a distinct preference for tools that prioritize speed and tight integration within its own environment. While still respecting ecosystem standards, Cursor often favored tools that offer faster performance or more streamlined workflows. For Python, it frequently selected black for formatting, similar to Claude, but showed a greater inclination towards using the system's default Python interpreter for execution without explicit configuration, implying a reliance on its internal execution environment.

Interestingly, Cursor demonstrated a higher rate of using linters and formatters that are known for their speed, such as ruff for Python, which is gaining traction for its performance advantages over older tools like pylint. This suggests that Cursor's underlying architecture or its agent's objectives prioritize rapid feedback loops and efficient code generation. The agent appears to be optimized for scenarios where quick iteration and immediate code quality checks are essential, possibly at the expense of the exhaustive analysis offered by some older tools. This focus on integrated speed makes Cursor a compelling option for rapid prototyping and development sprints.

Cross-Agent Observations and Unanswered Questions

Across all three agents, there was a clear trend: when faced with ambiguity or the need for foundational tasks, they gravitate towards the most prevalent tools within each language's ecosystem. Python projects saw a heavy reliance on pip, black, and pylint/ruff. JavaScript projects leaned on npm, eslint, and prettier.

However, the study also highlighted areas for further investigation. What happens when these agents encounter projects with highly customized or legacy tooling? Do they adapt gracefully, or do they default to their preferred tools, potentially introducing compatibility issues? Furthermore, the long-term impact of these tooling preferences on code maintainability and developer onboarding remains an open question. As AI agents become more integrated into the software development lifecycle, understanding and potentially influencing their tool choices will be critical for ensuring consistent, high-quality code output.