Cross-Agent Harness Portability
kevin-wiki is the single opinionated harness/preset for every agent Kevin runs — Cursor, Claude Code, Codex, OpenClaw, Hermes, and OpenCode — not just Cursor. One canonical source of skills + identity + rules, fed to each agent through its own native config surface.
git clone + npm run bootstrapreproduces the whole thing on any machine.
The portability is possible because all six agents converge on two open standards:
- Skills — the AgentSkills
SKILL.mdspec (a folder with aSKILL.md; description is the selector, body loads on demand). Every harness reads it; only the directory differs. - Identity / instructions — Markdown files (
AGENTS.md,SOUL.md,USER.md,CLAUDE.md). The wiki'swiki/SOUL.md/wiki/USER.md/AGENTS.mdare the canonical originals each agent's slot maps onto.
Agent implications
For future agents, portability means:
- Read the wiki identity files even if your native harness loads a different filename.
- Treat
skills/.runtime/allas the repo-generated runtime library,~/.agents/skillsas the universal home bridge, andskills/<category>/as the editable source taxonomy. - Add pointers or symlinks for new runtimes instead of copying full instruction files.
- Update Agent Config Sync and
scripts/lib/agent-config-links.tswhen a local harness can be wired by bootstrap. - Document remote/manual runtimes here when bootstrap cannot own them.
The failure mode is per-agent drift: Cursor learns one rule, Claude another, Codex a third. This page exists to prevent that.
Cross-harness work routing
Portability is not only about shared files; it also lets one harness call another without losing the operating rules. The current active pattern is Cross-Harness Model Routing: Claude/Fable-class models can orchestrate and judge, while Codex handles well-specified implementation, computer use, and UI/UX verification. The handoff must be a self-contained prompt plus receipts, not a vibe relay between chats. Source: X/@theo, 2026-07-06; Source: User-provided screenshot, 2026-07-06
This is why the shared instruction and skill projection matters. A Codex run launched from a Claude workflow should inherit the same repo rules, verification bar, and output discipline as a native Codex session. Otherwise the bridge becomes another drift surface.
Skills — one library, every agent
Canonical source library: skills/{engineering,productivity,personal,misc}/ plus
draft/retired categories. Bootstrap generates skills/.runtime/all as the flat AgentSkills
index, then exposes it at ~/.agents/skills, the most common cross-harness skill location.
When a harness has a bespoke skill directory, symlink that directory to ~/.agents/skills unless
the harness has a managed-install directory that must remain separate. Runtime-specific and upstream history is provenance metadata
(origin: claude, origin: dedalus, origin: cursor-plugin, origin: codex-plugin, origin: skills-sh), not a separate source namespace:
| Agent | Skill dir it reads | Wired by bootstrap | Notes |
|---|---|---|---|
| Cursor | ~/.cursor/skills |
✓ → skills/.runtime/all |
|
| Claude Code | ~/.claude/skills |
✓ → skills/.runtime/all |
Claude-imported skills live in categories with origin: claude |
| Codex | ~/.codex/skills |
✓ → skills/.runtime/all |
unified runtime index |
| OpenCode | project .opencode/skills, global ~/.config/opencode/skills, compatible .claude/skills, compatible .agents/skills |
partial via ~/.agents/skills |
keep project .opencode/skills and opencode.json per repo; shared skills flow through .agents/skills |
| OpenClaw | ~/.agents/skills (precedence 3, all agents) · ~/.openclaw/skills (managed installs) |
✓ ~/.agents/skills → skills/.runtime/all |
leave ~/.openclaw/skills as OpenClaw's managed-install dir |
| Hermes | ~/.hermes/skills/ (runtime-owned) + external_dirs in ~/.hermes/config.yaml |
manual / Mac Mini | use Hermes Mac Mini Agent OS for the local operator stack; prefer external_dirs: [~/.agents/skills]; promote reusable runtime skills into skills/<category>/ before regenerating |
| Any AgentSkills tool | ~/.agents/skills |
✓ | the universal runtime location — new agents inherit the library for free |
~/.agents/skills is the lingua franca: wiring it once (→ skills/.runtime/all) covers OpenClaw
and any future AgentSkills-compliant runtime. Most harnesses can read this directory directly. For the
minority with a bespoke location, point or symlink that location at ~/.agents/skills; do not copy the
skill tree and do not make bespoke directories new sources of truth. The generated index points back to
canonical category sources, so edits through runtime symlinks still land in the source taxonomy.
Matt Pocock's June 2026 skill-layout note is an external validation of this shape: most harnesses can
share .agents/skills, while bespoke harnesses should be pointed or symlinked into that same corpus.
The invariant is not the exact folder name. The invariant is one source library and many runtime
projections. Source: X/@mattpocockuk, 2026-06-28
Identity / instructions — one brain, mapped per agent
The wiki originals: wiki/SOUL.md (who the agent is), wiki/USER.md (who Kevin is),
AGENTS.md (schema/operations), wiki/meta/agent-operations-hub.md (routing). Each agent's
native slot points at them:
| Concept | Wiki canonical | Cursor | Claude Code | Codex | OpenClaw | Hermes |
|---|---|---|---|---|---|---|
| Persona | wiki/SOUL.md |
rules | CLAUDE.md |
AGENTS.md |
workspace SOUL.md |
~/.hermes/SOUL.md |
| User profile | wiki/USER.md |
rules | CLAUDE.md |
AGENTS.md |
workspace USER.md |
~/.hermes/memories/USER.md |
| Instructions / schema | AGENTS.md |
.cursorrules→AGENTS.md |
~/.claude/CLAUDE.md (global) |
~/.codex/AGENTS.md (global) |
workspace AGENTS.md |
~/.hermes/memories/MEMORY.md |
| Routing map | wiki/meta/agent-operations-hub.md |
always-on rule | via CLAUDE.md pointer | via AGENTS.md pointer | via AGENTS.md | via MEMORY.md |
| Rules | config/cursor/rules/*.mdc |
native | path/glob rules | rules | bootstrap files | config |
Bootstrap currently wires the global preset files for Claude (~/.claude/CLAUDE.md) and Codex
(~/.codex/AGENTS.md) → config/{claude,codex}/, both pointing at the brain (identity → hub →
AGENTS.md). OpenClaw workspace bootstrap files and Hermes SOUL.md/USER.md are per-deployment
(workspace/remote) — point them at the same wiki originals when standing up that runtime.
Codex's global preset additionally spells out the local runtime contract: ~/.codex/AGENTS.md
points to config/codex/AGENTS.md, ~/.codex/skills points to skills/.runtime/all, and Codex should
load the wiki spine plus routing surfaces before serious work. This is the local harness equivalent
of Cursor's always-on rules. Source: config/codex/AGENTS.md, 2026-06-27
OpenCode note: /init creates a root AGENTS.md; custom agents live in opencode.json,
~/.config/opencode/agents/, or project .opencode/agents/; skills use SKILL.md in
.opencode, .claude, or .agents skill directories. Keep those paths in the future
agent-harnesses capsule rather than scattering them across unrelated tool pages.
What bootstrap wires vs what's manual
- Wired (local,
npm run bootstrap): Cursor (rules/skills/hooks/mcp/cli), Claude skills + globalCLAUDE.md, Codex skills + globalAGENTS.md, universal~/.agents/skills. Seescripts/lib/agent-config-links.ts(the canonical symlink map). - Manual / remote: Hermes on the Mac Mini or Agent Machines — sync
skills/.runtime/allthrough~/.agents/skills, setexternal_dirs/SOUL.md/USER.md, and use Hermes Mac Mini Agent OS for memory/browser/gateway/cron decisions. OpenClaw workspace bootstrap files (~/.openclaw/workspace/{AGENTS,SOUL,USER}.md) when you run the gateway. OpenCode project config (opencode.json,.opencode/agents,.opencode/skills) remains repo-owned; the shared bridge is.agents/skills.
Anticipating a new agent
When Kevin adopts a new harness:
- Skills — if it's AgentSkills-compliant, point its skill dir (or
external_dirs) at~/.agents/skills(already ->skills/.runtime/all). If it has its own bespoke location, symlink that location to~/.agents/skills; add a bootstrap row toscripts/lib/agent-config-links.tsonly when the path is stable enough for local machines. - Identity — map its persona/user/instructions slots to
wiki/SOUL.md/wiki/USER.md/AGENTS.md(symlink the global file, or point its config at them). - Routing — its instructions file should say "read
wiki/meta/agent-operations-hub.mdfirst." - Add a row to the two tables above, update
config-sync.md, and re-runnpm run bootstrap.
The invariant: never duplicate content per agent. One canonical source in the wiki; each agent gets a pointer or a symlink. That's what keeps six harnesses in sync from one repo.
Runtime capsule routes
When the task is about one concrete runtime, load the runtime capsule from Agent Harness Capsules instead of only this portability matrix:
| Runtime | Capsule |
|---|---|
| Claude Code | claude-code-agent-stack |
| Hermes Agent | hermes-agent-stack |
| OpenClaw | openclaw-agent-stack |
| Codex | codex-agent-stack |
This page owns the common bridge: skill directories, identity files, bootstrap, and config drift. The capsules own the runtime-specific facts: docs, bookmarks, concepts, tool pages, feature versions, security notes, and "when to use this harness" guidance.
Timeline
- 2026-07-06 | Added cross-harness work routing as a portability use case: Claude/Fable-class models can orchestrate, while Codex executes or verifies with self-contained prompts and receipts. Source: X/@theo and User-provided screenshot, 2026-07-06
- 2026-07-04 | Source-reviewed Matt Pocock's
.agents/skillssymlink note and folded it into the portability rule: bespoke harness skill directories should point into the shared corpus instead of becoming separate sources of truth. Source: X/@mattpocockuk, 2026-06-28 - 2026-06-29 | Added runtime capsule routing for Claude Code, Hermes, OpenClaw, and Codex so this portability page remains the common bridge while generated capsules expose runtime-specific knowledge. Source: User request, 2026-06-29
- 2026-06-28 | Runtime skill portability now uses compact parent routers with folded child references, so Cursor, Claude Code, Codex, OpenClaw, and AgentSkills inherit one uncluttered skill list without losing upstream/plugin depth. Source: User request, 2026-06-28;
scripts/compact-skill-families.ts - 2026-06-29 | Clarified the skill bridge invariant: most harnesses use
.agents/skills; bespoke harness skill directories should symlink or point to~/.agents/skills, whileskills/.runtime/allremains the generated repo projection behind that home bridge. Source: User correction, 2026-06-29 - 2026-06-27 | Added the explicit Codex sync contract to the global preset: wiki spine loading, skill library symlink ownership, routing via capability map / SKILL-RESOLVER / active stack, harness projections only as compact mirrors, and verification commands after config or wiki edits. Source: User request, 2026-06-27;
config/codex/AGENTS.md - 2026-06-18 | Added explicit agent implications and the per-agent drift failure mode so the page functions as an operating rule, not only a compatibility matrix. Source: User request, 2026-06-18
- 2026-06-26 | Added OpenCode as a sixth harness and linked the future Agent Harnesses capsule model: project
AGENTS.md,opencode.jsonagents, built-in primary/subagents, and compatible.agents/.claudeskill discovery. Source: OpenCode docs, 2026-06-26; User request, 2026-06-26 - 2026-06-13 | Page created in Phase 2 of the harness build. Researched current skill + identity-file locations for Cursor, Claude Code, Codex, OpenClaw (docs.openclaw.ai), and Hermes (hermes-agent.nousresearch.com); wired the then-current
~/.agents/skillsbridge and documented the full cross-agent matrix + what's bootstrap-wired vs remote/manual. Superseded by the 2026-06-29skills/.runtime/allprojection model. Source: per-harness docs + config-sync, 2026-06-13 - 2026-06-17 | Referenced in Agent-Ping — one HITL CLI that works from every harness here (Cursor, Claude Code, Codex, OpenClaw, Hermes), same four verbs regardless of runtime. Source: User, 2026-06-17