用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/tomevault-io/skills-registry --skill harness-manager命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | harness-manager |
| description | >- Use when this capability is needed. |
Keep the Codex and Claude Code global harnesses consistent. The pain this solves: a rule, an MCP server, or a command lives in one tool's config but not the other — or the two have quietly diverged — so the two assistants behave differently for the same task, and you don't find out until one of them does the wrong thing. This skill finds those gaps, shows them to you, and (after you approve) reconciles them.
In: the global harness of both tools and only the surfaces that are genuinely shared.
| Shared surface | Claude Code | Codex |
|---|---|---|
| Behavioral rules | ~/.claude/CLAUDE.md | ~/.codex/AGENTS.md (+ ~/.codex/rules/default.rules) |
| MCP servers | ~/.claude.json → mcpServers | ~/.codex/config.toml → [mcp_servers.*] |
| Commands ↔ Prompts | ~/.claude/commands/*.md | ~/.codex/prompts/*.md |
| Skills | ~/.claude/skills/ | ~/.codex/skills/ |
Out: project-level AGENTS.md / .claude/ (the user scoped this to global). Tool-specific
machinery that has no meaningful counterpart in the other tool — classify it, never sync it
(see Drift classification below). Cruft removal within one tool — that's harness-diet.
Exact paths, gotchas, and the per-machine inventory live in references/harness-map.md. Read it
first — it records non-obvious facts (e.g. Claude MCP is in ~/.claude.json, not
settings.json; Codex has two rule surfaces). Verify each path still exists before reading;
don't assume.
Four phases. Phases 1–3 are read-only and safe to run anytime. Phase 4 mutates real files and only happens after the user approves specific items.
Resolve every file pair from references/harness-map.md and read both sides for each shared
surface. If a path has moved, find the real one rather than reporting a false "missing".
For each item (a rule/topic, an MCP server, a command/prompt, a skill) decide which bucket it falls in. This classification is the skill — the rest is plumbing.
| Mark | Bucket | Meaning |
|---|---|---|
| ✅ | In sync | Equivalent on both sides. Nothing to do. |
| 🔗 | Delegated | One side intentionally points to the other as the source of truth (pointer pattern). Not drift — preserve it. |
| ⚠️ | Diverged | Both sides define it but they contradict or materially differ. This is where the two assistants actively disagree — the fix is a which-side-is-canonical decision. |
| ➕ | Missing | Present on one side, absent on the other, and the kind of thing the user plainly wants everywhere. Candidate to propagate. Carries a grade — see below. |
| 🛠️ | Broken port | Exists on both sides but the ported copy still carries the other tool's idioms, so it fails at runtime (e.g. a Codex skill with ${CLAUDE_PLUGIN_ROOT}). The fix is token-adaptation, not a canonical decision — so it is not ⚠️. |
| 🔒 | Tool-specific | Only meaningful in one tool. Not drift — never sync. |
Two distinctions the report must keep visible (they were collapsed in early runs and made the counts unreadable):
The only hard judgment is Missing vs Tool-specific, and getting it right is the whole point. A rule absent on one side is not automatically a gap:
apply_patch, rg-first, git status separation → Codex-idiomatic. Leave them.permissions.allow, sandbox trust_level, plugin enablement → tool-specific machinery
with no cross-mapping. Leave them.A fast tie-breaker for ➕ vs 🔒: is the rule backed by machine-level enforcement that hits both
tools the same way? If the trigger is a shared mechanism — ~/.npmrc min-release-age, a git
hook, the OS sandbox, a lockfile — then the other tool runs into the exact same wall, so the rule
is almost certainly universal intent → ➕. Check for that enforcement and cite it as the evidence
(e.g. "~/.npmrc enforces min-release-age=7, so Codex hits it too"); it's a stronger argument
than the prose alone.
Lead with the reasoning ("this is universal intent / this is tool-idiomatic"), not a keyword match. When you're unsure, mark it ⚠️/➕ and let the user decide — under-reporting a real divergence is worse than asking.
Write claudedocs/harness-sync/REPORT-<YYYY-MM-DD>.html (plus a .md mirror for grep/diff).
One section per shared surface; one row per item with: classification mark, current state on
each side, and a recommended reconciliation (a direction, or "leave"). Open it in the browser.
Format rules (so the summary stays actionable):
This is decision content, so follow the house rules: it's an HTML artifact the user clicks
through — not a wall of chat markdown — and the .content/main carries no max-width cap
(the comparison tables need the width). If there are 3+ items that need a real which-side-wins
call, offer to escalate to /decision-dashboard rather than reinventing decision cards here.
Recommend a direction per ⚠️/➕ item but do not pick the winner for the user on diverged rules — surface both and your reasoning; the user owns "which tool is canonical."
Before touching anything, back up every target file. These files are not under git — a bad
edit is unrecoverable. Snapshot to ~/.claude/backups/harness-sync-<YYYY-MM-DD>/ and tell the
user the one-line restore command. (This is the lesson the prior harness-diet run paid for.)
Then apply only the approved items, surgically:
~/.claude.json (large, central) and config.toml with extra care — change only the
target block, then re-parse the whole file (json.load / a TOML load) to prove it's still
valid. These are system-boundary config files; validate after writing.references/sync-recipes.md.Report what changed, per file, with the restore command.
trust_level
into Claude permissions, produces broken config and a worse harness, not a synced one.~/.claude/skills/ —
check the plugin paths before calling something a Codex-only gap, or you'll raise false ➕ (the
real Codex-only set is much smaller than a raw folder diff suggests). On top of presence, do one
grep-level broken-port check: a skill copied to one tool that still carries the other tool's
idioms — a Codex skill containing ${CLAUDE_PLUGIN_ROOT}, a /plugin: namespace, or Edit/
Read/Write tool names — is a Claude skill pasted without adaptation and will fail at runtime;
mark it 🛠️ (broken port — a token-adaptation fix, counted separately from ⚠️ diverged). Full
body sync only when the user names a specific skill.references/harness-map.md — exact paths, per-tool gotchas, and the current per-machine
inventory of what's shared vs tool-specific. Read before Phase 1.references/sync-recipes.md — per-surface comparison method and concrete format-translation
recipes (JSON↔TOML MCP, rule propagation via pointer, command↔prompt). Read before Phase 4.Source: Elian-Studio/elian-claude-plugins — distributed by TomeVault.