Install any skill in seconds. Free to start, no credit card required.
Get Started Free →GAN-inspired Generator-Evaluator agent harness for building high-quality applications autonomously. Based on Anthropic's March 2026 harness design paper.
.claude/skills/gan-style-harness/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 117% | 0% |
| case-01 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 376% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 199% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 288% | 0% |
> Inspired by Anthropic's Harness Design for Long-Running Application Development (March 24, 2026)
A multi-agent harness that separates generation from evaluation, creating an adversarial feedback loop that drives quality far beyond what a single agent can achieve.
> When asked to evaluate their own work, agents are pathological optimists — they praise mediocre output and talk themselves out of legitimate issues. But engineering a separate evaluator to be ruthlessly strict is far more tractable than teaching a generator to self-critique.
This is the same dynamic as GANs (Generative Adversarial Networks): the Generator produces, the Evaluator critiques, and that feedback drives the next iteration.
claude -p) ┌─────────────┐
│ PLANNER │
│ (Sonnet) │
└──────┬──────┘
│ Product Spec
│ (features, sprints, design direction)
▼
┌────────────────────────┐
│ │
│ GENERATOR-EVALUATOR │
│ FEEDBACK LOOP │
│ │
│ ┌──────────┐ │
│ │GENERATOR │--build-->│──┐
│ │ (Sonnet) │ │ │
│ └────▲─────┘ │ │
│ │ │ │ live app
│ feedback │ │
│ │ │ │
│ ┌────┴─────┐ │ │
│ │EVALUATOR │<-test----│──┘
│ │ (Sonnet) │ │
│ │+Playwright│ │
│ └──────────┘ │
│ │
│ 5-15 iterations │
└────────────────────────┘Role: Product manager — expands a brief prompt into a full product specification.
Key behaviors:
Model: Sonnet by default; raise via GAN_PLANNER_MODEL=opus for deeper spec expansion
Role: Developer — implements features according to the spec.
Key behaviors:
Model: Sonnet by default; raise via GAN_GENERATOR_MODEL=opus for maximum coding capability
Role: QA engineer — tests the live running application, not just code.
Key behaviors:
Model: Sonnet by default; raise via GAN_EVALUATOR_MODEL=opus for stronger judgment + tool use
The default four criteria, each scored 1-10:
markdown## Evaluation Rubric ### Design Quality (weight: 0.3) - 1-3: Generic, template-like, "AI slop" aesthetics - 4-6: Competent but unremarkable, follows conventions - 7-8: Distinctive, cohesive visual identity - 9-10: Could pass for a professional designer's work ### Originality (weight: 0.2) - 1-3: Default colors, stock layouts, no personality - 4-6: Some custom choices, mostly standard patterns - 7-8: Clear creative vision, unique approach - 9-10: Surprising, delightful, genuinely novel ### Craft (weight: 0.3) - 1-3: Broken layouts, missing states, no animations - 4-6: Works but feels rough, inconsistent spacing - 7-8: Polished, smooth transitions, responsive - 9-10: Pixel-perfect, delightful micro-interactions ### Functionality (weight: 0.2) - 1-3: Core features broken or missing - 4-6: Happy path works, edge cases fail - 7-8: All features work, good error handling - 9-10: Bulletproof, handles every edge case
bash# Full three-agent harness /project:gan-build "Build a project management app with Kanban boards, team collaboration, and dark mode" # With custom config /project:gan-build "Build a recipe sharing platform" --max-iterations 10 --pass-threshold 7.5 # Frontend design mode (generator + evaluator only, no planner) /project:gan-design "Create a landing page for a crypto portfolio tracker"
bash# Basic usage ./scripts/gan-harness.sh "Build a music streaming dashboard" # With options GAN_MAX_ITERATIONS=10 \ GAN_PASS_THRESHOLD=7.5 \ GAN_EVAL_CRITERIA="functionality,performance,security" \ ./scripts/gan-harness.sh "Build a REST API for task management"
bash# Step 1: Plan claude -p --model sonnet "You are a Product Planner. Read PLANNER_PROMPT.md. Expand this brief into a full product spec: 'Build a Kanban board app'. Write spec to spec.md" # Step 2: Generate (iteration 1) claude -p --model sonnet "You are a Generator. Read spec.md. Implement Sprint 1. Start the dev server on port 3000." # Step 3: Evaluate (iteration 1) claude -p --model sonnet --allowedTools "Read,Bash,mcp__playwright__*" "You are an Evaluator. Read EVALUATOR_PROMPT.md. Test the live app at http://localhost:3000. Score against the rubric. Write feedback to feedback-001.md" # Step 4: Generate (iteration 2 — reads feedback) claude -p --model sonnet "You are a Generator. Read spec.md and feedback-001.md. Address all issues. Improve the scores." # Repeat steps 3-4 until pass threshold met
The harness should simplify as models improve. Following Anthropic's evolution:
> Key principle: Every harness component encodes an assumption about what the model can't do alone. When models improve, re-test those assumptions. Strip away what's no longer needed.
| Variable | Default | Description | |----------|---------|-------------| | GAN_MAX_ITERATIONS | 15 | Maximum generator-evaluator cycles | | GAN_PASS_THRESHOLD | 7.0 | Weighted score to pass (1-10) | | GAN_PLANNER_MODEL | sonnet | Model for planning agent | | GAN_GENERATOR_MODEL | sonnet | Model for generator agent | | GAN_EVALUATOR_MODEL | sonnet | Model for evaluator agent | | GAN_EVAL_CRITERIA | design,originality,craft,functionality | Comma-separated criteria | | GAN_DEV_SERVER_PORT | 3000 | Port for the live app | | GAN_DEV_SERVER_CMD | npm run dev | Command to start dev server | | GAN_PROJECT_DIR | . | Project working directory | | GAN_SKIP_PLANNER | false | Skip planner, use spec directly | | GAN_EVAL_MODE | playwright | playwright, screenshot, or code-only |
| Mode | Tools | Best For | |------|-------|----------| | playwright | Browser MCP + live interaction | Full-stack apps with UI | | screenshot | Screenshot + visual analysis | Static sites, design-only | | code-only | Tests + linting + build | APIs, libraries, CLI tools |
feedback-NNN.md at the start of each iteration.GAN_MAX_ITERATIONS. If the generator can't improve past a score plateau after 3 iterations, stop and flag for human review.Based on Anthropic's published results:
| Metric | Solo Agent | GAN Harness | Improvement | |--------|-----------|-------------|-------------| | Time | 20 min | 4-6 hours | 12-18x longer | | Cost | $9 | $125-200 | 14-22x more | | Quality | Barely functional | Production-ready | Phase change | | Core features | Broken | All working | N/A | | Design | Generic AI slop | Distinctive, polished | N/A |
The tradeoff is clear: ~20x more time and cost for a qualitative leap in output quality. This is for projects where quality matters.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→pass | 11,321 | 5,449 | -52% | 1 | 1 | 0% | 1,773 | 3,855 | +117% | 0 | 0 | — |
case-01 | fail→pass | 22,730 | 6,414 | -72% | 1 | 1 | 0% | 4,983 | 4,212 | -15% | 0 | 0 | — |
case-02 | fail→fail | 8,452 | 7,057 | -17% | 1 | 1 | 0% | 292 | 3,301 | +1030% | 0 | 0 | — |
case-03 | fail→fail | 30,483 | 28,779 | -6% | 1 | 1 | 0% | 6,201 | 9,193 | +48% | 0 | 0 | — |
case-04 | fail→pass | 4,343 | 2,561 | -41% | 1 | 1 | 0% | 715 | 3,405 | +376% | 0 | 0 | — |
case-06 | pass→pass | 8,180 | 5,355 | -35% | 1 | 1 | 0% | 1,421 | 3,874 | +173% | 0 | 0 | — |
case-07 | fail→pass | 7,235 | 5,084 | -30% | 1 | 1 | 0% | 1,296 | 3,877 | +199% | 0 | 0 | — |
case-08 | fail→pass | 5,502 | 6,512 | +18% | 1 | 1 | 0% | 918 | 3,562 | +288% | 0 | 0 | — |
case-09 | fail→pass | 12,820 | 3,183 | -75% | 1 | 1 | 0% | 2,322 | 3,433 | +48% | 0 | 0 | — |
case-18 | fail→pass | 16,833 | 14,829 | -12% | 1 | 1 | 0% | 2,689 | 5,494 | +104% | 0 | 0 | — |
case-10 | pass→pass | 11,523 | 3,076 | -73% | 1 | 1 | 0% | 2,067 | 3,451 | +67% | 0 | 0 | — |
case-11 | fail→pass | 16,458 | 10,950 | -33% | 1 | 1 | 0% | 2,506 | 4,815 | +92% | 0 | 0 | — |
case-12 | fail→fail | 6,138 | 2,185 | -64% | 1 | 1 | 0% | 994 | 3,338 | +236% | 0 | 0 | — |
case-13 | fail→pass | 3,626 | 2,848 | -21% | 1 | 1 | 0% | 603 | 3,529 | +485% | 0 | 0 | — |
case-19 | pass→fail | 7,562 | 3,309 | -56% | 1 | 1 | 0% | 1,185 | 3,451 | +191% | 0 | 0 | — |
case-14 | fail→pass | 6,570 | 1,954 | -70% | 1 | 1 | 0% | 1,110 | 3,297 | +197% | 0 | 0 | — |
case-15 | fail→pass | 24,093 | 1,331 | -94% | 1 | 1 | 0% | 1,665 | 3,141 | +89% | 0 | 0 | — |
case-16 | fail→pass | 10,064 | 3,246 | -68% | 1 | 1 | 0% | 1,673 | 3,544 | +112% | 0 | 0 | — |
case-17 | fail→pass | 13,203 | 4,136 | -69% | 1 | 1 | 0% | 2,113 | 3,694 | +75% | 0 | 0 | — |
case-20 | pass→pass | 13,995 | 14,638 | +5% | 1 | 1 | 0% | 2,265 | 5,263 | +132% | 0 | 0 | — |
case-21 | fail→pass | 7,237 | 2,288 | -68% | 1 | 1 | 0% | 1,558 | 3,439 | +121% | 0 | 0 | — |
case-22 | fail→pass | 18,210 | 4,241 | -77% | 1 | 1 | 0% | 3,277 | 3,775 | +15% | 0 | 0 | — |
case-23 | pass→pass | 11,049 | 1,228 | -89% | 1 | 1 | 0% | 2,003 | 3,154 | +57% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 22 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +61 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/27/2026 | +50% |
Other measured skills in the registry, with their headline benchmark lift.