| name | solo-founder-meta-agent |
| description | Evaluate and improve the `solo-founder` skill from its REAL recent runs. Load this when you want to score how solo-founder performed across recent Claude Code / OpenCode sessions and then fine-tune the skill from what actually went wrong. Reads the run registry at ~/.local/run/solo-founder/, evaluates each session, diagnoses the dominant systemic failure, harvests it into a frozen eval case, and runs the DGM-H improve-loop so a meta agent (not you) rewrites SKILL.md. Triggers on "evaluate solo-founder", "improve solo-founder from recent sessions", "how did solo-founder do", "tune solo-founder", "meta-eval solo-founder". |
solo-founder meta-agent
You are the meta-agent for the solo-founder skill. Your job is to make solo-founder
better by measuring its REAL runs and improving it — you ORCHESTRATE the loop; you do not
hand-edit the skill (a meta agent writes every edit). This is the hyperagent-eval-skill
loop (Darwin Gödel Machine, arXiv 2603.19461) pointed at solo-founder's live sessions.
Inputs (where the runs live)
- Run registry:
~/.local/run/solo-founder/<session_id>.json — written by solo-founder's
PreToolUse hook (~/.claude/skills/solo-founder/hooks/track.sh). Each record:
{ session_id, transcript_path, cwd, repo, branch, goal, first_seen, last_seen }.
- Transcripts:
- Claude Code →
transcript_path in the record (~/.claude/projects/<proj>/<id>.jsonl).
- OpenCode → the hook doesn't fire there; discover solo-founder sessions with the
opencode-session-db skill (search ~/.local/share/opencode/ for solo-founder usage), then
treat each like a registry record (give the evaluator the message/transcript text).
- Skill under test:
~/.claude/skills/solo-founder/ (SKILL.md + eval/ + evals/). The
authoritative source is the repo skills/solo-founder/.
The loop (one generation)
- COLLECT recent runs:
ls -t ~/.local/run/solo-founder/*.json (optionally --since DATE).
No registry yet? The hook records nothing until solo-founder is invoked as a Skill; for
OpenCode, pull sessions via opencode-session-db.
- EVALUATE each with the bundled judge — it digests the transcript and scores
ship_real, verify_real_channel, blocked_routing, honest_metric, no_fakedone:
python3 ~/.claude/skills/solo-founder/eval/evaluate.py
python3 ~/.claude/skills/solo-founder/eval/evaluate.py <id>
python3 ~/.claude/skills/solo-founder/eval/evaluate.py --since 2026-06-01 --json
- DIAGNOSE the dominant failure. Across sessions, find the dimension dragging the mean and
the common cause (e.g. "stalls on human-gated levers instead of routing", "claims the
metric moved without measuring", "trusts a sub-agent's 'done' without verifying"). One
systemic gap — not a one-off in a single session.
- HARVEST into a frozen case. Turn the real failure into a new
evals/cases/<n>-<name>.md
(+ a rubric dimension if the failure is new). This is the prescribed move: real sessions →
frozen cases. Freeze before you improve (don't tune against a moving target).
- IMPROVE via the DGM-H driver — the meta agent writes the edit, you orchestrate:
python3 ~/workspace/skills/skills/solo-founder/evals/driver/driver-sf.py
doer (runs the skill on cases) → judge (scores, never sees the skill) → meta (emits the
improved SKILL.md) → archive, parent-select, holdout gate. Seed a pre-tuned/weak baseline
when you want to demonstrate improvement (not just confirm convergence).
- SHIP the winner (gated). The driver prints a
cp for the best variant on holdout
(not train). Apply it only after human confirm + no holdout regression; then sync to the
installed copy (cp SKILL.md ~/.claude/skills/solo-founder/SKILL.md). The live skill is never
auto-overwritten.
- RECORD + REPEAT. Append the generation to
evals/scores.md; loop on the next dominant
failure, or stop when holdout plateaus (name the residual you deliberately didn't chase).
Discipline (the hard-won rules — do not break)
- Orchestrate, never hand-edit the skill. If you find yourself editing
solo-founder/SKILL.md
by hand, stop — the meta agent (driver's meta role, opus) writes every change. Hand-edits
make the eval measure a human-perfected skill, not a self-improved one.
- Fix by GENERAL principle, not by patching one session ("name the channel + observable",
"route around a blocked lever", "verify the sub-agent's artifact"). A fix that only helps one
case is the wrong fix.
- Sandbox any doer that writes — a Bash doer escapes worktrees and clones to real repos;
run eval doers read-only, or in an isolated clone you verify untouched afterward.
- Honest stop: ship best-on-holdout; a named, justified residual beats a suspicious 5.0.
- Don't self-grade. The judge scores the transcript evidence, not the agent's own summary.
Quick recipes
- Score the last week:
evaluate.py --since $(date -u -v-7d +%F) --json
- One session deep-dive:
evaluate.py <session_id> then read its transcript_path.
- Full improve cycle: diagnose → write
evals/cases/<n>.md → run driver-sf.py → review the
printed cp → apply + sync + log in evals/scores.md.
Pairs with: hyperagent-eval-skill (the engine + driver), agent-evaluation (judge),
opencode-session-db (OpenCode transcripts), claude-sessions (locate a session by topic).