--- source_keys: - context7-websites-code-claude - claude-code-plugins-docs - claude-code-subagents-docs - context7-github-en-copilot - github-custom-agents-configuration - github-cli-plugin-reference --- # Agent Deployment Modes Agent definitions deploy at three scopes and behave differently at each. The scope determines which fields are honoured, where files must live, and what identifiers users invoke. ## Scope hierarchy and precedence | Scope | Claude Code path | Copilot CLI path | Who it affects | |---|---|---|---| | User | `~/.claude/agents/` | `~/.copilot/agents/` | All sessions for this user | | Project | `.claude/agents/` | `.github/agents/` or `.copilot/agents/` | This repo only | | Plugin/APM | `/.apm/agents/.agent.md` — single vendor-neutral file, `apm compile` emits it to both targets | *(same file)* | Sessions with the plugin/package installed | When the same agent `name` appears at multiple scopes, **user scope wins over project scope wins over plugin scope** in Claude Code. In Copilot CLI, repo-level agents override enterprise and org-level; home-directory (user) agents override repo-level on name collision. ## Which fields exist where Field rules are per scope and live with the scope: `references/plugin-scope.md` for the single vendor-neutral file, `references/project-user-scope.md` for the Claude Code / Copilot pair. Read one, not both. The short version is that plugin/APM frontmatter is an allowlist read from `agent-audit`'s `references/field-inventory.md`, narrow because `apm compile` copies frontmatter verbatim to every target (ADR-0016), while project and user scope carry the full per-provider field sets. ## Scoped identifiers (Claude Code plugin agents only) Plugin agents in **subdirectories** get compound identifiers: ``` plugins/my-plugin/.apm/agents/review/security.agent.md → my-plugin:review:security ``` Users must invoke with `@agent-my-plugin:review:security`. **Keep agents flat in `agents/` to avoid this** — subdirectory nesting is rarely worth the UX cost. At project and user scope, subdirectory path does not affect the agent's name. ## Cache isolation When a plugin is installed, its directory is copied to a cache. **Any path that leaves the agent's plugin directory breaks post-install.** Agent definition files must be self-contained — they cannot reference scripts, templates, or shared files outside the plugin. Agents at project or user scope are read directly from disk; cache isolation does not apply. ## Copilot CLI path conventions | Scope | Expected path | Notes | |---|---|---| | User | `~/.copilot/agents/.agent.md` | Home directory | | Project | `.github/agents/.agent.md` | Standard; also `.copilot/agents/` | | Plugin/APM | `/.apm/agents/.agent.md` | Not a Copilot-only file — this is the single vendor-neutral source `apm compile` reads for the Copilot CLI target | The `.agent.md` extension is **mandatory** for real Copilot CLI files (project/user scope) — Copilot CLI does not pick up plain `.md` files in the `agents/` directory. The plugin/APM source file also uses `.agent.md` by convention, since it compiles to Copilot CLI too, but it is not itself a Copilot file.