harness:deploy — Claude Code skill: finalize and push
This skill wraps up an agent evolution run by showing its results and offering to review changes, clean temporary files, or push a Git tag.
npx skills add raphaelchristi/harness-evolver --skill deploy -a claude-codeWhat harness:deploy does
The skill reads .evolver.json to display the baseline and best scores, iteration count, and winning experiment. It also shows Git changes made since the evolution began, then asks which next step you want.
Choose a diff review, temporary-file cleanup, or a tagged push. The push creates a tag with the score and sends it with main to origin. You can also move proven findings into CLAUDE.md: the skill first runs promote_learnings.py with --dry-run and waits for approval before applying them. That push affects the remote repository, so review the changes before choosing it.
What it helps with
- inspect scores and the winning experiment after an evolution run
- review the Git diff from an evolution
- remove temporary files without pushing
- tag the result with its score and push it to
origin - preview findings before adding them to
CLAUDE.md
Example prompts for the agent
- Finish the agent evolution and show its scores and Git changes.
- Show the full evolution diff without pushing anything.
- Clean up temporary files, then preview findings for
CLAUDE.md.
How to install harness:deploy
1Skills CLI (Vercel)
npx skills add raphaelchristi/harness-evolver --skill deploy -a claude-code2Manually: put the files in place
~/.claude/skills/deploy/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/deploy/
1Skills CLI (Vercel)
npx skills add raphaelchristi/harness-evolver --skill deploy -a codex2Manually: put the files in place
.agents/skills/deploy/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add raphaelchristi/harness-evolver --skill deploy -a cursor2Manually: put the files in place
.cursor/skills/deploy/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install raphaelchristi/harness-evolver deploy2Manually: put the files in place
.github/skills/deploy/SKILL.md1Skills CLI (Vercel)
npx skills add raphaelchristi/harness-evolver --skill deploy -a gemini-cli2Platform CLI
gemini skills install https://github.com/raphaelchristi/harness-evolver --path skills/deployManually: put the files in place
.devin/skills/deploy/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add raphaelchristi/harness-evolver --skill deploy -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about harness:deploy
How do I install harness:deploy in Claude Code?
Run npx skills add raphaelchristi/harness-evolver --skill deploy -a claude-code. The skill file is at ~/.claude/skills/deploy/SKILL.md.
What does harness:deploy do?
It reports an agent evolution run and asks whether to inspect the diff, remove temporary files, push a tag, or add findings to CLAUDE.md.
Does harness:deploy push changes automatically?
No. It asks you to choose an action first. A tagged push runs git push origin main --tags; findings are previewed with --dry-run and applied only after approval.
Source text
SKILL.md · MIT
---
name: harness:deploy
description: "Use when the user is done evolving and wants to finalize, clean up, tag the result, or push the optimized agent."
allowed-tools: [Read, Write, Bash, Glob, AskUserQuestion]
---
# /harness:deploy
Finalize the evolution results. In v3, the best code is already in the main branch (auto-merged during evolve). Deploy is about cleanup, tagging, and pushing.
## What To Do
```bash
TOOLS="${EVOLVER_TOOLS:-$([ -d ".evolver/tools" ] && echo ".evolver/tools" || echo "$HOME/.evolver/tools")}"
EVOLVER_PY="${EVOLVER_PY:-$([ -f "$HOME/.evolver/venv/bin/python" ] && echo "$HOME/.evolver/venv/bin/python" || echo "python3")}"
```
### 1. Show Results
```bash
python3 -c "
import json
c = json.load(open('.evolver.json'))
baseline = c['history'][0]['score'] if c['history'] else 0
best = c['best_score']
improvement = best - baseline
print(f'Baseline: {baseline:.3f}')
print(f'Best: {best:.3f} (+{improvement:.3f}, {improvement/max(baseline,0.001)*100:.0f}% improvement)')
print(f'Iterations: {c[\"iterations\"]}')
print(f'Experiment: {c[\"best_experiment\"]}')
"
```
Show git diff from before evolution started:
```bash
git log --oneline --since="$(python3 -c "import json; print(json.load(open('.evolver.json'))['created_at'][:10])")" | head -20
```
### 2. Ask What To Do (interactive)
```json
{
"questions": [{
"question": "Evolution complete. What would you like to do?",
"header": "Deploy",
"multiSelect": false,
"options": [
{"label": "Tag and push", "description": "Create a git tag with the score and push to remote"},
{"label": "Just review", "description": "Show the full diff of all changes made during evolution"},
{"label": "Clean up only", "description": "Remove temporary files (trace_insights.json, etc.) but don't push"},
{"label": "Promote learnings", "description": "Add proven evolution insights to CLAUDE.md (permanent knowledge)"}
]
}]
}
```
### 3. Execute
**If "Tag and push"**:
```bash
VERSION=$(python3 -c "import json; c=json.load(open('.evolver.json')); print(f'evolver-v{c[\"iterations\"]}')")
SCORE=$(python3 -c "import json; print(f'{json.load(open(\".evolver.json\"))[\"best_score\"]:.3f}')")
git tag -a "$VERSION" -m "Evolver: score $SCORE"
git push origin main --tags
```
**If "Just review"**:
```bash
git diff HEAD~{iterations} HEAD
```
**If "Clean up only"**:
```bash
rm -f trace_insights.json best_results.json comparison.json production_seed.md production_seed.json
```
**If "Promote learnings"**:
```bash
$EVOLVER_PY $TOOLS/promote_learnings.py --memory evolution_memory.md --target CLAUDE.md --threshold 5 --dry-run
```
Show the dry-run output. If the user approves, run without `--dry-run`.
### 4. Report
- What was done
- LangSmith experiment URL for the best result
- Suggest reviewing the changes before deploying to production
© raphaelchristi · MIT · raphaelchristi/harness-evolver