AI coding tools like Claude Code, GitHub Copilot, and OpenCode offer several ways to extend their capabilities - skills, custom agents, subagents, and MCP servers. Each solves a different problem, and picking the wrong one leads to unnecessary complexity or limitations. Knowing which mechanism to reach for saves time and keeps your setup maintainable.
Figure: Think of your agentic workflow like this!
Agents are what developers interact with, they take the necessary actions to achieve the user's intended goal. By utilising the following tools, they can be enhanced for specific scenarios to be even more effective.
Use Case: You need to implement a new feature on your website E2E. A single agent will allow for full context.
Subagents are isolated AI instances with their own context window, capable of running in parallel with other subagents from a primary agent.
This reduces the context pollution inside of the main conversation window, with the primary process only receiving summaries of results of the subagents.
Use Case: You have a workflow which has 5 independent steps. Sub-agents allow for independent tasks to be parallelized in order to complete the task faster.
Spawning parallel workers will be more efficient than an individual worker.
Subagents are unable to interact back and forth with the user, or with each other.
They also may cause conflicts if not scoped to independent work.
AGENTS.md are markdown files that are loaded at the start of every session, providing project context to the AI Agent.
Use Case: You're in a monorepo with React frontend and Python backend. Both the frontend and backend have their own AGENTS.md that tells the agents the local rules (e.g. "use pytest," "all routes need auth middleware.").
This allows the codebase-specific context to be injected into every conversation, improving consistency by eliminating the need for developers to repeat themselves.
AGENTS.md is the cross-platform convention for providing project context to most AI coding tools. However, some tools still use their own file
CLAUDE.md.cursorrulesBut the concept remains the same. This rule uses AGENTS.md as the general term.
Skills are folders that contain a SKILL.md file. This file includes metadata such as its name, description, and a set of instructions that tell an agent how to perform a specific task. Skills can also bundle together scripts, templates, and reference material.
Do you use skills to standardize your AI workflows?
Use Case: A company has a specific way they like to perform security audits using AI. Rather than copy and pasting the prompt, we install the skill and instruct the agent to perform a security audit using the installed skill. The skill is injected into the agent's context, so the agent receives the same instruction every time.
Concepts/terms such as reusable prompts, and custom slash commands have since been superseded by skills, which acts as an open standard for achieving the same result.
MCP servers are an external process that exposes tools and data via the open standard of Model Context Protocol, allowing your AI agents to use tools and access external data.
Use Case: You want your agent to see if the changes it made are reflected in your SQL database. You install an SQL MCP server to your agent. It is then able to read from the database and inform its context.
With how rapidly AI-assisted development is evolving, we find these tools often overlap one another with the problem they're intended to solve. Here are the key differences between some seemingly similar tools.
Similarities:
High level difference:
Structural difference:
Skills and MCPs are complementary to one another: A skill can instruct the AI to use tools exposed by an MCP server.
Scenario: You want your agent to create a GitHub issue with a specific format whenever it finds a bug.
✅ Figure: Good example - Skills and MCP servers working together - the skill defines the workflow, the MCP server provides the integration
Similarities:
High level difference:
Structural difference:
Whilst you can put all your "skills" in AGENTS.md, this introduces unnecessary token waste and can lead to lower quality outputs as bloated AGENTS.md files can sometimes cause agents to ignore some instructions.
Scenario: Your team has a standard way of performing code reviews and a set of project conventions.
✅ Figure: Good example - AGENTS.md for always-on project context, skills for on-demand task-specific workflows
Similarities:
High level difference:
Structural difference:
Because subagents cannot have back-and-forth interaction with the user, they are best suited for self-contained tasks.
Skills can run within the main agent or subagents, and direct the actions taken by the agent.
Subagents can actually use skills to guide them on the process they should take when performing certain tasks.
The same limitation remains though that subagents cannot have back-and-forth interaction with the user, and thus, are best suited for self-contained tasks.
Scenario: You want to audit your codebase for security vulnerabilities across 4 microservices.
✅ Figure: Good example - Use skills when you need step-by-step control, use subagents when you need speed and the task is self-contained
Similarities:
High level difference:
Structural difference:
You should use subagents when the task is self-contained and does not require user interaction. In tools that don't yet support subagents directly, custom agents with restricted tool access can serve a similar purpose.
Scenario: You ask an agent to research five competitors and summarize the findings.
✅ Figure: Good example - Use subagents for self-contained parallel tasks, keeping the main agent's context focused
There is no need for stress over selecting the perfect tool every time, they're all just optimizations for specific use cases.
A gradual progression to get started: