A collection of Claude Code skills for Python, DevOps, code review, and decision-making workflows, distributed as a plugin marketplace.
Grouped by purpose:
| Plugin | Description |
|---|---|
| python-upgrade-package | Modernizes legacy Python packages step-by-step — setup.py → uv + pyproject.toml, Travis → GitHub Actions, pytest migration |
| python2-cleanup | Removes Python 2 compatibility cruft from a Py3 codebase — six, __future__, unicode(), iteritems, python_2_unicode_compatible, etc. — one commit per category |
| django-extract-app | Audits a Django app inside a monolithic project for extractability (cross-app FKs, imports, settings, migration deps, URL/signal coupling) and extracts it into a standalone reusable Django package with tests, CI, pre-commit, and optional example project. Includes a separate cleanup sub-skill for wiring the package back into the original project |
| readme-guardian | Analyzes and improves Python project READMEs — badges, install instructions, Python/Django version support matrix (canonical source for Django × Python compatibility) |
| oss-github-publisher | Pre-flight audit before publishing a repo as open source — LICENSE, CI, pre-commit, secrets/PII/internal-hostname scans, GitHub Actions security, PyPI metadata audit |
| github-build-fixer | Diagnoses and fixes failing GitHub Actions CI builds — reads logs, proposes fixes, pushes, polls until green |
| Plugin | Description |
|---|---|
| long-file-splitter | Scans a repo for source files over a line threshold (default 600 LoC) in Python, JavaScript/TypeScript, HTML, Vue/Svelte — and for files dominated by a single mega-constant. Classifies each file (grab-bag utils / god-class / mega-constant / mixed) and writes a per-file split proposal with concrete module names, what moves where, public-API preservation strategy, and risks. Proposal-first; optional guided execution one file at a time, one commit per logical move, tests after each |
| Plugin | Description |
|---|---|
| premortem | Klein-style premortem on plans, launches, hires, pricing, or strategy — assumes failure 6 months out and works backward; produces visual HTML report |
| premortem-multiple | Three parallel premortems (codex + opencode + Claude subagent) on the same plan, synthesized into one unified document — consensus failures, divergent blind spots, hidden assumptions, combined revised plan; HTML report |
| Plugin | Description |
|---|---|
| code-review-external | Parallel external code review with codex, opencode, and a Claude subagent — three independent opinions side-by-side + cross-check (consensus / divergences / contradictions) |
graph LR
legacy["Legacy Python package<br/>(setup.py / Travis / six / etc.)"]
monolith["Django monolith<br/>(reusable app candidate inside)"]
pup["python-upgrade-package<br/>(modernize tooling)"]
p2c["python2-cleanup<br/>(clean Py2 cruft from source)"]
dxa["django-extract-app<br/>(extract reusable Django app)"]
dxac["django-extract-app-cleanup<br/>(wire package back to monolith)"]
rg["readme-guardian<br/>(README polish)"]
ossp["oss-github-publisher<br/>(pre-publication audit)"]
publish["git push public<br/>or PyPI release"]
ci["CI red"]
gbf["github-build-fixer"]
legacy --> pup
pup --> p2c
pup --> rg
p2c --> rg
monolith --> dxa
dxa --> rg
dxa --> ossp
ossp --> publish
publish --> dxac
rg --> ossp
pup --> ossp
ci --> gbf
gbf -. "no CI exists" .-> pup
Recommended sequence for modernizing + open-sourcing a legacy Python package:
python-upgrade-package— packaging, CI, pre-commit, pytest. Tooling only, never touches source.python2-cleanup— clean Py2 cruft from source if any (six,__future__,unicode(), etc.). One commit per category.readme-guardian— RST → MD, badges, install instructions, Python/Django version matrix.oss-github-publisher— last-mile audit (LICENSE, secrets, internal hostnames, PyPI metadata, GH Actions security).- Publish.
- If CI fails along the way,
github-build-fixerdiagnoses and fixes.
Recommended sequence for extracting a reusable Django app from a monolithic project:
django-extract-app— audit the app (8-point extractability check), then scaffold a standalone package with tests + CI + pre-commit + optional example project. Chains intoreadme-guardianandoss-github-publisherat the end.- Publish the new package (PyPI, private index, or keep as editable install).
django-extract-app-cleanup— wire the new package into the monolith as a dependency and remove the original<app>/directory. Verifiesmanage.py check+makemigrations --check --dry-run+ the monolith's tests still pass.
graph LR
single["/premortem<br/>(conversational, single perspective<br/>+ HTML report)"]
multi["/premortem-multiple<br/>(three CLIs in parallel)"]
pcodex["premortem-codex"]
popencode["premortem-opencode"]
pclaude["premortem-claude"]
meta["meta-synthesis<br/>(consensus / divergences / contradictions)<br/>+ HTML + markdown + transcript"]
multi --> pcodex
multi --> popencode
multi --> pclaude
pcodex --> meta
popencode --> meta
pclaude --> meta
Use /premortem when one perspective is enough (lower-stakes plan or quick stress-test). Use /premortem-multiple when the decision warrants three independent opinions (higher-stakes launch / hire / pricing change with significant downside).
graph LR
cre["/code-review-external<br/>(wrapper)"]
codex["code-review-codex"]
opencode["code-review-opencode"]
claude["code-review-claude"]
cross["cross-check<br/>(consensus / divergences / contradictions)"]
cre --> codex
cre --> opencode
cre --> claude
codex --> cross
opencode --> cross
claude --> cross
For GitHub PR review, use the official /code-review:code-review skill instead — it has a multi-agent pipeline with confidence scoring and posts the comment back to the PR. The skills above are for local targets (uncommitted changes, a commit, a file, a directory, or a free-form scope).
python-upgrade-packagereads its Django × Python compatibility matrix fromreadme-guardian(single source of truth — see Step 2b inpython-upgrade-package).python-upgrade-packagerecommendspython2-cleanupafter Step 6 (modernize tooling first, then clean Py2 cruft from source — different scopes, different Iron Laws).readme-guardianrecommends runningpython-upgrade-packagefirst when the project has legacy tooling — fixing the README without fixing the underlyingpyproject.tomlproduces inconsistent badges.oss-github-publisherrecommendsreadme-guardianfor README polish (audit will WARN on missing sections; readme-guardian fixes them properly).github-build-fixersuggestspython-upgrade-packagewhen no CI workflow exists — fixing absent CI is a packaging-modernization concern, not a build-fixer one.django-extract-appderives its Django × Python CI matrix fromreadme-guardian(same single source of truth aspython-upgrade-package), and chains intoreadme-guardian+oss-github-publisheras the last two steps of an extraction. Its phase-2 sub-skilldjango-extract-app-cleanupis invoked separately after the extracted package is published.
In Claude Code, run:
/plugin marketplace add iplweb/claude-skills
/plugin install code-review-external@iplweb-claude-skills
/plugin install django-extract-app@iplweb-claude-skills
/plugin install github-build-fixer@iplweb-claude-skills
/plugin install long-file-splitter@iplweb-claude-skills
/plugin install oss-github-publisher@iplweb-claude-skills
/plugin install premortem@iplweb-claude-skills
/plugin install premortem-multiple@iplweb-claude-skills
/plugin install python-upgrade-package@iplweb-claude-skills
/plugin install python2-cleanup@iplweb-claude-skills
/plugin install readme-guardian@iplweb-claude-skills
Install only the ones you need — each plugin is independent.
Once installed, skills activate automatically based on context, or you can invoke them explicitly:
/code-review-external:code-review-external— three parallel reviews (codex + opencode + Claude subagent) of a diff, commit, file, or directory/code-review-external:code-review-codex— only codex/code-review-external:code-review-opencode— only opencode/code-review-external:code-review-claude— only a Claude subagent
/django-extract-app:django-extract-app— extract a Django app from a monolithic project into a standalone reusable package (audit + scaffold + chain into readme-guardian + oss-github-publisher)/django-extract-app:django-extract-app-cleanup— phase-2 sub-skill: wire the new package back into the monolith and remove the original app directory
/github-build-fixer:github-build-fixer— when CI is failing on your branch/long-file-splitter:long-file-splitter— find source files over a line threshold and get a per-file split proposal (Python / JS / TS / HTML / Vue / Svelte); proposal-first, optional guided execution/oss-github-publisher:oss-github-publisher— before publishing a repo as open source/premortem:premortem— to stress-test a plan, launch, or decision by imagining it has already failed/premortem-multiple:premortem-multiple— three parallel premortems (codex + opencode + Claude subagent) on the same plan, synthesized into a single unified document/premortem-multiple:premortem-codex— only codex/premortem-multiple:premortem-opencode— only opencode/premortem-multiple:premortem-claude— only a Claude subagent
/python-upgrade-package:python-upgrade-package— to modernize a legacy Python package (tooling only)/python2-cleanup:python2-cleanup— to remove Python 2 compatibility cruft from a Py3 codebase (source code, category by category)/readme-guardian:readme-guardian— to improve a project's README
All four code-review-external skills accept the same positional argument and auto-detect the target type:
| Argument | Target |
|---|---|
| (none) | Uncommitted changes (staged + unstaged + untracked) |
HEAD~3, <sha>, branch name |
A single commit (git rev-parse resolvable) |
path/to/file.py |
A single file (review the whole file) |
path/to/dir/ |
A directory (review key files in it) |
Reviews are saved to /tmp/code-review-{codex,opencode,claude}-<timestamp>.md and printed side-by-side. The code-review-external wrapper requires both codex and opencode CLIs on $PATH; the individual sub-skills only require their own tool. For GitHub PR review use the official /code-review:code-review skill instead — it has a multi-agent pipeline with confidence scoring and posts the comment back to the PR.
These skill folders can be used directly with Codex because each one contains a SKILL.md file. Codex discovers user-installed skills from $CODEX_HOME/skills; if CODEX_HOME is not set, that defaults to ~/.codex/skills.
Symlink the skill you want into Codex's skills directory:
mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills"
ln -s "$(pwd)/plugins/<plugin>/skills/<skill-name>" \
"${CODEX_HOME:-$HOME/.codex}/skills/<skill-name>"For example:
ln -s "$(pwd)/plugins/readme-guardian/skills/readme-guardian" \
"${CODEX_HOME:-$HOME/.codex}/skills/readme-guardian"mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills"
for dir in plugins/*/skills/*/; do
skill=$(basename "$dir")
ln -sfn "$(pwd)/$dir" "${CODEX_HOME:-$HOME/.codex}/skills/$skill"
doneRestart Codex after linking so it reloads the skill metadata.
Once installed, invoke a skill by naming it in your prompt, for example:
Use the readme-guardian skill to improve this project's README.
Use the python-upgrade-package skill to modernize this package.
In Codex interfaces that support explicit skill mentions, you can also reference the skill directly, for example $readme-guardian.
The Claude Code slash-command forms above, such as /readme-guardian:readme-guardian, are Claude Code commands. In Codex, use natural-language skill names or explicit skill mentions instead.
These skills also work with OpenCode. OpenCode discovers skills from specific directories — symlink each skill folder into a discoverable location:
# Global (available in all projects)
ln -s "$(pwd)/plugins/<plugin>/skills/<skill-name>" \
~/.config/opencode/skills/<skill-name>
# Or per-project
ln -s "$(pwd)/plugins/<plugin>/skills/<skill-name>" \
.opencode/skills/<skill-name>OpenCode scans these paths for SKILL.md files:
| Location | Scope |
|---|---|
.opencode/skills/<name>/SKILL.md |
Project |
~/.config/opencode/skills/<name>/SKILL.md |
Global |
.claude/skills/<name>/SKILL.md |
Project (Claude-compatible) |
~/.claude/skills/<name>/SKILL.md |
Global (Claude-compatible) |
.agents/skills/<name>/SKILL.md |
Project |
~/.agents/skills/<name>/SKILL.md |
Global |
mkdir -p ~/.config/opencode/skills
for dir in plugins/*/skills/*/; do
skill=$(basename "$dir")
ln -sf "$(pwd)/$dir" ~/.config/opencode/skills/"$skill"
doneAfter linking, OpenCode will list the skills in the skill tool and agents can load them on demand. See the OpenCode skills docs for details.
This marketplace uses CalVer — YYYY.0M.MICRO (e.g. 2026.05.0, 2026.05.1, 2026.06.0).
YYYY— full year0M— zero-padded month (01–12)MICRO— release counter within the month, starting at 0
All plugins ship in lockstep: every release re-tags every plugin and the marketplace itself with the same version. There are no per-plugin version trains — if any plugin changes, the next release bumps everything.
Current version: see CHANGELOG.md for the release history. To cut a release run scripts/bump-version.sh <YYYY.0M.MICRO> (or --auto for the next sensible value).
MIT — see LICENSE for details.