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 |
| Plugin | Description |
|---|---|
| freshdesk | Review of pending Freshdesk tickets (iplweb) — ranks by composite priority (SLA → due date → priority → age), shows a readable list and drives action (open, show conversation, change status/priority, draft a reply). Companion to ticket-resolver. |
| ticket-resolver | Handles a single ticket (Freshdesk or GitHub issue) end-to-end — triage (explain vs fix), draft a client reply for approval, or branch + worktree + TDD repro test + fix + PR + towncrier newsfragment, with internal trace notes. |
These two hardcode the iplweb Freshdesk account and the
iplweb/bpprepo — they live here for versioning/reuse, not as general reusable tools.
| Tool | Description |
|---|---|
| statusline | statusLine script for Claude Code — shows user@host, ~/path, git branch, % of 5h billing block used (via ccusage), and % of weekly token budget. Tuned for light terminal themes. |
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.
/premortem runs a Klein-style premortem on a plan, launch, hire, pricing, or strategy — a single conversational perspective that assumes failure six months out and works backward, producing a visual HTML report. Use it to stress-test a decision by imagining it has already failed.
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 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 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:
/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/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
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).
See CONTRIBUTING.md for the full layout and invariants. In short:
python3 scripts/new-plugin.py my-plugin "One-line description." # scaffold
python3 scripts/validate.py # check invariants
pre-commit run --all-files # json + whitespace + validatescripts/validate.py enforces the marketplace invariants (name == directory == entry, lockstep versions, marketplace ↔ plugins/ in sync, every SKILL.md has name/description front matter) and runs in CI on every push/PR via .github/workflows/validate.yml.
MIT — see LICENSE for details.