# Skill Improver

Runs an autonomous review-and-fix improvement loop over a Claude Code skill until a...

- Repository: https://github.com/trailofbits/skills (7935 stars)
- Category: AI and agents
- License: CC-BY-SA-4.0
- Last updated: 2026-10-28
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add trailofbits/skills --skill skill-improver -g -a claude-code -y`
Codex: `npx skills add trailofbits/skills --skill skill-improver -g -a codex -y`
Cursor: `npx skills add trailofbits/skills --skill skill-improver -g -a cursor -y`
Gemini CLI: `npx skills add trailofbits/skills --skill skill-improver -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add trailofbits/skills`

## Description

Runs an autonomous review-and-fix improvement loop over a Claude Code skill until a review comes back clean, with a cross-round findings ledger, escalation when fixes stop converging, and a mechanical scope guard. Reviews are performed by the plugin-dev skill-reviewer agent. Use to fix skill quality issues, iteratively refine a skill, or resume a loop after an escalation ('fix my skill', 'improve this skill until it passes review', 'skill improvement loop'). NOT for a one-time review, use the plugin-dev skill-reviewer agent directly.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Skill Improver

Improve a Claude Code skill by running `/code-improver:improve`, a dynamic workflow
that loops a reviewer and a fixer subagent until a review reports zero critical/major
findings, then strips its own residue. This entry point wires the loop to the
`plugin-dev:skill-reviewer` agent, so the **plugin-dev plugin must be installed**
(marketplace `claude-plugins-official`). The loop, its ledger, and its guards live in
the workflow; this skill resolves the target and relays the outcome.

## Starting the loop

The user provided: `$ARGUMENTS` (if empty, take the target skill from the conversation).

### 1. Resolve the skill path

1. If the input ends with `/SKILL.md` and the file exists, use its directory
2. If the input is a directory containing `SKILL.md`, use that path
3. Otherwise `Glob(pattern="**/SKILL.md")` and filter by skill name or path substring:
   - **Multiple matches:** ask the user to choose
   - **No matches:** report the available skills
   - **Single match:** proceed

### 2. Resolve the loop script

Resolve [`improve.js`](../../workflows/improve.js) from this SKILL.md's installed location
to an absolute path and confirm the file exists. Its plugin directory is `pluginRoot`.
Use this exact plugin copy; if the file is missing, stop.

### 3. Invoke the workflow

Run it with the Workflow tool, `{scriptPath: "<the path from step 2>", args: {...}}`:

```json
{
  "target": "<resolved absolute path>",
  "reviewer": {
    "kind": "agent",
    "name": "plugin-dev:skill-reviewer",
    "notes": "The target is a Claude Code skill directory; review it as a skill (frontmatter, triggering description, progressive disclosure, referenced files)."
  },
  "pluginRoot": "<the plugin directory from step 2>",
  "maxRounds": 5
}
```

The rest: https://github.com/trailofbits/skills/blob/HEAD/plugins/code-improver/skills/skill-improver/SKILL.md
