Agent Config Research
Produce a side-by-side comparison of where each supported coding agent reads its
skills, subagents, and always-on instructions — at user/global scope,
at project scope, and anywhere else (env vars, settings keys, plugins,
managed-policy paths). The output is three Markdown tables with footnote
citations to the official upstream docs, matching the format in
resources/agent-config.md at the twagent repo root.
The whole point of this skill is that agent docs drift fast (every release
moves a path or adds an override). A request like "where do I put a project
skill for Copilot CLI?" cannot be answered confidently from training data
alone — you must verify against the live docs before writing the row.
Agents covered
| Slug |
What it is |
claude-code |
Anthropic's official CLI for Claude |
copilot-cli |
GitHub Copilot CLI (copilot / gh copilot) |
copilot-vscode |
GitHub Copilot extension for Visual Studio Code |
copilot-intellij |
GitHub Copilot plugin for IntelliJ / JetBrains IDEs |
pi |
Pi Coding Agent (pi.dev) |
If the user names only a subset, restrict the tables to those rows — do not
invent agents outside this list, and do not silently drop ones they asked for.
Workflow
- Confirm scope. Default to all five agents and all three concept tables
(Skills / Agents-subagents / Instructions). If the user specified a subset
(e.g. "just the CLI agents", "only instructions"), trim accordingly.
- Read the per-agent reference file in
references/<agent>.md. Each one
lists the canonical doc URLs, the known-current paths as of the file's
"Last verified" date, and the search queries that worked last time. Treat
these as starting points, not as ground truth.
- Fetch the live docs. For every cell you are about to write, WebFetch
the corresponding upstream doc and pull the path/key directly out of the
current page. If a page has moved, WebSearch for the new location before
guessing. Do not write a cell from memory — agents reorganize their
config layouts often enough that stale recall is the most common failure
mode for this skill.
- Parallelize. Per-agent research is independent. If the Agent tool is
available, dispatch one subagent per agent in a single message and let them
return structured findings. Otherwise WebFetch sequentially.
- Fill the template in
assets/output-template.md. Keep rows under
~120 chars wide (line-wrapping in monospace viewers is ugly). Use
footnote-style [1]-style citations at the bottom — one per source URL —
and reuse the same footnote when the same page covers multiple cells.
- Write or print. Default to printing the Markdown to the conversation.
If the user gave an output path, write the file there and report the path.
Output template
Use this exact skeleton (also bundled at assets/output-template.md for
copy-paste):
# Agent Config
## Skills
| Agent | User/global skills | Project skills | Other supported locations / notes |
| ----- | ------------------ | -------------- | --------------------------------- |
| ... | ... | ... | ... |
## Agents / subagents
| Agent | User/global agents | Project agents | Other supported locations / notes |
| ----- | ------------------ | -------------- | --------------------------------- |
| ... | ... | ... | ... |
## Instructions (always-on context)
| Agent | User/global instructions | Project instructions | Other supported locations / notes |
| ----- | ------------------------ | -------------------- | --------------------------------- |
| ... | ... | ... | ... |
[1]: <url> "<page title>"
[2]: <url> "<page title>"
Cell-content rules
These rules exist because the example output (resources/agent-config.md) is
the spec — readers scan these tables side-by-side and inconsistency breaks the
comparison.
- Paths in backticks. Always quote filesystem paths and settings keys
with backticks (
`~/.claude/skills/`). Bare paths get mangled by table
renderers.
- Wildcard the concrete name. Use
<name> as the placeholder when the
path is ~/.something/agents/<name>.md, not a real example. Real example
names get mistaken for required filenames.
- List multiple paths inline, comma-separated. Don't put each path on its
own line — the columns get unreadable.
- "Not supported" is a valid answer. If a concept genuinely doesn't exist
for an agent (e.g. Pi has no subagents), write
Not supported in both path
columns and use the notes column to explain the closest alternative
("docs suggest spawning Pi via tmux instead"). Never fabricate a path.
- Notes column carries override order, precedence, env vars, plugin
loaders. Anything that affects which of multiple matching files wins
belongs here.
- One footnote per source. Cite the page that the cell content came from,
with title. Reuse footnotes when the same doc page covers several cells —
don't proliferate
[1] [2] [3] for the same URL.
Concept mapping for IDE agents
The IDE Copilots (copilot-vscode, copilot-intellij) don't have a 1:1
mapping for "skills" or "subagents" the way CLI agents do. The honest answer
is usually Not supported with a notes-column pointer to the nearest
analogue:
- Skills → closest analogues in Copilot IDE products are custom chat
modes (
*.chatmode.md), prompt files (*.prompt.md), or
MCP-loaded tools. None of these are called skills. If the IDE
doesn't ship a "skill" feature by that name, write Not supported and
explain in notes.
- Subagents → IDE Copilots route through a single chat agent; multi-agent
orchestration is via chat modes or extensions, not a first-class
subagent registry. Default to
Not supported.
- Instructions → both IDE Copilots do support custom instructions
(
.github/copilot-instructions.md, .github/instructions/**/*.instructions.md
with applyTo globs). This row should be filled in fully.
When in doubt, verify with the live VS Code Copilot or JetBrains Copilot docs
before writing Not supported — feature parity changes release-to-release.
Quality bar
Before returning, sanity-check the report:
- Every cell either has a concrete path/key, or says
Not supported with
context — no blank cells, no ?, no "TBD".
- Every non-trivial claim has a footnote pointing to an official source
(vendor docs > vendor blog > release notes > third-party only as last
resort).
- Footnote URLs are reachable (if WebFetch returned 404 / redirect, follow
it and update the URL).
- Agent column order matches across all three tables.
- No row exceeds ~120 chars when rendered (count the cell text, not the
Markdown source).
When NOT to use this skill
- The user wants to know how to write a skill / subagent / instruction
file — that's a content question, not a location question. Use the
relevant agent's authoring docs instead.
- The user only wants the answer for one location for one agent
("where does Claude Code put its global CLAUDE.md?") — a single
WebFetch + one-line answer is faster than the full table.
- The user is asking about twagent's own internal config layout — that's
the twagent README, not this skill.
1---2name: agent-config-research3description: Researches where each major coding agent (Claude Code, Copilot CLI, Copilot for VS Code, Copilot for IntelliJ, Pi) reads its skills, subagents, and instruction files — both at user/global scope and per-project scope — and produces a side-by-side comparison report in three Markdown tables (Skills / Agents-subagents / Instructions). Use this skill whenever the user wants to know where a coding agent stores or loads config, where to drop a CLAUDE.md / AGENTS.md / copilot-instructions.md / skill folder, how multiple agents discover the same file, or asks to compare config locations across agents. Trigger on phrases like "agent config locations", "where does X read its instructions", "compare config paths", "where do I put a skill for Y", "agent comparison table", "global vs project config for <agent>", or any request that involves enumerating filesystem locations, settings keys, or env-var overrides for one or more of the supported agents — even when the user does not explicitly say "research".4---56# Agent Config Research78Produce a side-by-side comparison of where each supported coding agent reads its9**skills**, **subagents**, and **always-on instructions** — at user/global scope,10at project scope, and anywhere else (env vars, settings keys, plugins,11managed-policy paths). The output is three Markdown tables with footnote12citations to the **official upstream docs**, matching the format in13`resources/agent-config.md` at the twagent repo root.1415The whole point of this skill is that agent docs drift fast (every release16moves a path or adds an override). A request like "where do I put a project17skill for Copilot CLI?" cannot be answered confidently from training data18alone — you must verify against the live docs before writing the row.1920## Agents covered2122| Slug | What it is |23| ------------------- | ------------------------------------------------------- |24| `claude-code` | Anthropic's official CLI for Claude |25| `copilot-cli` | GitHub Copilot CLI (`copilot` / `gh copilot`) |26| `copilot-vscode` | GitHub Copilot extension for Visual Studio Code |27| `copilot-intellij` | GitHub Copilot plugin for IntelliJ / JetBrains IDEs |28| `pi` | Pi Coding Agent (pi.dev) |2930If the user names only a subset, restrict the tables to those rows — do not31invent agents outside this list, and do not silently drop ones they asked for.3233## Workflow34351. **Confirm scope.** Default to all five agents and all three concept tables36 (Skills / Agents-subagents / Instructions). If the user specified a subset37 (e.g. "just the CLI agents", "only instructions"), trim accordingly.382. **Read the per-agent reference file** in `references/<agent>.md`. Each one39 lists the canonical doc URLs, the known-current paths as of the file's40 "Last verified" date, and the search queries that worked last time. Treat41 these as **starting points**, not as ground truth.423. **Fetch the live docs.** For every cell you are about to write, WebFetch43 the corresponding upstream doc and pull the path/key directly out of the44 current page. If a page has moved, WebSearch for the new location before45 guessing. **Do not write a cell from memory** — agents reorganize their46 config layouts often enough that stale recall is the most common failure47 mode for this skill.484. **Parallelize.** Per-agent research is independent. If the Agent tool is49 available, dispatch one subagent per agent in a single message and let them50 return structured findings. Otherwise WebFetch sequentially.515. **Fill the template** in `assets/output-template.md`. Keep rows under52 ~120 chars wide (line-wrapping in monospace viewers is ugly). Use53 footnote-style `[1]`-style citations at the bottom — one per source URL —54 and reuse the same footnote when the same page covers multiple cells.556. **Write or print.** Default to printing the Markdown to the conversation.56 If the user gave an output path, write the file there and report the path.5758## Output template5960Use this exact skeleton (also bundled at `assets/output-template.md` for61copy-paste):6263```markdown64# Agent Config6566## Skills6768| Agent | User/global skills | Project skills | Other supported locations / notes |69| ----- | ------------------ | -------------- | --------------------------------- |70| ... | ... | ... | ... |7172## Agents / subagents7374| Agent | User/global agents | Project agents | Other supported locations / notes |75| ----- | ------------------ | -------------- | --------------------------------- |76| ... | ... | ... | ... |7778## Instructions (always-on context)7980| Agent | User/global instructions | Project instructions | Other supported locations / notes |81| ----- | ------------------------ | -------------------- | --------------------------------- |82| ... | ... | ... | ... |8384[1]: <url> "<page title>"85[2]: <url> "<page title>"86```8788## Cell-content rules8990These rules exist because the example output (`resources/agent-config.md`) is91the spec — readers scan these tables side-by-side and inconsistency breaks the92comparison.9394- **Paths in backticks.** Always quote filesystem paths and settings keys95 with backticks (`` `~/.claude/skills/` ``). Bare paths get mangled by table96 renderers.97- **Wildcard the concrete name.** Use `<name>` as the placeholder when the98 path is `~/.something/agents/<name>.md`, not a real example. Real example99 names get mistaken for required filenames.100- **List multiple paths inline, comma-separated.** Don't put each path on its101 own line — the columns get unreadable.102- **"Not supported" is a valid answer.** If a concept genuinely doesn't exist103 for an agent (e.g. Pi has no subagents), write `Not supported` in both path104 columns and use the notes column to explain the closest alternative105 ("docs suggest spawning Pi via `tmux` instead"). Never fabricate a path.106- **Notes column carries override order, precedence, env vars, plugin107 loaders.** Anything that affects *which* of multiple matching files wins108 belongs here.109- **One footnote per source.** Cite the page that the cell content came from,110 with title. Reuse footnotes when the same doc page covers several cells —111 don't proliferate `[1] [2] [3]` for the same URL.112113## Concept mapping for IDE agents114115The IDE Copilots (`copilot-vscode`, `copilot-intellij`) don't have a 1:1116mapping for "skills" or "subagents" the way CLI agents do. The honest answer117is usually `Not supported` with a notes-column pointer to the nearest118analogue:119120- **Skills** → closest analogues in Copilot IDE products are **custom chat121 modes** (`*.chatmode.md`), **prompt files** (`*.prompt.md`), or122 **MCP-loaded tools**. None of these are *called* skills. If the IDE123 doesn't ship a "skill" feature by that name, write `Not supported` and124 explain in notes.125- **Subagents** → IDE Copilots route through a single chat agent; multi-agent126 orchestration is via chat modes or extensions, not a first-class127 subagent registry. Default to `Not supported`.128- **Instructions** → both IDE Copilots *do* support custom instructions129 (`.github/copilot-instructions.md`, `.github/instructions/**/*.instructions.md`130 with `applyTo` globs). This row should be filled in fully.131132When in doubt, verify with the live VS Code Copilot or JetBrains Copilot docs133before writing `Not supported` — feature parity changes release-to-release.134135## Quality bar136137Before returning, sanity-check the report:138139- Every cell either has a concrete path/key, or says `Not supported` with140 context — no blank cells, no `?`, no "TBD".141- Every non-trivial claim has a footnote pointing to an official source142 (vendor docs > vendor blog > release notes > third-party only as last143 resort).144- Footnote URLs are reachable (if WebFetch returned 404 / redirect, follow145 it and update the URL).146- Agent column order matches across all three tables.147- No row exceeds ~120 chars when rendered (count the cell text, not the148 Markdown source).149150## When NOT to use this skill151152- The user wants to know *how to write* a skill / subagent / instruction153 file — that's a content question, not a location question. Use the154 relevant agent's authoring docs instead.155- The user only wants the answer for **one** location for **one** agent156 ("where does Claude Code put its global CLAUDE.md?") — a single157 WebFetch + one-line answer is faster than the full table.158- The user is asking about twagent's own internal config layout — that's159 the twagent README, not this skill.