Airsc is free for everyone. If it helps you, support it with $2–$20.

Support
PluginSafeAgent workflow & memorySome setup

autoharness

tigerless-labs · tigerless-labs/autoharness

A self-learning skill layer for Claude Code that distills, updates, and prunes skills from real sessions to keep the agent's knowledge relevant.

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.

11k stars626License: MITUpdated 3 days ago0 opens

Preview

▍

What you can do with it

  • Automatically teach your Claude Code agent new skills based on your real-time interactions.
  • Maintain a clean and relevant skill library for your Claude Code agent without manual management.
  • Improve agent performance and efficiency by continuously refining its skill set through active use.

Safety check

Safe

No risky patterns found in the files we scanned.

Automated scan of the repo files. Always review code you run.

From the README

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, <repo>/.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/vie
View source on GitHub