Skip to content
Back to skills

Critic Apply

ASecurity

critic-panel produces the sheet and never applies anything; the author used to pick by hand, and the auto-application policy (operator, 2026-09-01) ran twice as throwaway scratchpad scripts. This skill is that policy as versioned code: the author never reads drivel because the rules decide, and the rules are arguable because they are deterministic.

  • 5 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 3, 2026
ai-agentspythonbashgit

Works with

  • terminal
  • cli

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 3, 2026

npx -y skills add petar-djukic/writing-skills --skill critic-apply --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Critic Apply?

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

Security grade badge for Critic Apply
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/petar-djukic-critic-apply/badge)](https://www.skillsdirectory.com/skills/petar-djukic-critic-apply)

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
<!-- Copyright (c) 2026 Petar Djukic. All rights reserved. SPDX-License-Identifier: MIT -->
---
name: critic-apply
description: >-
  Rule-based application of a converged critic sheet: accept every
  convergent target (2+ critics), skip split panels, decline
  constitution-protected spans with cause, prefer the omission when
  remedies conflict, and count reverse-outline cheap ranks as
  convergence for single-critic deletions. Rewrites route through the
  rewrite transport with a narrow one-sentence instruction and a
  mechanical gate (numbers, citations, em-dash/colon budgets, size
  band); deletions apply directly; rst markers round-trip. Reports
  applied/kept/declined-by-rule for the generation: block. Triggers:
  critic apply, apply the critic sheet, apply the panel, apply
  suggestions by rule, converged sheet application.
argument-hint: '--article <draft.md> --sheet <stem>.critic-sheet.md'
---

# Critic Apply (rule-based sheet application)

critic-panel produces the sheet and never applies anything; the author
used to pick by hand, and the auto-application policy (operator,
2026-09-01) ran twice as throwaway scratchpad scripts. This skill is
that policy as versioned code: the author never reads drivel because the
rules decide, and the rules are arguable because they are deterministic.

## The rules

| rule | effect |
|---|---|
| convergent target (2+ distinct critics on one passage) | accepted |
| split panel (a proposal beside a KEEP/NO CHANGE dissent) | skipped — proposal + dissent is not convergence |
| constitution-protected span (`--protected` verbatim spans) | declined with cause, however many critics want it — the constitution outranks the panel |
| remedy conflict inside a convergence, one remedy a CUT | the omission wins — a deletion authors no prose |
| single-critic CUT on a paragraph reverse-outline ranked cheap (`--cheap-paragraphs`) | accepted — cross-instrument agreement counts as convergence for deletions |
| any other single-critic finding | skipped; the author picks those by hand |

## The mechanics (learned the hard way)

- **rst markers are stripped before the model call and reattached
  after** — their digits fail the number gate (measured on the first
  automated run). A deleted paragraph takes its marker line with it.
- **One narrow instruction per rewrite target**, built from the
  critics' *why*, sent through the rewrite transport
  (`CRITIC_APPLY_MODEL`, default `cohere:command-a-03-2025`) — persona
  prose is never spliced; it is guidance at most.
- **The gate**: number multiset (citations masked first), citation
  multiset (`[@key]` and `[n]`), em-dash and colon counts capped at the
  original's, candidate length within 0.5–1.35× of the original. A
  gated rejection keeps the original, recorded with its reason.
- **Deletions apply directly** with mechanical punctuation
  normalization; omission is not authorship.

## Usage

```bash
python3 <skill>/scripts/critic_apply.py \
  --article draft.md --sheet draft.critic-sheet.md \
  [--protected constitution-spans.txt] \
  [--cheap-paragraphs 3,7] \
  [--dry-run]
```

Output: `<stem>.applied.md` plus `<out>.critic-apply.json` — per-target
records and the applied/kept/declined-by-rule summary the `generation:`
block wants. `--dry-run` decides and reports with no model calls and no
writes. Offline tests: `scripts/test_critic_apply.py`.

## Position

Caller's review phase (GH-208), directly after critic-panel's merge:
sheet → critic-apply → the applied text re-enters the humanize chain as
a new cycle (applied targets are unlaundered rewrite-transport prose).
cold-review and voice-critic read the result; this skill never runs
after the terminal stage of the same cycle.

Files in this skill

  • SKILL.md3.6 KB
  • scripts/critic_apply.py12.7 KB
  • scripts/test_critic_apply.py5.9 KB

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.