Skip to content

Repository files navigation

skillz — multi-skill catalog for Claude Code and Codex

A small, growing catalog of Claude Code / Codex skills, exposed as individual plugins and a full-bundle plugin via the host's native /plugin install flow. Skills are plain SKILL.md files; each plugin entry adds a thin manifest plus a skills/ directory of symlinks back to the canonical skills/<name>/. A legacy install.sh script remains available as a fallback for sandboxed environments and older Codex versions.

Table of contents

Catalog

Name Type Hosts Purpose
work-on-pr skill Claude, Codex Author-side PR iteration loop
review-pr-loop skill Claude, Codex Reviewer-side PR iteration loop
codex-adversarial-pr-review skill Claude, Codex Post /codex:adversarial-review findings as a batched GitHub PR review (inline + out-of-diff rollup)
continuous-learning skill Codex End-of-task retrospective: extract reusable, verified learnings as Codex skills
cmux-search skill Claude, Codex Search all open cmux workspaces/tabs/panes - live scrollback + agent transcripts
macos-sparkle-update-quarantine-relaunch skill Claude, Codex Sparkle updater error 4005 / 'Failed to create installation cache directory' persists after stripping quarantine; relaunch the un-quarantined bundle
cmux-agent-tabs skill Claude, Codex Make AI agents show as watchable cmux tabs; Claude needs the claude-teams wrapper, Codex via codex-teams/hooks
cmux-autoresume-after-reboot skill Claude, Codex Why cmux does not resume agent sessions after a macOS reboot despite autoResumeAgentSessions
python-ast-static-analyzer-scoping skill Claude, Codex Build a Python ast analyzer: import-alias resolution + load-time vs deferred scoping
wordpress-com-publish skill Claude, Codex Acquire a WordPress.com OAuth2 token (authorization-code flow) and publish/update posts
git-graft-worktree-onto-remote skill Claude, Codex Graft a local worktree's commits onto a remote branch without re-cloning
multi-phase-feature-pr-worktrees skill Claude, Codex Run a multi-phase feature as stacked worktree PRs, each reviewed independently
gist-to-repo-migration skill Claude, Codex Migrate a gist's full revision history into a real git repo
neon-vercel-db-identify-and-migrate skill Claude, Codex Identify which Neon project backs a Vercel app and migrate/split it; safe non-destructive cutover
claudeception skill Claude Continuous-learning meta-skill: procedures become catalog skills via PR; specifics go to memory (local or shared vault)
claude-code-codex-plugin-parity skill Claude, Codex Port a Claude Code plugin to the Codex CLI (or back); where the two systems match vs diverge
claude-code-plugin-from-existing-repo skill Claude, Codex Convert a repo that ships CC commands/hooks (manual copy-in) into an installable plugin
claude-code-plugin-python-bootstrap skill Claude, Codex Bootstrap Python deps from a CC plugin hook so /plugin install is one-click (PEP 668-safe)
claude-code-plugin-update-flow skill Claude, Codex Update a CC plugin via /plugin marketplace update + /reload-plugins, not the picker /plugin update
claude-code-plugin-publish-anthropic-marketplace skill Claude, Codex Publish a CC plugin to Anthropic's marketplace, plus the pre-submission validation pass
claude-json-mcp-migration-slice skill Claude, Codex The exact ~/.claude.json slice that carries MCP config for migration vs session bookkeeping
playwright-mcp-upload-hidden-file-input skill Claude, Codex Upload to a hidden <input type=file> via Playwright MCP (unhide+tag, upload, verify via CDN URL)
agent-team-orchestration skill Claude, Codex Run a team of agents over a repo's open issues: architect plans the parallel set, per-issue squads (dev + adversarial reviewer + SDET + productivity engineer), each individually watchable
istio-multicluster-endpointless-mesh-service skill Claude, Codex Istio multi-cluster endpoint-less away-Service: use a decoy selector (not an omitted one) so an EndpointSlice anchor exists for the mesh to merge remote endpoints into; for cross-region write-routing / home-away Service topologies
pre-open-source-credential-audit skill Claude, Codex Audit a git repo for leaked secrets before making it public: scan tracked files AND full history, avoid the git grep -E word-boundary false-negative, catch tracked editor-backup files, decide rewrite+rotate vs. accept an inert identifier
terraform-state-version-apply-forensics skill Claude, Codex Prove a terraform change really was applied to an env: census versioned S3 tfstate objects (serial + resource-type counts) + cross-check CloudTrail; separates a real apply from a reverted one, identifies which variant of a stacked change ran, and tells untracked orphans from failed destroys
terraform-ecs-capacity-provider-staged-teardown skill Claude, Codex Tear down an ECS-on-EC2 capacity-provider stack when one apply deadlocks on ResourceInUseException: destroy order is reverse-dependency, so compute tears down before the workload; split into two sequential untargeted applies, workload first
gh-pr-merge-delete-branch-closes-dependent-pr skill Claude, Codex Stacked PRs: merging the upstream PR with branch deletion auto-CLOSES the dependent PR instead of retargeting it, and gh pr reopen then fails because the base ref is gone; recover by recreating the ref, or prevent by retargeting downstream PRs first
skillz plugin plugin Claude, Codex Full repo bundle: every skill
pr-loop plugin plugin Claude, Codex Paired author + reviewer PR-loop skills
work-on-pr plugin plugin Claude, Codex Single-skill plugin: work-on-pr
review-pr-loop plugin plugin Claude, Codex Single-skill plugin: review-pr-loop
cmux-search plugin plugin Claude, Codex Single-skill plugin: search all open cmux panes
cmux-agent-tabs plugin plugin Claude, Codex Single-skill plugin: cmux-agent-tabs
python-ast-static-analyzer-scoping plugin plugin Claude, Codex Single-skill plugin: python-ast-static-analyzer-scoping
wordpress-com-publish plugin plugin Claude, Codex Single-skill plugin: WordPress.com token + publish
git-graft-worktree-onto-remote plugin plugin Claude, Codex Single-skill plugin: git-graft-worktree-onto-remote
multi-phase-feature-pr-worktrees plugin plugin Claude, Codex Single-skill plugin: multi-phase-feature-pr-worktrees
gist-to-repo-migration plugin plugin Claude, Codex Single-skill plugin: gist-to-repo-migration
neon-vercel-db-identify-and-migrate plugin plugin Claude, Codex Single-skill plugin: neon-vercel-db-identify-and-migrate
claude-code-codex-plugin-parity plugin plugin Claude, Codex Single-skill plugin: claude-code-codex-plugin-parity
claude-code-plugin-from-existing-repo plugin plugin Claude, Codex Single-skill plugin: claude-code-plugin-from-existing-repo
claude-code-plugin-python-bootstrap plugin plugin Claude, Codex Single-skill plugin: claude-code-plugin-python-bootstrap
claude-code-plugin-update-flow plugin plugin Claude, Codex Single-skill plugin: claude-code-plugin-update-flow
claude-json-mcp-migration-slice plugin plugin Claude, Codex Single-skill plugin: claude-json-mcp-migration-slice
continuous-learning plugin plugin Codex Single-skill plugin (no hooks)
playwright-mcp-upload-hidden-file-input plugin plugin Claude, Codex Single-skill plugin: playwright-mcp-upload-hidden-file-input
codex-continuous-learning plugin plugin Codex continuous-learning skill plus UserPromptSubmit + Stop hooks
agent-team-orchestration plugin plugin Claude, Codex Single-skill plugin: agent-team-orchestration
istio-multicluster-endpointless-mesh-service plugin plugin Claude, Codex Single-skill plugin: istio-multicluster-endpointless-mesh-service
pre-open-source-credential-audit plugin plugin Claude, Codex Single-skill plugin: pre-open-source-credential-audit
terraform-state-version-apply-forensics plugin plugin Claude, Codex Single-skill plugin: terraform-state-version-apply-forensics
terraform-ecs-capacity-provider-staged-teardown plugin plugin Claude, Codex Single-skill plugin: terraform-ecs-capacity-provider-staged-teardown
gh-pr-merge-delete-branch-closes-dependent-pr plugin plugin Claude, Codex Single-skill plugin: gh-pr-merge-delete-branch-closes-dependent-pr
codex-adversarial-pr-review plugin plugin Claude, Codex Single-skill plugin: codex-adversarial-pr-review
pr-loop collection (legacy) Claude, Codex install.sh selector. Prefer the pr-loop plugin entry.

Machine-readable index: catalog.json. The installer and validation script both read from it, so new entries land in the docs and tooling at the same time.

Layout

catalog.json                       # machine-readable catalog index
collections/
  pr-loop.json                     # legacy install.sh selector (kept for backcompat)
skills/                            # canonical skill content
  work-on-pr/SKILL.md
  review-pr-loop/SKILL.md
  continuous-learning/SKILL.md
  cmux-search/SKILL.md
  gh-git-heredoc-body-file/SKILL.md
  claude-code-static-allow-bypasses-hook/SKILL.md
  python-ast-static-analyzer-scoping/SKILL.md
  wordpress-com-publish/SKILL.md
  git-add-u-rename-pitfall/SKILL.md
  git-branch-cleanup-script-races/SKILL.md
  git-graft-worktree-onto-remote/SKILL.md
  multi-phase-feature-pr-worktrees/SKILL.md
  gist-to-repo-migration/SKILL.md
  vercel-token-deploy-branch-domains/SKILL.md
  s3-presigned-upload-fails-nonexistent-bucket/SKILL.md
  neon-vercel-db-identify-and-migrate/SKILL.md
  gh-api-f-vs-F-body-file/SKILL.md
  gh-api-jq-no-arg/SKILL.md
  gh-fork-issues-disabled/SKILL.md
  gh-pr-graphql-401-rest-fallback/SKILL.md
  gh-pr-merge-delete-branch-closes-dependent-pr/SKILL.md
  gh-workflow-run-matching/SKILL.md
  github-api-list-endpoint-staleness-fresh-pr/SKILL.md
  github-closing-keywords-default-branch-only/SKILL.md
  github-private-repo-readme-image-rendering/SKILL.md
  claude-code-claudemd-symlink-write-refused/SKILL.md
  claude-code-codex-plugin-parity/SKILL.md
  claude-code-piebald-lsp-binary-on-path/SKILL.md
  claude-code-plugin-from-existing-repo/SKILL.md
  claude-code-plugin-python-bootstrap/SKILL.md
  claude-code-plugin-update-flow/SKILL.md
  claude-json-mcp-migration-slice/SKILL.md
  macos-bash-3.2-compat/SKILL.md
  emacs-batch-package-verify-pitfalls/SKILL.md
  python-symtable-no-col-offset-pairing/SKILL.md
.claude-plugin/
  marketplace.json                 # Claude Code marketplace (lists all plugin entries)
.codex-plugin/
  marketplace.json                 # Codex marketplace (lists all plugin entries)
plugins/                           # per-plugin manifests + skill symlinks
  skillz/                          # full bundle (per-host skill dirs)
    .claude-plugin/plugin.json     # "skills": "./skills-claude/"
    .codex-plugin/plugin.json      # "skills": "./skills-codex/"
    skills-claude/                 # every claude-hosted skill (excludes continuous-learning, codex-only)
      work-on-pr -> ../../../skills/work-on-pr
      claudeception -> ../../../skills/claudeception
      ...                          # symlink per claude-hosted catalog skill
    skills-codex/                  # every codex-hosted skill (excludes claudeception, claude-only)
      work-on-pr -> ../../../skills/work-on-pr
      continuous-learning -> ../../../skills/continuous-learning
      ...                          # symlink per codex-hosted catalog skill
  pr-loop/                         # work-on-pr + review-pr-loop only
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/
      work-on-pr -> ../../../skills/work-on-pr
      review-pr-loop -> ../../../skills/review-pr-loop
  work-on-pr/                      # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/work-on-pr -> ../../../skills/work-on-pr
  review-pr-loop/                  # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/review-pr-loop -> ../../../skills/review-pr-loop
  cmux-search/                     # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/cmux-search -> ../../../skills/cmux-search
  gh-git-heredoc-body-file/        # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/gh-git-heredoc-body-file -> ../../../skills/gh-git-heredoc-body-file
  claude-code-static-allow-bypasses-hook/   # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/claude-code-static-allow-bypasses-hook -> ../../../skills/claude-code-static-allow-bypasses-hook
  python-ast-static-analyzer-scoping/       # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/python-ast-static-analyzer-scoping -> ../../../skills/python-ast-static-analyzer-scoping
  wordpress-com-publish/           # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/wordpress-com-publish -> ../../../skills/wordpress-com-publish
  git-add-u-rename-pitfall/        # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/git-add-u-rename-pitfall -> ../../../skills/git-add-u-rename-pitfall
  git-branch-cleanup-script-races/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/git-branch-cleanup-script-races -> ../../../skills/git-branch-cleanup-script-races
  git-graft-worktree-onto-remote/  # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/git-graft-worktree-onto-remote -> ../../../skills/git-graft-worktree-onto-remote
  multi-phase-feature-pr-worktrees/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/multi-phase-feature-pr-worktrees -> ../../../skills/multi-phase-feature-pr-worktrees
  gist-to-repo-migration/          # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/gist-to-repo-migration -> ../../../skills/gist-to-repo-migration
  vercel-token-deploy-branch-domains/       # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/vercel-token-deploy-branch-domains -> ../../../skills/vercel-token-deploy-branch-domains
  s3-presigned-upload-fails-nonexistent-bucket/  # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/s3-presigned-upload-fails-nonexistent-bucket -> ../../../skills/s3-presigned-upload-fails-nonexistent-bucket
  neon-vercel-db-identify-and-migrate/      # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/neon-vercel-db-identify-and-migrate -> ../../../skills/neon-vercel-db-identify-and-migrate
  gh-api-f-vs-F-body-file/         # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/gh-api-f-vs-F-body-file -> ../../../skills/gh-api-f-vs-F-body-file
  gh-api-jq-no-arg/                # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/gh-api-jq-no-arg -> ../../../skills/gh-api-jq-no-arg
  gh-fork-issues-disabled/         # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/gh-fork-issues-disabled -> ../../../skills/gh-fork-issues-disabled
  gh-pr-graphql-401-rest-fallback/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/gh-pr-graphql-401-rest-fallback -> ../../../skills/gh-pr-graphql-401-rest-fallback
  gh-pr-merge-delete-branch-closes-dependent-pr/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/gh-pr-merge-delete-branch-closes-dependent-pr -> ../../../skills/gh-pr-merge-delete-branch-closes-dependent-pr
  gh-workflow-run-matching/        # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/gh-workflow-run-matching -> ../../../skills/gh-workflow-run-matching
  github-api-list-endpoint-staleness-fresh-pr/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/github-api-list-endpoint-staleness-fresh-pr -> ../../../skills/github-api-list-endpoint-staleness-fresh-pr
  github-closing-keywords-default-branch-only/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/github-closing-keywords-default-branch-only -> ../../../skills/github-closing-keywords-default-branch-only
  github-private-repo-readme-image-rendering/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/github-private-repo-readme-image-rendering -> ../../../skills/github-private-repo-readme-image-rendering
  claude-code-claudemd-symlink-write-refused/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/claude-code-claudemd-symlink-write-refused -> ../../../skills/claude-code-claudemd-symlink-write-refused
  claude-code-codex-plugin-parity/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/claude-code-codex-plugin-parity -> ../../../skills/claude-code-codex-plugin-parity
  claude-code-piebald-lsp-binary-on-path/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/claude-code-piebald-lsp-binary-on-path -> ../../../skills/claude-code-piebald-lsp-binary-on-path
  claude-code-plugin-from-existing-repo/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/claude-code-plugin-from-existing-repo -> ../../../skills/claude-code-plugin-from-existing-repo
  claude-code-plugin-python-bootstrap/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/claude-code-plugin-python-bootstrap -> ../../../skills/claude-code-plugin-python-bootstrap
  claude-code-plugin-update-flow/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/claude-code-plugin-update-flow -> ../../../skills/claude-code-plugin-update-flow
  claude-json-mcp-migration-slice/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/claude-json-mcp-migration-slice -> ../../../skills/claude-json-mcp-migration-slice
  macos-bash-3.2-compat/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/macos-bash-3.2-compat -> ../../../skills/macos-bash-3.2-compat
  emacs-batch-package-verify-pitfalls/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/emacs-batch-package-verify-pitfalls -> ../../../skills/emacs-batch-package-verify-pitfalls
  python-symtable-no-col-offset-pairing/ # single-skill plugin
    .claude-plugin/plugin.json
    .codex-plugin/plugin.json
    skills/python-symtable-no-col-offset-pairing -> ../../../skills/python-symtable-no-col-offset-pairing
  continuous-learning/             # Codex-only single-skill plugin (no hooks)
    .codex-plugin/plugin.json
    skills/continuous-learning -> ../../../skills/continuous-learning
  codex-continuous-learning/       # Codex skill + hooks bundle
    .codex-plugin/plugin.json
    skills/continuous-learning -> ../../../skills/continuous-learning
    hooks/
      hooks.json
      continuous_learning_prompt.py
      continuous_learning_stop.py
install.sh                         # catalog-driven installer (legacy / fallback)
scripts/
  validate-catalog.sh              # CI/local catalog validation
README.md

Each plugins/<name>/skills/<skill> is a symlink back to the canonical skills/<skill>/, so every plugin reads from a single source of truth. The root .claude-plugin/marketplace.json and .codex-plugin/marketplace.json enumerate every plugin entry so hosts can offer them individually in /plugin install.

This repo replaced gist 5f606018eb36a75dc292016268f08e7c. The full gist revision history was imported as the first 13 commits on master and the gist now redirects here.

Install — Claude Code plugin (recommended)

The marketplace exposes every plugin entry individually, so you can install exactly the subset you want. From inside Claude Code:

/plugin marketplace add voitta-ai/skillz

# Full bundle (every skill):
/plugin install skillz@skillz

# Author + reviewer PR-loop pair:
/plugin install pr-loop@skillz

# Single-skill plugins:
/plugin install work-on-pr@skillz
/plugin install review-pr-loop@skillz

Each plugin's skills/ directory is a set of symlinks back to skills/<name>/, so installing one plugin does not duplicate skill content on disk.

If you previously installed via install.sh --target claude, remove the old copies to avoid duplicates:

rm -rf ~/.claude/skills/work-on-pr ~/.claude/skills/review-pr-loop

Install — Codex plugin (recommended)

Requires Codex CLI 0.117.0 or newer. Check with codex --version.

From any shell, add this repo as a Codex marketplace:

codex plugin marketplace add voitta-ai/skillz

Then open Codex's plugin browser and install whichever plugin entry you want from the skillz marketplace — same set as Claude Code, plus two Codex-only entries:

/plugins
  • skillz — full bundle (host-aware: the Claude manifest loads skills-claude/, the Codex manifest loads skills-codex/, so a claude-only skill like claudeception never lands in a Codex install and a codex-only skill like continuous-learning never lands in a Claude install)
  • pr-loop — work-on-pr + review-pr-loop
  • work-on-pr — single skill
  • review-pr-loop — single skill
  • continuous-learning — single skill, no hooks
  • codex-continuous-learning — skill + UserPromptSubmit/Stop hooks

From a local checkout, point Codex at the repo root instead:

codex plugin marketplace add /absolute/path/to/skillz

If you add a local checkout, keep that checkout up to date yourself with git pull in the clone.

Remove old direct-copy installs after switching:

rm -rf ~/.codex/skills/work-on-pr ~/.codex/skills/review-pr-loop

Install — script (legacy / fallback)

install.sh predates the per-plugin marketplace entries above. Use it when the plugin path is unavailable (older Codex, locked Claude Code config, sandboxed environment) or when you want to drop skills directly into ~/.claude/skills/ / ~/.codex/skills/ without going through /plugin.

# Default: install the pr-loop collection (work-on-pr + review-pr-loop)
bash <(curl -sL https://raw.githubusercontent.com/voitta-ai/skillz/master/install.sh)

# Single skill
bash <(curl -sL https://raw.githubusercontent.com/voitta-ai/skillz/master/install.sh) -- --skill work-on-pr

# Named collection
bash <(curl -sL https://raw.githubusercontent.com/voitta-ai/skillz/master/install.sh) -- --collection pr-loop

# Everything in the catalog
bash <(curl -sL https://raw.githubusercontent.com/voitta-ai/skillz/master/install.sh) -- --all

# Force a target host
bash <(curl -sL https://raw.githubusercontent.com/voitta-ai/skillz/master/install.sh) -- --target codex
bash <(curl -sL https://raw.githubusercontent.com/voitta-ai/skillz/master/install.sh) -- --target claude
bash <(curl -sL https://raw.githubusercontent.com/voitta-ai/skillz/master/install.sh) -- --target both

# Dry-run shows what would happen without writing anything
bash <(curl -sL https://raw.githubusercontent.com/voitta-ai/skillz/master/install.sh) -- --all --dry-run

--skill and --collection are repeatable. --target accepts auto (default), codex, claude, or both. Override the destination directly with SKILLS_DEST_ROOT. CODEX_HOME and CLAUDE_SKILLS_DIR are honored.

From a clone:

git clone https://github.com/voitta-ai/skillz.git /tmp/skillz
/tmp/skillz/install.sh --target both --collection pr-loop

Backward compatibility: invoking install.sh with no selection flags installs the pr-loop collection, matching the prior default.

Migrating from debedb/skillz

This repo previously lived at debedb/skillz. It has moved to voitta-ai/skillz. GitHub redirects the old URL indefinitely (until the debedb/skillz name is reused), so existing installs continue to work without changes. The notes below cover the few cases where a manual switch is worth doing.

Script install (install.sh). Re-run the curl one-liner against the new raw URL — it overwrites in place, same skill paths, no orphan files:

bash <(curl -sL https://raw.githubusercontent.com/voitta-ai/skillz/master/install.sh)

The old debedb URL still resolves via the GitHub redirect, so nothing breaks if you keep using it; the new URL is just the canonical one going forward.

Claude Code plugin. The redirect also covers /plugin marketplace add / /plugin update, so existing installs keep updating from the renamed repo automatically. To switch the marketplace entry to the new owner explicitly:

/plugin uninstall skillz@skillz
/plugin marketplace remove skillz
/plugin marketplace add voitta-ai/skillz
/plugin install skillz@skillz

Codex plugin. Same pattern — the marketplace source URL redirects, so existing installs keep working. To switch the configured marketplace entry to the new owner explicitly:

codex plugin marketplace remove skillz
codex plugin marketplace add voitta-ai/skillz

Then reopen /plugins, select the skillz marketplace, and reinstall or update the same plugin entry you were already using.

This section will be removed once the rename has aged enough that nobody is hitting the old URL anymore — see #22.

Catalog manifest

catalog.json is the single source of truth for what the repo ships. It lists:

  • Every skill (name, path, supported hosts, one-line summary).
  • Every collection (name, member skill names, optional path to a per-collection JSON file).
  • Plugin bundles (name, paths to host manifests).
  • A default for the no-arg install (currently pr-loop).

install.sh parses this file at runtime. Adding a new skill is a two-file change: drop in skills/<name>/SKILL.md and add an entry under skills in catalog.json. No installer edits required.

Updating

  • Claude Code plugin: /plugin update (or /plugin marketplace update skillz) re-fetches master from this repo.
  • Codex plugin (GitHub marketplace source): open /plugins, select skillz, run the update action.
  • Codex plugin (local checkout source): git pull inside the checkout you added, then reopen /plugins if needed.
  • Script: re-run the curl one-liner, or git pull && ./install.sh from a clone.

Verify

Plugin install (Claude Code):

/plugin list

Plugin install (Codex):

/plugins

Script install:

ls ~/.codex/skills/work-on-pr/SKILL.md   ~/.codex/skills/review-pr-loop/SKILL.md
ls ~/.claude/skills/work-on-pr/SKILL.md ~/.claude/skills/review-pr-loop/SKILL.md

Check only the host(s) you actually use.

Collections (legacy)

Collections are an install.sh-only concept; Claude Code and Codex do not have a native notion of "collection." New work should use the equivalent plugin entries (e.g. install pr-loop@skillz via /plugin install). Collections remain documented here for users still on the script install path.

pr-loop collection

Paired skills that drive the iterative back-and-forth of a GitHub pull request review cycle. Install as one unit via:

./install.sh --collection pr-loop

The same pairing is also available as the pr-loop plugin entry — /plugin install pr-loop@skillz is the preferred path on Claude Code and on Codex CLI ≥ 0.117.

The two skills:

  • work-on-pr (SKILL.md): author-side loop. Watches for new review comments, issue comments, and inline threads; waits when feedback has not landed; addresses each in a worktree; runs tests; commits; pushes; replies with the commit SHA. Also accepts an issue reference and creates the PR if one does not yet exist (ensuring Closes #<issue> is in the body).
  • review-pr-loop (SKILL.md): reviewer-side loop. Each round re-reads the linked issue(s) and all prior reviews, issue comments, and inline threads before reviewing only the new diff or the author's latest response. Leaves structured feedback (REQUEST_CHANGES, COMMENT, APPROVE) and continues until approved, merged, or closed.

Each skill owns the watch loop. Every pass should surface which watch mode is active:

  • watch-mode=durable: a real ScheduleWakeup-style continuation was scheduled and survives turn end.
  • watch-mode=in-process-only: no durable wake-up exists, so the current invocation must stay alive with sleep + re-poll.

Invoking before comments exist is expected, and an idle poll is not completion. In-process polling only works while the current invocation stays alive; a terminal/final handoff ends it. watch stopped:* is only valid when the invocation is actually ending, not on an ordinary idle pass.

Usage:

/work-on-pr <N>        # author side (or pass an issue ref to start a PR)
/review-pr-loop <N>    # reviewer side

Reducing permission prompts (Claude Code)

The author-side loop pushes commits, posts comments, and replies to review threads several rounds per PR. Without the right permissions.allow patterns in ~/.claude/settings.json, Claude Code prompts for each write every round and the loop stalls.

The recommended allow block lives in skills/work-on-pr/SKILL.md, under "Auto-approved operations (self-PR workflow)". Two pitfalls worth calling out up front:

  • Never chain cd <worktree> && git .... Claude Code matches each allow entry against the full command string. The compound starts with cd, so a pattern like Bash(git push origin feature/*) does not fire even though the second segment would match on its own. The host's Bash-tool docs say this explicitly: "never prepend cd <current-directory> to a git command — the compound triggers a permission prompt." Use git -C <worktree-path> <subcommand> instead, and add the matching Bash(git -C * <subcommand>:*) entries from the SKILL's allow block. The same rule applies to chains like git -C X commit ... && git -C X push ... — issue them as separate Bash tool calls, not a single && string.
  • python3 -c "<inline>" does not auto-allow. Read-only introspection like cat ~/.claude/settings.json | python3 -c "<parse>" still prompts because Claude Code (and the YOLT hook, where installed) treats an inline -c script as opaque. Pull the snippet into a real .py file and invoke python3 path/to/script.py to make it analyzable, or accept the one-off prompt.

See skills/work-on-pr/SKILL.md → "Auto-approved operations" for the full pattern list and the rationale behind every entry that is intentionally NOT auto-approved (git push origin master, git push --force, gh repo delete, etc.).

Plugins

codex-continuous-learning (Codex only)

A Codex-native counterpart of Claudeception. Bundles the continuous-learning skill with two Codex hooks:

  • UserPromptSubmit — injects a one-line reminder that any reusable, verified learning from this turn should be captured before exit.
  • Stop — forces a brief end-of-task retrospective. The agent either invokes continuous-learning and acts on its output, or emits the literal line No reusable learning. and exits.

Design intent: capture only learnings that pass four retrospective gates (real discovery cost, recurrence likelihood, verifiable trigger, verified result). Most turns terminate with No reusable learning. — that escape hatch is the point. See the skill for the full policy and skill-shape requirements.

Layout:

plugins/codex-continuous-learning/
  .codex-plugin/plugin.json        # Codex plugin manifest
  skills/continuous-learning -> ../../../skills/continuous-learning
  hooks/
    hooks.json                     # UserPromptSubmit + Stop wiring
    continuous_learning_prompt.py  # UserPromptSubmit hook
    continuous_learning_stop.py    # Stop hook

The skills/continuous-learning directory inside the plugin is a relative symlink to the canonical skills/continuous-learning/ at the repo root, so the bundle stays a single source of truth.

Hook scripts are dependency-free Python (python3 only, no third-party imports, no filesystem writes, no network) and both fail open via on_error: ignore in hooks.json. A hook crash never breaks the user's session.

This bundle is Codex-only and not exposed via the Claude Code plugin or the pr-loop collection. Claude Code users who want similar end-of-task behavior should install Claudeception directly.

Install (when supported by the local Codex CLI):

/plugins
# add this repo as a marketplace source, then install
# codex-continuous-learning

Or, from a clone, point Codex at plugins/codex-continuous-learning/ as a local plugin folder.

Validation

./scripts/validate-catalog.sh

The script:

  • Confirms every catalog-referenced skill path exists.
  • Confirms every SKILL.md opens with YAML frontmatter containing name: and description:.
  • Confirms every collection references only known skills.
  • Confirms plugin-manifest paths declared in catalog.json exist.
  • Runs install.sh --dry-run for the no-arg default, --collection pr-loop, --skill work-on-pr, and --all.

Run it before opening a PR that touches the catalog or installer.

Pre-publish sensitive-term gate

When a skill is authored on a client / day-job machine and promoted here, its SKILL.md (and any shipped code) can leak content the public repo must never carry — account IDs, keys/tokens, client names, internal domains, infra topology. Run the gate before opening the PR:

./scripts/check-sensitive-terms.sh skills/<new-skill>/

It greps for structural leaks that are safe to enumerate publicly (AWS account-id / access-key shapes, Slack xox*/xapp- and GitHub/OpenAI/Google token shapes, PRIVATE KEY blocks, RFC-1918 IPs, .internal/.corp domains) and exits non-zero on any hit.

Client/account names can't live in a denylist in this public repo, so the script reads them from a private, out-of-repo wordlist — one term per line, blank lines and # comments ignored, each term matched case-insensitively (names get written Foo, foo, and FOO). It defaults to ~/.config/skillz/sensitive-terms.txt, so once that file exists the name check runs with no flags:

mkdir -p ~/.config/skillz
cat >> ~/.config/skillz/sensitive-terms.txt <<'EOF'
# employer / client names, internal repo + service prefixes
EOF

./scripts/check-sensitive-terms.sh skills/<new-skill>/

Point SKILLZ_SENSITIVE_TERMS_FILE elsewhere to override the default. If it is set to a path that doesn't exist the script exits 2 rather than quietly downgrading to structural-only — a typo'd path should fail loudly, not look clean.

Without a wordlist you get structural checks only, and the script says so. That is the expected state for anyone outside the org: the names that matter are exactly the ones this repo must not carry.

Clean exit = safe to promote. This is the automated form of the hard rule "the public repo must never contain account IDs, client names, domains, or infra topology" — make it a step in the claudeception / skill-promotion flow.

Automated checks

Both gates run automatically, split across two places because one of them cannot run in public CI.

CI (.github/workflows/checks.yml) — on every pull request and every push to master:

bash scripts/validate-catalog.sh
bash scripts/check-sensitive-terms.sh skills/ docs/ plugins/ README.md catalog.json

Advisory: it reports pass/fail on the PR but nothing is a required check yet. Neither script needs network — install.sh reads the local catalog.json when run from a checkout, so the dry-run smoke test validates that PR's catalog rather than master's.

Pre-push hook (hooks/pre-push) — enable it per clone with git's own hooks path:

git config core.hooksPath hooks

One command, no installer, and the hook updates itself when you pull. Skip a run deliberately with git push --no-verify.

The hook exists because the sensitive-term gate has two halves and CI can only do one. The structural half (key/token/account-id shapes, private IPs, internal-domain hostnames) runs fine in Actions. The name half reads a wordlist that must stay out of this public repo — and an Actions secret would not reach fork PRs, so the job would report green without having checked anything. A check that silently no-ops is worse than no check. Names are therefore enforced pre-push, on the machine where the wordlist already lives.

Related code-review approaches

The pr-loop collection operates at the workflow layer — when to review, how often, what to compare against across rounds. Several other projects address the content layer (what to say in a single review) and are complementary, not competing. They can be stacked: review-pr-loop driving the cycle while internally invoking a formatter and/or an adversarial subagent per round.

Feature caveman-review ce-adversarial-reviewer claudskills adversarial-review voitta-ai/skillz review-pr-loop
Type Skill Agent (subagent) Skill Skill (paired with work-on-pr)
Job Compress review prose Chaos-engineer failure scenarios PASS/FAIL adversarial verdict Drive multi-round PR review loop
Adversarial methodology No (format only) Yes (4 techniques) Yes (claimed) No — orchestration, not methodology
Verdict None Advisory findings Binary PASS/FAIL REQUEST_CHANGES / COMMENT / APPROVE
Confidence calibration No Anchored 100/75/50/25 Anchoring-bias prevention N/A
Scope discipline Reviews only Defers to 8 siblings Standalone Owns whole review cycle
Single-shot vs iterative Single Single Single Iterative — re-reads issue, prior threads, only-new-diff each round
Output PR-paste comments Structured JSON Unknown GitHub PR review (via gh) + commit replies
State across rounds None None None Yes — tracks addressed vs new, waits when quiet
Conditional trigger Manual Auto (size / risk) Manual Manual (/review-pr-loop N)
Exit conditions N/A (one-shot) N/A N/A Approve, merge, close, user stop
Polling discipline N/A N/A N/A Paced against prompt-cache TTL, ScheduleWakeup-aware
Host targets Claude Code Claude Code Claude Code (+ Pro app) Claude Code + Codex
Orchestration Standalone Part of /ce-code-review fleet Standalone Paired with work-on-pr (author side)

See also: claudskills registry, Anthropic Claude Code skills docs, vercel-labs/skills (upstream profile catalog used by npx skills add).

PR review workflow stack

The skills here are the workflow layer. They compose with subagents, Agent Teams, and the Agent SDK rather than competing with them. docs/pr-review-workflow.md writes that down: which layer does which job, the rule that subagents cannot spawn subagents (so review-pr-loop must run in the main session when it delegates a specialist sweep), how to use PR Review Toolkit agents as advisory-only subagents, when an Agent Team is worth the overhead, the SDK boundary, and the same-identity reviewer caveat.

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages