Skip to main content
ClaudeWave
EN, English
tigerless-labs / Plugins

autoharness

Autoharness — a self-learning skill layer for Claude Code — distills skills from your real sessions, updates them as you work, and prunes the ones that stop getting used. No daemon, no benchmark.

  • 10.6k stars
  • 617 forks
  • 68 open issues
  • Language: Python
  • License: MIT
  • updated

Install

Claude Code
/plugin marketplace add tigerless-labs/autoharness
/plugin install autoharness
  1. Inside Claude Code, add the marketplace and install the plugin with the commands above.
  2. Follow any post-install configuration from the README.
  3. Restart the session if commands or hooks do not show up immediately.
Installable items

2 items in this repository

curatorSubagent

Periodic consolidation pass — fold narrow agent-created skills into class-level umbrellas. Proposes intents only, never writes to disk.

Install
reflectorSubagent

Distill a finished episode into skill changes aligned with the existing library. Compare-first preference, generation stays open; proposes intents only, never writes to disk.

Install
README

Plugins overview

Full README on GitHub

AutoHarness Self-Learning Skills for Claude Code

autoharness is a self-learning skill layer for Claude Code. It learns skills from your real sessions, merges same-scenario ones instead of stacking near-duplicates, updates them in use, and prunes any that stop getting used — so the layer stays clean on its own, touching only the skills it wrote itself.

Same model, different harness — 42% → 78% on CORE-Bench (HAL). The harness does much of the work (swyx's Big Model vs Big Harness), yet it's still rebuilt by hand every model generation. autoharness bets one slice of it — the skill layer — can maintain itself.

Learns from real workEach 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; /learn distills on demand when you want a lesson kept now.
Groups, doesn't just pile upA 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.
Keeps its own library in viewEvery 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.
Validated in use, not on a benchmarkA 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.
Only its own skillsTouches only the skills it generated through this plugin — everything else, whether you wrote it or installed it, is left completely alone.
Evidence kept for laterEvery create/update 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.

Install

Requires Python 3.11+ as the python3 on your PATH — autoharness runs entirely as Python (zero third-party dependencies); its hooks and MCP server won't fire without it. The hooks resolve bare python3, so an older interpreter earlier on your PATH (Xcode ships 3.9.6 at /usr/bin/python3) turns every hook off for the session; autoharness says so on stderr.

Type these in the Claude Code input box.

/plugin marketplace add tigerless-labs/autoharness
/plugin install autoharness@autoharness

Then run /reload-plugins (or restart Claude Code).

Zero config. It now watches your sessions and lands learned skills into .claude/skills/ in the background. Cadence and lifecycle thresholds are tunable — see Configuration.

Nothing to invoke, but one entry point exists when you want it: /learn distills the session you're in right now — say it after working something out and the lesson goes through the same proposal-and-validation chain the background pass uses.

MCP server naming. .claude-plugin/plugin.json registers the server as stage_skill, but agent definitions reference the fully-qualified name mcp__plugin_autoharness_stage_skill__stage_skill. This translation is automatic: the plugin runtime constructs the qualified name from the plugin name (autoharness) and the server key. Outside the plugin context (e.g., registering the server by hand), the tool would be available as mcp__stage_skill__stage_skill — but the agent allowlists still reference the plugin-namespaced form. Always install as a plugin to match both names. The server is declared in the manifest, not in a root .mcp.json, because the plugin root is the repo root: a .mcp.json there would also be this checkout's project config, which outranks the plugin's same-command server and leaves the reflector without its tool in sessions inside the repo.

Update

Update and uninstall are shown in their terminal form (claude plugin …); inside Claude Code the same operations live in the /plugin menu.

Update from a terminal — refresh the catalog by marketplace name, then update the plugin by its full plugin@marketplace id, then restart:

claude plugin marketplace update autoharness
claude plugin update autoharness@autoharness

Then restart Claude Code to apply — a version bump is a fresh cached copy, not a hot reload.

The refresh is first on purpose: without it, update checks a stale local catalog and may report already at the latest version when a newer release actually shipped.

Third-party marketplaces have auto-update off by default. To make future releases hands-off, enable it once: /plugin → Marketplaces → autoharness → Enable auto-update. The installed copy is cached by the version in plugin.json; a release reaches users only when that field is bumped.

Uninstall

claude plugin uninstall autoharness@autoharness
claude plugin marketplace remove autoharness

Uninstalling only stops it from running — the skills it landed and its own state live outside the plugin and stay on disk. To clear those too, delete its state dir (~/.claude/autoharness/ global, /.claude/autoharness/ per project) and the self-authored skills under .claude/skills/ (each carries a self-authored ledger marker, so they're easy to tell from yours). Your own skills are never touched.

Configuration

Every knob is an AUTOHARNESS_* environment variable with a built-in default — nothing to configure unless you want to change the pace.

Placement — which layers it manages

VariableDefaultWhat it does
AUTOHARNESS_DISABLE_GLOBAL0Set to 1 for a project-only deployment. Global create intents are rejected before staging and landing; global request/use/view counters, archiving, orphan sweeps, recall, curator snapshots, and metrics are skipped. Existing global skills stay untouched. Project-layer learning continues normally.

Cadence — when it learns

VariableDefaultWhat it does
AUTOHARNESS_REFLECT_EVERY_N50Reflection cadence, counted in tool calls, not turns: every main-session tool call advances a counter, and the turn that pushes it past N ends with a background reflection. A working stretch triggers; a conversation that only talks never does. Lower = learns faster and spawns more child sessions.
AUTOHARNESS_CONSOLIDATE_EVERY_N250Same quantum for the curator, the periodic pass that merges the library as a whole. Held well above the reflection cadence — consolidation is rarer than distillation.
AUTOHARNESS_DIGEST_EXCHANGES20How many exchanges before the episode window are compressed into the reflector's prior-context digest (text + tool names only). Unused by the fork carrier, which replays the real conversation instead.
AUTOHARNESS_CARRIERbundleWhat carries the reflection. bundle hands a redacted window + digest to a fresh subagent. fork resumes and forks the session that just ended, so the reflector reads the real conversation on the parent's warm cache. Stays bundle until the cache-hit measurement is in.

Recall — what the model sees

VariableDefaultWhat it does
AUTOHARNESS_INDEX_SUSPENDED0Set to 1 to stop injecting the index entirely. Everything else keeps running — the lifecycle pass, the use/view counters, the last-run summary — so this is the switch for measuring what the index is actually worth, and for anyone unwilling to spend the context on it.
AUTOHARNESS_INDEX_DESC_MAX_CHARS60Per-line description budget in the session-start index. The index is a scan surface, not the full trigger text — raise it for longer lines, at the cost of context on every session.
AUTOHARNESS_SKILL_DESC_MAX_CHARS1024Hard cap on a skill's own description, matching the host's documented limit; a longer one is rejected rather than silently truncated at load.
AUTOHARNESS_SKILL_BODY_MAX_LINES25Altitude cap: a SKILL.md body over this many non-blank lines is rejected as a transcript rather than a rule. Backing detail belongs in the skill's references/.

Lifecycle — what survives

VariableDefaultWhat it does
AUTOHARNESS_MATURITY_PROJECT100Probation gate, project layer: after this many requests have arrived in its layer since a skill landed, it faces graduation review. Until then it's recalled as usual but can't be archived.
AUTOHARNESS_MATURITY_GLOBAL300Same gate for the global layer — higher because a global skill loads in every project.
Topics
agent-skillsclaude-codeclaude-code-pluginllm-agentspython
Frequently asked

What people ask about autoharness

What is tigerless-labs/autoharness?

tigerless-labs/autoharness is plugins for the Claude AI ecosystem. Autoharness — a self-learning skill layer for Claude Code — distills skills from your real sessions, updates them as you work, and prunes the ones that stop getting used. No daemon, no benchmark. It has 10.6k GitHub stars and its last recorded update is dated 2026-10-15.

How do I install autoharness?

You can install autoharness by cloning the repository (https://github.com/tigerless-labs/autoharness) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is tigerless-labs/autoharness safe to use?

Our security agent has analyzed tigerless-labs/autoharness and assigned a Trust Score of 100/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.

Who maintains tigerless-labs/autoharness?

tigerless-labs/autoharness is maintained by tigerless-labs. The last recorded GitHub activity is dated 2026-10-15, with 68 open issues.

Are there alternatives to autoharness?

Yes. On ClaudeWave you can browse similar plugins at /categories/plugins, sorted by popularity or recent activity.