[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme:autoharness":3},"\u003Ch1>AutoHarness\u003C\u002Fh1>\n\u003Cp align=\"center\">\u003Cstrong>Self-Learning Skills for Claude Code\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdynamic\u002Fjson?url=https%3A%2F%2Fraw.githubusercontent.com%2Ftigerless-labs%2Fautoharness%2Fmain%2F.claude-plugin%2Fplugin.json&amp;query=%24.version&amp;label=release&amp;prefix=v&amp;color=brightgreen\" alt=\"release\" \u002F> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.11%2B-blue.svg\" alt=\"python\" \u002F> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Linux%20%7C%20macOS-lightgrey.svg\" alt=\"platform\" \u002F> \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-yellow.svg\" alt=\"license MIT\" \u002F>\n\u003C\u002Fp>\u003Cp>\u003Cstrong>autoharness is a self-learning skill layer for Claude Code.\u003C\u002Fstrong> It \u003Cstrong>learns\u003C\u002Fstrong> skills from your real\nsessions, \u003Cstrong>merges\u003C\u002Fstrong> same-scenario ones instead of stacking near-duplicates, \u003Cstrong>updates\u003C\u002Fstrong> them in use,\nand \u003Cstrong>prunes\u003C\u002Fstrong> any that stop getting used — so the layer \u003Cstrong>stays clean on its own\u003C\u002Fstrong>, \u003Cstrong>touching only\nthe skills it wrote itself\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>Same model, different harness — 42% → 78% on CORE-Bench (\u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2510.11977\" rel=\"nofollow ugc noopener\">HAL\u003C\u002Fa>).\nThe harness does much of the work (swyx's \u003Cstrong>Big Model vs Big Harness\u003C\u002Fstrong>), yet it's still rebuilt by\nhand every model generation. autoharness bets one slice of it — the skill layer — can maintain itself.\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Cstrong>Learns from real work\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Each episode is distilled into a skill from the session you were already having — no separate data-collection or replay loop. It fires on its own once a session has done enough work; \u003Ccode>\u002Flearn\u003C\u002Fcode> distills on demand when you want a lesson kept now.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Groups, doesn't just pile up\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>A new episode doesn't always add a skill — the reflector compares it against what's there and folds same-scenario skills into one, so the layer consolidates by category instead of accreting near-duplicates. A fold records which skill absorbed which, so a merge is never mistaken for a death.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Keeps its own library in view\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Every session opens with a grouped index of the skills it wrote, so recall doesn't depend on the host happening to surface them. The host's native recall is left exactly as it was; the index is added on top.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Validated in use, not on a benchmark\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>A skill survives by being adhered to in later turns (loads over the requests it was available for), not a held-out score. No oracle on the active path, and no tokens spent on a dedicated eval.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Only its own skills\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Touches only the skills it generated through this plugin — everything else, whether you wrote it or installed it, is left completely alone.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Evidence kept for later\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Every create\u002Fupdate logs its scenario and decision to a per-skill ledger — the raw material to build a benchmark from real usage if you ever want one.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2>Install\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Requires Python 3.11+ as the \u003Ccode>python3\u003C\u002Fcode> on your PATH\u003C\u002Fstrong> — autoharness runs entirely as Python\n(zero third-party dependencies); its hooks and MCP server won't fire without it. The hooks resolve\nbare \u003Ccode>python3\u003C\u002Fcode>, so an older interpreter earlier on your PATH (Xcode ships 3.9.6 at\n\u003Ccode>\u002Fusr\u002Fbin\u002Fpython3\u003C\u002Fcode>) turns every hook off for the session; autoharness says so on stderr.\u003C\u002Fp>\n\u003Cp>Type these in the Claude Code input box.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002Fplugin marketplace add tigerless-labs\u002Fautoharness\n\u002Fplugin install autoharness@autoharness\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Then run \u003Ccode>\u002Freload-plugins\u003C\u002Fcode> (or restart Claude Code).\u003C\u002Fp>\n\u003Cp>Zero config. It now watches your sessions and lands learned skills into \u003Ccode>.claude\u002Fskills\u002F\u003C\u002Fcode> in the\nbackground. Cadence and lifecycle thresholds are tunable — see \u003Ca href=\"#configuration\" rel=\"nofollow ugc noopener\">Configuration\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Nothing to invoke, but one entry point exists when you want it: \u003Cstrong>\u003Ccode>\u002Flearn\u003C\u002Fcode>\u003C\u002Fstrong> distills the session\nyou're in right now — say it after working something out and the lesson goes through the same\nproposal-and-validation chain the background pass uses.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>MCP server naming.\u003C\u002Fstrong> The \u003Ccode>.mcp.json\u003C\u002Fcode> registers the server as \u003Ccode>stage_skill\u003C\u002Fcode>, but agent\ndefinitions reference the fully-qualified name \u003Ccode>mcp__plugin_autoharness_stage_skill__stage_skill\u003C\u002Fcode>.\nThis translation is automatic: the plugin runt\u003C\u002Fp>\n",1791678831770]