Agent skill

Dr Spec Change

by AHepi in AHepi/DeepReason

Translate a captured request into a concrete, bounded change specification (SPEC.md) with per-requirement acceptance checks and recorded assumptions.

MITAuto-check passed

Install Dr Spec Change

skills CLI
$ npx skills add AHepi/DeepReason --skill dr-spec-change -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install AHepi/DeepReason dr-spec-change --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/AHepi/DeepReason.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/dr-spec-change .claude/skills/dr-spec-change && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
dr-spec-change
GitHub stars
141
Token cost
~2.6k tokens
SKILL.md length
1,378 words
Files
1
Skills in repo
30
Repo updated
First seen
Licence
MIT

At a glance

Translate a captured request into a concrete, bounded change specification (SPEC.md) with per-requirement acceptance checks and recorded assumptions.

  • Works in 9 steps: For EVERY R in REQUEST.md (no skips —… → Resolve each open question Q → Frozen-surface contact forecast —… → …
  • SKILL.md covers Procedure, SPEC.md template and Exit criteria
  • Calls python3

What it does

Dr Spec Change is an agent skill from AHepi/DeepReason. Translate a captured request into a concrete, bounded change specification (SPEC.md) with per-requirement acceptance checks and recorded assumptions. Use after REQUEST.md exists or gains amendments.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The licence is MIT.

Example prompts

  • “/dr-spec-change”

Requirements

  • Python 3

Workflow steps

9 steps, taken from the first numbered list in SKILL.md.

  1. For EVERY R in REQUEST.md (no skips — walk the numbers in order),
  2. Resolve each open question Q
  3. Frozen-surface contact forecast — mandatory, in writing. Run
  4. Record-observable guardrails, for changes that add data to the
  5. Blast-radius census — mandatory, pasted, BEFORE any fixture-drift
  6. DESIGN-AND-STOP shape. When the deliverable IS the spec (a
  7. Set the budget: total estimated changed lines and commits. If over
  8. Anti-invention pass: re-read SPEC.md and delete anything that does
  9. Rubric pass — the last act before committing. Re-read the finished

What it can do on your machine

Read from SKILL.md and the folder at commit 9607fba. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Dr Spec Change loads about 2.6k tokens when it runs. Until then it costs about 53 tokens; SKILL.md has 1,378 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~53
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from AHepi/DeepReason at commit 9607fba, republished under its MIT licence (© AHepi). 1,378 words, ~2,602 tokens.

Download SKILL.mdSave it as .claude/skills/dr-spec-change/SKILL.md (or your agent's skills folder).
name
dr-spec-change
description
Translate a captured request into a concrete, bounded change specification (SPEC.md) with per-requirement acceptance checks and recorded assumptions. Use after REQUEST.md exists or gains amendments.

Specify the change

Input: REQUEST.md (re-read it in FULL first, including amendments). Output: SPEC.md mapping every requirement to concrete work with a machine-decidable acceptance check. This is the only phase where interpretation happens, and it happens in writing.

Procedure

  1. For EVERY R in REQUEST.md (no skips — walk the numbers in order), write a spec item: target files, behavior before → behavior after, and an acceptance check (a command + expected output, or an artifact-exists-with-content check). A requirement with no acceptance check is not specified yet.

  2. Resolve each open question Q:

    • If the readings differ only in minor detail: pick the smallest reasonable one and record it under Assumptions with the words "assumed, operator may override".
    • If the readings differ materially (different files, different behavior, >2x effort): put it in "Questions for operator" and STOP after committing SPEC.md — present the batched questions. Never start implementation with a material ambiguity open. First load dr-ask-the-right-question and run each candidate question through it: the record or the operator's recorded values answer most of them, and only survivors of its dominance test belong in the batch (each with a recommendation).
    • A mechanism the request NAMES — a fixture to reuse, a file to copy, a pattern to follow — is a suggestion, not a requirement. Verify it actually reaches the code this change touches (trace the call path) before adopting it. If it cannot, that is a material contradiction: deliver the PROPERTY the requirement wants and record the contradiction in writing, or fork to the operator. Never adopt a named mechanism unverified, and never deviate from it silently. (Recorded misses this rule generalizes: docs/ERRATA.md E10 — a handover-named fixture that never executed the migrated code; docs/ERRATA_EXECUTOR.md X11 — a false premise in the authorization itself.)
  3. Frozen-surface contact forecast — mandatory, in writing. Run python tools/blast_radius.py --files <every planned target file> --symbols <every planned target symbol> (Rung G6, docs/map/INV-frozen-surfaces.md) and record its frozen_surface_contacts/frozen_adjacent_contacts result in SPEC.md's "Frozen-surface contact forecast" section; "none expected" counts, but only after actually running the gate — a hand-checked "none" is no longer sufficient once the gate exists to check it. ANY plausible contact (the gate's frozen_surface_verdict: CONTACT, or an UNKNOWN reachability entry the gate cannot resolve) stops the tranche HERE: commit SPEC.md and obtain the operator's words before dr-plan-steps runs. The STOP message — and this document's own Frozen-surface contact forecast / Decision sheet sections — MUST embed tools/blast_radius.py's computed frozen_surface_contacts (and frozen_adjacent_contacts) list verbatim, never a hand-written summary of it. A STOP that describes contact without pasting the tool's own list is not this checkpoint — the words the operator gives in reply are words given over a disclosed, computed surface, never an inferred one (the design premise of experiments/2026-08-10-change-blast-radius-analysis/REQUEST.md). Contact discovered at validation is three commits too late — the tranche that proved it (docs/ERRATA_EXECUTOR.md X9, XE1) was technically perfect and still could not deliver, and the 2026-08-09 incident (same file, "the frozen-surface stop did not hold") shows a STOP already written in prose is not a STOP that was obeyed — the gate exists precisely so that finding cannot be silently outrun by memory three steps later.

  4. Record-observable guardrails, for changes that add data to the typed record: the absence-tolerant READER lands before the writer emits, so every existing committed root stays valid with the new data absent (the rung-4 guardrail generalized; X8 is the precedent for keeping new fields out of frozen digests entirely). A new typed-record OBSERVABLE (field, record type, finding) needs a sweep probe proposed for it in the spec: a sweep that never looks at the new data reports "byte-identical" trivially while proving nothing about it. The probe change is its own SEPARATE commit — extending tools/root_sweep.py resets the byte-identity baseline, so it never rides the same commit as the src/ change it would judge, gets its own before/after capture on an unchanged tree, and follows the tool's probe rule (assert the attribute exists before reading it). Build every proposed test, check, and probe to dr-execute-step's "Durable tests, checks, and probes" rules — they must survive dramatic repo changes, failing only when the guarded claim stops being true.

  5. Blast-radius census — mandatory, pasted, BEFORE any fixture-drift prediction. Tool-backed (Rung G6): the same tools/blast_radius.py invocation step 3 already ran also reports consumers (tests, map documents, the qualification digest, the wheel-smoke pins) for every declared target — paste its consumers.tests/consumers.map_checks fields into SPEC.md's "Blast-radius census" section and classify EVERY hit: EXPECTED TO MOVE (the design predicts it) or MUST NOT MOVE. The manual grep

    grep -rn "<symbol>" tests/ docs/map/

    is RETAINED as a required cross-check specifically for anything the gate's own reachability field reports UNKNOWN, or for a symbol shape the gate cannot resolve (a role-dispatch string label rather than a Python identifier, for instance) — the gate augments the census, it does not remove the author's own judgment where the gate has said, in writing, that it cannot judge. A drift forecast written without this census is recall, and recall missed in two consecutive specs — under the MORE capable model both times (rung-5 PARKED P6): rung 4's prediction was too narrow; rung 5's spec predicted nothing and missed a test pinning "exactly one backend", the exact state that rung existed to change. The full gate caught both, three commits later than the census would have.

  6. DESIGN-AND-STOP shape. When the deliverable IS the spec (a [DESIGN-AND-STOP] request), two more sections are mandatory, and their discipline is measure-don't-reason (the rung-4 M1-M5 precedent, the one design spec that survived contact with the tree unchanged):

    • Measurements: every load-bearing design claim is a pasted command output. A claim with no measurement is an assumption and is moved to Assumptions, where the operator can see it.
    • Options: every considered option priced — files touched, frozen-surface contact, estimated lines, risk — and every rejection cites a measurement, not a preference.
  7. Set the budget: total estimated changed lines and commits. If over ~300 lines, propose a split into ordered sub-tranches (each with its own delivery) rather than one sprawling one. The Budget section's headline number(s) MUST equal the computed sum of the itemized per-item estimates above — paste the arithmetic (e.g. python3 -c "print(sum([...]))"), never restated by hand. This is the number tools/diff_budget.py's DIFF_BUDGET_RESULT_V1.verdict is checked against at every [COMMIT] step (dr-execute-step); a headline that contradicts its own itemization defeats the ceiling before the first commit (Rung S5, REQUEST.md Amendments 2/3: its headline said 220-300, its own itemization summed to 435).

  8. Anti-invention pass: re-read SPEC.md and delete anything that does not trace to an R or C number. If it felt necessary, it is either an assumption (record it) or scope creep (PARKED.md).

  9. Rubric pass — the last act before committing. Re-read the finished SPEC.md as a REVIEWER, not the author; any "no" routes back to that step before commit:

    • every R has a spec item with a machine-decidable accept?
    • blast-radius census pasted (or pasted-empty) and every hit classified?
    • frozen-surface contact forecast recorded?
    • every mechanism the request names traced to code it actually reaches?
    • DESIGN-AND-STOP only: every claim measured, every option priced?
    • nothing in the spec untraceable to an R/C number? Record the outcome as one line in SPEC.md ("Rubric: n/n yes").
Show full SKILL.md (61 more words)Show less

SPEC.md template

# Spec for: <request headline>
Traces: every item cites R/C numbers. Untraceable items are bugs.

## Items
S1 (R1): <files> | before: <...> | after: <...>
    accept: <command> -> <expected>
S2 (R2, C1): ...

## Assumptions (operator may override)
A1 (Q1): <chosen reading, one line, and why it is the smallest>

## Questions for operator (STOP if non-empty)
...

## Out of scope (explicit)
<nearest tempting neighbors, each with "not requested">

## Frozen-surface contact forecast
none expected — checked against INV-frozen-surfaces.md
| <surface>: <why contact is plausible> (STOP — operator words
  required before dr-plan-steps)

## Blast-radius census
<symbol/file>: <test or map check hit> -> EXPECTED TO MOVE |
  MUST NOT MOVE
(every grep hit listed, none omitted; "no hits" is a valid census)

## Measurements (DESIGN-AND-STOP only)
M1: <command> -> <pasted output> — supports <claim>

## Options (DESIGN-AND-STOP only)
A: <files, frozen contact, ~lines, risk> | rejected: cites M<n>
B: ... | CHOSEN: cites M<n>

## Budget
~<n> lines, <n> commit(s). Frozen surfaces touched: none | <flagged>

Rubric: <n>/<n> yes

Exit criteria

  • SPEC.md committed and pushed; every R number appears in some item (or is explicitly marked deferred with the operator's words allowing it).
  • The rubric pass ran and its line is in SPEC.md; a spec with no "Rubric:" line was committed without its last check.
  • If "Questions for operator" is non-empty: stopped and asked.
  • Return to the orchestrator.

© AHepi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/dr-spec-change of AHepi/DeepReason.

Open the folder on GitHubat commit 9607fba

Compare with similar skills

Dr Spec Change next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Dr Spec Change compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Dr Spec Change this skillAHepi/DeepReason141—~2.6kAutomated safety check: PassMIT
Translation Diff TranslateDevolutions/UniGetUI26k—~934Automated safety check: PassMIT
Plane UI Translationmakeplane/plane61k—~16kAutomated safety check: PassAGPL-3.0
Visa Doc Translateaffaan-m/ECC276k4 repos~1kAutomated safety check: PassMIT
Translatorholaboss-ai/holaOS11k—~617Automated safety check: PassCustom licence
Generate Translationspayloadcms/payload45k—~1.1kAutomated safety check: PassMIT

Similar skills

  • Translation Diff Translate

    Devolutions/UniGetUI

    Translates a sparse UniGetUI JSON language patch, writes completed entries into the working copy, preserves placeholders and terminology, and prepares the patch for merge-back.

    26k GitHub stars~934 tokensUpdated today
    Writing & ContentAuto-check passed
  • Plane UI Translation

    makeplane/plane

    Sets the rules for translating and updating Plane's UI strings across locales: do-not-translate terms, plural forms, placeholders and AI translation review.

    61k GitHub stars~16k tokensUpdated today
    Writing & ContentAuto-check passed
  • Visa Doc Translate

    affaan-m/ECC

    Translate visa document images (bank deposit, employment, income, and retirement certificates; HEIC, PNG, or JPG) into English via OCR and produce a bilingual PDF pairing the original image with a…

    276k GitHub starsUsed in 4 repos~1k tokens
    Writing & ContentAuto-check passed
  • Translator

    holaboss-ai/holaOS

    Translate content across languages while preserving brand voice and cultural nuance.

    11k GitHub stars~617 tokensUpdated 1 mo ago
    Writing & ContentAuto-check passed
  • Generate Translations

    payloadcms/payload

    A skill your agent uses when new translation keys are added to packages to generate new translations strings

    45k GitHub stars~1.1k tokensUpdated today
    Writing & ContentAuto-check passed
  • Translation

    doxygen/doxygen

    Keeps all Doxygen and Doxywizard translations up to date across three mechanisms: translator C++ classes (src/translatorxx.h), Qt .ts locale files for the Doxywizard GUI (addon/doxywizard/i18n/)…

    6.6k GitHub stars~5.2k tokensUpdated 8 days ago
    Writing & ContentAuto-check passed

More from AHepi/DeepReason

All 30 skills in this repo
  • Pinker Clarity Workflow

    AHepi/DeepReason

    Orchestrate a Steven Pinker-grounded workflow for teaching, explanatory writing, or material that must do both.

    141 GitHub stars~1.5k tokensUpdated 28 days ago
    Auto-check passed
  • Design, deliver, or audit explanations and lessons with a Pinker-informed focus on phenomena, the curse of knowledge, concrete models, active reasoning, feedback, and revision.

    141 GitHub stars~1.8k tokensUpdated 28 days ago
    Auto-check passed
  • Pinker Write For Readers

    AHepi/DeepReason

    Draft, revise, teach, or audit expository prose using Pinker's cognitive approach to style: classic presentation, reader modeling, curse-of-knowledge repair, coherent information order, deliberate…

    141 GitHub stars~2.1k tokensUpdated 28 days ago
    Auto-check passed
  • Example Battery

    AHepi/DeepReason

    Build a battery of concrete instances BEFORE writing or evaluating any definition, pin, or semantic clause (Reed step 1).

    141 GitHub stars~811 tokensUpdated 28 days ago
    Auto-check passed
  • Authoring Skills

    AHepi/DeepReason

    Rules for writing, editing, and retiring skill and workflow files for LLM agents.

    141 GitHub stars~1.7k tokensUpdated 28 days ago
    Auto-check passed
  • Deepreason Orchestrator

    AHepi/DeepReason

    Entry point for any DeepReason problem. An agent skill from AHepi/DeepReason.

    141 GitHub stars~1.1k tokensUpdated 28 days ago
    Auto-check passed

Questions about Dr Spec Change

What does Dr Spec Change do?

Translate a captured request into a concrete, bounded change specification (SPEC.md) with per-requirement acceptance checks and recorded assumptions. Dr Spec Change is an agent skill from AHepi/DeepReason.md) with per-requirement acceptance checks and recorded assumptions.

How do I install Dr Spec Change in Claude Code?

Run `npx skills add AHepi/DeepReason --skill dr-spec-change -a claude-code`. Or copy the skill folder (.claude/skills/dr-spec-change in AHepi/DeepReason) into .claude/skills/dr-spec-change in your project. Claude Code loads it when a task matches its description.

How do I install Dr Spec Change in Codex?

Run `npx skills add AHepi/DeepReason --skill dr-spec-change -a codex`. Or copy the skill folder (.claude/skills/dr-spec-change in AHepi/DeepReason) into .agents/skills/dr-spec-change in your project. Codex loads it when a task matches its description.

Can I use Dr Spec Change in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AHepi/DeepReason --skill dr-spec-change -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dr-spec-change, .gemini/skills/dr-spec-change, .github/skills/dr-spec-change and .opencode/skills/dr-spec-change in your project.

What does Dr Spec Change need to run?

Going by SKILL.md and its folder, Dr Spec Change needs the command-line tools its instructions call (python3). Our summary lists: Python 3.

Does Dr Spec Change access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Dr Spec Change safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Dr Spec Change use?

Dr Spec Change is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Dr Spec Change use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Dr Spec Change?

Skills that share tags, products or a category with Dr Spec Change: Translation Diff Translate (Devolutions/UniGetUI, 26k stars), Plane UI Translation (makeplane/plane, 61k stars), Visa Doc Translate (affaan-m/ECC, 276k stars) and Translator (holaboss-ai/holaOS, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Dr Spec Change?

AHepi (a GitHub user) maintains it in AHepi/DeepReason, which has 141 GitHub stars. The repository holds 30 skills in this directory. The repository was last updated on September 10, 2026.

Source: AHepi/DeepReason on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.