Context Routing Audit
withkynam/vibecode-pro-max-kit
Audits a project's context routing, skill discoverability and skill wiring by running a chain of validator scripts and fixing whatever they report.
Explains how the aspens generator routes output to Claude Code or Codex CLI targets and transforms generated skills and instruction files between their formats.
$ npx skills add aspenkit/aspens --skill codex-support -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install aspenkit/aspens codex-support --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/aspenkit/aspens.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/codex-support .claude/skills/codex-support && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "codex-support" agent skill from https://github.com/aspenkit/aspens/tree/main/.agents/skills/codex-support into .claude/skills/codex-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-support", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/aspenkit/aspens/tree/main/.agents/skills/codex-supportType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add aspenkit/aspens --skill codex-support -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install aspenkit/aspens codex-support --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aspenkit/aspens.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/codex-support .agents/skills/codex-support && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "codex-support" agent skill from https://github.com/aspenkit/aspens/tree/main/.agents/skills/codex-support into .agents/skills/codex-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-support", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add aspenkit/aspens --skill codex-support -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install aspenkit/aspens codex-support --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aspenkit/aspens.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/codex-support .cursor/skills/codex-support && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "codex-support" agent skill from https://github.com/aspenkit/aspens/tree/main/.agents/skills/codex-support into .cursor/skills/codex-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-support", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/aspenkit/aspens.git --path .agents/skills/codex-support--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add aspenkit/aspens --skill codex-support -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install aspenkit/aspens codex-support --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aspenkit/aspens.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/codex-support .gemini/skills/codex-support && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "codex-support" agent skill from https://github.com/aspenkit/aspens/tree/main/.agents/skills/codex-support into .gemini/skills/codex-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-support", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install aspenkit/aspens codex-supportInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add aspenkit/aspens --skill codex-support -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/aspenkit/aspens.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/codex-support .github/skills/codex-support && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "codex-support" agent skill from https://github.com/aspenkit/aspens/tree/main/.agents/skills/codex-support into .github/skills/codex-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-support", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add aspenkit/aspens --skill codex-support -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install aspenkit/aspens codex-support --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aspenkit/aspens.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/codex-support .opencode/skills/codex-support && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "codex-support" agent skill from https://github.com/aspenkit/aspens/tree/main/.agents/skills/codex-support into .opencode/skills/codex-support/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "codex-support", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
codex-supportExplains how the aspens generator routes output to Claude Code or Codex CLI targets and transforms generated skills and instruction files between their formats.
This skill gives an agent the context needed to work on the multi-target output code in the aspens project, which generates documentation for Claude Code, Codex CLI or both. It separates a target, meaning where output goes (.claude/skills/ for Claude, .agents/skills/ plus directory-scoped AGENTS.md files for Codex), from a backend, meaning which LLM CLI generates the content (claude -p or codex exec).
Each target definition carries paths and capability flags such as supportsHooks, supportsSettings, supportsGraph, supportsSkills and supportsMCP, and Codex adds a 32 KiB limit on instructions and a user skills directory. Generation always produces Claude's format first, and transforms such as transformForTarget() run afterwards to remap paths and content for other targets. Sanitize functions strip Claude-specific references from Codex output, and the root instructions file always lists every skill found on disk.
Read from SKILL.md and the folder at commit 8dde826. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
claudecodexFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Aspens Multi-Target Output loads about 1.9k tokens when it runs. Until then it costs about 33 tokens; SKILL.md has 788 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from aspenkit/aspens at commit 8dde826, republished under its MIT licence (© aspenkit). 788 words, ~1,916 tokens.
.claude/skills/codex-support/SKILL.md (or your agent's skills folder).You are working on multi-target output support — the system that lets aspens generate documentation for Claude Code, Codex CLI, or both simultaneously.
.claude/skills/, codex → .agents/skills/ + directory-scoped AGENTS.md). Backend = which LLM CLI generates the content (claude -p or codex exec).TARGETS.claude (centralized) and TARGETS.codex (directory-scoped). Each defines paths and capability flags: supportsHooks, supportsSettings, supportsGraph, supportsSkills, needsActivationSection, needsCodeMapEmbed, supportsMCP. Codex also has maxInstructionsBytes (32 KiB) and userSkillsDir. Codex's needsCodeMapEmbed is false — condensed cluster/framework data goes into the synthetic .agents/skills/architecture/ skill instead of the root AGENTS.md.CANONICAL_VARS (hardcoded Claude paths from doc-init.js). Transforms run after generation to produce other target formats.transformForTarget() remaps paths and content. For Codex: base skill → root AGENTS.md, domain skills → both .agents/skills/{domain}/SKILL.md and source directory AGENTS.md. generateCodexSkillReferences() creates .agents/skills/architecture/ with code-map data.collectSkillsForList() (internal) reads every skill from disk under sourceTarget.skillsDir and overlays pending in-flight changes (files passed to the transform) so the root instructions file's ## Skills section always lists every on-disk skill — not just the subset that changed in this sync. Pending changes win for descriptions; on-disk content survives for unchanged skills.transformToDirectoryScoped loads instructionsFile from disk via repoPath context parameter when it's not in the canonical files array (e.g., during doc init --strategy skip-existing or incremental doc sync). Uses a single readFileSync from fs wrapped in try/catch (no separate existsSync check).sanitizeCodexInstructions() and sanitizeCodexSkill() strip Claude-specific references (hooks, skill-rules.json, Claude Code mentions) from Codex output.sanitizePublishedContent(content, filePath) — Single-chokepoint sanitizer invoked by skill-writer.js on every disk write. Always strips ## Activation blocks and ## Key Files blocks. Outside code-map.md, also strips count-bearing blocks: **Hub files…**, **Domain clusters:**, **High-churn hotspots:**, **Framework entry points…**. Defense in depth — upstream leaks can't reach the user.syncSkillsSection() removes LLM-emitted Skill-section variants (## Skills Reference, ## Skills Overview, etc.) before injecting the canonical ## Skills list. Doc-init and doc-sync prompts also forbid such headings.ensureRootKeyFilesSection(content, graphSerialized) — Post-processes root instructions file to guarantee a ## Key Files section with top hub files from the graph.mergeConfiguredTargets(existing, next) — Merges target arrays to avoid dropping previously configured targets during narrower runs. Validates against TARGETS keys, deduplicates.getAllowedPaths(targets) — Returns { dirPrefixes, exactFiles } union across all active targets.detectAvailableBackends() checks if claude and codex CLIs are installed. resolveBackend() picks best match: explicit flag > target match > fallback..aspens.json at repo root stores { targets, backend, version, saveTokens? }. readConfig() returns null if missing or if the config is structurally invalid. isValidConfig() validates targets, backend, version, and saveTokens (via isValidSaveTokensConfig()).loadConfig(repoPath, { persist }) — Reads .aspens.json and, if missing, recovers via inferConfig() from on-disk artifacts. Returns { config, recovered }. Persists inferred config to disk by default unless persist: false is passed.saveTokens): Optional object in .aspens.json validated by isValidSaveTokensConfig() — checks enabled (boolean), warnAtTokens/compactAtTokens (positive integers, compact > warn unless either is MAX_SAFE_INTEGER), saveHandoff/sessionRotation (booleans), optional claude/codex sub-objects with enabled and mode.writeConfig preserves feature config: writeConfig() reads existing config and merges — saveTokens preserved unless explicitly set to null (intentional removal) or undefined (keep existing). Targets and backend also merge with existing.doc-sync uses publishFilesForTargets() to generate output for all configured targets from a single LLM run. repoPath is passed through to the transform context.inferConfig() only adds 'codex' to inferred targets when .codex/ config dir or .agents/skills/ dir exists.buildCodexSkillRefs() only includes the architecture skill reference when a graph was actually serialized.architecture skill is generated from graph data and has no Claude counterpart by design. logicalKeyForFile() returns null for codex architecture paths so assertTargetParity() won't raise a parity violation for the missing Claude side.CANONICAL_VARS.writeSkillFiles() handles direct-write files. writeTransformedFiles() handles directory-scoped AGENTS.md with an explicit path allowlist and warn-and-skip policy. Both writers run their payloads through sanitizePublishedContent before touching disk.validateTransformedFiles() rejects absolute paths, traversal, and unexpected filenames. writeTransformedFiles() enforces the same checks.add agent/command/hook and customize agents throw CliError for Codex-only repos. add skill works for both targets.persistGraphArtifacts() returns data without writing files when target.supportsGraph === false. Hook installation skipped when supportsHooks === false.readConfig() treats malformed but parseable JSON (e.g., wrong types for targets/backend/version/saveTokens) as invalid and returns null, same as missing config.repoPath context is required for disk fallback — callers of transformForTarget must pass repoPath in the context object for instructionsFile to load from disk when not in canonical files, and for collectSkillsForList to enumerate on-disk skills.src/lib/target.js for all target property definitionsLast Updated: 2026-05-11
© aspenkit, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/codex-support of aspenkit/aspens.
Open the folder on GitHubat commit 8dde826
Aspens Multi-Target Output next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Aspens Multi-Target Output this skillaspenkit/aspens | 102 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Context Routing Auditwithkynam/vibecode-pro-max-kit | 1.1k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Using Agent Skillsaddyosmani/agent-skills | 102k | 4 repos | ~2.4k | Automated safety check: Pass | MIT | |
| Task Observerrebelytics/one-skill-to-rule-them-all | 3.2k | 1 repos | ~12k | Automated safety check: Pass | CC-BY-4.0 | |
| Rules Distillationaffaan-m/ECC | 274k | 2 repos | ~2.3k | Automated safety check: Pass | MIT | |
| Birdview Skills Compatibility AuditQiuner/birdview | 715 | — | ~794 | Automated safety check: Pass | MIT |
withkynam/vibecode-pro-max-kit
Audits a project's context routing, skill discoverability and skill wiring by running a chain of validator scripts and fixing whatever they report.
addyosmani/agent-skills
Meta-skill for choosing which workflow skill fits the task at hand, plus always-on habits: surface assumptions, stop on confusion, push back, keep it simple and stay in scope.
rebelytics/one-skill-to-rule-them-all
Monitors task execution for skill improvement opportunities.
affaan-m/ECC
Scans installed skills for principles that recur across them and proposes rule-file changes: append, revise, add a section, create a file or leave as covered.
Qiuner/birdview
Audits the AI skills installed for a project for duplicate names, broad triggers and conflicting instructions, without changing any of them.
mistralai/mistral-vibe
Reference for Mistral Vibe, the CLI agent it runs inside: config files, env vars, agents, skills, tools, hooks and MCP servers, so the agent can explain and troubleshoot its own setup.
aspenkit/aspens
Injects a project's own skills and AGENTS.md content into generic bundled agent template files, adding a tech-stack line and real conventions without touching an agent's core logic.
aspenkit/aspens
Orientation to the aspens codebase for agents working on the CLI itself: its Node.js stack, commands, module layout and debug settings.
aspenkit/aspens
Project context for the aspens CLI entry point: Commander wiring, the welcome screen, missing-hook warnings, CliError exit handling and the public programmatic exports.
aspenkit/aspens
Context health analysis — freshness, domain coverage, hub surfacing, drift detection, LLM-powered interpretation, and auto-repair for generated agent context
aspenkit/aspens
Incremental skill updater that maps git diffs to affected skills and optionally auto-syncs via a post-commit hook
aspenkit/aspens
Static import analysis that builds dependency graphs, domain clusters, hub files, git churn hotspots, and file priority rankings
Categories
Explains how the aspens generator routes output to Claude Code or Codex CLI targets and transforms generated skills and instruction files between their formats. This skill gives an agent the context needed to work on the multi-target output code in the aspens project, which generates documentation for Claude Code, Codex CLI or both.md files for Codex), from a backend, meaning which LLM CLI generates the content (claude -p or codex exec).
Aspens Multi-Target Output fits situations like: changing how aspens generates output for the Codex CLI target; adding a new output target alongside Claude and Codex; debugging path remapping or content transforms between target formats.
Run `npx skills add aspenkit/aspens --skill codex-support -a claude-code`. Or copy the skill folder (.agents/skills/codex-support in aspenkit/aspens) into .claude/skills/codex-support in your project. Claude Code loads it when a task matches its description.
Run `npx skills add aspenkit/aspens --skill codex-support -a codex`. Or copy the skill folder (.agents/skills/codex-support in aspenkit/aspens) into .agents/skills/codex-support in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add aspenkit/aspens --skill codex-support -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/codex-support, .gemini/skills/codex-support, .github/skills/codex-support and .opencode/skills/codex-support in your project.
Going by SKILL.md and its folder, Aspens Multi-Target Output needs the command-line tools its instructions call (claude and codex). Our summary lists: A checkout of the aspens repository.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Aspens Multi-Target Output is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Aspens Multi-Target Output: Context Routing Audit (withkynam/vibecode-pro-max-kit, 1.1k stars), Using Agent Skills (addyosmani/agent-skills, 102k stars), Task Observer (rebelytics/one-skill-to-rule-them-all, 3.2k stars) and Rules Distillation (affaan-m/ECC, 274k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
aspenkit (a GitHub organization) maintains it in aspenkit/aspens, which has 102 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on September 12, 2026.
Source: aspenkit/aspens on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.