/harness-gepa
Load, validate or render a GEPA genome, or classify failure modes in a run transcript, via @metaharness/darwin/gepa. Use when inspecting or auditing a genome; use harness-evolve for sandbox-scored evolution. Degrades gracefully without darwin.
Claude Code
$ npx -y skills add ruvnet/ruflo --skill harness-gepa --agent claude-code
Codex
$ npx skills add ruvnet/ruflo --skill harness-gepa -a codex -y
Cursor
$ npx skills add ruvnet/ruflo --skill harness-gepa -a cursor -y
Gemini CLI
$ npx skills add ruvnet/ruflo --skill harness-gepa -a gemini-cli -y
GitHub Copilot
$ npx skills add ruvnet/ruflo --skill harness-gepa -a github-copilot -y
OpenCode
$ npx skills add ruvnet/ruflo --skill harness-gepa -a opencode -y
Windsurf
$ npx skills add ruvnet/ruflo --skill harness-gepa -a windsurf -y
SKILL.md
harness-gepa.SKILL.mdname: harness-gepa
description: Load, validate or render a GEPA genome, or classify failure modes in a run transcript, via @metaharness/darwin/gepa. Use when inspecting or auditing a genome; use harness-evolve for sandbox-scored evolution. Degrades gracefully without darwin.
argument-hint: "--op genome|validate|render|analyze [--path <genome.json>] [--transcript <t.json>] [--alert-on-invalid]"
allowed-tools: Bash
Surfaces the GEPA (genetic-evolution prompt-adaptation) *library* exports from `@metaharness/darwin/gepa`. Unlike the other skills in this plugin there is no CLI binary behind this — the script dynamic-imports the library (local resolution first, versioned cache install as fallback) and calls the subprocess-safe subset.
When to use
- **Adopting an evolved policy**: `--op render` shows the actual system
prompt a genome compiles to — read THAT, not the raw JSON, before wiring a genome into a harness.
- **Auditing a promotion**: `--op genome` loads + validates the shipped
cand-6 genome (first holdout-confirmed cheap-tier promotion; provenance ships in the package) or any genome file you point at.
- **CI gate on genome edits**: `--op validate --alert-on-invalid` exits 1
on structural errors.
- **Debugging a bad run**: `--op analyze --transcript run.json` classifies
failure modes (GEPA's failure-class taxonomy) from a transcript array.
What is deliberately NOT here
`gepaOptimize` — the optimization loop takes an in-process `evaluate(candidate)` callback ("bring your own evaluator") that cannot cross a subprocess boundary. Two supported paths instead:
1. **Library consumers**: `import { gepaOptimize, loadCand6Genome } from '@metaharness/darwin/gepa'` 2. **Sandbox-scored evolution**: `harness-evolve` (darwin CLI `evolve`), which pairs GEPA with its own sandbox evaluators.
Algorithm
Implementation: [`scripts/gepa.mjs`](../../scripts/gepa.mjs).
1. `import('@metaharness/darwin/gepa')`; on MODULE_NOT_FOUND fall back to a one-time `npm install --prefix ~/.ruflo/darwin-cache-<pin>` and import the cached `dist/gepa/index.js` (versioned dir → pin bumps invalidate). 2. Dispatch `--op`:
- `genome` → `loadGenome(fs, path)` or `loadCand6Genome()` + `validateGenome`
- `validate` → `validateGenome(rawJson)` (raw parse so broken files reach
the validator instead of throwing in the loader)
- `render` → `buildSystemFromGenome(genome, ext?, glob?)`
- `analyze` → `analyzeTranscript(entries)`
3. Emit one JSON object; exit 0 (or 1 under `--alert-on-invalid`, 2 on bad input).
Examples
node scripts/gepa.mjs --op genome # cand-6 + validation
node scripts/gepa.mjs --op render | jq -r .system # what does cand-6 SAY?
node scripts/gepa.mjs --op validate --path my-genome.json --alert-on-invalid
node scripts/gepa.mjs --op analyze --transcript run.json
Exit codes
- `0` — op completed (or degraded — darwin not installable)
- `1` — `--alert-on-invalid` and validation found errors
- `2` — config error (unknown op, missing/broken input file)
Read more
name: harness-gepa description: Load, validate or render a GEPA genome, or classify failure modes in a run transcript, via @metaharness/darwin/gepa. Use when inspecting or auditing a genome; use harness-evolve for sandbox-scored evolution. Degrades gracefully without darwin. argument-hint: "--op genome|validate|render|analyze [--path <genome.json>] [--transcript <t.json>] [--alert-on-invalid]" allowed-tools: Bash
Surfaces the GEPA (genetic-evolution prompt-adaptation) *library* exports from `@metaharness/darwin/gepa`. Unlike the other skills in this plugin there is no CLI binary behind this — the script dynamic-imports the library (local resolution first, versioned cache install as fallback) and calls the subprocess-safe subset.
When to use
- **Adopting an evolved policy**: `--op render` shows the actual system
prompt a genome compiles to — read THAT, not the raw JSON, before wiring a genome into a harness.
- **Auditing a promotion**: `--op genome` loads + validates the shipped
cand-6 genome (first holdout-confirmed cheap-tier promotion; provenance ships in the package) or any genome file you point at.
- **CI gate on genome edits**: `--op validate --alert-on-invalid` exits 1
on structural errors.
- **Debugging a bad run**: `--op analyze --transcript run.json` classifies
failure modes (GEPA's failure-class taxonomy) from a transcript array.
What is deliberately NOT here
`gepaOptimize` — the optimization loop takes an in-process `evaluate(candidate)` callback ("bring your own evaluator") that cannot cross a subprocess boundary. Two supported paths instead:
1. **Library consumers**: `import { gepaOptimize, loadCand6Genome } from '@metaharness/darwin/gepa'` 2. **Sandbox-scored evolution**: `harness-evolve` (darwin CLI `evolve`), which pairs GEPA with its own sandbox evaluators.
Algorithm
Implementation: [`scripts/gepa.mjs`](../../scripts/gepa.mjs).
1. `import('@metaharness/darwin/gepa')`; on MODULE_NOT_FOUND fall back to a one-time `npm install --prefix ~/.ruflo/darwin-cache-<pin>` and import the cached `dist/gepa/index.js` (versioned dir → pin bumps invalidate). 2. Dispatch `--op`:
- `genome` → `loadGenome(fs, path)` or `loadCand6Genome()` + `validateGenome`
- `validate` → `validateGenome(rawJson)` (raw parse so broken files reach
the validator instead of throwing in the loader)
- `render` → `buildSystemFromGenome(genome, ext?, glob?)`
- `analyze` → `analyzeTranscript(entries)`
3. Emit one JSON object; exit 0 (or 1 under `--alert-on-invalid`, 2 on bad input).
Examples
node scripts/gepa.mjs --op genome # cand-6 + validation node scripts/gepa.mjs --op render | jq -r .system # what does cand-6 SAY? node scripts/gepa.mjs --op validate --path my-genome.json --alert-on-invalid node scripts/gepa.mjs --op analyze --transcript run.json
Exit codes
- `0` — op completed (or degraded — darwin not installable)
- `1` — `--alert-on-invalid` and validation found errors
- `2` — config error (unknown op, missing/broken input file)
📖 RuFlo Explained — Build an AI Team That Plans, Remembers, Tests, and Improves A 14-chapter guide: from the basic idea to a first useful task, then memory, agent teams, plugins, cost and verification. Agent = Model + Harness.
Other skills on ruflo.
More skills from other plugins.
agentmail
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
bmad
Answers BMad questions and recommends the next skill from what is installed. Use when the user asks bmad for help, what to do…
Questions about harness-gepa.
- Which coding agents can use harness-gepa?
- harness-gepa installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

