agentleFS
shimo4228shimo4228/claude-harness/skills/harness-boundary/SKILL.md

harness-boundary

Skill4 starsChanged 34 days agoMITView on GitHub

Design lens: which layer a harness mechanism belongs in, and whether it outlives the next model or runtime.

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

17 rules. About 0 are common, 16 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈16

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Put model capability in the model.

    line 20
  2. Distinctive:

    Put procedural knowledge in skills

    line 21
  3. Distinctive:

    Keep values and responsibility boundaries explicit and inspectable

    line 22
  4. Distinctive:

    Put the definition of quality in evals

    line 23
  5. Distinctive:

    Put domain knowledge and history in data / memory

    line 24
  6. Distinctive:

    Keep the runtime as thin and swappable as practically possible

    line 25
  7. Distinctive:

    A. Which layer is it?: If it spans several, can it be separated?

    line 50
  8. Distinctive:

    B. Why can't it be left to the model itself?: If you cannot state a clear reason, do not add it to the harness.

    line 51
  9. Distinctive:

    D. Is it worth keeping when the runtime is swapped?: If it is still needed after moving Claude Code → Pi → Codex → an unknown runtime, it …

    line 55
  10. Distinctive:

    Not rejected automatically.

    line 65
  11. Distinctive:

    Do not overdo it. If one line is enough, use one line (e.g., "This is the skill layer.

    line 75
  12. Distinctive:

    Do not output every field every time: Only when the judgment is contested or the impact is broad, use this form:

    line 76
  13. Distinctive:

    When applied retroactively to installed assets, do not execute the conclusion yourself.

    line 89
  14. Very specific:

    When the substrate natively handles judgments about layer decomposition, portability, and obsolescence, and asks them on its own when the …

    line 111
  15. Distinctive:

    If the 6-layer division itself breaks down (e.g., eval is absorbed into model capability, the boundary between skill and data disappears), …

    line 113
  16. Distinctive:

    If this skill exceeds 150 lines, apply the 6 questions to this skill itself

    line 115
  17. Distinctive:

    Delete / Move become evidence for these

    line 123

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

harness-boundary — a design lens that treats as assets only what survives discarding the harness

"The harness is the asset" is only half right. Harness logic that compensates for model-specific weaknesses goes stale with each model generation, and the runtime (tool execution, permissions, state, retry, agent loop) is being standardized and replaced. What remains are other layers mixed into the harness. This skill raises the questions for separating that mixture when a mechanism is added, changed, or reviewed.

This is not an enforced architecture but a lens for judging asset boundaries, portability, and obsolescence.

Core principles

  • Put model capability in the model. Do not reimplement it in the harness
  • Put procedural knowledge in skills
  • Keep values and responsibility boundaries explicit and inspectable
  • Put the definition of quality in evals
  • Put domain knowledge and history in data / memory
  • Keep the runtime as thin and swappable as practically possible

And: do not optimize to preserve the harness. Optimize to preserve what should survive swapping the harness. When a new model makes existing logic unnecessary, that is not a design failure but the moment to delete. Delete / Simplify count as success.

The 6 layers

LayerContentsCounterpart in this harnessExisting vocabulary
Model capabilityreasoning / planning / coding / tool-use judgment / self-correction / decomposition / reflectionClaude itself (including the system prompt + tool descriptions)substrate, generation-audit's runtime layer
Skills (procedural memory)this task follows this procedure / this review uses these angles / this failure has this runbook / this deliverable gets this verificationskills/*/SKILL.md, the body of agents/*.md"procedures go in skills" (rules/README.md)
Values / Policies / responsibility boundarieswhat to prioritize / what not to do / operations that need human approval / scope of delegation / source of truth / priorities on failurerules/common/ (identity / values layer, ADR-0018 D7), permissions in settings.json, authority in the task request"environment-specific facts, wiring, traps" (ADR-0035)
Evalsacceptance criteria / tests / rubric / benchmark / regression / quality gate.claude/verify.sh, tests/, skill-comply, llm-as-judge, dedicated judge agentsVerify, binding judgment
Data / Memorydeliverables / decision history / domain knowledge / preferences / provenance / historical statedocs/decision-history/, auto-memory, .notes/, metrics/*.jsonl, wikidecision history = past-tense record; the current design is the thing itself
Runtimetool calling / shell & fs / permission implementation / sandbox / connector / retry / logging / state / routing / agent loopClaude Code itself, hooks/*.sh, MCP servers, the Workflow / Agent tools, launchd tickcontrol plane, hooks are timing (ADR-0035)

Hooks sit in the runtime layer, but they easily encode policy silently (e.g., the conditions of an approval gate, what to block). When looking at a hook, separate "the timing wiring" from "the policy embedded in it," and ask whether the latter is visibly stated in a rule / ADR.

The 6 questions

For each target, use only the questions its scale calls for.

  • A. Which layer is it? If it spans several, can it be separated?
  • B. Why can't it be left to the model itself? If you cannot state a clear reason, do not add it to the harness. "The previous model was bad at this" is not a reason — have you tried it with the current model?
  • C. Is the next model generation likely to make it unnecessary? If it is a workaround for a capability gap, do not make it permanent architecture. Mark it explicitly as temporary / removable and write its expiry condition
  • D. Is it worth keeping when the runtime is swapped? If it is still needed after moving Claude Code → Pi → Codex → an unknown runtime, it is a candidate to hold separately from the runtime. If not, keep it thin as runtime-specific
  • E. Is it necessary infrastructure or a differentiating asset? Both are "important," but do not conflate them. Infrastructure is assumed to be borrowed and replaced; differentiating assets are held in portable form
  • F. Can it move to a simpler layer? Typical moves: custom agent loop → model / hard-coded workflow → skill / conditional branching inside the runtime → policy / prompt-based quality judgment → eval / embedded knowledge → data

Targets to suspect strongly

Not rejected automatically. But the following go through B–D without skipping:

elaborate agent loops / mandatory reflection / mandatory planning stages / fixed multi-agent orchestration / excessive routing / long system prompts / model-specific behavioral workarounds / duplicate implementations of model capability / workflows that remain because an old model needed them / runtime-specific abstractions that contain domain knowledge / hooks that silently encode policy / opaque automation that hides responsibility boundaries / mechanisms whose purpose is preserving the existing harness design itself

Output

Do not overdo it. If one line is enough, use one line (e.g., "This is the skill layer. No reason to put it in the runtime → Move"). Do not output every field every time. Only when the judgment is contested or the impact is broad, use this form:

Classification        : layer (a separation proposal if several)
Keep outside model because : reason to keep it outside the model (if none, a Delete candidate)
Portability           : whether to keep it when the runtime / model is swapped
Obsolescence risk     : Low / Medium / High (1-line rationale, expiry condition if possible)
Recommendation        : Keep / Move / Simplify / Make temporary / Delete / Defer

Connecting to existing verdicts

This skill issues a Recommendation directly only for mechanisms being proposed or changed. When applied retroactively to installed assets, do not execute the conclusion yourself; pass it as evidence to the relevant stocktake (the same "read, never require" contract as generation-audit. Do not split the source of truth for the verdict table — ADR-0022).

This skillCounterpart for installed assets
DeleteRetire / Dissolve in rules / skill / agent-stocktake
MoveDemote / Merge in the same, or rules-distill (skill → rule direction)
SimplifyImprove in the same, built-in /simplify
Make temporarywrite a deadline in review-when: for a rule, ## Review-when for an ADR, ## Expiry conditions for a skill
Deferskill: file it as a draft in your task ledger (the author's harness uses rfc-writer) (in a small repo with a single table, one line in .notes/TASKS.md)
Keepleave a 1-line reason (it becomes grounds for future stocktakes)

Out of scope

  • A standalone build-or-not decision on something not yet built → a fresh-context build-or-not judge (the author's harness uses the architect agent; zero-base test). This skill answers "if it is built, in which layer and until when"
  • Validity of loop structure (servo / decidability / damping) → a loop-design review (the author's harness uses loop-design-check)
  • Bulk cross-check at a model generation change → skill: generation-audit
  • Human portability (whether others can install and use it) → skill-writer/references/portability.md

Expiry conditions

  • When the substrate natively handles judgments about layer decomposition, portability, and obsolescence, and asks them on its own when the harness changes, this skill retires (Downward, rules/common/akc-cycle.md)
  • If the 6-layer division itself breaks down (e.g., eval is absorbed into model capability, the boundary between skill and data disappears), rewrite the division. Questions A–F are expected to outlive the division
  • If this skill exceeds 150 lines, apply the 6 questions to this skill itself

Related

  • A build-or-not judge (the author's harness uses the architect agent) — the up-front twin: build-or-not. This skill answers "if it is built, in which layer and how far"
  • A loop-design review (the author's harness uses loop-design-check) — isomorphic to its Step 0 subtract gate (subtract before adding)
  • generation-audit — after-the-fact cross-check at a generation change. This skill is up-front judgment at design time; the evidence flows in the same direction
  • rules-stocktake / skill-stocktake / agent-stocktake — the source of truth for verdicts. For installed assets, this skill's Delete / Move become evidence for these
  • rules-distill — criteria for promoting skill → rule (tests 1–3 are the rule version of questions A and B)
  • rules/common/akc-cycle.md — Scaffold Dissolution (Inward / Downward). Question C is its predictive version
  • ADR-0012 / 0015 / 0038 — precedents for runtime portability (skills → shared via symlink, rules → reference-first, hooks / permissions are outside sharing but the hooks wiring section is portable). The measured grounds for question D

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.