Supported agents and file locations
HarnessKit supports 17 agents. This page lists where each one keeps its skills, MCP servers, hooks and rules, and what HarnessKit does when you turn one of them off. The tables are built from the site’s data, which mirrors HarnessKit’s adapter code, one file per agent.
All agents
Section titled “All agents”Paths that start with ~/ are in your home folder, which on Windows is C:\Users\<name>\. Paths that start with <project>/ are inside a project. A path that ends in / is a folder. When an agent has more than one skill folder, HarnessKit installs into the first one listed. Hermes puts each skill in a category folder instead, as its section explains. The paths are the defaults. Where an environment variable moves them, the agent’s section says so.
HarnessKit counts an agent as installed when its home folder, listed below, exists. Devin Desktop also counts when ~/.devin/extensions/ exists, and Pi counts only when ~/.pi/agent/ exists. A folder that another tool created can make an agent look installed.
Some skill folders are shared. Several agents read ~/.agents/skills/, and each agent’s section says whether it does. <project>/.agents/skills/ is shared too: HarnessKit lists it under Codex, Antigravity, Qoder CN and Pi, and Gemini CLI, Copilot, Grok Build and DeepSeek Harness also load skills from it. Turning off or deleting a skill in a shared folder affects every agent that reads it.
This page doesn’t cover plugins. Extensions shows which agents have them, and what HarnessKit does to turn one off.
| Agent | Home folder | Skills go to |
|---|---|---|
| Claude Code | ~/ | ~/ |
| Codex | ~/ | ~/ |
| Gemini CLI | ~/ | ~/ |
| Cursor | ~/ | ~/ |
| Antigravity | ~/ | ~/ |
| Copilot | ~/ | ~/ |
| Devin Desktop | ~/ | ~/ |
| OpenCode | ~/ | ~/ |
| Hermes | ~/ | ~/ |
| Kiro | ~/ | ~/ |
| Oh My Pi | ~/ | ~/ |
| DeepSeek Harness | ~/ | ~/ |
| Grok Build | ~/ | ~/ |
| Qoder CN | ~/ | ~/ |
| OpenClaw | ~/ | ~/ |
| PenguinHarness | ~/ | ~/ |
| Pi | ~/ | ~/ |
Each agent’s section below lists its MCP, hook and rules files and their formats. Hook formats are named after the agent whose file layout they use, so “Claude Code JSON” also appears for other agents.
For every agent except Hermes, turning a skill off renames its SKILL.md to SKILL.md.disabled, or a single-file skill’s <name>.md to <name>.md.disabled. For Hermes, HarnessKit adds the skill’s name to skills.disabled in ~/.hermes/config.yaml. For MCP servers and hooks, HarnessKit uses the agent’s own off switch when it has one. Otherwise it removes the entry from the agent’s file and keeps a snapshot, an exact copy, in its database.
Claude Code
Section titled “Claude Code”| Home folder | ~/ |
|---|---|
| Skills | ~/<project>/ |
| Shared skills | No |
| MCP servers | ~/<project>/JSON, under mcpServers |
| Hooks | ~/<project>/Claude Code JSON, Claude Code's event names |
| Rules | ~/~/<project>/<project>/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Removes the entry and keeps a snapshot in HarnessKit's database. Hooks: Removes the entry and keeps a snapshot in HarnessKit's database. |
- HarnessKit reads only the top-level
mcpServersin~/.claude.json.claude mcp addsaves to its default local scope, underprojectsin the same file, and HarnessKit doesn't list those servers yet.
| Home folder | ~/ |
|---|---|
| Skills | ~/~/<project>/ |
| Shared skills | Reads ~/ |
| MCP servers | ~/<project>/TOML, under mcp_servers |
| Hooks | ~/<project>/Claude Code JSON, Claude Code's event names |
| Rules | ~/~/~/~/<project>/<project>/<project>/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Removes the entry and keeps a snapshot in HarnessKit's database. Hooks: Removes the entry and keeps a snapshot in HarnessKit's database. |
- Codex is the one agent whose global skills go into the shared
~/.agents/skills/folder. - If
config.tomlsetsproject_doc_fallback_filenames, HarnessKit looks for those file names in place of the four rules names above. - HarnessKit doesn't read Codex's own skill switch,
[[skills.config]]inconfig.toml, so a skill turned off there still shows as on.
Gemini CLI
Section titled “Gemini CLI”| Home folder | ~/ |
|---|---|
| Skills | ~/~/<project>/ |
| Shared skills | Reads ~/ |
| MCP servers | ~/<project>/JSON, under mcpServers |
| Hooks | ~/Claude Code JSON, its own event names |
| Rules | ~/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Removes the entry and keeps a snapshot in HarnessKit's database. Hooks: Removes the entry and keeps a snapshot in HarnessKit's database. |
- HarnessKit also lists
GEMINI.mdfiles up to two folders deep inside a project.
Cursor
Section titled “Cursor”| Home folder | ~/ |
|---|---|
| Skills | ~/~/<project>/ |
| Shared skills | Reads ~/ |
| MCP servers | ~/<project>/JSON, under mcpServers |
| Hooks | ~/<project>/Cursor JSON, its own event names |
| Rules | <project>/<project>/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Removes the entry and keeps a snapshot in HarnessKit's database. Hooks: Removes the entry and keeps a snapshot in HarnessKit's database. |
- Cursor has rules only at project level in HarnessKit.
- In
.cursor/rules/, HarnessKit lists.mdcfiles, subfolders included.
Antigravity
Section titled “Antigravity”| Home folder | ~/ |
|---|---|
| Skills | ~/<project>/<project>/ |
| Shared skills | No |
| MCP servers | ~/JSON, under mcpServers |
| Hooks | Not managed by HarnessKit |
| Rules | ~/<project>/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Removes the entry and keeps a snapshot in HarnessKit's database. |
- Folders listed in
~/.gemini/antigravity/skills.txtare scanned for skills too. - Antigravity and Gemini CLI both read
~/.gemini/GEMINI.md.
Copilot
Section titled “Copilot”| Home folder | ~/ |
|---|---|
| Skills | ~/~/<project>/ |
| Shared skills | Reads ~/ |
| MCP servers | ~/<project>/JSON, under servers |
| Hooks | ~/Copilot JSON, Claude Code's event names |
| Rules | ~/~/<project>/<project>/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Removes the entry and keeps a snapshot in HarnessKit's database. Hooks: Removes the entry and keeps a snapshot in HarnessKit's database. |
- The MCP file is VS Code's user
mcp.json. The path above is the macOS one. On Linux it is~/.config/Code/User/mcp.json, and on Windows~/AppData/Roaming/Code/User/mcp.json. - HarnessKit reads every
.jsonfile in~/.copilot/hooks/and adds new hooks tohooks.json. - In the
instructions/folders, HarnessKit lists files ending in.instructions.md, subfolders included. - HarnessKit doesn't read Copilot CLI's
~/.copilot/mcp-config.jsonor a.mcp.jsonat the project root yet.
Devin Desktop
Section titled “Devin Desktop”| Home folder | ~/ |
|---|---|
| Skills | ~/~/<project>/<project>/ |
| Shared skills | Reads ~/ |
| MCP servers | ~/JSON, under mcpServers |
| Hooks | ~/<project>/Devin Desktop JSON, its own event names |
| Rules | ~/~/<project>/<project>/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Removes the entry and keeps a snapshot in HarnessKit's database. Hooks: Removes the entry and keeps a snapshot in HarnessKit's database. |
- Devin Desktop was called Windsurf, so its global folder and some project files still carry that name.
~/.codeium/windsurf/global_rules.mdis an older location that HarnessKit still lists.- HarnessKit manages Devin Desktop's Cascade agent. Devin CLI and Devin Local keep their settings in
~/.config/devin/, which HarnessKit doesn't support yet.
OpenCode
Section titled “OpenCode”| Home folder | ~/ |
|---|---|
| Skills | ~/~/<project>/ |
| Shared skills | Reads ~/ |
| MCP servers | ~/<project>/JSONC, under mcp |
| Hooks | Not managed by HarnessKit |
| Rules | ~/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Removes the entry and keeps a snapshot in HarnessKit's database. |
- When
opencode.jsonandopencode.jsoncboth exist, HarnessKit reads MCP servers from both, and the.jsoncentry wins on a shared name, as in OpenCode. It writes toopencode.jsoncwhen that file exists and toopencode.jsonotherwise, globally and in projects.
Hermes
Section titled “Hermes”| Home folder | ~/ |
|---|---|
| Skills | ~/~/ |
| Shared skills | No |
| MCP servers | ~/YAML, under mcp_servers |
| Hooks | ~/Hermes YAML, its own event names |
| Rules | ~/ |
| Turning off | Skills: Adds the skill's name to skills.disabled in ~/.hermes/config.yaml.MCP servers: Sets enabled: false on the server.Hooks: Removes the entry and keeps a snapshot in HarnessKit's database. |
- HarnessKit lists every
SKILL.mdunder~/.hermes/skills/, in subfolders too. Category folders there only organize skills. When you install one skill, HarnessKit asks which category to put it in. A bulk install puts every skill in the first category in alphabetical order, or inlocal/when there is none. - Folders listed under
skills.external_dirsinconfig.yamlare scanned for skills too. - Hermes has no project scope in HarnessKit. Hermes itself also loads skills from
<project>/.hermes/skills/and<project>/.agents/skills/in projects you trust, and HarnessKit doesn't list those.
| Home folder | ~/ |
|---|---|
| Skills | ~/<project>/ |
| Shared skills | No |
| MCP servers | ~/<project>/JSON, under mcpServers |
| Hooks | ~/<project>/Kiro hook JSON, Claude Code's event names |
| Rules | ~/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Sets disabled: true on the server.Hooks: Sets enabled: false on the hook. |
- HarnessKit reads every
.jsonfile in~/.kiro/hooks/and<project>/.kiro/hooks/, and adds new hooks toharnesskit.json.
Oh My Pi
Section titled “Oh My Pi”| Home folder | ~/ |
|---|---|
| Skills | ~/<project>/ |
| Shared skills | No |
| MCP servers | ~/<project>/JSON, under mcpServers |
| Hooks | Not managed by HarnessKit |
| Rules | ~/~/~/<project>/<project>/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Sets enabled: false on the server, and takes its name off enabledServers in ~/.omp/agent/mcp.json. |
- HarnessKit reads the default profile only, not the ones under
~/.omp/profiles/. - Oh My Pi itself also reads
~/.agents/skills/and~/.claude/skills/. HarnessKit does not list those folders under Oh My Pi.
DeepSeek Harness
Section titled “DeepSeek Harness”| Home folder | ~/ |
|---|---|
| Skills | ~/~/<project>/ |
| Shared skills | Reads ~/ |
| MCP servers | ~/YAML |
| Hooks | Not managed by HarnessKit |
| Rules | ~/<project>/<project>/<project>/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Writes disabled: true for the server in a block that HarnessKit manages at the end of cordis.patch.yml. |
- Each MCP server is a plugin row named
@deepseek-ai/dsh-mcp-client. HarnessKit reads the home-level patch file only, not the per-profile ones. DSH_HOMEmoves the home folder, andDSH_AGENTS_HOMEmoves the shared~/.agents/folder.
Grok Build
Section titled “Grok Build”| Home folder | ~/ |
|---|---|
| Skills | ~/~/<project>/ |
| Shared skills | Reads ~/ |
| MCP servers | ~/<project>/TOML, under mcp_servers |
| Hooks | ~/<project>/Claude Code JSON, Claude Code's event names |
| Rules | ~/~/<project>/<project>/<project>/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Adds the server's name to disabled_mcp_servers in ~/.grok/config.toml. A server defined in that file also gets enabled = false.Hooks: Adds the hook to ~/.grok/disabled-hooks. |
- Skills in nested folders count too, not only the top level.
- HarnessKit reads every
.jsonfile in~/.grok/hooks/and<project>/.grok/hooks/, and adds new hooks toharnesskit.json. GROK_HOMEmoves the home folder.
Qoder CN
Section titled “Qoder CN”| Home folder | ~/ |
|---|---|
| Skills | ~/~/<project>/ |
| Shared skills | Reads ~/ |
| MCP servers | ~/JSON, under mcpServers |
| Hooks | ~/<project>/Claude Code JSON, Claude Code's event names |
| Rules | ~/~/<project>/<project>/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Removes the entry and keeps a snapshot in HarnessKit's database. Hooks: Removes the entry and keeps a snapshot in HarnessKit's database. |
- HarnessKit installs project skills into the shared
<project>/.agents/skills/folder, which it also lists under Codex, Antigravity and Pi. Skills you put in<project>/.qoder/skills/yourself aren't listed. - HarnessKit doesn't manage Qoder CN's project-level MCP servers.
- HarnessKit doesn't read
QODERCN_CONFIG_DIR, so it looks for Qoder CN in~/.qoder-cn/only. - HarnessKit doesn't read Qoder CN's own
skills.disabledlist insettings.json, so a skill turned off there still shows as on.
OpenClaw
Section titled “OpenClaw”| Home folder | ~/ |
|---|---|
| Skills | ~/~/~/~/ |
| Shared skills | Reads ~/ |
| MCP servers | ~/JSON5, under mcp.servers |
| Hooks | Not managed by HarnessKit |
| Rules | ~/~/~/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Sets enabled: false on the server. |
- Each agent workspace named in
openclaw.jsonhas its ownskills/,.agents/skills/and rules files. The paths above are for the default workspace. - HarnessKit reads
~/.agents/skills/for OpenClaw only while OpenClaw uses its default state folder,~/.openclaw/. - OpenClaw has no project scope in HarnessKit.
OPENCLAW_STATE_DIRmoves the state folder,~/.openclaw/.OPENCLAW_CONFIG_PATHmovesopenclaw.json, and whenOPENCLAW_STATE_DIRisn't set, theskills/folder HarnessKit installs into moves with it.OPENCLAW_WORKSPACE_DIRmoves the default workspace whenopenclaw.jsondoesn't name one. HarnessKit doesn't readOPENCLAW_PROFILE.
PenguinHarness
Section titled “PenguinHarness”| Home folder | ~/ |
|---|---|
| Skills | ~/ |
| Shared skills | No |
| MCP servers | Not managed by HarnessKit |
| Hooks | Not managed by HarnessKit |
| Rules | ~/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled. |
- Every PenguinHarness agent has its own skills folder and
AGENTS.md. HarnessKit reads all of them. - HarnessKit installs a skill into one PenguinHarness agent's folder: the first in alphabetical order, by project and then by agent. With no PenguinHarness agent yet, there is nowhere to install.
- HarnessKit does not read PenguinHarness MCP servers or hooks yet.
- PenguinHarness has no project scope in HarnessKit.
PENGUIN_HOMEmoves the data folder.
| Home folder | ~/ |
|---|---|
| Skills | ~/~/<project>/<project>/ |
| Shared skills | Reads ~/ |
| MCP servers | ~/<project>/JSON, under mcpServers |
| Hooks | Not managed by HarnessKit |
| Rules | ~/~/~/~/~/<project>/<project>/<project>/<project>/<project>/ |
| Turning off | Skills: Renames SKILL.md to SKILL.md.disabled.MCP servers: Sets enabled: false on the server. |
PI_CODING_AGENT_DIRmoves the agent folder,~/.pi/agent/.- Pi loads skills from nested folders. HarnessKit lists only the skills directly inside each skills folder.
- HarnessKit doesn't read the
skillsfilter in Pi'ssettings.json, so a skill excluded there still shows as on.
Under the hood
Section titled “Under the hood”crates/hk-core/src/adapter/has one file per agent, with every path on this page.crates/hk-core/src/adapter/mod.rsdefines the adapter trait, the config formats and the defaults each agent’s file overrides.crates/hk-core/src/manager.rsturns skills, MCP servers and hooks off and on, natively, by renaming, or by remove and snapshot.src/lib/types.tsholdsAGENT_ORDER, the order agents appear in across the app and this page.website/src/data/agent-reference.tsholds this page’s data. Its test compares the data with the adapters’ Rust tests: which agents have hooks, a project MCP file and a project hook file, each agent’s first project skill folder, and which agents have their own MCP or skill off switch. It also checks that every environment variable an adapter reads is named in that agent’s notes.