arXiv 2608.27454 ยท Google Research ยท built for Hermes Agent

Agents that write their
own skills โ€” from their own experience.

WikiSkill separates raw experience, a persistent wiki, and gated skills โ€” then runs a loop where a maintainer distills your agent's traces into knowledge and a proposer turns it into skills that earn their place or get rolled back.

๐Ÿ—‚๏ธ
Raw Experience
agent transcripts
๐Ÿ“š
Persistent Wiki
never rolled back
โœ๏ธ
Skill Proposals
SKILL.md candidates
๐Ÿ›ก๏ธ
Gated Rollout
R_val > R_best
5documented runs
$0.09per iteration
7bugs caught
46tests green
MITopen source

The three layers

The paper's insight: skill-evolution systems optimize skills, but the insights that guide skill design stay scattered across optimization histories. WikiSkill fixes that with a knowledge layer that never forgets.

๐Ÿ—‚๏ธ

Raw experience

Every inference run's full transcript is captured into an immutable raw layer โ€” successes and failures, with the actual tool calls.

  • hermes / claude backends
  • transcripts normalized
  • launch failures detected
๐Ÿ“š

Persistent wiki

A Wiki Maintainer agent samples low-scoring traces and distills them into pattern pages. The wiki is never rolled back โ€” knowledge compounds.

  • 5 pattern pages live
  • git audit trail
  • skill-impact.md anti-repetition
๐Ÿ›ก๏ธ

Gated skills

A Skill Proposer writes candidate SKILL.md files. Each is validated on held-out tasks and accepted only if R_val > R_best โ€” otherwise git-rolled-back.

  • strict improvement gate
  • isolated profile per workspace
  • harmful skills rejected live

The loop, in action

Real numbers from a real run on a free-tier model (gemini-2.5-flash-lite, 8 turns). Click through the stages โ€” this is what actually happened.

Quickstart

One loop, four commands. Evolution runs unattended overnight โ€” the machine learns while you sleep.

$ pip install wikiskill-hermes
$ wikiskill init demo --backend claude   # pin your agent
$ wikiskill evolve demo --iters 3 --model google/gemini-2.5-flash-lite --provider openrouter
โœ“ baseline validation: 9 val tasks, Sโ‚€=โˆ… โ†’ R=0.67
โœ“ iter 1: wiki maintenance โ†’ skill proposal โ†’ gate โ†’ R_val=0.44 โ†’ REJECTED (rolled back)
$ wikiskill compare demo nightly --iters 5  # did the skill actually help?

Why you can trust the numbers

The framework caught its own bug: a maintainer agent noticed that "dead" runs were being graded against stale files โ€” and the fix (fresh sandboxes per rollout) is now part of the harness. That's the loop policing itself.

phantom grading ยท fixed

Fresh sandboxes, always

Every rollout starts from a re-materialized task sandbox. A dead agent run scores 0.0 โ€” never a stale file from a previous experiment.

isolation

Your real setup is untouched

Each workspace gets its own profile (HERMES_HOME / CLAUDE_CONFIG_DIR) with fresh sessions and memory โ€” gating sees exactly the candidate skill set.

statistics

Significance, not vibes

wikiskill compare runs both sides N times and reports per-task win/loss/tie with a paired exact-binomial p-value.

audit trail

Every decision committed

The wiki, the proposals, the gate outcomes โ€” all in git. Rejected skills stay visible in skill-impact.md so they're never proposed twice.