Skip to content
中文

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.

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.

AgentHome folderSkills go to
Claude Code~/.claude/~/.claude/skills/
Codex~/.codex/~/.agents/skills/
Gemini CLI~/.gemini/~/.gemini/skills/
Cursor~/.cursor/~/.cursor/skills/
Antigravity~/.gemini/antigravity/~/.gemini/antigravity/skills/
Copilot~/.copilot/~/.copilot/skills/
Devin Desktop~/.codeium/windsurf/~/.codeium/windsurf/skills/
OpenCode~/.config/opencode/~/.config/opencode/skills/
Hermes~/.hermes/~/.hermes/skills/local/
Kiro~/.kiro/~/.kiro/skills/
Oh My Pi~/.omp/~/.omp/agent/skills/
DeepSeek Harness~/.dsh/~/.dsh/skills/
Grok Build~/.grok/~/.grok/skills/
Qoder CN~/.qoder-cn/~/.qoder-cn/skills/
OpenClaw~/.openclaw/~/.openclaw/skills/
PenguinHarness~/.penguin/data/~/.penguin/data/<penguin-project>/agents/<agent>/agent_state/skills/
Pi~/.pi/~/.pi/agent/skills/

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.

Home folder ~/.claude/
Skills ~/.claude/skills/
<project>/.claude/skills/
Shared skills No
MCP servers ~/.claude.json
<project>/.mcp.json
JSON, under mcpServers
Hooks ~/.claude/settings.json
<project>/.claude/settings.json
Claude Code JSON, Claude Code's event names
Rules ~/.claude/CLAUDE.md
~/.claude/rules/
<project>/CLAUDE.md
<project>/.claude/CLAUDE.md
<project>/.claude/rules/
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 mcpServers in ~/.claude.json. claude mcp add saves to its default local scope, under projects in the same file, and HarnessKit doesn't list those servers yet.
Home folder ~/.codex/
Skills ~/.agents/skills/
~/.codex/skills/
<project>/.agents/skills/
Shared skills Reads ~/.agents/skills/
MCP servers ~/.codex/config.toml
<project>/.codex/config.toml
TOML, under mcp_servers
Hooks ~/.codex/hooks.json
<project>/.codex/hooks.json
Claude Code JSON, Claude Code's event names
Rules ~/.codex/AGENTS.md
~/.codex/AGENTS.override.md
~/.codex/TEAM_GUIDE.md
~/.codex/.agents.md
<project>/AGENTS.md
<project>/AGENTS.override.md
<project>/TEAM_GUIDE.md
<project>/.agents.md
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.toml sets project_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]] in config.toml, so a skill turned off there still shows as on.
Home folder ~/.gemini/
Skills ~/.gemini/skills/
~/.agents/skills/
<project>/.gemini/skills/
Shared skills Reads ~/.agents/skills/
MCP servers ~/.gemini/settings.json
<project>/.gemini/settings.json
JSON, under mcpServers
Hooks ~/.gemini/settings.json
Claude Code JSON, its own event names
Rules ~/.gemini/GEMINI.md
<project>/GEMINI.md
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.md files up to two folders deep inside a project.
Home folder ~/.cursor/
Skills ~/.cursor/skills/
~/.agents/skills/
<project>/.cursor/skills/
Shared skills Reads ~/.agents/skills/
MCP servers ~/.cursor/mcp.json
<project>/.cursor/mcp.json
JSON, under mcpServers
Hooks ~/.cursor/hooks.json
<project>/.cursor/hooks.json
Cursor JSON, its own event names
Rules <project>/.cursor/rules/
<project>/.cursorrules
<project>/AGENTS.md
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 .mdc files, subfolders included.
Home folder ~/.gemini/antigravity/
Skills ~/.gemini/antigravity/skills/
<project>/.agents/skills/
<project>/.agent/skills/
Shared skills No
MCP servers ~/.gemini/antigravity/mcp_config.json
JSON, under mcpServers
Hooks Not managed by HarnessKit
Rules ~/.gemini/GEMINI.md
<project>/.agents/rules/
<project>/.agent/rules/
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.txt are scanned for skills too.
  • Antigravity and Gemini CLI both read ~/.gemini/GEMINI.md.
Home folder ~/.copilot/
Skills ~/.copilot/skills/
~/.agents/skills/
<project>/.github/skills/
Shared skills Reads ~/.agents/skills/
MCP servers ~/Library/Application Support/Code/User/mcp.json
<project>/.vscode/mcp.json
JSON, under servers
Hooks ~/.copilot/hooks/hooks.json
Copilot JSON, Claude Code's event names
Rules ~/.copilot/copilot-instructions.md
~/.copilot/instructions/
<project>/.github/copilot-instructions.md
<project>/.github/instructions/
<project>/AGENTS.md
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 .json file in ~/.copilot/hooks/ and adds new hooks to hooks.json.
  • In the instructions/ folders, HarnessKit lists files ending in .instructions.md, subfolders included.
  • HarnessKit doesn't read Copilot CLI's ~/.copilot/mcp-config.json or a .mcp.json at the project root yet.
Home folder ~/.codeium/windsurf/
Skills ~/.codeium/windsurf/skills/
~/.agents/skills/
<project>/.devin/skills/
<project>/.windsurf/skills/
Shared skills Reads ~/.agents/skills/
MCP servers ~/.codeium/windsurf/mcp_config.json
JSON, under mcpServers
Hooks ~/.codeium/windsurf/hooks.json
<project>/.windsurf/hooks.json
Devin Desktop JSON, its own event names
Rules ~/.codeium/windsurf/memories/global_rules.md
~/.codeium/windsurf/global_rules.md
<project>/.devin/rules/
<project>/.windsurfrules
<project>/.windsurf/rules/
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.md is 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.
Home folder ~/.config/opencode/
Skills ~/.config/opencode/skills/
~/.agents/skills/
<project>/.opencode/skills/
Shared skills Reads ~/.agents/skills/
MCP servers ~/.config/opencode/opencode.json
<project>/opencode.json
JSONC, under mcp
Hooks Not managed by HarnessKit
Rules ~/.config/opencode/AGENTS.md
<project>/AGENTS.md
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.json and opencode.jsonc both exist, HarnessKit reads MCP servers from both, and the .jsonc entry wins on a shared name, as in OpenCode. It writes to opencode.jsonc when that file exists and to opencode.json otherwise, globally and in projects.
Home folder ~/.hermes/
Skills ~/.hermes/skills/local/
~/.hermes/skills/
Shared skills No
MCP servers ~/.hermes/config.yaml
YAML, under mcp_servers
Hooks ~/.hermes/config.yaml
Hermes YAML, its own event names
Rules ~/.hermes/SOUL.md
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.md under ~/.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 in local/ when there is none.
  • Folders listed under skills.external_dirs in config.yaml are 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 ~/.kiro/
Skills ~/.kiro/skills/
<project>/.kiro/skills/
Shared skills No
MCP servers ~/.kiro/settings/mcp.json
<project>/.kiro/settings/mcp.json
JSON, under mcpServers
Hooks ~/.kiro/hooks/harnesskit.json
<project>/.kiro/hooks/harnesskit.json
Kiro hook JSON, Claude Code's event names
Rules ~/.kiro/steering/
<project>/.kiro/steering/
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 .json file in ~/.kiro/hooks/ and <project>/.kiro/hooks/, and adds new hooks to harnesskit.json.
Home folder ~/.omp/
Skills ~/.omp/agent/skills/
<project>/.omp/skills/
Shared skills No
MCP servers ~/.omp/agent/mcp.json
<project>/.omp/mcp.json
JSON, under mcpServers
Hooks Not managed by HarnessKit
Rules ~/.omp/agent/AGENTS.md
~/.omp/agent/RULES.md
~/.omp/agent/rules/
<project>/.omp/AGENTS.md
<project>/.omp/RULES.md
<project>/.omp/rules/
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.
Home folder ~/.dsh/
Skills ~/.dsh/skills/
~/.agents/skills/
<project>/.dsh/skills/
Shared skills Reads ~/.agents/skills/
MCP servers ~/.dsh/cordis.patch.yml
YAML
Hooks Not managed by HarnessKit
Rules ~/.dsh/AGENTS.md
<project>/AGENTS.md
<project>/CLAUDE.md
<project>/AGENTS.local.md
<project>/CLAUDE.local.md
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_HOME moves the home folder, and DSH_AGENTS_HOME moves the shared ~/.agents/ folder.
Home folder ~/.grok/
Skills ~/.grok/skills/
~/.agents/skills/
<project>/.grok/skills/
Shared skills Reads ~/.agents/skills/
MCP servers ~/.grok/config.toml
<project>/.grok/config.toml
TOML, under mcp_servers
Hooks ~/.grok/hooks/harnesskit.json
<project>/.grok/hooks/harnesskit.json
Claude Code JSON, Claude Code's event names
Rules ~/.grok/AGENTS.md
~/.grok/rules/
<project>/AGENTS.md
<project>/Agents.md
<project>/AGENT.md
<project>/.grok/rules/
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 .json file in ~/.grok/hooks/ and <project>/.grok/hooks/, and adds new hooks to harnesskit.json.
  • GROK_HOME moves the home folder.
Home folder ~/.qoder-cn/
Skills ~/.qoder-cn/skills/
~/.agents/skills/
<project>/.agents/skills/
Shared skills Reads ~/.agents/skills/
MCP servers ~/.qoder-cn/settings.json
JSON, under mcpServers
Hooks ~/.qoder-cn/settings.json
<project>/.qoder/settings.json
Claude Code JSON, Claude Code's event names
Rules ~/.qoder-cn/AGENTS.md
~/.qoder-cn/rules/
<project>/AGENTS.md
<project>/AGENTS.local.md
<project>/.qoder/rules/
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.disabled list in settings.json, so a skill turned off there still shows as on.
Home folder ~/.openclaw/
Skills ~/.openclaw/skills/
~/.openclaw/workspace/skills/
~/.openclaw/workspace/.agents/skills/
~/.agents/skills/
Shared skills Reads ~/.agents/skills/
MCP servers ~/.openclaw/openclaw.json
JSON5, under mcp.servers
Hooks Not managed by HarnessKit
Rules ~/.openclaw/workspace/AGENTS.md
~/.openclaw/workspace/SOUL.md
~/.openclaw/workspace/IDENTITY.md
Turning off Skills: Renames SKILL.md to SKILL.md.disabled.
MCP servers: Sets enabled: false on the server.
  • Each agent workspace named in openclaw.json has its own skills/, .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_DIR moves the state folder, ~/.openclaw/. OPENCLAW_CONFIG_PATH moves openclaw.json, and when OPENCLAW_STATE_DIR isn't set, the skills/ folder HarnessKit installs into moves with it. OPENCLAW_WORKSPACE_DIR moves the default workspace when openclaw.json doesn't name one. HarnessKit doesn't read OPENCLAW_PROFILE.
Home folder ~/.penguin/data/
Skills ~/.penguin/data/<penguin-project>/agents/<agent>/agent_state/skills/
Shared skills No
MCP servers Not managed by HarnessKit
Hooks Not managed by HarnessKit
Rules ~/.penguin/data/<penguin-project>/agents/<agent>/agent_state/AGENTS.md
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_HOME moves the data folder.
Home folder ~/.pi/
Skills ~/.pi/agent/skills/
~/.agents/skills/
<project>/.pi/skills/
<project>/.agents/skills/
Shared skills Reads ~/.agents/skills/
MCP servers ~/.pi/agent/mcp.json
<project>/.pi/mcp.json
JSON, under mcpServers
Hooks Not managed by HarnessKit
Rules ~/.pi/agent/AGENTS.md
~/.pi/agent/AGENTS.override.md
~/.pi/agent/AGENTS.MD
~/.pi/agent/CLAUDE.md
~/.pi/agent/CLAUDE.MD
<project>/AGENTS.md
<project>/AGENTS.override.md
<project>/AGENTS.MD
<project>/CLAUDE.md
<project>/CLAUDE.MD
Turning off Skills: Renames SKILL.md to SKILL.md.disabled.
MCP servers: Sets enabled: false on the server.
  • PI_CODING_AGENT_DIR moves 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 skills filter in Pi's settings.json, so a skill excluded there still shows as on.
  • crates/hk-core/src/adapter/ has one file per agent, with every path on this page.
  • crates/hk-core/src/adapter/mod.rs defines the adapter trait, the config formats and the defaults each agent’s file overrides.
  • crates/hk-core/src/manager.rs turns skills, MCP servers and hooks off and on, natively, by renaming, or by remove and snapshot.
  • src/lib/types.ts holds AGENT_ORDER, the order agents appear in across the app and this page.
  • website/src/data/agent-reference.ts holds 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.