Skip to main content
skill CX Codex

skill-governance — Claude Code skill: audit your Skill surface

Works out how many Skills the model actually sees, why the catalog is truncated, and which duplicates should go. Handy once your Skill list gets long.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add daymade/claude-code-skills --skill skill-governance -a claude-code
Open on GitHub

What skill-governance does

The skill keeps five layers apart: canonical source, installed inventory, discovery policy, the catalog in a fresh model prompt, and the hidden scripts and references a router still needs. Installed does not mean active, active does not prove visible. Counts and byte totals are diagnostic values only, not the goal.

Two read-only Python scripts do the work. scripts/audit_codex_skill_surface.py compares codex debug prompt-input against the full metadata list from Claude's app-server skills/list, and scripts/audit_project_skill_roots.py <project-root> pairs the .claude/skills and .agents/skills roots inside a project. Exit 0 is clean, 1 is drift to classify, 2 means the evidence is invalid. Exit 1 never turns into automatic pruning.

Nothing gets edited without your say-so. Config changes, link sync, installs, uninstalls, cache repair and marketplace source edits all need authorization, so read what you are approving first. The skill also warns against copying cache folders as a substitute for installing, against blind marketplace remove-then-add, and against calling an old Skill redundant before you have read its scripts and assets.

What it helps with

  • find out how many Skills actually reach the model prompt
  • explain why the Skill catalog is truncated
  • keep routers visible while heavy bundles stay cold
  • spot duplicates and Skills superseded by a suite
  • reconcile .claude/skills against .agents/skills in a project

Example prompts for the agent

  • run audit_codex_skill_surface.py and tell me what drift shows up in the Skill catalog
  • check whether gstack-router is visible in a fresh Claude prompt
  • compare the Skill roots in this project and show me the mismatches

How to install skill-governance

1Skills CLI (Vercel)

npx skills add daymade/claude-code-skills --skill skill-governance -a claude-code

2Manually: put the files in place

~/.claude/skills/skill-governance/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/skill-governance/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about skill-governance

How do I install skill-governance in Claude?

Run npx skills add daymade/claude-code-skills --skill skill-governance -a claude-code. The skill file then lives at ~/.claude/skills/skill-governance/SKILL.md.

What does skill-governance do?

It reconciles the Skill surface: source repos, installed bundles and what a fresh model prompt actually shows. You get drift, duplicate identities and truncation called out.

Does it change anything on its own?

No. Drift checks are read-only, and config edits, installs, uninstalls or cache repair happen only after you authorize them.

Source text

SKILL.md · MIT
---
name: skill-governance
description: >-
  Governs the Claude Code/Codex Skill surface: reconciles source/install/catalog-visibility drift
  without losing cold capability. Use when users ask how many Skills load, why the catalog is
  truncated, want routers visible while other bundles stay cold, or need duplicate/superseded-Skill
  or old-cache cleanup. Not for building a marketplace manifest (use marketplace-dev) or repo audits
  (use marketplace-health-check).
---

# Skill Governance

Govern the Skill surface the user actually experiences: the intended hot or
router entries are fully visible in a fresh host, cold capabilities remain
reachable, editable behavior has one canonical owner, and every retirement is
recoverable. A smaller directory count is not the outcome.

## Required outcome contract

Before acting, state in one sentence:

- which entries or routers must be model-visible;
- which capabilities must remain available cold;
- which layer the user authorized changing;
- what fresh-host evidence will prove success.

If the request is only “how many / what is loaded / why”, stay read-only.

## System model

Never collapse these layers into one:

1. **Canonical source** — where owned behavior may be edited.
2. **Installed inventory** — bundles and versions that exist on disk.
3. **Discovery policy** — what Claude or Codex may discover.
4. **Model-visible catalog** — metadata in a fresh model prompt.
5. **Runtime resources** — hidden scripts, references, and assets a router still
   needs.

Installed does not mean active; active does not prove visible; visible does not
prove usable. Counts and byte totals are diagnostic values only.

## Authority order

Use current runtime truth, not remembered conventions:

- owned source repos and their manifests for editable Skill behavior;
- `claude plugin ... --json` for current Claude marketplace/install state;
- the explicit source-sync activation manifest for managed Daymade links;
- `~/.agents/skills` as Codex's current user Skill root;
- exact-path `~/.codex/config.toml` policy for Codex discovery disables;
- `codex debug prompt-input` for the actual fresh Codex catalog;
- the installed vendor bundle for third-party cold resources.

`~/.codex/skills` is legacy/system compatibility unless a current local contract
explicitly assigns it another role. Never move third-party inventory into an
owned-source activation manifest just to make ownership look complete.

## Route the request

Read the named section of
[`references/skill-surface-governance.md`](references/skill-surface-governance.md)
completely before using that workflow.

| Request | Read and use |
|---|---|
| Explicit delivery contract; verify source owner, registration and installed route | §16, then requested fresh-host gate in §14 |
| What Codex really loads; count, truncation, duplicate identity, missing router | §3–4, then §11 |
| Reconcile owned source links or `~/.agents/skills` activation | §2–5, then §11 |
| Keep gstack/Lark/IMA/UiPath or another bundle cold behind a router | §2–4, §6, then §11 |
| Claude marketplace/plugin source or installed-state drift | §2–3, §7, then §11 |
| Old cache versions | §2 and §7 “Exceptional manual cache repair” |
| Standalone plugins superseded by a suite | §7–8, then §11 |
| Project `.claude/skills` vs `.agents/skills` drift | §9, then §11 |
| Retire loose or duplicate Skill directories | §2–3, §10–11 |
| Decide which Skills stay model-visible vs user-invocable-only | §15, then §11 |

## Fast read-only Codex audit

For a newly registered Skill whose local use is part of the delivery, run the
target-name checks in `references/skill-surface-governance.md` §14 before calling
it ready. This covers Claude's fresh command catalog and Codex's fresh prompt.
The name must come from the requested delivery, not only the active whitelist.

Run from this Skill bundle:

```bash
python3 scripts/audit_codex_skill_surface.py --json
```

Only add policy the user or activation SSOT actually declared:

```bash
python3 scripts/audit_codex_skill_surface.py \
  --require-visible gstack-router \
  --json
```

The script compares `codex debug prompt-input` with the complete metadata parsed
by Codex's own app-server `skills/list`, plus exact activation/discovery policy.
Exit `0` is clean, `1` is pressure or drift to classify, and `2` means
the evidence is invalid. It is read-only. Do not convert exit `1` into automatic
pruning.

For a project's dual roots:

```bash
python3 scripts/audit_project_skill_roots.py <project-root> --json
```

That audit pairs direct child bundles by frontmatter `name`, recognizes only its
explicit fail-visible compatibility-router contract, and distinguishes shared
targets, identical copies, real drift, and invalid state.

## Non-negotiable safety boundaries

- Drift checks are read-only. Config edits, link sync, installs, uninstalls,
  moves, cache repair, and marketplace source changes require authorization.
- Preserve Claude plugin scope. Verify replacements before retiring old
  identities.
- Never use direct cache copying as installation or source sync.
- Do not enforce “one cache version”. Current Claude Code owns orphan-version
  grace for running sessions; manual cache removal is exceptional repair only.
- Do not use blind marketplace remove-then-add. Removing the last scoped
  marketplace can uninstall its plugins.
- Read every candidate's unique instructions, scripts, references, and assets
  before calling it redundant. Old or short does not mean valueless.
- Decide model-visible vs user-invocable-only per Skill from usage evidence
  (§15), never from its description or install location alone.
- Keep cold third-party resources installed; hide only their exact discovery
  paths, then prove the router still resolves one representative capability.
- Retire by recoverable move plus file/executable/hash manifest, never by
  `rm -rf`.
- Existing sessions retain startup metadata. Restart before treating the
  interactive catalog as verification.

## Source and activation ownership

For Daymade source-backed Codex activation, route to the current
`claude-switch-models-setup` dry-run/apply workflow. Its explicit
`codex-active-skills.json` owns only links created from declared source
marketplaces. Do not reimplement its collision, symlink, or pruning logic here.

For Claude plugins, inspect current marketplace and install JSON, update or
reinstall through the official CLI at the original scope, and independently
read back the result. Treat cache folders as derived runtime artifacts.

For suite topology changes, use `marketplace-dev` to edit the source manifest;
use this Skill only to reconcile already-landed migrations on the current host.

## Read-only delivery contract audit

For an explicit delivery review, read §16 and run `scripts/audit_skill_delivery.py <skill-path> --delivery-contract <private-contract.json> --json`. It delegates source ownership to `skill-creator`; runtime visibility and original-requirement fidelity remain separate evidence. A source error blocks delivery even if the Skill can run.

## Definition of done

All applicable claims must be proven independently:

- canonical source and current owner are named;
- selected direct entries/routers appear in a fresh prompt under the requested
  discovery policy; report description truncation separately, including when
  the installation-only target gate passes;
- entries intended cold are absent from that catalog;
- one representative cold capability still resolves and works;
- source-backed links or Claude installs read back with the intended identity,
  source/version, and scope;
- any retired bundle and its recovery manifest still exist;
- unresolved ownership, host-version behavior, or deliberately retained
  exceptions are explicit.

Use the reference's task-behavior check only when actual task execution is part
of delivery; catalog visibility alone does not prove that result.

Stop there. Do not create a new hook, manifest, report layer, or cleanup project
unless the requested outcome still lacks evidence.

© daymade · MIT · daymade/claude-code-skills

Similar skills

All skills for Agent setup: memory, context, orchestration →

From the same set64

notify-wecom Sends a single one-off message to a WeCom (Enterprise WeChat) group bot. Handy when the team needs a quick ping without templates or setup. CX Codex +1 341installs setup-notifications-via-wecom Sets up a WeCom group bot webhook and sends technical status messages through it. Useful when a backup, sync or cron job should report on its own. CX Codex +1 341installs local-codex Runs the local OpenAI Codex CLI as a non-interactive sub-agent using ChatGPT OAuth. Ideal for offloading code generation and reviews without API keys. CX Codex +1 333installs wps-doc-scraper This skill archives public WPS/KDocs documents and embedded ProcessOn mind maps as raw data, SVG or PNG, and Markdown. Useful when a link has to be saved without logging in. CX Codex +1 334installs codex-image-gallery Launches a local browser gallery for reviewing Codex-generated images. Useful when you need to inspect local output folders without leaving your agent workflow. CX Codex +1 326installs download-gemini-images This skill downloads images from an open Gemini chat through your logged-in Chrome session and packages them into a ZIP in thread order. CX Codex +1 325installs openclaw-model-switch Safely switches or repairs OpenClaw model settings in openclaw.json. It handles primary model switches, routing errors, and token hijack bugs without breaking gateway sync. CX Codex +1 323installs claude-migrate-memory-to-doc Pulls your profile and preferences out of Claude's personal memory into documents that Claude, Cursor and other CLIs can read. CX Codex +1 325installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor