Building the self-learning layer next-gen agents will ship with, learning skills from real work.
# Add to your Claude Code skills
git clone https://github.com/tigerless-labs/autoharnessGuides for using ai agents skills like autoharness.
Last scanned: 7/3/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-07-03T07:21:27.430Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how autoharness compares with popular alternatives.
autoharness is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by tigerless-labs. Building the self-learning layer next-gen agents will ship with, learning skills from real work. It has 11,125 GitHub stars.
Yes. autoharness passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/tigerless-labs/autoharness" and add it to your Claude Code skills directory (see the Installation section above).
autoharness is primarily written in Python. It is open-source under tigerless-labs on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh autoharness against similar tools.
No comments yet. Be the first to share your thoughts!
From $49 · 30 days · terms & refunds
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Automated security scan — not a certification.
With autoharness, we're building the self-learning layer next-gen agents will ship with, learning skills from real work. Today it runs on 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 work | 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; /learn distills on demand when you want a lesson kept now. |
| Groups, doesn't just pile up | A new episode doesn't always add a skill — the reflector compares it against writable live skills plus read-only owners (archives, installed-plugin skills, scheduled tasks, CLAUDE.md, and project auto-memory) before creating, then folds same-scenario learned skills into one. If a read-only owner needs the lesson, it records a suggestion instead of a duplicate. A fold records which skill absorbed which, so a merge is never mistaken for a death. |
| Keeps its own library in view | 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. |
| Validated in use, not on a benchmark | 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. |
| Only its own skills | Touches only the skills it generated through this plugin — everything else, whether you wrote it or installed it, is left completely alone. |
| Evidence kept for later | Every 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. |
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 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.
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 —
or $CLAUDE_CONFIG_DIR/autoharness/ when that is set — and <repo>/.claude/autoharness/ per project,
or everything under AUTOHARNESS_STATE_HOME if you set it) and the self-authored skills under
.claude/skills/ (each carries a self-authored ledger marker, so they're easy to tell from yours).
If you configured a skill prefix, also drop the one line it added to the repository's
.git/info/exclude. Your own skills are never touched.
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
| Variable | Default | What it does |
|---|---|---|
AUTOHARNESS_DISABLE_GLOBAL |
0 |
Set 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. |
AUTOHARNESS_GLOBAL_ROOT |
(unset) | Replaces the global layer root. Unset or blank follows $CLAUDE_CONFIG_DIR when set, otherwise ~/.claude. Set it when autoharness itself has to run sandboxed (a pinned clone, CI, an evaluation harness) and the production skills library must stay untouched. The project layer is unaffected. |
AUTOHARNESS_PROJECT_DIR |
.claude |
Directory under the project root whose skills/ holds the project layer. For example, .agents shares the library with other agent runtimes. |
AUTOHARNESS_STATE_HOME |
(unset) | Moves counters, intent queues, run accounts, snapshots, and the archive outside the layer roots into one directory per layer and root. Unset keeps state under each layer root. |
AUTOHARNESS_SKILL_PREFIX |
(unset) | Prefix required for every new skill name, such as ah-. On first landing in a Git repository, the matching skill-directory pattern is added to the clone-local shared info/exclude; hand-written skills remain visible to Git. |
AUTOHARNESS_CHILD_ISOLATION |
0 |
Set to 1 to launch reflector and curator children without user or project settings sources, with only this plugin loaded and no session persistence. Off by default because a child may depend on settings such as an apiKeyHelper. |
Cadence — when it learns
| Variable | Default | What it does |
|---|---|---|
AUTOHARNESS_REFLECT_EVERY_N |
50 |
Reflection 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_MIN_FLUSH_N |
1 |
Minimum tail size, in tool calls, that SessionEnd will flush to a reflector. The default preserves the existing flush-any-positive-tail behaviour. Raising it avoids full reflector runs for tiny sessions; a smaller tail is discarded when the session counter is cleared. This does not change the mid-session cadence above. |
AUTOHARNESS_CONSOLIDATE_EVERY_N |
250 |
Same 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_EXCHANGES |
20 |
How 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_CARRIER |