Skip to content
Back to skills

Chain Review

ASecurity

Decides whether the nodes after the revision gate still fit the approved spec and plan, and writes a chain_revision change set: skip a node, add a library node, override effort or caps, or change nothing. Kraft runs it as the library's revise_chain task, right after the spec and plan are approved.

  • 7 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 21, 2026
ai-agentsgonodesecurity

Security analysis

A100/100

Scanned October 21, 2026

npx -y skills add itsOmidKarami/kraft --skill chain-review --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Chain Review?

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

Security grade badge for Chain Review
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/itsomidkarami-chain-review/badge)](https://www.skillsdirectory.com/skills/itsomidkarami-chain-review)

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: chain-review
description: "Decides whether the nodes after the revision gate still fit the approved spec and plan, and writes a chain_revision change set: skip a node, add a library node, override effort or caps, or change nothing. Kraft runs it as the library's revise_chain task, right after the spec and plan are approved."
---

# Chain Review

You are looking at a work item whose spec and plan were just approved. The chain
it runs was chosen at intake, from a template, **before either document
existed**. Your job is to say whether that guess still holds now that the real
work is known.

You are not reviewing the plan. It is approved and not yours to change. You are
reviewing the *chain*: the nodes that run after the revision gate, in light of
the plan.

## The default is to change nothing

Most of the time the template was right. A chain chosen sensibly at intake and a
plan about the size everyone expected need no intervention, and an empty change
set is the correct, common answer. It also costs nobody anything: an empty
change set passes the revision gate without a person being asked.

Change the chain only when you can point at a specific line in the spec or plan
that the current chain handles badly. "This could plausibly benefit from more
review" is not such a line. If you cannot name the evidence, leave it alone.

## What you get

- The approved **spec** and **plan**.
- After your task instruction, **the nodes you may change**, as authored JSON,
  with every task's canonical path (`node.step.task`; a `tasks:` group's step is
  `main`). Everything up to and including the revision gate has run or is
  running.
- The library components you may add from: run `kraft admin templates library`
  (and `kraft admin templates library <name>` for one component's definition).

## The hard rule: only the tail

You may change **only the nodes listed after the revision gate**. Nothing at or
before it: those nodes have run, their gates were answered by a person, and
their sessions and events already exist. A change set that names one is refused
whole.

**A gate never changes.** You cannot skip one, override one, or add one. Gates
are a person's control over the run; deciding that a person need not look is not
your decision.

## What you may propose

Three kinds of change, and nothing else. Every change carries `evidence`: the
line of the spec or plan that asks for it, quoted or cited closely enough that
the person at the gate can find it.

- **`skip`** a node that has become pointless. Demand stronger evidence than for
  adding: you are removing a check someone thought worth running. Never skip the
  last verification of a change to executable code. A node that opens,
  describes, syncs, readies or merges the merge request or waits on its checks,
  a node marked `skippable: false`, a node another node restarts from, and a
  node a gate rejects back to cannot be skipped; the proposal is refused if you
  try.
- **`add`** an execution node after a named node (the revision gate itself, or
  any node after it). An added node is built **only from library components**:
  either `{"id": ..., "extends": "<library node>"}`, or
  `{"id": ..., "tasks": [{"id": ..., "extends": "<library task>"}]}` (or
  `steps` of such tasks). A component an add-on ships is named as
  `kraft admin templates library` lists it, `<namespace>:<name>`
  (`release:security-review`); the `id` you give the node or a task is always
  bare. No prompts, commands or settings of your own. If the
  component the plan calls for is not in the library, do not approximate it with
  a different one: say so in `rationale` and propose nothing for it.
- **`overrides`** at a canonical path: an agent task's `model` or `effort`, or
  an operational policy value -- `time_cap_minutes`, `total_time_cap_minutes`,
  `token_budget` or `budget_usd` on a node or task, and `max_attempts` or
  `timeout_minutes` on an execution node's fix loop. Kraft holds each within the
  administrator maxima and under its enclosing scope's cap. Tools, sandbox,
  harness and permissions are not yours to change; a concern about one goes in
  `rationale` for the person.

| Evidence in the spec or plan | Reasonable change |
|---|---|
| Touches authentication, sessions, tokens, secrets or permission checks | Add the library's security-review node if the library has one; otherwise say so in `rationale` |
| A plan task is clearly heavier than the template assumed | Raise that task's `effort`, or its node's fix-loop `max_attempts` |
| The plan's task count, at about 15-20 minutes per task, is more than the implementing task's `time_cap_minutes` holds | Raise that task's `time_cap_minutes` to fit, citing the plan's task count and the current cap |
| The plan is docs-only, with no executable change | Skip a node that only runs tests, if the tail has one; never a node that holds the review |
| A risk section names a failure mode the chain never checks, and the library has the check | Add it |

Leave it alone when the chain differs from what you would have picked but
nothing is wrong with it, when you want to reorder for tidiness, when the plan is
merely large, and when you are unsure. Unsure means no change.

"Merely large" does not cover a time cap. A plan's size alone is no reason to
add review or raise effort, but a task count the implementing task cannot finish
inside its `time_cap_minutes` is concrete evidence: the cap stops the run
mid-plan, a person has to retry it, and the plan was already there to count.
Read the cap from the nodes you are given. Measured on a nine-task plan, tasks
took 4 to 41 minutes each, about 17 on average, so budget roughly 15-20 minutes
a task and round up.

## Output

Write the `chain_revision` document the task asks for. After its front matter,
the body is **exactly one fenced JSON block and nothing else**: no heading, and
no prose before or after it. Kraft parses the whole body strictly. An unknown
key, a key written twice, or anything outside the fence makes the proposal
unreadable, and a person has to send it back. Anything you want the person to
read goes in `rationale` and in each change's `evidence`; Kraft renders them,
with the diff, at the gate.

````
```json
{
  "rationale": "One short paragraph: what you changed and why, or why the chain fits.",
  "skip": [{"node": "<node id>", "evidence": "<spec or plan line>"}],
  "add": [
    {
      "after": "<node id>",
      "node": {"id": "<new id>", "extends": "<library node>"},
      "evidence": "<spec or plan line>"
    }
  ],
  "overrides": {
    "<canonical path>": {"effort": "high", "evidence": "<spec or plan line>"}
  }
}
```
````

`skip`, `add` and `overrides` may each be left out. The no-change answer is
just:

````
```json
{"rationale": "The plan is one focused change the chain already covers."}
```
````

## Before you write it

- Does every change name a node after the revision gate, and no gate?
- Does every added node and task `extend` a component `kraft admin templates
  library` lists, by the name it lists, and give a bare `id`?
- Does every change carry evidence from the spec or plan, not a description of
  the change itself?
- If nothing needs to change, did you write the empty change set rather than
  inventing one?

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.