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 bootstrap reproduces the whole thing on any machine.

The portability is possible because all six agents converge on two open standards:

  1. Skills — the AgentSkills SKILL.md spec (a folder with a SKILL.md; description is the selector, body loads on demand). Every harness reads it; only the directory differs.
  2. Identity / instructions — Markdown files (AGENTS.md, SOUL.md, USER.md, CLAUDE.md). The wiki's wiki/SOUL.md / wiki/USER.md / AGENTS.md are 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/all as the repo-generated runtime library, ~/.agents/skills as the universal home bridge, and skills/<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.ts when 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/skillsskills/.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 .cursorrulesAGENTS.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 + global CLAUDE.md, Codex skills + global AGENTS.md, universal ~/.agents/skills. See scripts/lib/agent-config-links.ts (the canonical symlink map).
  • Manual / remote: Hermes on the Mac Mini or Agent Machines — sync skills/.runtime/all through ~/.agents/skills, set external_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:

  1. 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 to scripts/lib/agent-config-links.ts only when the path is stable enough for local machines.
  2. 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).
  3. Routing — its instructions file should say "read wiki/meta/agent-operations-hub.md first."
  4. Add a row to the two tables above, update config-sync.md, and re-run npm 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/skills symlink 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, while skills/.runtime/all remains 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.json agents, built-in primary/subagents, and compatible .agents/.claude skill 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/skills bridge and documented the full cross-agent matrix + what's bootstrap-wired vs remote/manual. Superseded by the 2026-06-29 skills/.runtime/all projection 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