chunk-review
Overview
A guidance chunk is a block of agent instruction that gets concatenated into an
always-on context bundle — injected into every agent session for every
subscriber, in every provider that imports the bundle, forever. That is
expensive, permanent real estate: it costs context tokens on every turn and it
competes for the model's attention with every other chunk. This skill is the
quality gate that keeps the bundle lean, high-signal, and genuinely
behavior-changing.
Use it to score a candidate chunk, assign a verdict, and check it against
existing chunks for redundancy before a chunk PR is opened.
The 7 axes split into two families:
- Does it belong here? — Universality, Altitude, Not-a-skill, Non-redundancy.
- Does it earn its tokens? — Concision, Impact, Stability. (These three are
the always-on-context tax filter: a chunk can be perfectly on-topic and still
be noise if it changes no behavior, churns constantly, or is bloated.)
Input
A chunk file (template-conformant — frontmatter + body). Either a path, a paste,
or a diff. If reviewing an authored-but-unsaved chunk, score the proposed content.
Step 1 — Validate the frontmatter
The chunk MUST have all required keys. Reject outright (score 0, verdict
cut) if any are missing or malformed:
name — unique, kebab-case (the dedup key)
version — semver
owner — the owning plugin slug
order — integer sort key
summary — one line
Optional progressive-disclosure keys:
disclosure — inline (default) or pointer. A pointer chunk MUST also
set skill:. Its body should be a 1–3 line rule only; the heavy how-to
lives in the named skill (loaded on demand, not in always-on context).
skill — required iff disclosure: pointer. Kebab-case skill slug. If the
named skill isn't installed or shipped alongside this chunk, flag it in the
recommendation — a pointer to a skill nobody has is dead context.
Optional replacement key:
supersedes — comma-separated names this chunk REPLACES. Each named chunk
is dropped from the bundle entirely, so this key deletes guidance and gets
the sharpest scrutiny in the whole review. Three checks, all mandatory:
- Rider or replacement? Read the target chunk. If this chunk merely ADDS
local specifics on top of the target's substance, it is a rider, not a
replacement — flag the
supersedes as wrong and recommend removing it in
favour of a "Rides on <target>" line in the body.
- Orphan sweep. Diff the two bodies and enumerate every rule, caveat, and
rationale the target carries that this chunk does NOT. Quote them. Each one
is guidance that vanishes on merge, so it must be absorbed into this chunk
first or explicitly waived. An unabsorbed orphan is a
revise.
- Dangling references. Grep the rest of the corpus for prose citing the
superseded name (e.g. "Rides on
<target>"). Those references break
silently — list them so they can be repointed.
Also note: superseding a chunk whose substance is delegated to an on-demand
skill moves that doctrine OUT of always-on context. Call that out explicitly;
it is a behavior change, not a cleanup.
Step 1b — Size gate (hard fail / auto-fail)
Strip the frontmatter and measure the body in characters
(awk 'BEGIN{c=0} c<2 && /^---[[:space:]]*$/{c++; next} c>=2{print}' file | wc -c).
Hard caps (chunks above these → auto-fail, score 0, verdict cut, recommend split):
| disclosure |
cap (chars) |
rationale |
inline (default) |
2000 |
~500 tokens of always-on context tax in every session for every subscriber. |
pointer |
400 |
A pointer chunk is supposed to be a stub; anything bigger means the rule has crept into the always-on path. |
A chunk in the 75–100% band of its cap is borderline — dock the Concision
axis and recommend trimming or splitting before merge.
Step 2 — Score the rubric (0–70)
Seven axes, 0–10 points each, summed to a total out of 70. Score each
axis on its own evidence; do not average them. Use the anchors below.
Axis 1 — Universality
Is this useful to every subscriber, regardless of team, project, or stack?
- 10 — Genuinely applies in every session for every subscriber.
- 5 — Useful to a broad slice, irrelevant to a meaningful minority.
- 0 — Niche; matters to one team, one repo, or one workflow.
Axis 2 — Altitude
Does it belong at the always-on / global level, vs. a project-local file or a task?
- 10 — Cross-cutting policy or convention that should shape work everywhere.
- 5 — Mostly global but leaks project- or stack-specific detail.
- 0 — Belongs in a project-local instructions file, or is really a one-off task.
Axis 3 — Not-a-skill
Is it always-on guidance, vs. an on-demand procedure?
- 10 — Must passively shape every response; nothing to "invoke."
- 5 — Mostly a posture, but carries procedural how-to that could be deferred.
- 0 — Procedural / step-by-step; should be a skill, loaded when needed.
Axis 4 — Non-redundancy
Does it add something platform defaults and existing chunks don't already cover?
- 10 — Novel; no existing chunk or platform default says this.
- 5 — Partial overlap with an existing chunk; could merge or re-scope.
- 0 — Restates a platform default or duplicates an existing chunk (see Step 3).
Axis 5 — Concision
Does every line earn its tokens?
- 10 — Tight, bounded, no padding; well under its size cap.
- 5 — Serviceable but loose; or in the 75–100% cap band.
- 0 — Rambling, padded, or unbounded; context cost outweighs value.
Axis 6 — Impact (behavioral leverage)
Would omitting this chunk visibly degrade agent behavior — or is it low-leverage
noise the model already does, ignores in practice, or treats as decoration?
High-signal context engineering means finding the smallest set of high-signal
tokens that maximize the likelihood of the desired behavior; instructions
change behavior only when they give the model concrete signals for a desired
output, not vague restatements of the obvious. A chunk with no behavioral
leverage is pure tax — it dilutes the signal-to-noise ratio of the whole bundle.
- 10 — Directive and consequential. Removing it would produce visibly worse
output (wrong default, skipped check, missed convention). Gives a concrete,
actionable signal — a real "do/don't" with teeth.
- 5 — Plausibly helpful but soft. Nudges tone or preference; hard to point at
a behavior that would change if it were deleted.
- 0 — Decorative, obvious, or ignored-in-practice. States what the model
already does by default, is too vague to act on, or is aspirational fluff.
Heuristic: write the one-sentence regression you'd expect if this chunk were
deleted. If you can't name a concrete behavioral regression, it's a 0–3.
Axis 7 — Stability (durability / low-churn)
Does this encode a durable invariant, or a volatile specific that will rot?
Always-on context should carry durable principles and heuristics, not
volatile facts. Specifics — names, versions, dates, current-sprint details,
tool flags, people, URLs — go stale silently and cause drift: the bundle keeps
asserting something that is no longer true, and the model follows stale guidance
with full confidence. Durable guidance sits at the "right altitude": specific
enough to steer behavior, general enough to survive change without edits.
- 10 — Durable invariant or principle. Would still be correct a year from now
with no edits. No version numbers, dates, or named transient specifics.
- 5 — Mostly durable but pinned to something semi-stable (a tool name, a
current convention) that may shift within a year.
- 0 — Volatile detail with a short shelf life (versions, dates, sprint/quarter
specifics, a current person/owner, a soon-to-change flag). Will rot and mislead.
Heuristic: ask "what has to change in the world for this line to become a lie?"
If the answer is "a routine, frequent event," it's a 0–3 — push the volatile
part out to a skill, a project-local file, or a lookup, and keep only the
durable rule here.
Step 3 — Similarity check
Compare the candidate against every existing chunk in the bundle's chunks/
sources:
- Overlapping
name → hard conflict (same dedup key; one silently loses).
The PR must rename or supersede.
- Chunks covering the same subject → recommend merge, a clear
order
separation, or dropping the weaker one.
- Quote the overlapping lines so the author sees the redundancy.
Feed the result into the Non-redundancy axis.
Step 3b — Disclosure fit
Pointer chunks deserve their own check:
- The body MUST be a rule (imperative, always-applies), not a procedure. If it
reads like "here's how to do X," the procedure belongs entirely in the
referenced skill and the chunk shouldn't exist inline.
- The
skill: slug must resolve to a skill the subscriber will actually have
installed (same plugin, or a documented dependency).
- If an inline chunk is over the 75% size band AND its procedural detail could
auto-load via a skill description, recommend conversion to
pointer with a
sibling skill. This also lifts its Concision and Impact scores.
Step 4 — Verdict
Total the seven axes (out of 70), then map to a verdict. Auto-fail conditions
(missing/malformed frontmatter, or body over its hard size cap) force cut
regardless of any partial scoring.
| Verdict |
Band |
Meaning |
keep |
≥ 49 / 70 (~70%), no hard conflict |
Chunk-worthy. Ship it. |
revise |
28–48 / 70 (~40–69%) |
Right idea, wrong shape. Fix the weak axes (often the wrong vehicle, redundancy, low Impact, or volatile content) and re-score. Includes "move elsewhere" — project-local file, a skill, a plugin README, or team docs. |
cut |
< 28 / 70 (~<40%), or any auto-fail |
Should not exist as a chunk. |
Additional hard gates that cap the verdict at revise even on a high total:
- Impact ≤ 2 — low behavioral leverage means it's tax, not signal. Don't
keep it until you can name the regression its absence would cause.
- Stability ≤ 2 — volatile content will rot the bundle. Don't keep it until
the volatile part is pushed out and only the durable rule remains.
Output format
## chunk-review: <name> v<version> · disclosure=<inline|pointer>
**Score: <0-70>** · **Verdict: keep | revise | cut**
**Body size:** <chars> / <cap> (<inline|pointer>)
| Axis | Score | Note |
|------|-------|------|
| Universality | x/10 | ... |
| Altitude | x/10 | ... |
| Not-a-skill | x/10 | ... |
| Non-redundancy | x/10 | ... |
| Concision | x/10 | ... |
| Impact | x/10 | ... |
| Stability | x/10 | ... |
| **Total** | **x/70** | |
**Similarity check:** <conflicts / overlaps found, or "clear">
**Disclosure fit:** <pointer-ok / pointer-skill-missing / consider-pointer / n/a inline-ok>
**Deletion regression (Impact):** <one sentence: what gets visibly worse without this chunk, or "none — low leverage">
**Rot risk (Stability):** <what would make this line a lie, or "none — durable">
**Recommendation:** <one paragraph — if not `keep`, name the fix or the right home>
Be blunt. The bundle is shared and permanent; a soft review here is a tax on
every subscriber, in every session, forever.
Grounding
The two newest axes are grounded in current context-engineering practice:
Impact operationalizes the signal-to-noise principle: context is finite and
precious, so the goal is the smallest set of high-signal tokens that change
behavior — instructions only steer the model when they give concrete signals
for a desired output, not vague or obvious restatements. Adding low-leverage
text actively worsens output by diluting signal and burying real instructions
in noise. (Anthropic, Effective context engineering for AI agents; Prompt
Engineering Guide, Context Engineering.)
Stability operationalizes durability vs. brittleness: always-on artifacts
should encode durable instructions at the "right altitude" — specific enough
to guide behavior, flexible enough to provide strong heuristics — and avoid
brittle, hardcoded specifics that create fragility and maintenance burden.
Volatile detail causes context rot and version drift, where the bundle
keeps asserting stale facts the model then follows confidently. (Anthropic,
Effective context engineering for AI agents; Mizrahi et al., State of What
Art? A Call for Multi-Prompt LLM Evaluation, on prompt brittleness.)
Sources:
1---2name: chunk-review3description: Score a candidate guidance chunk for inclusion in the always-on agent-instruction bundle (the concatenated context injected into every agent session). Use when reviewing or authoring a chunk before opening a chunk PR, or when asked to "/chunk-review", "score this chunk", "review a guidance chunk", "review this chunk", "is this chunk worth shipping", "should this go in the bundle", or "is this chunk-worthy". Applies a 7-axis rubric (Universality, Altitude, Not-a-skill, Non-redundancy, Concision, Impact, Stability), enforces hard size gates, checks for redundancy against existing chunks, and emits a score plus a keep / revise / cut verdict.4---56# chunk-review78## Overview910A guidance chunk is a block of agent instruction that gets concatenated into an11**always-on context bundle** — injected into *every* agent session for every12subscriber, in every provider that imports the bundle, forever. That is13expensive, permanent real estate: it costs context tokens on every turn and it14competes for the model's attention with every other chunk. This skill is the15quality gate that keeps the bundle lean, high-signal, and genuinely16behavior-changing.1718Use it to score a candidate chunk, assign a verdict, and check it against19existing chunks for redundancy **before a chunk PR is opened**.2021The 7 axes split into two families:22- **Does it belong here?** — Universality, Altitude, Not-a-skill, Non-redundancy.23- **Does it earn its tokens?** — Concision, Impact, Stability. (These three are24 the always-on-context tax filter: a chunk can be perfectly on-topic and still25 be noise if it changes no behavior, churns constantly, or is bloated.)2627## Input2829A chunk file (template-conformant — frontmatter + body). Either a path, a paste,30or a diff. If reviewing an authored-but-unsaved chunk, score the proposed content.3132## Step 1 — Validate the frontmatter3334The chunk MUST have all required keys. Reject outright (score 0, verdict35`cut`) if any are missing or malformed:3637- `name` — unique, kebab-case (the dedup key)38- `version` — semver39- `owner` — the owning plugin slug40- `order` — integer sort key41- `summary` — one line4243**Optional progressive-disclosure keys:**4445- `disclosure` — `inline` (default) or `pointer`. A `pointer` chunk MUST also46 set `skill:`. Its body should be a 1–3 line *rule* only; the heavy how-to47 lives in the named skill (loaded on demand, not in always-on context).48- `skill` — required iff `disclosure: pointer`. Kebab-case skill slug. If the49 named skill isn't installed or shipped alongside this chunk, flag it in the50 recommendation — a pointer to a skill nobody has is dead context.5152**Optional replacement key:**5354- `supersedes` — comma-separated `name`s this chunk REPLACES. Each named chunk55 is dropped from the bundle entirely, so this key **deletes guidance** and gets56 the sharpest scrutiny in the whole review. Three checks, all mandatory:5758 1. **Rider or replacement?** Read the target chunk. If this chunk merely ADDS59 local specifics on top of the target's substance, it is a *rider*, not a60 replacement — flag the `supersedes` as wrong and recommend removing it in61 favour of a "Rides on **`<target>`**" line in the body.62 2. **Orphan sweep.** Diff the two bodies and enumerate every rule, caveat, and63 rationale the target carries that this chunk does NOT. Quote them. Each one64 is guidance that vanishes on merge, so it must be absorbed into this chunk65 first or explicitly waived. An unabsorbed orphan is a `revise`.66 3. **Dangling references.** Grep the rest of the corpus for prose citing the67 superseded name (e.g. "Rides on **`<target>`**"). Those references break68 silently — list them so they can be repointed.6970 Also note: superseding a chunk whose substance is delegated to an on-demand71 skill moves that doctrine OUT of always-on context. Call that out explicitly;72 it is a behavior change, not a cleanup.7374## Step 1b — Size gate (hard fail / auto-fail)7576Strip the frontmatter and measure the body in characters77(`awk 'BEGIN{c=0} c<2 && /^---[[:space:]]*$/{c++; next} c>=2{print}' file | wc -c`).7879Hard caps (chunks above these → **auto-fail**, score 0, verdict `cut`, recommend split):8081| disclosure | cap (chars) | rationale |82|---|---|---|83| `inline` (default) | **2000** | ~500 tokens of always-on context tax in every session for every subscriber. |84| `pointer` | **400** | A pointer chunk is supposed to be a stub; anything bigger means the rule has crept into the always-on path. |8586A chunk in the 75–100% band of its cap is *borderline* — dock the **Concision**87axis and recommend trimming or splitting before merge.8889## Step 2 — Score the rubric (0–70)9091Seven axes, **0–10 points each**, summed to a total out of **70**. Score each92axis on its own evidence; do not average them. Use the anchors below.9394### Axis 1 — Universality95*Is this useful to every subscriber, regardless of team, project, or stack?*96- **10** — Genuinely applies in *every* session for *every* subscriber.97- **5** — Useful to a broad slice, irrelevant to a meaningful minority.98- **0** — Niche; matters to one team, one repo, or one workflow.99100### Axis 2 — Altitude101*Does it belong at the always-on / global level, vs. a project-local file or a task?*102- **10** — Cross-cutting policy or convention that should shape work everywhere.103- **5** — Mostly global but leaks project- or stack-specific detail.104- **0** — Belongs in a project-local instructions file, or is really a one-off task.105106### Axis 3 — Not-a-skill107*Is it always-on guidance, vs. an on-demand procedure?*108- **10** — Must passively shape *every* response; nothing to "invoke."109- **5** — Mostly a posture, but carries procedural how-to that could be deferred.110- **0** — Procedural / step-by-step; should be a skill, loaded when needed.111112### Axis 4 — Non-redundancy113*Does it add something platform defaults and existing chunks don't already cover?*114- **10** — Novel; no existing chunk or platform default says this.115- **5** — Partial overlap with an existing chunk; could merge or re-scope.116- **0** — Restates a platform default or duplicates an existing chunk (see Step 3).117118### Axis 5 — Concision119*Does every line earn its tokens?*120- **10** — Tight, bounded, no padding; well under its size cap.121- **5** — Serviceable but loose; or in the 75–100% cap band.122- **0** — Rambling, padded, or unbounded; context cost outweighs value.123124### Axis 6 — Impact (behavioral leverage)125*Would omitting this chunk visibly degrade agent behavior — or is it low-leverage126noise the model already does, ignores in practice, or treats as decoration?*127128High-signal context engineering means finding the *smallest set of high-signal129tokens that maximize the likelihood of the desired behavior*; instructions130change behavior only when they give the model **concrete signals for a desired131output**, not vague restatements of the obvious. A chunk with no behavioral132leverage is pure tax — it dilutes the signal-to-noise ratio of the whole bundle.133134- **10** — Directive and consequential. Removing it would produce *visibly worse*135 output (wrong default, skipped check, missed convention). Gives a concrete,136 actionable signal — a real "do/don't" with teeth.137- **5** — Plausibly helpful but soft. Nudges tone or preference; hard to point at138 a behavior that would change if it were deleted.139- **0** — Decorative, obvious, or ignored-in-practice. States what the model140 already does by default, is too vague to act on, or is aspirational fluff.141142> Heuristic: write the one-sentence regression you'd expect if this chunk were143> deleted. If you can't name a concrete behavioral regression, it's a 0–3.144145### Axis 7 — Stability (durability / low-churn)146*Does this encode a durable invariant, or a volatile specific that will rot?*147148Always-on context should carry **durable principles and heuristics**, not149volatile facts. Specifics — names, versions, dates, current-sprint details,150tool flags, people, URLs — go stale silently and cause drift: the bundle keeps151asserting something that is no longer true, and the model follows stale guidance152with full confidence. Durable guidance sits at the "right altitude": specific153enough to steer behavior, general enough to survive change without edits.154155- **10** — Durable invariant or principle. Would still be correct a year from now156 with no edits. No version numbers, dates, or named transient specifics.157- **5** — Mostly durable but pinned to something semi-stable (a tool name, a158 current convention) that may shift within a year.159- **0** — Volatile detail with a short shelf life (versions, dates, sprint/quarter160 specifics, a current person/owner, a soon-to-change flag). Will rot and mislead.161162> Heuristic: ask "what has to change in the world for this line to become a lie?"163> If the answer is "a routine, frequent event," it's a 0–3 — push the volatile164> part out to a skill, a project-local file, or a lookup, and keep only the165> durable rule here.166167## Step 3 — Similarity check168169Compare the candidate against every existing chunk in the bundle's `chunks/`170sources:171172- Overlapping `name` → **hard conflict** (same dedup key; one silently loses).173 The PR must rename or supersede.174- Chunks covering the same subject → recommend merge, a clear `order`175 separation, or dropping the weaker one.176- Quote the overlapping lines so the author sees the redundancy.177178Feed the result into the **Non-redundancy** axis.179180## Step 3b — Disclosure fit181182Pointer chunks deserve their own check:183184- The body MUST be a rule (imperative, always-applies), not a procedure. If it185 reads like "here's how to do X," the procedure belongs entirely in the186 referenced skill and the chunk shouldn't exist inline.187- The `skill:` slug must resolve to a skill the subscriber will actually have188 installed (same plugin, or a documented dependency).189- If an inline chunk is over the 75% size band AND its procedural detail could190 auto-load via a skill description, recommend conversion to `pointer` with a191 sibling skill. This also lifts its Concision and Impact scores.192193## Step 4 — Verdict194195Total the seven axes (out of 70), then map to a verdict. Auto-fail conditions196(missing/malformed frontmatter, or body over its hard size cap) force `cut`197regardless of any partial scoring.198199| Verdict | Band | Meaning |200|---|---|---|201| **`keep`** | **≥ 49 / 70** (~70%), no hard conflict | Chunk-worthy. Ship it. |202| **`revise`** | **28–48 / 70** (~40–69%) | Right idea, wrong shape. Fix the weak axes (often the wrong vehicle, redundancy, low Impact, or volatile content) and re-score. Includes "move elsewhere" — project-local file, a skill, a plugin README, or team docs. |203| **`cut`** | **< 28 / 70** (~<40%), or any auto-fail | Should not exist as a chunk. |204205Additional hard gates that cap the verdict at `revise` even on a high total:206- **Impact ≤ 2** — low behavioral leverage means it's tax, not signal. Don't207 keep it until you can name the regression its absence would cause.208- **Stability ≤ 2** — volatile content will rot the bundle. Don't keep it until209 the volatile part is pushed out and only the durable rule remains.210211## Output format212213```214## chunk-review: <name> v<version> · disclosure=<inline|pointer>215216**Score: <0-70>** · **Verdict: keep | revise | cut**217**Body size:** <chars> / <cap> (<inline|pointer>)218219| Axis | Score | Note |220|------|-------|------|221| Universality | x/10 | ... |222| Altitude | x/10 | ... |223| Not-a-skill | x/10 | ... |224| Non-redundancy | x/10 | ... |225| Concision | x/10 | ... |226| Impact | x/10 | ... |227| Stability | x/10 | ... |228| **Total** | **x/70** | |229230**Similarity check:** <conflicts / overlaps found, or "clear">231**Disclosure fit:** <pointer-ok / pointer-skill-missing / consider-pointer / n/a inline-ok>232**Deletion regression (Impact):** <one sentence: what gets visibly worse without this chunk, or "none — low leverage">233**Rot risk (Stability):** <what would make this line a lie, or "none — durable">234235**Recommendation:** <one paragraph — if not `keep`, name the fix or the right home>236```237238Be blunt. The bundle is shared and permanent; a soft review here is a tax on239every subscriber, in every session, forever.240241## Grounding242243The two newest axes are grounded in current context-engineering practice:244245- **Impact** operationalizes the signal-to-noise principle: context is finite and246 precious, so the goal is the *smallest set of high-signal tokens* that change247 behavior — instructions only steer the model when they give *concrete signals248 for a desired output*, not vague or obvious restatements. Adding low-leverage249 text actively worsens output by diluting signal and burying real instructions250 in noise. (Anthropic, *Effective context engineering for AI agents*; Prompt251 Engineering Guide, *Context Engineering*.)252253- **Stability** operationalizes durability vs. brittleness: always-on artifacts254 should encode durable instructions at the "right altitude" — *specific enough255 to guide behavior, flexible enough to provide strong heuristics* — and avoid256 brittle, hardcoded specifics that create fragility and maintenance burden.257 Volatile detail causes *context rot* and *version drift*, where the bundle258 keeps asserting stale facts the model then follows confidently. (Anthropic,259 *Effective context engineering for AI agents*; Mizrahi et al., *State of What260 Art? A Call for Multi-Prompt LLM Evaluation*, on prompt brittleness.)261262Sources:263- Anthropic — Effective context engineering for AI agents: https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents264- Prompt Engineering Guide — Context Engineering: https://www.promptingguide.ai/agents/context-engineering265- Mizrahi et al. — State of What Art? A Call for Multi-Prompt LLM Evaluation (arXiv 2401.00595): https://arxiv.org/html/2401.00595v3