harness-stripping
Systematically remove one harness component at a time and measure impact, killing scaffolding that no longer earns its complexity.
Skill by Archive228
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/archive228-harness-stripping
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: frontend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/harness-stripping
What's inside
- Skill name
harness-stripping- Description
- Systematically remove one harness component at a time and measure impact, killing scaffolding that no longer earns its complexity.
- License
- MIT
- Instructions
- 61 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Harness Stripping Every harness component was added to compensate for a specific model failure. Models improve. Components don't retire themselves. The scaffolding that saved you on Sonnet 4.5 may be dead weight — or actively harmful — on Opus 4.6. Strip it deliberately, one piece at a time, and let evals tell you what still earns its keep. Inspired by Prithvi's March 2026 harness post on evaluator-generator separation and the general "re-test your assumptions each model bump" discipline. ## When to apply - A model upgrade just landed and your harness was tuned for the previous generation. - A component's justification is "we added this because the model used to do X" — and you haven't checked whether it still does X. - The harness has accreted over months and nobody remembers what half the machinery is for. - Cost or latency is climbing and you suspect redundant belt-and-suspenders layers. ## Procedure 1. **Inventory the components.** List every distinct piece of scaffolding: prompt sections, tool wrappers, post-hoc validators, retry loops, evaluator personas, structured-output enforcers, sandbox rules. One row per component. Note the failure mode each was added to prevent. 2. **Rank by suspicion.** Put the components most likely to be obsolete at the top: anything added before the last two model bumps, anything targeting a failure mode you haven't seen recently, anything whose original justification is now folklore. 3. **Pick a baseline eval.** You need a repeatable metric before you touch anything. Reuse an existing eval set if you have one; otherwise pick 20–60 tasks representative of production work. Record baseline score, cost, and wall-clock. 4. **Strip one component.** Only one. Comment it out or gate it behind a flag — don't delete yet. Re-run the eval. 5. **Compare against baseline.** - Score within noise, cost/latency down → the component is dead weight. Delete. - Score drops measurably → the component still earns its complexity. Restore and note *what failure mode* returned. - Score *improves* → the component was actively harmful. Delete and investigate why (often: over-constraining a now-capable model). 6. **Commit the delta.** Land the strip (or the restore-with-notes) as its own commit. Do not batch multiple strips into one change — you lose the ability to attribute the score movement. 7. **Repeat for the next component.** Re-establish baseline from the *new* state each round, not the original. Compounding strips have compounding effects. ## Anti-patterns - **Stripping two components at once** — you can't tell which one mattered. Halve the signal, double the confusion. - **Skipping the eval "because it's obviously safe to remove"** — the harness accreted for reasons. Some are still real. Measure. - **Deleting instead of gating on the first pass** — you will want to A/B mid-review. Flag first, delete after the eval confirms. - **Trusting anecdotes over the eval** — "it feels better without it" is how load-bearing components get removed. If the eval doesn't show it, it isn't there. - **Stripping components that guard safety, sandboxing, or cost caps** — those aren't compensating for model weakness. Leave them. - **Doing this on prod traffic** — run against an eval set, not real users. The failure modes you're re-probing are exactly the ones that hurt users. ## What to strip first Highest yield in practice: - Structured-output enforcers layered on top of models that now emit valid JSON natively. - Multi-step "plan then execute" wrappers on tasks the model now one-shots. - Retry loops around tool calls that no longer flake. - Evaluator personas whose critiques the generator now anticipates on its own. - Verbose "remember to do X" prompt sections where X is now default behavior. ## When NOT to apply Don't strip mid-project on a live long-running run — you'll perturb sessions in flight. Do it between projects, or on a forked branch. Also skip if you don't have an eval you trust; stripping without measurement is guessing. ## Related - [[shift-notes]] — record which components were stripped and when, so the next audit doesn't re-strip and re-restore the same piece. - [[adversarial-verify]] — the evaluator-generator pattern that may itself be a strip candidate on newer models. - [[broken-window-check]] — if you strip a component and the eval regresses in a specific way, that's your new broken window to hunt.
From Archive228/loopkit, MIT.
More from Archive228/loopkit
- 0.701score
prompt-caching
Archive228
Cache the parts of the prompt that don't change so a long-running loop stops paying full price on every turn.
SkillCFreshness: C★ 755Claude Code +9 - 0.701score
hitl-escalate
Archive228
Escalate blocked runs to a human via configured channel or fallback to BLOCKED.md and exit the loop.
SkillCFreshness: C★ 755Claude Code +9 - 0.701score
structured-output
Archive228
Get JSON out of the model reliably.
SkillCFreshness: C★ 755Claude Code +9 - 0.701score
using-loopkit
Archive228
Use when starting any conversation in a loopkit-enabled project - establishes how to find and use loopkit's 49 skills, requiring skill invocation before ANY…
SkillCFreshness: C★ 755Claude Code +9 - 0.698score
feature-list-json
Archive228
Enumerate every end-to-end feature as strict JSON entries with passes:false, editable-passes-only discipline, and priority order.
SkillCFreshness: C★ 755Claude Code +9 - 0.698score
pdf-ingestion
Archive228
Get a PDF into the model without blowing the context window or losing structure.
SkillCFreshness: C★ 755Claude Code +9 - 0.698score
planner-spec-expand
Archive228
Expand a 1-4 sentence product brief into a full spec with a design language, acceptance surface, and an ordered feature list.
SkillCFreshness: C★ 755Claude Code +9 - 0.698score
broken-window-check
Archive228
Before picking new work, smoke-test the last "completed" feature.
SkillCFreshness: C★ 755Claude Code +9 - 0.698score
init-script-contract
Archive228
Author idempotent init.sh under 120s plus sibling test.sh, stop.sh, reset.sh, serve.sh with fixed names the harness relies on.
SkillCFreshness: C★ 755Claude Code +9 - 0.698score
active-memory-reminder
Archive228
Before compaction Loopkit extracts decisions into claude-decisions.json (machine-readable).
SkillCFreshness: C★ 755Claude Code +9 - 0.698score
adversarial-verify
Archive228
Review a diff against the goal spec assuming the code is BROKEN.
SkillCFreshness: C★ 755Claude Code +9 - 0.698score
evaluator-calibration
Archive228
Calibrate a reviewer persona with few-shot rubric examples so skepticism stays consistent and doesn't drift lenient over long runs.
SkillCFreshness: C★ 755Claude Code +9
Signals
- Stars
- 755
- Forks
- 124
- Open issues
- 0
- Last commit (this folder)
- Jul 10, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Archive228/loopkit
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Archive228
- 0.701score
structured-output
Archive228
Get JSON out of the model reliably.
SkillCFreshness: C★ 755Claude Code +9 - 0.701score
using-loopkit
Archive228
Use when starting any conversation in a loopkit-enabled project - establishes how to find and use loopkit's 49 skills, requiring skill invocation before ANY…
SkillCFreshness: C★ 755Claude Code +9 - 0.701score
hitl-escalate
Archive228
Escalate blocked runs to a human via configured channel or fallback to BLOCKED.md and exit the loop.
SkillCFreshness: C★ 755Claude Code +9 - 0.701score
prompt-caching
Archive228
Cache the parts of the prompt that don't change so a long-running loop stops paying full price on every turn.
SkillCFreshness: C★ 755Claude Code +9 - 0.698score
adversarial-verify
Archive228
Review a diff against the goal spec assuming the code is BROKEN.
SkillCFreshness: C★ 755Claude Code +9 - 0.698score
active-memory-reminder
Archive228
Before compaction Loopkit extracts decisions into claude-decisions.json (machine-readable).
SkillCFreshness: C★ 755Claude Code +9
Cite this page
harness-stripping skill. Agent Mart. https://agentmart.dev/skills/archive228-harness-stripping (last updated 2026-10-24)