Skip to content
Back to skills

Dispatch Weight

ASecurity

The single classification rule for how heavy ONE implementation dispatch is, so the orchestrator can escalate the model for that run only. Emits `light` or `heavy` plus a one-line reason naming the criterion that fired. Auto-loads whenever an agent is about to hand work to an implementation specialist, or is writing the plan/verdict/fix-plan that another agent will dispatch from. Triggers on "weight", "which model", "escalate", "dispatch the specialist", "re-pass", "REQUEST CHANGES", "model e...

  • 2 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 19, 2026
ai-agentsgo

Security analysis

A100/100

Scanned September 19, 2026

npx -y skills add konstantinos-malavazos/claude-code-playbook --skill dispatch-weight --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dispatch Weight?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dispatch Weight
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/konstantinos-malavazos-dispatch-weight/badge)](https://www.skillsdirectory.com/skills/konstantinos-malavazos-dispatch-weight)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: dispatch-weight
description: >-
  The single classification rule for how heavy ONE implementation dispatch is, so the
  orchestrator can escalate the model for that run only. Emits `light` or `heavy` plus a
  one-line reason naming the criterion that fired. Auto-loads whenever an agent is about to
  hand work to an implementation specialist, or is writing the plan/verdict/fix-plan that
  another agent will dispatch from. Triggers on "weight", "which model", "escalate",
  "dispatch the specialist", "re-pass", "REQUEST CHANGES", "model escalation".
---

# Dispatch weight

You classify **the change that is about to be made**, on **one dispatch**, for **one
specialist**. You do not classify the ticket, and you never set anybody's `model:`.

The reasoning behind this rule — why step count and not token price sets the bill — is
[`docs/shared/07-the-flows.md`](../../../docs/shared/07-the-flows.md), *Model escalation*.
This file is the rule itself, so that every dispatch site runs the same one.

---

## The unit is a dispatch, not a ticket

A track is dispatched more than once: the first pass, a re-pass for every `REQUEST CHANGES`,
a drift fix after an alignment gate, a QA bounce-back weeks later. **Each of those is its own
classification**, made from what that dispatch has to do — not inherited from the last one.

A weight written once on a plan and reused is the common failure. It covers the first pass
and silently misses every re-dispatch, and the re-dispatch after a failed review is the one
that most needed it.

---

## The output

One line, wherever the dispatching agent will read it:

```
weight: light | heavy — <the criterion that fired, in one clause>
```

The reason is not decoration. It is what makes the thresholds auditable later, and a weight
nobody can audit drifts. Name the criterion, not the feeling: *"3 callers on a changed
signature"*, never *"this looks tricky"*.

---

## Classify `heavy` when the dispatch

- touches **more than 3 files** — 3 or fewer is `light`,
- spans **more than one repo**,
- changes a **shared contract or signature with multiple callers**,
- has to work around a **placeholder seam** left by a deferred decision.

Otherwise `light`. Tune the list to your team; it is a starting point, not scripture. Keep it
**here**, in this one file, when you do.

### Two more criteria that only exist on a fix pass

A re-pass, a drift fix and a QA bounce-back also read `heavy` when:

- the reviewer raised **several findings against one track**, or
- **any** finding says the **design** was wrong rather than the details.

The second one outranks file count. A one-file change that reopens a design decision is a
heavy dispatch; a twelve-file rename is not.

---

## Three invariants

**1. Asymmetry — raise on suspicion, lower only on evidence.** A weight is a guess made
before the work starts. Being wrong upward costs one expensive run. Being wrong downward
costs a run that thrashes, plus the review that catches it, plus the re-pass. Guess up.

> Skip this and the cheap direction starts winning ties, which is exactly the direction
> whose failures are invisible in the output.

**2. Ratchet — a re-dispatch never runs below the tier that track last ran at.** Classify
the re-pass on its own merits, then take the **higher** of that and what the track last ran
at.

> Skip this and a fresh classification sends a track that just failed review straight back
> to the model that failed it. The classification is not wrong; it is just answering a
> question about the fix while the evidence was about the model.

**3. The agent's own `model:` is a FLOOR.** A weight raises a specialist for one run. It
never lowers one below the tier pinned in its frontmatter.

> Skip this and a per-dispatch heuristic quietly overrules a decision somebody made who
> knew the agent — and it does it silently, once per dispatch, forever.

---

## For whoever dispatches — mapping an id to a tier alias

**This section is not addressed to the classifier.** The classifier emits a weight and
stops. It lives here because this file is the one thing already loaded at the moment a
dispatch is made, so it is the only place a dispatching agent is guaranteed to read.

The dispatch `model` field takes a **tier alias** — `sonnet`, `opus`, `haiku` or `fable` —
**never a full model id**. The ids recorded at install therefore *name* a tier; they are not
values you can pass. Map before you dispatch:

| the model id contains | dispatch alias |
|---|---|
| `opus` | `opus` |
| `sonnet` | `sonnet` |
| `haiku` | `haiku` |
| `fable` | `fable` |
| none of these | **no override** |

Two rules go with the table:

- **Match on the family word, not the whole id.** An exact-id table has no row for someone
  who answered `claude-sonnet-4-5` at install, and the installer accepts any string.
- **An unmappable id means no override — never a guess downward.** That is invariant 1
  applied: no override reproduces the old behaviour for that one setup, which is expensive
  but never wrong.

The alias set is a property of the harness, not of this playbook. Verified against Claude
Code `2.1.226`; re-check it after an upgrade.

**Why `light` sets a tier explicitly instead of overriding nothing.** The two layer
specialists are the only agent templates that pin no `model:` — which is exactly what makes
them weight-eligible — and an agent with no pin defaults to `inherit`, i.e. the
**orchestrator's** model, the strong one. So "no override" silently handed every light
dispatch the expensive tier. `light` therefore sets the cheap tier outright, and invariant 3
still decides the rest: where the specialist pins something higher, set nothing.

---

## You must NOT

- Set, suggest or write a `model:` value — **as the classifier**. You emit a weight; the
  agent that dispatches maps it through the table above. The prohibition is on the
  classification step, not on that mapping: the table is for whoever dispatches, and this
  skill still never writes anybody's `model:` frontmatter.
- Classify the ticket, the track's history, or how hard the last pass was.
- Reuse a weight from a previous dispatch instead of making a new one.
- Emit a weight with no reason line.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.