Harness Diet logo

Harness Diet

Community
sangrokjung
harness-diet

Measure and shrink the always-loaded context of a Claude Code harness (CLAUDE.md + rules without paths frontmatter) back under budget — migrate narrative to reference files, convert rules to path-scoped or skill-triggered loading, and verify zero governance loss with deterministic preservation checks. Use on "harness diet", "context diet", "rules diet", "CLAUDE.md too long", "always-load budget", "trim my rules", "context bloat", "하네스 다이어트", "룰 다이어트", "컨텍스트 다이어트", "always-load 줄여줘". Not for one-off prose editing or project docs cleanup.

Overview

Publishersangrokjung
Repositoryclaude-forge
Skill nameharness-diet
Stars
853
Forks
183
Bundled files
4
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 4 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by sangrokjung on GitHub. Read the source before you install it.

Installation

Install the Harness Diet AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/sangrokjung/claude-forge/tree/main/skills/harness-diet
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/sangrokjung/claude-forge.git /tmp/claude-forge
mkdir -p .claude/skills
cp -r /tmp/claude-forge/skills/harness-diet .claude/skills/harness-diet
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Harness Diet in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Harness Diet on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Harness Diet is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

harness-diet — put your always-loaded context back under budget

A harness gains weight automatically (every incident note, every boss directive, every fix lands as another paragraph in an always-loaded rule) but only loses weight when someone runs a diet. Field measurement on a mature harness: growth-to-reduction commit ratio of ~60:1, natural growth of ~70KB/month, and adherence degrading as the pile grows. Anthropic's guidance is blunt: "target under 200 lines per CLAUDE.md file. Longer files consume more context and reduce adherence", and rules without paths frontmatter load "with the same priority as CLAUDE.md" — every session, every token (memory docs).

Result you should expect: one field run took a harness from 146KB always-loaded (143% of budget) to 100.6KB (98%) with zero governance loss — every killswitch, decision table, trigger keyword, and canonical command verified present after the diet.

Budgets (defaults — override via flags)

MetricBudgetWhy
CLAUDE.md< 200 linesAnthropic official guidance
Per always-loaded rule file8,192 BKeeps any single rule scannable; forces narrative out
Total always-loaded rules102,400 BAttention-budget ceiling; beyond this, adherence drops

Bundled script paths: commands below use $HOME/.claude/skills/harness-diet/… (the install.sh layout). For marketplace (/plugin install) installs, resolve under ${CLAUDE_PLUGIN_ROOT}/skills/harness-diet/… instead. The scripts are stdlib-only Python; if unavailable, perform the step manually from the described contract.

Phase 0 — Measure

bash
DIET="$HOME/.claude/skills/harness-diet"   # or "${CLAUDE_PLUGIN_ROOT}/skills/harness-diet"
python3 "$DIET/scripts/harness_diet_audit.py"            # human summary
python3 "$DIET/scripts/harness_diet_audit.py" --json     # machine output
python3 "$DIET/scripts/harness_diet_audit.py" --strict   # exit 2 if over budget (CI/ratchet)

Auto-discovers ./.claude/rules, ~/.claude/rules, and CLAUDE.md files at project/user level. A rule is always-loaded iff its YAML frontmatter has no paths: key.

Phase 1 — Classify every always-loaded rule

Walk the list from largest to smallest and pick one bucket per file:

  1. Keep always-loaded — cross-cutting behavior needed in every session (tone, security boundaries, routing indexes). Diet the body (Phase 2) but keep the load class.
  2. Path-scope — the rule only matters when specific files are touched. Add paths: globs. ⚠ Path scoping fires on file access, never on spoken keywords. A rule triggered by what the user says cannot be path-scoped. ⚠ No literal brackets in globs ([locale] parses as a character class and silently never matches).
  3. Convert to skill / hook-injected — task-specific procedure? Official guidance: "use skills instead". Best case: the rule's real trigger is already a deterministic hook — have the hook inject "Read first" into context and drop the always-load.
  4. Migrate narrative to reference — the default for oversized keepers (Phase 2).

Phase 2 — Migrate (block-level, never prose compression)

For each oversized file:

  1. Extract a preservation manifest first (before touching anything):
    bash
    python3 "$DIET/scripts/preservation_check.py" extract rules/big-rule.md > /tmp/big-rule.manifest.json
  2. Append the outgoing blocks to references/<name>-ref.md (or your repo's reference dir), verbatim under a dated section header. Append before rewriting the rule body, and commit both together — a slimmed body pushed without its reference content is a content hole for every mirror that pulls in between.
  3. Rewrite the rule body: keep the verdict skeleton (what to do / never do), leave a one-line pointer to the reference for the "why" and the war stories.

Must stay in the body (never migrate): CRITICAL/IMPORTANT banners and their verdicts, decision tables, trigger keywords and agent names (they are a routing index, not prose), killswitch env vars, canonical command lines, IDs and threshold values.

Migrate aggressively: incident narratives, measurement history, duplicated explanations of the same point, long example blocks, anything already present in the reference file.

Phase 3 — Verify (two lenses, fresh checker)

  1. Loss lens (deterministic):
    bash
    python3 "$DIET/scripts/preservation_check.py" verify rules/big-rule.md /tmp/big-rule.manifest.json
    Exit 2 = something load-bearing got migrated. Restore it before proceeding. Review the manifest by hand first — prune entries that were intended to move.
  2. Efficacy lens: re-run the audit; recompute the total; confirm the savings are real (reference files are lazily Read, not @-imported — check the rule bodies contain no @path imports of the reference, or the "savings" still load at launch).
  3. Fresh checker: hand the diff to an independent reviewer that didn't write it (pairs with the review-loop skill). Diets fail quietly: a plausible-looking slim body missing one qualifier is exactly what the maker cannot see.

Phase 4 — Guard (keep it off)

A diet without a guard regrows. Ship-with options in $DIET/hooks/:

  • rules-budget-guard.sh — PostToolUse (Edit|Write) advisory: the moment a rule edit pushes a file past budget, the editing session gets a context note telling it to migrate, not append. Non-blocking by design — a blocking pre-commit gate silently stalls auto-commit pipelines.
  • Re-run --strict weekly (cron, session-start dispatcher, or CI) and surface the report only when over budget.

Anti-patterns (each one cost a real harness a failed round)

Anti-patternWhy it fails
Prose compression ("tighten the wording")Trigger keywords, guru names, stage names are the routing index. A compression pass that saved 12% destroyed 70% of routing signals and was fully reverted. Move blocks; don't rewrite sentences.
Dedup toward a private fileIf rules are distributed to a team but ~/.claude/CLAUDE.md is one person's, "delete from rules, it's already in CLAUDE.md" deletes it from every teammate's context. Dedup toward the shared surface.
Slim body committed, reference append notMirrors pull a body full of dangling pointers. Commit both in one change.
Trusting the maker's "everything preserved" claimExtract the manifest before the edit and verify after. Field run: the maker claimed "6 bullets kept verbatim"; the deterministic check found two qualifiers gone.
Treating one diet as the fixGrowth is automatic; reduction is manual. Without the guard, one measured harness regrew from 145KB toward its 220KB peak within weeks.

References

  • references/methodology.md — budget rationale, growth mechanics, byte-accounting worksheet, verification lens design, worked field results.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Harness Diet AI skill do?

Measure and shrink the always-loaded context of a Claude Code harness (CLAUDE.md + rules without paths frontmatter) back under budget — migrate narrative to reference files, convert rules to path-scoped or skill-triggered loading, and verify zero governance loss with deterministic preservation checks. Use on "harness diet", "context diet", "rules diet", "CLAUDE.md too long", "always-load budget", "trim my rules", "context bloat", "하네스 다이어트", "룰 다이어트", "컨텍스트 다이어트", "always-load 줄여줘". Not for one-off prose editing or project docs cleanup.

Why use Harness Diet on TypingMind?

Because you install it once and use it with any model. Harness Diet is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Harness Diet in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/sangrokjung/claude-forge/tree/main/skills/harness-diet. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Harness Diet?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Harness Diet?

As many as you like. As long as a model supports skills, you can use Harness Diet with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Harness Diet AI skill free?

Yes. It is published on GitHub by sangrokjung under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇