Codify
Skill anombyte93/codify
Refactor any Claude Code skill by extracting deterministic operations into a Python script. Reduces SKILL.md size by 60-80% while preserving all AI judgment.
npx -y skills add anombyte93/codifyAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Refactor any skill by extracting deterministic operations into a Python script and slimming the SKILL.md to only AI judgment parts. Use when user says /codify, codify a skill, or optimize a skill.
SKILL.md
5.3 KB, as published. Nobody here has run it
Codify Skill
/codify <skill-name>— Extract deterministic logic from a skill's SKILL.md into a Python script.
What This Does
Takes a skill's SKILL.md and splits it into:
- Script (
<skill-dir>/script.py) — all deterministic operations (file ops, validation, parsing, template copying) - Slim SKILL.md — only AI judgment parts (questions, assessment, continuation logic) + calls to the script
Argument
/codify <skill-name> — the skill directory name under ~/.claude/skills/. If omitted, list available skills and ask.
Workflow
Phase 1: Analyze
- Read
~/.claude/skills/<skill-name>/SKILL.md - Classify every block of instructions into one of two buckets:
DETERMINISTIC (goes into script.py):
- File/directory creation, copying, moving, deleting
- Template validation and repair
- Reading files and extracting sections/data
- Writing structured content to files
- Git operations (status, branch, mv)
- Environment detection (checking if files/dirs exist)
- Any operation that always produces the same output given the same input
- Pattern matching, categorization by filename/extension
- JSON/YAML/TOML parsing or generation
- Archiving, rotating, or resetting files
JUDGMENT (stays in SKILL.md):
- Asking the user questions (AskUserQuestion)
- Deciding what to do based on context (if/else logic about user intent)
- Assessing completion status
- Choosing what to work on next
- Dispatching agents for tasks requiring reasoning
- Evaluating quality (e.g., "is this content worth promoting?")
- Any operation where different AI instances might reasonably make different choices
- Present the analysis to the user:
SKILL: <name> (<line-count> lines)
DETERMINISTIC operations found:
- <description of each operation that will become a script subcommand>
JUDGMENT operations (staying in SKILL.md):
- <description of each AI reasoning block>
Proposed script subcommands:
- <subcommand-name>: <what it does>
- <subcommand-name>: <what it does>
Ask user to approve or adjust before proceeding.
Phase 2: Build Script
Create ~/.claude/skills/<skill-name>/script.py following these rules:
Script Architecture:
- argparse with subcommands (one per deterministic operation)
- ALL output is JSON via a shared
_out(data)helper - Handle markdown code blocks correctly when parsing sections (track ``` state)
- Use pathlib for all file operations
- Include
--helpfor every subcommand - Make executable (
chmod +x) - Use
#!/usr/bin/env python3 - No external dependencies — stdlib only
Subcommand Design:
- Each subcommand does ONE thing well
- Required args via
--flag(not positional) - Return
{"status": "ok", ...}on success - Return
{"status": "error", "message": "..."}and exit(1) on failure - Include enough detail in output for AI to make decisions without re-reading files
Code Quality:
- Proper error handling (file not found, permission denied)
- Idempotent where possible (safe to run twice)
- Comments only where logic is non-obvious
Phase 3: Rewrite SKILL.md
Rewrite the SKILL.md keeping:
- Frontmatter (name, description, user-invocable) — unchanged
- UX contracts, invariants, rules — preserved but condensed
- User question definitions — preserved
- Continuation/decision logic — preserved
- Self-assessment criteria — preserved
Replace with script calls:
- Every deterministic operation becomes a code block showing the script call
- Agent Ref / Agent Reference sections → deleted entirely
- Inline bash snippets → replaced with script subcommand calls
- Multi-step file operations → single script subcommand
Preserve and update frontmatter:
- Keep
name,description,user-invocableunchanged - Add
allowed-toolsif missing — list tools the skill actually uses (Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, etc.) - Update
descriptionif the workflow changed significantly
Add a Script Reference table at the bottom:
## Script Reference
All commands output JSON. Run from skill directory.
| Command | Purpose |
|---------|---------|
| `subcommand-1 --flag` | What it does |
| `subcommand-2 --flag` | What it does |
Target: Reduce SKILL.md by 50-70% while preserving all behavior.
Phase 4: Test
Run each script subcommand with --help to verify it parses.
Run preflight or equivalent read-only command against the current project to verify JSON output.
Report results.
Phase 5: Backup
Before overwriting SKILL.md, save original as SKILL.md.pre-codify.
Edge Cases
- Skill has no deterministic operations (pure judgment): Report "Nothing to extract" and skip.
- Skill already has a script.py: Ask whether to merge, replace, or abort.
- Skill is very short (<50 lines): Report "Too small to benefit from codification" and skip.
- SKILL.md references other files: Read those too and include in analysis.
Example
/codify start
Result: The transformation we just did — 637-line SKILL.md with 7 Agent Ref sections became 204-line SKILL.md + 320-line session-init.py script with 9 subcommands.