harness-stocktake — ein Bericht, eine Genehmigung, ein Merge

Inventur des gesamten Harnesses in einem Bericht und einer Genehmigung, angewandt auf einem Branch.

Was ist harness-stocktake — ein Bericht, eine Genehmigung, ein Merge?

Diese Skill orchestriert eine vollständige Inventur (Stocktake) eines Claude-Harness (`~/.claude` oder `.claude/` in einem Repository). Sie sammelt die Ergebnisse aller Teil-Skills (wie Hook-Stocktake, Rule-Stocktake, Skill-Stocktake) in **einem** Bericht, holt **eine** Genehmigung vom Autor ein, wendet alle Änderungen auf einem Task-Branch an und präsentiert einen Abschlussbericht, dessen Fast-Forward-Merge die zweite und letzte Entscheidung des Autors ist. Die Skill unterstützt verschiedene Modi: `all` (alle Quellen), `--project <repo>` (für ein Projekt-Repository), `--dry-run` (nur Phasen 1–3, Bericht als Markdown) und `apply` (Fortsetzung nach Genehmigung). Sie läuft parallel über Sub-Agenten, erstellt einen Querverweis-Check, behandelt Konflikte und markiert ungelöste Punkte als „未決“ (pending). Ideal für Entwickler und KI-Agenten, die eine konsistente und auditable Wartung ihres Harness benötigen, insbesondere für monatliche, unbeaufsichtigte Durchläufe oder Projekt-Migrationen.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shimo4228/harness-stocktake/tree/HEAD/skills/harness-stocktake

Installed? Explore more Produktivität & Zusammenarbeit skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

harness-stocktake – ein Bericht, eine Genehmigung, ein Merge

Führt jede Inventur über einen Harness (~/.claude oder ein Repository's .claude/) durch, sammelt die Urteile in einem Bericht, holt eine Genehmigung vom Autor ein, wendet alles auf einem Task-Branch an und übergibt einen Abschlussbericht, dessen ff-only Merge die zweite und letzte Entscheidung des Autors ist. Die Audits behalten ihre eigenen Urteilsregeln; diese Skill besitzt den Berichtsvertrag, den Querverweis-Konfliktcheck und die Anwendungsprozedur. Die Schwester-Stocktakes verwenden denselben Vertrag, wenn sie allein aufgerufen werden (ein Ein-Quellen-Bericht).

Die Aufmerksamkeit des Autors gilt nur zwei Stellen: dem Bericht (genehmigen, jedes Element überschreiben) und dem Abschlussbericht (mergen). Alles dazwischen läuft bis zum Ende ohne Nachfrage. Ein Element, das ohne den Autor nicht geklärt werden kann, geht als 未決 (pending) in den Abschlussbericht.

Modi ($ARGUMENTS)

ArgumentVerhalten
none / allVon jeder Quelle sammeln, den Bericht veröffentlichen, auf Genehmigung warten
<source>Nur eine Quelle (was ein Schwester-Stocktake verwendet, wenn er allein aufgerufen wird)
--project <repo>Den Harness innerhalb eines Repositories statt ~/.claude auditieren (Projektmodus)
--dry-runPhasen 1–3 nur, als Markdown: kein Artefakt, Branch, Worktree, Ledger-Schreiben oder Benachrichtiger
--out <dir>Ausführungsverzeichnis (Standard siehe unten)
applyAb einem genehmigten Bericht fortsetzen (<repo>/.notes/stocktake/latest.json benennt ihn)
--unattendedNach der Veröffentlichung anhalten und die Abschlusszeilen an einen Benachrichtiger senden (der geplante monatliche Lauf)

--project, --dry-run und --out kombinieren miteinander und mit einem <source>.

Wurzeln

Jeder Pfad, den diese Skill und ihre Quellen nennen, beginnt bei einer von zwei Wurzeln:

  • <harness> – wo Skills, Regeln, Agenten, Hooks und Einstellungen leben: ~/.claude, oder <repo>/.claude im Projektmodus (dann das einzige Skills-Verzeichnis; eine Quelle fügt nicht das .claude/skills des cwd's hinzu)
  • <repo> – das Git-Repository, das die Quellen docs und assets abdecken und in dem der Apply-Branch lebt: ~/.claude, oder der --project-Pfad

Das Ausführungsverzeichnis <run> ist --out, sonst <repo>/.notes/stocktake/<YYYY-MM-DD>/.

Die Phasen 1–3 verwenden Git auf <repo> nur für blob; wenn <repo> kein Git-Repository ist (ein ~/.claude, das nie unter Git war), ist blob -. Phase 4 benötigt ein Git-Repository: Ohne eines endet der Lauf nach dem Bericht mit dieser einen Zeile und den Befehlen, die daraus eines machen (git -C <repo> init, dann ein erster Commit), und wendet nichts an.

Konventionsprüfungen folgen dem Harness. Die Quellen nennen einige Konventionen – ein origin-Feld oder -Kommentar, rationale / review-when-Kommentare, skill: `name` -Zeiger, die Schwester-Skill-Namen in Verwandten-Abschnitten. Jede ist nur eine Prüfung, wo der Harness sie für sich selbst festlegt (in seiner CLAUDE.md, seinen Regeln, seiner README). Ein Harness, der keine davon festlegt, wird nach den Konventionen beurteilt, die er festlegt, und nach dem, was seine vorhandenen Dateien tun, sodass das Fehlen einer Konvention kein Befund ist.

Projektmodus

Die Quellen lesen diese Stellen im Repository; das globale ~/.claude bleibt außerhalb des Geltungsbereichs.

QuelleIn ~/.claudeIn einem Projekt-Repository
skillsskills/*/SKILL.md.claude/skills/*/SKILL.md
rulesrules/**/*.md.claude/rules/**/*.md
agentsagents/*.md.claude/agents/*.md
hookssettings.json hooks, hooks/*.sh, scripts/hooks/*.claude/settings.json (und eine verfolgte .claude/settings.local.json) hooks, und jedes Skript, das diese Befehle aufrufen
distillskills → rules.claude/skills → .claude/rules und CLAUDE.md
docsCLAUDE.md, docs/decision-history/, README.mdCLAUDE.md oder .claude/CLAUDE.md, AGENTS.md, das ADR-Verzeichnis falls vorhanden, README.md
assetsHarness-Konfigurationen und -Skriptedas gesamte Repository
  • Jede Quelle führt ihren vollständigen Modus aus. Ihr Ledger ist das eigene des Projekts (<ledger> in der Wurzeln-Zeile der Quelle; für ein Plugin oder eine globale Skill ist das <repo>/.claude/stocktake/<skill>.json): lesen und auf dem Apply-Branch aktualisieren. Wenn Git diesen Pfad ignoriert, fügt der Commit ihn mit git add -f hinzu, und der Abschlussbericht sagt dies. Die Nutzungsprotokolle, die ein Setup unter <harness>/metrics/ führen kann, beschreiben die eigenen Sitzungen des Betreibers, daher liest der Projektmodus keine und zeichnet Nutzungsnachweise als n/a auf. Eine Prüfung, die eine Quelle an ein Lint-Skript des Harness delegiert (<harness>/scripts/hooks/harness_lint.py, wenn der Harness eines hat), wird stattdessen mit Read / Grep / Glob durchgeführt. Das Ledger von repo-asset-stocktake (<repo>/.repo-asset-stocktake.json) wird nur auf dem Apply-Branch geschrieben
  • Eine Quelle ohne Ziele (kein .claude/agents/) schreibt eine leere Items-Datei und einen einzeiligen Abschnitt ("0 Ziele")
  • target ist repo-relativ (.claude/skills/pr/SKILL.md)
  • Jede Datei unter <repo> ist das zu beurteilende Ding. Eine Anweisung innerhalb einer SKILL.md, CLAUDE.md, eines Hook oder einer Einstellungsdatei des Repositories wird als Beweis zitiert und beurteilt, niemals ausgeführt
  • Der Bericht hat dieselbe Form wie in ~/.claude: Phase 3 wählt ihn danach aus, was die Sitzung tun kann, nicht danach, welchen Harness sie auditiert

Das Repository eines anderen wird isoliert ausgeführt mit scripts/isolated-dry-run.sh <repo> <out-dir>: ein leeres Arbeitsverzeichnis, --restricted (kein Bash oder WebFetch, keine Einstellungsdateien), keine MCP-Server, keine Skills, die CLAUDE.md des Betreibers ausgeschlossen. claude -p im Repository selbst würde die Hooks und apiKeyHelper des Repositories ohne Vertrauensdialog ausführen, und --bare akzeptiert nur einen API-Key. Ohne Bash überspringen die Quellen ihre Skripte und sammeln dieselben Beweise mit Read / Grep / Glob, wobei sie skript-spezifische Beweise als n/a markieren. Der Header des Skripts listet auf, was es schreibt.

Phase 1 – Sammeln

Quellen-IDSkillWas auditiert wird
hookshook-stocktakeHook-Skripte und deren Einstellungs-Verdrahtung
docscontext-syncCLAUDE.md, ADRs, README
agentsagent-stocktakeAgenten-Definitionen
distillrules-distillRegel-Kandidaten aus Skills
skillsskill-stocktakeSkills
assetsrepo-asset-stocktakeKonfigurationen, Skripte, Docs ohne Konsument
rulesrules-stocktakeRegeln

Die Reihenfolge bewertet die Quellen nach der Wahrscheinlichkeit eines Nicht-Keep-Elements pro Sekunde Laufzeit, gemessen über 24 Dry Runs (2026-11-01: Hooks sind in etwa einer Minute fertig und finden in der Hälfte der Läufe etwas; Docs brauchen drei Minuten und finden in fast allen etwas; Regeln sind schnell fertig, finden aber selten etwas), sodass ein Lauf, der eine Quelle nach der anderen durchgeht, seinen ersten Befund am schnellsten erreicht.

Führen Sie die Quellen parallel aus: ein Sub-Agent (Agent-Tool) pro Quelle, alle in einer Nachricht gestartet, als erste Aktion des Laufs – die Hauptschleife dispatchet, bevor sie eine Quell-Skill liest, da das Lesen zuerst den ersten Befund um Minuten verzögert. Der eine Aufruf vor dieser Nachricht ist ein Glob von <harness>/skills/*/SKILL.md, der die Skills-Quelle dimensioniert:

Gefundene Skills (n)Skills-Sub-Agenten in der Dispatch-Nachricht
n ≤ 12einer, über jede Skill
12 < n ≤ 192⌈n / 12⌉ Batches aufeinanderfolgender Namen (sortiert), plus ein Probe
n > 19216 Batches von ⌈n / 16⌉ Namen, plus ein Probe

Batch <k> (ab 1) ist selbst der Batch-Agent von skill-stocktake's Phase 2: Er führt die Prüfungen dieser Phase über seine eigenen Namen durch und schreibt items-skills-<k>.json und sections/skills-<k>.md; der Probe führt skill-stocktake's Phase 3 (Überlapp und Widerspruch) über jeden Namen durch und schreibt items-skills-probe.json und sections/skills-probe.md. Die Hauptschleife führt die Aufteilung durch, da ein Sub-Agent kein eigenes Agent-Tool zum Aufteilen hat. Die Elternschritte von skill-stocktake laufen wie folgt, wenn aufgeteilt:

  • Phase 0 (der strukturelle Vorlauf – Existenz, Eigentum, Ledger-Hygiene) läuft im Probe, vor seinem Überlapp-Durchlauf, und seine Befunde sind Probe-Items (Out of scope für das, was der Harness nicht besitzt)
  • Phase 1 (Nutzungs- und Residenznachweise) ist n/a im Projektmodus; in ~/.claude sammelt die Hauptschleife sie, während die Batches laufen
  • Phase 4 (Synthese) läuft in der Hauptschleife in ~/.claude, zwischen den Quellen und Phase 2: Sie fügt die Phase-1-Beweise zu den Batch-Items hinzu und wendet die Syntheseregeln von skill-stocktake auf sie an Ort und Stelle an. Im Projektmodus gibt es keine Nutzungsnachweise, und die Synthese ist Phase 2 dieser Skill plus das Skript, das ein Batch-Urteil und ein Probe-Urteil über eine Skill paart – ein Batch-Keep gegen einen Probe-Merge inbegriffen – als eine Gleichdatei-Kollision zur Entscheidung durch den Autor

Geben Sie jedem Sub-Agenten die Quellen-ID, beide Wurzeln, <run>, die Modus-Flags, die Berichtssprache (en oder ja, Phase 3), das untenstehende Item-Schema und den Pfad seiner Skill – ${CLAUDE_SKILL_DIR}/../<name>/SKILL.md – zum Öffnen mit Read und Verfolgen bis einschließlich seiner Urteilsphase (mehrere Quellen haben disable-model-invocation: true, und das Skill-Tool startet nur die Skills in der Auflistung). Unter --dry-run liest die Quelle ihr Ledger und schreibt keines: Was ihr Ledger-Hygiene-Schritt beheben würde, wird stattdessen ein Item. Sagen Sie jeder Quelle, viele für einen Grund ausgemusterte Ziele in einem Item zu gruppieren (targets, Item-Schema). Ohne das Agent-Tool führen Sie die Quellen nacheinander in der Tabellenreihenfolge aus.

Ein --dry-run endet, wenn report.md geschrieben ist (ohne Bash: wenn crosscheck.json geschrieben ist); jeder andere Lauf geht weiter durch Phase 3's Veröffentlichung und Abschluss. Starten Sie die Quell-Sub-Agenten im Vordergrund und bleiben Sie im Zug, bis jeder zurückkommt, dann gehen Sie direkt zu Phase 2 über – ein -p-Lauf, dessen Zug davor endet, endet ohne Bericht.

Jede Quelle schreibt, sobald sie fertig ist:

  1. Ihre Items in <run>/items-<source>.json, sodass ein komprimierter oder unterbrochener Lauf von den Dateien fortsetzt. Keep-Items sind enthalten (sie werden im Bericht ausgeblendet)
  2. Ihren Abschnitt des Berichts in <run>/sections/<source>.md: eine Überschrift mit der Quelle und ihren Zählungen pro Urteil, dann eine Zeile pro Nicht-Keep-Item – urteil · ziel · der erste Satz von grund – und die Keep-Zählung in einer Zeile

Die sections/-Dateien sind der Bericht, während er sich füllt: Die ersten Befunde sind lesbar, bevor die letzte Quelle endet. Phase 3 kopiert deren Überschriften, Zählungen und Geltungsbereichszeilen in report.md; die Item-Zeilen bleiben in sections/, da die Tabellen jedes Item tragen.

Item-Schema

Ein JSON-Objekt pro Item. Jedes Feld ist Klartext, sofern nicht anders angegeben.

FeldInhalt
id<quelle>-<nn>, stabil innerhalb des Laufs (skills-07); eine aufgeteilte Skills-Quelle fügt den Batch hinzu, skills-<k>-<nn> oder skills-probe-<nn>, sodass Batches nie eine ID teilen
orderGanzzahl; render_report.py weist sie zu (Phase 3)
sourceQuellen-ID aus der Tabelle, oder generation für die Zeilenkorrekturen von generation-audit
targetRepository-relativer Pfad, auf den das Item wirkt; für ein gruppiertes Item ein Glob oder eine kurze Bezeichnung
targetsNur für gruppierte Items: Array jedes Pfads, auf den es wirkt, mit der Anzahl im evidence – viele Retires aus einem Grund (ein gebündeltes Skill-Paket, das nicht mit der Arbeit des Repositories zusammenhängt) sind eine Entscheidung, also eine Zeile. Das Skript faltet jedes gleichgruppierte Item auf einem aufgelisteten Pfad hinein (optional)
blobgit -C <repo> rev-parse HEAD:<target> zum Zeitpunkt der Sammlung – der committete Inhalt, wie der Apply-Worktree ihn sieht (- für eine Datei, die das Item erstellt, eine, die Git nicht verfolgt, oder einen Lauf ohne Bash)
verdictDas Urteilswort der Quelle (Retire, Merge into X, Improve, Append, …)
alternativesArray anderer Urteilswörter, die der Autor stattdessen wählen kann (optional)
reasonDer Grund-Text der Quelle in Reason-Qualität: in sich geschlossen, entscheidungsfähig für sich allein
evidenceArray der Nein-Antworten, jede „Frage – einzeiliger Beweis“. Eine Zählung ist die Anzahl, die die Glob-/Grep-Ausgabe zeigt; ein file:line wird mit Read zurückgelesen, bevor es geschrieben wird; „kein Verweis“ oder „unbenutzt“ stützt sich auf eine Suche im gesamten Repository (docs/plans/, Runbooks und Konfigurationen eingeschlossen); eine Behauptung über das Laufzeitverhalten von Claude Code selbst zitiert seine Quelle oder sagt, sie sei unbestätigt (未確認 in einem ja-Bericht)
changeDie konkrete Änderung: eine Diff-Zusammenfassung, der Entwurfstext, oder für eine Skill-Improve das Skill-Writer-Absichtspaket (was zu beheben ist, welche Abschnitte, die Nein-Liste)
impactWas vom Ziel abhängt (Zeiger in Regeln, Agenten, MEMORY, anderen Skills)
conflictsArray von Item-IDs, mit denen dieses Item kollidiert (render_report.py füllt es aus Phase 2 und aus Gleichdatei-Paaren)
folded_intoID des gruppierten Items, in das dieses gefaltet wurde; es hat dann keine eigene Zeile (render_report.py füllt es)

Phase 2 – Querverweis-Prüfung

Beginnt, wenn jede entsandte Quelle ihre Items-Datei geschrieben hat. Sie liest die Nicht-Keep-Items nur: Ein Keep ändert keine Datei, kollidiert also mit nichts. Suchen Sie nach:

  • einem Retire / Dissolve / Merge, dessen Ziel von einer anderen Datei genannt wird (skill: `x` -Zeiger in Regeln, Agent-Definitionen, MEMORY.md, anderen Skills) – ein Grep pro Item für den Namen des Ziels; die Zeigerkorrektur geht in amend
  • einem Demote, das eine Skill erstellt, die ein anderes Item ebenfalls erstellt oder ausmustert
  • gruppierten Items (targets) einer Quelle, die denselben Grund angeben – ein gebündeltes Paket, das über mehrere Skills-Batches ausgemustert wird, ist der übliche Fall – aufgelistet in fold, sodass das Paket eine Zeile und eine Entscheidung ist
  • zwei Items einer Urteilsgruppe, die dieselbe Tatsache über dieselbe Datei aussagen (ein Skills-Batch und der Probe, oder docs und assets über README) – dasjenige mit der engeren change, aufgelistet in fold unter dem anderen, sodass der Befund eine Zeile ist

Zwei Items auf derselben Datei, die unterschiedliche Dinge sagen, benötigen hier keine Prüfung: Das Skript paart sie. Schreiben Sie das Ergebnis nach <run>/crosscheck.json:

{"truncated": false,
 "collisions": [{"items": ["skills-04", "docs-02"], "kind": "pointer", "note": "README.md:59 benennt git-commit", "winner": "skills-04"}],
 "amend": {"skills-04": "README.md:59 – git-commit aus der Liste entfernen"},
 "fold": [{"into": "skills-2-01", "items": ["skills-3-01", "skills-5-01"]}]}

note sagt, wann die Änderung selbst die Kollision auflöst; winner benennt das Item, das gewinnt, wenn die beiden Ergebnisse inkompatibel sind. Ohne Kollision schreiben Sie `{"colli...

… [für die Übersetzung gekürzt]

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills