Draft — not published.
“An article series is in progress here in the meantime — a draft, not yet published.”
Entwurf — nicht veröffentlicht.
„In der Zwischenzeit entsteht hier eine Artikelreihe — ein Entwurf, noch nicht veröffentlicht.“
Bản nháp — chưa xuất bản.
„Trong lúc chờ, một chuỗi bài đang được viết ở đây — một bản nháp, chưa xuất bản."
README.md:10 · verbatimREADME_de.md:10 · wortgleichREADME.md:10 · nguyên văn
Bản tiếng Việt là bản dịch máy.
Bản gốc do tác giả viết bằng tiếng Anh; bản tiếng Đức là bản song hành do tác giả viết.
Bản tiếng Việt được dịch từ bản tiếng Anh đã được kiểm chứng — mọi con số, trích dẫn,
định danh và đường dẫn được giữ nguyên. Khi có khác biệt, bản tiếng Anh là bản chuẩn.
Sơ đồ dùng bản tiếng Anh — chưa có bản kết xuất tiếng Việt, nên nhãn bên trong hình vẫn là tiếng Anh.
Insights · Series · 19 parts · complete text, English, German and Vietnamese
Insights · Serie · 19 Teile · Volltext, Englisch, Deutsch und Vietnamesisch
Insights · Chuỗi bài · 19 phần · toàn văn, tiếng Anh, tiếng Đức và tiếng Việt
Survival toolbox: building your own skill system
Survival-Toolbox: das eigene Skill-System bauen
Bộ công cụ sinh tồn: tự xây hệ thống kỹ năng của bạn
The complete series. A method for handing real work to an AI agent and
getting the same thing out twice — five layers, in the order they have to be built — and the
evidence it was tested against: ten public skill repositories, each read at source on one day.
Toàn bộ chuỗi bài. Một phương pháp để giao việc thật cho một AI agent
và nhận lại cùng một kết quả hai lần — năm lớp, theo đúng thứ tự phải xây — cùng bằng chứng
mà nó đã được kiểm chứng: mười kho skill công khai, mỗi kho được đọc tại nguồn trong một ngày.
Die vollständige Reihe. Eine Methode, um echte Arbeit an einen
KI-Agenten zu übergeben und zweimal dasselbe herauszubekommen — fünf Schichten, in der
Reihenfolge, in der sie gebaut werden müssen — und der Beleg, an dem sie geprüft wurde: zehn
öffentliche Skill-Repositories, jedes an einem Tag an der Quelle gelesen.
191919ArticlesArtikelBài viết
39,82138.57154.923WordsWörterTừ
188184259MinutesMinutenPhút
316316316Table rowsTabellenzeilenDòng bảng
101010DiagramsDiagrammeSơ đồ
333LanguagesSprachenNgôn ngữ
1/19000016 min · 3,305 words15 Min · 3.166 Wörter21 phút · 4.421 từ30 rowsZeilenrows5 figuresAbb.figures
Survival toolbox: building your own skill system for working with virtual colleagues
Survival-Toolbox: das eigene Skill-System für die Arbeit mit virtuellen Mitarbeitern bauen
Bộ đồ nghề sinh tồn: xây dựng hệ thống skill của riêng bạn để làm việc với đồng nghiệp ảo
Survival toolbox: building your own skill system for working with virtual colleagues#
For anyone starting to hand real work to an AI agent — a virtual colleague — who wants the same thing to come out twice. Written for product owners, sales, business analysts, HR, people new to the field, and anyone who started with vibe-coding. You do not need to be able to program.
The examples come from different roles, one per layer. Where there are figures and studies, they have moved into their own section at the end — the whole series can be applied without reading it.
Applies to: written arrangements for delegating work to AI agents
Last verified:draft — the external citations still need a read date, see Open
Status: outline + first draft — the one spot that needed a source now has one on the page where it belongs
The problem. With an AI agent a result arrives in minutes and looks good. But the second time something different comes out, and afterwards nobody can say why. For a demo that is fine. For something that carries everyday work it is not.
The cause. The agent has no memory of what you are building and no idea what counts as "right" where you work. Both have to be written down somewhere — otherwise it guesses again every time.
The answer is not a tool. It is a small stack of files. Five kinds, built in this order:
What it is
What it prevents
Holds when nobody looks?
1
Standing rules — what is always true
Everything being renegotiated each time
no
2
Mechanical gates — an automatic check, something that refuses
The most important rule folding under pressure
yes
3
Named rituals — a named procedure for how a job goes
It going differently every time
no
4
Written records — what was supposed to happen
Nobody being able to check afterwards
no
5
Index, triggers and upkeep — search, fire at the right moment, tidy up
The stack rotting
no
Only number 2 holds by itself. Everything else is an agreement — valuable, and voluntary.
What you do today. Open an empty file, call it AGENTS.md, and write three sentences in it that apply to every job. Ideally three prohibitions — things you have already watched go wrong. That is layer 1, and it takes ten minutes.
If you want to carry on after that: layer 2 is the only one that really holds, which is why it comes second.
Ten public repositories read against these layers — including where they contradict them
Each layer page reads in four minutes and has the same shape: in one sentence · an example · what you do today · what it is made of · what it cannot do · what goes wrong · done when.
Producing output has become easy. A paragraph of text, a piece of code, a draft campaign — minutes, and it looks good. That is enough to get attention. For everything after that, it is not enough.
Because a product or a process that carries everyday value asks for something other than a good result. It asks for the same good result again — next week, started by somebody else, in a state nobody holds in their head any more. Vibe-coding puts a pretty, running prototype in front of you in an hour; the distance from there to something you hand a customer is the actual work. Outside software it is the same: a presentation takes an hour, a quoting process three people can run without asking anyone does not.
The effort did not disappear. It moved — from producing to checking, to a place nobody had staffed. That is measured; the figures are further down under What is actually evidenced.
The longer the conversation, the less reliable — well before any limit is reached
It does not know what you are building
And the memory features sold as the answer have not solved that
It does the same thing two different ways
Same job, different result, without anyone having done anything wrong
Against the first two there is little to build; they are properties of the tools and will improve or not. The third is different. That is exactly where a written way of working changes the outcome — and it is the only thing this series is about.
"Consistent" here means nothing grand: that a recurring job runs the same way twice, that what was supposed to happen stays reconstructable, and that somebody who was not there can hold the result against it.
The destination — and the measured distance to it#
It is built for a way of working in which virtual and real colleagues work on the same product — with product owners who decide and providers who deliver. That is a destination, not a description of something finished, and this series does not treat the role model.
What it can do is hold the destination against actual experience. Of the ten topics such a way of working has to cover, exactly two sit only in the weakest layer — who may hand over what, and who may decide without asking (the completeness test). The two that would have to carry the collaboration stand on nothing but goodwill. And in the collection this series comes from, 36 of 60 written procedures had never once been used (the measurement).
The destination stays the destination; the distance to it is measured rather than asserted.
Layers one and two, the standing rules and the mechanical gates, are built first and both feed layer three, the named rituals. Layer three feeds layer four, the written records. Layer five, which is index, triggers and upkeep, maintains the other layers. Only layer two holds when nobody is reading.
Figure The five layers of the toolbox and the order to build them
Build 1 and 2 first. Most people start at 3, because writing a procedure down is the enjoyable part, and arrive at 2 only after something escapes. If you build only two, build 1 and 2: one prohibition plus one check that fires is a working toolbox. Three procedures and no check are a folder.
The five layers are categories, not files. Here is what they become when they land — in three pictures rather than one, because eleven artefacts drawn side by side come out too small to read.
Layers 1 and 2 — the two you build first.
The discipline breaks first into two layers. Layer one, the standing rules, becomes an AGENTS.md inside the project and a second rule file that applies across all projects. Layer two, the mechanical gates, becomes the same check in two places: a local hook on your own machine and a CI job on the server.
Figure What the standing rules and the mechanical gates become on disk
Both pairs are deliberate. The check appears twice, because a check in exactly one place is not a check: one runs on your machine, the other centrally — and only the central one cannot be skipped. The rule file appears twice for a different reason: the file in the project and the one covering all projects can say different things, and the nearer one wins.
Layers 3 and 4 — what the work runs on, and what it leaves behind.
Two further layers. Layer three, the named rituals, becomes one file per ritual. Layer four, the written records, becomes three artefacts on three timescales: a charter per job, a handover note per working session, and a decision entry carrying its reasoning.
Figure What the named rituals and the written records become on disk
The record has three artefacts rather than one, because "what was supposed to happen" accrues on three timescales: per job, per working session, per decision.
Layer 5 — what keeps the other four findable.
The fifth layer, index, triggers and upkeep, becomes three artefacts: one search command that covers everything, a generated index of what exists, and an archive with a way back out of it.
Figure What the index, trigger and upkeep layer becomes on disk
Those three exist for the other four: the one command that searches everything, the list it produces, and an archive you can come back out of.
prohibitions · the exception next to its rule · a mark saying what is enforced and what is not · the most important thing first
The brief on day one; the two sentences from the handbook everyone remembers
Check
the check itself · both places · output saying what it examined · failing when it cannot run
The form that will not submit; the second signature
Procedure file
name + description · preconditions · numbered steps · what must stay true · non-goals · when to stop · who may skip
The standard operating procedure with a trigger; the handover template
Record
a goal in one sentence that could be wrong · steps as a checklist · claims with a date · open decisions as boxes
The decision log; the brief written before the project
Index
the one search command · the list · the archive · the way back
The searchable template library with exactly one current version
The procedure file's seven building blocks are only named here. They are explained exactly once, in layer 3 — the same rule layer 5 states, applied here to the series itself. A second explanation would be a copy, and copies drift apart.
Where a layer has no file name, you do not have that layer. It is the cheapest self-test in the series.
This section is built to be skipped. Anyone applying the series does not need it; anyone who wants to know what it rests on will find the figures here, with their limits attached.
The effort moved. A longitudinal study of 802 developers and 196,212 pull requests found throughput at 2.09× — and alongside it, per-reviewer load roughly doubled while automated review overtook human review. Output doubled. The reviewing doubled with it. Then the reviewing itself was handed to machines.
Memory. Long conversations do not fail at the boundary; they degrade well before it. Once literal keyword overlap is removed from the task, 11 of 13 models fall below half their own short-context baseline at 32K. And the memory architectures sold as the answer have not fixed it — in one vendor's own evaluation, simply pasting the raw conversation outscored every system tested, including their own.
The unreliability. The word "consistency" does not appear in this area's source texts. The thing itself is measured anyway: spreading one instruction over several conversational turns costs 39% on average — of which only −16% is aptitude, while unreliability rises 112%. And 1,000 completions at temperature 0 produced 80 distinct outputs.
What written rules do — and do not do. They do not make an agent more capable, and what they cost is contested. One controlled evaluation of repository context files found they did not generally improve success rates while raising cost by over 20%; a second study, measuring the same kind of file purely as an efficiency mechanism, found the opposite sign — 16.58% fewer output tokens and 28.64% less wall clock. Two preprints, two different setups, opposite results. The disagreement is not resolved here; both are set out side by side, with their scopes attached, in testing a rule.
What rules do govern is behaviour under conflict, and there the effect is large — removing a single consent clause moved destructive out-of-scope actions from 0.0% to 17.1%. Read that number for what it is: it compares a rule being present against it being absent, not one wording against another. It therefore supports a narrower point than it looks like it does — a rule naming a recognisable action ("never push to main") is easier to apply in the moment than one naming a virtue ("always work cleanly"), because you can tell whether you are about to do it. That is an argument about recognisability, not about compliance rates.
Alongside it, answering a different question, there is a measurement. A large-scale controlled study of agent rule files — 679 scraped from GitHub, 25,532 rules, over 5,000 agent runs on SWE-bench Verified — reports that in its data every rule that improved task performance on its own was a prohibition ("do not refactor unrelated code"), and every rule that hurt it was a positive directive ("follow code style") (Guardrails Beat Guidance, arXiv:2604.11088). Two things in the same paper take the lever away from that. "In our data" means rules classified as they were found in the wild; nobody wrote the same rule both ways and compared. And randomly generated rules helped as much as expert-curated ones, +13.8 pp either way — an effect the authors call largely content-independent. Polarity is a real seam in that corpus. It is not a large lever, and it is about performance, not about whether a rule is obeyed.
That leaves three findings on three axes, easy to collapse into one another. Form — how a rule is encoded, compact header against verbose prose — has no measurable effect (Compact Constraint Encoding, arXiv:2604.07192). Polarity comes apart in the corpus above. Opposing what the model would do anyway outweighs both: in that same encoding study, constraints running against the model's defaults failed 10–100 % of the time where conventional ones held at 99 %+. None of the three measures recognisability — whether a person or an agent can tell, in the moment, that a rule applies. As of 2026-09-04, across the sources listed in this area's introduction, we found nothing that measures it; that argument is reasoning, not measurement. All three, with their limits, are in testing a rule.
Human intent is approximated by two separate things: written instructions, which shape what the agent is inclined to do, and mechanical gates, which constrain what the agent is able to do. Both feed what actually happens. Neither approximation contains the intent itself.
Figure Instructions and gates are both lossy proxies for human intent
Neither rules nor checks contain what was meant. Rules shape what the agent is inclined to do; checks constrain what it is able to do. Together they are the best available — which is not the same as enough.
And one claim deliberately absent: that agents make architecture decay. A matched causal study across 151 repositories found architectural smell counts unchanged (+1.1%, p=0.82); this area's negative list carries it as actively falsified. It would fit well and it is not true.
All figures and their sources are given in full in this area's introduction↗.
Editorial — the authors' own open items, not a checklist for the reader.
✓[VERIFY] — discharged 2026-09-06. Vendor documentation states the loading mechanism, and it is cited with read dates in layer 3, together with the eight surfaces that were searched. Two qualifications came with it: the selection is a judgement rather than a match, and the listing that carries the descriptions is budgeted.
✓The final home is decided — 2026-09-07. The series stays where it is. Moving it would have rewritten about a hundred pinned paths, both derivation records and the built document, and bought a reader nothing; the README↗ now says what the directory holds instead of promising assets, which is what was actually wrong. Assets get their own dated directory when there is a first one (TODO-027).
Second reader for the disclosure pass — §2 of AGENTS.md↗.
Agentic development — the introduction to this area↗ (this repository)
Agentic programming: what did not survive checking↗ (this repository)
Agent session lifetime and compaction↗ (this repository)
External sources: the studies quoted in §2.2 are cited in full in the introduction's own reference list; anything cited newly in this series must be opened and dated before the draft ships.
Survival-Toolbox: das eigene Skill-System für die Arbeit mit virtuellen Mitarbeitern bauen#
Für alle, die anfangen, echte Arbeit an einen KI-Agenten zu übergeben — an einen virtuellen Mitarbeiter — und wollen, dass dabei zweimal dasselbe herauskommt. Geschrieben für Product Owner, Sales, Business Analysten, HR, Berufsanfänger und alle, die mit Vibe-Coding angefangen haben. Programmieren muss man dafür nicht.
Die Beispiele stammen aus verschiedenen Rollen, eines pro Schicht. Wo Zahlen und Studien stehen, sind sie in einen eigenen Abschnitt am Ende gewandert — man kann die ganze Reihe anwenden, ohne ihn zu lesen.
Gilt für: schriftliche Vereinbarungen für die Übergabe von Arbeit an KI-Agenten
Zuletzt geprüft:Entwurf — die externen Zitate brauchen noch ein Lesedatum, siehe Offen
Status: Outline + erster Entwurf — die eine Stelle, die eine Quelle brauchte, hat jetzt eine
Das Problem. Mit einem KI-Agenten ist ein Ergebnis in Minuten da und sieht gut aus. Aber beim zweiten Mal kommt etwas anderes heraus, und niemand kann hinterher sagen, warum. Für eine Demo reicht das. Für etwas, das im Alltag trägt, nicht.
Die Ursache. Der Agent hat kein Gedächtnis für euer Vorhaben und keine Vorstellung davon, was bei euch als „richtig" gilt. Beides muss irgendwo stehen — sonst rät er es jedes Mal neu.
Die Lösung ist kein Werkzeug, sondern ein kleiner Stapel Dateien. Fünf Sorten, in dieser Reihenfolge gebaut:
Was es ist
Wogegen es hilft
Hält es, wenn keiner hinschaut?
1
Feste Regeln — was immer gilt
Dass jedes Mal neu verhandelt wird
nein
2
Mechanische Gates — eine automatische Prüfung, etwas, das sich weigert
Dass die wichtigste Regel unter Druck kippt
ja
3
Benannte Rituale — ein benannter Ablauf, wie eine Aufgabe geht
Dass es jedes Mal anders läuft
nein
4
Schriftliche Nachweise — was passieren sollte
Dass hinterher niemand prüfen kann
nein
5
Index, Auslöser und Pflege — suchen, im richtigen Moment auslösen, aufräumen
Dass der Stapel verrottet
nein
Nur Nummer 2 hält von allein. Alles andere ist eine Absprache — wertvoll, aber freiwillig.
Was du heute tust. Öffne eine leere Datei, nenne sie AGENTS.md, und schreib drei Sätze hinein, die für jede Aufgabe gelten. Am besten drei Verbote — Dinge, die du schon einmal schiefgehen gesehen hast. Das ist Schicht 1, und sie ist in zehn Minuten fertig.
Wenn du danach weitermachen willst: Schicht 2 ist die einzige, die wirklich hält, und deshalb kommt sie als zweite.
Zehn öffentliche Repositories gegen diese Schichten gelesen — auch dort, wo sie ihnen widersprechen
Jede Schichten-Seite ist in vier Minuten gelesen und hat denselben Aufbau: in einem Satz · ein Beispiel · was du heute tust · woraus sie besteht · was sie nicht kann · was schiefgeht · fertig, wenn.
Ergebnisse zu erzeugen ist leicht geworden. Ein Absatz Text, ein Stück Code, ein Kampagnenentwurf — Minuten, und es sieht gut aus. Das reicht, um Aufmerksamkeit zu wecken. Für alles danach reicht es nicht.
Denn ein Produkt oder ein Prozess, der im Alltag Wert trägt, verlangt etwas anderes als ein gutes Ergebnis. Er verlangt dasselbe gute Ergebnis noch einmal — nächste Woche, von jemand anderem angestossen, in einem Zustand, den niemand mehr im Kopf hat. Per Vibe-Coding steht ein hübscher, lauffähiger Prototyp in einer Stunde; die Strecke von dort zu etwas, das man einem Kunden gibt, ist die eigentliche Arbeit. Ausserhalb der Software ist es dasselbe: eine Präsentation ist in einer Stunde erzeugt, ein Angebotsprozess, den drei Leute ohne Rückfrage bedienen können, nicht.
Der Aufwand ist nicht verschwunden. Er ist umgezogen — vom Erzeugen zum Prüfen, an eine Stelle, für die niemand Personal eingeplant hat. Das ist gemessen; die Zahlen stehen weiter unten unter Was davon belegt ist.
Je länger das Gespräch, desto unzuverlässiger — und zwar lange bevor irgendeine Grenze erreicht ist
Er kennt euer Vorhaben nicht
Und die Gedächtnis-Funktionen, die als Antwort verkauft werden, haben das bisher nicht gelöst
Er macht es zweimal verschieden
Dieselbe Aufgabe, ein anderes Ergebnis — ohne dass jemand etwas falsch gemacht hätte
Gegen die ersten beiden kann man wenig bauen; sie sind Eigenschaften der Werkzeuge und werden besser oder nicht. Das dritte ist anders. Genau dort hilft eine aufgeschriebene Arbeitsweise — und nur darum geht es in dieser Reihe.
„Konsistent" heisst dabei nichts Grosses: dass eine wiederkehrende Aufgabe zweimal gleich läuft, dass nachvollziehbar bleibt, was passieren sollte, und dass jemand, der nicht dabei war, das Ergebnis dagegen halten kann.
Gebaut ist das für eine Arbeitsweise, in der virtuelle und echte Mitarbeiter am selben Produkt arbeiten — mit Product Ownern, die entscheiden, und Anbietern, die liefern. Das ist ein Zielbild, keine Beschreibung von etwas Fertigem, und das Rollenmodell behandelt diese Reihe nicht.
Was sie kann: das Zielbild an der eigenen Erfahrung messen. Von den zehn Themen, die eine solche Arbeitsweise abdecken muss, liegen ausgerechnet zwei nur in der schwächsten Schicht — wer was übergeben darf und wer ohne Rückfrage entscheiden darf (der Vollständigkeitstest). Genau die beiden, die eine Zusammenarbeit tragen müssten, stehen auf nichts als gutem Willen. Und in der Sammlung, aus der diese Reihe stammt, waren von 60 geschriebenen Abläufen 36 nie ein einziges Mal benutzt worden (die Messung).
Das Zielbild bleibt das Ziel; der Abstand dorthin ist gemessen und nicht behauptet.
Schicht eins und zwei, die festen Regeln und die mechanischen Gates, entstehen zuerst und münden beide in Schicht drei, die benannten Rituale. Schicht drei mündet in Schicht vier, die schriftlichen Nachweise. Schicht fünf, die Index, Auslöser und Pflege umfasst, pflegt die übrigen Schichten. Nur Schicht zwei hält, wenn niemand hinschaut.
Abbildung Die fünf Schichten der Toolbox und die Reihenfolge, in der sie gebaut werden
Baut 1 und 2 zuerst. Die meisten fangen bei 3 an, weil einen Ablauf aufzuschreiben der angenehme Teil ist, und kommen bei 2 erst an, nachdem etwas entwischt ist. Wer nur zwei baut, baut 1 und 2: ein Verbot plus eine Prüfung, die feuert, ist eine funktionierende Toolbox. Drei Abläufe und keine Prüfung sind ein Ordner.
Die fünf Schichten sind Kategorien, keine Dateien. Was daraus wird, wenn es landet — in drei Bildern statt einem, weil elf Artefakte nebeneinander zu klein werden, um sie zu lesen.
Schicht 1 und 2 — die beiden, die zuerst gebaut werden.
Die Disziplin zerfällt zuerst in zwei Schichten. Schicht eins, die festen Regeln, wird zu einer AGENTS.md im Projekt und zu einer zweiten Regeldatei, die für alle Projekte gilt. Schicht zwei, die mechanischen Gates, wird zu derselben Prüfung an zwei Stellen: einem lokalen Hook auf dem eigenen Rechner und einem CI-Job auf dem Server.
Abbildung Was aus den festen Regeln und den mechanischen Gates auf der Platte wird
Beide Paare sind Absicht. Die Prüfung erscheint doppelt, weil eine Prüfung an genau einer Stelle keine ist: die eine läuft bei dir, die andere zentral — und nur die zentrale kann niemand überspringen. Die Regeldatei erscheint doppelt aus einem anderen Grund: die Datei im Projekt und die für alle Projekte können Verschiedenes sagen, und die nähere gewinnt.
Schicht 3 und 4 — worauf die Arbeit läuft und was sie hinterlässt.
Zwei weitere Schichten. Schicht drei, die benannten Rituale, wird zu einer Datei pro Ritual. Schicht vier, die schriftlichen Nachweise, wird zu drei Artefakten auf drei Zeitskalen: einem Charter pro Aufgabe, einer Übergabenotiz pro Arbeitssitzung und einem Eintrag pro Entscheidung, der seine Begründung mitträgt.
Abbildung Was aus den benannten Ritualen und den schriftlichen Nachweisen auf der Platte wird
Der Nachweis hat drei Artefakte statt einem, weil „was hätte passieren sollen" auf drei Zeitskalen anfällt: pro Aufgabe, pro Arbeitssitzung, pro Entscheidung.
Schicht 5 — was die anderen vier auffindbar hält.
Die fünfte Schicht, Index, Auslöser und Pflege, wird zu drei Artefakten: einem Suchbefehl, der alles abdeckt, einem generierten Index dessen, was existiert, und einem Archiv mit einem Weg wieder heraus.
Abbildung Was aus der Schicht für Index, Auslöser und Pflege auf der Platte wird
Diese drei sind für die anderen vier da: der eine Befehl, der alles durchsucht, die Liste, die er erzeugt, und ein Archiv, aus dem man wieder herauskommt.
Verbote · die Ausnahme neben der Regel · die Markierung, was erzwungen ist und was nicht · das Wichtigste zuerst
Das Briefing am ersten Tag; die zwei Sätze aus dem Handbuch, die alle behalten
Prüfung
die Prüfung selbst · beide Stellen · die Ausgabe, was geprüft wurde · das Scheitern, wenn sie nicht laufen kann
Das Formular ohne Pflichtfeld; die zweite Unterschrift
Ablauf-Datei
Name + Beschreibung · Vorbedingungen · nummerierte Schritte · was gleich bleiben muss · Nicht-Ziele · wann abbrechen · wer überspringen darf
Die Verfahrensanweisung mit Auslöser; die Übergabevorlage
Nachweis
Ziel in einem Satz, das falsch sein könnte · Schritte als Checkliste · Aussagen mit Datum · offene Entscheidungen als Kästchen
Das Entscheidungsprotokoll; das Briefing vor dem Projekt
Index
der eine Suchbefehl · die Liste · das Archiv · der Weg zurück
Die durchsuchbare Vorlagensammlung mit genau einer gültigen Fassung
Die sieben Bausteine der Ablauf-Datei stehen hier nur mit Namen. Erklärt werden sie genau einmal, in Schicht 3 — dieselbe Regel, die Schicht 5 aufstellt, hier auf die Reihe selbst angewandt. Eine zweite Erklärung wäre eine Kopie, und Kopien driften auseinander.
Wo eine Schicht keinen Dateinamen hat, hat man sie nicht. Das ist der billigste Selbsttest der ganzen Reihe.
Dieser Abschnitt ist zum Überspringen gebaut. Wer die Reihe anwenden will, braucht ihn nicht; wer wissen will, worauf sie sich stützt, findet hier die Zahlen mit ihren Einschränkungen.
Der Aufwand ist umgezogen. Eine Längsschnittstudie über 802 Entwickler und 196.212 Pull Requests fand den Durchsatz bei 2,09× — und daneben die Prüflast pro Prüfer ungefähr verdoppelt, während automatische Prüfung die menschliche überholte. Die Ausgabe verdoppelte sich, das Prüfen verdoppelte sich mit, und dann wurde das Prüfen selbst an Maschinen abgegeben.
Das Gedächtnis. Lange Gespräche versagen nicht an der Grenze, sondern lange davor: sobald wörtliche Stichwortüberlappung aus der Aufgabe entfernt wird, fallen 11 von 13 Modellen bei 32K unter die Hälfte ihres eigenen Kurzkontext-Werts. Und die als Antwort verkauften Gedächtnis-Architekturen haben es nicht behoben — in der Auswertung eines Anbieters schlug das blosse Einfügen des Rohgesprächs jedes geprüfte System, das eigene eingeschlossen.
Die Unzuverlässigkeit. Das Wort „Konsistenz" kommt in den Quelltexten dieses Bereichs nicht vor. Gemessen ist die Sache trotzdem: verteilt man eine Anweisung über mehrere Gesprächszüge, kostet das im Mittel 39 % — davon nur −16 % Können, aber +112 % Unzuverlässigkeit. Dazu: 1000 Abrufe bei Temperatur 0 ergaben 80 verschiedene Ausgaben.
Was aufgeschriebene Regeln bewirken — und was nicht. Sie machen einen Agenten nicht fähiger, und was sie kosten, ist umstritten. Eine kontrollierte Auswertung von Repository-Kontextdateien fand, dass sie die Erfolgsraten generell nicht verbesserten, die Kosten aber um über 20 % erhöhten; eine zweite Studie, die dieselbe Art Datei rein als Effizienzmechanismus vermass, fand das umgekehrte Vorzeichen — 16,58 % weniger Ausgabe-Tokens und 28,64 % weniger Laufzeit. Zwei Preprints, zwei verschiedene Versuchsaufbauten, gegensätzliche Ergebnisse. Der Widerspruch ist hier nicht aufgelöst; beide stehen mit ihrem Geltungsbereich nebeneinander in Eine Regel testen.
Was Regeln steuern, ist das Verhalten im Konflikt, und dort ist die Wirkung gross — das Entfernen einer einzigen Zustimmungsklausel hob destruktive Handlungen ausserhalb des Auftrags von 0,0 % auf 17,1 %. Diese Zahl bitte für das lesen, was sie ist: Sie vergleicht eine vorhandene Regel mit einer fehlenden, nicht eine Formulierung mit einer anderen. Sie stützt damit einen engeren Punkt, als es aussieht — eine Regel, die eine erkennbare Handlung benennt („niemals auf main pushen"), lässt sich im Moment leichter anwenden als eine, die eine Tugend benennt („immer sauber arbeiten"), weil man merkt, ob man gerade dabei ist. Das ist ein Argument über Erkennbarkeit, nicht über Befolgungsquoten.
Daneben, und auf eine andere Frage antwortend, steht eine Messung. Eine grossangelegte kontrollierte Studie zu Regeldateien für Agenten — 679 von GitHub gesammelte Dateien, 25.532 Regeln, über 5.000 Agentenläufe auf SWE-bench Verified — berichtet, dass in ihren Daten jede Regel, die für sich genommen die Aufgabenleistung verbesserte, ein Verbot war („do not refactor unrelated code"), und jede, die ihr schadete, ein Gebot („follow code style") (Guardrails Beat Guidance, arXiv:2604.11088). Zwei Dinge aus derselben Arbeit nehmen dem den Hebel. „In our data" heisst: Regeln so klassifiziert, wie sie vorgefunden wurden; niemand hat dieselbe Regel einmal so und einmal so geschrieben und verglichen. Und zufällig erzeugte Regeln halfen genauso viel wie von Fachleuten kuratierte, +13,8 PP in beiden Fällen — ein Effekt, den die Autoren als weitgehend inhaltsunabhängig beschreiben. Die Polarität ist eine echte Naht in diesem Korpus. Ein grosser Hebel ist sie nicht, und sie handelt von Leistung, nicht davon, ob eine Regel befolgt wird.
Damit bleiben drei Befunde auf drei Achsen, die man leicht ineinanderschiebt. Die Form — wie eine Regel kodiert ist, kompakter Kopf gegen ausformulierte Prosa — hat keinen messbaren Effekt (Compact Constraint Encoding, arXiv:2604.07192). Die Polarität tritt im Korpus oben auseinander. Der Widerspruch zu dem, was das Modell ohnehin täte, wiegt schwerer als beides: In derselben Kodierungs-Studie scheiterten Vorgaben gegen die Voreinstellungen des Modells in 10–100 % der Fälle, während konventionelle bei 99 %+ hielten. Keiner der drei misst die Erkennbarkeit — ob ein Mensch oder ein Agent im Moment merkt, dass eine Regel greift. Stand 2026-09-04 fanden wir in den Quellen der Einführung dieses Bereichs nichts, was sie misst; dieses Argument ist eine Überlegung, keine Messung. Alle drei stehen mit ihren Grenzen in Eine Regel testen.
Die menschliche Absicht wird von zwei getrennten Dingen angenähert: von geschriebenen Anweisungen, die formen, wozu der Agent neigt, und von mechanischen Gates, die begrenzen, was der Agent tun kann. Beide münden in das, was tatsächlich geschieht. Keine der beiden Näherungen enthält die Absicht selbst.
Abbildung Anweisungen und Gates sind beide verlustbehaftete Proxys für die menschliche Absicht
Weder Regeln noch Prüfungen enthalten, was gemeint war. Regeln formen, wozu der Agent neigt; Prüfungen begrenzen, was er tun kann. Zusammen sind sie das Beste, was verfügbar ist — was nicht dasselbe ist wie genug.
Und eine Behauptung, die hier bewusst nicht steht: dass Agenten die Architektur verfallen liessen. Eine gematchte kausale Studie über 151 Repositories fand die Zahl der Architektur-Gerüche unverändert (+1,1 %, p = 0,82); die Negativliste dieses Bereichs führt sie als aktiv widerlegt. Sie würde sich gut machen und ist nicht wahr.
Alle Zahlen und ihre Quellen stehen vollständig in der Einführung dieses Bereichs↗.
Redaktionell — die offenen Punkte der Autoren, keine Checkliste für die Lesenden.
✓[VERIFY] — erledigt am 2026-09-06. Die Herstellerdokumentation benennt den Lademechanismus, und er ist mit Lesedaten zitiert in Schicht 3, zusammen mit den acht durchsuchten Anlaufstellen. Zwei Einschränkungen kamen mit: die Auswahl ist ein Urteil und kein Abgleich, und die Auflistung, die die Beschreibungen trägt, hat ein Budget.
✓Der endgültige Ort ist entschieden — 2026-09-07. Die Reihe bleibt, wo sie ist. Ein Umzug hätte rund hundert festgenagelte Pfade, beide Ableitungsnachweise und das gebaute Dokument umgeschrieben und den Lesenden nichts gebracht; die README↗ sagt jetzt, was das Verzeichnis enthält, statt Assets zu versprechen — das war das eigentlich Falsche. Assets bekommen ihr eigenes datiertes Verzeichnis, sobald es ein erstes gibt (TODO-027).
Zweite lesende Person für den Veröffentlichungs-Durchgang — §2 der AGENTS_de.md↗.
Agentische Entwicklung — die Einführung in diesen Bereich↗ (dieses Repository)
Agentische Programmierung: was die Prüfung nicht überstanden hat↗ (dieses Repository)
Eine Agenten-Session am Leben halten — oder neu starten↗ (dieses Repository)
Externe Quellen: die in §2.2 zitierten Studien stehen vollständig im Referenzteil der Einführung; alles, was in dieser Reihe neu zitiert wird, muss vor dem Ausliefern des Entwurfs geöffnet und datiert werden.
Bộ đồ nghề sinh tồn: xây dựng hệ thống skill của riêng bạn để làm việc với đồng nghiệp ảo#
Dành cho bất kỳ ai bắt đầu giao việc thật cho một AI agent — một đồng nghiệp ảo — và muốn cùng một thứ được tạo ra hai lần như nhau. Viết cho product owner, sales, business analyst, HR, người mới vào nghề, và bất kỳ ai đã khởi đầu bằng vibe-coding. Bạn không cần biết lập trình.
Các ví dụ đến từ những vai trò khác nhau, mỗi tầng một vai. Ở chỗ có số liệu và nghiên cứu, chúng đã được chuyển vào một mục riêng ở cuối — toàn bộ loạt bài áp dụng được mà không cần đọc mục đó.
Áp dụng cho: những thoả thuận thành văn về việc giao việc cho AI agent
Kiểm chứng lần cuối:bản nháp — các trích dẫn bên ngoài vẫn cần một ngày đọc, xem Open
Trạng thái: dàn ý + bản nháp đầu tiên — chỗ duy nhất cần một nguồn dẫn thì nay đã có tại trang mà nó thuộc về
Vấn đề. Với một AI agent, một kết quả đến trong vài phút và trông có vẻ ổn. Nhưng lần thứ hai lại ra một thứ khác, và sau đó không ai nói được vì sao. Với một bản demo thì thế là ổn. Với một thứ gánh công việc hằng ngày thì không.
Nguyên nhân. Agent không có ký ức về thứ bạn đang xây và không có ý niệm nào về cái gì được coi là "đúng" ở nơi bạn làm việc. Cả hai đều phải được viết ra ở đâu đó — nếu không thì lần nào nó cũng đoán lại.
Câu trả lời không phải một công cụ. Nó là một chồng file nhỏ. Năm loại, xây theo thứ tự này:
Nó là gì
Nó ngăn được điều gì
Có giữ được khi không ai để mắt?
1
Quy tắc thường trực — điều luôn luôn đúng
Mọi thứ bị đàm phán lại mỗi lần
không
2
Cổng chặn cơ học — một kiểm tra tự động, một thứ biết từ chối
Quy tắc quan trọng nhất gãy dưới áp lực
có
3
Nghi thức có tên — một quy trình có tên cho cách một công việc diễn ra
Nó diễn ra khác đi mỗi lần
không
4
Bản ghi thành văn — điều lẽ ra phải xảy ra
Không ai kiểm tra lại được về sau
không
5
Chỉ mục, trigger và bảo trì — tìm kiếm, kích hoạt đúng lúc, dọn dẹp
Cả chồng file mục ruỗng
không
Chỉ số 2 tự nó giữ được. Mọi thứ còn lại là một thoả thuận — có giá trị, và tự nguyện.
Việc bạn làm hôm nay. Mở một file trống, đặt tên là AGENTS.md, và viết vào đó ba câu áp dụng cho mọi công việc. Lý tưởng nhất là ba điều cấm — những thứ bạn đã tận mắt thấy hỏng. Đó là tầng 1, và nó mất mười phút.
Nếu sau đó bạn muốn đi tiếp: tầng 2 là tầng duy nhất thực sự giữ được, và đó là lý do nó đứng thứ hai.
Mười repository công khai được đọc đối chiếu với các tầng này — kể cả chỗ chúng mâu thuẫn với các tầng đó
Mỗi trang tầng đọc hết trong bốn phút và có cùng một hình dạng: trong một câu · một ví dụ · việc bạn làm hôm nay · nó được làm từ gì · nó không làm được gì · cái gì hỏng · xong khi nào.
Việc tạo ra đầu ra đã trở nên dễ dàng. Một đoạn văn, một mẩu code, một bản nháp chiến dịch — vài phút, và trông có vẻ ổn. Chừng đó đủ để gây chú ý. Với mọi thứ sau đó, chừng đó là không đủ.
Bởi vì một sản phẩm hay một quy trình gánh giá trị hằng ngày đòi hỏi một thứ khác với một kết quả tốt. Nó đòi hỏi lại đúng kết quả tốt đó — vào tuần sau, do người khác khởi động, trong một trạng thái mà không còn ai giữ trong đầu nữa. Vibe-coding đặt trước mặt bạn một prototype đẹp, chạy được, trong một giờ; khoảng cách từ đó tới thứ bạn giao cho khách hàng mới là phần việc thật sự. Ngoài phần mềm cũng vậy: một bài thuyết trình mất một giờ, còn một quy trình báo giá mà ba người có thể vận hành mà không phải hỏi ai thì không.
Công sức không biến mất. Nó dịch chuyển — từ việc tạo ra sang việc kiểm tra, tới một chỗ chưa ai bố trí người. Điều đó đã được đo; các con số nằm xa hơn phía dưới, ở mục Cái gì thực sự có bằng chứng.
Cuộc hội thoại càng dài thì càng kém tin cậy — từ rất lâu trước khi chạm bất kỳ giới hạn nào
Nó không biết bạn đang xây cái gì
Và các tính năng bộ nhớ được bán như câu trả lời vẫn chưa giải quyết được điều đó
Nó làm cùng một việc theo hai cách khác nhau
Cùng một công việc, kết quả khác nhau, mà không ai làm sai điều gì cả
Với hai thứ đầu thì gần như không xây được gì; chúng là thuộc tính của công cụ và sẽ cải thiện hoặc không. Thứ ba thì khác. Đó chính xác là chỗ một cách làm việc thành văn thay đổi kết quả — và đó là điều duy nhất loạt bài này bàn tới.
"Nhất quán" ở đây không có nghĩa gì to tát: rằng một công việc lặp lại chạy giống nhau hai lần, rằng điều lẽ ra phải xảy ra vẫn tái dựng lại được, và rằng một người không có mặt lúc đó vẫn có thể đối chiếu kết quả với nó.
Nó được xây cho một cách làm việc trong đó đồng nghiệp ảo và đồng nghiệp thật cùng làm trên một sản phẩm — với product owner ra quyết định và nhà cung cấp giao hàng. Đó là một đích đến, không phải mô tả một thứ đã hoàn tất, và loạt bài này không xử lý mô hình vai trò.
Cái nó làm được là đối chiếu đích đến với trải nghiệm thực tế. Trong mười chủ đề mà một cách làm việc như thế phải bao phủ, đúng hai chủ đề chỉ nằm ở tầng yếu nhất — ai được bàn giao cái gì, và ai được quyết mà không phải hỏi (bài kiểm tra tính đầy đủ). Hai chủ đề lẽ ra phải gánh sự cộng tác thì lại đứng trên không gì ngoài thiện chí. Và trong bộ sưu tập mà loạt bài này xuất phát, 36 trong 60 quy trình thành văn chưa từng một lần được dùng (phép đo).
Đích đến vẫn là đích đến; khoảng cách tới nó được đo chứ không được khẳng định suông.
Tầng một và tầng hai, quy tắc thường trực và cổng chặn cơ học, được xây trước và cả hai đều dẫn vào tầng ba, nghi thức có tên. Tầng ba dẫn vào tầng bốn, bản ghi thành văn. Tầng năm, tức chỉ mục, trigger và bảo trì, duy trì các tầng còn lại. Chỉ tầng hai giữ được khi không ai đọc.
Hình Năm tầng của bộ đồ nghề và thứ tự xây chúng
Xây 1 và 2 trước. Phần lớn mọi người bắt đầu ở 3, vì viết một quy trình ra là phần thú vị, và chỉ đến 2 sau khi có thứ gì đó lọt lưới. Nếu bạn chỉ xây hai tầng, hãy xây 1 và 2: một điều cấm cộng một kiểm tra thực sự bắn ra là một bộ đồ nghề hoạt động được. Ba quy trình và không có kiểm tra nào thì là một thư mục.
Năm tầng là các phạm trù, không phải các file. Đây là thứ chúng trở thành khi hạ cánh — trong ba hình chứ không phải một, vì mười một artefact vẽ cạnh nhau sẽ ra quá nhỏ để đọc.
Tầng 1 và 2 — hai tầng bạn xây trước.
Kỷ luật này trước hết tách thành hai tầng. Tầng một, quy tắc thường trực, trở thành một AGENTS.md bên trong dự án và một file quy tắc thứ hai áp dụng xuyên suốt mọi dự án. Tầng hai, cổng chặn cơ học, trở thành cùng một kiểm tra ở hai nơi: một hook cục bộ trên máy của chính bạn và một job CI trên máy chủ.
Hình Quy tắc thường trực và cổng chặn cơ học trở thành gì trên đĩa
Cả hai cặp đều có chủ đích. Kiểm tra xuất hiện hai lần, vì một kiểm tra chỉ ở đúng một nơi thì không phải là kiểm tra: một cái chạy trên máy bạn, cái kia chạy tập trung — và chỉ cái tập trung là không thể bỏ qua. File quy tắc xuất hiện hai lần vì một lý do khác: file trong dự án và file bao trùm mọi dự án có thể nói những điều khác nhau, và cái gần hơn thắng.
Tầng 3 và 4 — thứ công việc chạy trên đó, và thứ nó để lại.
Thêm hai tầng nữa. Tầng ba, nghi thức có tên, trở thành một file cho mỗi nghi thức. Tầng bốn, bản ghi thành văn, trở thành ba artefact trên ba thang thời gian: một bản hiến chương cho mỗi công việc, một ghi chú bàn giao cho mỗi phiên làm việc, và một mục quyết định mang theo lý do của nó.
Hình Nghi thức có tên và bản ghi thành văn trở thành gì trên đĩa
Bản ghi có ba artefact chứ không phải một, vì "điều lẽ ra phải xảy ra" tích tụ trên ba thang thời gian: mỗi công việc, mỗi phiên làm việc, mỗi quyết định.
Tầng 5 — thứ giữ cho bốn tầng kia tìm thấy được.
Tầng thứ năm, chỉ mục, trigger và bảo trì, trở thành ba artefact: một lệnh tìm kiếm bao phủ mọi thứ, một chỉ mục được sinh ra về những gì đang tồn tại, và một kho lưu trữ có đường quay ra khỏi nó.
Hình Tầng chỉ mục, trigger và bảo trì trở thành gì trên đĩa
Ba thứ đó tồn tại cho bốn tầng kia: một lệnh duy nhất tìm kiếm mọi thứ, danh sách mà nó tạo ra, và một kho lưu trữ mà bạn có thể quay trở ra.
các điều cấm · ngoại lệ đặt ngay cạnh quy tắc của nó · một dấu nói rõ cái gì được cưỡng chế và cái gì không · điều quan trọng nhất đứng đầu
Bản brief ngày đầu tiên; hai câu trong sổ tay mà ai cũng nhớ
Kiểm tra
bản thân kiểm tra · cả hai nơi · đầu ra nói rõ nó đã xem xét cái gì · thất bại khi nó không chạy được
Cái biểu mẫu không chịu gửi đi; chữ ký thứ hai
File quy trình
tên + mô tả · điều kiện tiên quyết · các bước đánh số · cái gì phải luôn đúng · phi-mục-tiêu · khi nào dừng · ai được phép bỏ qua
Quy trình vận hành chuẩn kèm một trigger; mẫu bàn giao
Bản ghi
một mục tiêu trong một câu, có thể sai · các bước dưới dạng checklist · các khẳng định kèm ngày · các quyết định còn mở dưới dạng ô đánh dấu
Nhật ký quyết định; bản brief viết trước dự án
Chỉ mục
một lệnh tìm kiếm duy nhất · danh sách · kho lưu trữ · đường quay lại
Thư viện mẫu tìm kiếm được với đúng một phiên bản hiện hành
Bảy khối cấu thành của file quy trình ở đây chỉ được gọi tên. Chúng được giải thích đúng một lần, ở tầng 3 — chính quy tắc mà tầng 5 phát biểu, áp dụng ở đây cho chính loạt bài này. Một lời giải thích thứ hai sẽ là một bản sao, và các bản sao trôi dạt khỏi nhau.
Ở đâu một tầng không có tên file, bạn không có tầng đó. Đây là bài tự kiểm tra rẻ nhất trong loạt bài.
Mục này được viết ra để bỏ qua. Ai áp dụng loạt bài này thì không cần nó; ai muốn biết nó dựa trên cái gì sẽ tìm thấy các con số ở đây, kèm theo giới hạn của chúng.
Công sức đã dịch chuyển. Một nghiên cứu dọc trên 802 lập trình viên và 196,212 pull request tìm thấy thông lượng ở mức 2.09× — và song song với đó, tải trên mỗi người review tăng khoảng gấp đôi trong khi review tự động vượt qua review của con người. Đầu ra tăng gấp đôi. Việc review tăng gấp đôi theo. Rồi chính việc review lại được giao cho máy.
Bộ nhớ. Các cuộc hội thoại dài không gãy ở ranh giới; chúng suy giảm từ rất lâu trước đó. Một khi phần trùng lặp từ khoá theo nghĩa đen bị loại khỏi tác vụ, 11 trong 13 mô hình rơi xuống dưới một nửa mức nền ngữ cảnh ngắn của chính chúng ở 32K. Và các kiến trúc bộ nhớ được bán như câu trả lời vẫn chưa sửa được điều đó — trong đánh giá của chính một nhà cung cấp, việc chỉ đơn giản dán nguyên cuộc hội thoại thô vào đã cho điểm cao hơn mọi hệ thống được thử nghiệm, kể cả hệ thống của chính họ.
Sự thiếu tin cậy. Từ "consistency" không xuất hiện trong các văn bản nguồn của lĩnh vực này. Bản thân sự việc thì vẫn được đo: trải một chỉ dẫn ra qua nhiều lượt hội thoại tốn 39% trung bình — trong đó chỉ −16% là năng lực, còn sự thiếu tin cậy tăng 112%. Và 1,000 completion ở temperature 0 tạo ra 80 đầu ra khác biệt.
Quy tắc thành văn làm được gì — và không làm được gì. Chúng không làm cho một agent giỏi hơn, và cái giá chúng tốn thì còn tranh cãi. Một đánh giá có đối chứng về các file ngữ cảnh của repository tìm thấy chúng nói chung không cải thiện tỉ lệ thành công trong khi làm chi phí tăng hơn 20%; một nghiên cứu thứ hai, đo cùng loại file thuần tuý như một cơ chế hiệu quả, lại tìm ra dấu ngược lại — ít hơn 16.58% output token và giảm 28.64% thời gian đồng hồ. Hai preprint, hai thiết lập khác nhau, kết quả trái ngược. Bất đồng này không được giải quyết ở đây; cả hai được trình bày cạnh nhau, kèm phạm vi của chúng, trong kiểm thử một quy tắc.
Cái mà quy tắc thực sự chi phối là hành vi khi có xung đột, và ở đó hiệu ứng là lớn — bỏ đi một điều khoản đồng thuận duy nhất đã đẩy các hành động phá huỷ nằm ngoài phạm vi từ 0.0% lên 17.1%. Hãy đọc con số đó đúng như nó là: nó so sánh việc một quy tắc có mặt với việc nó vắng mặt, chứ không phải một cách diễn đạt này với một cách diễn đạt khác. Vì thế nó chống đỡ cho một luận điểm hẹp hơn vẻ ngoài của nó — một quy tắc gọi tên một hành động nhận ra được ("never push to main") thì dễ áp dụng ngay tại thời điểm đó hơn một quy tắc gọi tên một đức tính ("always work cleanly"), vì bạn phân biệt được mình có sắp làm điều đó hay không. Đó là một lập luận về tính nhận-ra-được, không phải về tỉ lệ tuân thủ.
Bên cạnh đó, trả lời một câu hỏi khác, có một phép đo. Một nghiên cứu có đối chứng quy mô lớn về các file quy tắc cho agent — 679 file cào từ GitHub, 25,532 quy tắc, hơn 5,000 lượt chạy agent trên SWE-bench Verified — báo cáo rằng trong dữ liệu của nó, mọi quy tắc tự nó cải thiện hiệu năng tác vụ đều là một điều cấm ("do not refactor unrelated code"), và mọi quy tắc làm hại hiệu năng đều là một chỉ thị khẳng định ("follow code style") (Guardrails Beat Guidance, arXiv:2604.11088). Hai điều trong chính bài báo đó lấy mất đòn bẩy của luận điểm ấy. "Trong dữ liệu của chúng tôi" nghĩa là các quy tắc được phân loại đúng như chúng được tìm thấy ngoài tự nhiên; không ai viết cùng một quy tắc theo cả hai cách rồi so sánh. Và các quy tắc sinh ngẫu nhiên giúp ích ngang với các quy tắc do chuyên gia biên soạn, +13.8 pp ở cả hai phía — một hiệu ứng mà các tác giả gọi là phần lớn độc lập với nội dung. Cực tính là một đường nối có thật trong kho ngữ liệu đó. Nó không phải một đòn bẩy lớn, và nó nói về hiệu năng, không phải về việc một quy tắc có được tuân theo hay không.
Còn lại ba phát hiện trên ba trục, rất dễ bị gộp lẫn vào nhau. Hình thức — một quy tắc được mã hoá thế nào, tiêu đề gọn so với văn xuôi dài dòng — không có hiệu ứng đo được (Compact Constraint Encoding, arXiv:2604.07192). Cực tính thì rời rạc ra trong kho ngữ liệu ở trên. Việc đi ngược lại điều mô hình vốn dĩ sẽ làm nặng cân hơn cả hai: trong chính nghiên cứu về mã hoá đó, các ràng buộc chạy ngược mặc định của mô hình thất bại 10–100 % số lần, trong khi các ràng buộc thông thường giữ được ở mức 99 %+. Không cái nào trong ba cái đo tính nhận-ra-được — liệu một người hay một agent có phân biệt được, ngay tại thời điểm đó, rằng một quy tắc đang áp dụng hay không. Tính đến 2026-09-04, trên các nguồn được liệt kê trong phần giới thiệu của lĩnh vực này, chúng tôi không tìm thấy gì đo điều đó; lập luận đó là suy luận, không phải phép đo. Cả ba, kèm giới hạn của chúng, nằm trong kiểm thử một quy tắc.
Ý định của con người được xấp xỉ bởi hai thứ tách biệt: chỉ dẫn thành văn, thứ định hình điều agent có xu hướng làm, và cổng chặn cơ học, thứ ràng buộc điều agent có khả năng làm. Cả hai đều dẫn vào điều thực sự xảy ra. Không phép xấp xỉ nào chứa đựng bản thân ý định.
Hình Chỉ dẫn và cổng chặn đều là những proxy hao hụt cho ý định của con người
Cả quy tắc lẫn kiểm tra đều không chứa đựng điều đã được ngụ ý. Quy tắc định hình điều agent nghiêng về việc làm; kiểm tra ràng buộc điều nó có khả năng làm. Cùng nhau, chúng là thứ tốt nhất hiện có — điều đó không giống với đủ.
Và một khẳng định cố tình vắng mặt: rằng agent làm kiến trúc mục ruỗng. Một nghiên cứu nhân quả có ghép cặp trên 151 repository tìm thấy số lượng architectural smell không đổi (+1.1%, p=0.82); danh sách phủ định của lĩnh vực này ghi nó là đã bị bác bỏ chủ động. Nó sẽ khớp rất đẹp và nó không đúng.
Toàn bộ các con số và nguồn của chúng được nêu đầy đủ trong phần giới thiệu của lĩnh vực này↗.
Không điều nào trong đây làm agent giỏi hơn. Cái mà bộ đồ nghề mua được là tính dự đoán được — một thuộc tính khác, và với việc bàn giao công việc thì hữu ích hơn.
Công nghệ lỗi thời nhanh. Tên file và công cụ có hạn dùng ngắn; mô hình tầng sống lâu hơn chúng, còn cú pháp thì không.
Đây là một repository và một phong cách làm việc. Không có nghiên cứu, không có so sánh, không có khẳng định rằng thứ tự này là tối ưu.
Bộ đồ nghề không phải một bảo đảm. Nó làm cho công việc dự đoán được và kiểm tra được. Nó không làm cho công việc đúng.
✓[VERIFY] — đã giải quyết ngày 2026-09-06. Tài liệu của nhà cung cấp có nêu cơ chế nạp, và nó được trích dẫn kèm ngày đọc trong tầng 3, cùng với tám nơi đã được tra cứu. Kèm theo là hai điểm dè dặt: việc chọn là một phán đoán chứ không phải một phép khớp, và danh sách mang các phần mô tả thì có ngân sách.
✓Chỗ ở cuối cùng đã được quyết định — 2026-09-07. Loạt bài ở nguyên chỗ cũ. Việc di dời sẽ phải viết lại khoảng một trăm đường dẫn đã ghim, cả hai bản ghi dẫn xuất và tài liệu đã dựng, mà không mang lại gì cho người đọc; README↗ nay nói thư mục này chứa gì thay vì hứa hẹn assets — đó mới là điều thực sự sai. Assets sẽ có thư mục ghi ngày riêng khi có cái đầu tiên (TODO-027).
Người đọc thứ hai cho lượt rà soát công bố — §2 của AGENTS.md↗.
Agentic development — phần giới thiệu của lĩnh vực này↗ (repository này)
Agentic programming: cái gì không sống sót qua khâu kiểm chứng↗ (repository này)
Vòng đời phiên agent và compaction↗ (repository này)
Nguồn bên ngoài: các nghiên cứu được trích trong §2.2 được dẫn đầy đủ trong danh sách tham khảo riêng của phần giới thiệu; bất cứ thứ gì được trích dẫn mới trong loạt bài này đều phải được mở ra và ghi ngày trước khi bản nháp được phát hành.
Who. A product owner having an agent work up requirements. The job. Turn an idea into a ticket somebody can act on without asking a question. What goes wrong. Every ticket looks different — sometimes the acceptance criteria are missing, sometimes the reason it is being built at all. She explains the same obvious things every time, and slightly differently every time. What you build. A file with the five sentences that hold for every ticket. Not this week's idea — the things that will also hold for the job nobody has thought of yet.
Open an empty file, call it AGENTS.md, write three prohibitions in it. Prohibitions, not instructions: things you have already watched go wrong. Ten minutes, and layer 1 exists.
One file, loaded on every task, holding only what is true across all of them. AGENTS.md, CLAUDE.md, .cursorrules, whatever your harness reads — the name is vendor-specific, the role is not. It is the standing context: the conventions, the boundaries, the prohibitions that apply whether the job is a bug fix, a migration or a README.
That it really is resident, rather than fetched when wanted, is the property the whole layer rests on, and it is documented: Anthropic's own Claude Code page draws the contrast the other way round, noting that unlike this file's content, a skill's body loads only when it is used (read 2026-09-06). Which is why the two layers fail differently — see layer 3.
It is the cheapest layer to write and the easiest to ruin, because nothing stops it growing.
Settled conventions re-litigated on every task. Without it, every session re-derives the same decisions — branch naming, commit format, what may be deleted, whether to ask before pushing — and derives them slightly differently each time. The cost is not the wrong answer; it is that there is no stable answer to compare an outcome against.
Its second, larger job is behaviour under conflict: the moment a plausible-looking shortcut exists, the file is what decides whether it is taken. The introduction↗ reports the measured size of that effect — removing one consent clause moved destructive out-of-scope actions from 0.0% to 17.1%.
The membership test is a single question: would this still be true of a task I have not thought of yet?
Belongs
Does not belong
Prohibitions — the actions that must never be taken
This week's feature, this task's acceptance criteria
The boundary rules — what may not leave the repository, what needs a human's go
Anything that will be false next month
Definitions of done, and of the words your team uses ambiguously
A tutorial the agent does not need to be told
The exceptions to your own rules, named as exceptions
A rule you have never seen violated and cannot imagine violated
Which rules have a mechanism behind them and which do not
Restatements of what the model already does well
Two entries deserve their own paragraph, because they are usually assumed and therefore absent.
The exceptions, named as exceptions. A rule with an undocumented carve-out is a rule that gets broken confidently — the reader hits the case the rule obviously was not written for, concludes the rule does not apply, and now has a private carve-out nobody else knows about. Write the carve-out down and it becomes a boundary instead of a judgement call. "Never commit directly to main — except a commit touching only *.md" is a rule. "Never commit directly to main" in a repository where people routinely do for docs is a rule that teaches everyone to ignore rules.
Which rules are enforced and which are not. This is the most useful paragraph in the file and the least comfortable to write, because it is an inventory of your own gaps. It is also the only thing that stops the file being read as a set of guarantees. Classify every rule into three buckets:
Bucket
Meaning
Enforced
A mechanism blocks the violation. Name the mechanism
Partial
A mechanism exists but does not cover what the prose claims. Say what it misses
Advisory
Nothing mechanical. Compliance only
The middle bucket is where false confidence lives. "Partly enforced" reads as "enforced" to everyone who did not write the check.
A rule can be correct, findable and still not hold — and when it does not, what comes back is rarely "I forgot". It is an argument, usually a good one. Across 238 published instruction files this turned out to be the single most common defect of the 26 catalogued: 94 % of them contain nothing that discourages reasoning your way out of a required step (appendix 0520).
The remedy is two columns in this file. The excuse on the left, quoted as it was actually given; the answer on the right, closing that specific escape rather than restating the rule.
The thought
The answer
"This is just a simple question"
Questions are tasks. Check first
"I remember this rule"
Rules change. Read the current one
"Keeping it as a reference, I will do it properly after"
You will adapt it. That is doing it after
Two cautions, both measured, both counter-intuitive: rewording the rule does not help — encoding form had no significant effect across 11 models — and naming the penalty makes it worse, because it turns an obligation into arithmetic. What does help is giving the rule a way out, which belongs to layer 3. The evidence, and the method for finding out whether one of your rows works, are in appendix 0520.
The standing rule file is the least software-specific layer in the toolbox. Its non-software forms are older than the software one: the standing brief you give a new contractor on their first day; the two sentences in a team handbook that everyone actually remembers; the "nothing goes to the client without a second pair of eyes" that is repeated at every onboarding. Each is a standing instruction that applies to work not yet imagined, and each fails the same way — by growing into a handbook nobody re-reads.
Start from violations you have actually seen. Not from a list of best practices. A rule that answers no observed failure costs context on every task and buys nothing.
Write each one as a prohibition where you can. Name a recognisable action, not a virtue. "Never force-push a shared branch" names something you can see yourself about to do; "keep history clean" has to be interpreted first, and interpreting is where a rule quietly turns into a preference. That argument is about recognisability, and it rests on its own reasoning: as of 2026-09-04, across this area's sources, we found no measurement of it. A neighbouring question has been measured, and it points the same way without carrying the weight — in a corpus of 679 scraped rule files, every rule that improved task performance on its own was a prohibition and every one that hurt it was a positive directive, but the same study found randomly generated rules as good as expert-curated ones, which makes polarity a seam in that data rather than a lever (Guardrails Beat Guidance, arXiv:2604.11088; its limits are set out in appendix 0520). It is a different study from the encoding-form one above (Compact Constraint Encoding, arXiv:2604.07192), which varied how a rule is written and found that made no difference at all.
Attach the exception to the rule, in the same sentence or the one after it. Never in a different section, and never nowhere.
Tag each rule enforced / partial / advisory. If you cannot name the mechanism, it is advisory — write that, do not round it up.
Put the irreversible boundary first. In a public repository that is the disclosure rule; in a production system it is the destructive-action rule. Ordering is a signal, and the first section is the one that gets read.
Cut until a person would re-read it. The load-bearing reason is the unmeasured one: nobody maintains a document they have stopped reading, and an unmaintained rule file is where the contradictions collect. The cost argument is contested — one controlled study puts the added length at over 20 % extra inference cost, while a rule file measured on its own came out at −16.58 % output tokens and −28.64 % wall clock (appendix 0520). Different setups, so neither number settles the other. Cut for the reader.
It cannot make the agent more capable, and it cannot enforce anything. Both halves matter. The first means a rule file is the wrong tool for "the model keeps getting X wrong" — that is a capability problem, and instructions measurably do not fix it. The second means that every sentence in the file, however emphatic, is a disposition: it shapes what is likely, never what is possible.
If a rule must hold when nobody is reading, it is not a layer-1 rule. It is a layer-2 gate that has not been built yet.
Wer. Eine Product Ownerin, die Anforderungen von einem Agenten ausarbeiten lässt. Die Aufgabe. Aus einer Idee ein Ticket machen, das jemand ohne Rückfrage umsetzen kann. Was schiefgeht. Jedes Ticket sieht anders aus — mal fehlen die Abnahmekriterien, mal der Grund, warum es überhaupt gebaut wird. Sie erklärt jedes Mal dieselben Selbstverständlichkeiten neu, und jedes Mal ein bisschen anders. Was du baust. Eine Datei mit den fünf Sätzen, die für jedes Ticket gelten. Nicht die Idee dieser Woche — das, was auch für die Aufgabe gilt, an die noch niemand gedacht hat.
Öffne eine leere Datei, nenne sie AGENTS.md, und schreib drei Verbote hinein. Verbote, keine Gebote: Dinge, die du schon einmal schiefgehen gesehen hast. Zehn Minuten, und Schicht 1 steht.
Eine Datei, bei jeder Aufgabe geladen, die nur enthält, was für alle gilt. AGENTS.md, CLAUDE.md, .cursorrules — wie sie heisst, ist herstellerabhängig, wozu sie da ist, nicht. Sie ist der stehende Kontext: die Konventionen, die Grenzen, die Verbote, die gelten, ob die Aufgabe ein Bugfix, eine Migration oder eine README ist.
Dass sie wirklich dauerhaft liegt und nicht bei Bedarf geholt wird, ist die Eigenschaft, auf der die ganze Schicht ruht, und sie ist belegt: Anthropics eigene Claude-Code-Seite zieht den Vergleich von der anderen Seite und hält fest, dass anders als der Inhalt dieser Datei der Rumpf einer Skill erst lädt, wenn er gebraucht wird (gelesen 2026-09-06). Deshalb scheitern die beiden Schichten verschieden — siehe Schicht 3.
Sie ist die billigste Schicht im Schreiben und die am leichtesten zu ruinierende, weil nichts ihr Wachstum bremst.
Geklärte Konventionen, die in jeder Aufgabe neu verhandelt werden. Ohne sie leitet jede Session dieselben Entscheidungen neu her — Branch-Benennung, Commit-Format, was gelöscht werden darf, ob vor dem Push gefragt wird — und jedes Mal ein wenig anders. Der Preis ist nicht die falsche Antwort; er ist, dass es keine stabile Antwort gibt, gegen die man ein Ergebnis halten könnte.
Ihre zweite, grössere Aufgabe ist Verhalten im Konflikt: sobald eine plausibel aussehende Abkürzung existiert, entscheidet die Datei, ob sie genommen wird. Die Einführung↗ nennt die gemessene Grösse dieses Effekts — das Entfernen einer Zustimmungsklausel hob destruktive Handlungen ausserhalb des Auftrags von 0,0 % auf 17,1 %.
Der Zugehörigkeitstest ist eine einzige Frage: wäre das auch für eine Aufgabe wahr, an die ich noch nicht gedacht habe?
Gehört hinein
Gehört nicht hinein
Verbote — die Handlungen, die nie stattfinden dürfen
Das Feature dieser Woche, die Abnahmekriterien dieser Aufgabe
Die Grenzregeln — was das Repository nicht verlassen darf, was ein menschliches Go braucht
Alles, was nächsten Monat falsch ist
Definitionen von „fertig" und der Wörter, die das Team mehrdeutig benutzt
Ein Tutorial, das der Agent nicht braucht
Die Ausnahmen der eigenen Regeln, als Ausnahmen benannt
Eine Regel, deren Verletzung man nie gesehen hat und sich nicht vorstellen kann
Welche Regeln einen Mechanismus hinter sich haben und welche nicht
Wiederholungen dessen, was das Modell ohnehin gut kann
Zwei Einträge verdienen einen eigenen Absatz, weil sie üblicherweise vorausgesetzt und deshalb weggelassen werden.
Die Ausnahmen, als Ausnahmen benannt. Eine Regel mit undokumentierter Ausnahme ist eine Regel, die selbstbewusst gebrochen wird — man trifft auf den Fall, für den die Regel offensichtlich nicht geschrieben wurde, schliesst daraus, dass sie nicht gilt, und hat nun eine private Ausnahme, von der niemand sonst weiss. Schreibt man die Ausnahme auf, wird aus einer Ermessensfrage eine Grenze. „Niemals direkt auf main committen — ausser bei einem Commit, der nur *.md berührt" ist eine Regel. „Niemals direkt auf main committen" in einem Repository, in dem alle es für Dokumentation routinemässig tun, ist eine Regel, die allen beibringt, Regeln zu ignorieren.
Welche Regeln erzwungen sind und welche nicht. Das ist der nützlichste Absatz der Datei und der unangenehmste zu schreiben, weil er eine Inventur der eigenen Lücken ist. Er ist zugleich das Einzige, was verhindert, dass die Datei als Sammlung von Garantien gelesen wird. Jede Regel in einen von drei Töpfen:
Topf
Bedeutung
Erzwungen
Ein Mechanismus blockiert die Verletzung. Den Mechanismus benennen
Teilweise
Ein Mechanismus existiert, deckt aber nicht ab, was die Prosa behauptet. Sagen, was fehlt
Advisorisch
Nichts Mechanisches. Nur Einhaltung
Der mittlere Topf ist der Ort, an dem falsche Sicherheit wohnt. „Teilweise erzwungen" liest sich für alle, die die Prüfung nicht geschrieben haben, als „erzwungen".
Eine Regel kann richtig und auffindbar sein und trotzdem nicht halten — und wenn sie es nicht tut, kommt selten „hab ich vergessen" zurück. Es kommt ein Argument, meistens ein gutes. Über 238 veröffentlichte Instruktionsdateien hinweg war das der mit Abstand häufigste von 26 katalogisierten Defekten: 94 % von ihnen enthalten nichts, was davon abhält, sich aus einem verlangten Schritt herauszuargumentieren (Anhang 0520).
Das Mittel sind zwei Spalten in dieser Datei. Links die Ausrede, so zitiert, wie sie wirklich gefallen ist; rechts die Antwort, die genau diesen Ausweg schließt, statt die Regel zu wiederholen.
Der Gedanke
Die Antwort
„Das ist doch nur eine einfache Frage"
Fragen sind Aufgaben. Erst nachsehen
„Ich kenne diese Regel"
Regeln ändern sich. Die aktuelle lesen
„Ich behalte es als Referenz und mache es danach richtig"
Du wirst es anpassen. Das ist „danach"
Zwei Vorbehalte, beide gemessen, beide gegen die Intuition: Umformulieren hilft nicht — die Kodierungsform hatte über 11 Modelle keinen signifikanten Effekt — und die Strafe zu benennen macht es schlimmer, weil sie aus einer Pflicht eine Rechenaufgabe macht. Was hilft, ist der Regel einen Ausweg zu geben, und das gehört zu Schicht 3. Die Belege und die Methode, mit der man herausfindet, ob eine der Zeilen wirkt, stehen im Anhang 0520.
Die feste Regeldatei ist die am wenigsten softwarespezifische Schicht der Toolbox. Ihre Formen ausserhalb der Software sind älter als die softwareseitige: das stehende Briefing, das eine neue externe Kraft am ersten Tag bekommt; die zwei Sätze aus dem Teamhandbuch, die tatsächlich alle behalten; das „nichts geht an den Kunden ohne ein zweites Augenpaar", das bei jedem Onboarding fällt. Jedes davon ist eine stehende Anweisung für Arbeit, die noch niemand sich vorgestellt hat — und jedes scheitert gleich: es wächst zu einem Handbuch, das niemand mehr nachliest.
Von tatsächlich beobachteten Verletzungen ausgehen. Nicht von einer Best-Practice-Liste. Eine Regel, die auf kein beobachtetes Versagen antwortet, kostet Kontext bei jeder Aufgabe und bringt nichts.
Wo möglich als Verbot formulieren. Eine erkennbare Handlung benennen, keine Tugend. „Niemals einen geteilten Branch force-pushen" benennt etwas, das man sich selbst im Moment tun sieht; „Historie sauber halten" muss erst interpretiert werden, und beim Interpretieren wird aus einer Regel unbemerkt eine Vorliebe. Dieses Argument handelt von Erkennbarkeit und trägt sich selbst: Stand 2026-09-04 fanden wir in den Quellen dieses Bereichs keine Messung dazu. Gemessen ist eine benachbarte Frage, und sie weist in dieselbe Richtung, ohne das Gewicht zu tragen — in einem Korpus von 679 gesammelten Regeldateien war jede Regel, die für sich genommen die Aufgabenleistung verbesserte, ein Verbot, und jede, die ihr schadete, ein Gebot; dieselbe Studie fand aber zufällig erzeugte Regeln so gut wie von Fachleuten kuratierte, was die Polarität zu einer Naht in diesen Daten macht statt zu einem Hebel (Guardrails Beat Guidance, arXiv:2604.11088; die Grenzen stehen in Anhang 0520). Das ist eine andere Studie als die zur Kodierungsform weiter oben (Compact Constraint Encoding, arXiv:2604.07192), die variierte, wie eine Regel geschrieben ist, und dabei gar keinen Effekt fand.
Die Ausnahme an die Regel hängen, im selben Satz oder im nächsten. Nie in einem anderen Abschnitt, und nie nirgends.
Jede Regel mit erzwungen / teilweise / advisorisch markieren. Lässt sich kein Mechanismus benennen, ist sie advisorisch — das hinschreiben, nicht aufrunden.
Die irreversible Grenze zuerst. In einem öffentlichen Repository ist das die Veröffentlichungsregel, in einem Produktivsystem die Regel über destruktive Handlungen. Reihenfolge ist ein Signal, und der erste Abschnitt ist der, der gelesen wird.
Kürzen, bis ein Mensch sie nachlesen würde. Der tragende Grund ist der ungemessene: niemand pflegt ein Dokument, das er nicht mehr liest, und in einer ungepflegten Regeldatei sammeln sich die Widersprüche. Das Kostenargument ist umstritten — eine kontrollierte Studie beziffert die zusätzlichen Inferenzkosten der Länge auf über 20 %, während eine für sich gemessene Regeldatei auf −16,58 % Ausgabe-Tokens und −28,64 % Laufzeit kam (Anhang 0520). Verschiedene Aufbauten, keine der beiden Zahlen entscheidet die andere. Für den Leser kürzen.
Sie kann den Agenten nicht fähiger machen, und sie kann nichts erzwingen. Beide Hälften zählen. Die erste bedeutet: eine Regeldatei ist das falsche Werkzeug für „das Modell macht X ständig falsch" — das ist ein Fähigkeitsproblem, und Anweisungen beheben es messbar nicht. Die zweite bedeutet: jeder Satz in der Datei ist, wie nachdrücklich auch immer, eine Disposition — er formt, was wahrscheinlich ist, nie, was möglich ist.
Muss eine Regel halten, wenn niemand hinschaut, ist es keine Schicht-1-Regel. Es ist ein Schicht-2-Gate, das noch nicht gebaut wurde.
Ai. Một product owner để agent soạn thảo yêu cầu. Công việc. Biến một ý tưởng thành một ticket mà người khác có thể bắt tay vào làm mà không phải hỏi lại câu nào. Điều gì hỏng. Ticket nào cũng một kiểu khác nhau — lúc thì thiếu tiêu chí nghiệm thu, lúc thì thiếu lý do vì sao lại xây thứ đó. Cô ấy giải thích đi giải thích lại cùng những điều hiển nhiên, và lần nào cũng hơi khác đi một chút. Bạn xây gì. Một tệp chứa năm câu đúng cho mọi ticket. Không phải ý tưởng của tuần này — mà là những điều cũng sẽ đúng với công việc chưa ai nghĩ tới.
Mở một tệp trống, đặt tên là AGENTS.md, viết vào đó ba điều cấm. Điều cấm, chứ không phải chỉ dẫn: những thứ bạn đã tận mắt thấy đi sai. Mười phút, và lớp 1 đã tồn tại.
Một tệp, được nạp trong mọi tác vụ, chỉ chứa những gì đúng với tất cả các tác vụ đó. AGENTS.md, CLAUDE.md, .cursorrules, bất cứ thứ gì harness của bạn đọc — cái tên là chuyện riêng của từng nhà cung cấp, vai trò thì không. Đó là ngữ cảnh thường trực: các quy ước, các ranh giới, các điều cấm được áp dụng bất kể công việc là sửa lỗi, migration hay một README.
Việc nó thực sự thường trú, chứ không phải được lấy về khi cần, chính là tính chất mà cả lớp này dựa vào, và điều đó có nguồn dẫn: trang Claude Code của chính Anthropic đặt phép so sánh theo chiều ngược lại, ghi rằng khác với nội dung của tệp này, phần thân của một skill chỉ nạp khi nó được dùng đến (đọc 2026-09-06). Đó là lý do hai lớp hỏng theo những cách khác nhau — xem lớp 3.
Đây là lớp rẻ nhất để viết và cũng dễ làm hỏng nhất, vì chẳng có gì ngăn nó phình to ra.
Những quy ước đã chốt lại bị đem ra tranh cãi lại trong từng tác vụ. Không có nó, mỗi phiên lại tự suy ra cùng những quyết định ấy — cách đặt tên nhánh, định dạng commit, cái gì được phép xóa, có phải hỏi trước khi push hay không — và mỗi lần lại suy ra hơi khác đi. Cái giá phải trả không phải là câu trả lời sai; mà là không hề có một câu trả lời ổn định để đối chiếu kết quả.
Nhiệm vụ thứ hai, lớn hơn, của nó là hành vi khi có xung đột: ngay khoảnh khắc xuất hiện một lối tắt trông có vẻ hợp lý, chính tệp này là thứ quyết định lối tắt đó có được đi hay không. Phần giới thiệu↗ báo cáo độ lớn đã đo được của hiệu ứng đó — bỏ đi một điều khoản về sự đồng ý đã đẩy các hành động phá hủy nằm ngoài phạm vi từ 0.0% lên 17.1%.
Phép thử tư cách thành viên chỉ gồm một câu hỏi duy nhất: điều này có còn đúng với một tác vụ mà tôi chưa nghĩ tới hay không?
Thuộc về
Không thuộc về
Điều cấm — những hành động không bao giờ được làm
Tính năng của tuần này, tiêu chí nghiệm thu của tác vụ này
Các quy tắc ranh giới — cái gì không được rời khỏi repository, cái gì cần con người bật đèn xanh
Bất cứ điều gì tháng sau sẽ không còn đúng
Định nghĩa thế nào là xong, và định nghĩa những từ mà đội của bạn dùng một cách mơ hồ
Một bài hướng dẫn mà agent không cần được dạy
Các ngoại lệ đối với chính quy tắc của bạn, được gọi tên rõ là ngoại lệ
Một quy tắc bạn chưa từng thấy bị vi phạm và cũng không hình dung nổi nó bị vi phạm
Quy tắc nào có cơ chế đứng sau và quy tắc nào không
Nhắc lại những gì mô hình vốn đã làm tốt
Có hai mục xứng đáng được dành riêng một đoạn, vì chúng thường bị mặc định là hiển nhiên và do đó vắng mặt.
Các ngoại lệ, được gọi tên rõ là ngoại lệ. Một quy tắc có ngoại lệ không được ghi lại là một quy tắc sẽ bị phá một cách đầy tự tin — người đọc gặp đúng trường hợp mà rõ ràng quy tắc không được viết ra cho nó, kết luận rằng quy tắc không áp dụng, và thế là có một ngoại lệ riêng mà không ai khác biết. Viết ngoại lệ đó ra, và nó trở thành một ranh giới thay vì một phán đoán cá nhân. "Không bao giờ commit thẳng vào main — trừ một commit chỉ đụng tới *.md" là một quy tắc. "Không bao giờ commit thẳng vào main" trong một repository mà mọi người vẫn thường xuyên làm vậy với tài liệu là một quy tắc dạy cho tất cả mọi người rằng có thể phớt lờ quy tắc.
Quy tắc nào được cưỡng chế và quy tắc nào không. Đây là đoạn hữu ích nhất trong tệp và cũng khó chịu nhất khi phải viết, vì nó là bản kiểm kê chính những lỗ hổng của bạn. Nó cũng là thứ duy nhất ngăn tệp này bị đọc như một tập hợp các bảo đảm. Hãy phân loại mọi quy tắc vào ba nhóm:
Nhóm
Ý nghĩa
Được cưỡng chế
Có một cơ chế chặn hành vi vi phạm. Hãy nêu tên cơ chế đó
Một phần
Có cơ chế, nhưng nó không phủ hết những gì lời văn tuyên bố. Hãy nói rõ nó bỏ sót cái gì
Khuyến nghị
Không có gì mang tính cơ học. Chỉ trông vào sự tuân thủ
Nhóm ở giữa là nơi trú ngụ của sự tự tin giả. "Được cưỡng chế một phần" thì với bất kỳ ai không tự tay viết phần kiểm tra đó đều đọc thành "được cưỡng chế".
Một quy tắc có thể đúng, có thể tìm thấy được, mà vẫn không được giữ — và khi nó không được giữ, thứ quay lại hiếm khi là "tôi quên". Đó là một lập luận, và thường là một lập luận hay. Trên 238 tệp chỉ dẫn đã công bố, đây hóa ra là khiếm khuyết phổ biến nhất trong 26 khiếm khuyết được liệt kê: 94 % trong số đó không chứa bất cứ điều gì ngăn cản việc lập luận để thoát khỏi một bước bắt buộc (phụ lục 0520).
Cách khắc phục là hai cột trong chính tệp này. Cái cớ ở cột trái, được trích đúng như nó đã thực sự được nói ra; câu trả lời ở cột phải, đóng đúng lối thoát cụ thể đó thay vì nhắc lại quy tắc.
Ý nghĩ
Câu trả lời
"Đây chỉ là một câu hỏi đơn giản thôi mà"
Câu hỏi cũng là tác vụ. Kiểm tra trước đã
"Tôi nhớ quy tắc này rồi"
Quy tắc thay đổi. Hãy đọc bản hiện hành
"Cứ giữ lại làm tham chiếu, tôi sẽ làm cho tử tế sau"
Bạn sẽ chỉnh nó lại cho vừa. Đó chính là làm sau
Hai điều cần thận trọng, cả hai đều đã được đo, cả hai đều phản trực giác: viết lại quy tắc bằng lời khác không giúp ích gì — hình thức mã hóa không có tác động đáng kể nào trên 11 mô hình — và nêu tên hình phạt lại làm mọi thứ tệ hơn, vì nó biến một nghĩa vụ thành một bài toán số học. Thứ có giúp ích là cho quy tắc một lối ra, và điều đó thuộc về lớp 3. Bằng chứng, cùng với phương pháp để tự tìm hiểu xem một dòng nào đó của bạn có tác dụng hay không, nằm ở phụ lục 0520.
Tệp quy tắc thường trực là lớp ít mang tính đặc thù phần mềm nhất trong bộ công cụ. Các hình thái phi phần mềm của nó còn già hơn hình thái phần mềm: bản chỉ dẫn thường trực bạn đưa cho một nhà thầu mới trong ngày đầu tiên; hai câu trong sổ tay của đội mà ai cũng thực sự nhớ; câu "không có gì đến tay khách hàng mà không qua một cặp mắt thứ hai" được lặp lại ở mọi buổi onboarding. Mỗi thứ đó đều là một chỉ dẫn thường trực áp dụng cho công việc chưa hề được hình dung, và mỗi thứ đều hỏng theo cùng một kiểu — bằng cách phình lên thành một cuốn sổ tay không ai đọc lại.
Bắt đầu từ những vi phạm bạn đã thực sự chứng kiến. Không phải từ một danh sách các best practice. Một quy tắc không trả lời cho một thất bại nào đã quan sát được thì tiêu tốn ngữ cảnh trong mọi tác vụ mà chẳng mua lại được gì.
Viết mỗi quy tắc thành một điều cấm ở những chỗ có thể. Hãy gọi tên một hành động nhận ra được, chứ không phải một đức tính. "Không bao giờ force-push một nhánh dùng chung" gọi tên một thứ mà bạn có thể tự thấy mình sắp làm; "giữ lịch sử sạch sẽ" thì phải diễn giải đã, mà diễn giải chính là chỗ một quy tắc lặng lẽ biến thành một sở thích. Lập luận đó nói về khả năng nhận ra, và nó dựa trên lý lẽ của riêng nó: tính đến 2026-09-04, trên toàn bộ các nguồn của lĩnh vực này, chúng tôi không tìm thấy phép đo nào về nó. Một câu hỏi lân cận thì đã được đo, và nó chỉ về cùng một hướng nhưng không mang được sức nặng ấy — trong một corpus gồm 679 tệp quy tắc thu thập được, mọi quy tắc tự nó cải thiện hiệu năng tác vụ đều là một điều cấm và mọi quy tắc làm hiệu năng tệ đi đều là một chỉ thị khẳng định, nhưng cũng chính nghiên cứu đó phát hiện rằng các quy tắc sinh ngẫu nhiên tốt ngang các quy tắc do chuyên gia tuyển chọn, điều này khiến tính phân cực trở thành một đường nứt trong dữ liệu đó chứ không phải một cái đòn bẩy (Guardrails Beat Guidance, arXiv:2604.11088; các giới hạn của nó được trình bày trong phụ lục 0520). Đây là một nghiên cứu khác với nghiên cứu về hình thức mã hóa ở trên (Compact Constraint Encoding, arXiv:2604.07192), vốn thay đổi cách một quy tắc được viết ra và thấy rằng điều đó chẳng tạo ra khác biệt nào cả.
Gắn ngoại lệ vào quy tắc, trong cùng một câu hoặc ngay câu kế tiếp. Không bao giờ để ở một mục khác, và cũng không bao giờ để nó chẳng ở đâu cả.
Gắn nhãn cho từng quy tắc: được cưỡng chế / một phần / khuyến nghị. Nếu bạn không nêu được tên cơ chế, thì nó là khuyến nghị — hãy viết đúng như vậy, đừng làm tròn lên.
Đặt ranh giới không thể đảo ngược lên đầu tiên. Trong một repository công khai thì đó là quy tắc về tiết lộ thông tin; trong một hệ thống production thì đó là quy tắc về hành động phá hủy. Thứ tự là một tín hiệu, và mục đầu tiên là mục được đọc.
Cắt bớt cho đến khi một con người sẽ chịu đọc lại nó. Lý do chịu lực lại chính là lý do chưa được đo: không ai bảo trì một tài liệu mà họ đã thôi đọc, và một tệp quy tắc không được bảo trì chính là nơi các mâu thuẫn tụ lại. Lập luận về chi phí thì còn đang tranh cãi — một nghiên cứu có kiểm soát cho rằng phần độ dài tăng thêm khiến chi phí suy luận đội lên hơn 20 %, trong khi một tệp quy tắc được đo riêng lại cho ra −16.58 % token đầu ra và −28.64 % thời gian thực (phụ lục 0520). Bối cảnh thiết lập khác nhau, nên không con số nào phân xử được con số kia. Hãy cắt vì người đọc.
Nó không thể làm cho agent giỏi hơn, và nó không thể cưỡng chế bất cứ điều gì. Cả hai nửa đều quan trọng. Nửa đầu nghĩa là một tệp quy tắc là công cụ sai cho chuyện "mô hình cứ làm sai X" — đó là vấn đề năng lực, và chỉ dẫn thì, theo đo đạc, không sửa được nó. Nửa sau nghĩa là mọi câu trong tệp, dù mạnh mẽ đến đâu, cũng chỉ là một khuynh hướng: nó định hình cái gì có khả năng xảy ra, chứ không bao giờ định hình cái gì là có thể.
Nếu một quy tắc buộc phải được giữ ngay cả khi không ai đọc, thì nó không phải là quy tắc lớp 1. Nó là một cổng lớp 2 mà chưa được xây.
Who. Somebody in sales preparing quotes with an agent. The job. Send a quote out. What goes wrong. One goes out with an unapproved price. Everyone had agreed beforehand that this must never happen — and that rule existed nowhere except in people's heads. What you build. Something that stops: a template that will not send without the price field, an approval step nobody can skip. Not the sentence "please always get it approved".
Take the one rule whose breach cannot be undone — not the one that annoys you most. Build something that stands in its way. If you cannot build anything, it is not a check but an agreement: then it belongs in layer 1, and at least you know what you are trusting.
A program that refuses. A pre-commit hook, a CI job, a server-side rule — something that exits non-zero and stops the work when a condition is violated.
It is the only layer in the toolbox that holds when nobody is reading, and it is therefore the one worth building second rather than last.
The rule everyone agrees with and nobody applies. Not disagreement — agreement plus schedule pressure. Layer 1 states the rule; layer 2 is what makes the statement load-bearing at 18:40 on a Friday.
A gate is anything that refuses. Software has hooks and CI; everywhere else has the form that will not submit without the field, the payment that needs a second signature, the checklist an aircraft cannot move without, the approval step a workflow tool will not skip. The properties that decide whether they work are identical: it must be automatic, it must fail closed, and the person it stops must not be the person who can wave it through.
The reason software examples dominate this page is not that the layer is technical. It is that in software the gate is cheap to build, so you can see all six failure modes below in one small system.
Pick the rule whose violation you could not undo. Start there, not with the rule that irritates you most this week.
Prove it red before you wire it up. Craft an input that must fail, run the check, watch it exit non-zero for the right reason. A gate that has never been seen red is a gate nobody has tested — and a check that silently matches nothing looks exactly like a check that passes.
Wire it in both places. Locally for speed, server-side for truth:
A developer's commit passes through a local pre-commit hook, which is opt-in per clone and can be skipped. The same check also runs in continuous integration on the server, where it cannot be skipped. The local run is a fast preview; the server run is the authoritative gate. A clone that never installed the hook is caught only by the server-side check.
Figure The same check runs locally and server-side, and only the server-side one is authoritative
Git never installs hooks. A fresh clone runs unguarded until somebody executes your installer once. If the check exists only locally, then every contributor who skipped that step is running with no gate, and every pipeline stays green while it happens.
Fail closed. A missing tool, a missing config file, a skipped stage, an unreadable input — each must exit non-zero. A gate that exits 0 when it cannot run is worse than no gate: it produces the green tick that stops anyone looking.
Make it say what it loaded. Print the pattern file it read, the file count it scanned, the rules it applied. A gate running at half strength — half its configuration absent, no error — is indistinguishable from a healthy one, and stays that way for months.
Print the reason, not the bypass. If an escape hatch exists, document it where the policy is, not in the failure message. A message that fires daily and offers its own off switch teaches the off switch.
Gate the gate. Whatever verifies that the hooks are installed must itself be run by something automatic. Otherwise it is documentation with an exit code.
A gate is a fixed proxy for what you meant, and fixity is its failure mode. It checks a condition; you cared about an intent. The two agree until they do not, and the gap is where every bypass lives — the allowlisted command with a flag that turns it into arbitrary execution, the validator that gets monkey-patched, the check whose green tick becomes the goal.
The introduction↗ has the measured version: reward hacking in 30.4% of runs on one evaluation; a benchmark-attack study reaching near-perfect scores without solving a single task; and, in a disclosed vulnerability, an agent writing an auto-approve setting into a config file and switching off its own gate.
So build the gate, and do not read its green tick as verification. It constrains action. It does not contain the intent.
Each of these is a real pattern, not a hypothetical; all six have been observed in one small public repository whose rules were classified against the mechanisms that actually exist (see Part 3 of the introduction↗).
Failure mode
How it shows up
The fix
The guard rail advertises its own off switch
The failure message prints the SKIP_ variable that bypasses it — and it fires on false positives daily
Print the reason and the remedy. Keep the hatch documented where the policy is
Local-only enforcement
The highest-priority check exists only in a hook, and hooks are opt-in per clone
Mirror every gate server-side. Treat the local one as a preview
The gate at half strength
Half the configuration is a git-ignored local file that does not exist in this checkout
State what was loaded; fail when a required input is absent
The hook that edits the commit you audited
It stamps a file, git adds it, and it lands in a diff you already read
Hooks verify, they do not write. If it must write, it must fail and ask you to re-stage
The meta-gate nothing calls
"Hooks installed" is listed as a gate, exits non-zero correctly — and is never invoked
Something automatic must run it
The docs and the code disagree
The prose claims two mechanisms enforce a rule; only one implements it
One canonical statement, and re-read the mechanism when either side changes
The gate wired to nothing
A check written in perfectly executable terms — a counted maximum, a contrast ratio, a forbidden call — with nothing in the repository able to run it. It reads exactly like enforcement
Ask what executes it, by name. If the answer is "the reader", it is layer 1, and you are trusting rather than enforcing
The gate that refuses the repair
The gate works. Its rule was written for the normal case, and the abnormal case is the one already in the file — so the contribution that would fix the defect is the one it rejects
Test a gate against the repair, not only against the violation. A gate is only as good as the rule it mechanises
The last two were added on 2026-09-03 from reading ten public skill repositories, where the first appeared four separate times in projects that otherwise take great care, and the second once in an exact form worth studying — see What the public corpus shows. Neither is an argument against gates. Both are arguments for asking, of every gate you have, which process runs it and what it would say to somebody trying to fix things.
Wer. Jemand im Vertrieb, der Angebote mit einem Agenten vorbereitet. Die Aufgabe. Ein Angebot rausschicken. Was schiefgeht. Einmal geht eines ohne freigegebenen Preis raus. Alle waren sich vorher einig, dass das nie passieren darf — und genau diese Regel stand nirgends, ausser in den Köpfen. Was du baust. Etwas, das nicht weitergeht: eine Vorlage, die ohne Preisfeld nicht absendet, ein Freigabeschritt, den niemand überspringen kann. Nicht der Satz „bitte immer freigeben lassen".
Nimm die eine Regel, deren Bruch sich nicht rückgängig machen lässt — nicht die, die dich am meisten nervt. Und baue etwas, das dabei stehen bleibt. Wenn du nichts bauen kannst, ist es keine Prüfung, sondern eine Absprache: dann gehört sie in Schicht 1, und du weisst wenigstens, worauf du dich verlässt.
Ein Programm, das sich weigert. Ein pre-commit-Hook, ein CI-Job, eine serverseitige Regel — etwas, das mit ungleich 0 endet und die Arbeit anhält, wenn eine Bedingung verletzt ist.
Es ist die einzige Schicht der Toolbox, die hält, wenn niemand hinschaut, und deshalb die, die man an zweiter Stelle baut statt an letzter.
Die Regel, der alle zustimmen und die niemand anwendet. Nicht Uneinigkeit — Zustimmung plus Termindruck. Schicht 1 formuliert die Regel; Schicht 2 macht die Formulierung freitags um 18:40 tragend.
Nicht jede Regel. Gates kosten echte Pflege, und jedes weitere ist ein weiteres Ding, das falsch sein kann. Also wählt man nach Irreversibilität, nicht nach Ärgernis:
Das gaten
Das nicht gaten
Eine Verletzung, die sich nicht rückgängig machen lässt — ein geleaktes Credential, eine zerstörte Historie, ein veröffentlichter Fehler
Eine Stilfrage, die ein Review auffängt
Eine Verletzung, die erst viel später sichtbar wird — eine fehlende Übersetzung, ein toter Link
Etwas, woran Compiler oder Testsuite ohnehin scheitern
Eine Regel, deren Verletzung billig zu prüfen und teuer zu übersehen ist
Eine Ermessensfrage. Ein Gate kann keine treffen, und so zu tun, ist der Weg, auf dem Gates umgangen werden
Die Asymmetrie ist die ganze Auswahlregel: gate, was du nicht zurücknehmen kannst.
Ein Gate ist alles, was sich weigert. Software hat Hooks und CI; überall sonst gibt es das Formular, das ohne das Feld nicht abschickt, die Zahlung, die eine zweite Unterschrift braucht, die Checkliste, ohne die ein Flugzeug nicht rollt, den Freigabeschritt, den ein Workflow-Werkzeug nicht überspringt. Die Eigenschaften, die über das Funktionieren entscheiden, sind dieselben: automatisch, fail closed, und wer aufgehalten wird, darf nicht derselbe sein, der durchwinken kann.
Dass auf dieser Seite Software-Beispiele überwiegen, liegt nicht daran, dass die Schicht technisch wäre. Es liegt daran, dass ein Gate in der Software billig zu bauen ist — man sieht alle sechs Versagensmodi unten in einem einzigen kleinen System.
Die Regel wählen, deren Verletzung sich nicht rückgängig machen lässt. Dort anfangen, nicht bei der, die diese Woche am meisten nervt.
Rot beweisen, bevor man es verdrahtet. Eine Eingabe bauen, die scheitern muss, die Prüfung laufen lassen, zusehen, wie sie aus dem richtigen Grund mit ungleich 0 endet. Ein Gate, das nie rot gesehen wurde, ist ein Gate, das niemand getestet hat — und eine Prüfung, die still auf nichts matcht, sieht genauso aus wie eine, die durchgeht.
An beiden Stellen verdrahten. Lokal für Tempo, serverseitig für Wahrheit:
Ein Commit durchläuft einen lokalen pre-commit-Hook, der pro Klon optional ist und übersprungen werden kann. Dieselbe Prüfung läuft ausserdem serverseitig in der Continuous Integration, wo sie nicht übersprungen werden kann. Der lokale Lauf ist eine schnelle Vorschau, der serverseitige das massgebliche Gate. Ein Klon, in dem der Hook nie installiert wurde, wird allein von der serverseitigen Prüfung erfasst.
Abbildung Dieselbe Prüfung läuft lokal und serverseitig, und nur die serverseitige ist massgeblich
Git installiert Hooks nie. Ein frischer Klon läuft ungesichert, bis jemand den Installer einmal ausführt. Existiert die Prüfung nur lokal, arbeiten alle, die diesen Schritt übersprungen haben, ohne Gate — und jede Pipeline bleibt grün, während es passiert.
Fail closed. Fehlendes Werkzeug, fehlende Konfigurationsdatei, übersprungene Stufe, unlesbare Eingabe — jedes davon muss mit ungleich 0 enden. Ein Gate, das mit 0 endet, wenn es nicht laufen kann, ist schlechter als kein Gate: es erzeugt den grünen Haken, der jedes Nachsehen beendet.
Es soll sagen, was es geladen hat. Die gelesene Musterdatei, die Zahl der geprüften Dateien, die angewandten Regeln. Ein Gate auf halber Kraft — die halbe Konfiguration fehlt, kein Fehler — ist von einem gesunden nicht zu unterscheiden und bleibt es monatelang.
Den Grund drucken, nicht den Ausweg. Gibt es einen Notausgang, gehört er dorthin, wo die Politik steht, nicht in die Fehlermeldung. Eine Meldung, die täglich feuert und ihren eigenen Ausschalter anbietet, bringt den Ausschalter bei.
Das Gate gaten. Was auch immer prüft, dass die Hooks installiert sind, muss selbst von etwas Automatischem ausgeführt werden. Sonst ist es Dokumentation mit einem Exit-Code.
Ein Gate ist ein fixer Proxy für das Gemeinte, und die Fixiertheit ist sein Versagensmodus. Es prüft eine Bedingung; gemeint war eine Absicht. Die beiden stimmen überein, bis sie es nicht mehr tun, und in dieser Lücke wohnt jede Umgehung — der erlaubte Befehl mit dem Flag, das ihn zu beliebiger Ausführung macht; der Validator, der gepatcht wird; die Prüfung, deren grüner Haken zum Ziel wird.
Die Einführung↗ hat die gemessene Fassung: Reward Hacking in 30,4 % der Läufe einer Evaluation; eine Benchmark-Angriffsstudie, die nahezu perfekte Werte erreicht, ohne eine einzige Aufgabe zu lösen; und, in einer offengelegten Schwachstelle, ein Agent, der eine Auto-Approve-Einstellung in eine Konfigurationsdatei schrieb und damit sein eigenes Gate abschaltete.
Also: das Gate bauen — und seinen grünen Haken nicht als Verifikation lesen. Es begrenzt Handlung. Es enthält die Absicht nicht.
Jeder davon ist ein reales Muster, kein hypothetisches; alle sechs wurden in einem kleinen öffentlichen Repository beobachtet, dessen Regeln gegen die tatsächlich existierenden Mechanismen klassifiziert wurden (siehe Teil 3 der Einführung↗).
Versagensmodus
Wie er sich zeigt
Die Abhilfe
Das Geländer bewirbt seinen eigenen Ausschalter
Die Fehlermeldung druckt die SKIP_-Variable, die sie umgeht — und feuert täglich auf Fehlalarme
Den Grund und die Abhilfe drucken. Den Notausgang dort dokumentieren, wo die Politik steht
Durchsetzung nur lokal
Die wichtigste Prüfung existiert nur im Hook, und Hooks sind pro Klon optional
Jedes Gate serverseitig spiegeln. Das lokale als Vorschau behandeln
Das Gate auf halber Kraft
Die halbe Konfiguration ist eine git-ignorierte lokale Datei, die es in diesem Klon nicht gibt
Sagen, was geladen wurde; scheitern, wenn eine nötige Eingabe fehlt
Der Hook, der den geprüften Commit verändert
Er stempelt eine Datei, führt git add aus, und sie landet in einem Diff, den man schon gelesen hat
Hooks prüfen, sie schreiben nicht. Muss geschrieben werden, scheitert der Hook und fordert zum erneuten Stagen auf
Das Meta-Gate, das niemand aufruft
„Hooks installiert" steht als Gate in der Liste, endet korrekt mit ungleich 0 — und wird nie ausgeführt
Etwas Automatisches muss es ausführen
Doku und Code widersprechen sich
Die Prosa behauptet, zwei Mechanismen setzten eine Regel durch; nur einer tut es
Eine kanonische Formulierung, und den Mechanismus nachlesen, wenn eine Seite sich ändert
Das Gate, das an nichts hängt
Eine Prüfung, vollkommen ausführbar formuliert — eine gezählte Obergrenze, ein Kontrastverhältnis, ein verbotener Aufruf — und nichts im Repository kann sie ausführen. Sie liest sich exakt wie Durchsetzung
Frage, was sie ausführt, beim Namen. Lautet die Antwort „der Leser", ist es Schicht 1, und du vertraust, statt durchzusetzen
Das Gate, das die Reparatur verweigert
Das Gate funktioniert. Seine Regel wurde für den Normalfall geschrieben, und der Sonderfall ist der, der schon in der Datei steht — also ist ausgerechnet der Beitrag, der den Defekt behebt, der, den es abweist
Prüfe ein Gate gegen die Reparatur, nicht nur gegen den Verstoss. Ein Gate ist nur so gut wie die Regel, die es mechanisiert
Die letzten beiden kamen am 2026-09-03 dazu, aus der Lektüre von zehn öffentlichen Skill-Repositories: das erste tauchte dort viermal getrennt auf, in Projekten, die sonst grosse Sorgfalt zeigen, das zweite einmal in einer Form, die das Studium lohnt — siehe Was das öffentliche Korpus zeigt. Keines von beiden ist ein Argument gegen Gates. Beide sind Argumente dafür, bei jedem Gate, das man hat, zu fragen: welcher Prozess führt es aus, und was sagt es jemandem, der etwas reparieren will?
Ai. Một người bên bán hàng chuẩn bị báo giá cùng với agent. Công việc. Gửi một bản báo giá đi. Điều gì hỏng. Một bản báo giá được gửi đi với mức giá chưa được duyệt. Trước đó mọi người đều đã đồng ý rằng chuyện này tuyệt đối không được xảy ra — và quy tắc ấy chẳng tồn tại ở đâu ngoài trong đầu người ta. Bạn xây gì. Một thứ biết chặn lại: một mẫu báo giá không cho gửi khi thiếu trường giá, một bước phê duyệt không ai bỏ qua được. Không phải câu "làm ơn luôn xin duyệt nhé".
Hãy lấy đúng cái quy tắc mà vi phạm nó là không thể hoàn tác — chứ không phải cái quy tắc làm bạn khó chịu nhất. Xây một thứ đứng chắn đường nó. Nếu bạn không xây được gì cả, thì đó không phải một phép kiểm tra mà là một thỏa thuận: khi đó nó thuộc về lớp 1, và ít nhất bạn cũng biết mình đang đặt niềm tin vào cái gì.
Một chương trình biết từ chối. Một hook pre-commit, một job CI, một quy tắc phía máy chủ — một thứ thoát ra với mã khác 0 và chặn công việc lại khi một điều kiện bị vi phạm.
Đây là lớp duy nhất trong bộ công cụ giữ được ngay cả khi không ai đọc, và vì thế nó là lớp đáng xây thứ hai chứ không phải sau cùng.
Cái quy tắc ai cũng đồng tình và không ai áp dụng. Không phải bất đồng — mà là đồng tình cộng với áp lực tiến độ. Lớp 1 phát biểu quy tắc; lớp 2 là thứ khiến phát biểu ấy chịu lực được vào 18:40 một chiều thứ Sáu.
Không phải mọi quy tắc. Cổng tốn công bảo trì thật sự và mỗi cổng bạn thêm vào lại là thêm một thứ có thể sai, nên hãy chọn theo tính không thể đảo ngược, chứ không theo mức độ phiền toái:
Hãy đặt cổng cho cái này
Đừng đặt cổng cho cái này
Một vi phạm mà bạn không thể hoàn tác — một credential bị rò rỉ, một lịch sử bị phá hủy, một sai sót đã công bố
Một sở thích về phong cách mà người review có thể bắt được
Một vi phạm mà mãi về sau mới lộ ra — một bản dịch bị thiếu, một liên kết gãy
Một thứ mà trình biên dịch hoặc bộ test vốn đã báo lỗi
Một quy tắc mà việc vi phạm nó rẻ để kiểm tra và đắt nếu bỏ sót
Một phán đoán chủ quan. Cổng không đưa ra phán đoán được, và giả vờ rằng nó làm được chính là cách cổng bị né
Sự bất đối xứng đó chính là toàn bộ quy tắc chọn lựa: hãy đặt cổng cho những gì bạn không rút lại được.
Cổng là bất cứ thứ gì biết từ chối. Phần mềm có hook và CI; mọi nơi khác có cái biểu mẫu không cho gửi khi thiếu trường, khoản thanh toán cần chữ ký thứ hai, bản checklist mà thiếu nó thì máy bay không được lăn bánh, bước phê duyệt mà công cụ workflow không cho bỏ qua. Những tính chất quyết định chúng có hiệu quả hay không thì giống hệt nhau: nó phải tự động, nó phải fail closed, và người bị nó chặn không được là người có quyền phẩy tay cho qua.
Lý do các ví dụ phần mềm chiếm ưu thế trên trang này không phải vì lớp này mang tính kỹ thuật. Mà vì trong phần mềm thì cổng rẻ để xây, nên bạn có thể thấy cả sáu kiểu thất bại bên dưới trong một hệ thống nhỏ duy nhất.
Chọn cái quy tắc mà vi phạm nó thì bạn không thể hoàn tác. Hãy bắt đầu từ đó, chứ không phải từ cái quy tắc làm bạn bực mình nhất tuần này.
Hãy chứng kiến nó đỏ trước khi đấu nối nó. Hãy dựng một đầu vào chắc chắn phải trượt, chạy phép kiểm tra, và xem nó thoát ra với mã khác 0 vì đúng lý do. Một cổng chưa từng được thấy đỏ là một cổng chưa ai kiểm thử — và một phép kiểm tra lặng lẽ không khớp gì cả thì trông y hệt một phép kiểm tra đã pass.
Đấu nối nó ở cả hai nơi. Cục bộ để nhanh, phía máy chủ để lấy sự thật:
Commit của một lập trình viên đi qua một pre-commit hook cục bộ, vốn là tùy chọn cài theo từng clone và có thể bị bỏ qua. Cùng phép kiểm tra đó cũng chạy trong continuous integration trên máy chủ, nơi nó không thể bị bỏ qua. Lần chạy cục bộ là một bản xem trước nhanh; lần chạy trên máy chủ mới là cổng có thẩm quyền. Một clone chưa bao giờ cài hook thì chỉ bị bắt bởi phép kiểm tra phía máy chủ.
Hình Cùng một phép kiểm tra chạy cục bộ và phía máy chủ, và chỉ bản phía máy chủ mới có thẩm quyền
Git không bao giờ tự cài hook. Một clone mới sẽ chạy mà không có bảo vệ cho tới khi có ai đó chạy trình cài đặt của bạn một lần. Nếu phép kiểm tra chỉ tồn tại cục bộ, thì mọi người đóng góp đã bỏ qua bước đó đều đang chạy mà không có cổng nào, và mọi pipeline vẫn xanh trong suốt thời gian đó.
Fail closed. Một công cụ bị thiếu, một tệp cấu hình bị thiếu, một stage bị bỏ qua, một đầu vào không đọc được — mỗi trường hợp đều phải thoát ra với mã khác 0. Một cổng thoát ra 0 khi nó không chạy được còn tệ hơn không có cổng: nó tạo ra dấu tích xanh khiến chẳng ai buồn nhìn nữa.
Bắt nó nói ra nó đã nạp những gì. Hãy in ra tệp mẫu (pattern file) nó đã đọc, số tệp nó đã quét, các quy tắc nó đã áp dụng. Một cổng đang chạy ở nửa công suất — mất một nửa cấu hình, không báo lỗi gì — thì không phân biệt được với một cổng khỏe mạnh, và cứ như thế suốt nhiều tháng.
In ra lý do, chứ đừng in ra đường vòng. Nếu có một lối thoát hiểm, hãy ghi nó ở chỗ đặt chính sách, chứ không phải trong thông điệp báo lỗi. Một thông điệp nổ ra hằng ngày mà lại tự chìa ra cái công tắc tắt của chính nó thì đang dạy người ta dùng cái công tắc đó.
Hãy đặt cổng cho chính cái cổng. Bất cứ thứ gì xác minh rằng các hook đã được cài thì bản thân nó cũng phải được một thứ tự động chạy. Nếu không thì nó chỉ là tài liệu có kèm mã thoát.
Một cổng là một đại diện cố định cho điều bạn muốn nói, và chính tính cố định ấy là kiểu thất bại của nó. Nó kiểm tra một điều kiện; còn bạn thì quan tâm tới một ý định. Hai thứ đó khớp nhau cho tới khi không khớp nữa, và khoảng cách ấy là nơi trú ngụ của mọi cách né tránh — cái lệnh nằm trong allowlist nhưng có một cờ biến nó thành thực thi tùy ý, cái validator bị monkey-patch, cái phép kiểm tra mà dấu tích xanh của nó trở thành mục tiêu.
Phần giới thiệu↗ có phiên bản đã đo được: reward hacking trong 30.4% số lần chạy trên một bài đánh giá; một nghiên cứu tấn công benchmark đạt điểm gần như hoàn hảo mà không giải được lấy một tác vụ nào; và, trong một lỗ hổng đã được công bố, một agent ghi một thiết lập tự-động-phê-duyệt vào một tệp cấu hình và tắt luôn cái cổng của chính nó.
Vậy nên hãy xây cổng, và đừng đọc dấu tích xanh của nó như một sự xác minh. Nó ràng buộc hành động. Nó không chứa đựng được ý định.
Mỗi kiểu dưới đây là một mẫu hình có thật, không phải giả định; cả sáu đều đã được quan sát trong một repository công khai nhỏ, nơi các quy tắc được phân loại đối chiếu với những cơ chế thực sự tồn tại (xem Phần 3 của phần giới thiệu↗).
Kiểu thất bại
Nó lộ ra thế nào
Cách sửa
Lan can bảo vệ tự quảng cáo công tắc tắt của chính nó
Thông điệp báo lỗi in ra biến SKIP_ dùng để né nó — và nó nổ ra vì false positive mỗi ngày
In ra lý do và cách khắc phục. Giữ lối thoát hiểm được ghi ở chỗ đặt chính sách
Chỉ cưỡng chế cục bộ
Phép kiểm tra ưu tiên cao nhất chỉ tồn tại trong một hook, mà hook thì là tùy chọn theo từng clone
Nhân bản mọi cổng ở phía máy chủ. Hãy coi bản cục bộ là một bản xem trước
Cổng ở nửa công suất
Một nửa cấu hình nằm trong một tệp cục bộ bị git bỏ qua, và tệp đó không tồn tại trong bản checkout này
Nêu rõ những gì đã được nạp; báo lỗi khi thiếu một đầu vào bắt buộc
Cái hook sửa chính commit mà bạn vừa kiểm tra
Nó đóng dấu vào một tệp, git add tệp đó, và nó chui vào một diff mà bạn đã đọc xong
Hook thì xác minh, chứ không ghi. Nếu buộc phải ghi, thì nó phải báo lỗi và yêu cầu bạn stage lại
Cái meta-gate không ai gọi
"Hook đã được cài" được liệt kê như một cổng, thoát ra mã khác 0 rất đúng — và không bao giờ được gọi
Phải có một thứ tự động chạy nó
Tài liệu và mã nói ngược nhau
Lời văn tuyên bố có hai cơ chế cưỡng chế một quy tắc; chỉ một cơ chế thực sự có mã
Một phát biểu chuẩn duy nhất, và đọc lại cơ chế mỗi khi một trong hai bên thay đổi
Cổng chẳng được đấu nối vào đâu
Một phép kiểm tra được viết bằng những lời hoàn toàn có thể thực thi — một mức tối đa đếm được, một tỷ lệ tương phản, một lời gọi bị cấm — mà trong repository chẳng có gì chạy được nó. Đọc lên thì y hệt một sự cưỡng chế
Hãy hỏi cái gì thực thi nó, gọi đích danh. Nếu câu trả lời là "người đọc", thì đó là lớp 1, và bạn đang tin tưởng chứ không phải đang cưỡng chế
Cái cổng từ chối chính bản sửa chữa
Cổng hoạt động tốt. Quy tắc của nó được viết cho trường hợp bình thường, còn trường hợp bất thường lại chính là cái đang nằm trong tệp — nên phần đóng góp lẽ ra sẽ sửa được khiếm khuyết đó lại chính là phần bị nó từ chối
Hãy kiểm thử một cổng đối chiếu với bản sửa chữa, chứ không chỉ đối chiếu với vi phạm. Một cổng chỉ tốt ngang cái quy tắc mà nó cơ giới hóa
Hai kiểu cuối được bổ sung vào 2026-09-03 từ việc đọc mười repository skill công khai, nơi kiểu thứ nhất xuất hiện bốn lần riêng biệt trong những dự án mà mặt khác vốn rất cẩn thận, còn kiểu thứ hai xuất hiện một lần dưới một hình thái chính xác đáng để nghiên cứu — xem Corpus công khai cho thấy điều gì. Không cái nào là lý lẽ chống lại việc dùng cổng. Cả hai đều là lý lẽ cho việc phải hỏi, với mọi cổng bạn đang có, rằng tiến trình nào chạy nó và nó sẽ nói gì với một người đang cố sửa chữa mọi thứ.
Who. HR preparing onboarding with an agent's help. The job. Somebody new starts — accounts, introductions, first week. What goes wrong. Every onboarding runs slightly differently, and under pressure the same things drop out: the introduction to the team, the check-in after two weeks. Not because they are unimportant, but because their value is invisible at the moment of dropping them. What you build. A file called "onboarding" with a trigger ("somebody new has signed"), the steps in the order they are actually done — and the point at which the agent stops and asks a human.
Take the procedure you explained most often this month and write it down the way you actually did it last time — including the step you skipped. That one matters most.
A repeatable job written down once, so it goes the same way every time: a file with a name, a trigger, an ordered set of steps and a defined end state. The closeout before you stop work. The preparation of a merge request. The handover.
Unlike layer 1, the body is not loaded until the agent judges the skill relevant — so it costs almost nothing until then. Unlike layer 2, nothing makes it run.
The multi-step job done differently each time, and worst under pressure. The steps that get dropped are never random: they are the ones whose value is not visible at the moment of dropping them — the record, the cleanup, the note explaining why the rejected option was rejected.
The strongest single intervention measured in this area was not a firmer prohibition. It was giving the agent a licensed alternative action for the moment of conflict — what to do instead, at the point where following the ritual has become expensive. In one benchmark that change moved the exploit rate on one model from over 85 % to 1 %; the same wording moved another model to 33 %, so take the shape rather than the number (appendix 0520).
Applied here: every step that says do not names what to do instead. "Do not merge without a review" becomes "if no reviewer is available within the hour, mark it blocked and say so in the channel". The escape-hatch policy below is where the legitimate exceptions live, and it exists for the same reason — a step nobody can follow does not stay unfollowed quietly, it becomes a step everybody skips.
A skill that restates what the model already does well has negative value: it costs context in the listing the agent carries on every task, and it competes for attention with the rules that matter. Four tests, and a proposal has to pass all four:
Test
Fails if
Name the failure it prevents, in one sentence, with an instance you observed
You can only describe a category of nice-to-have
Could a prohibition in layer 1 do it?
Yes — then it is one line, not a file
Does it restate rules that already live somewhere?
Yes — then reference them; a copy will drift
Is the thing you actually want a gate?
Yes — then write the gate; prose will not hold it
The same four tests as a path, with the exit each failure takes:
A proposed skill passes four tests in order. If you cannot name the failure it prevents, do not write it. If a prohibition in the standing rule file would do the job, write one line there instead. If it restates rules that already exist, reference them. If what you want is a constraint on action, build the gate. Only a proposal that passes all four is written as a skill.
Figure Four tests a proposed skill has to pass, and where it lands when one fails
"Nothing matched" is a claim about a search you ran, not a feeling. If you cannot quote the search, you have not run it.
A named ritual is a standard operating procedure with a trigger. The month-end close. The handover template before annual leave. The pre-flight checklist. What makes the agent version different is only the trigger: a person consults a procedure when they recognise the situation, and an agent consults it when it judges the description relevant — which is why the description carries so much more weight here than in a human SOP, and why it is the part most often written last.
Write the description first, not last. At startup the agent pre-loads only the name and description of every installed skill; the body is read later, and only if the agent judges the skill relevant to the task in front of it. The description is therefore the whole of what that decision has to go on. A situation-shaped description — "closing out a session before compaction" — gives it something to recognise; a category-shaped one — "session utilities" — does not. This is where most unused skills die, and it is the part people write in a hurry after the interesting work is done.
Two qualifications, both from the vendor's own documentation, and both worth knowing because they are what separates a rule from a superstition. It is a judgement, not a match. Anthropic's own skill-creator warns that a query may fail to trigger a skill even when the description matches perfectly, because an agent consults one only for work it cannot easily do itself. And the listing is budgeted. Every skill's name is always present, but when the listing overflows its budget — one per cent of the context window by default — descriptions are shortened or dropped, least-used first. So a skill can be perfectly described and still never fire. What was checked, and where, is in what we checked.
Write the steps as you actually did them the last time — including the step you skipped, and why skipping it was tempting.
Add the activation gate. What must be true before step 1: the right branch, the right repository, a configuration present, a prior step completed. A ritual that runs half-configured produces a confident wrong result, which is worse than not running.
Write the non-goals. Explicitly: what this deliberately does not do. Without them two skills grow into each other and the session has to guess which one is current.
Write the stop conditions. The point at which it stops and hands back to a human. A ritual with no stop condition runs past the moment it should have asked.
Decide the escape-hatch policy — who may skip it, on what grounds, and where that is recorded. Undecided means "anyone, silently".
Nothing makes it run. A ritual is advisory in the strictest sense: it is a file that describes a procedure, and no mechanism observes whether the procedure happened. Worse, its output often looks identical whether or not the ritual was followed — which means an omission leaves no trace and cannot be found afterwards.
So: if a step must happen, it is not a ritual step. It is a layer-2 gate. And if you want to be able to tell afterwards whether the ritual ran, that is layer 4 — the record is what makes the omission visible.
The claim above is the only one in this series about the internals of somebody else's product. It therefore carries its sources instead of asserting them. Eight surfaces were searched on 2026-09-06, in this order of expected authority. Only the first three could settle the mechanism; the rest can show that other people observe the same behaviour, which is a different and weaker thing.
#
Where
Tier
Read
What it yielded
1
platform.claude.com — Agent Skills overview and best practices
A
2026-09-06
Settles all three questions: metadata pre-loaded at startup, body read only on selection, selection by judgement over the descriptions
2
code.claude.com, the Anthropic engineering blog, claude.com/blog, the support and academy pages
A
2026-09-06
The same model, and the listing budget: names are always kept, descriptions are dropped least-used first
The same three levels; a maintainer puts the budget at one per cent of the context window; skill-creator warns that a perfect match may still not trigger
4
Issue trackers of the large third-party collections
C
2026-09-06
Thirteen reports of skills that did not fire, one of which reads as a controlled case
5
Reddit — r/ClaudeAI and r/ClaudeCode
C
2026-09-06
Fifteen reports, consistent with the official model but mostly derived from it; a claim that unused skills cost thousands of tokens each was corrected by other readers and withdrawn
6
Independent technical blogs and Hacker News
C
2026-09-06
Two inspections of the live tool definition, and a character limit measured against a named version
7
Stack Overflow and the vendor support surfaces
C
2026-09-06
Nothing reachable on Stack Overflow; the support pages restate the official model
—
X/Twitter, Discord
—
not searched
Excluded on purpose: ephemeral and not reliably datable, so not citable under the standard this repository holds itself to
Tier A is the vendor's own documentation, B is vendor-adjacent — an Anthropic repository, or an identifiable maintainer speaking on the record — and C is everyone else. The column is not decoration. A pile of tier-C reports, however large, never promotes into a statement about how the tool works; it was A and B that answered the question. What tier C bought is the two qualifications in the text above, which is why they are there and the rest of the pile is not.
Wer. HR, das Onboarding mit Unterstützung eines Agenten vorbereitet. Die Aufgabe. Eine neue Person fängt an — Zugänge, Einführung, erste Woche. Was schiefgeht. Jedes Onboarding läuft ein bisschen anders, und unter Druck fällt immer dasselbe weg: die Vorstellung im Team, das Gespräch nach zwei Wochen. Nicht weil es unwichtig wäre, sondern weil sein Wert im Moment des Weglassens nicht sichtbar ist. Was du baust. Eine Datei „Onboarding" mit einem Auslöser („eine neue Person hat unterschrieben"), den Schritten in der Reihenfolge, in der sie wirklich gemacht werden — und dem Punkt, an dem der Agent aufhört und einen Menschen fragt.
Nimm den Ablauf, den du diesen Monat am häufigsten erklärt hast, und schreib ihn so auf, wie du ihn beim letzten Mal wirklich gemacht hast — einschliesslich des Schritts, den du übersprungen hast. Der ist der wichtigste.
Eine wiederkehrende Aufgabe, einmal aufgeschrieben, damit sie jedes Mal gleich läuft: eine Datei mit Namen, Auslöser, geordneten Schritten und definiertem Endzustand. Der Abschluss, bevor man aufhört. Die Vorbereitung eines Merge Requests. Die Übergabe.
Anders als Schicht 1 wird der Körper erst geladen, wenn der Agent die Skill für einschlägig hält — bis dahin kostet er fast nichts. Anders als Schicht 2 sorgt nichts dafür, dass es läuft.
Der mehrstufige Ablauf, jedes Mal anders ausgeführt und am schlechtesten unter Druck. Die Schritte, die wegfallen, sind nie zufällig: es sind die, deren Wert im Moment des Weglassens nicht sichtbar ist — der Nachweis, das Aufräumen, die Notiz, warum die verworfene Option verworfen wurde.
Was hineingehört — wann eine Aufgabe eine Datei verdient#
Alle vier müssen gelten:
Test
Warum er zählt
Mehrstufig, mit einer Reihenfolge, auf die es ankommt
Ein Schritt ist ein Satz in Schicht 1, keine Datei
Wiederkehrend, oft genug, dass Varianz teuer ist
Ein Einzelfall ist eine Anfrage, kein Ritual
Unter Druck übersprungen
Das ist die eigentliche Nutzlast. Was niemand überspringt, braucht keine Verstärkung
Ein definierter Endzustand, in einem Satz benennbar
Ohne ihn lässt sich nicht sagen, dass das Ritual fertig ist
Der stärkste einzelne Eingriff, der in diesem Feld gemessen wurde, war kein härteres Verbot. Es war, dem Agenten eine erlaubte Alternativhandlung für den Moment des Konflikts zu geben — was stattdessen zu tun ist, an der Stelle, an der das Befolgen des Rituals teuer geworden ist. In einem Benchmark bewegte diese Änderung die Ausbeutungsrate bei einem Modell von über 85 % auf 1 %; dieselbe Formulierung brachte ein anderes Modell auf 33 % — nimm also die Form, nicht die Zahl (Anhang 0520).
Hier angewandt: jeder Schritt, der nicht sagt, benennt, was stattdessen zu tun ist. Aus „nicht ohne Review mergen" wird „wenn binnen einer Stunde niemand reviewen kann, als blockiert markieren und das im Kanal sagen". Die Escape-Hatch-Policy weiter unten ist der Ort für die legitimen Ausnahmen, und sie existiert aus demselben Grund — ein Schritt, den niemand befolgen kann, bleibt nicht still unbefolgt, er wird zu einem Schritt, den alle überspringen.
Ein Skill, der wiederholt, was das Modell ohnehin gut kann, hat negativen Wert: er kostet Kontext in der Auflistung, die der Agent bei jeder Aufgabe mitführt, und er konkurriert um Aufmerksamkeit mit den Regeln, auf die es ankommt. Vier Tests, und ein Vorschlag muss alle vier bestehen:
Test
Fällt durch, wenn
Den verhinderten Fehler benennen, in einem Satz, mit einem beobachteten Vorfall
sich nur eine Kategorie von „wäre schön" beschreiben lässt
Täte es ein Verbot in Schicht 1 auch?
Ja — dann ist es eine Zeile, keine Datei
Wiederholt er Regeln, die schon woanders stehen?
Ja — dann referenzieren; eine Kopie driftet
Ist das Gewünschte in Wahrheit ein Gate?
Ja — dann das Gate bauen; Prosa hält es nicht
Dieselben vier Tests als Weg, mit dem Ausgang, den jedes Scheitern nimmt:
Ein vorgeschlagener Skill durchläuft vier Tests der Reihe nach. Lässt sich der verhinderte Fehler nicht benennen, wird er nicht geschrieben. Täte es ein Verbot in der festen Regeldatei auch, wird dort eine Zeile geschrieben. Wiederholt er bestehende Regeln, werden diese referenziert. Ist das Gewünschte eine Begrenzung von Handlung, wird das Gate gebaut. Nur ein Vorschlag, der alle vier besteht, wird ein Skill.
Abbildung Vier Tests, die ein vorgeschlagener Skill bestehen muss, und wo er landet, wenn einer scheitert
„Nichts passte" ist eine Aussage über eine ausgeführte Suche, kein Gefühl. Wer die Suche nicht zitieren kann, hat sie nicht ausgeführt.
Ein benanntes Ritual ist eine Verfahrensanweisung mit einem Auslöser. Der Monatsabschluss. Die Übergabevorlage vor dem Urlaub. Die Checkliste vor dem Start. Was die Agenten-Fassung unterscheidet, ist allein der Auslöser: ein Mensch zieht ein Verfahren heran, wenn er die Situation erkennt, ein Agent, wenn er die Beschreibung für einschlägig hält — weshalb die Beschreibung hier weit mehr Gewicht trägt als in einer menschlichen Verfahrensanweisung, und weshalb sie der Teil ist, der am häufigsten zuletzt geschrieben wird.
Die Beschreibung zuerst schreiben, nicht zuletzt. Beim Start lädt der Agent nur Name und Beschreibung jeder installierten Skill vor; der Körper wird später gelesen, und nur dann, wenn der Agent die Skill für die vorliegende Aufgabe als einschlägig beurteilt. Die Beschreibung ist damit alles, worauf sich diese Entscheidung stützen kann. Eine situationsförmige Beschreibung — „eine Session vor der Verdichtung abschliessen" — gibt ihr etwas zu erkennen; eine kategorienförmige — „Session-Werkzeuge" — nicht. Hier sterben die meisten ungenutzten Skills, und es ist der Teil, den man in Eile schreibt, nachdem die interessante Arbeit getan ist.
Zwei Einschränkungen, beide aus der Dokumentation des Herstellers selbst, und beide wissenswert, weil sie eine Regel von einem Aberglauben trennen. Es ist ein Urteil, kein Abgleich. Anthropics eigener skill-creator warnt, dass eine Anfrage eine Skill auch dann nicht auslösen kann, wenn die Beschreibung perfekt passt — ein Agent zieht eine Skill nur für Arbeit heran, die er nicht ohne Weiteres selbst erledigt. Und die Auflistung hat ein Budget. Der Name jeder Skill ist immer vorhanden, aber wenn die Auflistung ihr Budget überschreitet — voreingestellt ein Prozent des Kontextfensters — werden Beschreibungen gekürzt oder fallen weg, die am wenigsten genutzten zuerst. Eine Skill kann also perfekt beschrieben sein und trotzdem nie feuern. Was geprüft wurde und wo, steht unter was wir geprüft haben.
Die Schritte so schreiben, wie man sie beim letzten Mal wirklich gemacht hat — einschliesslich des Schritts, den man ausgelassen hat, und warum das Auslassen verlockend war.
Das Aktivierungs-Gate ergänzen. Was vor Schritt 1 wahr sein muss: der richtige Branch, das richtige Repository, eine vorhandene Konfiguration, ein abgeschlossener Vorschritt. Ein Ritual, das halb konfiguriert läuft, erzeugt ein selbstbewusstes falsches Ergebnis — schlimmer, als nicht zu laufen.
Die Nicht-Ziele schreiben. Ausdrücklich: was es bewusst nicht tut. Ohne sie wachsen zwei Skills ineinander, und die Session muss raten, welcher aktuell ist.
Die Abbruchbedingungen schreiben. Der Punkt, an dem es aufhört und an einen Menschen zurückgibt. Ein Ritual ohne Abbruchbedingung läuft über den Moment hinaus, an dem es hätte fragen müssen.
Die Politik für die Notausgänge entscheiden — wer darf überspringen, aus welchem Grund, und wo wird das festgehalten. Unentschieden heisst „alle, stillschweigend".
Nichts sorgt dafür, dass es läuft. Ein Ritual ist advisorisch im strengsten Sinn: eine Datei, die ein Verfahren beschreibt, und kein Mechanismus beobachtet, ob das Verfahren stattfand. Schlimmer: sein Ergebnis sieht oft gleich aus, ob es befolgt wurde oder nicht — eine Auslassung hinterlässt also keine Spur und lässt sich hinterher nicht finden.
Also: muss ein Schritt stattfinden, ist es kein Ritualschritt. Es ist ein Schicht-2-Gate. Und wer hinterher wissen will, ob das Ritual lief, braucht Schicht 4 — der Nachweis ist das, was die Auslassung sichtbar macht.
Der Skill existiert, ist gut, und hat nie ausgelöst
Die Beschreibung als Situation neu schreiben, nicht als Kategorie — und dann prüfen, ob sie überhaupt noch in der Auflistung steht. Nicht-Aufruf hat mehr als eine Ursache
Er wiederholt die Regeldatei
Zwei Dokumente zum selben Thema, driftend
Schicht 1 referenzieren; nie kopieren
Kein Aktivierungs-Gate
Er läuft im falschen Kontext und liefert ein selbstbewusstes falsches Ergebnis
Vorbedingungen benennen; laut scheitern, wenn sie fehlen
Keine Abbruchbedingung
Er läuft über den Punkt hinaus, an dem ein Mensch hätte entscheiden müssen
Die Gabel schreiben, an der er zurückgibt
Der Notausgang als Normalweg
Das Überspringen wird Routine, und niemand erinnert sich, das entschieden zu haben
Den Ausgang an einen genannten Grund binden und nachsehen, wo er landet
Zwei Skills mit 80 % Überlappung
Die Session rät, welcher aktuell ist, und rät falsch
Zusammenführen: ein Skill, ein zweiter Modus
Eine stille Auslassung
Der Schritt wurde übersprungen; das Ergebnis sieht gleich aus
Den Schritt eine Spur hinterlassen lassen — siehe Schicht 4
Die Behauptung oben ist die einzige dieser Reihe, die von der Innenmechanik eines fremden Produkts handelt. Sie führt deshalb ihre Quellen mit, statt sie zu behaupten. Acht Anlaufstellen wurden am 2026-09-06 durchsucht, in dieser Reihenfolge erwarteter Verbindlichkeit. Nur die ersten drei konnten den Mechanismus klären; der Rest kann zeigen, dass andere dasselbe beobachten — und das ist etwas anderes und Schwächeres.
#
Wo
Stufe
Gelesen
Was es ergab
1
platform.claude.com — Agent-Skills-Übersicht und Best Practices
A
2026-09-06
Klärt alle drei Fragen: Metadaten beim Start vorgeladen, Körper erst bei Auswahl gelesen, Auswahl als Urteil über die Beschreibungen
2
code.claude.com, Anthropics Engineering-Blog, claude.com/blog, die Support- und Academy-Seiten
A
2026-09-06
Dasselbe Modell, dazu das Budget der Auflistung: Namen bleiben immer, Beschreibungen fallen weg, die am wenigsten genutzten zuerst
Dieselben drei Stufen; ein Maintainer beziffert das Budget auf ein Prozent des Kontextfensters; skill-creator warnt, dass auch ein perfekter Treffer nicht auslösen muss
4
Issue-Tracker der grossen Fremdsammlungen
C
2026-09-06
Dreizehn Berichte über Skills, die nicht feuerten, einer davon liest sich wie ein kontrollierter Fall
5
Reddit — r/ClaudeAI und r/ClaudeCode
C
2026-09-06
Fünfzehn Berichte, mit dem offiziellen Modell verträglich, aber grösstenteils daraus abgeleitet; die Behauptung, ungenutzte Skills kosteten je Tausende Token, wurde von anderen Lesern korrigiert und zurückgezogen
6
Unabhängige Fachblogs und Hacker News
C
2026-09-06
Zwei Inspektionen der laufenden Werkzeugdefinition, und ein Zeichenlimit, gemessen gegen eine benannte Version
7
Stack Overflow und die Support-Flächen des Herstellers
C
2026-09-06
Auf Stack Overflow nichts Erreichbares; die Support-Seiten wiederholen das offizielle Modell
—
X/Twitter, Discord
—
nicht durchsucht
Bewusst ausgelassen: flüchtig und nicht verlässlich datierbar, damit nicht zitierfähig nach dem Massstab, den dieses Repository an sich selbst anlegt
Stufe A ist die Dokumentation des Herstellers selbst, B ist herstellernah — ein Anthropic-Repository oder eine namentlich erkennbare Maintainerin oder ein Maintainer, der öffentlich spricht — und C ist alles andere. Die Spalte ist keine Deko. Ein Stapel Stufe-C-Berichte wird, wie gross er auch sei, niemals zu einer Aussage darüber, wie das Werkzeug funktioniert; geklärt haben es A und B. Was Stufe C eingebracht hat, sind die beiden Einschränkungen oben — deshalb stehen sie im Text und der Rest des Stapels nicht.
Ai. Bộ phận HR chuẩn bị onboarding với sự trợ giúp của một agent. Công việc. Có người mới vào — tài khoản, giới thiệu, tuần đầu tiên. Điều gì hỏng. Mỗi lần onboarding lại chạy hơi khác nhau, và khi bị áp lực thì vẫn chính những thứ đó rơi rụng: phần giới thiệu với đội, buổi check-in sau hai tuần. Không phải vì chúng không quan trọng, mà vì giá trị của chúng vô hình ngay tại thời điểm bị bỏ đi. Bạn xây gì. Một tệp tên là "onboarding" với một trigger ("có người mới vừa ký"), các bước theo đúng thứ tự chúng thực sự được làm — và điểm mà tại đó agent dừng lại và hỏi con người.
Hãy lấy quy trình mà tháng này bạn phải giải thích nhiều lần nhất và viết nó ra đúng theo cách bạn thực sự đã làm lần gần nhất — bao gồm cả bước bạn đã bỏ qua. Bước đó mới là quan trọng nhất.
Một công việc lặp lại được viết ra một lần, để mỗi lần nó diễn ra theo cùng một cách: một tệp có tên, một trigger, một tập các bước có thứ tự và một trạng thái kết thúc được định nghĩa. Phần đóng việc trước khi bạn ngừng làm. Việc chuẩn bị một merge request. Việc bàn giao.
Khác với lớp 1, phần thân chỉ được nạp khi agent đánh giá skill là phù hợp — nên trước đó nó gần như không tốn gì. Khác với lớp 2, không có gì bắt nó chạy.
Công việc nhiều bước, mỗi lần làm một khác, và tệ nhất là khi bị áp lực. Những bước bị bỏ rơi không bao giờ là ngẫu nhiên: chúng là những bước mà giá trị không hiện ra ngay tại thời điểm bị bỏ — bản ghi, việc dọn dẹp, ghi chú giải thích vì sao phương án bị loại đã bị loại.
Cái gì thuộc về nó — khi nào một công việc xứng đáng có một tệp riêng#
Cả bốn điều phải đúng:
Phép thử
Vì sao nó quan trọng
Nhiều bước, với một thứ tự có ý nghĩa
Một bước đơn lẻ là một câu trong lớp 1, không phải một tệp
Lặp lại đủ thường xuyên đến mức sự dao động giữa các lần trở nên đắt đỏ
Một việc làm một lần là một yêu cầu, không phải một nghi thức
Bị bỏ qua khi có áp lực
Đây mới là phần cốt lõi. Một công việc không ai bỏ qua thì không cần được củng cố
Một trạng thái kết thúc được định nghĩa mà bạn gọi tên được trong một câu
Không có nó thì không có cách nào nói rằng nghi thức đã hoàn tất
Một bước chỉ biết cấm là một bước chưa hoàn chỉnh#
Can thiệp đơn lẻ mạnh nhất được đo trong lĩnh vực này không phải là một lệnh cấm cứng rắn hơn. Đó là việc trao cho agent một hành động thay thế được cho phép, dành cho khoảnh khắc xung đột — làm gì thay vào đó, tại điểm mà việc tuân theo nghi thức đã trở nên đắt đỏ. Trong một benchmark, thay đổi đó đã kéo tỉ lệ khai thác trên một mô hình từ hơn 85 % xuống 1 %; cùng cách diễn đạt ấy chỉ đưa một mô hình khác xuống 33 %, nên hãy lấy hình dạng chứ đừng lấy con số (phụ lục 0520).
Áp dụng vào đây: mọi bước nói không được đều nêu rõ phải làm gì thay vào đó. "Không được merge khi chưa có review" trở thành "nếu trong vòng một giờ không có ai review được, hãy đánh dấu là blocked và nói ra điều đó trong kênh". Chính sách cửa thoát hiểm ở dưới là nơi các ngoại lệ chính đáng cư trú, và nó tồn tại vì cùng một lý do — một bước không ai theo nổi sẽ không lặng lẽ nằm đó mà không được theo, nó trở thành một bước ai cũng bỏ qua.
Một skill chỉ nhắc lại những gì mô hình vốn đã làm tốt thì có giá trị âm: nó tốn context trong danh sách mà agent mang theo ở mọi tác vụ, và nó cạnh tranh sự chú ý với những quy tắc thực sự quan trọng. Bốn phép thử, và một đề xuất phải vượt qua cả bốn:
Phép thử
Trượt nếu
Gọi tên thất bại mà nó ngăn chặn, trong một câu, kèm một trường hợp bạn đã quan sát được
Bạn chỉ mô tả được một hạng mục "có thì tốt"
Một lệnh cấm ở lớp 1 có làm được việc đó không?
Có — vậy thì nó là một dòng, không phải một tệp
Nó có nhắc lại những quy tắc đã nằm ở đâu đó rồi không?
Có — vậy thì hãy tham chiếu tới chúng; một bản sao rồi sẽ trôi lệch
Thứ bạn thực sự muốn có phải là một cổng không?
Có — vậy thì hãy viết cái cổng đó; văn xuôi sẽ không giữ nổi nó
Cũng bốn phép thử ấy dưới dạng một lối đi, kèm cửa ra mà mỗi lần trượt sẽ đi qua:
Một skill được đề xuất phải vượt qua bốn phép thử theo thứ tự. Nếu bạn không gọi tên được thất bại mà nó ngăn chặn, đừng viết nó. Nếu một lệnh cấm trong tệp quy tắc thường trực làm được việc đó, hãy viết một dòng ở đó thay vì. Nếu nó nhắc lại những quy tắc đã tồn tại, hãy tham chiếu tới chúng. Nếu thứ bạn muốn là một ràng buộc lên hành động, hãy xây cái cổng. Chỉ một đề xuất vượt qua cả bốn mới được viết thành một skill.
Hình Bốn phép thử mà một skill được đề xuất phải vượt qua, và nó rơi vào đâu khi trượt một phép thử
"Không có gì khớp" là một khẳng định về một lần tìm kiếm mà bạn đã chạy, không phải một cảm giác. Nếu bạn không trích dẫn được lần tìm kiếm đó, thì bạn chưa chạy nó.
Một nghi thức có tên là một quy trình vận hành chuẩn có kèm trigger. Việc chốt sổ cuối tháng. Mẫu bàn giao trước kỳ nghỉ phép năm. Danh sách kiểm tra trước chuyến bay. Điều duy nhất làm phiên bản dành cho agent khác đi chính là trigger: một người tra cứu quy trình khi họ nhận ra tình huống, còn một agent tra cứu nó khi nó đánh giá phần mô tả là phù hợp — đó là lý do phần mô tả ở đây có sức nặng lớn hơn nhiều so với trong một SOP của con người, và cũng là lý do nó là phần thường bị viết sau cùng nhất.
Viết phần mô tả trước, không phải sau cùng. Khi khởi động, agent chỉ nạp trước tên và phần mô tả của mọi skill đã cài; phần thân được đọc sau, và chỉ khi agent đánh giá skill là phù hợp với tác vụ đang có. Vì vậy phần mô tả là toàn bộ những gì quyết định ấy có thể dựa vào. Một mô tả có hình dạng của một tình huống — "đóng một phiên làm việc trước khi compaction" — cho quyết định ấy một thứ để nhận ra; một mô tả có hình dạng của một hạng mục — "tiện ích cho phiên làm việc" — thì không. Đây là chỗ mà phần lớn các skill không bao giờ được dùng đến chết đi, và nó là phần người ta viết vội sau khi phần việc thú vị đã xong.
Hai điểm dè dặt, cả hai đều lấy từ chính tài liệu của nhà cung cấp, và cả hai đều đáng biết vì chúng là ranh giới giữa một quy tắc và một điều mê tín. Đó là một phán đoán, không phải một phép khớp. Chính skill-creator của Anthropic cảnh báo rằng một truy vấn có thể không kích hoạt được skill ngay cả khi phần mô tả khớp hoàn hảo, bởi agent chỉ tra cứu một skill cho công việc mà nó không tự làm được một cách dễ dàng. Và danh sách có ngân sách. Tên của mọi skill thì luôn có mặt, nhưng khi danh sách vượt ngân sách của nó — mặc định là một phần trăm cửa sổ context — các phần mô tả sẽ bị cắt ngắn hoặc bị bỏ, bắt đầu từ những skill ít được dùng nhất. Vậy nên một skill có thể được mô tả hoàn hảo mà vẫn không bao giờ chạy. Những gì đã được kiểm tra, và ở đâu, nằm trong những gì chúng tôi đã kiểm tra.
Viết các bước đúng như bạn đã thực sự làm lần gần nhất — bao gồm cả bước bạn đã bỏ qua, và vì sao việc bỏ qua nó lại hấp dẫn.
Thêm cổng kích hoạt. Điều gì phải đúng trước bước 1: đúng branch, đúng repository, một cấu hình đã có mặt, một bước trước đó đã hoàn tất. Một nghi thức chạy khi mới cấu hình được một nửa sẽ cho ra một kết quả sai đầy tự tin, và như thế còn tệ hơn là không chạy.
Viết ra các phi-mục-tiêu. Một cách tường minh: thứ này cố ý không làm những gì. Không có chúng thì hai skill sẽ mọc chồng vào nhau và phiên làm việc phải đoán xem cái nào là cái hiện hành.
Viết ra các điều kiện dừng. Điểm mà tại đó nó dừng lại và trả việc về cho con người. Một nghi thức không có điều kiện dừng sẽ chạy vượt qua cái khoảnh khắc lẽ ra nó phải hỏi.
Quyết định chính sách cửa thoát hiểm — ai được phép bỏ qua nó, với lý do gì, và điều đó được ghi lại ở đâu. Không quyết định nghĩa là "bất kỳ ai, một cách lặng lẽ".
Không có gì bắt nó chạy. Một nghi thức mang tính khuyến nghị theo nghĩa chặt chẽ nhất: nó là một tệp mô tả một quy trình, và không có cơ chế nào quan sát xem quy trình đó có diễn ra hay không. Tệ hơn, đầu ra của nó thường trông y hệt nhau dù nghi thức có được tuân theo hay không — nghĩa là một lần bỏ sót không để lại dấu vết nào và về sau không thể tìm ra.
Vậy nên: nếu một bước bắt buộc phải xảy ra, thì nó không phải là một bước của nghi thức. Nó là một cổng thuộc lớp 2. Và nếu bạn muốn về sau có thể biết được nghi thức có chạy hay không, thì đó là lớp 4 — chính bản ghi mới làm cho việc bỏ sót nhìn thấy được.
Skill thì có, viết tốt, và chưa từng kích hoạt lần nào
Viết lại phần mô tả thành một tình huống, không phải một hạng mục — rồi kiểm tra xem nó có còn nằm trong danh sách hay không. Việc không được gọi là một triệu chứng có nhiều hơn một nguyên nhân
Nó nhắc lại tệp quy tắc
Hai tài liệu cùng một chủ đề, ngày càng trôi xa nhau
Tham chiếu tới lớp 1; đừng bao giờ chép lại nó
Không có cổng kích hoạt
Nó chạy trong sai ngữ cảnh và cho ra một kết quả sai đầy tự tin
Gọi tên các tiền điều kiện; thất bại ầm ĩ khi chúng vắng mặt
Không có điều kiện dừng
Nó cứ chạy tiếp, vượt qua điểm mà lẽ ra một con người phải quyết định
Viết ra ngã rẽ nơi nó trả việc lại
Cửa thoát hiểm thành lối đi bình thường
Việc bỏ qua được dùng thường xuyên và không ai nhớ đã quyết định như vậy
Bắt cửa thoát hiểm phải kèm một lý do được nêu ra, và soát lại nơi lý do đó rơi vào
Hai skill chồng lấn 80%
Phiên làm việc đoán xem cái nào là hiện hành, và đoán sai
Khẳng định ở trên là khẳng định duy nhất trong loạt bài này nói về cơ chế bên trong sản phẩm của người khác. Vì vậy nó mang theo nguồn dẫn của mình thay vì chỉ tuyên bố. Tám nơi đã được tra cứu ngày 2026-09-06, theo thứ tự thẩm quyền dự kiến. Chỉ ba nơi đầu mới có thể giải quyết được cơ chế; phần còn lại chỉ cho thấy rằng người khác cũng quan sát thấy điều tương tự — và đó là một điều khác, yếu hơn.
#
Ở đâu
Bậc
Đọc ngày
Kết quả thu được
1
platform.claude.com — tổng quan Agent Skills và best practices
A
2026-09-06
Giải quyết cả ba câu hỏi: metadata được nạp trước lúc khởi động, phần thân chỉ đọc khi được chọn, việc chọn là một phán đoán trên các phần mô tả
2
code.claude.com, blog kỹ thuật của Anthropic, claude.com/blog, các trang hỗ trợ và academy
A
2026-09-06
Cùng mô hình đó, cộng thêm ngân sách của danh sách: tên luôn được giữ, phần mô tả bị bỏ, bắt đầu từ những skill ít dùng nhất
Cùng ba tầng đó; một maintainer nêu con số ngân sách là một phần trăm cửa sổ context; skill-creator cảnh báo rằng khớp hoàn hảo vẫn có thể không kích hoạt
4
Issue tracker của các bộ sưu tập lớn của bên thứ ba
C
2026-09-06
Mười ba báo cáo về skill không chạy, trong đó một trường hợp đọc như một thí nghiệm có kiểm soát
5
Reddit — r/ClaudeAI và r/ClaudeCode
C
2026-09-06
Mười lăm báo cáo, tương thích với mô hình chính thức nhưng phần lớn là suy ra từ nó; một khẳng định rằng skill không dùng đến vẫn tốn hàng nghìn token mỗi cái đã bị người đọc khác đính chính và rút lại
6
Các blog kỹ thuật độc lập và Hacker News
C
2026-09-06
Hai lần soi trực tiếp định nghĩa công cụ đang chạy, và một giới hạn ký tự đo được trên một phiên bản có tên cụ thể
7
Stack Overflow và các trang hỗ trợ của nhà cung cấp
C
2026-09-06
Không có gì truy cập được trên Stack Overflow; các trang hỗ trợ chỉ nhắc lại mô hình chính thức
—
X/Twitter, Discord
—
không tra cứu
Cố ý bỏ qua: phù du và không thể ghi ngày một cách đáng tin, nên không trích dẫn được theo chuẩn mà kho này tự đặt ra cho mình
Bậc A là tài liệu của chính nhà cung cấp, B là gần nhà cung cấp — một kho của Anthropic, hoặc một maintainer có danh tính rõ ràng phát biểu công khai — và C là tất cả những nguồn còn lại. Cột này không phải để trang trí. Một chồng báo cáo bậc C, dù lớn đến đâu, cũng không bao giờ trở thành một phát biểu về cách công cụ hoạt động; giải quyết được câu hỏi là A và B. Cái mà bậc C mang lại là hai điểm dè dặt ở trên — đó là lý do chúng có mặt trong bài, còn phần còn lại của chồng báo cáo thì không.
Who. An analyst who has worked through three options with an agent. The job. Recommend one of them. What goes wrong. Six weeks later somebody proposes exactly the option she rejected — well argued, so she checks it a second time. The reason for rejecting it existed only in her head. The result was saved; the rejected option was not. What you build. A note written beforehand: the goal in one sentence that could also be wrong — and under it "rejected, because …" with a checkable reason. "The form does not allow two contacts" stays checkable. "Wasn't a good idea" does not.
On the next job: three lines before you start. Goal · steps · what you are deliberately not doing. Write it afterwards and you record only the result — which was visible anyway.
A record of what was supposed to happen, written before the work, against which the outcome can be checked afterwards by someone who was not there.
A branch charter. A handover note. A decision entry with its reasoning. The format matters far less than two properties: it is written in advance, and it is specific enough to be wrong.
Two kinds of artefact live here, and their lifetimes are opposite. A per-work record — a charter for one branch, a note for one task — is true only while that work is in flight, and becomes noise once it lands; it is removed at the end. A decision record is durable: it is written to be read later by someone who was not there, and it is not removed. Neither of them is a reusable asset — a ritual, a skill, anything written to be found again — which belongs to layer 5 and is retired rather than deleted there. "Remove it when the work is done", below, is about the first of the three and nothing else.
This is the layer people skip, because it is the only one that produces nothing at the moment of writing it.
That nobody can check, afterwards, what was supposed to happen. Every other layer addresses the work in flight. This one addresses the far more common situation: a week later, someone — possibly you — needs to know whether what landed is what was intended, and the only surviving evidence is the outcome itself.
An outcome cannot be compared against an intention that was never written down. It can only be rationalised.
There is a second thing this layer protects, and it is the more valuable one. The record is the only place a rejected path and the reason for rejecting it can survive. Results are saved, sent and filed; the option you deliberately did not take exists in exactly one head, and no output format has a field for it. That is the knowledge a restart destroys and a summary rarely keeps — and the knowledge that removing this record destroys too, if it was not carried out first. Point 6 below is that step.
The goal, in one sentence, written before the first commit
A running commentary written as you go
The steps to completion, as a checklist
A retelling of what happened, written afterwards
The rejected options, with a checkable reason
A verdict — "wasn't a good idea" cannot be re-evaluated
Claims pinned to a commit and a date
Present-tense claims about compliance
The open decisions, as checkboxes, so the next person sees what is waiting on a human
Anything that would not survive being read by a stranger
"Rejected, because" is the highest-value line in the file — and only if the reason is checkable rather than a judgement. "The export has no change date" stays true and can be re-tested; "wasn't a good idea" cannot be re-evaluated by anyone, including its author.
The non-software forms are familiar and usually thinner than they should be: the decision log after a meeting, the brief written before a project rather than the report written after it, the note that says which supplier was not chosen and why. All of them fail in the same place — they record the outcome, which was visible anyway, and not the intention or the rejected option, which was not.
One record per unit of work — a branch, a task, a session. Not one per project; a record that covers everything is consulted for nothing.
Create it before the first commit. After the fact you can only record the outcome, and the outcome is the one thing that is already visible. The intention is what needs preserving, and it degrades within hours.
State the goal so that it could be wrong."Improve the docs" cannot be checked. "Every changed article has its mirror updated in the same commit" can.
Pin every claim to a commit and a date. This is the technique that turns an advisory rule into something auditable without making it enforced: "as of commit abc1234, the branch had no upstream" stays checkable forever by anyone with the repository. A present-tense claim about compliance expires the moment the state changes; a dated one becomes a record. The introduction↗ walks through a worked instance of exactly this.
Keep the open decisions as checkboxes, and tick them when they are resolved rather than deleting them. A resolved decision that is still visible is how the next person learns that the question was asked.
Carry the reasoning out, then remove it. A per-work record is removed when the work lands: a charter that outlives its branch becomes noise, and noise is how a record stops being read. But the rejected paths and their checkable reasons are what this page calls the layer's most valuable content, and deleting the charter deletes them with it. So the last step before removal is to copy them into the durable decision record — which is a layer-4 artefact in its own right, and is not removed. Deletion without that step destroys precisely the knowledge the layer exists to preserve.
It controls nothing. It stops nothing, blocks nothing, and its absence causes no failure at the time. Everything it is worth is retrospective, which is precisely why it is the first thing dropped and the last thing missed.
It also cannot make an advisory rule enforced. It makes it auditable — a different and smaller claim, but the only one available when a rule is genuinely unmechanisable. "Never invent knowledge" cannot be checked by a program. Whether the person who wrote it said in advance what they intended to verify, and whether they did, can be.
It exists before the first commit of the work it describes
The goal is stated so that it could be shown to be wrong
Compliance claims are pinned to a commit and a date, not to the present tense
Rejected options carry a checkable reason
Open decisions are checkboxes, and resolved ones stay visible
Its removal is part of the cleanup, not a separate act of tidiness — and the rejected paths were carried into the durable decision record before it went
A stranger could compare the outcome against it without asking a question
Wer. Eine Analystin, die mit einem Agenten drei Lösungswege durchgespielt hat. Die Aufgabe. Einen davon empfehlen. Was schiefgeht. Sechs Wochen später schlägt jemand genau den Weg vor, den sie damals verworfen hatte — gut begründet, und deshalb prüft sie ihn ein zweites Mal. Der Grund fürs Verwerfen existierte nur in ihrem Kopf. Das Ergebnis wurde gespeichert, die verworfene Option nicht. Was du baust. Eine Notiz, die vorher entsteht: das Ziel in einem Satz, der auch falsch sein könnte — und darunter „verworfen, weil …" mit einem nachprüfbaren Grund. „Das Formular lässt keine zwei Kontakte zu" bleibt prüfbar. „War keine gute Idee" nicht.
Bei der nächsten Aufgabe: drei Zeilen, bevor du anfängst. Ziel · Schritte · was du bewusst nicht machst. Wer hinterher schreibt, hält nur das Ergebnis fest — und das war ohnehin sichtbar.
Ein Nachweis dessen, was hätte passieren sollen, vor der Arbeit geschrieben, an dem sich das Ergebnis hinterher von jemandem prüfen lässt, der nicht dabei war.
Ein Branch-Charter. Eine Übergabenotiz. Ein Entscheidungseintrag mit seiner Begründung. Das Format zählt weit weniger als zwei Eigenschaften: er entsteht vorher, und er ist konkret genug, um falsch sein zu können.
Hier leben zwei Arten von Artefakt, und ihre Lebensdauern sind entgegengesetzt. Ein Nachweis pro Arbeitseinheit — ein Charter für einen Branch, eine Notiz zu einer Aufgabe — gilt nur, solange diese Arbeit läuft, und wird zu Rauschen, sobald sie gelandet ist; er wird am Ende entfernt. Ein Entscheidungsnachweis ist dauerhaft: Er entsteht, um später von jemandem gelesen zu werden, der nicht dabei war, und er wird nicht entfernt. Keines von beiden ist ein wiederverwendbares Asset — ein Ritual, ein Skill, alles, was geschrieben wurde, um wiedergefunden zu werden —; das gehört zu Schicht 5 und wird dort ausgemustert statt gelöscht. „Ihn entfernen, wenn die Arbeit fertig ist" weiter unten meint das erste der drei und sonst nichts.
Das ist die Schicht, die übersprungen wird, weil sie als einzige im Moment des Schreibens nichts produziert.
Dass hinterher niemand prüfen kann, was passieren sollte. Alle anderen Schichten adressieren die Arbeit im Fluss. Diese adressiert die weit häufigere Lage: eine Woche später muss jemand — womöglich man selbst — wissen, ob das Gelandete das Gemeinte ist, und das einzige überlebende Zeugnis ist das Ergebnis selbst.
Ein Ergebnis lässt sich nicht gegen eine Absicht halten, die nie aufgeschrieben wurde. Es lässt sich nur rationalisieren.
Es gibt noch etwas, das diese Schicht schützt, und es ist das Wertvollere. Der Nachweis ist der einzige Ort, an dem ein verworfener Weg samt Grund für das Verwerfen überleben kann. Ergebnisse werden gespeichert, verschickt, abgelegt; die Option, die man bewusst nicht genommen hat, existiert in genau einem Kopf, und kein Ausgabeformat hat ein Feld dafür. Genau dieses Wissen zerstört ein Neustart und bewahrt eine Zusammenfassung selten — und genau dieses Wissen zerstört auch das Entfernen des Nachweises, wenn es nicht vorher herausgetragen wurde. Punkt 6 weiter unten ist dieser Schritt.
Das Ziel, in einem Satz, vor dem ersten Commit geschrieben
Ein laufender Kommentar, nebenher geschrieben
Die Schritte bis zur Fertigstellung als Checkliste
Eine Nacherzählung, hinterher geschrieben
Die verworfenen Optionen mit einem prüfbaren Grund
Ein Urteil — „war keine gute Idee" lässt sich nicht neu bewerten
Aussagen, an Commit und Datum geheftet
Aussagen über Einhaltung im Präsens
Die offenen Entscheidungen als Checkboxen, damit die nächste Person sieht, was auf einen Menschen wartet
Alles, was das Gelesenwerden durch Fremde nicht überstünde
„Verworfen, weil" ist die wertvollste Zeile der Datei — und nur dann, wenn der Grund prüfbar ist statt ein Urteil. „Das Formular lässt keine zwei Kontakte zu" bleibt wahr und lässt sich nachprüfen; „war keine gute Idee" kann niemand neu bewerten, auch der Verfasser nicht.
Die Formen ausserhalb der Software sind vertraut und meist dünner, als sie sein sollten: das Entscheidungsprotokoll nach einer Besprechung, das Briefing vor einem Projekt statt des Berichts danach, die Notiz, welcher Lieferant nicht genommen wurde und warum. Alle scheitern an derselben Stelle — sie halten das Ergebnis fest, das ohnehin sichtbar war, und nicht die Absicht oder die verworfene Option, die es nicht war.
Ein Nachweis pro Arbeitseinheit — ein Branch, eine Aufgabe, eine Session. Nicht einer pro Projekt; ein Nachweis, der alles abdeckt, wird für nichts konsultiert.
Vor dem ersten Commit anlegen. Hinterher lässt sich nur das Ergebnis festhalten, und das Ergebnis ist das Einzige, was ohnehin sichtbar ist. Bewahrt werden muss die Absicht, und die verfällt innerhalb von Stunden.
Das Ziel so formulieren, dass es falsch sein könnte. „Die Doku verbessern" lässt sich nicht prüfen. „Jeder geänderte Artikel hat seine Spiegelung im selben Commit" schon.
Jede Aussage an Commit und Datum heften. Das ist die Technik, die eine advisorische Regel auditierbar macht, ohne sie zu erzwingen: „Stand Commit abc1234 hatte der Branch kein Upstream" bleibt für jeden mit dem Repository dauerhaft prüfbar. Eine Aussage über Einhaltung im Präsens verfällt in dem Moment, in dem der Zustand sich ändert; eine datierte wird zum Nachweis. Die Einführung↗ geht ein Beispiel genau dafür durch.
Offene Entscheidungen als Checkboxen führen und sie abhaken statt löschen, wenn sie gelöst sind. Eine gelöste Entscheidung, die sichtbar bleibt, ist die Art, wie die nächste Person erfährt, dass die Frage gestellt wurde.
Die Begründung heraustragen, dann entfernen. Ein Nachweis pro Arbeitseinheit wird entfernt, wenn die Arbeit gelandet ist: Ein Charter, der seinen Branch überlebt, wird Rauschen — und Rauschen ist der Weg, auf dem ein Nachweis aufhört, gelesen zu werden. Aber die verworfenen Wege samt ihren prüfbaren Gründen sind das, was diese Seite den wertvollsten Inhalt der Schicht nennt, und das Löschen des Charters löscht sie mit. Der letzte Schritt vor dem Entfernen ist deshalb, sie in den dauerhaften Entscheidungsnachweis zu übertragen — der selbst ein Artefakt der Schicht 4 ist und nicht entfernt wird. Ein Entfernen ohne diesen Schritt zerstört genau das Wissen, für dessen Bewahrung es die Schicht gibt.
Er kontrolliert nichts. Er verhindert nichts, blockiert nichts, und sein Fehlen verursacht zum Zeitpunkt nichts. Alles, was er wert ist, ist rückblickend — genau deshalb wird er als Erstes weggelassen und als Letztes vermisst.
Er kann auch keine advisorische Regel erzwungen machen. Er macht sie auditierbar — eine andere und kleinere Behauptung, aber die einzige verfügbare, wenn eine Regel wirklich nicht mechanisierbar ist. „Erfinde kein Wissen" kann kein Programm prüfen. Ob die Person, die das schrieb, vorher gesagt hat, was sie zu prüfen gedachte, und ob sie es tat, schon.
Er existiert vor dem ersten Commit der Arbeit, die er beschreibt
Das Ziel ist so formuliert, dass es sich als falsch zeigen liesse
Einhaltungsaussagen sind an Commit und Datum geheftet, nicht ans Präsens
Verworfene Optionen tragen einen prüfbaren Grund
Offene Entscheidungen sind Checkboxen, und gelöste bleiben sichtbar
Sein Entfernen ist Teil des Aufräumens, kein separater Akt der Ordentlichkeit — und die verworfenen Wege wurden vorher in den dauerhaften Entscheidungsnachweis übertragen
Eine fremde Person könnte das Ergebnis ohne Rückfrage dagegen halten
Ai. Một analyst đã cùng một agent làm việc qua ba phương án. Công việc. Đề xuất chọn một trong số đó. Điều gì hỏng. Sáu tuần sau, có người đề xuất đúng cái phương án mà cô đã loại — lập luận chặt chẽ, nên cô phải kiểm tra lại nó lần thứ hai. Lý do loại nó chỉ tồn tại trong đầu cô. Kết quả thì đã được lưu; phương án bị loại thì không. Bạn xây gì. Một ghi chú được viết từ trước: mục tiêu trong một câu mà cũng có thể sai — và bên dưới là "bị loại, vì …" với một lý do kiểm chứng được. "Biểu mẫu không cho phép hai người liên hệ" thì vẫn kiểm chứng được. "Không phải ý hay" thì không.
Ở công việc tiếp theo: ba dòng trước khi bắt đầu. Mục tiêu · các bước · những gì bạn cố ý không làm. Viết nó sau khi xong thì bạn chỉ ghi lại kết quả — thứ mà đằng nào cũng nhìn thấy được.
Một bản ghi về điều lẽ ra phải xảy ra, được viết trước khi làm việc, để về sau kết quả có thể được đối chiếu với nó bởi một người không có mặt lúc đó.
Một hiến chương cho branch. Một ghi chú bàn giao. Một mục ghi quyết định kèm lập luận của nó. Định dạng ít quan trọng hơn nhiều so với hai tính chất: nó được viết từ trước, và nó cụ thể đủ để có thể sai.
Có hai loại artefact sống ở đây, và vòng đời của chúng ngược nhau. Một bản ghi cho từng đơn vị công việc — một hiến chương cho một branch, một ghi chú cho một task — chỉ đúng trong lúc công việc đó còn đang chạy, và trở thành nhiễu một khi nó đã hạ cánh; nó được gỡ bỏ ở cuối. Một bản ghi quyết định thì bền: nó được viết để về sau một người không có mặt lúc đó đọc, và nó không bị gỡ bỏ. Cả hai đều không phải là một tài sản dùng lại được — một nghi thức, một skill, bất cứ thứ gì được viết ra để rồi được tìm lại — thứ đó thuộc về lớp 5 và ở đó nó được cho về hưu chứ không bị xóa. "Gỡ bỏ nó khi công việc đã xong", ở dưới, chỉ nói về loại thứ nhất trong ba loại và không nói gì khác.
Đây là lớp mà người ta hay bỏ qua, vì nó là lớp duy nhất chẳng tạo ra gì ngay tại thời điểm viết nó.
Rằng về sau không ai kiểm tra được điều lẽ ra phải xảy ra là gì. Mọi lớp khác đều nhắm vào công việc đang diễn ra. Lớp này nhắm vào tình huống phổ biến hơn nhiều: một tuần sau, ai đó — có thể chính là bạn — cần biết thứ đã hạ cánh có đúng là thứ đã được dự định hay không, và bằng chứng duy nhất còn sót lại chính là bản thân kết quả.
Không thể đối chiếu một kết quả với một ý định chưa từng được viết ra. Nó chỉ có thể được hợp lý hóa.
Có một thứ thứ hai mà lớp này bảo vệ, và nó mới là thứ giá trị hơn. Bản ghi là nơi duy nhất mà một con đường bị loại và lý do loại nó có thể sống sót. Kết quả thì được lưu, được gửi đi và được lưu hồ sơ; phương án mà bạn cố ý không chọn chỉ tồn tại trong đúng một cái đầu, và không có định dạng đầu ra nào có một ô dành cho nó. Đó là tri thức mà một lần khởi động lại sẽ hủy đi và một bản tóm tắt hiếm khi giữ lại — và cũng là tri thức mà việc gỡ bỏ bản ghi này sẽ hủy theo, nếu nó không được mang ra ngoài trước. Điểm 6 ở dưới chính là bước đó.
Mục tiêu, trong một câu, viết trước commit đầu tiên
Một lời bình luận chạy dọc, viết dần trong lúc làm
Các bước để hoàn tất, dưới dạng một checklist
Một bản kể lại chuyện đã xảy ra, viết sau khi xong
Các phương án bị loại, kèm một lý do kiểm chứng được
Một phán quyết — "không phải ý hay" thì không đánh giá lại được
Các khẳng định được neo vào một commit và một ngày
Các khẳng định ở thì hiện tại về việc tuân thủ
Các quyết định còn mở, dưới dạng checkbox, để người tiếp theo thấy cái gì đang chờ một con người
Bất cứ thứ gì không chịu nổi việc bị một người lạ đọc
"Bị loại, vì" là dòng có giá trị cao nhất trong tệp — và chỉ khi lý do là thứ kiểm chứng được chứ không phải một phán đoán. "Bản xuất dữ liệu không có ngày thay đổi" thì vẫn đúng và có thể kiểm lại; "không phải ý hay" thì không ai đánh giá lại được, kể cả tác giả của nó.
Các dạng ngoài phần mềm thì quen thuộc và thường mỏng hơn mức đáng có: sổ ghi quyết định sau một cuộc họp, bản brief viết trước một dự án chứ không phải bản báo cáo viết sau nó, tờ ghi chú nói nhà cung cấp nào đã không được chọn và vì sao. Tất cả chúng đều hỏng ở cùng một chỗ — chúng ghi lại kết quả, thứ đằng nào cũng nhìn thấy được, chứ không ghi ý định hay phương án bị loại, những thứ vốn không nhìn thấy được.
Một bản ghi cho mỗi đơn vị công việc — một branch, một task, một phiên làm việc. Không phải một bản cho mỗi dự án; một bản ghi bao trùm mọi thứ thì chẳng được tra cứu vì chuyện gì cả.
Tạo nó trước commit đầu tiên. Làm sau thì bạn chỉ ghi lại được kết quả, mà kết quả lại chính là thứ duy nhất vốn đã nhìn thấy được. Ý định mới là thứ cần được giữ lại, và nó phai đi trong vòng vài giờ.
Phát biểu mục tiêu sao cho nó có thể sai."Cải thiện tài liệu" thì không kiểm được. "Mọi bài viết bị thay đổi đều có bản mirror của nó được cập nhật trong cùng một commit" thì kiểm được.
Neo mọi khẳng định vào một commit và một ngày. Đây là kỹ thuật biến một quy tắc khuyến nghị thành một thứ kiểm toán được mà không cần cưỡng chế nó: "tính đến commit abc1234, branch này chưa có upstream" thì mãi mãi vẫn kiểm chứng được bởi bất kỳ ai có repository. Một khẳng định ở thì hiện tại về việc tuân thủ sẽ hết hạn ngay khoảnh khắc trạng thái thay đổi; một khẳng định có ngày tháng thì trở thành một bản ghi. Phần giới thiệu↗ đi qua một trường hợp cụ thể đúng về chuyện này.
Giữ các quyết định còn mở dưới dạng checkbox, và tích vào chúng khi chúng được giải quyết thay vì xóa đi. Một quyết định đã được giải quyết mà vẫn còn nhìn thấy được chính là cách người tiếp theo biết rằng câu hỏi đó đã từng được đặt ra.
Mang phần lập luận ra ngoài trước, rồi mới gỡ bỏ nó. Một bản ghi cho từng đơn vị công việc được gỡ bỏ khi công việc hạ cánh: một hiến chương sống lâu hơn branch của nó thì trở thành nhiễu, và nhiễu chính là cách một bản ghi thôi được đọc. Nhưng các con đường bị loại cùng những lý do kiểm chứng được của chúng lại chính là thứ mà trang này gọi là nội dung giá trị nhất của lớp, và xóa hiến chương là xóa chúng theo. Vì vậy bước cuối cùng trước khi gỡ bỏ là chép chúng vào bản ghi quyết định bền vững — thứ tự nó cũng là một artefact của lớp 4, và không bị gỡ bỏ. Xóa mà bỏ qua bước đó thì hủy đúng cái tri thức mà lớp này tồn tại để bảo tồn.
Nó không kiểm soát gì cả. Nó không dừng gì, không chặn gì, và sự vắng mặt của nó không gây ra thất bại nào tại thời điểm đó. Toàn bộ giá trị của nó là hồi cố, và đó chính xác là lý do nó là thứ bị bỏ đi đầu tiên và là thứ được nhớ đến sau cùng.
Nó cũng không thể biến một quy tắc khuyến nghị thành một quy tắc được cưỡng chế. Nó làm cho quy tắc đó kiểm toán được — một tuyên bố khác và nhỏ hơn, nhưng là tuyên bố duy nhất còn khả dụng khi một quy tắc thực sự không cơ giới hóa được. "Không bao giờ bịa ra tri thức" thì một chương trình không kiểm được. Còn việc người viết ra nó có nói trước rằng họ định kiểm chứng điều gì hay không, và họ có làm hay không, thì kiểm được.
Nó tồn tại trước commit đầu tiên của công việc mà nó mô tả
Mục tiêu được phát biểu sao cho có thể chỉ ra rằng nó sai
Các khẳng định về việc tuân thủ được neo vào một commit và một ngày, không neo vào thì hiện tại
Các phương án bị loại đều mang theo một lý do kiểm chứng được
Các quyết định còn mở là những checkbox, và những cái đã giải quyết vẫn còn nhìn thấy được
Việc gỡ bỏ nó là một phần của việc dọn dẹp, không phải một hành động gọn gàng riêng lẻ — và các con đường bị loại đã được mang vào bản ghi quyết định bền vững trước khi nó biến mất
Một người lạ có thể đối chiếu kết quả với nó mà không cần hỏi câu nào
Who. Somebody who has accumulated prompts and procedures over months. The job. Find the procedure that worked last time. What goes wrong. There are three versions, all of them plausible, none of them dated. So you write a fourth. Next time there are five. What you build. One place where everything lives, and one command that searches it — including what you set aside. Because that is exactly what gets rebuilt next.
The maintenance layer. It owns no artefact of its own; it keeps the other four honest as the collection grows past the point where one person remembers all of it.
What it governs is the reusable asset — a ritual, a skill, a template, a shared rule: anything written to be found again. The per-work record, which is meant to stop existing once its work has landed, is layer 4's business and takes the opposite instruction there. Nothing on this page applies to it.
It is the layer that is never finished, and the only one whose absence is invisible for a long time and then all at once.
Two failures, and they are the same failure seen from opposite ends.
The skill nobody invokes. A collection grows a long tail of files that never fire. Each one cost a day to write, costs context to keep, and returns nothing. Crucially you cannot tell from the file whether it never fires because it is badly described, because it was never needed, or because it never reached the agent at all — the listing that carries the descriptions is budgeted, and drops the least-used ones first. Those demand different fixes, and one of them is not a fix to the file.
The same rule stated twice. Two documents that were both correct on the day they were written, drifting apart ever since. The session that reads them has to guess which is current, and a guess that goes wrong here is expensive precisely because both sources look authoritative.
A measurement on the collection this series comes from. Of 60 written rituals, 24 had ever been invoked and 36 not once — by full-text search across 2,686 session transcripts, taken on 2026-09-03, on one machine and in one working style.
The figure is a lower bound, from two directions: a full-text search sees only what is in the corpus, and only what appears there as text. A ritual used before the corpus began, or whose invocation left no searchable trace, counts as never invoked. So the true share of silent files is at most the measured one — probably lower, and still more than half.
The 36 were then retired rather than deleted. That is the point at which this layer actually ran instead of merely being documented — and also the point at which it fails the standard this series sets elsewhere. Layer 2 requires that whatever verifies must itself be run by something automatic, and calls the alternative "documentation with an exit code". This count was run once, by hand, because somebody thought to run it. By that standard it does not qualify: nothing would notice if it were never run again, and the number above is already ageing.
The named next step that would fix it: emit the invocation count from the same command that generates the index, run that command on a schedule, and let it fail when the index is older than the collection it describes. It does not exist. Until it does, this layer is written up here at a level it has not reached in practice — measured once, acted on once, and wired to nothing that will do either again. The appendix's second diagnostic asks whether the loop is closed. For this layer, on this collection, the honest answer today is no.
Every organisation has already met this layer's failure and usually lost to it: the shared drive nobody can search, the template library with three versions of the same template and no way to tell which is current, the policy that exists twice because the second author could not find the first. Agents change the stakes rather than the problem — a person who cannot find the right template asks a colleague, and an agent confidently uses the wrong one.
Make the search one command, and make it cover the archive. The index must include what has been retired, because the most likely thing to be rebuilt is exactly what was recently tidied out of sight. An asset invisible to search does not exist, and a search that only covers the active set will confidently report that nothing matches.
Search before writing — from disk, not from memory. This is the rule that has to be mechanical, because the failure mode is a feeling of confidence. Quote the search output in the justification for a new asset; if you cannot quote it, you did not run it.
Prefer extending to creating. Two assets that overlap by 80% are worse than one with a second mode: they drift, and every session has to work out which is current. If the new job is a variation of an existing one, it belongs inside that one.
One canonical statement per shared rule; reference it, never copy it. A copy is a future contradiction with a date on it. When several assets need the same rule, that rule gets its own file and everything else points at it.
Retire rather than delete — a reusable asset, that is; a charter for a finished branch is removed instead, as its own page says. An archived asset that is one command from returning costs almost nothing and removes the pressure to keep marginal things active. Deletion, being irreversible, makes people keep everything instead.
Look at invocation, if you can see it. An asset that has never fired is a question, not a verdict: rewrite the description first, and only retire it if it still never fires.
It cannot tell you why a skill never fired. The index knows what exists and, at best, what ran. The distinction that actually matters — mis-described, unnecessary, or never listed in the first place — is not in the data, and guessing wrong costs you either a good asset or a wasted rewrite. See what we checked in layer 3 for the third case, which is the one nothing in the file can show you.
Nor can it prevent duplication on its own. It makes duplication findable. Somebody still has to look, and that discipline is the part no mechanism supplies.
Wer. Jemand, der sich über Monate Prompts und Abläufe angesammelt hat. Die Aufgabe. Den Ablauf wiederfinden, der letztes Mal funktioniert hat. Was schiefgeht. Es gibt drei Fassungen, alle sehen plausibel aus, und keine trägt ein Datum. Also schreibt man eine vierte. Beim nächsten Mal sind es fünf. Was du baust. Einen Ort, an dem alles liegt, und einen Befehl, der ihn durchsucht — auch das, was du aussortiert hast. Denn genau das wird sonst als Nächstes neu gebaut.
Such einmal, bevor du das nächste Mal etwas Neues schreibst — auf der Platte, nicht im Kopf. Wer das Suchergebnis nicht zitieren kann, hat nicht gesucht.
Die Pflegeschicht. Sie besitzt kein eigenes Artefakt; sie hält die anderen vier ehrlich, während die Sammlung über den Punkt hinauswächst, an dem eine Person sie noch ganz erinnert.
Was sie regiert, ist das wiederverwendbare Asset — ein Ritual, ein Skill, eine Vorlage, eine geteilte Regel: alles, was geschrieben wurde, um wiedergefunden zu werden. Der Nachweis pro Arbeitseinheit, der aufhören soll zu existieren, sobald seine Arbeit gelandet ist, ist Sache von Schicht 4 und bekommt dort die entgegengesetzte Anweisung. Nichts auf dieser Seite gilt für ihn.
Sie ist die Schicht, die nie fertig wird, und die einzige, deren Fehlen lange unsichtbar bleibt und dann auf einmal nicht mehr.
Zwei Fehler, und es ist derselbe Fehler von entgegengesetzten Enden aus gesehen.
Der Skill, den niemand aufruft. Eine Sammlung bildet einen langen Schwanz von Dateien, die nie feuern. Jede hat einen Tag im Schreiben gekostet, kostet Kontext im Behalten und liefert nichts. Entscheidend: der Datei sieht man nicht an, ob sie nie feuert, weil sie schlecht beschrieben ist, weil sie nie gebraucht wurde, oder weil sie den Agenten gar nicht erst erreicht hat — die Auflistung, die die Beschreibungen trägt, hat ein Budget und lässt die am wenigsten genutzten zuerst fallen. Das verlangt verschiedene Abhilfen, und eine davon ist keine Abhilfe an der Datei.
Dieselbe Regel zweimal formuliert. Zwei Dokumente, beide korrekt am Tag ihrer Entstehung, seither auseinanderdriftend. Die Session, die sie liest, muss raten, welches aktuell ist, und ein falscher Rat ist hier gerade deshalb teuer, weil beide Quellen massgeblich aussehen.
Eine Messung an der Sammlung, aus der diese Reihe stammt. Von 60 geschriebenen Ritualen waren 24 je aufgerufen worden und 36 kein einziges Mal — per Volltextsuche über 2.686 Sitzungsprotokolle, erhoben am 2026-09-03, auf einer Maschine und in einem Arbeitsstil.
Die Zahl ist eine Untergrenze, und das aus zwei Richtungen: eine Volltextsuche sieht nur, was im Korpus steht, und nur, was dort als Text auftaucht. Ein Ritual, das vor Beginn des Korpus benutzt wurde oder dessen Aufruf keine durchsuchbare Spur hinterliess, zählt als nie aufgerufen. Der wahre Anteil der stillen Dateien ist also höchstens so hoch wie gemessen — vermutlich niedriger, und trotzdem betrifft er mehr als die Hälfte.
Die 36 wurden daraufhin ausgemustert statt gelöscht. Das ist der Punkt, an dem diese Schicht einmal tatsächlich gelaufen ist statt bloss dokumentiert zu sein — und zugleich der Punkt, an dem sie an dem Massstab scheitert, den diese Reihe an anderer Stelle setzt. Schicht 2 verlangt, dass alles, was prüft, selbst von etwas Automatischem ausgeführt werden muss, und nennt die Alternative „Dokumentation mit einem Exit-Code". Diese Zählung lief einmal, von Hand, weil jemand daran dachte. An diesem Massstab gemessen genügt sie nicht: Nichts würde bemerken, wenn sie nie wieder liefe, und die Zahl oben altert bereits.
Der benannte nächste Schritt, der das beheben würde: die Aufrufzählung aus demselben Befehl ausgeben, der den Index generiert, diesen Befehl nach Zeitplan laufen lassen und ihn scheitern lassen, wenn der Index älter ist als die Sammlung, die er beschreibt. Er existiert nicht. Bis er existiert, ist diese Schicht hier auf einem Niveau beschrieben, das sie in der Praxis nicht erreicht hat — einmal gemessen, einmal danach gehandelt, und an nichts angeschlossen, das eines von beidem wiederholen wird. Die zweite Diagnose des Anhangs fragt, ob der Kreis geschlossen ist. Für diese Schicht, auf dieser Sammlung, lautet die ehrliche Antwort heute: nein.
Jede Organisation ist dem Versagen dieser Schicht schon begegnet und hat meist verloren: das Netzlaufwerk, das niemand durchsuchen kann; die Vorlagensammlung mit drei Fassungen derselben Vorlage und ohne Hinweis, welche gilt; die Richtlinie, die es zweimal gibt, weil die zweite Autorin die erste nicht fand. Agenten ändern nicht das Problem, sondern den Einsatz — ein Mensch, der die richtige Vorlage nicht findet, fragt jemanden; ein Agent nimmt selbstbewusst die falsche.
Die Suche zu einem Befehl machen — und das Archiv einschliessen. Der Index muss enthalten, was ausgemustert wurde, denn am wahrscheinlichsten neu gebaut wird genau das, was gerade aus dem Blickfeld aufgeräumt wurde. Ein für die Suche unsichtbares Asset existiert nicht, und eine Suche, die nur den aktiven Bestand abdeckt, meldet selbstbewusst, dass nichts passt.
Vor dem Schreiben suchen — von der Platte, nicht aus dem Gedächtnis. Diese Regel muss mechanisch sein, weil der Versagensmodus ein Gefühl von Sicherheit ist. Die Suchausgabe in der Begründung für ein neues Asset zitieren; wer sie nicht zitieren kann, hat sie nicht ausgeführt.
Erweitern schlägt Erzeugen. Zwei Assets mit 80 % Überlappung sind schlechter als eines mit einem zweiten Modus: sie driften, und jede Session muss herausfinden, welches aktuell ist. Ist die neue Aufgabe eine Variante einer bestehenden, gehört sie in jene hinein.
Eine kanonische Formulierung pro geteilter Regel; referenzieren, nie kopieren. Eine Kopie ist ein künftiger Widerspruch mit Datum. Brauchen mehrere Assets dieselbe Regel, bekommt die Regel eine eigene Datei, und alles andere zeigt darauf.
Ausmustern statt löschen — beim wiederverwendbaren Asset, wohlgemerkt; ein Charter für einen fertigen Branch wird stattdessen entfernt, wie seine eigene Seite sagt. Ein archiviertes Asset, das einen Befehl von der Rückkehr entfernt ist, kostet fast nichts und nimmt den Druck, Grenzwertiges aktiv zu halten. Löschen, weil unumkehrbar, führt dazu, dass stattdessen alles behalten wird.
Auf Aufrufe schauen, wenn man sie sehen kann. Ein Asset, das nie gefeuert hat, ist eine Frage, kein Urteil: zuerst die Beschreibung neu schreiben, und erst ausmustern, wenn es dann immer noch nie feuert.
Sie kann nicht sagen, warum ein Skill nie ausgelöst hat. Der Index weiss, was existiert, und bestenfalls, was lief. Die Unterscheidung, auf die es ankommt — schlecht beschrieben, überflüssig, oder überhaupt nie aufgelistet — steht nicht in den Daten, und falsch zu raten kostet entweder ein gutes Asset oder eine vergebliche Überarbeitung. Zum dritten Fall, den die Datei selbst niemals zeigen kann, siehe was wir geprüft haben in Schicht 3.
Ebenso wenig kann sie Duplikation allein verhindern. Sie macht Duplikation auffindbar. Nachsehen muss jemand, und diese Disziplin ist der Teil, den kein Mechanismus liefert.
Ai. Một người đã tích luỹ prompt và quy trình suốt nhiều tháng. Công việc. Tìm lại quy trình đã chạy được lần trước. Chỗ hỏng. Có ba phiên bản, cả ba đều hợp lý, không phiên bản nào có ngày tháng. Thế là bạn viết phiên bản thứ tư. Lần sau sẽ có năm. Bạn xây gì. Một chỗ duy nhất chứa tất cả, và một câu lệnh duy nhất tìm kiếm trong đó — kể cả những thứ bạn đã cất sang một bên. Bởi đó chính xác là thứ sẽ bị xây lại lần tới.
Hãy tìm kiếm một lần trước khi viết thứ mới tiếp theo — trên đĩa, không phải từ trí nhớ. Nếu bạn không trích dẫn được kết quả tìm kiếm thì bạn đã không tìm kiếm.
Lớp bảo trì. Nó không sở hữu artefact nào của riêng nó; nó giữ cho bốn lớp kia trung thực khi bộ sưu tập lớn vượt quá điểm mà một người còn nhớ được hết.
Thứ nó quản là tài sản dùng lại được — một nghi thức, một skill, một template, một quy tắc dùng chung: bất cứ thứ gì được viết ra để tìm lại được. Bản ghi theo từng phần việc, thứ vốn được định là ngừng tồn tại khi phần việc của nó đã đáp xuống, là chuyện của lớp 4 và ở đó nó nhận chỉ dẫn ngược lại. Không điều gì trên trang này áp dụng cho nó.
Đây là lớp không bao giờ xong, và là lớp duy nhất mà sự vắng mặt của nó vô hình trong một thời gian dài rồi bỗng lộ ra tất cả cùng một lúc.
Hai thất bại, và chúng là cùng một thất bại nhìn từ hai đầu đối diện.
Cái skill không ai gọi. Một bộ sưu tập mọc ra một cái đuôi dài gồm những file không bao giờ kích hoạt. Mỗi file tốn một ngày để viết, tốn context để giữ, và không trả lại gì. Điều then chốt là bạn không thể nhìn vào file mà biết được nó không bao giờ kích hoạt vì được mô tả tệ, vì nó chưa bao giờ cần thiết, hay vì nó chưa từng đến được tay agent — danh sách mang các phần mô tả có ngân sách, và bỏ những skill ít dùng nhất trước. Những trường hợp đó đòi các cách sửa khác nhau, và một trong số đó không phải là sửa vào file.
Cùng một quy tắc được phát biểu hai lần. Hai tài liệu đều đúng vào ngày chúng được viết, rồi trôi xa nhau kể từ đó. Phiên làm việc đọc chúng phải đoán xem cái nào là hiện hành, và một cú đoán sai ở đây đắt đỏ chính vì cả hai nguồn đều trông có thẩm quyền.
Một phép đo trên chính bộ sưu tập mà loạt bài này xuất phát. Trong 60 nghi thức thành văn, 24 cái từng được gọi và 36 cái chưa một lần — theo tìm kiếm toàn văn trên 2,686 transcript phiên làm việc, thực hiện ngày 2026-09-03, trên một máy và trong một phong cách làm việc.
Con số này là một cận dưới, từ hai hướng: một tìm kiếm toàn văn chỉ thấy những gì có trong kho ngữ liệu, và chỉ thấy những gì xuất hiện ở đó dưới dạng văn bản. Một nghi thức được dùng trước khi kho ngữ liệu bắt đầu, hoặc mà lần gọi của nó không để lại dấu vết tìm được, sẽ bị tính là chưa bao giờ được gọi. Vậy nên tỷ lệ thật của những file im lặng nhiều nhất là bằng con số đo được — có lẽ thấp hơn, và vẫn hơn một nửa.
36 file đó sau đó được cho nghỉ chứ không xoá. Đó là thời điểm lớp này thực sự chạy thay vì chỉ được viết ra thành tài liệu — và cũng là thời điểm nó không đạt chuẩn mà loạt bài này đặt ra ở những chỗ khác. Lớp 2 đòi rằng thứ nào đi kiểm chứng thì bản thân nó phải được một thứ tự động chạy, và gọi phương án còn lại là "tài liệu có mã thoát". Phép đếm này được chạy một lần, bằng tay, vì có người nghĩ ra là nên chạy. Theo chuẩn đó thì nó không đủ tư cách: sẽ chẳng có gì nhận ra nếu nó không bao giờ được chạy lại, và con số ở trên thì đã đang già đi.
Bước tiếp theo được nêu tên và sẽ sửa được điều đó: cho chính câu lệnh sinh ra chỉ mục phát ra luôn số lần gọi, chạy câu lệnh đó theo lịch, và để nó fail khi chỉ mục cũ hơn bộ sưu tập mà nó mô tả. Nó không tồn tại. Chừng nào nó chưa tồn tại, lớp này ở đây được viết lên ở một mức mà trong thực tế nó chưa đạt tới — đo một lần, hành động một lần, và không được nối vào thứ gì sẽ làm lại một trong hai việc đó. Phép chẩn đoán thứ hai của phụ lục hỏi vòng lặp đã khép hay chưa. Với lớp này, trên bộ sưu tập này, câu trả lời trung thực hôm nay là chưa.
Mọi tổ chức đều đã gặp thất bại của lớp này và thường là đã thua nó: ổ đĩa chung không ai tìm được gì, thư viện template có ba phiên bản của cùng một template và không có cách nào biết cái nào là hiện hành, chính sách tồn tại hai lần vì tác giả thứ hai không tìm thấy bản của tác giả thứ nhất. Agent làm thay đổi mức độ rủi ro chứ không thay đổi vấn đề — một người không tìm được template đúng thì đi hỏi đồng nghiệp, còn một agent thì tự tin dùng nhầm cái sai.
Biến việc tìm kiếm thành một câu lệnh duy nhất, và cho nó phủ luôn kho lưu trữ. Chỉ mục phải bao gồm những gì đã cho nghỉ, bởi thứ dễ bị xây lại nhất chính là thứ vừa mới được dọn khỏi tầm mắt. Một tài sản mà tìm kiếm không thấy thì không tồn tại, và một tìm kiếm chỉ phủ tập đang hoạt động sẽ tự tin báo rằng không có gì khớp.
Tìm kiếm trước khi viết — từ đĩa, không phải từ trí nhớ. Đây là quy tắc bắt buộc phải mang tính máy móc, vì kiểu hỏng của nó là một cảm giác tự tin. Hãy trích dẫn kết quả tìm kiếm trong phần biện minh cho một tài sản mới; nếu bạn không trích dẫn được thì bạn đã không chạy nó.
Ưu tiên mở rộng hơn là tạo mới. Hai tài sản trùng nhau 80% thì tệ hơn một tài sản có thêm một chế độ thứ hai: chúng trôi xa nhau, và mọi phiên làm việc phải tự tìm ra cái nào là hiện hành. Nếu công việc mới là một biến thể của công việc đã có, nó thuộc về bên trong cái đã có.
Một phát biểu chuẩn duy nhất cho mỗi quy tắc dùng chung; tham chiếu tới nó, đừng bao giờ chép lại. Một bản sao là một mâu thuẫn tương lai có kèm ngày tháng. Khi nhiều tài sản cần cùng một quy tắc, quy tắc đó có file riêng của nó và mọi thứ khác trỏ về đấy.
Cho nghỉ thay vì xoá — ý là với một tài sản dùng lại được; còn một charter của nhánh đã xong thì bị gỡ đi, như trang của chính nó nói. Một tài sản đã lưu trữ mà chỉ cách một câu lệnh là quay lại được thì gần như không tốn gì và gỡ bỏ áp lực phải giữ những thứ nửa vời trong trạng thái hoạt động. Xoá, vì không đảo ngược được, khiến người ta giữ lại mọi thứ.
Hãy nhìn vào số lần gọi, nếu bạn thấy được nó. Một tài sản chưa bao giờ kích hoạt là một câu hỏi, không phải một phán quyết: viết lại phần mô tả trước đã, và chỉ cho nó nghỉ nếu nó vẫn không bao giờ kích hoạt.
Nó không nói được cho bạn vì sao một skill chưa bao giờ kích hoạt. Chỉ mục biết cái gì tồn tại và, tốt nhất, cái gì đã chạy. Sự phân biệt thực sự quan trọng — bị mô tả sai, không cần thiết, hay chưa từng được liệt kê — không nằm trong dữ liệu, và đoán sai sẽ khiến bạn mất hoặc một tài sản tốt hoặc một lần viết lại vô ích. Về trường hợp thứ ba, cái mà bản thân file không bao giờ cho bạn thấy, xem những gì chúng tôi đã kiểm tra ở lớp 3.
Nó cũng không tự mình ngăn được sự trùng lặp. Nó làm cho sự trùng lặp tìm thấy được. Vẫn phải có ai đó đi nhìn, và tính kỷ luật đó là phần mà không cơ chế nào cung cấp.
The five layers say what kinds of artefact a discipline is made of. They cannot say whether a discipline is complete. You can hold all five and still have no idea what happens when the agent does something irreversible at 18:40, who is accountable for the result, or how you would notice that the discipline had stopped working.
This page supplies the missing axis: the shape of a whole discipline, the topics it has to cover, and a test for finding your own gap. It is an appendix, not a sixth layer — it adds no artefact.
A discipline is a closed loop, not a pile of documents#
The following diagram shows how the five layers connect once they are all present. The prose below carries the same content.
Standing rules and mechanical gates both feed the named rituals, and the gates also constrain the work directly. The rituals produce the work. The work leaves written records of what was supposed to happen. The records feed measurement, which asks whether the discipline is working. Measurement feeds upkeep, and upkeep changes the standing rules and the gates, closing the loop. Separately, an integrity check asks whether the artefacts the reader is holding are the artefacts that exist, and reports into upkeep. A discipline whose loop is not closed is a pile of documents.
Figure A discipline is a closed loop, not a pile of documents
Rules and gates feed the rituals; the gates also constrain the work directly, which is the whole reason they are the layer that holds unattended. The work leaves records. The records are what measurement reads. Measurement feeds upkeep, and upkeep changes the rules and the gates — which is where the loop closes.
Most written disciplines are the left half of that picture only. They have rules, procedures and good intentions, and nothing that ever comes back and changes them. That is not a discipline; it is a pile of documents that happen to be in one folder.
Reviewing a working discipline surfaced two properties that none of the five layers can express, and both are in the loop above:
Element
The question it answers
Why no layer covers it
Integrity
Is the artefact the reader is holding the artefact that exists?
Every layer assumes its own document arrives intact. A rule that was corrected yesterday, held by a reader who loaded it last week, is not a wrong rule — it is a stale copy, and it produces confident, well-argued, wrong work
Measurement
Does the discipline work, and when do you change it?
Layers 1–5 each say what to build. None says how you would know it was worth building, or when to stop
Integrity is the one people miss. It is not "is the rule right" — a question every layer already asks — it is "is the rule in front of the reader the current one". The two failures look identical from the outside and have opposite fixes.
Ten topics. This list is not taken from a standard: as of 2026-09-03, none of the sources named below publishes one — see the next section for exactly how far that claim goes and what it rests on. It is derived from observing one working discipline, then cross-checked against what published sources do say. The last column names the cross-check, or says plainly that there is none.
#
Phase
Topic
The question it settles
Cross-checked against
1
Before the work
Delegation
Which work may be handed over at all, and at what level of independence
Parasuraman/Sheridan/Wickens's ten levels of automation (2000); the Delegation Board's seven levels
2
Before the work
Authority
What may be done without asking, and what may not
OpenAI's tool-risk rating — read-only vs write access, reversibility, required permissions, financial impact; Google's "powers must be carefully limited"
3
Before the work
Boundaries
What must never happen, whatever the instruction
EU AI Act Art. 14(4)(e) — intervene or interrupt via a stop function, to a safe state; NIST AI RMF MANAGE 2.4 — supersede, disengage, deactivate
4
During
Procedure
How a recurring job goes, the same way every time
The WHO Surgical Safety Checklist's phase boundaries; Anthropic's guidance on documenting tools with edge cases and clear boundaries
5
During
Verification
How you know it was done, and done right — and by whom
EU AI Act Art. 14(4)(b)+(c) — remain aware of automation bias, correctly interpret output
6
After
Accountability
Whose name is on the result
NIST AI RMF GOVERN 3.2 — roles and responsibilities for human-AI configurations
7
After
Handover
How work moves between sessions, agents and people without losing why
Nothing published found — search of 2026-09-03. Derived from observation only
8
When it breaks
Escalation
What happens when it goes wrong, who decides, and how fast
OpenAI's two escalation triggers — exceeding failure thresholds, and high-risk actions
9
The discipline itself
Upkeep
How the discipline itself stays true as it grows
NIST AI RMF MANAGE 4.1 — appeal and override, decommissioning, change management
10
The discipline itself
Measurement
How you know the discipline works, and when to change it
Was the weakest of the ten. Corrected 2026-09-03 — four public repositories measure exactly this; see What the public corpus shows
The phase column is the second ordering in that list: the ten topics are not spread evenly, they cluster before the work and at the end. The following diagram shows where they sit in the course of a single delegated piece of work.
Before the work sit delegation, authority and boundaries. During the work sit procedure and verification. After it sit accountability and handover. Escalation branches off from the work and from the after, when something breaks. The after feeds the discipline itself, where upkeep and measurement live, and the discipline itself feeds back into what holds before the next piece of work. The topics cluster before the work and at the end, not in the middle.
Figure Where the ten topics sit in the course of a single delegated piece of work
The thin middle is not an oversight in the list. There is least to govern during the work, because by then everything has been decided — and that is exactly why it is so easy to skip the topics before it and believe you have a discipline.
Topic 7 is marked because it is the honest gap: the one thing this list asserts on observation alone, its row carrying the date of the search that found nothing rather than a standing claim that none exists. It is in the list because a discipline without it fails in ways this series has watched happen — but a reader should know it rests on observation alone. Topic 10 was the second such gap until 2026-09-03, when reading the public corpus turned up four repositories measuring exactly it. Its row records that correction rather than quietly absorbing it.
The temptation here is to dress a derived list in the authority of a standard. Three things make that unnecessary, and one of them makes it dishonest.
The gap is documented, not merely asserted. A February 2026 preprint scores five established frameworks — Scrum, DevOps, MLOps, AI Governance and human-in-the-loop — against the operational needs of teams where agents do substantive work, and marks task delegation to AI as not addressed by three of them and only partially addressed by the other two. Its diagnosis is the sharpest sentence found in this research: "Governance defines constraints; it does not define workflows." That is exactly the distance between an AI management standard and what a team needs on Monday.
Two independent 2026 efforts are converging on the same missing vocabulary — autonomy tiers, delegation accountability, named ownership, decommissioning. That convergence is the strongest thing this page can honestly claim: not "grounded in an established standard" but "the gap is real, it is documented, and independent attempts to fill it agree on roughly these topics."
And two large standards must not be cited as if they answered this. ISO/IEC 42001 and the NIST AI Risk Management Framework are organisation-level assurance frameworks; their unit of analysis is an AI system in a risk portfolio, not a person handing over a task and taking it back. Individual NIST subcategories are quoted above because they say something precise about override, stop and role definition. The frameworks as wholes are not a topic list for a working discipline, and presenting them as one would misrepresent both.
Deliberately not cited: an internal-controls framework whose object is organisational assurance rather than delegation; a leadership model whose empirical support is weak enough that it may serve as vocabulary but not as evidence; and two 2026 documents — a draft profile and a single-author preprint that says its own empirical validation is future work — which are useful signals of convergence and are not established practice.
Ten topics down the side, five layers across the top, and in each cell the artefact that carries it. Below is the typical arrangement as a starting point — laying your own beside it is the whole test.
● carries the topic · ○ also covers it · blank — not there
Topic
1 Rules
2 Gates
3 Rituals
4 Records
5 Index, triggers, upkeep
6 Compliance
1 Delegation
●
○
2 Authority
●
○
3 Boundaries
●
●
○
4 Procedure
●
○
5 Verification
●
○
○
6 Accountability
○
●
7 Handover
○
●
8 Escalation
○
●
9 Upkeep
●
10 Measurement
○
●
The matrix answers three questions without anyone having to think:
A row with no ● is a gap. The topic has no artefact — it lives in people's heads.
A row whose only ● is in column 1 is a rule you are hoping people follow. In the typical arrangement above that is precisely delegation and authority — the two topics with the largest consequences, and the two standing on nothing but goodwill.
An empty column 5 means the discipline grows and nobody tidies.
A column with no ● at all is a column looking for its row. Column 6 is exactly that, and it is the newest thing on this page. See below.
A column naming more than its rows reach is the same fault, one size down. Column 5 is named for three things and the ten topics reach two of them: nothing down the side asks whether a file fires at the right moment. Layer 5's trigger third has no row here.
The two diagnostics worth running once a quarter:
Which topics live only in layer 1? Those are the ones that will not survive schedule pressure. That is not an argument to gate all of them — some genuinely cannot be gated — but it is the list of things you are trusting rather than enforcing, and it should be a decision rather than an accident.
Is the loop closed? If nothing you measure ever changes a rule or a gate, the right half of the diagram is decoration.
Column 6 was added on 2026-09-03 after reading ten public skill repositories (the evidence section). Three of them build something none of the five layers describes: work aimed at the gap between an instruction that is correct and an instruction that is followed under pressure. Scenario files that push an agent hard to see whether it abandons the procedure; a required table pairing each predicted excuse with its rebuttal, enforced by the repository's own linter; a body of research on the failure modes of the delegate itself.
A gate stands outside the work and refuses. This stands inside it and argues. It is not layer 1 — it is not a statement of what is true. It is not layer 2 — nothing exits non-zero. And it is not simply good writing, which is the objection to beat: good technical writing answers a question the reader asked; this answers the objection the reader has not raised, and would only raise under pressure.
The published literature agrees with the placement rather than with the promotion. A study of 238 instruction files classifies it as a missing section — not a missing artefact — and finds it absent in 94 % of them. The measurements, the three things that do not work, and the method for testing a rule are collected in appendix 0520.
And it earns no ● in any row, which is the interesting part. It also covers boundaries, procedure and verification, and it is none of them. Either the ten topics are missing a row — call it adherence — or compliance is a mode in which the other topics are pursued rather than a topic of its own. This page does not settle that, because three repositories are enough to show a thing exists and not enough to restructure a method around it. A column with no ● is a column looking for its row, and saying so is more useful than filling a cell to make the table look finished.
It cannot tell you the right level of delegation for your work. The published prior art is unanimous on one point and silent after it: the level is set per decision area, not per person and not once — and nobody has a rule for choosing it that survives contact with a specific team. The one asymmetry that recurs across sources is worth adopting anyway: promotion is slow and evidence-based; demotion is fast and available to anyone.
Nor is a complete discipline a good one. Completeness is a coverage property. Whether the rules are the right rules, and whether the whole arrangement is worth its cost, is what topic 10 is for — and topic 10 is the one with the least support behind it.
All opened 2026-09-03. The measured literature on whether a written rule is adhered to under conflict is collected in appendix 0520 rather than duplicated here — one canonical list, or the copies drift.
EU AI Act, Article 14 — Human oversight. <https://artificialintelligenceact.eu/article/14/>
NIST AI Risk Management Framework 1.0 (NIST AI 100-1, January 2023) — subcategories GOVERN 3.2, MANAGE 2.4, MANAGE 4.1. <https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.100-1.pdf>
ISO/IEC 42001:2023, clause structure from the publisher's free preview — cited here only to say what it is not about.
Anthropic, "Our framework for developing safe and trustworthy agents" (2025-08-04). <https://www.anthropic.com/news/our-framework-for-developing-safe-and-trustworthy-agents>
OpenAI, "A practical guide to building agents" — tool-risk rating and escalation triggers. <https://cdn.openai.com/business-guides-and-resources/a-practical-guide-to-building-agents.pdf>
Google, "An Introduction to Google's Approach for Secure AI Agents" (2025). <https://research.google/pubs/an-introduction-to-googles-approach-for-secure-ai-agents/>
Parasuraman, Sheridan & Wickens (2000), "A model for types and levels of human interaction with automation" — the canonical prior art for delegating to a machine, twenty-five years early.
Delegation Poker / the Delegation Board — seven levels, authority set per decision area. <https://management30.com/practice/delegation-poker/>
WHO Surgical Safety Checklist — the checkpoint-boundary pattern, with outcome data. <https://www.nejm.org/doi/full/10.1056/NEJMsa0810119>
HAIF, arXiv:2602.07641 (February 2026) — the documented coverage gap. Single-author preprint, not peer-reviewed; its own empirical validation is stated as future work. <https://arxiv.org/pdf/2602.07641>
Cloud Security Alliance, "NIST AI RMF: Agentic Profile" (draft, 2026-03-27) — a draft, authored by CSA and not endorsed by NIST. <https://labs.cloudsecurityalliance.org/agentic/agentic-nist-ai-rmf-profile-v1/>
Die fünf Schichten sagen, aus welchen Arten von Artefakt eine Disziplin besteht. Sie können nicht sagen, ob eine Disziplin vollständig ist. Man kann alle fünf haben und trotzdem nicht wissen, was passiert, wenn der Agent freitags um 18:40 etwas Unumkehrbares tut, wer für das Ergebnis geradesteht, oder woran man merken würde, dass die Disziplin aufgehört hat zu wirken.
Diese Seite liefert die fehlende Achse: die Gestalt einer ganzen Disziplin, die Themen, die sie abdecken muss, und einen Test, um die eigene Lücke zu finden. Sie ist ein Anhang, keine sechste Schicht — sie fügt kein Artefakt hinzu.
Eine Disziplin ist ein geschlossener Kreis, kein Stapel Dokumente#
Das folgende Diagramm zeigt, wie die fünf Schichten zusammenhängen, sobald sie alle da sind. Die Prosa darunter trägt denselben Inhalt.
Feste Regeln und mechanische Gates münden beide in die benannten Rituale, und die Gates begrenzen ausserdem die Arbeit direkt. Die Rituale erzeugen die Arbeit. Die Arbeit hinterlässt schriftliche Nachweise dessen, was hätte passieren sollen. Die Nachweise speisen die Messung, die fragt, ob die Disziplin wirkt. Die Messung speist die Pflege, und die Pflege verändert die festen Regeln und die Gates — damit ist der Kreis geschlossen. Getrennt davon fragt eine Integritätsprüfung, ob die Artefakte, die der Leser in der Hand hält, die Artefakte sind, die existieren, und meldet in die Pflege. Eine Disziplin, deren Kreis nicht geschlossen ist, ist ein Stapel Dokumente.
Abbildung Eine Disziplin ist ein geschlossener Kreis, kein Stapel Dokumente
Regeln und Gates münden in die Rituale; die Gates begrenzen zusätzlich die Arbeit direkt — genau deshalb sind sie die Schicht, die unbeaufsichtigt hält. Die Arbeit hinterlässt Nachweise. Die Nachweise sind das, was die Messung liest. Die Messung speist die Pflege, und die Pflege verändert Regeln und Gates — dort schliesst sich der Kreis.
Die meisten geschriebenen Disziplinen sind nur die linke Hälfte dieses Bildes. Sie haben Regeln, Abläufe und gute Absichten, und nichts, was jemals zurückkommt und sie ändert. Das ist keine Disziplin, sondern ein Stapel Dokumente, der zufällig in einem Ordner liegt.
Die zwei Elemente, die in keiner der fünf Schichten stecken#
Die Durchsicht einer arbeitenden Disziplin förderte zwei Eigenschaften zutage, die keine der fünf Schichten ausdrücken kann — beide stehen im Kreis oben:
Element
Die Frage, die es beantwortet
Warum keine Schicht es abdeckt
Integrität
Ist das Artefakt, das der Leser in der Hand hält, das Artefakt, das existiert?
Jede Schicht setzt voraus, dass ihr eigenes Dokument unversehrt ankommt. Eine gestern korrigierte Regel, gehalten von jemandem, der sie letzte Woche geladen hat, ist keine falsche Regel — sie ist eine veraltete Kopie, und sie erzeugt selbstbewusste, gut begründete, falsche Arbeit
Messung
Wirkt die Disziplin, und wann ändert man sie?
Die Schichten 1–5 sagen jeweils, was zu bauen ist. Keine sagt, woran man erkennt, dass es das wert war, oder wann man aufhört
Integrität ist das, was übersehen wird. Es ist nicht „ist die Regel richtig" — das fragt jede Schicht ohnehin — sondern „ist die Regel vor dem Leser die aktuelle". Von aussen sehen beide Fehler gleich aus und haben entgegengesetzte Abhilfen.
Zehn Themen. Diese Liste stammt nicht aus einer Norm: Stand 2026-09-03 veröffentlicht keine der unten genannten Quellen eine — der nächste Abschnitt sagt genau, wie weit diese Aussage trägt und worauf sie ruht. Sie ist aus der Beobachtung einer arbeitenden Disziplin abgeleitet und anschliessend gegen das geprüft worden, was veröffentlichte Quellen tatsächlich sagen. Die letzte Spalte nennt die Gegenprobe — oder sagt klar, dass es keine gibt.
#
Phase
Thema
Die Frage, die es klärt
Gegengeprüft an
1
Vor der Arbeit
Übergabe
Welche Arbeit darf überhaupt übergeben werden, und mit welcher Selbstständigkeit
Parasuraman/Sheridan/Wickens, zehn Automatisierungsgrade (2000); die sieben Stufen des Delegation Board
2
Vor der Arbeit
Befugnis
Was darf ohne Rückfrage getan werden, und was nicht
OpenAIs Werkzeug-Risikobewertung — nur-lesend vs. schreibend, Umkehrbarkeit, nötige Berechtigungen, finanzielle Wirkung; Googles „powers must be carefully limited"
3
Vor der Arbeit
Grenzen
Was darf nie passieren, egal welche Anweisung kommt
EU-KI-Verordnung Art. 14 Abs. 4 lit. e — eingreifen oder unterbrechen über eine Stopp-Funktion, in einen sicheren Zustand; NIST AI RMF MANAGE 2.4 — supersede, disengage, deactivate
4
Während
Ablauf
Wie ein wiederkehrender Ablauf geht, jedes Mal gleich
Die Phasengrenzen der WHO-Checkliste für sichere Chirurgie; Anthropics Hinweis, Werkzeuge mit Randfällen und klaren Abgrenzungen zu dokumentieren
5
Während
Prüfung
Woher man weiss, dass es getan wurde und richtig getan — und durch wen
EU-KI-Verordnung Art. 14 Abs. 4 lit. b und c — Automatisierungsverzerrung bewusst bleiben, Ausgaben richtig interpretieren
6
Danach
Verantwortung
Wessen Name unter dem Ergebnis steht
NIST AI RMF GOVERN 3.2 — Rollen und Verantwortlichkeiten für Mensch-KI-Konfigurationen
7
Danach
Übergang
Wie Arbeit zwischen Sessions, Agenten und Menschen wandert, ohne das Warum zu verlieren
Nichts Veröffentlichtes gefunden — Suche vom 2026-09-03. Allein aus Beobachtung abgeleitet
8
Wenn es bricht
Eskalation
Was passiert, wenn es schiefgeht, wer entscheidet, und wie schnell
OpenAIs zwei Eskalationsauslöser — Überschreiten von Fehlerschwellen und hochriskante Handlungen
9
Die Disziplin selbst
Pflege
Wie die Disziplin selbst wahr bleibt, während sie wächst
NIST AI RMF MANAGE 4.1 — appeal and override, decommissioning, change management
10
Die Disziplin selbst
Messung
Woher man weiss, dass die Disziplin wirkt, und wann man sie ändert
War das schwächste der zehn. Korrigiert am 2026-09-03 — vier öffentliche Repositories messen genau das; siehe Was das öffentliche Korpus zeigt
Die Phasen-Spalte ist die zweite Ordnung in dieser Liste: die zehn Themen verteilen sich nicht gleichmässig, sondern ballen sich vor der Arbeit und am Ende. Das folgende Diagramm zeigt, wo sie im Lauf einer einzelnen übergebenen Aufgabe sitzen.
Vor der Arbeit stehen Übergabe, Befugnis und Grenzen. Während der Arbeit stehen Ablauf und Prüfung. Danach stehen Verantwortung und Übergang. Aus der Arbeit und aus dem Danach zweigt die Eskalation ab, wenn etwas bricht. Das Danach speist die Disziplin selbst, wo Pflege und Messung liegen, und die Disziplin selbst wirkt auf das zurück, was vor der nächsten Arbeit gilt. Die Themen ballen sich vor der Arbeit und am Ende, nicht in der Mitte.
Abbildung Wo die zehn Themen im Lauf einer einzelnen übergebenen Aufgabe sitzen
Dass die Mitte dünn ist, ist kein Versehen der Liste. Während der Arbeit ist am wenigsten zu regeln, weil dann schon alles entschieden ist — und genau deshalb fällt es so leicht, die Themen davor zu überspringen und zu glauben, man habe eine Disziplin.
Thema 7 ist markiert, weil es die ehrliche Lücke ist: das eine Ding, das diese Liste allein aus Beobachtung behauptet — seine Zeile trägt das Datum der Suche, die nichts fand, statt der stehenden Behauptung, es gebe nichts. Es steht darin, weil eine Disziplin ohne es auf Arten scheitert, die diese Reihe hat passieren sehen — aber ein Leser soll wissen, dass es allein auf Beobachtung ruht. Thema 10 war bis zum 2026-09-03 die zweite solche Lücke; die Lektüre des öffentlichen Korpus förderte dann vier Repositories zutage, die genau das messen. Seine Zeile hält die Korrektur fest, statt sie stillschweigend zu schlucken.
Die Versuchung wäre, eine abgeleitete Liste in die Autorität einer Norm zu kleiden. Drei Dinge machen das unnötig, und eines davon macht es unredlich.
Die Lücke ist dokumentiert, nicht bloss behauptet. Ein Preprint vom Februar 2026 bewertet fünf etablierte Rahmenwerke — Scrum, DevOps, MLOps, KI-Governance und Human-in-the-Loop — gegen die operativen Bedürfnisse von Teams, in denen Agenten substanzielle Arbeit leisten, und markiert Aufgabenübergabe an KI bei dreien als nicht abgedeckt und bei den anderen beiden als nur teilweise. Seine Diagnose ist der schärfste Satz dieser Recherche: „Governance definiert Beschränkungen; sie definiert keine Arbeitsabläufe." Genau das ist die Distanz zwischen einer KI-Managementnorm und dem, was ein Team am Montag braucht.
Zwei unabhängige Anläufe von 2026 konvergieren auf dasselbe fehlende Vokabular — Autonomiestufen, Verantwortlichkeit bei der Übergabe, benannte Eigentümerschaft, Ausserbetriebnahme. Diese Konvergenz ist das Stärkste, was diese Seite redlich behaupten kann: nicht „gestützt auf eine etablierte Norm", sondern „die Lücke ist real, sie ist dokumentiert, und unabhängige Versuche, sie zu füllen, einigen sich ungefähr auf diese Themen."
Und zwei grosse Normenwerke dürfen nicht zitiert werden, als beantworteten sie das hier. ISO/IEC 42001 und das NIST AI Risk Management Framework sind Rahmenwerke der Organisationssicherung; ihre Betrachtungseinheit ist ein KI-System in einem Risikoportfolio, nicht ein Mensch, der eine Aufgabe übergibt und zurücknimmt. Einzelne NIST-Unterkategorien sind oben zitiert, weil sie etwas Präzises über Übersteuern, Stoppen und Rollendefinition sagen. Die Rahmenwerke als Ganzes sind keine Themenliste für eine arbeitende Disziplin, und sie als solche auszugeben, würde beide falsch darstellen.
Bewusst nicht zitiert: ein Rahmenwerk der internen Kontrolle, dessen Gegenstand Organisationssicherung ist und nicht Übergabe; ein Führungsmodell, dessen empirische Stützung schwach genug ist, dass es als Vokabular taugt, aber nicht als Beleg; und zwei Dokumente von 2026 — ein Entwurf und ein Einzelautoren-Preprint, das seine eigene empirische Validierung als künftige Arbeit ausweist — die nützliche Konvergenzsignale sind und keine etablierte Praxis.
Die zehn Themen an die Seite, die fünf Schichten nach oben, und in jede Zelle das Artefakt, das es trägt. Unten steht die typische Aufstellung als Ausgangspunkt — die eigene daneben zu legen ist der ganze Test.
● trägt das Thema · ○ deckt es mit ab · leer — nicht dort
Thema
1 Regeln
2 Gates
3 Rituale
4 Nachweise
5 Index, Auslöser, Pflege
6 Befolgung
1 Übergabe
●
○
2 Befugnis
●
○
3 Grenzen
●
●
○
4 Ablauf
●
○
5 Prüfung
●
○
○
6 Verantwortung
○
●
7 Übergang
○
●
8 Eskalation
○
●
9 Pflege
●
10 Messung
○
●
Die Matrix beantwortet drei Fragen, ohne dass man nachdenken muss:
Eine Zeile ohne ● ist eine Lücke. Das Thema hat kein Artefakt — es lebt in den Köpfen.
Eine Zeile, deren einziges ● in Spalte 1 steht, ist eine Regel, auf deren Befolgung man hofft. In der typischen Aufstellung oben trifft das ausgerechnet Übergabe und Befugnis — die zwei Themen mit den grössten Folgen, und die zwei, die nur advisorisch dastehen.
Eine leere Spalte 5 heisst, die Disziplin wächst und niemand räumt auf.
Eine Spalte ganz ohne ● ist eine Spalte, die ihre Zeile sucht. Spalte 6 ist genau das, und sie ist das Neueste auf dieser Seite. Siehe unten.
Eine Spalte, die mehr benennt, als ihre Zeilen erreichen, ist derselbe Fehler eine Nummer kleiner. Spalte 5 ist nach drei Dingen benannt, die zehn Themen erreichen zwei davon: nichts an der Seite fragt, ob eine Datei im richtigen Moment auslöst. Das Auslöser-Drittel von Schicht 5 hat hier keine Zeile.
Zwei Diagnosen, die einmal im Quartal lohnen:
Welche Themen liegen nur in Schicht 1? Das sind die, die Termindruck nicht überstehen. Das ist kein Argument, sie alle zu gaten — manche lassen sich wirklich nicht gaten — aber es ist die Liste dessen, worauf man vertraut statt es durchzusetzen, und das sollte eine Entscheidung sein und kein Zufall.
Ist der Kreis geschlossen? Wenn nichts, das gemessen wird, je eine Regel oder ein Gate ändert, ist die rechte Hälfte des Diagramms Dekoration.
Spalte 6 kam am 2026-09-03 dazu, nach der Lektüre von zehn öffentlichen Skill-Repositories (der Belegteil). Drei davon bauen etwas, das keine der fünf Schichten beschreibt: Arbeit, die auf den Abstand zwischen einer Anweisung zielt, die richtig ist, und einer, der unter Druck gefolgt wird. Szenariodateien, die einen Agenten hart bedrängen, um zu sehen, ob er die Prozedur fallen lässt; eine Pflichttabelle, die jede vorhergesehene Ausrede mit ihrer Widerlegung paart, durchgesetzt vom Linter des Repositories selbst; ein Bestand an Untersuchungen über die Fehlermodi des Delegierten.
Ein Gate steht außerhalb der Arbeit und verweigert. Das hier steht mittendrin und argumentiert. Es ist nicht Schicht 1 — es ist keine Aussage darüber, was wahr ist. Es ist nicht Schicht 2 — nichts endet mit einem Fehlercode. Und es ist auch nicht einfach gutes Schreiben, was der zu schlagende Einwand ist: Gute technische Dokumentation beantwortet die Frage, die der Leser gestellt hat; das hier beantwortet den Einwand, den er nicht erhoben hat und nur unter Druck erheben würde.
Die veröffentlichte Literatur stützt die Einordnung, nicht die Beförderung. Eine Untersuchung von 238 Instruktionsdateien führt es als fehlenden Abschnitt — nicht als fehlendes Artefakt — und findet es in 94 % von ihnen nicht vor. Die Messungen, die drei Dinge, die nicht funktionieren, und die Methode, eine Regel zu testen, stehen im Anhang 0520.
Und es bekommt in keiner Zeile ein ●, und das ist der interessante Teil. Es deckt Grenzen, Ablauf und Prüfung mit ab, und es ist keines davon. Entweder fehlt den zehn Themen eine Zeile — nennen wir sie Befolgung — oder Befolgung ist ein Modus, in dem die anderen Themen verfolgt werden, und kein eigenes Thema. Diese Seite entscheidet das nicht, denn drei Repositories genügen, um zu zeigen, dass es etwas gibt, und nicht, um eine Methode darum herum umzubauen. Eine Spalte ohne ● ist eine Spalte, die ihre Zeile sucht, und das zu sagen ist nützlicher, als eine Zelle zu füllen, damit die Tabelle fertig aussieht.
Sie kann nicht sagen, welcher Grad an Selbstständigkeit für die eigene Arbeit richtig ist. Die veröffentlichte Vorarbeit ist in einem Punkt einig und danach still: der Grad wird pro Entscheidungsbereich festgelegt, nicht pro Person und nicht einmalig — und niemand hat eine Regel für die Wahl, die den Kontakt mit einem konkreten Team überlebt. Die eine Asymmetrie, die quellenübergreifend wiederkehrt, lohnt trotzdem die Übernahme: Hochstufen ist langsam und belegbasiert; Herabstufen ist schnell und steht jedem offen.
Und eine vollständige Disziplin ist noch keine gute. Vollständigkeit ist eine Abdeckungseigenschaft. Ob die Regeln die richtigen sind und ob das Ganze seinen Preis wert ist, dafür ist Thema 10 da — und Thema 10 ist das mit dem schwächsten Rückhalt.
Alle geöffnet am 2026-09-03. Die gemessene Literatur dazu, ob eine geschriebene Regel unter Konflikt befolgt wird, steht gesammelt im Anhang 0520 und nicht hier noch einmal — eine kanonische Liste, sonst driften die Kopien.
NIST AI Risk Management Framework 1.0 (NIST AI 100-1, Januar 2023) — Unterkategorien GOVERN 3.2, MANAGE 2.4, MANAGE 4.1. <https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.100-1.pdf>
ISO/IEC 42001:2023, Klauselstruktur aus der kostenlosen Vorschau des Herausgebers — hier nur zitiert, um zu sagen, worum es nicht geht.
Anthropic, „Our framework for developing safe and trustworthy agents" (2025-08-04). <https://www.anthropic.com/news/our-framework-for-developing-safe-and-trustworthy-agents>
OpenAI, „A practical guide to building agents" — Werkzeug-Risikobewertung und Eskalationsauslöser. <https://cdn.openai.com/business-guides-and-resources/a-practical-guide-to-building-agents.pdf>
Google, „An Introduction to Google's Approach for Secure AI Agents" (2025). <https://research.google/pubs/an-introduction-to-googles-approach-for-secure-ai-agents/>
Parasuraman, Sheridan & Wickens (2000), „A model for types and levels of human interaction with automation" — die kanonische Vorarbeit zur Übergabe an eine Maschine, fünfundzwanzig Jahre früher.
Delegation Poker / das Delegation Board — sieben Stufen, Befugnis pro Entscheidungsbereich. <https://management30.com/practice/delegation-poker/>
WHO-Checkliste für sichere Chirurgie — das Muster der Prüfpunkt-Grenze, mit Ergebnisdaten. <https://www.nejm.org/doi/full/10.1056/NEJMsa0810119>
HAIF, arXiv:2602.07641 (Februar 2026) — die dokumentierte Abdeckungslücke. Einzelautoren-Preprint, nicht begutachtet; die eigene empirische Validierung wird als künftige Arbeit ausgewiesen. <https://arxiv.org/pdf/2602.07641>
Cloud Security Alliance, „NIST AI RMF: Agentic Profile" (Entwurf, 2026-03-27) — ein Entwurf, von der CSA verfasst und nicht von NIST bestätigt. <https://labs.cloudsecurityalliance.org/agentic/agentic-nist-ai-rmf-profile-v1/>
Năm lớp nói những loại artefact nào tạo nên một kỷ luật. Chúng không nói được một kỷ luật đã đầy đủ hay chưa. Bạn có thể có đủ cả năm mà vẫn không biết chuyện gì xảy ra khi agent làm một việc không đảo ngược được lúc 18:40, ai chịu trách nhiệm về kết quả, hay bằng cách nào bạn nhận ra rằng kỷ luật đã ngừng hoạt động.
Trang này cung cấp trục còn thiếu: hình dạng của một kỷ luật trọn vẹn, những chủ đề nó phải phủ, và một phép thử để tìm ra lỗ hổng của chính bạn. Đây là một phụ lục, không phải lớp thứ sáu — nó không thêm artefact nào.
Một kỷ luật là một vòng lặp khép kín, không phải một đống tài liệu#
Sơ đồ sau cho thấy năm lớp nối với nhau thế nào khi đã có đủ cả năm. Phần văn xuôi bên dưới mang cùng nội dung.
Quy tắc thường trực và cổng máy móc đều nuôi các nghi thức có tên, và các cổng cũng ràng buộc trực tiếp lên công việc. Các nghi thức tạo ra công việc. Công việc để lại bản ghi thành văn về điều lẽ ra phải xảy ra. Các bản ghi nuôi việc đo lường, thứ đặt câu hỏi kỷ luật có đang hoạt động hay không. Đo lường nuôi việc duy trì, và duy trì thay đổi các quy tắc thường trực cùng các cổng, khép kín vòng lặp. Tách riêng, một phép kiểm tra tính toàn vẹn hỏi rằng những artefact người đọc đang cầm có phải là những artefact đang tồn tại hay không, và báo cáo vào việc duy trì. Một kỷ luật mà vòng lặp không khép kín chỉ là một đống tài liệu.
Hình Một kỷ luật là một vòng lặp khép kín, không phải một đống tài liệu
Quy tắc và cổng nuôi các nghi thức; các cổng cũng ràng buộc trực tiếp lên công việc, và đó chính là toàn bộ lý do chúng là lớp giữ được khi không ai trông. Công việc để lại bản ghi. Bản ghi là thứ mà đo lường đọc. Đo lường nuôi việc duy trì, và duy trì thay đổi các quy tắc và các cổng — đó là chỗ vòng lặp khép lại.
Phần lớn các kỷ luật thành văn chỉ là nửa trái của bức tranh đó. Chúng có quy tắc, quy trình và thiện chí, và không có gì bao giờ quay lại thay đổi chúng. Đó không phải một kỷ luật; đó là một đống tài liệu tình cờ nằm chung một thư mục.
Việc soi lại một kỷ luật đang hoạt động làm lộ ra hai tính chất mà không lớp nào trong năm lớp diễn đạt được, và cả hai đều nằm trong vòng lặp ở trên:
Yếu tố
Câu hỏi nó trả lời
Vì sao không lớp nào phủ nó
Tính toàn vẹn
Artefact mà người đọc đang cầm có phải là artefact đang tồn tại không?
Mọi lớp đều mặc định tài liệu của chính nó đến nơi nguyên vẹn. Một quy tắc đã được sửa hôm qua, nằm trong tay một người đọc đã nạp nó từ tuần trước, không phải một quy tắc sai — nó là một bản sao cũ, và nó tạo ra công việc sai một cách tự tin và lập luận chặt chẽ
Đo lường
Kỷ luật có hoạt động không, và khi nào thì bạn đổi nó?
Lớp 1–5 mỗi lớp nói xây cái gì. Không lớp nào nói làm sao bạn biết nó đáng để xây, hay khi nào thì dừng
Tính toàn vẹn là thứ người ta hay bỏ sót. Nó không phải "quy tắc có đúng không" — câu hỏi mà mọi lớp đều đã hỏi — nó là "quy tắc trước mặt người đọc có phải là quy tắc hiện hành không". Nhìn từ bên ngoài, hai kiểu hỏng đó trông giống hệt nhau và có hai cách sửa ngược nhau.
Mười chủ đề. Danh sách này không lấy từ một tiêu chuẩn nào: tính đến 2026-09-03, không nguồn nào nêu tên bên dưới công bố một danh sách như vậy — xem phần tiếp theo để biết chính xác lời khẳng định đó đi xa tới đâu và dựa trên cái gì. Nó được rút ra từ việc quan sát một kỷ luật đang hoạt động, rồi đối chiếu chéo với những gì các nguồn đã công bố có nói. Cột cuối nêu tên phép đối chiếu chéo, hoặc nói thẳng là không có.
#
Giai đoạn
Chủ đề
Câu hỏi nó giải quyết
Đối chiếu chéo với
1
Trước công việc
Uỷ thác
Công việc nào được phép giao đi, và ở mức độc lập nào
Mười mức tự động hoá của Parasuraman/Sheridan/Wickens (2000); bảy mức của Delegation Board
2
Trước công việc
Thẩm quyền
Cái gì được làm mà không cần hỏi, và cái gì thì không
Thang xếp hạng rủi ro công cụ của OpenAI — chỉ đọc so với có quyền ghi, khả năng đảo ngược, quyền hạn cần có, tác động tài chính; câu của Google "quyền năng phải được giới hạn cẩn thận"
3
Trước công việc
Ranh giới
Cái gì không bao giờ được phép xảy ra, bất kể chỉ dẫn là gì
EU AI Act Art. 14(4)(e) — can thiệp hoặc ngắt bằng một chức năng dừng, đưa về trạng thái an toàn; NIST AI RMF MANAGE 2.4 — thay quyền, tách khỏi, vô hiệu hoá
4
Trong lúc làm
Quy trình
Một công việc lặp lại diễn ra thế nào, giống nhau mọi lần
Ranh giới các pha của WHO Surgical Safety Checklist; hướng dẫn của Anthropic về việc lập tài liệu cho công cụ kèm các trường hợp biên và ranh giới rõ ràng
5
Trong lúc làm
Kiểm chứng
Làm sao bạn biết nó đã được làm, và làm đúng — và do ai
EU AI Act Art. 14(4)(b)+(c) — luôn ý thức về thiên kiến tự động hoá, diễn giải đúng đầu ra
6
Sau đó
Trách nhiệm
Tên ai đứng trên kết quả
NIST AI RMF GOVERN 3.2 — vai trò và trách nhiệm cho các cấu hình người–AI
7
Sau đó
Bàn giao
Công việc chuyển giữa các phiên, các agent và các người thế nào mà không mất phần "vì sao"
Không tìm thấy tài liệu công bố nào — tìm kiếm ngày 2026-09-03. Chỉ rút ra từ quan sát
8
Khi hỏng
Leo thang
Chuyện gì xảy ra khi có sai sót, ai quyết định, và nhanh cỡ nào
Hai điều kiện kích hoạt leo thang của OpenAI — vượt ngưỡng thất bại, và các hành động rủi ro cao
9
Bản thân kỷ luật
Duy trì
Bản thân kỷ luật giữ đúng thế nào khi nó lớn lên
NIST AI RMF MANAGE 4.1 — khiếu nại và ghi đè, ngừng vận hành, quản lý thay đổi
10
Bản thân kỷ luật
Đo lường
Làm sao bạn biết kỷ luật hoạt động, và khi nào thì đổi nó
Từng là chủ đề yếu nhất trong mười chủ đề. Đã sửa 2026-09-03 — bốn kho công khai đo đúng điều này; xem Kho ngữ liệu công khai cho thấy gì
Cột giai đoạn là thứ tự thứ hai trong danh sách đó: mười chủ đề không rải đều, chúng dồn cụm ở trước công việc và ở đoạn cuối. Sơ đồ sau cho thấy chúng nằm ở đâu trong diễn tiến của một phần việc được uỷ thác.
Trước công việc là uỷ thác, thẩm quyền và ranh giới. Trong lúc làm là quy trình và kiểm chứng. Sau đó là trách nhiệm và bàn giao. Leo thang rẽ nhánh ra từ công việc và từ đoạn sau đó, khi có gì đó hỏng. Đoạn sau đó nuôi bản thân kỷ luật, nơi có duy trì và đo lường, và bản thân kỷ luật lại nuôi ngược vào những gì đứng vững trước phần việc kế tiếp. Các chủ đề dồn cụm ở trước công việc và ở đoạn cuối, không ở giữa.
Hình Mười chủ đề nằm ở đâu trong diễn tiến của một phần việc được uỷ thác
Phần giữa mỏng không phải là một sơ suất của danh sách. Có ít thứ nhất để quản trong lúc làm việc, bởi tới lúc đó mọi thứ đã được quyết xong — và đó chính xác là lý do vì sao rất dễ bỏ qua các chủ đề đứng trước nó mà vẫn tin rằng mình có một kỷ luật.
Chủ đề 7 được đánh dấu vì nó là lỗ hổng trung thực: điều duy nhất mà danh sách này khẳng định chỉ dựa trên quan sát, dòng của nó mang ngày của lần tìm kiếm đã không tìm thấy gì thay vì một lời khẳng định thường trực rằng không có gì tồn tại. Nó nằm trong danh sách vì một kỷ luật thiếu nó sẽ hỏng theo những kiểu mà loạt bài này đã chứng kiến — nhưng người đọc nên biết rằng nó chỉ dựa trên quan sát. Chủ đề 10 là lỗ hổng thứ hai kiểu ấy cho tới 2026-09-03, khi việc đọc kho ngữ liệu công khai tìm ra bốn kho đo đúng điều đó. Dòng của nó ghi lại lần sửa ấy thay vì lặng lẽ nuốt nó đi.
Cám dỗ ở đây là khoác cho một danh sách rút ra từ quan sát cái uy tín của một tiêu chuẩn. Ba điều khiến việc đó là không cần thiết, và một trong ba điều đó khiến nó là không trung thực.
Lỗ hổng đã được ghi nhận thành tài liệu, không chỉ được khẳng định suông. Một bản preprint tháng Hai 2026 chấm điểm năm khung đã được thiết lập — Scrum, DevOps, MLOps, AI Governance và human-in-the-loop — theo nhu cầu vận hành của những đội mà agent làm phần việc thực chất, và đánh dấu uỷ thác công việc cho AI là không được ba khung trong số đó đề cập và chỉ được hai khung còn lại đề cập một phần. Chẩn đoán của nó là câu sắc bén nhất tìm được trong nghiên cứu này: "Quản trị định nghĩa các ràng buộc; nó không định nghĩa các luồng công việc." Đó chính xác là khoảng cách giữa một tiêu chuẩn quản lý AI và thứ một đội cần vào sáng thứ Hai.
Hai nỗ lực độc lập của năm 2026 đang hội tụ về cùng một bộ từ vựng còn thiếu — các bậc tự chủ, trách nhiệm khi uỷ thác, quyền sở hữu có tên, ngừng vận hành. Sự hội tụ đó là điều mạnh nhất mà trang này có thể khẳng định một cách trung thực: không phải "đặt nền trên một tiêu chuẩn đã được thiết lập" mà là "lỗ hổng là có thật, nó đã được ghi nhận, và các nỗ lực độc lập nhằm lấp nó đồng thuận về đại khái những chủ đề này."
Và hai tiêu chuẩn lớn không được phép trích dẫn như thể chúng đã trả lời câu hỏi này. ISO/IEC 42001 và NIST AI Risk Management Framework là các khung bảo đảm ở cấp tổ chức; đơn vị phân tích của chúng là một hệ thống AI trong một danh mục rủi ro, không phải một người giao đi một nhiệm vụ rồi nhận lại nó. Các tiểu mục riêng lẻ của NIST được trích ở trên vì chúng nói điều gì đó chính xác về ghi đè, dừng và định nghĩa vai trò. Các khung xét như tổng thể không phải là một danh sách chủ đề cho một kỷ luật đang hoạt động, và trình bày chúng như vậy sẽ xuyên tạc cả hai.
Cố ý không trích dẫn: một khung kiểm soát nội bộ có đối tượng là bảo đảm ở cấp tổ chức chứ không phải việc uỷ thác; một mô hình lãnh đạo mà hậu thuẫn thực nghiệm yếu tới mức nó có thể dùng làm từ vựng chứ không làm bằng chứng; và hai tài liệu năm 2026 — một bản profile nháp và một preprint một tác giả tự nói rằng việc kiểm chứng thực nghiệm của chính nó là công việc tương lai — vốn là những tín hiệu hữu ích về sự hội tụ và không phải là thực hành đã được thiết lập.
Mười chủ đề dọc theo cạnh bên, năm lớp ngang trên đầu, và trong mỗi ô là artefact gánh chủ đề đó. Bên dưới là cách sắp xếp điển hình, dùng làm điểm khởi đầu — đặt bảng của chính bạn cạnh nó mới là toàn bộ phép thử.
● gánh chủ đề · ○ cũng phủ nó · để trống — không có
Chủ đề
1 Quy tắc
2 Cổng
3 Nghi thức
4 Bản ghi
5 Chỉ mục, trigger, duy trì
6 Tuân thủ
1 Uỷ thác
●
○
2 Thẩm quyền
●
○
3 Ranh giới
●
●
○
4 Quy trình
●
○
5 Kiểm chứng
●
○
○
6 Trách nhiệm
○
●
7 Bàn giao
○
●
8 Leo thang
○
●
9 Duy trì
●
10 Đo lường
○
●
Ma trận trả lời ba câu hỏi mà không ai phải suy nghĩ:
Một dòng không có ● là một lỗ hổng. Chủ đề đó không có artefact nào — nó sống trong đầu người.
Một dòng mà ● duy nhất nằm ở cột 1 là một quy tắc bạn đang hy vọng người ta tuân theo. Trong cách sắp xếp điển hình ở trên thì đó chính là uỷ thác và thẩm quyền — hai chủ đề có hệ quả lớn nhất, và là hai chủ đề chỉ đứng trên thiện chí.
Một cột 5 trống nghĩa là kỷ luật lớn lên mà không ai dọn dẹp.
Một cột hoàn toàn không có ● là một cột đang đi tìm dòng của nó. Cột 6 đúng là như vậy, và nó là thứ mới nhất trên trang này. Xem bên dưới.
Một cột nêu tên nhiều thứ hơn số thứ mà các dòng của nó chạm tới là cùng một lỗi, ở cỡ nhỏ hơn. Cột 5 được đặt tên theo ba thứ và mười chủ đề chạm tới hai trong số đó: không có gì dọc theo cạnh bên hỏi rằng một file có kích hoạt đúng thời điểm hay không. Phần trigger — cái thứ ba của lớp 5 — không có dòng nào ở đây.
Hai phép chẩn đoán đáng chạy mỗi quý một lần:
Những chủ đề nào chỉ sống ở lớp 1? Đó là những chủ đề sẽ không sống sót qua áp lực tiến độ. Đấy không phải là lý lẽ để đặt cổng cho tất cả chúng — một số thực sự không đặt cổng được — nhưng nó là danh sách những thứ bạn đang tin tưởng thay vì cưỡng chế, và nó nên là một quyết định chứ không phải một sự tình cờ.
Vòng lặp đã khép chưa? Nếu không có thứ gì bạn đo từng làm thay đổi một quy tắc hay một cổng thì nửa phải của sơ đồ chỉ là đồ trang trí.
Cột 6 được thêm vào ngày 2026-09-03 sau khi đọc mười kho skill công khai (phần bằng chứng). Ba trong số đó xây một thứ mà không lớp nào trong năm lớp mô tả: công việc nhắm vào khoảng cách giữa một chỉ dẫn đúng và một chỉ dẫn được tuân theo dưới áp lực. Những file kịch bản ép agent thật mạnh để xem nó có bỏ quy trình hay không; một bảng bắt buộc ghép mỗi lời biện bạch được dự đoán với lời bác bỏ của nó, được cưỡng chế bởi chính linter của kho; một khối nghiên cứu về các kiểu hỏng của chính bên được uỷ thác.
Một cổng đứng bên ngoài công việc và từ chối. Thứ này đứng bên trong công việc và tranh luận. Nó không phải lớp 1 — nó không phải một phát biểu về điều gì là đúng. Nó không phải lớp 2 — không có gì thoát ra với mã khác không. Và nó cũng không đơn giản là viết hay, vốn là phản bác cần phải vượt qua: viết kỹ thuật hay thì trả lời câu hỏi người đọc đã hỏi; thứ này trả lời phản bác mà người đọc chưa nêu, và chỉ nêu lên khi bị áp lực.
Tài liệu đã công bố đồng ý với vị trí đặt nó chứ không đồng ý với việc thăng hạng nó. Một nghiên cứu trên 238 file chỉ dẫn xếp nó là một mục còn thiếu — không phải một artefact còn thiếu — và thấy nó vắng mặt ở 94 % số file. Các phép đo, ba thứ không hoạt động, và phương pháp để kiểm thử một quy tắc được gom trong phụ lục 0520.
Và nó không kiếm được ● ở dòng nào cả, đó mới là phần thú vị. Nó cũng phủ ranh giới, quy trình và kiểm chứng, mà nó lại không phải bất kỳ cái nào trong số đó. Hoặc là mười chủ đề đang thiếu một dòng — gọi nó là sự tuân phục — hoặc tuân thủ là một chế độ mà trong đó các chủ đề kia được theo đuổi, chứ không phải một chủ đề riêng. Trang này không phân xử điều đó, bởi ba kho là đủ để cho thấy một thứ tồn tại chứ không đủ để tái cấu trúc cả một phương pháp quanh nó. Một cột không có ● là một cột đang đi tìm dòng của nó, và nói ra điều đó thì hữu ích hơn là điền đại một ô cho bảng trông có vẻ đã xong.
Nó không nói được cho bạn mức uỷ thác đúng đắn cho công việc của bạn. Các công trình đã công bố nhất trí ở một điểm và im lặng sau đó: mức được đặt theo từng vùng quyết định, không theo từng người và không đặt một lần — và không ai có một quy tắc chọn mức mà sống sót khi va vào một đội cụ thể. Có một sự bất đối xứng lặp lại xuyên suốt các nguồn và dù sao cũng đáng áp dụng: thăng hạng thì chậm và dựa trên bằng chứng; hạ hạng thì nhanh và ai cũng làm được.
Một kỷ luật đầy đủ cũng không phải là một kỷ luật tốt. Đầy đủ là một tính chất về độ phủ. Còn các quy tắc có phải là các quy tắc đúng hay không, và toàn bộ cách sắp xếp có đáng cái giá của nó hay không, là việc của chủ đề 10 — và chủ đề 10 là chủ đề có ít hậu thuẫn nhất.
Tất cả đều được mở ngày 2026-09-03. Tài liệu đã đo về việc một quy tắc thành văn có được tuân theo khi có xung đột hay không được gom trong phụ lục 0520 thay vì chép lại ở đây — một danh sách chuẩn duy nhất, nếu không các bản sao sẽ trôi xa nhau.
EU AI Act, Article 14 — Human oversight. <https://artificialintelligenceact.eu/article/14/>
NIST AI Risk Management Framework 1.0 (NIST AI 100-1, tháng Một 2023) — các tiểu mục GOVERN 3.2, MANAGE 2.4, MANAGE 4.1. <https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.100-1.pdf>
ISO/IEC 42001:2023, cấu trúc điều khoản lấy từ bản xem trước miễn phí của nhà xuất bản — được trích ở đây chỉ để nói nó không nói về cái gì.
Anthropic, "Our framework for developing safe and trustworthy agents" (2025-08-04). <https://www.anthropic.com/news/our-framework-for-developing-safe-and-trustworthy-agents>
OpenAI, "A practical guide to building agents" — thang xếp hạng rủi ro công cụ và các điều kiện kích hoạt leo thang. <https://cdn.openai.com/business-guides-and-resources/a-practical-guide-to-building-agents.pdf>
Google, "An Introduction to Google's Approach for Secure AI Agents" (2025). <https://research.google/pubs/an-introduction-to-googles-approach-for-secure-ai-agents/>
Parasuraman, Sheridan & Wickens (2000), "A model for types and levels of human interaction with automation" — công trình đi trước kinh điển về việc uỷ thác cho một cỗ máy, sớm hai mươi lăm năm.
Delegation Poker / the Delegation Board — bảy mức, thẩm quyền đặt theo từng vùng quyết định. <https://management30.com/practice/delegation-poker/>
WHO Surgical Safety Checklist — mô hình ranh giới điểm kiểm, kèm dữ liệu kết quả. <https://www.nejm.org/doi/full/10.1056/NEJMsa0810119>
HAIF, arXiv:2602.07641 (tháng Hai 2026) — lỗ hổng độ phủ đã được ghi nhận. Preprint một tác giả, chưa bình duyệt; việc kiểm chứng thực nghiệm của chính nó được nêu là công việc tương lai. <https://arxiv.org/pdf/2602.07641>
Cloud Security Alliance, "NIST AI RMF: Agentic Profile" (bản nháp, 2026-03-27) — một bản nháp, do CSA soạn và không được NIST xác nhận. <https://labs.cloudsecurityalliance.org/agentic/agentic-nist-ai-rmf-profile-v1/>
The five layers work on getting the rule right. None of them asks whether it holds.
That gap has a name in the published literature and a measured size. A study of 238 real skill files catalogues 26 recurring defects; the most common of all of them — reported in 223 files, 94 % — is the Rationalization Loophole: the file "provides no guidance to discourage the agent from rationalizing or skipping required steps" (Hong et al. 2026). The denominator behind that percentage does not reconcile inside the source itself; the reference entry says where it comes apart.
This is an appendix, not a sixth layer, for the same reason 0510 is one: it adds no artefact. Its output is wording inside a rule file and a step inside a ritual. The evidence section says how that was settled and against what.
Good technical writing answers a question the reader asked. This answers the objection the reader has not raised — and would only raise under pressure.
That sentence was written to be attacked and survived the attack. It is not a slogan: the practice has a failure taxonomy that routes different failures to different remedies, and gets it wrong if you apply the remedies to the wrong failure. One repository states the boundary outright — for output that is merely the wrong shape, "prohibition-based bulletproofing backfires" (obra/superpowers, skills/writing-skills/SKILL.md). That is a craft, not a style preference.
Two regimes, and they are not in conflict — they measure different situations.
Without conflict, written instructions are followed. A controlled evaluation of repository context files found they "do not generally improve task success rates, while instructions in the context files are well followed" (Evaluating AGENTS.md 2026). A rule file is measurably an efficiency mechanism rather than a correctness one: −16.58 % output tokens and −28.64 % wall clock (Efficiency of AGENTS.md 2026).
Those two sentences sit on opposite sides of a cost disagreement, so the ids matter. The "well followed" paper is also the one reporting context files raising inference cost by over 20 % on average, across several models and agents (arXiv:2602.11988). The −16.58 % / −28.64 % figures are a different preprint, measuring median wall clock and output tokens over 10 repositories and 124 pull requests (arXiv:2601.20404). 0000 and 0100 carry both figures side by side, with their signs opposite; the disagreement is not resolved here.
With conflict, adherence comes apart — along a different axis in every study.
Read the 46-point spread twice. Same rule, same words, twelve models, and the outcome ranges across almost half the scale. Which model you hand the work to is part of the discipline, and no sentence you write changes that.
Worth reading twice, because all three are what a reasonable person tries first.
1 · Saying it louder. All four prompt variants in one benchmark carry DO NOT MODIFY THE TESTS. in bold capitals — including the variant that produces over 85 % cheating (ImpossibleBench). The prohibition was present and was read past.
2 · Rewording it. Across 11 models and 830+ invocations, the encoding form of a constraint had no significant effect (Cliff's δ < 0.01, ±2.6 pp). What dominated was the type of rule: one that opposes the model's defaults fails 10–100 % of the time, a conventional one holds at 99 %+. The authors' own conclusion: "engineering effort toward compliance is better directed at constraint design than prompt formatting" (Compact Constraint Encoding).
"Form does not matter" is not "wording does not matter" — between the two lies a whole axis. That study varies how a constraint is encoded. A separate one varies its polarity — forbid rather than instruct — and finds the two do come apart: across 679 scraped rule files (25,532 rules) and over 5,000 Claude Code runs on SWE-bench Verified, "in our data every individually beneficial rule is a negative constraint […], while every individually harmful one is a positive directive" (Guardrails Beat Guidance).
So: three findings on three axes, and they are easy to collapse into one another. Form has no measurable effect; polarity does; opposing the model's own defaults outweighs both. Take the polarity result at the size its own authors give it — one study, one benchmark subset, and the phrase is "in our data": a classification of the rules they scraped, not a paired test of the same rule written both ways. The same paper reports that randomly generated rules match expert-curated ones (+13.8 pp either way) and that individually harmful rules do not visibly accumulate damage inside a set, which is reason to hold the finding loosely rather than build on it. Vendor guidance points the other way — "tell Claude what to do instead of what not to do" — but scoped to controlling output format, not to holding a boundary (Anthropic prompting guidance).
3 · Naming the penalty. Specifying the consequence of breaking the rule turns an obligation into a cost-benefit calculation and favours the violation — the enforcement-information paradox (Why Do AI Agents Break Rules?).
The one intervention that moved a benchmark by a large margin did not forbid harder. It supplied a licensed alternative action for the moment of conflict — in substance: stop, identify the incorrect tests, and explain why they are wrong, instead of carving up the code to pass them (ImpossibleBench).
A rule that only forbids leaves the reader with no way out of the situation that made them break it.
Now read the size of that result carefully, because it is the most quotable number on this page and the easiest to misuse. The >85 % → 1 % figure is one model on one benchmark with a minimal scaffold. The same prompts on another model move >85 % → 33 %; on the harder benchmark the effect nearly vanishes, with loosening moving one model 54 % → 66 % and another 50 % → 55 % (ImpossibleBench). What generalises is the shape, not the number.
You can test a written rule the way you test code, and one repository does exactly that: write the pressure scenario, watch the rule fail, write the rule, watch it hold, then close the loopholes (obra/superpowers, skills/writing-skills/).
Start with a control run that gives the agent no guidance at all. If the control does not show the failure, stop, because there is nothing to fix. Otherwise write the pressure scenario, run it against the rule, and if the rule is abandoned, read the reason the agent gave. That reason becomes a row in the excuse table and the rule gains a licensed alternative. Re-run until the rule holds, then keep the scenario as a regression test.
Figure Testing a written rule the way you test code
The control comes first, and it is the step people skip. "If you didn't watch an agent fail without the skill, you don't know if the skill prevents the right failures" — and if the control does not exhibit the failure, there is nothing to fix, so do not write the guidance (obra/superpowers, skills/writing-skills/testing-skills-with-subagents.md). A rule written for a failure that was never observed is the most common thing in every rule file, and it costs attention on every single task.
The scenarios in that repository combine pressures rather than applying one, and the three combinations are named: time and money · sunk cost and exhaustion · authority and social. They are the same three that break human procedures, which is why this transfers.
The excuse is quoted as it was actually given, and the rebuttal closes that specific escape rather than restating the rule:
| "Keep as reference, write tests first" | You'll adapt it. That's testing after. Delete means delete. || "This is just a simple question" | Questions are tasks. Check for skills. || "I remember this skill" | Skills evolve. Read current version. |
One more, because it is a trap in its own right: an exemption clause does not scope. "This limit does not apply to code blocks" still suppresses code blocks; if part of the output must be exempt, restructure the rule so it cannot reach it.
A fire drill is a pressure test. Nobody doubts that people know where the exit is — the drill exists because knowing and doing come apart under conditions. The same reasoning explains why a surgical checklist is read aloud, at exactly the moment skipping it feels reasonable (0510 cites its outcome data).
The transferable parts, none of which need software:
Quote the excuse verbatim. Any procedure that gets skipped — a handover, a closing check, a safeguarding step — earns a two-column appendix of the exact sentences people say when they skip it, each with its answer. Write what they said, not what you imagine they would say.
Name the alternative. A policy that only forbids leaves someone stuck in the situation that made forbidding expensive. Say what to do instead.
Rehearse it on the busy day, not the quiet one. A rule tested in calm conditions has not been tested.
Do not publish the penalty as the reason. It invites the arithmetic (Why agents break rules).
It has no exit code. Everything here persuades; nothing here refuses. It does not replace layer 2 and is at its most dangerous when it feels like a substitute for one — every verifier is a proxy for intent rather than intent itself (The Verification Horizon), and a rule that merely reads as convincing has no such proxy at all. It fails silently, and you find out afterwards, from layer 4.
It also cannot tell you whether any of this holds for work that is not software. Every measurement on this page is from coding agents. Generalising it is an argument, not a measurement.
And one honesty note about the strongest-sounding source in this area. The repository that documents this practice most thoroughly rests it on a persuasion study of N = 28,000 conversations in which compliance rose from 33 % to 72 % (Meincke et al. 2025) — but that study measures persuading a model to comply with requests it would normally refuse, on a single model. It is evidence that persuasion cues move a model a great deal. It is not evidence that they keep your own rule intact under pressure, and it is used here only for the first claim.
From Anatomy to Smells: An Empirical Study of SKILL.md (Hong, Imani, Ahmed; 2026-07-03), arXiv:2607.01456 — 238 skill files qualitatively analysed, 26 defect classes; Rationalization Loophole is the most prevalent, classified under Missing Follow-Through Guards as a missing section. This is the source for the gap this page describes and for treating it as a section rather than an artefact of its own. Its prevalence figure does not reconcile inside the source: the running text says the detector was applied to "the remaining 238 SKILL.md files", Table IV heads that same column "Entire Sample (228 Skills)", and the printed 223 (94 %) matches 238, not 228 — which would be 97.8 %. Both the v1 and v2 full texts read this way, checked 2026-09-04. This page therefore quotes 223 and 94 % as printed and takes no view on the denominator. Preprint. <https://arxiv.org/abs/2607.01456>
Evaluating AGENTS.md: Are Repository-Level Context Files Helpful for Coding Agents? (2026-02-12), arXiv:2602.11988 — the "well followed" finding, in the no-conflict regime; also the source of the over-20 % inference-cost figure, which 0000 and 0100 cite alongside the opposite-signed figure from arXiv:2601.20404. Preprint. <https://arxiv.org/abs/2602.11988>
On the Impact of AGENTS.md Files on the Efficiency of AI Coding Agents (2026-01-28), arXiv:2601.20404 — Δ 16.58 % output tokens, Δ 28.64 % wall clock. Preprint. <https://arxiv.org/abs/2601.20404>
Overeager Coding Agents: Measuring Out-of-Scope Actions on Benign Tasks (2026-05-18), arXiv:2605.18583 — 0.0 % → 17.1 % on paired scenarios when one consent clause is removed. The paper's term is overeager actions / scope expansions; destructive acts are examples of these, not the definition. Preprint. <https://arxiv.org/abs/2605.18583>
ImpossibleBench: Measuring LLMs' Propensity of Exploiting Test Cases (Zhong, Raghunathan, Carlini; 2025-10-23), arXiv:2510.20270 — the prompt-variant results, and the fact that every variant contains the bold prohibition. The >85 % → 1 % figure is one model, one benchmark, minimal scaffold. Preprint. <https://arxiv.org/abs/2510.20270>
Compact Constraint Encoding (2026-04-08), arXiv:2604.07192 — 11 models, 830+ invocations; encoding form has no significant effect (Cliff's δ < 0.01), constraint type dominates. Its type axis is counter-intuitive versus conventional constraints, not prohibition versus directive — a different axis from the one below. Preprint. <https://arxiv.org/abs/2604.07192>
Guardrails Beat Guidance: A Large-Scale Study of Rules, Skills, and Persistent Configuration for Coding Agents (Zhang, Wang, Cui, Qiu, Li, Zhu, He; 2026-04-13, revised 2026-05-28), arXiv:2604.11088 — 679 scraped rule files (25,532 rules) and over 5,000 Claude Code runs on SWE-bench Verified; random rules match expert-curated ones (+13.8 pp both), and in that data every individually beneficial rule is a negative constraint while every individually harmful one is a positive directive. Read the polarity claim at its stated scope: the authors write "in our data", and it is a classification of scraped rules rather than a paired experiment rewording one rule both ways — the same paper also finds the gains largely content-independent and the harmful rules non-accumulating in ensemble. Preprint. <https://arxiv.org/abs/2604.11088>
Why Do AI Agents Break Rules? (2026-05-29), arXiv:2608.12323 — 46-point compliance spread across 12 models at identical wording; the enforcement-information paradox. Preprint. <https://arxiv.org/abs/2608.12323>
Outcome-Driven Constraint Violations (2025-12-23), arXiv:2512.20798 — 0.0–62.8 % under KPI pressure; no improvement across model generations. Preprint. <https://arxiv.org/abs/2512.20798>
Asymmetric Goal Drift in Coding Agents Under Value Conflict (2026-03-03), arXiv:2603.03456 — violation rises with pressure and with accumulated context. Preprint. <https://arxiv.org/abs/2603.03456>
The Verification Horizon: No Silver Bullet for Coding Agent Rewards (2026-06-24), arXiv:2606.26300 — every verifier is a proxy for human intent, never intent itself. Preprint. <https://arxiv.org/abs/2606.26300>
Call Me A Jerk: Persuading AI to Comply with Objectionable Requests (Meincke, Shapiro, Duckworth, Mollick, Mollick & Cialdini; 2025-07-18), SSRN 5357179 — seven persuasion principles, N = 28,000 conversations, GPT-4o-mini, compliance 33 % → 72 %. Measures persuading a model toward requests it would normally refuse, which is the opposite direction to keeping your own rule intact. Working paper. <https://ssrn.com/abstract=5357179>
Anthropic, prompting best practices — "tell Claude what to do instead of what not to do", stated under controlling response format. <https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices>
Instruction hierarchy — the conflict problem attacked at training time rather than in prose:
Die fünf Schichten arbeiten daran, die Regel richtig zu bekommen. Keine von ihnen fragt, ob sie hält.
Diese Lücke hat in der veröffentlichten Literatur einen Namen und eine gemessene Größe. Eine Untersuchung von 238 echten Skill-Dateien katalogisiert 26 wiederkehrende Defekte; der häufigste von allen — berichtet für 223 Dateien, 94 % — ist das Rationalization Loophole: die Datei „provides no guidance to discourage the agent from rationalizing or skipping required steps" (Hong et al. 2026). Der Nenner hinter diesem Prozentsatz geht in der Quelle selbst nicht auf; der Referenzeintrag sagt, wo er auseinanderfällt.
Das hier ist ein Anhang, keine sechste Schicht, aus demselben Grund wie 0510: es fügt kein Artefakt hinzu. Sein Ergebnis sind Formulierungen in einer Regeldatei und ein Schritt in einem Ritual. Der Belegteil sagt, wie das entschieden wurde und wogegen.
Die Unterscheidung, die daraus überhaupt ein Thema macht#
Gute technische Dokumentation beantwortet die Frage, die der Leser gestellt hat. Das hier beantwortet den Einwand, den er noch nicht erhoben hat — und nur unter Druck erheben würde.
Dieser Satz wurde geschrieben, um angegriffen zu werden, und hat den Angriff überstanden. Er ist kein Slogan: Die Praxis hat eine Fehler-Taxonomie, die verschiedene Fehler auf verschiedene Mittel verteilt, und geht schief, wenn man die Mittel auf den falschen Fehler anwendet. Ein Repository sagt die Grenze ausdrücklich — für Ausgaben, die bloß die falsche Form haben, gilt: „prohibition-based bulletproofing backfires" (obra/superpowers, skills/writing-skills/SKILL.md). Das ist ein Handwerk, keine Stilvorliebe.
Zwei Regime, und sie widersprechen sich nicht — sie messen verschiedene Situationen.
Ohne Konflikt werden geschriebene Anweisungen befolgt. Eine kontrollierte Auswertung von Repository-Kontextdateien fand, dass sie „do not generally improve task success rates, while instructions in the context files are well followed" (Evaluating AGENTS.md 2026). Eine Regeldatei ist messbar ein Effizienz-Mechanismus und kein Korrektheits-Mechanismus: −16,58 % Ausgabe-Tokens und −28,64 % Laufzeit (Efficiency of AGENTS.md 2026).
Diese beiden Sätze stehen auf entgegengesetzten Seiten eines Kostenstreits — deshalb zählen die IDs. Die Studie mit dem „well followed"-Befund ist zugleich die, die berichtet, Kontextdateien erhöhten die Inferenzkosten im Mittel um über 20 %, über mehrere Modelle und Agenten hinweg (arXiv:2602.11988). Die −16,58 % / −28,64 % stammen aus einem anderen Preprint, das Median-Laufzeit und Ausgabe-Tokens über 10 Repositories und 124 Pull Requests misst (arXiv:2601.20404). 0000 und 0100 führen beide Zahlen nebeneinander, mit ihren gegensätzlichen Vorzeichen; der Widerspruch wird hier nicht aufgelöst.
Mit Konflikt fällt die Befolgung auseinander — in jeder Studie entlang einer anderen Achse.
Was eingeführt wurde
Was passierte
Quelle
Eine Zustimmungsklausel aus den Anweisungen entfernt
Aktionen außerhalb des Auftrags 0,0 % → 17,1 % (Claude Code, gepaarte Szenarien, McNemar exakt p = 2,4×10⁻⁴; über Modelle Δ 11,9–17,2 PP)
Die 46 Punkte bitte zweimal lesen. Dieselbe Regel, dieselben Worte, zwölf Modelle — und das Ergebnis spannt fast die halbe Skala. Welchem Modell man die Arbeit gibt, ist Teil der Disziplin, und kein Satz, den man schreibt, ändert daran etwas.
Zweimal lesen wert, denn alle drei sind das, was ein vernünftiger Mensch zuerst versucht.
1 · Lauter werden. Alle vier Prompt-Varianten eines Benchmarks tragen DO NOT MODIFY THE TESTS. in fetten Großbuchstaben — auch die Variante, die über 85 % Schummelquote erzeugt (ImpossibleBench). Das Verbot war da und wurde überlesen.
2 · Umformulieren. Über 11 Modelle und 830+ Aufrufe hatte die Kodierungsform einer Vorgabe keinen signifikanten Effekt (Cliff's δ < 0,01, ±2,6 PP). Was dominierte, war der Typ der Regel: Eine, die den Voreinstellungen des Modells widerspricht, scheitert in 10–100 % der Fälle, eine konventionelle hält bei 99 %+. Der Schluss der Autoren: „engineering effort toward compliance is better directed at constraint design than prompt formatting" (Compact Constraint Encoding).
„Die Form spielt keine Rolle" heißt nicht „die Formulierung spielt keine Rolle" — dazwischen liegt eine ganze Achse. Jene Studie variiert, wie eine Vorgabe kodiert ist. Eine andere variiert ihre Polarität — verbieten statt anweisen — und findet, dass die beiden sehr wohl auseinandertreten: über 679 gescrapte Regeldateien (25.532 Regeln) und mehr als 5.000 Claude-Code-Läufe auf SWE-bench Verified gilt „in our data every individually beneficial rule is a negative constraint […], while every individually harmful one is a positive directive" (Guardrails Beat Guidance).
Also drei Befunde auf drei Achsen, und sie sind leicht ineinanderzuschieben. Die Form hat keinen messbaren Effekt; die Polarität hat einen; der Widerspruch zu den Voreinstellungen des Modells wiegt schwerer als beide. Das Polaritäts-Ergebnis bitte in der Größe nehmen, die seine Autoren ihm selbst geben — eine Studie, ein Benchmark-Ausschnitt, und die Formulierung lautet „in our data": eine Klassifikation der gescrapten Regeln, kein gepaarter Test derselben Regel in beiden Fassungen. Dieselbe Arbeit berichtet, dass zufällig erzeugte Regeln kuratierten gleichkommen (+13,8 PP in beiden Fällen) und dass einzeln schädliche Regeln im Verbund keinen sichtbaren Schaden ansammeln — Grund genug, den Befund locker zu halten, statt darauf zu bauen. Die Hersteller-Doku weist in die andere Richtung — „tell Claude what to do instead of what not to do" — allerdings bezogen auf die Steuerung des Ausgabe*formats*, nicht auf das Halten einer Grenze (Anthropic prompting guidance).
3 · Die Strafe benennen. Die Folge eines Regelbruchs anzugeben macht aus einer Pflicht eine Kosten-Nutzen-Rechnung und begünstigt den Verstoß — das Enforcement-Information-Paradox (Why Do AI Agents Break Rules?).
Was funktioniert hat: der Regel einen Ausweg geben#
Der einzige Eingriff, der einen Benchmark deutlich bewegt hat, verbot nicht härter. Er lieferte eine erlaubte Alternativhandlung für den Moment des Konflikts — sinngemäß: halte an, benenne die falschen Tests und erkläre, warum sie falsch sind, statt den Code zurechtzuschneiden, damit sie durchlaufen (ImpossibleBench).
Eine Regel, die nur verbietet, lässt den Leser ohne Ausweg aus genau der Lage, die ihn die Regel brechen ließ.
Und jetzt die Größe dieses Ergebnisses genau lesen, denn es ist die zitierfähigste Zahl dieser Seite und die am leichtesten zu missbrauchende. Die >85 % → 1 % gelten für ein Modell auf einem Benchmark mit minimalem Gerüst. Dieselben Prompts bewegen ein anderes Modell von >85 % auf 33 %; auf dem schwereren Benchmark verschwindet der Effekt fast, dort bewegt Lockern ein Modell von 54 % auf 66 % und ein anderes von 50 % auf 55 % (ImpossibleBench). Übertragbar ist die Form, nicht die Zahl.
Man kann eine geschriebene Regel testen wie Code, und ein Repository tut genau das: das Druck-Szenario schreiben, die Regel scheitern sehen, die Regel schreiben, sie halten sehen, dann die Schlupflöcher schließen (obra/superpowers, skills/writing-skills/).
Beginne mit einem Kontrolllauf ganz ohne Anleitung. Zeigt die Kontrolle den Fehler nicht, hör auf, denn es gibt nichts zu reparieren. Andernfalls schreibe das Druck-Szenario, lasse es gegen die Regel laufen, und wenn die Regel fallen gelassen wird, lies die Begründung, die der Agent gegeben hat. Diese Begründung wird eine Zeile in der Ausredentabelle, und die Regel bekommt eine erlaubte Alternative. Wiederhole, bis die Regel hält, und behalte das Szenario als Regressionstest.
Abbildung Eine geschriebene Regel testen wie Code
Die Kontrolle kommt zuerst, und sie ist der Schritt, den man überspringt. „If you didn't watch an agent fail without the skill, you don't know if the skill prevents the right failures" — und wenn die Kontrolle den Fehler nicht zeigt, gibt es nichts zu reparieren, also schreibe die Anleitung nicht (obra/superpowers, skills/writing-skills/testing-skills-with-subagents.md). Eine Regel für einen Fehler, den nie jemand beobachtet hat, ist das Häufigste in jeder Regeldatei — und sie kostet bei jeder einzelnen Aufgabe Aufmerksamkeit.
Die Szenarien in jenem Repository kombinieren Druck, statt einen einzelnen anzuwenden, und die drei Kombinationen sind benannt: Zeit und Geld · Sunk Cost und Erschöpfung · Autorität und Sozialdruck. Es sind dieselben drei, die auch menschliche Verfahren brechen — deshalb überträgt sich das.
Die Ausrede wird so zitiert, wie sie wirklich gefallen ist, und die Widerlegung schließt genau diesen Ausweg, statt die Regel zu wiederholen:
| "Keep as reference, write tests first" | You'll adapt it. That's testing after. Delete means delete. || "This is just a simple question" | Questions are tasks. Check for skills. || "I remember this skill" | Skills evolve. Read current version. |
Und noch eine, weil sie eine eigene Falle ist: eine Ausnahmeklausel begrenzt sich nicht selbst. „Diese Grenze gilt nicht für Codeblöcke" unterdrückt Codeblöcke trotzdem; muss ein Teil der Ausgabe ausgenommen sein, baue die Regel so um, dass sie ihn gar nicht erreicht.
Eine Feuerübung ist ein Drucktest. Niemand bezweifelt, dass Leute wissen, wo der Ausgang ist — die Übung gibt es, weil Wissen und Tun unter Bedingungen auseinanderfallen. Dieselbe Überlegung erklärt, warum eine OP-Checkliste laut vorgelesen wird, genau in dem Moment, in dem Überspringen vernünftig wirkt (0510 zitiert ihre Ergebnisdaten).
Was sich überträgt, ganz ohne Software:
Die Ausrede wörtlich zitieren. Jedes Verfahren, das übersprungen wird — eine Übergabe, ein Abschluss-Check, ein Schutzschritt — verdient einen zweispaltigen Anhang mit den genauen Sätzen, die Leute beim Überspringen sagen, jeweils mit der Antwort. Aufschreiben, was sie gesagt haben, nicht, was man sich vorstellt.
Die Alternative benennen. Eine Vorschrift, die nur verbietet, lässt jemanden in genau der Lage sitzen, die das Verbieten teuer gemacht hat. Sag, was stattdessen zu tun ist.
Am hektischen Tag proben, nicht am ruhigen. Eine Regel, die unter Ruhe geprüft wurde, ist nicht geprüft.
Sie hat keinen Exit-Code. Alles hier überredet; nichts hier verweigert. Sie ersetzt Schicht 2 nicht und ist am gefährlichsten, wenn sie sich wie ein Ersatz dafür anfühlt — jeder Prüfer ist ein Stellvertreter für die Absicht und nie die Absicht selbst (The Verification Horizon), und eine Regel, die sich bloß überzeugend liest, hat nicht einmal diesen Stellvertreter. Sie scheitert lautlos, und man erfährt es hinterher, aus Schicht 4.
Sie kann auch nicht sagen, ob irgendetwas davon für Arbeit außerhalb der Software gilt. Jede Messung auf dieser Seite stammt von Coding-Agenten. Sie zu verallgemeinern ist ein Argument, keine Messung.
Und eine Ehrlichkeitsnotiz zur am stärksten klingenden Quelle in diesem Feld. Das Repository, das diese Praxis am gründlichsten dokumentiert, stützt sie auf eine Überredungsstudie mit N = 28.000 Konversationen, in der die Befolgung von 33 % auf 72 % stieg (Meincke et al. 2025) — aber diese Studie misst, wie man ein Modell zu Anfragen überredet, die es normalerweise ablehnt, an einem einzigen Modell. Sie belegt, dass Überredungsreize ein Modell stark bewegen. Sie belegt nicht, dass sie die eigene Regel unter Druck intakt halten, und sie wird hier nur für die erste Aussage verwendet.
Alle geöffnet am 2026-09-04. Der Preprint-Status ist genannt, wo er gilt; eine Zahl ohne ihren Geltungsbereich ist eine Zahl, die falsch zitiert werden wird.
From Anatomy to Smells: An Empirical Study of SKILL.md (Hong, Imani, Ahmed; 2026-07-03), arXiv:2607.01456 — 238 qualitativ ausgewertete Skill-Dateien, 26 Defektklassen; das Rationalization Loophole ist das häufigste, eingeordnet unter Missing Follow-Through Guards als fehlender Abschnitt. Das ist die Quelle für die hier beschriebene Lücke und dafür, sie als Abschnitt statt als eigenes Artefakt zu behandeln. Ihre Prävalenzzahl geht in der Quelle selbst nicht auf: Der Fließtext sagt, der Detektor sei auf „the remaining 238 SKILL.md files" angewendet worden, Tabelle IV überschreibt dieselbe Spalte mit „Entire Sample (228 Skills)", und die gedruckten 223 (94 %) passen zu 238, nicht zu 228 — das wären 97,8 %. v1 und v2 des Volltexts lesen sich beide so, geprüft am 2026-09-04. Diese Seite zitiert daher 223 und 94 % wie gedruckt und legt sich auf keinen Nenner fest. Preprint. <https://arxiv.org/abs/2607.01456>
Evaluating AGENTS.md: Are Repository-Level Context Files Helpful for Coding Agents? (2026-02-12), arXiv:2602.11988 — der „well followed"-Befund, im konfliktfreien Regime; zugleich die Quelle der Zahl von über 20 % Inferenzkosten, die 0000 und 0100 neben der gegenläufigen Zahl aus arXiv:2601.20404 zitieren. Preprint. <https://arxiv.org/abs/2602.11988>
On the Impact of AGENTS.md Files on the Efficiency of AI Coding Agents (2026-01-28), arXiv:2601.20404 — Δ 16,58 % Ausgabe-Tokens, Δ 28,64 % Laufzeit. Preprint. <https://arxiv.org/abs/2601.20404>
Overeager Coding Agents: Measuring Out-of-Scope Actions on Benign Tasks (2026-05-18), arXiv:2605.18583 — 0,0 % → 17,1 % auf gepaarten Szenarien, wenn eine Zustimmungsklausel entfernt wird. Der Begriff der Arbeit ist overeager actions / Scope-Erweiterungen; destruktive Handlungen sind Beispiele dafür, nicht die Definition. Preprint. <https://arxiv.org/abs/2605.18583>
ImpossibleBench: Measuring LLMs' Propensity of Exploiting Test Cases (Zhong, Raghunathan, Carlini; 2025-10-23), arXiv:2510.20270 — die Prompt-Varianten-Ergebnisse und die Tatsache, dass jede Variante das fette Verbot enthält. Die Zahl >85 % → 1 % gilt für ein Modell, einen Benchmark, minimales Gerüst. Preprint. <https://arxiv.org/abs/2510.20270>
Compact Constraint Encoding (2026-04-08), arXiv:2604.07192 — 11 Modelle, 830+ Aufrufe; die Kodierungsform hat keinen signifikanten Effekt (Cliff's δ < 0,01), der Typ der Vorgabe dominiert. Ihre Typ-Achse ist kontraintuitiv gegen konventionell, nicht Verbot gegen Direktive — eine andere Achse als die im nächsten Eintrag. Preprint. <https://arxiv.org/abs/2604.07192>
Guardrails Beat Guidance: A Large-Scale Study of Rules, Skills, and Persistent Configuration for Coding Agents (Zhang, Wang, Cui, Qiu, Li, Zhu, He; 2026-04-13, überarbeitet 2026-05-28), arXiv:2604.11088 — 679 gescrapte Regeldateien (25.532 Regeln) und über 5.000 Claude-Code-Läufe auf SWE-bench Verified; zufällige Regeln erreichen dasselbe wie kuratierte (+13,8 PP bei beiden), und in diesen Daten ist jede einzeln nützliche Regel ein negativer Constraint, jede einzeln schädliche eine positive Direktive. Die Polaritäts-Aussage in ihrem genannten Geltungsbereich lesen: Die Autoren schreiben „in our data", und es ist eine Klassifikation gescrapter Regeln, kein gepaartes Experiment, das eine Regel in beiden Fassungen prüft — dieselbe Arbeit findet die Gewinne zudem weitgehend inhaltsunabhängig und die schädlichen Regeln im Verbund nicht kumulierend. Preprint. <https://arxiv.org/abs/2604.11088>
Why Do AI Agents Break Rules? (2026-05-29), arXiv:2608.12323 — 46 Punkte Spannweite der Befolgung über 12 Modelle bei identischer Formulierung; das Enforcement-Information-Paradox. Preprint. <https://arxiv.org/abs/2608.12323>
Asymmetric Goal Drift in Coding Agents Under Value Conflict (2026-03-03), arXiv:2603.03456 — Verstöße steigen mit Druck und mit angesammeltem Kontext. Preprint. <https://arxiv.org/abs/2603.03456>
The Verification Horizon: No Silver Bullet for Coding Agent Rewards (2026-06-24), arXiv:2606.26300 — jeder Prüfer ist ein Stellvertreter für die menschliche Absicht, nie die Absicht selbst. Preprint. <https://arxiv.org/abs/2606.26300>
Call Me A Jerk: Persuading AI to Comply with Objectionable Requests (Meincke, Shapiro, Duckworth, Mollick, Mollick & Cialdini; 2025-07-18), SSRN 5357179 — sieben Überredungsprinzipien, N = 28.000 Konversationen, GPT-4o-mini, Befolgung 33 % → 72 %. Misst das Überreden eines Modells zu Anfragen, die es normalerweise ablehnt — die Gegenrichtung zum Intakthalten der eigenen Regel. Working Paper. <https://ssrn.com/abstract=5357179>
Anthropic, prompting best practices — „tell Claude what to do instead of what not to do", gesagt unter der Steuerung des Antwort*formats*. <https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices>
Instruction hierarchy — das Konfliktproblem wird beim Training angegangen, nicht in der Prosa:
Năm tầng đều nhắm vào việc làm cho quy tắc đúng. Không tầng nào hỏi liệu nó có trụ được hay không.
Khoảng trống đó có một cái tên trong tài liệu đã công bố và có một kích thước đã được đo. Một nghiên cứu trên 238 tệp skill thực tế lập danh mục 26 khiếm khuyết lặp lại; khiếm khuyết phổ biến nhất trong tất cả — được ghi nhận ở 223 tệp, 94 % — là Rationalization Loophole: tệp đó "provides no guidance to discourage the agent from rationalizing or skipping required steps" (Hong et al. 2026). Mẫu số đằng sau tỷ lệ phần trăm đó không khớp được ngay bên trong chính nguồn; mục tham khảo nói rõ nó vênh ở đâu.
Đây là một phụ lục, không phải một tầng thứ sáu, vì cùng lý do khiến 0510 cũng vậy: nó không thêm artefact nào. Đầu ra của nó là câu chữ bên trong một tệp quy tắc và một bước bên trong một nghi thức. Phần bằng chứng nói điều đó đã được quyết định như thế nào và dựa trên cái gì.
Viết kỹ thuật tốt trả lời câu hỏi mà người đọc đã đặt ra. Trang này trả lời phản bác mà người đọc chưa nêu ra — và chỉ nêu ra khi bị áp lực.
Câu đó được viết ra để bị tấn công, và đã sống sót qua cuộc tấn công. Nó không phải một khẩu hiệu: thực hành này có một phân loại lỗi định tuyến các lỗi khác nhau tới các biện pháp khác nhau, và sẽ sai nếu bạn áp dụng biện pháp cho sai loại lỗi. Một repository nói thẳng ranh giới đó ra — với đầu ra chỉ đơn thuần sai hình dạng, "prohibition-based bulletproofing backfires" (obra/superpowers, skills/writing-skills/SKILL.md). Đó là một tay nghề, không phải một sở thích văn phong.
Hai chế độ, và chúng không mâu thuẫn nhau — chúng đo những tình huống khác nhau.
Khi không có xung đột, các chỉ dẫn viết ra được tuân theo. Một đánh giá có kiểm soát trên các tệp context cấp repository cho thấy chúng "do not generally improve task success rates, while instructions in the context files are well followed" (Evaluating AGENTS.md 2026). Xét theo đo đạc, một tệp quy tắc là một cơ chế hiệu quả hơn là một cơ chế đúng đắn: −16.58 % output token và −28.64 % wall clock (Efficiency of AGENTS.md 2026).
Hai câu đó nằm ở hai phía đối lập của một bất đồng về chi phí, nên các id là quan trọng. Bài báo "well followed" cũng chính là bài báo cáo rằng các tệp context làm tăng chi phí suy luận hơn 20 % tính trung bình, trên nhiều mô hình và nhiều agent (arXiv:2602.11988). Các con số −16.58 % / −28.64 % là của một preprint khác, đo trung vị wall clock và output token trên 10 repository và 124 pull request (arXiv:2601.20404). 0000 và 0100 trình bày cả hai con số cạnh nhau, với dấu ngược nhau; bất đồng này không được giải quyết ở đây.
Khi có xung đột, sự tuân thủ rạn vỡ — và theo một trục khác nhau trong mỗi nghiên cứu.
Điều được đưa vào
Điều đã xảy ra
Nguồn
Một điều khoản xin phép bị gỡ bỏ khỏi chỉ dẫn
Hành động ngoài phạm vi 0.0 % → 17.1 % (Claude Code, kịch bản ghép cặp, McNemar exact p = 2.4×10⁻⁴; trên các mô hình Δ 11.9–17.2 pp)
Hãy đọc lại độ chênh 46 điểm hai lần. Cùng một quy tắc, cùng câu chữ, mười hai mô hình, và kết quả trải gần nửa thang đo. Việc bạn giao công việc cho mô hình nào là một phần của kỷ luật, và không câu nào bạn viết ra thay đổi được điều đó.
Đáng đọc hai lần, vì cả ba đều là những gì một người có lý trí sẽ thử trước tiên.
1 · Nói to hơn. Cả bốn biến thể prompt trong một benchmark đều mang dòng DO NOT MODIFY THE TESTS. in đậm chữ hoa — kể cả biến thể tạo ra hơn 85 % gian lận (ImpossibleBench). Lệnh cấm đã có mặt ở đó và đã bị đọc lướt qua.
2 · Viết lại bằng câu chữ khác. Trên 11 mô hình và 830+ lượt gọi, dạng mã hóa của một ràng buộc không có ảnh hưởng đáng kể (Cliff's δ < 0.01, ±2.6 pp). Thứ chi phối là loại quy tắc: một quy tắc đi ngược lại các mặc định của mô hình thất bại 10–100 % số lần, một quy tắc thông thường trụ được ở mức 99 %+. Kết luận của chính các tác giả: "engineering effort toward compliance is better directed at constraint design than prompt formatting" (Compact Constraint Encoding).
"Hình thức không quan trọng" không phải là "câu chữ không quan trọng" — giữa hai điều đó là nguyên một trục. Nghiên cứu kia thay đổi cách một ràng buộc được mã hóa. Một nghiên cứu khác thay đổi cực tính của nó — cấm thay vì chỉ dẫn — và thấy rằng hai thứ đó quả thật tách rời nhau: trên 679 tệp quy tắc thu thập được (25,532 quy tắc) và hơn 5,000 lượt chạy Claude Code trên SWE-bench Verified, "in our data every individually beneficial rule is a negative constraint […], while every individually harmful one is a positive directive" (Guardrails Beat Guidance).
Vậy: ba phát hiện trên ba trục, và rất dễ gộp nhầm chúng vào nhau. Hình thức không có ảnh hưởng đo được; cực tính thì có; việc đi ngược lại chính các mặc định của mô hình nặng ký hơn cả hai. Hãy nhận kết quả về cực tính đúng ở tầm mà chính các tác giả của nó đưa ra — một nghiên cứu, một tập con benchmark, và cụm từ là "in our data": một phép phân loại các quy tắc mà họ thu thập được, chứ không phải một phép thử ghép cặp cùng một quy tắc viết theo cả hai cách. Cũng bài báo đó cho biết các quy tắc sinh ngẫu nhiên ngang bằng với các quy tắc do chuyên gia biên soạn (+13.8 pp theo cả hai chiều) và các quy tắc gây hại riêng lẻ không tích tụ thiệt hại một cách thấy được bên trong một tập hợp, đó là lý do để giữ phát hiện này một cách lỏng lẻo thay vì xây dựng dựa trên nó. Hướng dẫn của nhà cung cấp chỉ theo hướng ngược lại — "tell Claude what to do instead of what not to do" — nhưng chỉ giới hạn trong việc kiểm soát định dạng đầu ra, chứ không phải trong việc giữ một ranh giới (Anthropic prompting guidance).
3 · Nêu tên hình phạt. Việc nêu rõ hậu quả của việc phá quy tắc biến một nghĩa vụ thành một phép tính lợi-hại và có lợi cho hành vi vi phạm — nghịch lý thông tin cưỡng chế (Why Do AI Agents Break Rules?).
Can thiệp duy nhất làm dịch chuyển một benchmark với biên độ lớn đã không cấm mạnh tay hơn. Nó cung cấp một hành động thay thế được cho phép dành cho khoảnh khắc xung đột — về thực chất: dừng lại, chỉ ra các test sai, và giải thích vì sao chúng sai, thay vì băm nát code để chúng pass (ImpossibleBench).
Một quy tắc chỉ biết cấm sẽ để người đọc không có lối thoát nào khỏi chính tình huống đã khiến họ phá nó.
Bây giờ hãy đọc thật kỹ độ lớn của kết quả đó, vì đây là con số dễ trích dẫn nhất trên trang này và cũng dễ bị dùng sai nhất. Con số >85 % → 1 % là một mô hình trên một benchmark với một scaffold tối giản. Cùng những prompt đó trên một mô hình khác cho >85 % → 33 %; trên benchmark khó hơn thì hiệu ứng gần như biến mất, việc nới lỏng đưa một mô hình từ 54 % → 66 % và một mô hình khác từ 50 % → 55 % (ImpossibleBench). Thứ khái quát hóa được là hình dạng, không phải con số.
Bạn có thể kiểm thử một quy tắc viết ra theo đúng cách bạn kiểm thử code, và một repository làm đúng như vậy: viết kịch bản gây áp lực, xem quy tắc thất bại, viết quy tắc, xem nó trụ được, rồi bịt các lỗ hổng (obra/superpowers, skills/writing-skills/).
Bắt đầu bằng một lần chạy đối chứng không đưa cho agent bất kỳ hướng dẫn nào. Nếu lần đối chứng không bộc lộ lỗi thì dừng lại, vì không có gì để sửa. Ngược lại thì viết kịch bản gây áp lực, chạy nó với quy tắc, và nếu quy tắc bị bỏ rơi thì đọc lý do mà agent đưa ra. Lý do đó trở thành một dòng trong bảng lời biện bạch và quy tắc có thêm một hành động thay thế được cho phép. Chạy lại cho tới khi quy tắc trụ được, rồi giữ kịch bản đó làm một regression test.
Hình Kiểm thử một quy tắc viết ra theo cách bạn kiểm thử code
Lần chạy đối chứng đến trước, và đó là bước người ta hay bỏ qua. "If you didn't watch an agent fail without the skill, you don't know if the skill prevents the right failures" — và nếu lần đối chứng không bộc lộ lỗi thì chẳng có gì để sửa, nên đừng viết hướng dẫn đó (obra/superpowers, skills/writing-skills/testing-skills-with-subagents.md). Một quy tắc được viết cho một lỗi chưa từng được quan sát là thứ phổ biến nhất trong mọi tệp quy tắc, và nó tốn sự chú ý trong từng tác vụ một.
Các kịch bản trong repository đó kết hợp nhiều áp lực thay vì áp dụng một loại, và ba tổ hợp đó được đặt tên: thời gian và tiền bạc · chi phí chìm và kiệt sức · quyền uy và áp lực xã hội. Đó cũng chính là ba thứ làm hỏng các quy trình của con người, và đó là lý do điều này chuyển giao được.
Lời biện bạch được trích đúng như nó đã thực sự được đưa ra, và lời phản bác bịt đúng lối thoát cụ thể đó thay vì nhắc lại quy tắc:
| "Keep as reference, write tests first" | You'll adapt it. That's testing after. Delete means delete. || "This is just a simple question" | Questions are tasks. Check for skills. || "I remember this skill" | Skills evolve. Read current version. |
Thêm một điều nữa, vì bản thân nó cũng là một cái bẫy: một điều khoản miễn trừ không giới hạn được phạm vi. "This limit does not apply to code blocks" vẫn triệt tiêu các code block; nếu một phần đầu ra phải được miễn trừ, hãy tái cấu trúc quy tắc sao cho nó không với tới phần đó.
Một cuộc diễn tập chữa cháy là một phép thử dưới áp lực. Không ai nghi ngờ rằng người ta biết lối thoát hiểm ở đâu — cuộc diễn tập tồn tại vì biết và làm sẽ tách rời nhau trong những điều kiện nhất định. Cùng lập luận đó giải thích vì sao một checklist phẫu thuật được đọc thành tiếng, đúng vào lúc việc bỏ qua nó có vẻ hợp lý (0510 dẫn dữ liệu kết quả của nó).
Những phần chuyển giao được, không phần nào cần đến phần mềm:
Trích nguyên văn lời biện bạch. Bất kỳ quy trình nào hay bị bỏ qua — một lần bàn giao, một lần kiểm tra cuối ca, một bước bảo vệ an toàn — đều xứng đáng có một phụ lục hai cột gồm đúng những câu người ta nói khi họ bỏ qua nó, mỗi câu kèm câu trả lời của nó. Hãy viết những gì họ đã nói, không phải những gì bạn tưởng tượng họ sẽ nói.
Nêu tên phương án thay thế. Một chính sách chỉ biết cấm sẽ để ai đó mắc kẹt trong chính tình huống đã khiến việc cấm trở nên đắt đỏ. Hãy nói rõ phải làm gì thay vào đó.
Hãy diễn tập vào ngày bận rộn, chứ không phải ngày yên ắng. Một quy tắc được kiểm thử trong điều kiện bình lặng thì chưa hề được kiểm thử.
Nó không có exit code. Mọi thứ ở đây đều thuyết phục; không có gì ở đây từ chối. Nó không thay thế tầng 2 và nguy hiểm nhất là khi nó có cảm giác như một thứ thay thế được cho tầng đó — mọi bộ kiểm chứng đều là một proxy cho ý định chứ không phải chính ý định (The Verification Horizon), còn một quy tắc chỉ đọc lên nghe thuyết phục thì chẳng có proxy nào như thế cả. Nó thất bại trong im lặng, và bạn chỉ phát hiện ra sau đó, từ tầng 4.
Nó cũng không thể cho bạn biết liệu bất kỳ điều nào trong số này có đúng với công việc không phải phần mềm hay không. Mọi phép đo trên trang này đều đến từ các coding agent. Khái quát hóa nó là một lập luận, không phải một phép đo.
Và một ghi chú trung thực về nguồn nghe có vẻ mạnh nhất trong lĩnh vực này. Repository ghi chép thực hành này kỹ lưỡng nhất lại dựa nó trên một nghiên cứu về thuyết phục với N = 28,000 cuộc hội thoại, trong đó mức tuân thủ tăng từ 33 % lên 72 % (Meincke et al. 2025) — nhưng nghiên cứu đó đo việc thuyết phục một mô hình chấp nhận những yêu cầu mà bình thường nó sẽ từ chối, trên một mô hình duy nhất. Đó là bằng chứng rằng các tín hiệu thuyết phục làm mô hình dịch chuyển rất nhiều. Đó không phải bằng chứng rằng chúng giữ cho quy tắc của chính bạn nguyên vẹn dưới áp lực, và ở đây nó chỉ được dùng cho luận điểm thứ nhất.
Tất cả đều được mở ngày 2026-09-04. Trạng thái preprint được nêu ở nơi nó áp dụng; một con số không kèm phạm vi của nó là một con số sẽ bị trích dẫn sai.
From Anatomy to Smells: An Empirical Study of SKILL.md (Hong, Imani, Ahmed; 2026-07-03), arXiv:2607.01456 — 238 tệp skill được phân tích định tính, 26 lớp khiếm khuyết; Rationalization Loophole là lớp phổ biến nhất, được xếp dưới Missing Follow-Through Guards như một section còn thiếu. Đây là nguồn cho khoảng trống mà trang này mô tả và cho việc coi nó là một section chứ không phải một artefact riêng. Con số phổ biến của nó không khớp được bên trong chính nguồn: phần văn bản chạy nói rằng bộ dò được áp dụng cho "the remaining 238 SKILL.md files", Bảng IV đặt tiêu đề cho đúng cột đó là "Entire Sample (228 Skills)", và con số in ra 223 (94 %) khớp với 238, chứ không phải 228 — vốn sẽ là 97.8 %. Cả toàn văn v1 lẫn v2 đều đọc như vậy, kiểm tra ngày 2026-09-04. Do đó trang này trích 223 và 94 % đúng như đã in và không đưa ra quan điểm nào về mẫu số. Preprint. <https://arxiv.org/abs/2607.01456>
Evaluating AGENTS.md: Are Repository-Level Context Files Helpful for Coding Agents? (2026-02-12), arXiv:2602.11988 — phát hiện "well followed", trong chế độ không xung đột; cũng là nguồn của con số chi phí suy luận trên 20 %, mà 0000 và 0100 trích dẫn cạnh con số có dấu ngược lại từ arXiv:2601.20404. Preprint. <https://arxiv.org/abs/2602.11988>
On the Impact of AGENTS.md Files on the Efficiency of AI Coding Agents (2026-01-28), arXiv:2601.20404 — Δ 16.58 % output token, Δ 28.64 % wall clock. Preprint. <https://arxiv.org/abs/2601.20404>
Overeager Coding Agents: Measuring Out-of-Scope Actions on Benign Tasks (2026-05-18), arXiv:2605.18583 — 0.0 % → 17.1 % trên các kịch bản ghép cặp khi một điều khoản xin phép bị gỡ bỏ. Thuật ngữ của bài báo là overeager actions / mở rộng phạm vi; các hành vi phá hủy là ví dụ của những thứ đó, chứ không phải định nghĩa. Preprint. <https://arxiv.org/abs/2605.18583>
ImpossibleBench: Measuring LLMs' Propensity of Exploiting Test Cases (Zhong, Raghunathan, Carlini; 2025-10-23), arXiv:2510.20270 — các kết quả theo biến thể prompt, và sự kiện là mọi biến thể đều chứa lệnh cấm in đậm. Con số >85 % → 1 % là một mô hình, một benchmark, scaffold tối giản. Preprint. <https://arxiv.org/abs/2510.20270>
Compact Constraint Encoding (2026-04-08), arXiv:2604.07192 — 11 mô hình, 830+ lượt gọi; dạng mã hóa không có ảnh hưởng đáng kể (Cliff's δ < 0.01), loại ràng buộc mới là thứ chi phối. Trục loại của nó là ràng buộc phản trực giác so với thông thường, không phải cấm đoán so với chỉ dẫn — một trục khác với trục bên dưới. Preprint. <https://arxiv.org/abs/2604.07192>
Guardrails Beat Guidance: A Large-Scale Study of Rules, Skills, and Persistent Configuration for Coding Agents (Zhang, Wang, Cui, Qiu, Li, Zhu, He; 2026-04-13, sửa lại 2026-05-28), arXiv:2604.11088 — 679 tệp quy tắc thu thập được (25,532 quy tắc) và hơn 5,000 lượt chạy Claude Code trên SWE-bench Verified; các quy tắc ngẫu nhiên ngang bằng với các quy tắc do chuyên gia biên soạn (+13.8 pp cả hai chiều), và trong dữ liệu đó mọi quy tắc có lợi riêng lẻ đều là một ràng buộc phủ định còn mọi quy tắc gây hại riêng lẻ đều là một chỉ dẫn khẳng định. Hãy đọc luận điểm về cực tính đúng ở phạm vi đã nêu của nó: các tác giả viết "in our data", và đó là một phép phân loại các quy tắc đã thu thập chứ không phải một thí nghiệm ghép cặp viết lại cùng một quy tắc theo cả hai cách — cũng bài báo đó còn thấy rằng phần lợi ích phần lớn không phụ thuộc nội dung và các quy tắc gây hại không tích tụ khi đứng chung một tập. Preprint. <https://arxiv.org/abs/2604.11088>
Why Do AI Agents Break Rules? (2026-05-29), arXiv:2608.12323 — độ chênh tuân thủ 46 điểm trên 12 mô hình với cùng một cách diễn đạt; nghịch lý thông tin cưỡng chế. Preprint. <https://arxiv.org/abs/2608.12323>
Outcome-Driven Constraint Violations (2025-12-23), arXiv:2512.20798 — 0.0–62.8 % dưới áp lực KPI; không cải thiện qua các thế hệ mô hình. Preprint. <https://arxiv.org/abs/2512.20798>
Asymmetric Goal Drift in Coding Agents Under Value Conflict (2026-03-03), arXiv:2603.03456 — vi phạm tăng theo áp lực và theo context tích lũy. Preprint. <https://arxiv.org/abs/2603.03456>
Towards Understanding Specification Gaming in Reasoning Models (2026-05-04), arXiv:2605.02269 — huấn luyện reasoning bằng RL làm tăng gaming; các biện pháp giảm thiểu làm giảm, không bao giờ loại bỏ. Preprint. <https://arxiv.org/abs/2605.02269>
The Verification Horizon: No Silver Bullet for Coding Agent Rewards (2026-06-24), arXiv:2606.26300 — mọi bộ kiểm chứng đều là một proxy cho ý định của con người, không bao giờ là chính ý định đó. Preprint. <https://arxiv.org/abs/2606.26300>
Call Me A Jerk: Persuading AI to Comply with Objectionable Requests (Meincke, Shapiro, Duckworth, Mollick, Mollick & Cialdini; 2025-07-18), SSRN 5357179 — bảy nguyên tắc thuyết phục, N = 28,000 cuộc hội thoại, GPT-4o-mini, tuân thủ 33 % → 72 %. Đo việc thuyết phục một mô hình hướng tới những yêu cầu mà bình thường nó sẽ từ chối, tức là chiều ngược lại với việc giữ cho quy tắc của chính bạn nguyên vẹn. Working paper. <https://ssrn.com/abstract=5357179>
Anthropic, prompting best practices — "tell Claude what to do instead of what not to do", được nêu trong phần kiểm soát định dạng phản hồi. <https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices>
Instruction hierarchy — vấn đề xung đột được tấn công ở thời điểm huấn luyện thay vì trong văn xuôi:
Ten widely-used public skill repositories were read against the five layers this series proposes — and the most useful result is not that they cover the layers, but the three things the reading found that the layers do not describe.
The five layers of this series were derived from one organisation's practice. That is a weak foundation for a public claim. A model built from your own work will describe your own work; the question is whether it describes anybody else's, and whether the world contains things it cannot describe at all.
So: ten public repositories, each read by a separate read-only investigation on 2026-09-03, each asked the same question — which layers does this repository actually build, and what does it contain that fits none of them? The per-repository findings are the ten pages listed at the bottom. This page is what falls out when you put them side by side.
Honesty about the sample first, because it limits everything below. These ten were not drawn by a stated sampling rule. They are ten repositories that had accumulated a great deal of attention on GitHub. A search by stars at the time of reading returns further repositories above the smallest member of this set, so this is a convenience sample, not a population. Stars measure attention, not adoption or quality: the third-largest by stars in this set was last pushed four and a half months before it was read and contains a single skill.
Each layer was scored ● carries / ○ touches / · absent. The first pass was not usable: ten independent readers had applied different thresholds to the same evidence — most sharply on whether a validator a repository ships to its users counts as that repository's own gate. Five rulings were made once and applied to all ten, and four of the five layers turned out to be two tests wearing one name — two of them split into the columns below, two into the extra rows the studies record.
The layer, split into the test it actually is
carries
touches
absent
1 A standing rule file read with every job
7
1
2
2 Something that refuses this repository, wired to something that runs it
5
2
3
3a A ritual with a trigger and ordered steps
9
0
1
3b …including a stop-and-ask-a-human point
7
2
1
4 A record written before the work, about this repository
3
2
5
5a Trigger metadata engineered rather than labelled
These counts are the sum of the ten studies, one row each in the grid below, not a separate judgement. Each cell there names the files it rests on; disagree with one and the arithmetic here moves with it.
Read the two extremes together. Every repository in the set engineers its load trigger, and only three keep a record of their own intentions before acting on them — five keep none at all. The most mechanical part of the discipline is universal; the most human part is the rarest thing in the set.
One distinction is kept out of those columns on purpose. Two repositories ship a working gate to their users while running none over their own contents, and one ships a record-keeping ritual it does not itself practise. The studies record these as separate rows rather than folding them in, because a gate you hand to a stranger and a gate that guards you are different objects — and telling them apart is the single ruling that changed the most verdicts in this reading.
The columns are the seven tests above, in the same order, so a column read downwards reproduces the row it came from and a row read across is one repository's profile.
● carries · ○ touches · · absent. The repository name links to its study, where every cell names the files it rests on.
† One hedged verdict, counted here at face value: superpowers scores layer 4 on a dated plan-and-spec naming convention — no plan document was opened. ui-ux-pro-max-skill's 3b carried the same mark until 2026-09-04, when the two files that could have overturned it were read; they contain no hand-off to a person, so that cell is now settled.
‡ The distinction described just above: the repository ships this to its users while running nothing over its own contents, and each study records it as a separate 2′ or 4′ row. Three of the seventy cells carry that mark, and it is why the layer-2 column does not read as a clean pass.
Two things are visible here that the totals hide. No repository carries all seven. Four come within one — nextlevelbuilder/ui-ux-pro-max-skill, JuliusBrussee/caveman, addyosmani/agent-skills and ayghri/i-have-adhd — and they fall short on three different tests, so there is no one layer the careful repositories all skip. And the profile does not track size: one of those four ships 6.8 KB of actual content inside a 303 KB repository, while the repository holding the least prose of all, about 2.4 KB, scores three.
1. The effect of an instruction file is measurable, and several people measure it#
This series' appendix states that it found no published source measuring whether a delegation discipline works. That was wrong, and this corpus corrects it. Four of the ten measure exactly that:
skills/skill-creator/scripts/run_loop.py splits an evaluation set into train and test with a fixed seed, rewrites the skill's description in a loop, and records the original against the best found. The docstring names the reason: a train/test split to prevent overfitting.
Three arms — no instruction, a generic "be brief" instruction, and the skill — with the honest delta defined as skill against generic. The README records that an earlier version compared against the wrong arm and therefore published inflated numbers.
A retrieval-quality harness with a held-out relevance corpus.
The third of these is the one to copy. A repository publishing the correction of its own earlier, better-looking number is doing the thing this series asks of a written record, at the scale of a public project.
A fifth repository belongs beside that table rather than in it. multica-ai/andrej-karpathy-skills states in its rule file the conditions under which the rules would be judged not to be working — and nothing in the repository ever checks them; the tree holds no test, no script and no CI. Naming the falsification condition is the cheaper half of the discipline, and it is still more than the other five repositories offer. But a condition nobody runs is not a measurement, and counting it as one would be exactly the overclaim this series spends its length warning against.
2. A gate can be written in executable prose and wired to nothing#
Layer 2 asks for something that refuses when nobody is looking. Applying that test literally turned up the same failure four separate times, in repositories that otherwise take enormous care:
A pre-commit configuration defines three hooks, all scoped by a path filter to a directory that does not exist in the repository. Every hook is silently skipped. There is no CI.
A final pre-flight check of roughly sixty boxes, several written in computable terms — a counted maximum, a contrast ratio, a forbidden browser API — under the heading that it is not optional. Nothing in the repository can run them.
A release gate whose score command exits zero whatever its own verdict says; the results file, published by the author, records the gate as failed for the version that shipped. Its CI gates do run — this separate one does not, which is why the grid still scores layer 2 as carried.
And the inverse, which is sharper. ComposioHQ/awesome-claude-skills has a gate that works: a workflow with seven separate refusal paths, including a rule that every added entry must be an external link. It computes "added" as any line not present before, so a changed line counts as added — and the file it guards contains dozens of broken relative links inside the region it polices. A contribution repairing them would fail the gate's check — whether a failed check blocks the merge was not established, since the workflow's success path adds a label rather than gating one.
This series told you to build something that refuses. It did not tell you that a gate can refuse the wrong thing, or hang from nothing and still read as enforcement. Both are in Layer 2 — the mechanical gate now, because of this reading.
3. The load trigger is where this ecosystem spends its effort#
Ten out of ten treat the description that decides when a skill loads as engineered surface rather than a label — a hill-climbed field, a ranking floor in CI, an invoked/not-invoked binary held in lockstep across two runtimes, or a deliberate switch turning model invocation off and a test pinning that choice. Ten independent readings, no shared context, one result. Of everything in this series, Layer 5 is the best-supported claim.
The sixth thing, which the five layers have no room for#
Across the ten repositories, fifty-seven items of substance fit no layer. Most of them cluster into families that say more about publishing than about delegation: keeping one discipline working across six to nine different agent runtimes, packaging, licensing, translation. Those are artefacts of the sample — a published package has problems a working team does not.
One family is not like that.
Compliance engineering: making the delegate actually follow the rule, once the rule exists.
obra/superpowers ships a design manual for writing prose an agent will obey, grounded in a cited experiment, and three scenario files whose only purpose is to push an agent hard and see whether it abandons the procedure.
addyosmani/agent-skills makes a table of rationalisations — the excuse on the left, its rebuttal on the right — a required section of every skill file, enforced by its own linter.
Leonxlnx/taste-skill maintains a body of research on the failure modes of the delegate itself.
A gate stands outside the work and refuses. Compliance engineering stands inside it and argues. The five layers describe what you write down and what you enforce from outside; none of them describes the gap between an instruction that is correct and an instruction that is followed under pressure. It is a real topic, several people work on it, and this series did not have it.
It is carried into the appendix as a sixth column of the completeness matrix, not as a sixth layer — and the practice itself, with the measurements behind it, is appendix 0520. Three repositories are enough to establish that a topic exists. They are not enough to restructure a published method around it.
The instrument does not discriminate well. In the first pass, thirty-six of fifty cells scored the top value and three of the five layers never scored "absent" once. A classifier that returns the same answer for almost every input is measuring the classifier, not the world. The split tests in the table above are sharper, but they were derived after seeing the data, which is a weaker thing than a prediction made before.
No result here was pre-registered as a falsifier. Three predictions were written down before the reading — that the corpus would be mostly rituals, that it would contain no real gates, and that everything in it would fit the five layers. All three were wrong. The model survived anyway, which means it was never resting on them.
These are distribution artefacts, and that confounds the result. A published package is forced by its format to have a manifest, a load trigger and a written procedure justifying installation — precisely the tests that scored ten out of ten and nine out of ten and never varied. What it structurally cannot contain is a team's own hooks, its plan files, its internal register. So the layers that never discriminate are the ones the format guarantees, and the layer that does discriminate depends on an unrelated fact: whether the publisher happens to run CI on the package. The tempting reply — that the missing gates live in the private working repositories — is a hypothesis this reading did not test and cannot test. It is stated here as an open question, not as an answer.
And one omission is worth naming. A vendor's own managed production directory of plugins, not in this set, carries nine validating workflows, a policy schema and a frontmatter validator. Whatever else is true, "nobody builds the gate" is not.
Seven questions, one row each; the linked study behind every row names the files. Three things about the judgement columns first, because they are the ones that can be unfair.
Whose standard.Where it is weak measures against the five layers of this series, as the artefact stood on 2026-09-03. Several of these repositories never set out to satisfy them — a demonstration collection and an operating discipline are different objects — so a gap here is a mismatch with our model at least as often as a failure of theirs. It names a defect in a file, never an assessment of the people who wrote it — which is also why Publisher gives a type rather than an account name: the one thing the type answers (is a company or a single person behind this?) is real information, and the name is already in the repository path beside it, where it is an address rather than a byline. Before you use it is the practical consequence: licence, staleness, and the thing that will surprise you on installation.
A bias worth naming. Two of the sharpest entries below are defects the maintainers documented themselves, in public, against their own headline. A repository that measures nothing and keeps no honesty page cannot appear in this column at all — so the column is partly a measure of how much a project discloses. Read a thin weakness cell as we found less, never as there is less.
Where the licence line comes from. The studies read repositories, not licences, so the licence sentence in the last column was read separately on 2026-09-04 — each repository's own licence file, plus GitHub's licence field for the negative cases. It is a description of what those files say, not legal advice.
Nobody was asked. No maintainer was contacted and none has had a right of reply. Every claim is checkable against the file named here or in the study, and one of them was already wrong: see the correction in study 0605.
Four behavioural guidelines, about 2.4 KB of prose, shipped byte-identically in four host formats. Despite the plural, one skill file — and the name cites a third party's published observations, not the publisher's.
A rule file that states its own price and its own falsification test — the conditions under which it would be judged not to be working.
No gate, no ritual, no record — though it claims none of them, and the study's verdict is that nothing is over-claimed. Four copies kept in sync by prose; install commands still name a previous owner; the largest file has no inbound link.
No licence file at all, so nothing grants permission to reuse it. Last pushed 2026-04-20, four and a half months before it was read: the only stale repository here.
Nineteen self-contained skills published as a marketplace, framed by their own README as demonstration material.
A skill can carry its own validator and its own efficacy benchmark: a with-skill run against a baseline that is allowed to win.
Nothing governs the repository itself — no CI, no standing rule file, no record; by our standard, not its own, since the README frames it as demonstration material. The spec/ that same README calls the specification is a three-line redirect.
No root licence; it lives in 18 per-skill LICENSE.txt files, so the terms are invisible at the root. Read it as specimens to copy, not a discipline to adopt.
A curated design-knowledge dataset of roughly 3.5 MB with per-row provenance, plus a search CLI. The skills are the wrapper.
Retrieval quality is measured, not asserted: a held-out judgment set, rank metrics with floors, and a human sign-off fingerprinted to the code and data it approved.
The count check follows the README rather than the manifests a marketplace actually reads. With no local hooks, a contributor's first feedback arrives only after a push.
MIT. Five of the seven skills are vendored third-party work, openly marked; only one is this project's own.
A 1,637-file token-compression product in Go, TypeScript and Python across ten agent CLIs; skills/ is one delivery surface of several.
Instruction text as a metered resource — a token budget for the always-loaded core and a byte budget per skill, both with a build failure behind them.
The front page ships a headline percentage that the repository's own honesty page records as unpublished, over an empty results directory — a contradiction it documents against itself and links from under the number. Rule files route work to absolute paths on one machine.
MIT only in part — the engine-linked directories are Business Source License 1.1: self-hosted production use for your own traffic is granted, offering it to third parties as a hosted or managed service is not. Read docs/HONEST-NUMBERS.md before the README.
Twenty-five engineering-lifecycle skills, plus the CI that lints their structure and measures whether their descriptions route to the right one.
The gate is itself under test: six validators, five with their own -test.js twin, and a routing floor that may only ratchet upward.
Its own governance register has a header row and no entries. The standing rule file understates the repository's gate. Two of three hooks are not wired into the manifest.
MIT. Installing a single skill loses its references/ — a gap the README discloses with an issue link. Install the plugin, not one skill.
Thirteen instruction files about what good frontend design looks like — some 330 KB of prose, packaged as skills.
Taste stated as negative space: a catalogue of forbidden outcomes with concrete example strings, which is far more actionable than naming what to do.
A sixty-box pre-flight check headed "not optional", written in computable terms, with nothing in the repository able to run it. A specified block library the tree does not contain.
MIT. Not one date anywhere, so nothing tells you how old the opinions are; the four scripts import a dependency with no package.json, so they cannot run from a clean checkout.
A curated list of roughly 200 external skills, plus about thirty vendored copies of the platform vendor's skills and 832 generated automation files routing to the publisher's own endpoint.
The gate is a governance instrument rather than a quality one: seven refusal paths, including one barring the owner's own domain from its own list.
All 78 relative links in the App Automation section are dead, and the gate's own rule would fail a pull request repairing them. The 832 generated skills are undocumented and their generator is not in the tree.
No root licence; vendored copies carry their own. The one generated skill this reading opened in full routes to the vendor's endpoint and hands the agent a live call against SaaS accounts with no confirmation step; 826 of the 832 were not read at all.
One 6,813-byte output-style ruleset — ten rules that force the agent to lead with the next action — packaged for nine runtimes.
The instruction is measured: a blinded A/B over fourteen cases, publishing the two regressions next to the gain and conceding its own limits.
The release gate's score command exits zero whatever its own verdict says — a defect visible only because the author published the results file that records the gate as failed for the version that shipped.
MIT. It never auto-loads — model invocation is switched off on purpose and pinned by a test. You invoke it, or set the opt-in always-on flag.
On the star column. These are the figures the GitHub API returned on 2026-09-03, the day each repository was read, kept here so the overview and the studies agree. They measure attention, not adoption or quality. The rows follow the study numbering 0601–0610, which was itself assigned in descending star order — so this ordering is the star ordering, and it is not a ranking of quality. Re-checked on 2026-09-04, every count had moved by less than 0.4 % and none had changed places — which says something about how little a star count tells you from one day to the next, and nothing about which of these repositories you should use.
Zehn viel genutzte öffentliche Skill-Repositories wurden gegen die fünf Schichten dieser Reihe gelesen — und das Nützlichste daran ist nicht, dass sie die Schichten abdecken, sondern die drei Dinge, die dabei auftauchten und die die Schichten nicht beschreiben.
Die fünf Schichten dieser Reihe stammen aus der Praxis einer einzigen Organisation. Das ist ein schwaches Fundament für eine öffentliche Behauptung. Ein Modell, das aus der eigenen Arbeit gebaut wurde, beschreibt die eigene Arbeit; die Frage ist, ob es die von irgendjemand anderem beschreibt — und ob es in der Welt Dinge gibt, die es überhaupt nicht beschreiben kann.
Also: zehn öffentliche Repositories, jedes von einer eigenen, ausschließlich lesenden Untersuchung am 2026-09-03 geprüft, jedes mit derselben Frage — welche Schichten baut dieses Repository wirklich, und was enthält es, das in keine davon passt? Die Einzelbefunde stehen in den zehn Seiten am Ende dieser Seite. Hier steht, was herauskommt, wenn man sie nebeneinanderlegt.
Zuerst die Ehrlichkeit über die Stichprobe, denn sie begrenzt alles Weitere. Diese zehn wurden nicht nach einer angegebenen Stichprobenregel gezogen. Es sind zehn Repositories, die auf GitHub sehr viel Aufmerksamkeit auf sich gezogen haben. Eine Suche nach Sternen zum Zeitpunkt des Lesens liefert weitere Repositories oberhalb des kleinsten Mitglieds dieser Menge — es ist also eine Gelegenheitsstichprobe, keine Grundgesamtheit. Sterne messen Aufmerksamkeit, nicht Verbreitung und nicht Qualität: das drittgrößte Repository dieser Menge wurde zuletzt viereinhalb Monate vor dem Lesen aktualisiert und enthält einen einzigen Skill.
Jede Schicht wurde mit ● trägt / ○ berührt / · fehlt bewertet. Der erste Durchgang war nicht brauchbar: zehn unabhängige Leser hatten auf dieselbe Art von Beleg unterschiedliche Schwellen angewandt — am deutlichsten bei der Frage, ob ein Validator, den ein Repository an seine Nutzer ausliefert, als dessen eigenes Gate zählt. Fünf Regeln wurden einmal gefällt und auf alle zehn angewandt, und vier der fünf Schichten erwiesen sich als zwei Prüfungen unter einem Namen — zwei davon aufgeteilt in die Spalten unten, zwei in die zusätzlichen Zeilen, die die Untersuchungen führen.
Die Schicht, zerlegt in die Prüfung, die sie wirklich ist
trägt
berührt
fehlt
1 Eine Regeldatei, die bei jeder Aufgabe mitgelesen wird
7
1
2
2 Etwas, das dieses Repository verweigert, an einen Ausführer gehängt
5
2
3
3a Ein Ritual mit Auslöser und geordneten Schritten
9
0
1
3b …samt einem Punkt, an dem ein Mensch gefragt wird
7
2
1
4 Eine Notiz vor der Arbeit, über dieses Repository
Diese Zahlen sind die Summe der zehn Untersuchungen, je eine Zeile im Raster unten, kein getrenntes Urteil. Jede Zelle dort nennt die Dateien, auf denen sie beruht; wer einer widerspricht, verschiebt die Arithmetik hier mit.
Man lese die beiden Extreme zusammen. Jedes Repository der Menge konstruiert seinen Lade-Auslöser, und nur drei halten fest, was sie vorhatten, bevor sie es taten — fünf halten gar nichts fest. Der mechanischste Teil der Disziplin ist überall vorhanden; der menschlichste ist das Seltenste in der Menge.
Eine Unterscheidung bleibt absichtlich aus diesen Spalten heraus. Zwei Repositories liefern ein funktionierendes Gate an ihre Nutzer aus und betreiben keines über den eigenen Inhalt, und eines liefert ein Protokollritual aus, das es selbst nicht praktiziert. Die Untersuchungen führen das als eigene Zeilen und rechnen es nicht ein, denn ein Gate, das man einem Fremden in die Hand gibt, und ein Gate, das einen selbst schützt, sind verschiedene Dinge — und diese Trennung ist die eine Regel, die in dieser Lektüre die meisten Urteile verändert hat.
Die Spalten sind die sieben Tests von oben, in derselben Reihenfolge: eine Spalte von oben nach unten gelesen ergibt wieder die Zeile, aus der sie stammt, eine Zeile quer gelesen das Profil eines Repositories.
● trägt · ○ streift · · fehlt. Der Repository-Name führt zur jeweiligen Untersuchung, in der jede Zelle die Dateien nennt, auf denen sie beruht.
† Ein abgeschwächtes Urteil, hier zum Nennwert gezählt: superpowers bekommt Schicht 4 auf eine datierte Plan-und-Spec-Namenskonvention hin — kein Plandokument wurde geöffnet. Bei ui-ux-pro-max-skill trug 3b dieselbe Markierung bis zum 2026-09-04, als die zwei Dateien gelesen wurden, die das Urteil hätten kippen können; sie übergeben keine Entscheidung an einen Menschen, die Zelle ist damit geklärt.
‡ Die Unterscheidung von eben: Das Repository liefert das an seine Nutzer aus und lässt nichts über die eigenen Inhalte laufen; jede Untersuchung führt das als eigene Zeile 2′ oder 4′. Drei der siebzig Zellen tragen diese Markierung, und deshalb liest sich die Spalte zu Schicht 2 nicht als sauberes Bestehen.
Zwei Dinge werden hier sichtbar, die die Summen verbergen. Kein Repository trägt alle sieben. Vier kommen bis auf eines heran — nextlevelbuilder/ui-ux-pro-max-skill, JuliusBrussee/caveman, addyosmani/agent-skills und ayghri/i-have-adhd — und sie scheitern an drei verschiedenen Tests: Es gibt keine eine Schicht, die die sorgfältigen Repositories alle auslassen. Und das Profil hängt nicht an der Größe: Eines dieser vier liefert 6,8 KB echten Inhalt in einem 303-KB-Repository aus, während das Repository mit der wenigsten Prosa überhaupt, rund 2,4 KB, drei erreicht.
1. Die Wirkung einer Instruktionsdatei ist messbar, und mehrere Leute messen sie#
Der Anhang dieser Reihe schreibt, es sei keine veröffentlichte Quelle gefunden worden, die die Wirkung einer Delegationsdisziplin misst. Das war falsch, und dieses Korpus korrigiert es. Vier der zehn messen genau das:
skills/skill-creator/scripts/run_loop.py teilt eine Evaluationsmenge mit festem Seed in Trainings- und Testteil, schreibt die description des Skills in einer Schleife um und protokolliert das Original gegen das beste gefundene Ergebnis. Der Docstring nennt den Grund: eine Train/Test-Teilung gegen Überanpassung.
Die CI fährt eine Rangfolge über alle Skill-Beschreibungen; ein Prompt muss seinen eigenen Skill auf Platz eins bringen, oberhalb einer Schwelle, die nachzieht.
Drei Arme — keine Instruktion, eine allgemeine „fasse dich kurz"-Instruktion, der Skill —, wobei der ehrliche Unterschied als Skill gegen allgemein definiert ist. Das README hält fest, dass eine frühere Fassung gegen den falschen Arm verglich und deshalb überhöhte Zahlen veröffentlichte.
Eine Harness für Retrieval-Qualität mit zurückgehaltenem Relevanz-Korpus.
Das dritte davon ist das nachahmenswerte. Ein Repository, das die Korrektur seiner eigenen, früher besser aussehenden Zahl veröffentlicht, tut genau das, was diese Reihe von einem schriftlichen Protokoll verlangt — im Maßstab eines öffentlichen Projekts.
Ein fünftes Repository gehört neben diese Tabelle, nicht hinein. multica-ai/andrej-karpathy-skills nennt in seiner Regeldatei die Bedingungen, unter denen die Regeln als nicht wirksam gälten — und nichts im Repository prüft sie jemals; der Baum enthält keinen Test, kein Skript und keine CI. Die Falsifikationsbedingung zu benennen ist die billigere Hälfte der Disziplin, und sie ist immer noch mehr, als die übrigen fünf Repositories bieten. Aber eine Bedingung, die niemand prüft, ist keine Messung, und sie als eine zu zählen wäre genau die Überzeichnung, vor der diese Reihe auf ihrer ganzen Länge warnt.
2. Ein Gate kann in ausführbarer Prosa geschrieben und an nichts gehängt sein#
Schicht 2 verlangt etwas, das verweigert, wenn niemand hinsieht. Diese Prüfung wörtlich angewandt brachte viermal denselben Fehler zutage, in Repositories, die sonst außerordentliche Sorgfalt zeigen:
Eine pre-commit-Konfiguration definiert drei Hooks, alle über einen Pfadfilter auf ein Verzeichnis eingeschränkt, das es im Repository nicht gibt. Jeder Hook wird stillschweigend übersprungen. Es gibt keine CI.
Eine abschließende Prüfliste von rund sechzig Punkten, mehrere davon rechenbar formuliert — eine gezählte Obergrenze, ein Kontrastverhältnis, eine verbotene Browser-API — unter der Überschrift, dies sei nicht optional. Nichts im Repository kann sie ausführen.
Ein Release-Gate, dessen score-Kommando null zurückgibt, was immer sein eigenes Urteil sagt; die vom Autor veröffentlichte Ergebnisdatei verzeichnet das Gate für die ausgelieferte Version als fehlgeschlagen. Seine CI-Gates laufen sehr wohl — dieses eine nicht, deshalb steht Schicht 2 im Raster weiterhin als getragen.
Und der Umkehrfall, der schärfer ist. ComposioHQ/awesome-claude-skills hat ein Gate, das funktioniert: ein Workflow mit sieben getrennten Abweisungspfaden, darunter die Regel, dass jeder hinzugefügte Eintrag ein externer Link sein muss. „Hinzugefügt" berechnet er als jede Zeile, die vorher nicht da war — eine geänderte Zeile zählt also als hinzugefügt —, und die Datei, die er bewacht, enthält Dutzende kaputter relativer Links genau in dem Bereich, den er überwacht. Ein Beitrag, der sie repariert, würde die Prüfung des Gates nicht bestehen — ob eine nicht bestandene Prüfung den Merge blockiert, wurde nicht festgestellt: Der Erfolgspfad des Workflows setzt ein Label, statt zu blockieren.
Diese Reihe hat gesagt: bau etwas, das verweigert. Sie hat nicht gesagt, dass ein Gate das Falsche verweigern oder an nichts hängen und trotzdem wie Durchsetzung aussehen kann. Beides steht jetzt in Schicht 2 — das mechanische Gate, wegen dieser Lektüre.
3. Der Lade-Auslöser ist die Stelle, in die dieses Ökosystem seine Arbeit steckt#
Zehn von zehn behandeln die Beschreibung, die über das Laden eines Skills entscheidet, als konstruierte Oberfläche und nicht als Etikett — ein hügelauf optimiertes Feld, eine Rangschwelle in der CI, eine im Gleichschritt über zwei Laufzeiten gehaltene Unterscheidung zwischen aufgerufen und nicht aufgerufen, oder ein bewusster Schalter, der den Modellaufruf abstellt, samt einem Test, der diese Wahl festnagelt. Zehn unabhängige Lektüren, kein gemeinsamer Kontext, ein Ergebnis. Von allem in dieser Reihe ist Schicht 5 die am besten belegte Aussage.
Das sechste Ding, für das die fünf Schichten keinen Platz haben#
Über die zehn Repositories hinweg passen siebenundfünfzig Fundstücke in keine Schicht. Die meisten gruppieren sich zu Familien, die mehr über das Publizieren aussagen als über Delegation: dieselbe Disziplin über sechs bis neun verschiedene Agenten-Laufzeiten hinweg funktionsfähig halten, Paketierung, Lizenzierung, Übersetzung. Das sind Artefakte der Stichprobe — ein veröffentlichtes Paket hat Probleme, die ein arbeitendes Team nicht hat.
Eine Familie ist anders.
Compliance-Engineering: dafür sorgen, dass der Delegierte die Regel auch befolgt, wenn sie erst einmal existiert.
obra/superpowers liefert ein Handbuch dafür, Prosa so zu schreiben, dass ein Agent ihr folgt, gestützt auf ein zitiertes Experiment — und drei Szenariodateien, deren einziger Zweck es ist, einen Agenten unter Druck zu setzen und zu sehen, ob er die Prozedur fallen lässt.
addyosmani/agent-skills macht eine Tabelle von Rationalisierungen — die Ausrede links, ihre Widerlegung rechts — zum Pflichtabschnitt jeder Skill-Datei, durchgesetzt vom eigenen Linter.
Leonxlnx/taste-skill pflegt einen Bestand an Untersuchungen über die Fehlermodi des Delegierten selbst.
Ein Gate steht außerhalb der Arbeit und verweigert. Compliance-Engineering steht mittendrin und argumentiert. Die fünf Schichten beschreiben, was man aufschreibt und was man von außen erzwingt; keine davon beschreibt den Abstand zwischen einer Anweisung, die richtig ist, und einer Anweisung, der unter Druck gefolgt wird. Es ist ein echtes Thema, mehrere Leute arbeiten daran, und diese Reihe hatte es nicht.
Es wandert als sechste Spalte in die Vollständigkeitsmatrix des Anhangs, nicht als sechste Schicht — und die Praxis selbst, mit den Messungen dahinter, ist Anhang 0520. Drei Repositories genügen, um zu zeigen, dass ein Thema existiert. Sie genügen nicht, um eine veröffentlichte Methode darum herum umzubauen.
Das Instrument trennt schlecht. Im ersten Durchgang bekamen sechsunddreißig von fünfzig Zellen den Höchstwert, und drei der fünf Schichten bekamen kein einziges Mal „fehlt". Ein Klassifikator, der für fast jede Eingabe dieselbe Antwort gibt, misst den Klassifikator und nicht die Welt. Die geteilten Prüfungen in der Tabelle oben trennen schärfer, wurden aber nach Sicht der Daten abgeleitet, und das ist schwächer als eine Vorhersage davor.
Kein Ergebnis wurde vorab als Falsifikator festgelegt. Drei Vorhersagen wurden vor der Lektüre aufgeschrieben — das Korpus bestehe fast nur aus Ritualen, es enthalte keine echten Gates, und alles darin passe in die fünf Schichten. Alle drei waren falsch. Das Modell überlebte trotzdem, was heißt, dass es nie auf ihnen ruhte.
Es sind Distributionsartefakte, und das verzerrt das Ergebnis. Ein veröffentlichtes Paket ist durch sein Format gezwungen, ein Manifest, einen Lade-Auslöser und eine geschriebene Prozedur zur Rechtfertigung der Installation zu haben — genau die Prüfungen, die zehn von zehn und neun von zehn erreichten und nie variierten. Was es strukturell nicht enthalten kann, sind die Hooks eines Teams, seine Plandateien, sein internes Register. Die Schichten, die nicht trennen, sind also die, die das Format garantiert, und die Schicht, die trennt, hängt an einer unabhängigen Tatsache: ob der Herausgeber zufällig CI auf das Paket laufen lässt. Die naheliegende Erwiderung — die fehlenden Gates lägen in den privaten Arbeitsrepositories — ist eine Hypothese, die diese Lektüre nicht geprüft hat und nicht prüfen kann. Sie steht hier als offene Frage, nicht als Antwort.
Und eine Auslassung sollte benannt werden. Das verwaltete Produktionsverzeichnis für Plugins eines Herstellers, nicht in dieser Menge, trägt neun prüfende Workflows, ein Policy-Schema und einen Frontmatter-Validator. Was sonst auch gilt: „das Gate baut keiner" gilt nicht.
Sieben Fragen, je eine Zeile; die verlinkte Untersuchung hinter jeder Zeile nennt die Dateien. Drei Dinge vorab zu den Urteilsspalten, denn sie sind die, die unfair sein können.
Wessen Maßstab.Wo es schwach ist misst an den fünf Schichten dieser Reihe, im Zustand vom 2026-09-03. Mehrere dieser Repositories haben nie vorgehabt, sie zu erfüllen — eine Anschauungssammlung und eine Betriebsdisziplin sind verschiedene Dinge — eine Lücke hier ist also mindestens so oft ein Nichtpassen zu unserem Modell wie ein Versagen ihres. Sie benennt einen Mangel in einer Datei, nie eine Bewertung der Menschen, die sie geschrieben haben — deshalb nennt Herausgeber auch einen Typ und keinen Kontonamen: Was der Typ beantwortet (steht eine Firma oder eine einzelne Person dahinter?), ist echte Information, und der Name steht ohnehin daneben im Repository-Pfad, wo er eine Adresse ist und keine Verfasserzeile. Bevor man es benutzt ist die praktische Folge: Lizenz, Aktualität, und das, was bei der Installation überrascht.
Eine Verzerrung, die benannt gehört. Zwei der schärfsten Einträge unten sind Mängel, die die Betreuer selbst öffentlich dokumentiert haben, gegen die eigene Schlagzeile. Ein Repository, das nichts misst und keine Ehrlichkeitsseite führt, kann in dieser Spalte überhaupt nicht auftauchen — die Spalte misst also zum Teil, wie viel ein Projekt offenlegt. Eine dünne Schwäche-Zelle heißt wir haben weniger gefunden, nie es gibt weniger.
Woher die Lizenzangabe stammt. Die Untersuchungen haben Repositories gelesen, keine Lizenzen — der Lizenzsatz in der letzten Spalte wurde deshalb am 2026-09-04 getrennt erhoben: die jeweils eigene Lizenzdatei, dazu das Lizenzfeld von GitHub für die Negativfälle. Das beschreibt, was in diesen Dateien steht, und ist keine Rechtsberatung.
Niemand wurde gefragt. Kein Betreuer wurde kontaktiert, keiner hatte Gelegenheit zur Erwiderung. Jede Aussage ist an der hier oder in der Untersuchung genannten Datei überprüfbar, und eine war bereits falsch: siehe die Korrektur in Untersuchung 0605.
Fünfzehn Software-Prozess-Skills plus ein SessionStart-Hook, der einen Bootstrap-Skill in jede Session auf neun Agent-Harnesses injiziert.
Die stehende Regel ausliefern statt sie nur hinzulegen. Das Produkt ist die Maschinerie, die Prosa haften lässt, nicht die Prosa.
Nirgends CI. Die eine Pre-Commit-Konfiguration filtert alle drei Hooks auf evals/, ein Verzeichnis, das es nicht gibt — jeder Hook wird still übersprungen.
MIT. Sechzig Testdateien existieren, und nichts führt sie aus — die Disziplin ist Prosa; die Verdrahtung muss man selbst mitbringen.
Das Arbeitsverzeichnis eines einzelnen Entwicklers, veröffentlicht als semver-versioniertes, installierbares Plugin: 37 Skills in fünf Reifegrad-Kategorien.
Die Disziplin selbst wird als Produkt ausgeliefert — Changesets, ein Release-Prozess und je eine Doku-Seite pro Skill, die mit „It's working if…" schließt.
check-plugin-version beendet sich bei Drift mit 1, und der einzige Workflow ruft es nie auf; die Mitgliedschafts-Invarianten in CLAUDE.md halten von Hand.
MIT. Jeder Skill hat einen verpflichtenden Codex-Zwilling, der allein per Regel synchron gehalten wird. Erst die Kategorie prüfen: in-progress/ ist absichtlich öffentliche Beta.
Vier Verhaltensrichtlinien, rund 2,4 KB Prosa, byteidentisch in vier Host-Formaten ausgeliefert. Trotz des Plurals genau eine Skill-Datei — und der Name zitiert die veröffentlichten Beobachtungen einer dritten Person, nicht die des Herausgebers.
Eine Regeldatei, die ihren eigenen Preis nennt und ihren eigenen Falsifikationstest — die Bedingungen, unter denen sie als nicht wirksam gälte.
Kein Gate, kein Ritual, keine Notiz — behauptet aber auch nichts davon; das Urteil der Untersuchung lautet, dass nichts überzeichnet ist. Vier Kopien, per Prosa synchron gehalten; die Installationsbefehle nennen noch einen früheren Eigentümer; die größte Datei hat keinen eingehenden Link.
Überhaupt keine Lizenzdatei, nichts erlaubt also die Weiterverwendung. Zuletzt am 2026-04-20 gepusht, viereinhalb Monate vor der Lektüre: das einzige veraltete Repository hier.
Neunzehn eigenständige Skills, veröffentlicht als Marktplatz, vom eigenen README als Anschauungsmaterial gerahmt.
Ein Skill kann seinen eigenen Validator und seinen eigenen Wirksamkeits-Benchmark mitbringen: ein Lauf mit Skill gegen eine Baseline, die gewinnen darf.
Nichts regiert das Repository selbst — keine CI, keine stehende Regeldatei, keine Notiz; nach unserem Maßstab, nicht nach seinem, denn das README rahmt es als Anschauungsmaterial. Das spec/, das dasselbe README die Spezifikation nennt, ist eine dreizeilige Weiterleitung.
Keine Lizenz im Wurzelverzeichnis; sie liegt in 18 skill-eigenen LICENSE.txt, die Bedingungen sind an der Wurzel also unsichtbar. Als Anschauungsstücke zum Abschauen lesen, nicht als Disziplin zum Übernehmen.
Ein kuratierter Design-Wissensdatensatz von rund 3,5 MB mit Provenienz je Zeile, dazu eine Such-CLI. Die Skills sind die Hülle.
Retrieval-Qualität wird gemessen, nicht behauptet: ein zurückgehaltener Urteilsdatensatz, Rangmetriken mit Untergrenzen und eine menschliche Freigabe, die per Fingerprint an Code und Daten gebunden ist, die sie freigab.
Die Zählprüfung folgt dem README statt den Manifesten, die ein Marktplatz tatsächlich liest. Ohne lokale Hooks kommt die erste Rückmeldung für Beitragende erst nach dem Push.
MIT. Fünf der sieben Skills sind eingebundene Fremdarbeit, offen als solche markiert; nur einer ist die eigene Arbeit des Projekts.
Ein Token-Kompressionsprodukt aus 1.637 Dateien in Go, TypeScript und Python für zehn Agent-CLIs; skills/ ist eine Auslieferungsfläche von mehreren.
Instruktionstext als bewirtschaftete Ressource — ein Token-Budget für den immer geladenen Kern und ein Byte-Budget je Skill, beide mit einem Build-Fehler dahinter.
Die Startseite trägt eine Prozentzahl in der Überschrift, die die eigene Ehrlichkeitsseite des Repositories als unveröffentlicht führt, über einem leeren Ergebnisverzeichnis — ein Widerspruch, den es selbst dokumentiert und direkt unter der Zahl verlinkt. Die Regeldateien leiten Arbeit auf absolute Pfade einer einzelnen Maschine.
Nur teilweise MIT — die Engine-nahen Verzeichnisse stehen unter Business Source License 1.1: Selbst gehosteter Produktiveinsatz für eigenen Verkehr ist gestattet, das Angebot an Dritte als gehosteter oder verwalteter Dienst nicht. docs/HONEST-NUMBERS.md vor dem README lesen.
Fünfundzwanzig Skills entlang des Engineering-Lebenszyklus, dazu die CI, die ihre Struktur lintet und misst, ob ihre Beschreibungen zum richtigen Skill routen.
Das Gate steht selbst unter Test: sechs Validatoren, fünf davon mit eigenem -test.js-Zwilling, und eine Routing-Untergrenze, die nur nach oben rastet.
Das eigene Governance-Register hat eine Kopfzeile und keine Einträge. Die stehende Regeldatei untertreibt das eigene Gate. Zwei von drei Hooks sind nicht ins Manifest eingetragen.
MIT. Wer einen einzelnen Skill installiert, verliert dessen references/ — eine Lücke, die das README mit Issue-Link offenlegt. Das Plugin installieren, nicht einen Skill.
Dreizehn Instruktionsdateien darüber, wie gutes Frontend-Design aussieht — rund 330 KB Prosa, als Skills verpackt.
Geschmack als Negativraum: ein Katalog verbotener Ergebnisse mit konkreten Beispiel-Strings, was weit handlungsfähiger ist, als zu benennen, was man tun soll.
Eine Pre-Flight-Prüfung mit sechzig Kästchen, überschrieben mit „nicht optional", in berechenbarer Sprache formuliert — und nichts im Repository kann sie ausführen. Eine spezifizierte Block-Bibliothek, die der Baum nicht enthält.
MIT. Nirgends ein Datum, nichts sagt also, wie alt die Meinungen sind; die vier Skripte importieren eine Abhängigkeit ohne package.json und laufen aus einem frischen Checkout nicht.
Eine kuratierte Liste von rund 200 externen Skills, dazu etwa dreißig eingebundene Kopien der Skills des Plattformanbieters und 832 generierte Automatisierungsdateien, die auf den Endpunkt des Herausgebers routen.
Das Gate ist ein Governance-Instrument, kein Qualitätsinstrument: sieben Abweisungspfade, darunter einer, der die eigene Domain des Eigentümers aus seiner eigenen Liste heraushält.
Alle 78 relativen Links im Abschnitt „App Automation" sind tot, und die eigene Regel des Gates würde einen Pull Request, der sie repariert, durchfallen lassen. Die 832 generierten Skills sind undokumentiert, ihr Generator liegt nicht im Baum.
Keine Lizenz im Wurzelverzeichnis; die eingebundenen Kopien bringen ihre eigene mit. Der eine generierte Skill, den diese Lektüre vollständig geöffnet hat, routet auf den Endpunkt des Anbieters und übergibt dem Agenten einen Live-Aufruf gegen SaaS-Konten ohne Bestätigungsschritt; 826 der 832 wurden gar nicht gelesen.
Ein einziges Regelwerk für den Ausgabestil, 6.813 Bytes — zehn Regeln, die den Agenten zwingen, mit dem nächsten Schritt zu beginnen — für neun Laufzeiten verpackt.
Die Instruktion wird gemessen: ein verblindetes A/B über vierzehn Fälle, das die beiden Verschlechterungen neben den Gewinn stellt und die eigenen Grenzen einräumt.
Das score-Kommando des Release-Gates gibt null zurück, was immer sein eigenes Urteil sagt — ein Mangel, der nur sichtbar ist, weil der Autor die Ergebnisdatei veröffentlicht hat, die das Gate für die ausgelieferte Version als gescheitert führt.
MIT. Es lädt nie von selbst — die Modell-Invocation ist bewusst abgeschaltet und per Test festgenagelt. Man ruft es auf, oder setzt das Opt-in-Always-on-Flag.
Zur Sterne-Spalte. Das sind die Werte, die die GitHub-API am 2026-09-03 zurückgab, dem Tag, an dem jedes Repository gelesen wurde — so stimmen Übersicht und Untersuchungen überein. Sie messen Aufmerksamkeit, nicht Verbreitung und nicht Qualität. Die Zeilen folgen der Nummerierung der Untersuchungen 0601–0610, die ihrerseits nach absteigender Sternezahl vergeben wurde — diese Reihenfolge ist also die Sternereihenfolge, und sie ist keine Qualitätsrangliste. Am 2026-09-04 nachgeprüft, hatte sich jeder Wert um weniger als 0,4 % bewegt und keiner den Platz gewechselt — was etwas darüber sagt, wie wenig eine Sternezahl von einem Tag auf den anderen aussagt, und nichts darüber, welches dieser Repositories man nehmen sollte.
Mười kho skill công khai được dùng rộng rãi đã được đọc đối chiếu với năm tầng mà loạt bài này đề xuất — và kết quả hữu ích nhất không phải là chúng có phủ hết các tầng hay không, mà là ba điều mà việc đọc đó tìm ra và các tầng không mô tả được.
Năm tầng của loạt bài này được rút ra từ thực hành của một tổ chức duy nhất. Đó là một nền móng yếu cho một tuyên bố công khai. Một mô hình dựng từ công việc của chính bạn sẽ mô tả công việc của chính bạn; câu hỏi là liệu nó có mô tả được của ai khác hay không, và liệu thế giới có chứa những thứ mà nó hoàn toàn không mô tả nổi.
Vậy nên: mười kho công khai, mỗi kho được đọc bởi một cuộc điều tra chỉ-đọc riêng biệt vào ngày 2026-09-03, mỗi kho được hỏi cùng một câu — kho này thực sự xây những tầng nào, và nó chứa gì mà không khớp với tầng nào cả? Các phát hiện theo từng kho là mười trang được liệt kê ở cuối. Trang này là những gì rơi ra khi bạn đặt chúng cạnh nhau.
Trung thực về mẫu trước đã, vì nó giới hạn mọi thứ bên dưới. Mười kho này không được rút ra theo một quy tắc lấy mẫu đã nêu. Chúng là mười kho đã tích luỹ được rất nhiều sự chú ý trên GitHub. Một tìm kiếm theo số sao tại thời điểm đọc trả về thêm những kho khác cao hơn thành viên nhỏ nhất của tập này, nên đây là một mẫu thuận tiện, không phải một tổng thể. Số sao đo sự chú ý, không đo mức độ được dùng hay chất lượng: kho lớn thứ ba theo số sao trong tập này có lần push cuối cách thời điểm nó được đọc bốn tháng rưỡi và chứa đúng một skill.
Mỗi tầng được chấm ● gánh vác / ○ chạm tới / · vắng mặt. Lượt đọc đầu tiên không dùng được: mười người đọc độc lập đã áp những ngưỡng khác nhau lên cùng một bằng chứng — rõ nhất là ở chỗ liệu một validator mà một kho giao cho người dùng của nó có được tính là cổng kiểm soát của chính kho đó hay không. Năm phán quyết đã được đưa ra một lần và áp cho cả mười kho, và bốn trong năm tầng hoá ra là hai phép thử đội chung một cái tên — hai trong số đó tách thành các cột bên dưới, hai tách thành những hàng phụ mà các nghiên cứu ghi lại.
Tầng, tách ra thành phép thử mà nó thực sự là
gánh vác
chạm tới
vắng mặt
1 Một tệp quy tắc thường trực được đọc cùng mọi công việc
7
1
2
2 Thứ gì đó từ chối chính kho này, được nối với thứ gì đó chạy nó
5
2
3
3a Một nghi thức có trigger và các bước theo thứ tự
9
0
1
3b …bao gồm cả một điểm dừng-lại-và-hỏi-một-con-người
7
2
1
4 Một bản ghi được viết trước khi làm, về chính kho này
3
2
5
5a Metadata trigger được thiết kế kỹ chứ không chỉ dán nhãn
10
0
0
5b Chỉ mục, ngày tháng, khử trùng lặp, lưu trữ — thực sự được duy trì
5
5
0
Các con số này là tổng của mười nghiên cứu, mỗi nghiên cứu một hàng trong lưới bên dưới, chứ không phải một phán quyết riêng. Mỗi ô ở đó nêu tên những tệp mà nó dựa vào; hãy bất đồng với một ô và số học ở đây sẽ dịch chuyển theo.
Hãy đọc hai thái cực cùng nhau. Mọi kho trong tập này đều thiết kế kỹ trigger nạp của nó, và chỉ ba kho giữ một bản ghi về ý định của chính mình trước khi hành động theo chúng — năm kho không giữ gì cả. Phần máy móc nhất của kỷ luật thì phổ quát; phần con người nhất lại là thứ hiếm nhất trong tập này.
Một phân biệt được cố ý giữ ở ngoài các cột đó. Hai kho giao một cổng kiểm soát hoạt động được cho người dùng của họ trong khi không chạy cổng nào trên chính nội dung của mình, và một kho giao một nghi thức ghi chép mà bản thân nó không thực hành. Các nghiên cứu ghi những trường hợp này thành các hàng riêng thay vì gộp chúng vào, bởi một cổng bạn trao cho người lạ và một cổng canh giữ bạn là hai đối tượng khác nhau — và phân biệt được chúng là phán quyết duy nhất đã thay đổi nhiều kết luận nhất trong lần đọc này.
Các cột là bảy phép thử ở trên, theo đúng thứ tự đó, nên một cột đọc theo chiều dọc sẽ tái tạo lại hàng mà nó xuất phát, còn một hàng đọc theo chiều ngang là hồ sơ của một kho.
● gánh vác · ○ chạm tới · · vắng mặt. Tên kho liên kết tới nghiên cứu của nó, nơi mỗi ô nêu tên những tệp mà nó dựa vào.
† Một phán quyết có dè dặt, ở đây được tính theo đúng giá trị bề mặt: superpowers đạt điểm tầng 4 nhờ một quy ước đặt tên plan-and-spec có ghi ngày — không tài liệu kế hoạch nào được mở ra. Ô 3b của ui-ux-pro-max-skill mang cùng dấu này cho tới 2026-09-04, khi hai tệp có thể lật ngược nó được đọc; chúng không chứa bất kỳ chuyển giao nào cho một con người, nên ô đó nay đã ngã ngũ.
‡ Sự phân biệt vừa mô tả ngay ở trên: kho giao thứ này cho người dùng của nó trong khi không chạy gì trên chính nội dung của mình, và mỗi nghiên cứu ghi lại điều đó thành một hàng 2′ hoặc 4′ riêng. Ba trong bảy mươi ô mang dấu đó, và đó là lý do cột tầng 2 không đọc ra như một lượt đạt sạch.
Có hai điều nhìn thấy được ở đây mà các con số tổng che mất. Không kho nào gánh đủ cả bảy. Bốn kho chỉ thiếu một — nextlevelbuilder/ui-ux-pro-max-skill, JuliusBrussee/caveman, addyosmani/agent-skills và ayghri/i-have-adhd — và chúng hụt ở ba phép thử khác nhau, nên không có một tầng nào mà các kho cẩn thận đều bỏ qua. Và hồ sơ không đi theo kích thước: một trong bốn kho đó giao 6.8 KB nội dung thực sự bên trong một kho 303 KB, trong khi kho chứa ít văn xuôi nhất trong tất cả, khoảng 2.4 KB, đạt ba điểm.
1. Tác dụng của một tệp chỉ dẫn là đo được, và vài người đang đo nó#
Phụ lục của loạt bài này nói rằng nó không tìm thấy nguồn công bố nào đo xem một kỷ luật uỷ thác có hoạt động hay không. Điều đó là sai, và kho ngữ liệu này sửa lại. Bốn trong mười kho đo đúng điều đó:
skills/skill-creator/scripts/run_loop.py chia một tập đánh giá thành train và test với một seed cố định, viết lại description của skill trong một vòng lặp, và ghi lại bản gốc đối chiếu với bản tốt nhất tìm được. Docstring nêu rõ lý do: một phép chia train/test để tránh overfitting.
CI chạy một bộ đo xếp hạng trên toàn bộ các description của skill; một prompt phải xếp chính skill của nó lên đầu, trên một mức sàn chỉ được nhích lên.
Ba nhánh — không có chỉ dẫn, một chỉ dẫn chung chung "be brief", và skill — với delta trung thực được định nghĩa là skill so với bản chung chung. README ghi lại rằng một phiên bản trước đó đã so với sai nhánh và vì thế đã công bố những con số bị thổi phồng.
Một bộ đo chất lượng truy hồi với một kho ngữ liệu độ-liên-quan được giữ riêng.
Cái thứ ba trong số này là cái đáng sao chép. Một kho công bố phần đính chính cho con số trước đó của chính nó, con số trông đẹp hơn, đang làm đúng điều mà loạt bài này đòi hỏi ở một bản ghi được viết ra, ở quy mô của một dự án công khai.
Một kho thứ năm thuộc về chỗ bên cạnh bảng đó chứ không phải trong bảng. multica-ai/andrej-karpathy-skills nêu trong tệp quy tắc của nó những điều kiện mà theo đó các quy tắc sẽ bị phán là không hoạt động — và không có gì trong kho từng kiểm tra chúng; cây thư mục không có test, không có script và không có CI. Nêu tên điều kiện phản nghiệm là nửa rẻ hơn của kỷ luật, và nó vẫn nhiều hơn những gì năm kho còn lại đưa ra. Nhưng một điều kiện không ai chạy thì không phải là một phép đo, và tính nó như một phép đo sẽ đúng là kiểu tuyên bố quá đà mà loạt bài này dành cả độ dài của mình để cảnh báo.
2. Một cổng kiểm soát có thể được viết bằng văn xuôi khả thi hành mà không nối vào đâu cả#
Tầng 2 đòi hỏi thứ gì đó biết từ chối khi không ai nhìn. Áp dụng phép thử đó theo nghĩa đen đã lôi ra cùng một lỗi bốn lần riêng biệt, ở những kho mà ngoài chuyện đó thì cực kỳ cẩn thận:
Một cấu hình pre-commit định nghĩa ba hook, tất cả đều bị giới hạn bằng một bộ lọc đường dẫn tới một thư mục không tồn tại trong kho. Mọi hook đều bị bỏ qua trong im lặng. Không có CI.
Một bản kiểm tra pre-flight cuối cùng gồm khoảng sáu mươi ô đánh dấu, vài ô viết bằng thuật ngữ tính toán được — một mức tối đa đếm được, một tỷ lệ tương phản, một API trình duyệt bị cấm — dưới tiêu đề rằng nó không phải tuỳ chọn. Không có gì trong kho có thể chạy chúng.
Một cổng phát hành có lệnh score thoát ra bằng không bất kể phán quyết của chính nó nói gì; tệp kết quả, do chính tác giả công bố, ghi lại rằng cổng đã fail đối với phiên bản đã được phát hành. Các cổng CI của nó thì có chạy — cổng riêng này thì không, và đó là lý do lưới vẫn chấm tầng 2 là được gánh vác.
Và điều ngược lại, vốn sắc hơn. ComposioHQ/awesome-claude-skills có một cổng hoạt động thật: một workflow với bảy đường từ chối riêng biệt, trong đó có quy tắc rằng mọi mục được thêm vào phải là một liên kết ra ngoài. Nó tính "được thêm" là bất kỳ dòng nào trước đó không có, nên một dòng bị thay đổi cũng được tính là thêm vào — và tệp mà nó canh giữ chứa hàng chục liên kết tương đối bị hỏng ngay bên trong vùng nó tuần tra. Một đóng góp sửa chúng sẽ trượt phép kiểm tra của cổng — việc một phép kiểm tra trượt có chặn merge hay không thì chưa được xác lập, bởi đường thành công của workflow gắn một nhãn chứ không chặn cái nào.
Loạt bài này đã bảo bạn xây một thứ biết từ chối. Nó đã không nói với bạn rằng một cổng có thể từ chối nhầm thứ, hoặc treo lơ lửng không nối vào đâu mà vẫn đọc ra như là sự cưỡng chế. Cả hai điều đó giờ đều nằm trong Tầng 2 — cổng kiểm soát máy móc, nhờ lần đọc này.
3. Trigger nạp là nơi hệ sinh thái này dồn công sức#
Mười trên mười kho đối xử với phần description quyết định khi nào một skill được nạp như một bề mặt được thiết kế kỹ chứ không phải một cái nhãn — một trường được leo-đồi, một mức sàn xếp hạng trong CI, một biến nhị phân được-gọi/không-được-gọi giữ đồng bộ chặt qua hai runtime, hoặc một công tắc cố ý tắt việc model tự gọi cùng một test ghim lựa chọn đó lại. Mười lần đọc độc lập, không ngữ cảnh chung, một kết quả. Trong tất cả những gì loạt bài này nói, Tầng 5 là tuyên bố được hậu thuẫn tốt nhất.
Trên khắp mười kho, năm mươi bảy hạng mục đáng kể không khớp với tầng nào. Phần lớn chúng gom lại thành những nhóm nói về việc xuất bản nhiều hơn là về uỷ thác: giữ cho một kỷ luật hoạt động được trên sáu đến chín runtime agent khác nhau, đóng gói, cấp phép, dịch thuật. Đó là những hiện vật của mẫu — một package được xuất bản có những vấn đề mà một đội đang làm việc thì không.
Có một nhóm không như thế.
Kỹ thuật tuân thủ: làm cho bên được uỷ thác thực sự tuân theo quy tắc, một khi quy tắc đã tồn tại.
obra/superpowers giao một cẩm nang thiết kế để viết loại văn xuôi mà một agent sẽ tuân theo, dựa trên một thí nghiệm được trích dẫn, và ba tệp kịch bản mà mục đích duy nhất là ép một agent thật mạnh và xem nó có bỏ rơi quy trình hay không.
addyosmani/agent-skills biến một bảng các lý do biện hộ — cái cớ ở bên trái, phần bác bỏ nó ở bên phải — thành một mục bắt buộc của mọi tệp skill, được cưỡng chế bởi linter của chính nó.
Leonxlnx/taste-skill duy trì cả một khối nghiên cứu về các kiểu thất bại của chính bên được uỷ thác.
Một cổng đứng bên ngoài công việc và từ chối. Kỹ thuật tuân thủ đứng bên trong nó và tranh luận. Năm tầng mô tả những gì bạn viết ra và những gì bạn cưỡng chế từ bên ngoài; không tầng nào mô tả khoảng cách giữa một chỉ dẫn đúng và một chỉ dẫn được tuân theo dưới áp lực. Đó là một chủ đề có thật, vài người đang làm việc trên nó, và loạt bài này đã không có nó.
Nó được mang vào phụ lục như một cột thứ sáu của ma trận tính đầy đủ, chứ không phải như một tầng thứ sáu — và bản thân thực hành đó, cùng các phép đo đằng sau nó, là phụ lục 0520. Ba kho là đủ để xác lập rằng một chủ đề tồn tại. Chúng không đủ để tái cấu trúc một phương pháp đã công bố xoay quanh nó.
Công cụ đo không phân biệt tốt. Ở lượt đầu, ba mươi sáu trong năm mươi ô đạt giá trị cao nhất và ba trong năm tầng chưa từng bị chấm "vắng mặt" lần nào. Một bộ phân loại trả về cùng một câu trả lời cho gần như mọi đầu vào là đang đo chính bộ phân loại, không phải đo thế giới. Các phép thử đã tách trong bảng ở trên thì sắc hơn, nhưng chúng được rút ra sau khi đã nhìn thấy dữ liệu, và đó là thứ yếu hơn một dự đoán được đưa ra từ trước.
Không kết quả nào ở đây được đăng ký trước như một phép phản nghiệm. Ba dự đoán đã được viết ra trước khi đọc — rằng kho ngữ liệu sẽ chủ yếu là nghi thức, rằng nó sẽ không chứa cổng kiểm soát thật nào, và rằng mọi thứ trong đó sẽ khớp với năm tầng. Cả ba đều sai. Mô hình dù sao vẫn sống sót, nghĩa là nó chưa bao giờ tựa vào chúng.
Đây là những hiện vật của việc phân phối, và điều đó gây nhiễu cho kết quả. Một package được xuất bản bị chính định dạng của nó buộc phải có một manifest, một trigger nạp và một quy trình được viết ra để biện minh cho việc cài đặt — chính xác là những phép thử đã đạt mười trên mười và chín trên mười và không hề biến thiên. Thứ mà về mặt cấu trúc nó không thể chứa là các hook của chính một đội, các tệp kế hoạch của đội đó, sổ đăng ký nội bộ của đội đó. Vậy nên những tầng không bao giờ phân biệt được lại chính là những tầng mà định dạng bảo đảm sẵn, còn tầng thực sự phân biệt được thì phụ thuộc vào một sự kiện chẳng liên quan: liệu nhà xuất bản có tình cờ chạy CI trên package hay không. Câu đáp lại đầy hấp dẫn — rằng những cổng còn thiếu nằm trong các kho làm việc riêng tư — là một giả thuyết mà lần đọc này đã không kiểm chứng và không thể kiểm chứng. Nó được nêu ở đây như một câu hỏi mở, không phải như một câu trả lời.
Và có một chỗ bỏ sót đáng nêu tên. Thư mục plugin production do chính một nhà cung cấp quản lý, không nằm trong tập này, mang chín workflow kiểm định, một schema chính sách và một validator frontmatter. Dù còn điều gì khác là đúng, "không ai xây cổng cả" thì không đúng.
Bảy câu hỏi, mỗi kho một hàng; nghiên cứu được liên kết đằng sau mỗi hàng nêu tên các tệp. Trước hết là ba điều về các cột đánh giá, bởi chúng là những cột có thể trở nên bất công.
Tiêu chuẩn của ai.Nó yếu ở đâu đo theo năm tầng của loạt bài này, ở trạng thái mà hiện vật đó đứng vào ngày 2026-09-03. Vài kho trong số này chưa bao giờ đặt mục tiêu thoả mãn chúng — một bộ sưu tập trình diễn và một kỷ luật vận hành là hai đối tượng khác nhau — nên một khoảng trống ở đây là sự lệch pha với mô hình của chúng tôi ít nhất cũng thường xuyên như là một thất bại của họ. Nó nêu tên một khiếm khuyết trong một tệp, không bao giờ là một đánh giá về những người đã viết ra nó — đó cũng là lý do Nhà xuất bản đưa ra một kiểu chứ không phải một tên tài khoản: điều duy nhất mà cái kiểu đó trả lời (đằng sau cái này là một công ty hay một cá nhân?) là thông tin thật, còn cái tên thì đã nằm sẵn trong đường dẫn kho ngay bên cạnh, nơi nó là một địa chỉ chứ không phải một dòng đề tên tác giả. Trước khi bạn dùng nó là hệ quả thực tiễn: giấy phép, mức độ cũ kỹ, và cái sẽ làm bạn bất ngờ khi cài đặt.
Một thiên lệch đáng nêu tên. Hai trong số các mục sắc sảo nhất bên dưới là những khiếm khuyết mà chính người bảo trì đã ghi lại, công khai, đi ngược lại tiêu đề giật gân của chính họ. Một kho không đo gì cả và không giữ trang trung thực nào thì hoàn toàn không thể xuất hiện trong cột này — nên cột này một phần là thước đo xem một dự án tiết lộ đến đâu. Hãy đọc một ô điểm-yếu mỏng là chúng tôi tìm thấy ít hơn, không bao giờ là có ít hơn.
Dòng về giấy phép đến từ đâu. Các nghiên cứu đọc kho, không đọc giấy phép, nên câu về giấy phép ở cột cuối được đọc riêng vào ngày 2026-09-04 — tệp giấy phép của chính mỗi kho, cộng với trường licence của GitHub cho các trường hợp phủ định. Đó là mô tả những gì các tệp đó nói, không phải tư vấn pháp lý.
Không ai được hỏi. Không người bảo trì nào được liên hệ và không ai có quyền hồi đáp. Mọi tuyên bố đều kiểm chứng được đối chiếu với tệp được nêu tên ở đây hoặc trong nghiên cứu, và một trong số đó thì đã sai rồi: xem phần đính chính trong nghiên cứu 0605.
Thư mục agent đang dùng của một kỹ sư, phát hành thành một plugin cài được có đánh phiên bản semver: 37 skill trong năm nhóm độ chín.
Bản thân kỷ luật được giao như một sản phẩm — changeset, một quy trình phát hành, và một trang tài liệu cho mỗi skill khép lại bằng "It's working if…".
check-plugin-version thoát 1 khi có lệch và workflow duy nhất không bao giờ gọi nó; các bất biến về thành viên trong CLAUDE.md được giữ bằng tay.
MIT. Mọi skill đều có một bản sinh đôi Codex bắt buộc, được giữ đồng bộ chỉ bằng quy tắc. Hãy kiểm tra nhóm trước: in-progress/ là public beta một cách có chủ ý.
Bốn hướng dẫn hành vi, khoảng 2.4 KB văn xuôi, được giao giống hệt từng byte trong bốn định dạng host. Bất chấp cái tên số nhiều, chỉ có một tệp skill — và cái tên đó trích dẫn những quan sát đã công bố của một bên thứ ba, không phải của nhà xuất bản.
Một tệp quy tắc nêu ra cái giá của chính nó và phép phản nghiệm của chính nó — những điều kiện mà theo đó nó sẽ bị phán là không hoạt động.
Không cổng, không nghi thức, không bản ghi — dù nó cũng chẳng tuyên bố có cái nào, và phán quyết của nghiên cứu là không có gì bị tuyên bố quá đà. Bốn bản sao được giữ đồng bộ bằng văn xuôi; các lệnh cài đặt vẫn nêu tên một chủ sở hữu trước đó; tệp lớn nhất không có liên kết nào dẫn vào.
Hoàn toàn không có tệp giấy phép, nên không có gì cấp quyền tái sử dụng nó. Lần push cuối 2026-04-20, bốn tháng rưỡi trước khi nó được đọc: kho cũ kỹ duy nhất ở đây.
Mười chín skill tự chứa được xuất bản như một marketplace, được chính README của chúng đóng khung là tài liệu trình diễn.
Một skill có thể mang theo validator của chính nó và benchmark hiệu quả của chính nó: một lượt chạy có-skill đối chiếu với một baseline được phép thắng.
Chẳng có gì quản trị chính bản thân kho — không CI, không tệp quy tắc thường trực, không bản ghi; theo tiêu chuẩn của chúng tôi, không phải của nó, vì README đóng khung nó là tài liệu trình diễn. Thư mục spec/ mà chính README đó gọi là bản đặc tả thì là một chuyển hướng ba dòng.
Không có giấy phép ở gốc; nó nằm trong 18 tệp LICENSE.txt theo từng skill, nên các điều khoản là vô hình ở thư mục gốc. Hãy đọc nó như những mẫu vật để sao chép, không phải một kỷ luật để áp dụng.
Một tập dữ liệu tri thức thiết kế được tuyển chọn, khoảng 3.5 MB, có xuất xứ theo từng dòng, cộng một CLI tìm kiếm. Các skill chỉ là lớp bọc.
Chất lượng truy hồi được đo chứ không phải được khẳng định suông: một tập phán định giữ riêng, các chỉ số xếp hạng có mức sàn, và một chữ ký duyệt của con người được lấy vân tay gắn với chính mã và dữ liệu mà nó phê duyệt.
Phép kiểm đếm đi theo README chứ không theo các manifest mà một marketplace thực sự đọc. Không có hook cục bộ, phản hồi đầu tiên của người đóng góp chỉ đến sau khi đã push.
MIT. Năm trong bảy skill là công việc của bên thứ ba được vendor vào, có đánh dấu công khai; chỉ một skill là của chính dự án này.
Một sản phẩm nén token gồm 1,637 tệp bằng Go, TypeScript và Python trên mười agent CLI; skills/ chỉ là một trong nhiều bề mặt giao hàng.
Văn bản chỉ dẫn như một tài nguyên có đo đếm — một ngân sách token cho phần lõi luôn-được-nạp và một ngân sách byte cho mỗi skill, cả hai đều có một lỗi build đứng đằng sau.
Trang đầu giao một con số phần trăm giật tít mà trang trung thực của chính kho ghi lại là chưa được công bố, trên một thư mục kết quả rỗng — một mâu thuẫn mà nó tự ghi lại chống lại chính mình và liên kết tới ngay dưới con số đó. Các tệp quy tắc định tuyến công việc tới những đường dẫn tuyệt đối trên một máy.
Chỉ MIT một phần — các thư mục gắn với engine dùng Business Source License 1.1: tự vận hành production cho lưu lượng của chính bạn thì được cấp phép, cung cấp nó cho bên thứ ba như một dịch vụ được host hay được quản lý thì không. Hãy đọc docs/HONEST-NUMBERS.md trước README.
Hai mươi lăm skill theo vòng đời kỹ thuật, cộng phần CI lint cấu trúc của chúng và đo xem các description của chúng có định tuyến tới đúng skill hay không.
Bản thân cái cổng cũng đang được kiểm thử: sáu validator, năm trong số đó có bản sinh đôi -test.js riêng, và một mức sàn định tuyến chỉ được phép nhích lên.
Sổ đăng ký quản trị của chính nó có một hàng tiêu đề và không có mục nào. Tệp quy tắc thường trực nói nhẹ đi về cái cổng của kho. Hai trong ba hook không được nối vào manifest.
MIT. Cài một skill đơn lẻ sẽ mất thư mục references/ của nó — một lỗ hổng mà README tiết lộ kèm một liên kết issue. Hãy cài plugin, đừng cài một skill.
Mười ba tệp chỉ dẫn về việc thiết kế frontend tốt trông như thế nào — chừng 330 KB văn xuôi, đóng gói thành các skill.
Gu thẩm mỹ được nêu ra như không gian âm: một danh mục các kết quả bị cấm kèm những chuỗi ví dụ cụ thể, và điều đó khả thi hành hơn nhiều so với việc nêu tên cái nên làm.
Một bản kiểm tra pre-flight sáu mươi ô mang tiêu đề "không phải tuỳ chọn", viết bằng thuật ngữ tính toán được, mà không có gì trong kho có thể chạy nó. Một thư viện block được đặc tả nhưng cây thư mục không chứa.
MIT. Không một ngày tháng nào ở bất cứ đâu, nên chẳng có gì cho bạn biết các quan điểm đó cũ đến mức nào; bốn script import một dependency mà không có package.json, nên chúng không chạy được từ một bản checkout sạch.
Một danh sách tuyển chọn khoảng 200 skill bên ngoài, cộng chừng ba mươi bản sao vendor các skill của nhà cung cấp nền tảng, và 832 tệp tự động hoá được sinh ra định tuyến tới endpoint của chính nhà xuất bản.
Cổng là một công cụ quản trị chứ không phải một công cụ chất lượng: bảy đường từ chối, trong đó có một đường cấm chính tên miền của chủ sở hữu khỏi danh sách của chính họ.
Cả 78 liên kết tương đối trong mục App Automation đều chết, và chính quy tắc của cổng sẽ đánh trượt một pull request sửa chúng. 832 skill được sinh ra thì không có tài liệu và bộ sinh của chúng không nằm trong cây thư mục.
Không có giấy phép ở gốc; các bản sao vendor mang giấy phép riêng của chúng. Skill được sinh ra duy nhất mà lần đọc này mở ra đầy đủ thì định tuyến tới endpoint của nhà cung cấp và trao cho agent một lời gọi trực tiếp lên các tài khoản SaaS mà không có bước xác nhận nào; 826 trong số 832 hoàn toàn không được đọc.
Một bộ quy tắc output-style dài 6,813 byte — mười quy tắc buộc agent phải mở đầu bằng hành động tiếp theo — đóng gói cho chín runtime.
Chỉ dẫn được đo: một thử nghiệm A/B mù trên mười bốn ca, công bố hai trường hợp thoái lui bên cạnh phần cải thiện và thừa nhận giới hạn của chính nó.
Lệnh score của cổng phát hành thoát ra bằng không bất kể phán quyết của chính nó nói gì — một khiếm khuyết chỉ nhìn thấy được vì tác giả đã công bố tệp kết quả ghi lại rằng cổng đã fail đối với phiên bản đã được phát hành.
MIT. Nó không bao giờ tự nạp — việc model tự gọi bị tắt có chủ ý và được ghim bằng một test. Bạn tự gọi nó, hoặc bật cờ always-on theo kiểu opt-in.
Về cột số sao. Đây là những con số mà GitHub API trả về vào ngày 2026-09-03, ngày mỗi kho được đọc, được giữ lại ở đây để phần tổng quan và các nghiên cứu khớp nhau. Chúng đo sự chú ý, không đo mức độ được dùng hay chất lượng. Các hàng theo thứ tự đánh số nghiên cứu 0601–0610, vốn tự nó được gán theo thứ tự sao giảm dần — nên thứ tự này chính là thứ tự theo sao, và nó không phải một bảng xếp hạng chất lượng. Kiểm lại vào ngày 2026-09-04, mọi con số đều đã dịch chuyển ít hơn 0.4 % và không con số nào đổi vị trí — điều đó nói lên đôi điều về chuyện một số đếm sao cho bạn biết ít ỏi đến thế nào từ ngày này sang ngày khác, và chẳng nói gì về việc bạn nên dùng kho nào trong số này.
It looks like a skill collection and is really a delivery mechanism: fifteen general-purpose software-process skills, plus a SessionStart hook that injects a bootstrap skill into every session on nine agent harnesses, so the skills fire whether or not anyone remembers them. The interesting engineering is not in the skills; it is in the machinery that makes prose stick. (The star count is a dated observation. It measures attention, not quality, and is not a rank here.)
195 tracked blobs. Fifteen skill directories as skills/<name>/SKILL.md — among them brainstorming, writing-plans, executing-plans, subagent-driven-development, test-driven-development, systematic-debugging, requesting-code-review, verification-before-completion, writing-skills, using-superpowers. A skill directory may carry reference files, prompt files for sub-agents, and executables.
Around a fifth of the tree is portability plumbing: nine harness-adapter manifests at the root (.claude-plugin/, .codex-plugin/, .cursor-plugin/, .devin-plugin/, .kimi-plugin/, .hermes-plugin/, .opencode/, .pi/, .agents/, gemini-extension.json). Beyond that: 60 files under tests/, 43 under docs/ — split into docs/superpowers/plans/ and docs/superpowers/specs/, all date-prefixed YYYY-MM-DD — and hooks/ with the session-start injector. AGENTS.md and GEMINI.md are one-line pointers to CLAUDE.md.
Versioning and dating are real; the "index" is a one-entry manifest plus README prose, and there is no archive
Layer 1 is the strongest implementation in the set, because it is machinery rather than a convention. hooks/hooks.json registers a SessionStart hook matching startup|clear|compact; it runs hooks/run-hook.cmd session-start, which cats skills/using-superpowers/SKILL.md, escapes it for JSON and emits it wrapped in <EXTREMELY_IMPORTANT>\nYou have superpowers. The script branches three ways on environment variables — additional_context for Cursor, hookSpecificOutput.additionalContext for Claude Code, top-level additionalContext for Copilot CLI and the SDK standard — with a comment noting that Claude Code reads both fields without deduplicating, so exactly one must be emitted. The injected content passes the membership test for a standing rule: one rule (invoke relevant skills before any response or action), a priority order, and a precedence clause putting user instructions in CLAUDE.md and AGENTS.md above skills.
Layer 2 is where the raw record and the strict reading agree on touches, but only just. Layer 2 asks for something that refuses this repository's own contents and is wired to something that runs it. The refusing artefacts are genuinely there: 60 files under tests/, including node suites, pytest under tests/hermes/, some twenty bash scripts, and scripts/lint-shell.sh with a test of its own. What is missing is the wiring. There is no .github/workflows/ on main or dev — enumerating .github on both returns only FUNDING.yml, ISSUE_TEMPLATE/ and PULL_REQUEST_TEMPLATE.md — and no other CI config. The one declarative gate, .pre-commit-config.yaml, defines three hooks all scoped files: ^evals/.*\.py$, and no evals/ directory exists, so all three are silently skipped. That is a more interesting failure than an absent gate: a config that looks like enforcement, passes review, and refuses nothing. docs/testing.md says plainly that the eval tier is "not part of CI today"; the tree says the same of everything else.
One ruling this series applies elsewhere does not bite here. We look for repositories that ship a validator to strangers while enforcing nothing on themselves; superpowers ships discipline mostly as prose, and its shipped executables under skills/subagent-driven-development/scripts/ were seen only as tree paths, so that asymmetry is not established.
Persuasion theory as a documented authoring method.skills/writing-skills/persuasion-principles.md is a design manual for making a model actually obey prose, grounded in a cited experiment: Meincke et al. (2025), seven persuasion principles across N=28,000 AI conversations, compliance more than doubling from 33% to 72%. It turns Authority, Commitment, Scarcity and Social Proof into diff-style rules for skill text — Authority replaces "Consider writing tests first when feasible" with "Write code before test? Delete it. Start over. No exceptions."; Commitment requires the agent to announce which skill it is using. The technique is visibly applied downstream: the injected bootstrap opens at maximum volume, and skills/systematic-debugging/CREATION-LOG.md has a "Bulletproofing Elements" section listing the phrasings chosen and why ("ALWAYS"/"NEVER" rather than "should"). The five layers have no place for this because they all classify artefacts by what they do to an agent; this one constrains the author of those artefacts.
Adversarial pressure tests.skills/systematic-debugging/test-pressure-1.md through -3.md are scenarios handed to an agent to see whether it abandons a skill under duress. The first insists the scenario is real and a choice must be made, stacks financial and authority pressure — revenue loss quoted per minute, a manager demanding an immediate fix — prices the honest cost of following the discipline against a five-minute symptomatic patch, and forces a lettered choice. skills/writing-skills/testing-skills-with-subagents.md generalises the practice; a quieter sibling is tests/explicit-skill-requests/, whose prompt fixtures are engineered to suppress triggering, driven by run-test.sh under an isolated HOME. This is QA for instructions: the unit under test is prose, and the failure mode is a model reasoning its way out of it. Not a gate (nothing exits non-zero; a human or a judge model reads the transcript) and not a ritual (nobody performs it in normal work). The rubric assumes rules either exist or do not; it cannot say that a rule holds to a certain load.
Three further out-of-rubric items are noted rather than expanded: a "Red Flags" table in skills/using-superpowers/SKILL.md pre-empting twelve rationalisations with rebuttals; the nine-harness portability layer; and a contributor charter in CLAUDE.md addressed to the AI, imposing six preconditions on a pull request, including a duplicate search over open and closed PRs, disclosure of model and harness version, and explicit human approval of the full diff.
Two contradictions, both about the same absent directory. docs/testing.md describes a second test tier in detail — a Python harness driving real tmux sessions, with evals/scenarios/*.yaml, an evals/README.md and a quick-start cd evals && uv sync --extra dev. No evals/ exists: zero blobs under that path on main or dev, and no .gitmodules, so not a submodule either. The three .pre-commit-config.yaml hooks are dead for the same reason. Branch names suggest it was once wired as a submodule; the companion repository returns 404 to an authenticated token, so it is private or gone. A familiar shape rather than a defect peculiar to this project: a tier was extracted, the prose and the hook config stayed behind.
Deliver the standing rule, do not merely place it. A hook that injects the rule file at session start removes the failure mode where the rule exists and is never read. hooks/session-start is 50 lines and does the whole job.
Write descriptions as load-conditions, not topic labels. "Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes" tells a dispatcher when; "Debugging" tells it nothing.
Scope a gate to a path that exists, and prove it fires. Three correct hooks pointed at an absent directory are indistinguishable from no hooks — and read as enforcement to everyone who did not check.
Consider testing your prose under pressure. The pressure-test files are cheap to copy and answer a question a test suite cannot: does this rule survive a plausible excuse?
Roughly eight minutes, read-only, via the GitHub API and raw file fetches. Opened in full or substantially: CLAUDE.md, AGENTS.md, .pre-commit-config.yaml, hooks/session-start, hooks/hooks.json, skills/using-superpowers/SKILL.md, .claude-plugin/marketplace.json, the first ~70 lines of persuasion-principles.md (through principle 4 of 7), the openings of test-pressure-1.md, CREATION-LOG.md and docs/testing.md, and the first 55 lines of tests/explicit-skill-requests/run-test.sh with one prompt fixture — plus the frontmatter of all fifteen SKILL.md files and the complete 195-path tree on main.
Not examined: the body of every skill beyond its frontmatter, so the layer-3 verdict rests on seven bodies plus the README workflow section, not on all fifteen. None of the 22 plan/spec documents were opened, so the layer-4 verdict rests on the naming convention, the plan/spec pairing, one committed eval-results filename and a hardcoded path in run-test.sh — not on their contents. The twenty-odd bash test scripts and the node suites were not read, so we cannot say what fraction assert rather than print. The subagent-driven-development prompt files and its scripts/ were seen only as tree paths; skills/brainstorming/scripts/server.cjs was not inspected at all. The star count is reported as the API returned it and was not corroborated. Where evals/ actually lives could not be determined — only that it is absent from this repository on both branches.
superpowers — eine Entwicklungsmethodik, die in jede Session gedrückt wird, kein Skill-Katalog#
Es sieht aus wie eine Skill-Sammlung und ist in Wahrheit ein Auslieferungsmechanismus: fünfzehn allgemeine Software-Prozess-Skills, dazu ein SessionStart-Hook, der einen Bootstrap-Skill in jede Session auf neun Agent-Harnesses injiziert — damit die Skills auch dann greifen, wenn sich niemand an sie erinnert. Das Interessante steckt nicht in den Skills, sondern in der Mechanik, die dafür sorgt, dass Prosa haftet. (Die Sternzahl ist eine datierte Beobachtung. Sie misst Aufmerksamkeit, nicht Qualität, und ist hier keine Rangfolge.)
195 versionierte Blobs. Fünfzehn Skill-Verzeichnisse als skills/<name>/SKILL.md — darunter brainstorming, writing-plans, executing-plans, subagent-driven-development, test-driven-development, systematic-debugging, requesting-code-review, verification-before-completion, writing-skills, using-superpowers. Ein Skill-Verzeichnis kann zusätzlich Referenzdateien, Prompt-Dateien für Sub-Agenten und ausführbare Skripte enthalten.
Rund ein Fünftel des Baums ist Portabilitäts-Infrastruktur: neun Harness-Adapter-Manifeste auf oberster Ebene (.claude-plugin/, .codex-plugin/, .cursor-plugin/, .devin-plugin/, .kimi-plugin/, .hermes-plugin/, .opencode/, .pi/, .agents/, gemini-extension.json). Darüber hinaus: 60 Dateien unter tests/, 43 unter docs/ — aufgeteilt in docs/superpowers/plans/ und docs/superpowers/specs/, durchgehend mit YYYY-MM-DD datiert — sowie hooks/ mit dem Session-Start-Injektor. AGENTS.md und GEMINI.md sind einzeilige Verweise auf CLAUDE.md.
Versionierung und Datierung sind echt; der „Index“ ist ein Ein-Eintrag-Manifest plus README-Prosa, ein Archiv fehlt
Schicht 1 ist die stärkste Umsetzung im gesamten Feld, weil sie Mechanik ist und nicht Konvention. hooks/hooks.json registriert einen SessionStart-Hook mit dem Matcher startup|clear|compact; er ruft hooks/run-hook.cmd session-start auf, was skills/using-superpowers/SKILL.md per cat liest, für JSON escapt und eingefasst in <EXTREMELY_IMPORTANT>\nYou have superpowers. ausgibt. Das Skript verzweigt anhand von Umgebungsvariablen dreifach — additional_context für Cursor, hookSpecificOutput.additionalContext für Claude Code, additionalContext auf oberster Ebene für Copilot CLI und den SDK-Standard — mit einem Kommentar, der festhält, dass Claude Code beide Felder ohne Deduplizierung liest und deshalb genau eines ausgegeben werden muss. Der injizierte Inhalt besteht den Zugehörigkeitstest einer ständigen Regel: eine Regel (relevante Skills vor jeder Antwort oder Handlung aufrufen), eine Prioritätsreihenfolge und eine Vorrangklausel, die Nutzeranweisungen in CLAUDE.md und AGENTS.md über die Skills stellt.
Schicht 2 ist der Punkt, an dem Rohbefund und strenge Lesart auf streift zusammenfallen — aber knapp. Schicht 2 verlangt etwas, das die Inhalte dieses Repositorys verweigert und an etwas angeschlossen ist, das es ausführt. Die verweigernden Artefakte sind tatsächlich da: 60 Dateien unter tests/, darunter Node-Suiten, pytest unter tests/hermes/, rund zwanzig Bash-Skripte und scripts/lint-shell.sh mit eigenem Test. Was fehlt, ist der Anschluss. Es gibt kein .github/workflows/, weder auf main noch auf dev — die Auflistung von .github auf beiden liefert nur FUNDING.yml, ISSUE_TEMPLATE/ und PULL_REQUEST_TEMPLATE.md — und auch sonst keine CI-Konfiguration. Das einzige deklarative Tor, .pre-commit-config.yaml, definiert drei Hooks, alle mit files: ^evals/.*\.py$ eingeschränkt, und ein Verzeichnis evals/ existiert nicht; alle drei werden also still übersprungen. Das ist der interessantere Fehler als ein schlicht fehlendes Tor: eine Konfiguration, die wie Durchsetzung aussieht, ein Review passiert und nichts verweigert. docs/testing.md sagt offen, die Eval-Stufe sei „not part of CI today“; der Baum sagt dasselbe über alles Übrige.
Eine Regel, die diese Reihe andernorts anlegt, greift hier nicht. Wir suchen nach Repositorys, die Fremden einen Validator ausliefern und selbst nichts durchsetzen; superpowers liefert Disziplin überwiegend als Prosa aus, und seine ausgelieferten Skripte unter skills/subagent-driven-development/scripts/ wurden nur als Pfade im Baum gesehen — diese Asymmetrie ist hier also nicht belegt.
Persuasionstheorie als dokumentierte Autorenmethode.skills/writing-skills/persuasion-principles.md ist ein Gestaltungshandbuch dafür, ein Modell dazu zu bringen, Prosa tatsächlich zu befolgen — gestützt auf ein zitiertes Experiment: Meincke et al. (2025), sieben Überzeugungsprinzipien über N=28.000 KI-Konversationen, mit einer mehr als verdoppelten Befolgungsrate von 33 % auf 72 %. Es übersetzt Autorität, Selbstverpflichtung, Knappheit und soziale Bewährtheit in Diff-artige Regeln für Skill-Texte — Autorität ersetzt „Consider writing tests first when feasible“ durch „Write code before test? Delete it. Start over. No exceptions.“; Selbstverpflichtung verlangt vom Agenten anzukündigen, welchen Skill er benutzt. Die Technik ist stromabwärts sichtbar angewandt: Der injizierte Bootstrap beginnt mit maximaler Lautstärke, und skills/systematic-debugging/CREATION-LOG.md führt einen Abschnitt „Bulletproofing Elements“, der die gewählten Formulierungen und ihre Begründung auflistet („ALWAYS“/„NEVER“ statt „should“). Die fünf Schichten haben dafür keinen Platz, weil sie Artefakte danach einordnen, was sie mit einem Agenten tun; dieses hier bindet den Autor jener Artefakte.
Adversariale Belastungstests.skills/systematic-debugging/test-pressure-1.md bis -3.md sind Szenarien, die einem Agenten vorgelegt werden, um zu prüfen, ob er einen Skill unter Druck aufgibt. Das erste besteht darauf, das Szenario sei real und es müsse entschieden werden, stapelt finanziellen Druck und Autoritätsdruck — Umsatzverlust pro Minute beziffert, ein Manager fordert die sofortige Behebung —, beziffert ehrlich die Kosten des disziplinierten Vorgehens gegen einen Fünf-Minuten-Symptomfix und erzwingt eine Auswahl mit Buchstaben. skills/writing-skills/testing-skills-with-subagents.md verallgemeinert die Praxis; ein leiseres Geschwister ist tests/explicit-skill-requests/, dessen Prompt-Fixtures das Auslösen gezielt unterdrücken sollen, ausgeführt von run-test.sh unter einem isolierten HOME. Das ist QA für Anweisungen: Der Prüfling ist Prosa, und der Fehlermodus ist ein Modell, das sich argumentativ daraus befreit. Kein Tor (nichts endet mit einem Fehlercode; ein Mensch oder ein bewertendes Modell liest das Transkript) und kein Ritual (im Normalbetrieb führt das niemand durch). Das Raster unterstellt, dass Regeln entweder existieren oder nicht; dass eine Regel bis zu einer bestimmten Last hält, kann es nicht ausdrücken.
Drei weitere Punkte außerhalb des Rasters werden nur benannt: eine Tabelle „Red Flags“ in skills/using-superpowers/SKILL.md, die zwölf Rationalisierungen mit Gegenargumenten vorwegnimmt; die Portabilitätsschicht über neun Harnesses; und eine Beitragsordnung in CLAUDE.md, die die KI adressiert und sechs Vorbedingungen an einen Pull Request stellt — darunter eine Duplikatssuche über offene und geschlossene PRs, die Offenlegung von Modell und Harness-Version sowie die ausdrückliche menschliche Freigabe des vollständigen Diffs.
Zwei Widersprüche, beide um dasselbe fehlende Verzeichnis. docs/testing.md beschreibt eine zweite Teststufe im Detail — ein Python-Harness, das echte tmux-Sessions steuert, mit evals/scenarios/*.yaml, einer evals/README.md und dem Schnellstart cd evals && uv sync --extra dev. Ein evals/ existiert nicht: null Blobs unter diesem Pfad auf main wie auf dev, und keine .gitmodules, also auch kein Submodul. Die drei Hooks in .pre-commit-config.yaml sind aus demselben Grund tot. Branch-Namen legen nahe, dass es einmal als Submodul eingebunden war; das zugehörige Repository liefert einem authentifizierten Token ein 404, ist also privat oder verschwunden. Ein vertrautes Muster und kein diesem Projekt eigener Mangel: Eine Stufe wurde herausgelöst, Prosa und Hook-Konfiguration blieben zurück.
Die ständige Regel zustellen, nicht bloß ablegen. Ein Hook, der die Regeldatei beim Session-Start injiziert, beseitigt den Fehlermodus, bei dem die Regel existiert und nie gelesen wird. hooks/session-start hat 50 Zeilen und erledigt genau das.
Beschreibungen als Ladebedingungen schreiben, nicht als Themenschilder. „Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes“ sagt einem Dispatcher wann; „Debugging“ sagt ihm nichts.
Ein Tor auf einen existierenden Pfad einschränken — und beweisen, dass es feuert. Drei korrekte Hooks, die auf ein fehlendes Verzeichnis zeigen, sind von null Hooks nicht zu unterscheiden und lesen sich für jeden, der nicht nachgesehen hat, wie Durchsetzung.
Die eigene Prosa unter Druck testen. Die Belastungstest-Dateien sind billig zu kopieren und beantworten eine Frage, die keine Testsuite beantworten kann: Übersteht diese Regel eine plausible Ausrede?
Rund acht Minuten, ausschließlich lesend, über die GitHub-API und direkte Datei-Abrufe. Vollständig oder weitgehend geöffnet: CLAUDE.md, AGENTS.md, .pre-commit-config.yaml, hooks/session-start, hooks/hooks.json, skills/using-superpowers/SKILL.md, .claude-plugin/marketplace.json, die ersten ~70 Zeilen von persuasion-principles.md (bis Prinzip 4 von 7), die Anfänge von test-pressure-1.md, CREATION-LOG.md und docs/testing.md sowie die ersten 55 Zeilen von tests/explicit-skill-requests/run-test.sh mit einem Prompt-Fixture — dazu das Frontmatter aller fünfzehn SKILL.md-Dateien und der vollständige Baum mit 195 Pfaden auf main.
Nicht geprüft: der Rumpf jedes Skills jenseits des Frontmatters; das Urteil zu Schicht 3 stützt sich daher auf sieben Rümpfe plus den Workflow-Abschnitt der README, nicht auf alle fünfzehn. Keines der 22 Plan/Spec-Dokumente wurde geöffnet; das Urteil zu Schicht 4 stützt sich auf die Namenskonvention, die Plan/Spec-Paarung, einen eingecheckten Eval-Ergebnis-Dateinamen und einen fest verdrahteten Pfad in run-test.sh — nicht auf deren Inhalt. Die rund zwanzig Bash-Testskripte und die Node-Suiten wurden nicht gelesen; welcher Anteil davon tatsächlich prüft statt nur auszugeben, lässt sich nicht sagen. Die Prompt-Dateien von subagent-driven-development und dessen scripts/ wurden nur als Pfade im Baum gesehen; skills/brainstorming/scripts/server.cjs wurde überhaupt nicht betrachtet. Die Sternzahl wird so berichtet, wie die API sie zurückgab, und wurde nicht gegengeprüft. Wo evals/ tatsächlich liegt, ließ sich nicht klären — nur, dass es in diesem Repository auf beiden Branches fehlt.
superpowers — một phương pháp luận phát triển được đẩy vào mọi phiên, không phải một danh mục skill#
Nó trông như một bộ sưu tập skill nhưng thực ra là một cơ chế phân phối: mười lăm skill về quy trình phần mềm dùng cho mục đích chung, cộng thêm một hook SessionStart tiêm một skill bootstrap vào mọi phiên trên chín harness agent, nên các skill được kích hoạt bất kể có ai nhớ tới chúng hay không. Phần kỹ thuật thú vị không nằm ở các skill; nó nằm ở bộ máy khiến văn xuôi bám lại được. (Số sao là một quan sát có ngày tháng. Nó đo sự chú ý, không đo chất lượng, và ở đây không phải một thứ hạng.)
195 blob được theo dõi. Mười lăm thư mục skill dưới dạng skills/<name>/SKILL.md — trong đó có brainstorming, writing-plans, executing-plans, subagent-driven-development, test-driven-development, systematic-debugging, requesting-code-review, verification-before-completion, writing-skills, using-superpowers. Một thư mục skill có thể mang theo các tệp tham chiếu, các tệp prompt dành cho sub-agent, và các tệp thực thi.
Khoảng một phần năm cây tệp là phần đường ống cho tính khả chuyển: chín manifest bộ chuyển đổi harness ở thư mục gốc (.claude-plugin/, .codex-plugin/, .cursor-plugin/, .devin-plugin/, .kimi-plugin/, .hermes-plugin/, .opencode/, .pi/, .agents/, gemini-extension.json). Ngoài ra: 60 tệp dưới tests/, 43 tệp dưới docs/ — chia thành docs/superpowers/plans/ và docs/superpowers/specs/, tất cả đều có tiền tố ngày YYYY-MM-DD — và hooks/ với bộ tiêm lúc khởi động phiên. AGENTS.md và GEMINI.md là những con trỏ một dòng trỏ về CLAUDE.md.
Việc đánh phiên bản và ghi ngày là thật; "chỉ mục" chỉ là một manifest một mục cộng với văn xuôi trong README, và không hề có kho lưu trữ
Lớp 1 là hiện thực mạnh nhất trong cả bộ, vì nó là bộ máy chứ không phải một quy ước. hooks/hooks.json đăng ký một hook SessionStart khớp với startup|clear|compact; nó chạy hooks/run-hook.cmd session-start, lệnh này cat tệp skills/using-superpowers/SKILL.md, escape nội dung đó cho JSON rồi phát ra, bọc trong <EXTREMELY_IMPORTANT>\nYou have superpowers. Đoạn script rẽ ba nhánh theo biến môi trường — additional_context cho Cursor, hookSpecificOutput.additionalContext cho Claude Code, additionalContext ở cấp cao nhất cho Copilot CLI và chuẩn SDK — kèm một chú thích ghi rằng Claude Code đọc cả hai trường mà không khử trùng lặp, nên phải phát ra đúng một trường. Nội dung được tiêm vào vượt qua bài kiểm tra tư cách của một quy tắc thường trực: một quy tắc (gọi các skill liên quan trước bất kỳ phản hồi hay hành động nào), một thứ tự ưu tiên, và một điều khoản về thứ bậc đặt các chỉ dẫn của người dùng trong CLAUDE.md và AGENTS.md lên trên các skill.
Lớp 2 là chỗ mà bản ghi thô và cách đọc nghiêm ngặt cùng đồng ý ở mức chỉ chạm tới, nhưng chỉ vừa đủ. Lớp 2 đòi hỏi một thứ biết từ chối chính nội dung của kho này và được nối dây tới một thứ chạy nó. Các hiện vật biết từ chối thì thực sự có ở đó: 60 tệp dưới tests/, gồm các bộ test node, pytest dưới tests/hermes/, chừng hai chục script bash, và scripts/lint-shell.sh với một test của riêng nó. Cái thiếu là phần nối dây. Không có .github/workflows/ trên main hay dev — liệt kê .github trên cả hai nhánh chỉ trả về FUNDING.yml, ISSUE_TEMPLATE/ và PULL_REQUEST_TEMPLATE.md — và cũng không có cấu hình CI nào khác. Cổng khai báo duy nhất, .pre-commit-config.yaml, định nghĩa ba hook đều được giới hạn phạm vi bằng files: ^evals/.*\.py$, mà thư mục evals/ thì không tồn tại, nên cả ba đều bị bỏ qua trong im lặng. Đó là một thất bại thú vị hơn cả việc vắng hẳn một cổng chặn: một cấu hình trông như đang cưỡng chế, vượt qua được vòng review, và chẳng từ chối gì cả. docs/testing.md nói thẳng rằng tầng eval "not part of CI today"; cây tệp nói y như vậy về mọi thứ còn lại.
Một phán quyết mà loạt bài này áp dụng ở nơi khác lại không cắn được ở đây. Chúng tôi tìm những kho gửi một validator cho người lạ trong khi không cưỡng chế điều gì lên chính mình; superpowers gửi đi kỷ luật chủ yếu dưới dạng văn xuôi, và những tệp thực thi mà nó gửi kèm dưới skills/subagent-driven-development/scripts/ chỉ được nhìn thấy như các đường dẫn trong cây, nên sự bất đối xứng đó không được xác lập.
Lý thuyết thuyết phục như một phương pháp soạn thảo được ghi thành tài liệu.skills/writing-skills/persuasion-principles.md là một cẩm nang thiết kế nhằm khiến một mô hình thực sự tuân theo văn xuôi, dựa trên một thí nghiệm được trích dẫn: Meincke et al. (2025), bảy nguyên tắc thuyết phục trên N=28,000 cuộc hội thoại AI, mức tuân thủ tăng hơn gấp đôi từ 33% lên 72%. Nó biến Authority, Commitment, Scarcity và Social Proof thành những quy tắc kiểu diff cho văn bản skill — Authority thay "Consider writing tests first when feasible" bằng "Write code before test? Delete it. Start over. No exceptions."; Commitment buộc agent phải tuyên bố nó đang dùng skill nào. Kỹ thuật này được áp dụng ở hạ nguồn một cách thấy rõ: đoạn bootstrap được tiêm vào mở đầu ở âm lượng lớn nhất, và skills/systematic-debugging/CREATION-LOG.md có một mục "Bulletproofing Elements" liệt kê các cách diễn đạt đã chọn và lý do ("ALWAYS"/"NEVER" thay vì "should"). Năm lớp không có chỗ cho điều này vì tất cả chúng đều phân loại hiện vật theo những gì hiện vật đó làm với một agent; còn thứ này ràng buộc người viết ra các hiện vật ấy.
Các bài kiểm tra áp lực mang tính đối kháng.skills/systematic-debugging/test-pressure-1.md cho đến -3.md là những kịch bản được đưa cho một agent để xem nó có bỏ rơi một skill dưới sức ép hay không. Kịch bản đầu tiên khăng khăng rằng tình huống là thật và phải đưa ra một lựa chọn, chồng chất áp lực tài chính lẫn áp lực quyền uy — doanh thu mất đi được quy ra từng phút, một quản lý đòi sửa ngay lập tức — đặt cái giá trung thực của việc tuân theo kỷ luật lên bàn cân với một miếng vá triệu chứng mất năm phút, rồi ép chọn một phương án có đánh chữ cái. skills/writing-skills/testing-skills-with-subagents.md khái quát hóa cách làm này; một người anh em lặng lẽ hơn là tests/explicit-skill-requests/, với các prompt mẫu được thiết kế để ngăn việc kích hoạt, chạy bởi run-test.sh dưới một HOME cô lập. Đây là QA cho chỉ dẫn: đơn vị được kiểm thử là văn xuôi, và kiểu hỏng là một mô hình lý luận để thoát khỏi nó. Không phải một cổng chặn (không có gì thoát ra với mã khác 0; một con người hoặc một mô hình giám khảo đọc bản ghi) và cũng không phải một nghi thức (không ai thực hiện nó trong công việc thường ngày). Bộ tiêu chí giả định rằng các quy tắc hoặc là tồn tại hoặc là không; nó không thể nói rằng một quy tắc trụ được đến một mức tải nhất định.
Ba hạng mục nữa nằm ngoài bộ tiêu chí chỉ được ghi nhận chứ không khai triển: một bảng "Red Flags" trong skills/using-superpowers/SKILL.md chặn trước mười hai kiểu biện minh kèm lời bác bỏ; lớp khả chuyển cho chín harness; và một hiến chương dành cho người đóng góp trong CLAUDE.md viết gửi tới chính AI, áp đặt sáu điều kiện tiên quyết lên một pull request, gồm cả việc tìm trùng lặp trong các PR đang mở lẫn đã đóng, khai báo phiên bản mô hình và harness, và việc con người phê duyệt tường minh toàn bộ diff.
Hai mâu thuẫn, cả hai đều xoay quanh cùng một thư mục vắng mặt. docs/testing.md mô tả chi tiết một tầng kiểm thử thứ hai — một harness Python điều khiển các phiên tmux thật, với evals/scenarios/*.yaml, một evals/README.md và một hướng dẫn khởi động nhanh cd evals && uv sync --extra dev. Không có evals/ nào tồn tại: không blob nào dưới đường dẫn đó trên main hay dev, và cũng không có .gitmodules, nên nó cũng không phải một submodule. Ba hook trong .pre-commit-config.yaml chết vì cùng lý do đó. Tên các nhánh gợi ý rằng nó từng được nối vào như một submodule; kho đồng hành trả về 404 cho một token đã xác thực, nên nó hoặc là riêng tư hoặc đã biến mất. Đây là một hình dạng quen thuộc hơn là một khiếm khuyết riêng của dự án này: một tầng đã được tách ra, còn văn xuôi và cấu hình hook thì ở lại.
Hãy giao tận tay quy tắc thường trực, đừng chỉ đặt nó ở đó. Một hook tiêm tệp quy tắc vào lúc bắt đầu phiên loại bỏ kiểu hỏng trong đó quy tắc thì có mà không bao giờ được đọc. hooks/session-start dài 50 dòng và làm trọn công việc đó.
Hãy viết mô tả như điều kiện nạp, không phải như nhãn chủ đề. "Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes" cho bộ điều phối biết khi nào; "Debugging" thì chẳng cho biết gì.
Hãy giới hạn phạm vi một cổng chặn vào một đường dẫn có tồn tại, và chứng minh rằng nó có nổ. Ba hook đúng đắn trỏ vào một thư mục vắng mặt thì không phân biệt được với việc không có hook nào — và đọc lên như đang cưỡng chế với bất kỳ ai không kiểm tra.
Hãy cân nhắc kiểm thử văn xuôi của bạn dưới áp lực. Các tệp kiểm tra áp lực rất rẻ để sao chép và trả lời một câu hỏi mà một bộ test không trả lời được: quy tắc này có sống sót nổi một lời bào chữa hợp lý không?
Khoảng tám phút, chỉ đọc, qua GitHub API và các lần tải tệp thô. Được mở toàn bộ hoặc phần lớn: CLAUDE.md, AGENTS.md, .pre-commit-config.yaml, hooks/session-start, hooks/hooks.json, skills/using-superpowers/SKILL.md, .claude-plugin/marketplace.json, khoảng ~70 dòng đầu của persuasion-principles.md (đến nguyên tắc 4 trên 7), phần mở đầu của test-pressure-1.md, CREATION-LOG.md và docs/testing.md, và 55 dòng đầu của tests/explicit-skill-requests/run-test.sh cùng một prompt mẫu — cộng với frontmatter của cả mười lăm tệp SKILL.md và toàn bộ cây 195 đường dẫn trên main.
Không xem xét: phần thân của từng skill ngoài frontmatter của nó, nên phán quyết lớp 3 dựa trên bảy phần thân cộng với mục workflow trong README, chứ không phải trên cả mười lăm. Không tài liệu plan/spec nào trong số 22 tài liệu được mở ra, nên phán quyết lớp 4 dựa trên quy ước đặt tên, việc ghép cặp plan/spec, một tên tệp kết quả eval đã được commit và một đường dẫn hardcode trong run-test.sh — chứ không dựa trên nội dung của chúng. Hơn hai chục script test bash và các bộ test node không được đọc, nên chúng tôi không thể nói bao nhiêu phần trong đó thực sự assert thay vì chỉ in ra. Các tệp prompt của subagent-driven-development và thư mục scripts/ của nó chỉ được nhìn thấy như các đường dẫn trong cây; skills/brainstorming/scripts/server.cjs hoàn toàn không được xem xét. Số sao được báo cáo đúng như API trả về và không được kiểm chứng chéo. Nơi evals/ thực sự nằm thì không thể xác định được — chỉ biết rằng nó vắng mặt trong kho này trên cả hai nhánh.
One engineer's personal agent-skill directory, published as a semver-versioned, installable plugin. The interesting thing is not the skills — it is that the discipline itself is treated as a distributable product, with a release process, a compatibility target and a house style.
37 SKILL.md files under skills/, in five buckets with different contracts: engineering/ (18) and productivity/ (7) are promoted, misc/ (4) is kept but not promoted, in-progress/ (8) is public beta on purpose, deprecated/ is empty by policy. Promoted means three consequences: an entry in .claude-plugin/plugin.json, a line in README.md, a page at docs/<bucket>/<name>.md. Counted against the tree on 2026-09-03: 25 promoted skills, 25 manifest entries (version 1.2.3), 25 docs pages. The numbers line up.
Each skill is a directory: SKILL.md with YAML frontmatter, a mandatory sibling agents/openai.yaml holding the same metadata in Codex's vocabulary (37 skills, 37 twins), often ALL-CAPS companion files, sometimes scripts/. Alongside: .agents/ with the repo's own conventions and two ADRs, .out-of-scope/ with three rejection records, .changeset/ with nine pending release notes, a 44 KB CHANGELOG.md, one GitHub workflow. Sizes vary hard — grill-me/SKILL.md is 157 bytes whose whole body is Call the Skill tool with "grilling".; wayfinder/SKILL.md is 11,908.
User-invoked vs model-invoked, declared twice per skill
5b Index, dates, dedup
● carries
plugin.json, README.md, four bucket READMEs, docs/, CHANGELOG.md
Manifest, README and docs mirror agree by count at this HEAD
Layer 4 sits one step below the investigation lane's raw value: commit history was never inspected, so "written before the work" could not be shown.
The gate faces outward. This repository ships a genuine refuser and enforces none of its own invariants mechanically. block-dangerous-git.sh is a real Claude Code PreToolUse hook: it greps the proposed command and exits 2, the code that makes the harness refuse rather than warn. Meanwhile CLAUDE.md states hard invariants — every promoted skill in README.mdandplugin.json, every promoted skill with a docs page — and enforces them with the sentence "Run claude plugin validate . --strict after touching either manifest", a polite instruction to a human.
The near-miss sharpens it. sync-plugin-version.mjs --check exists, is wired into package.json as check-plugin-version, and exits 1 on version drift: a correct gate for this repo's own content. The one workflow runs npm ci and the changesets action, and never calls it. The gate was written, then not connected. That is not a criticism of one author — it is the most common shape in the corpus, and visible here only because the missing wire is one line from being present.
Trigger discipline is the strongest thing here..agents/invocation.md defines a binary nothing else in this study defines as carefully: a skill is either user-invoked (disable-model-invocation: true in the frontmatter, policy.allow_implicit_invocation: false in the Codex twin) or model-invoked, the same in both harnesses or neither, its description human-facing in the first case and trigger-rich in the second. Layer 5's usual weak spot is that "when does this load?" is left to a hopeful sentence. Here it is a declared, two-file property of every skill.
The discipline is released, not just written. Every behavioural change to a prompt goes through a .changeset/*.md declaring "mattpocock-skills": patch; an Action opens a chore: version skills PR; changesets writes the 44 KB CHANGELOG.md with per-PR and per-commit links; the result installs at 1.2.3. Layer 5 asks whether you can find what you wrote and whether it exists once; this asks whether a stranger downstream can pin, diff and upgrade it. A changeset is neither a plan written before the work nor an index entry — it is a release note addressed to people the author will never meet, and it exists only because the corpus ships.
A counterpart page per skill, including the parts that do not work. 25 pages under docs/, each built to a fixed template in .agents/writing-docs.md and closing with "It's working if" — an observable success test for a prompt. The stated reason: most skills here are user-invoked, so the human is the index that has to remember they exist. docs/engineering/tdd.md goes further and publishes the skill's own hole with a live link: "That last row is a real hole… It is issue #746 and it is open. Until it closes, that judgement is yours or your CLAUDE.md's." Layer 5 is about locating an artefact; this is about a human deciding over months how far to trust one, and being told in writing where it stops working. It is roughly a third of the repository's bytes.
Four more things sit outside the model: the Codex twin per skill, kept in lockstep by rule and nothing else; a maturity ladder where bucket membership decides shipping, listing and documentation; CONTEXT.md as vocabulary governance with an _Avoid_: list of banned synonyms per term; and a house ban on em-dashes maintained by hand across three shipped changesets.
Broadly they agree, and the repository is unusually honest about its gaps. Three things stand out: the CLAUDE.md membership invariants hold by count at this HEAD and nothing checks them; check-plugin-version exits 1 on drift and the release workflow never invokes it; and skills/deprecated/README.md contradicts its own bucket — "This bucket is currently empty: a retired skill is deleted, and the changeset that removes it names whatever replaced it." The last is a coherent alternative rather than a defect, since the CHANGELOG does the archive's job, and it means archive-not-delete is a convention, not a law. One README claim could not be checked from the tree at all: that the plugin is in Claude Code's official marketplace.
Declare, per skill, whether the model may load it. The user-invoked / model-invoked binary, in frontmatter and held by an invariant, is the cheapest fix for the commonest layer-5 failure.
Wire the check you already wrote. Before writing a validator, look for the one in package.json that CI never calls.
Give each ritual an observable success test. "It's working if…" turns a prompt from something you hope helped into something you can check. One section per document.
Publish the hole. Linking an open issue from the documentation of the case a tool does not handle beats a page claiming full coverage, and it stays true.
About seven minutes of read-only inspection over gh api and raw.githubusercontent.com; nothing was cloned or written. Read in full: the repository's own rule and manifest files (AGENTS.md, CLAUDE.md, CONTEXT.md, package.json, both .claude-plugin manifests, release.yml, all three scripts/*, .agents/invocation.md, .agents/adr/0001), two of three .out-of-scope files, two changesets, the deprecated/ and in-progress/ READMEs, the git-guardrails skill with its hook script, hitl-loop.template.sh, four SKILL.md files (tdd, wait-what, grill-me, research) and two agents/openai.yaml. Read partially: wayfinder/SKILL.md, .agents/writing-docs.md, docs/engineering/tdd.md, README.md, CHANGELOG.md.
Not examined: most of the 37 SKILL.md bodies (including ask-matt, grilling, teach, triage, to-spec, implement, prototype, wizard and every in-progress skill), 24 of the 25 docs pages, .agents/adr/0002, .agents/install-block.md, one .out-of-scope file, most changesets, and the bulk of README.md and CHANGELOG.md. No external claim was verified: not the marketplace listing, not whether the published documentation URLs resolve, not the state of the issues the repository cites, not link rot. Commit history, review process and branch protection were not inspected, so this page cannot say how promptly the hand-maintained indexes stay in sync — only that they were internally consistent at the HEAD read on 2026-09-03, when the counts above were taken.
Das persönliche Agenten-Skill-Verzeichnis eines Entwicklers, veröffentlicht als semver-versioniertes, installierbares Plugin. Das Interessante daran sind nicht die Skills — es ist, dass die Disziplin selbst als distribuierbares Produkt behandelt wird, mit Release-Prozess, Kompatibilitätsziel und Hausstil.
37 SKILL.md-Dateien unter skills/, in fünf Buckets mit unterschiedlichen Verträgen: engineering/ (18) und productivity/ (7) sind befördert, misc/ (4) wird gepflegt, aber nicht beworben, in-progress/ (8) ist absichtlich öffentliche Beta, deprecated/ ist per Richtlinie leer. Befördert heißt drei Konsequenzen: ein Eintrag in .claude-plugin/plugin.json, eine Zeile in README.md, eine Seite unter docs/<bucket>/<name>.md. Gegen den Baum gezählt am 2026-09-03: 25 beförderte Skills, 25 Manifest-Einträge (Version 1.2.3), 25 Doku-Seiten. Die Zahlen stimmen überein.
Jeder Skill ist ein Verzeichnis: SKILL.md mit YAML-Frontmatter, eine verpflichtende Geschwisterdatei agents/openai.yaml mit denselben Metadaten im Vokabular von Codex (37 Skills, 37 Zwillinge), oft Begleitdateien in Großbuchstaben, manchmal scripts/. Daneben: .agents/ mit den eigenen Konventionen und zwei ADRs, .out-of-scope/ mit drei Ablehnungsprotokollen, .changeset/ mit neun offenen Release-Notizen, ein 44 KB großes CHANGELOG.md, ein GitHub-Workflow. Die Größen schwanken stark — grill-me/SKILL.md ist 157 Bytes groß und sein ganzer Rumpf lautet Call the Skill tool with "grilling".; wayfinder/SKILL.md misst 11.908.
Nutzeraufgerufen vs. modellaufgerufen, pro Skill zweimal deklariert
5b Index, Daten, Dedup
● trägt
plugin.json, README.md, vier Bucket-READMEs, docs/, CHANGELOG.md
Manifest, README und Doku-Spiegel stimmen an diesem HEAD zahlenmäßig überein
Schicht 4 liegt eine Stufe unter dem Rohwert der Untersuchungsspur: Die Commit-Historie wurde nie geprüft, „vor der Arbeit geschrieben" ließ sich also nicht zeigen.
Das Gate zeigt nach außen. Dieses Repository liefert einen echten Verweigerer aus und erzwingt keine seiner eigenen Invarianten mechanisch. block-dangerous-git.sh ist ein echter PreToolUse-Hook für Claude Code: Er durchsucht das vorgeschlagene Kommando und beendet sich mit Code 2, dem Code, der die Laufzeitumgebung ablehnen statt warnen lässt. CLAUDE.md benennt derweil harte Invarianten — jeder beförderte Skill in README.mdundplugin.json, jeder beförderte Skill mit einer Doku-Seite — und erzwingt sie mit dem Satz „Run claude plugin validate . --strict after touching either manifest", einer höflichen Anweisung an einen Menschen.
Der Beinahe-Treffer schärft das Bild. sync-plugin-version.mjs --check existiert, ist in package.json als check-plugin-version verdrahtet und beendet sich mit 1 bei Versionsdrift: ein korrektes Gate für den eigenen Inhalt dieses Repositories. Der einzige Workflow führt npm ci und die Changesets-Action aus und ruft es nie auf. Das Gate wurde geschrieben und dann nicht angeschlossen. Das ist keine Kritik an einem Autor — es ist die häufigste Form im Korpus, hier nur deshalb sichtbar, weil das fehlende Kabel eine Zeile davon entfernt ist, vorhanden zu sein.
Die Auslöser-Disziplin ist das Stärkste hier..agents/invocation.md definiert eine Zweiteilung, die sonst nichts in dieser Studie so sorgfältig definiert: Ein Skill ist entweder nutzeraufgerufen (disable-model-invocation: true im Frontmatter, policy.allow_implicit_invocation: false im Codex-Zwilling) oder modellaufgerufen, in beiden Laufzeitumgebungen gleich oder in keiner, seine Beschreibung im ersten Fall menschenzugewandt und im zweiten auslöserreich. Die übliche Schwachstelle von Schicht 5 ist, dass „wann lädt das?" einem hoffnungsvollen Satz überlassen bleibt. Hier ist es eine deklarierte, in zwei Dateien festgehaltene Eigenschaft jedes Skills.
Die Disziplin wird veröffentlicht, nicht nur geschrieben. Jede Verhaltensänderung an einem Prompt läuft über eine .changeset/*.md, die "mattpocock-skills": patch deklariert; eine Action öffnet einen chore: version skills-PR; Changesets schreibt das 44 KB große CHANGELOG.md mit Links pro PR und pro Commit; das Ergebnis installiert sich in 1.2.3. Schicht 5 fragt, ob du wiederfindest, was du geschrieben hast, und ob es genau einmal existiert; hier geht es darum, ob ein Fremder stromabwärts festnageln, vergleichen und aktualisieren kann. Ein Changeset ist weder ein vor der Arbeit geschriebener Plan noch ein Indexeintrag — es ist eine Release-Notiz an Menschen, die der Autor nie treffen wird, und es existiert nur, weil der Korpus ausgeliefert wird.
Eine Gegenstück-Seite pro Skill, inklusive der Teile, die nicht funktionieren. 25 Seiten unter docs/, jede nach einer festen Vorlage in .agents/writing-docs.md gebaut und mit „It's working if" schließend — einem beobachtbaren Erfolgstest für einen Prompt. Der genannte Grund: Die meisten Skills hier sind nutzeraufgerufen, also ist der Mensch der Index, der sich an ihre Existenz erinnern muss. docs/engineering/tdd.md geht weiter und veröffentlicht die eigene Lücke des Skills mit einem lebenden Link: „That last row is a real hole… It is issue #746 and it is open. Until it closes, that judgement is yours or your CLAUDE.md's." Bei Schicht 5 geht es darum, ein Artefakt zu finden; hier geht es darum, dass ein Mensch über Monate entscheidet, wie weit er einem Werkzeug traut, und schriftlich gesagt bekommt, wo es aufhört zu funktionieren. Das sind etwa ein Drittel der Bytes des Repositories.
Vier weitere Dinge liegen außerhalb des Modells: der Codex-Zwilling pro Skill, im Gleichschritt gehalten durch eine Regel und durch sonst nichts; eine Reifeleiter, bei der die Bucket-Zugehörigkeit über Ausliefern, Listen und Dokumentieren entscheidet; CONTEXT.md als Vokabular-Governance mit einer _Avoid_:-Liste verbotener Synonyme je Begriff; und ein hauseigenes Verbot von Geviertstrichen, von Hand über drei ausgelieferte Changesets gepflegt.
Im Großen und Ganzen stimmen sie überein, und das Repository ist ungewöhnlich ehrlich über seine Lücken. Drei Dinge fallen auf: Die Zugehörigkeits-Invarianten aus CLAUDE.md halten an diesem HEAD zahlenmäßig, und nichts prüft sie; check-plugin-version bricht bei Drift mit 1 ab, und der Release-Workflow ruft es nie auf; und skills/deprecated/README.md widerspricht dem eigenen Bucket — „This bucket is currently empty: a retired skill is deleted, and the changeset that removes it names whatever replaced it." Das Letzte ist eine stimmige Alternative und kein Defekt, denn das CHANGELOG übernimmt die Aufgabe des Archivs, und es heißt, dass Archivieren-statt-Löschen eine Konvention ist und kein Gesetz. Eine README-Behauptung ließ sich aus dem Baum überhaupt nicht prüfen: dass das Plugin im offiziellen Marktplatz von Claude Code steht.
Erkläre pro Skill, ob das Modell ihn laden darf. Die Zweiteilung nutzeraufgerufen / modellaufgerufen, im Frontmatter und durch eine Invariante gehalten, ist die billigste Abhilfe für den häufigsten Fehler in Schicht 5.
Schließe die Prüfung an, die du schon geschrieben hast. Bevor du einen Validator schreibst, suche den, der in package.json steht und den die CI nie aufruft.
Gib jedem Ritual einen beobachtbaren Erfolgstest. „It's working if …" macht aus einem Prompt, von dem man hofft, dass er geholfen hat, etwas Überprüfbares. Ein Abschnitt pro Dokument.
Veröffentliche die Lücke. Aus der Dokumentation eines Werkzeugs auf ein offenes Issue zu dem nicht abgedeckten Fall zu verlinken, schlägt eine Seite, die vollständige Abdeckung behauptet — und es bleibt wahr.
Etwa sieben Minuten rein lesende Betrachtung über gh api und raw.githubusercontent.com; nichts wurde geklont oder geschrieben. Vollständig gelesen: die eigenen Regel- und Manifestdateien des Repositories (AGENTS.md, CLAUDE.md, CONTEXT.md, package.json, beide .claude-plugin-Manifeste, release.yml, alle drei scripts/*, .agents/invocation.md, .agents/adr/0001), zwei von drei .out-of-scope-Dateien, zwei Changesets, die READMEs von deprecated/ und in-progress/, der git-guardrails-Skill samt Hook-Skript, hitl-loop.template.sh, vier SKILL.md-Dateien (tdd, wait-what, grill-me, research) und zwei agents/openai.yaml. Teilweise gelesen: wayfinder/SKILL.md, .agents/writing-docs.md, docs/engineering/tdd.md, README.md, CHANGELOG.md.
Nicht geprüft: die meisten der 37 SKILL.md-Rümpfe (darunter ask-matt, grilling, teach, triage, to-spec, implement, prototype, wizard und sämtliche in-progress-Skills), 24 der 25 Doku-Seiten, .agents/adr/0002, .agents/install-block.md, eine .out-of-scope-Datei, die meisten Changesets sowie der Großteil von README.md und CHANGELOG.md. Keine externe Behauptung wurde verifiziert: weder der Marktplatz-Eintrag noch, ob die veröffentlichten Dokumentations-URLs auflösen, noch der Stand der vom Repository zitierten Issues, noch Link-Verfall. Commit-Historie, Review-Prozess und Branch-Schutz wurden nicht betrachtet; diese Seite kann deshalb nicht sagen, wie zügig die von Hand gepflegten Indizes synchron bleiben — nur, dass sie an dem am 2026-09-03 gelesenen HEAD in sich stimmig waren, als die obigen Zahlen erhoben wurden.
Thư mục skill agent cá nhân của một kỹ sư, được xuất bản thành một plugin cài đặt được, đánh phiên bản theo semver. Điều thú vị không nằm ở các skill — mà ở chỗ bản thân kỷ luật được đối xử như một sản phẩm để phân phối, với một quy trình phát hành, một mục tiêu tương thích và một quy chuẩn văn phong riêng của nhà.
37 tệp SKILL.md nằm dưới skills/, chia thành năm nhóm với những hợp đồng khác nhau: engineering/ (18) và productivity/ (7) được đề bạt, misc/ (4) được giữ lại nhưng không đề bạt, in-progress/ (8) là bản beta công khai một cách có chủ ý, deprecated/ rỗng theo chính sách. Được đề bạt nghĩa là ba hệ quả: một mục trong .claude-plugin/plugin.json, một dòng trong README.md, một trang tại docs/<bucket>/<name>.md. Đếm trên cây tệp vào ngày 2026-09-03: 25 skill được đề bạt, 25 mục trong manifest (phiên bản 1.2.3), 25 trang docs. Các con số khớp nhau.
Mỗi skill là một thư mục: SKILL.md với frontmatter YAML, một tệp anh em bắt buộc agents/openai.yaml chứa cùng siêu dữ liệu đó bằng từ vựng của Codex (37 skill, 37 bản sinh đôi), thường có các tệp đồng hành viết HOA TOÀN BỘ, đôi khi có scripts/. Bên cạnh đó: .agents/ chứa các quy ước của chính kho này và hai ADR, .out-of-scope/ chứa ba bản ghi từ chối, .changeset/ chứa chín ghi chú phát hành đang chờ, một CHANGELOG.md 44 KB, một workflow GitHub. Kích thước chênh nhau rất mạnh — grill-me/SKILL.md nặng 157 byte mà toàn bộ phần thân chỉ là Call the Skill tool with "grilling".; wayfinder/SKILL.md nặng 11,908.
Người-gọi so với mô-hình-gọi, được khai báo hai lần cho mỗi skill
5b Chỉ mục, ngày tháng, khử trùng lặp
● đảm đương
plugin.json, README.md, bốn README của các nhóm, docs/, CHANGELOG.md
Manifest, README và bản sao trong docs khớp nhau về số lượng tại HEAD này
Lớp 4 nằm thấp hơn một bậc so với giá trị thô của làn điều tra: lịch sử commit chưa bao giờ được xem xét, nên "được viết trước khi làm" không thể chứng minh được.
Cổng chặn quay ra ngoài. Kho này gửi đi một thứ biết từ chối thật sự nhưng không cưỡng chế bằng máy móc bất kỳ bất biến nào của chính nó. block-dangerous-git.sh là một hook PreToolUse thật của Claude Code: nó grep câu lệnh được đề xuất rồi thoát ra với mã 2, đúng đoạn mã khiến harness từ chối thay vì chỉ cảnh báo. Trong khi đó CLAUDE.md nêu những bất biến cứng — mọi skill được đề bạt phải có trong README.mdvàplugin.json, mọi skill được đề bạt phải có một trang docs — rồi cưỡng chế chúng bằng câu "Run claude plugin validate . --strict after touching either manifest", một lời chỉ dẫn lịch sự gửi cho một con người.
Cú suýt trúng làm điều đó sắc nét hơn. sync-plugin-version.mjs --check có tồn tại, được nối vào package.json dưới tên check-plugin-version, và thoát ra với mã 1 khi phiên bản lệch nhau: một cổng chặn đúng đắn cho chính nội dung của kho này. Workflow duy nhất chạy npm ci và action của changesets, và không bao giờ gọi nó. Cổng chặn đã được viết, rồi không được nối vào. Đó không phải một lời chê trách nhắm vào một tác giả — nó là hình dạng phổ biến nhất trong cả tập ngữ liệu, và ở đây chỉ thấy rõ vì sợi dây còn thiếu chỉ cách chỗ đúng của nó đúng một dòng.
Kỷ luật kích hoạt là thứ mạnh nhất ở đây..agents/invocation.md định nghĩa một cặp nhị phân mà không nơi nào khác trong nghiên cứu này định nghĩa kỹ đến thế: một skill hoặc là được-người-gọi (disable-model-invocation: true trong frontmatter, policy.allow_implicit_invocation: false trong bản sinh đôi cho Codex) hoặc là được-mô-hình-gọi, giống nhau ở cả hai harness hoặc không ở đâu cả, với mô tả hướng tới con người trong trường hợp đầu và giàu điều kiện kích hoạt trong trường hợp sau. Điểm yếu thường thấy của Lớp 5 là câu hỏi "cái này nạp khi nào?" bị bỏ lại cho một câu văn đầy hy vọng. Ở đây nó là một thuộc tính được khai báo, nằm trên hai tệp, của mọi skill.
Kỷ luật được phát hành, chứ không chỉ được viết ra. Mọi thay đổi về hành vi của một prompt đều đi qua một tệp .changeset/*.md khai báo "mattpocock-skills": patch; một Action mở một PR chore: version skills; changesets viết ra CHANGELOG.md 44 KB với các liên kết theo từng PR và từng commit; kết quả được cài ở phiên bản 1.2.3. Lớp 5 hỏi liệu bạn có tìm lại được thứ mình đã viết và liệu nó có tồn tại đúng một lần; còn điều này hỏi liệu một người lạ ở hạ nguồn có thể ghim, so diff và nâng cấp nó hay không. Một changeset không phải một bản plan viết trước khi làm, cũng không phải một mục trong chỉ mục — nó là một ghi chú phát hành gửi tới những người mà tác giả sẽ không bao giờ gặp, và nó tồn tại chỉ vì tập ngữ liệu này được xuất xưởng.
Một trang đối ứng cho mỗi skill, kể cả những phần không hoạt động. 25 trang dưới docs/, mỗi trang được dựng theo một khuôn cố định trong .agents/writing-docs.md và kết lại bằng "It's working if" — một bài kiểm tra thành công quan sát được, dành cho một prompt. Lý do được nêu ra: phần lớn skill ở đây là được-người-gọi, nên con người chính là cái chỉ mục phải nhớ rằng chúng tồn tại. docs/engineering/tdd.md còn đi xa hơn và công bố chính lỗ hổng của skill kèm một liên kết sống: "That last row is a real hole… It is issue #746 and it is open. Until it closes, that judgement is yours or your CLAUDE.md's." Lớp 5 nói về việc định vị một hiện vật; còn đây nói về việc một con người trong nhiều tháng quyết định tin một hiện vật tới đâu, và được nói thẳng bằng văn bản chỗ nào nó thôi hoạt động. Nó chiếm khoảng một phần ba số byte của kho.
Bốn thứ nữa nằm ngoài mô hình: bản sinh đôi cho Codex ở mỗi skill, được giữ đồng bộ chỉ bằng quy định chứ không bằng gì khác; một thang trưởng thành trong đó việc thuộc nhóm nào sẽ quyết định chuyện được xuất xưởng, được liệt kê và được viết tài liệu; CONTEXT.md như một dạng quản trị từ vựng với danh sách _Avoid_: các từ đồng nghĩa bị cấm cho từng thuật ngữ; và một lệnh cấm dấu gạch ngang em trong nhà, được duy trì bằng tay xuyên suốt ba changeset đã phát hành.
Nhìn chung chúng khớp nhau, và kho này trung thực một cách khác thường về những lỗ hổng của mình. Ba điều nổi bật: các bất biến về thành viên trong CLAUDE.md đúng theo phép đếm tại HEAD này và không có gì kiểm tra chúng; check-plugin-version thoát ra với mã 1 khi lệch phiên bản còn workflow phát hành thì không bao giờ gọi nó; và skills/deprecated/README.md tự mâu thuẫn với chính nhóm của nó — "This bucket is currently empty: a retired skill is deleted, and the changeset that removes it names whatever replaced it." Điều cuối cùng là một lựa chọn thay thế mạch lạc chứ không phải một khiếm khuyết, vì CHANGELOG đã làm thay việc của kho lưu trữ, và nó có nghĩa là lưu-trữ-chứ-không-xóa là một quy ước, chứ không phải một luật. Có một tuyên bố trong README hoàn toàn không thể kiểm chứng được từ cây tệp: rằng plugin này nằm trong marketplace chính thức của Claude Code.
Hãy khai báo, cho từng skill, liệu mô hình có được phép nạp nó hay không. Cặp nhị phân được-người-gọi / được-mô-hình-gọi, đặt trong frontmatter và được giữ bằng một bất biến, là cách sửa rẻ nhất cho kiểu hỏng phổ biến nhất của lớp 5.
Hãy nối vào cái kiểm tra mà bạn đã viết rồi. Trước khi viết một validator, hãy tìm cái đang nằm trong package.json mà CI không bao giờ gọi.
Hãy cho mỗi nghi thức một bài kiểm tra thành công quan sát được. "It's working if…" biến một prompt từ thứ bạn hy vọng là có ích thành thứ bạn kiểm tra được. Một mục cho mỗi tài liệu.
Hãy công bố lỗ hổng. Liên kết tới một issue đang mở từ trong tài liệu, ngay ở chỗ mô tả trường hợp mà công cụ không xử lý được, thì hơn hẳn một trang tuyên bố bao phủ toàn bộ, và nó vẫn đúng theo thời gian.
Khoảng bảy phút xem xét chỉ-đọc qua gh api và raw.githubusercontent.com; không có gì được clone hay ghi. Đọc toàn bộ: các tệp quy tắc và manifest của chính kho (AGENTS.md, CLAUDE.md, CONTEXT.md, package.json, cả hai manifest .claude-plugin, release.yml, cả ba tệp scripts/*, .agents/invocation.md, .agents/adr/0001), hai trong ba tệp .out-of-scope, hai changeset, các README của deprecated/ và in-progress/, skill git-guardrails cùng script hook của nó, hitl-loop.template.sh, bốn tệp SKILL.md (tdd, wait-what, grill-me, research) và hai tệp agents/openai.yaml. Đọc một phần: wayfinder/SKILL.md, .agents/writing-docs.md, docs/engineering/tdd.md, README.md, CHANGELOG.md.
Không xem xét: phần lớn thân của 37 tệp SKILL.md (gồm ask-matt, grilling, teach, triage, to-spec, implement, prototype, wizard và mọi skill in-progress), 24 trong số 25 trang docs, .agents/adr/0002, .agents/install-block.md, một tệp .out-of-scope, hầu hết các changeset, và phần lớn README.md cùng CHANGELOG.md. Không tuyên bố bên ngoài nào được kiểm chứng: không phải việc niêm yết trên marketplace, không phải việc các URL tài liệu đã xuất bản có phân giải được hay không, không phải trạng thái của những issue mà kho này trích dẫn, không phải chuyện link rot. Lịch sử commit, quy trình review và cơ chế bảo vệ nhánh đều không được xem xét, nên trang này không thể nói các chỉ mục duy trì bằng tay được giữ đồng bộ nhanh đến đâu — chỉ có thể nói rằng chúng nhất quán nội tại tại HEAD được đọc vào 2026-09-03, thời điểm các con số nêu trên được lấy.
Four behavioural guidelines for coding agents — Think Before Coding, Simplicity First, Surgical Changes, Goal-Driven Execution — about 2.4 KB of normative prose, shipped verbatim in four host formats. Despite the plural in its name it holds exactly one skill file: this is a standing rule file, and an unusually clean one.
Thirteen tree entries at HEAD: nine files totalling ~37.7 KB, four directories. The normative text lives in CLAUDE.md (2,357 B) and exists byte-for-byte again in skills/karpathy-guidelines/SKILL.md (2,518 B) and .cursor/rules/karpathy-guidelines.mdc (2,638 B); CURSOR.md (1,955 B) explains how to get that same text into further hosts. Two READMEs (~6 KB each) restate the rule set at roughly three times its length, and EXAMPLES.md is the largest file at 14,838 B — about 40 % of all bytes. Two JSON manifests under .claude-plugin/ make it installable as a plugin.
No .github/, no scripts/, no tests, no package.json, no CI configuration: a tree-wide match for workflow|test|lint|valid|schema|hook|ci|script|.yml|.yaml|package.json hit none of the thirteen paths.
A registry indexing exactly one plugin — self-registration for distribution, not an index of a corpus. No dates, no archive; dedup deliberately reversed.
Our raw investigation record scored layers 3, 4 and 5 each as a single "touches"; under the strict rulings this series uses, layer 3 splits into an absent 3a and a carried 3b, layer 4 falls to absent, and layer 5 splits into a carried 5a and a touching 5b. The table holds the strict verdicts.
Layer 2 is the interesting row, because the gate exists — just not here.CURSOR.md states a real invariant: when you change the four principles, keep CLAUDE.md and .cursor/rules/karpathy-guidelines.mdc in sync. That is a correctness condition across four physical copies, with no check of any kind behind it. Yet the commit history shows the repository was shaped by a gate from outside it — commits on 2026-01-31 read "Fix plugin.json schema validation errors" and "Fix plugin structure for Claude Code compatibility", plus a later "Fix plugin skill path". The host platform's validator refused this repository until it complied. Layer 2 is therefore not missing from the ecosystem, it is externalised: the repository ships no gate and, for the plugin manifest, needs none. Its own sync duty is the part nobody validates.
Layer 5b reads as a decision, not an omission. "Each thing exists exactly once" is not merely unmet here, it is inverted on purpose. CURSOR.md gives the reason plainly — "Cursor does not read .claude-plugin/ or CLAUDE.md by default" — and then routes the same spec four ways, down to CLAUDE.md as the fallback "if a stack only supports a root instruction file". Where hosts are mutually incompatible, deduplication and portability pull against each other, and this repository chose portability with its eyes open. What is missing is not the decision but the mechanism that keeps the copies equal.
A counter-example corpus that nothing links to.EXAMPLES.md is built entirely from pairs — "❌ What LLMs Do" against "✅ What Should Happen", in runnable Python, across nine worked cases — closing with an anti-patterns table and a "Key Insight" arguing the bad versions are wrong on timing, not on principle: they add complexity before it is needed. It teaches a norm by exhibiting its violation, and it does that well. No layer has a slot for it: not a rule (nothing loads it), not a gate, not a ritual, not a record of intent, not an index. A taxonomy that cannot place 40 % of a corpus by volume is missing a category, and the honest name for the missing one is demonstration material.
It is also unreachable. We grepped case-insensitively for examples.md in all eight other files and got zero hits in every one: plugin.json ships only ./skills/karpathy-guidelines, the Cursor rule is only the .mdc, CLAUDE.md is self-contained, and neither README mentions it. No agent loads it; no reader following links arrives at it.
Rules about the rules.CLAUDE.md closes with a falsification test for itself: "These guidelines are working if: fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, and clarifying questions come before implementation rather than after mistakes." Near the top it names its own price: "Tradeoff: These guidelines bias toward caution over speed. For trivial tasks, use judgment." (Both lines were still at HEAD when we re-read the file on 2026-09-03.) Every layer in our model governs the work; these two govern the rule set — one says how you would notice it is useless, the other what it costs and where to switch it off. A standing rule file is by definition what is always true, so a clause arguing against its own universality has nowhere to live in the model. In a corpus with no gates, that efficacy line is the only thing that would ever tell you the corpus is not earning its tokens.
On infrastructure they agree, and that deserves saying: the README advertises no CI, tests or validation, and none exist. Nothing is over-claimed.
Two mismatches remain. First, owner drift: both READMEs still give install commands for a different slug — README.md:105 reads /plugin marketplace add forrestchang/andrej-karpathy-skills, and lines 119 and 125 curl from raw.githubusercontent.com/forrestchang/… (re-fetched 2026-09-03; unchanged), with identical lines in README.zh.md; marketplace.jsonowner.name and plugin.jsonauthor.name carry the old name too. GitHub's redirect very probably keeps the commands working, so this is a naming inconsistency rather than a broken install — but the documented identity no longer matches the tree's home. Second, EXAMPLES.md: the tree holds a major artefact the documentation never claims.
Copy the two meta-lines. A rule file that states what it costs and how you would know it is working is rarer than one that states good rules. Both fit in two sentences.
Copy the stop-and-ask sentence, unhedged.CLAUDE.md §1 gets layer 3b right in one line, with no ritual around it.
If N hosts read N paths, make the duplication mechanical — a generated copy or a one-command check. Prose cannot notice when four copies drift.
Run a link check over your own repository. One pass surfaces a largest file with no inbound reference, and a stale slug in an install command, in the same sweep.
Roughly six minutes, read-only, via the GitHub API and raw.githubusercontent.com. Eight of the nine files were opened in full; of EXAMPLES.md we read the first 220 and last 60 lines in full and saw the remaining ~60 lines (the Surgical Changes examples 1–2) only through a grep of headings and section markers, not as body text. README.zh.md was not read as prose — only its top line and the install commands at lines 105/119/125 — so we make no claim that the Chinese translation is faithful to the English on the four principles.
Not inspected at all: open issues and pull requests (21,340 forks and several merged PRs suggest a contribution surface we did not characterise), the four non-main branches, releases and tags, and repository settings. That last gap matters for the layer-2 verdict: a required status check configured in GitHub settings would be a real gate, invisible in the tree, and we did not query it. Star and fork counts are dated observations from 2026-09-03; they measure attention, not quality, and here they attach to about 2.4 KB of prose.
andrej-karpathy-skills — eine 2,4 KB große Standing-Rule-Datei mit einem Plural im Namen#
Vier Verhaltensregeln für Coding-Agenten — Think Before Coding, Simplicity First, Surgical Changes, Goal-Driven Execution — rund 2,4 KB normativer Prosa, wortgleich in vier Host-Formaten ausgeliefert. Trotz des Plurals im Namen enthält das Repository genau eine Skill-Datei: Es ist eine Standing-Rule-Datei, und eine ungewöhnlich saubere.
Dreizehn Tree-Einträge auf HEAD: neun Dateien mit zusammen ~37,7 KB, vier Verzeichnisse. Der normative Text steht in CLAUDE.md (2.357 B) und existiert Byte für Byte noch einmal in skills/karpathy-guidelines/SKILL.md (2.518 B) und .cursor/rules/karpathy-guidelines.mdc (2.638 B); CURSOR.md (1.955 B) erklärt, wie derselbe Text in weitere Hosts kommt. Zwei READMEs (je ~6 KB) geben das Regelwerk in etwa dreifacher Länge wieder, und EXAMPLES.md ist mit 14.838 B die größte Datei — rund 40 % aller Bytes. Zwei JSON-Manifeste unter .claude-plugin/ machen das Ganze als Plugin installierbar.
Kein .github/, kein scripts/, keine Tests, keine package.json, keine CI-Konfiguration: Eine baumweite Suche nach workflow|test|lint|valid|schema|hook|ci|script|.yml|.yaml|package.json traf keinen der dreizehn Pfade.
Eine Registry, die genau ein Plugin führt — Selbstregistrierung zur Verteilung, kein Index eines Korpus. Keine Daten, kein Archiv; Dedup bewusst umgekehrt.
Unser Rohbefund aus der Untersuchung bewertete die Schichten 3, 4 und 5 jeweils pauschal mit „berührt"; nach den strengen Regeln dieser Reihe zerfällt Schicht 3 in ein fehlendes 3a und ein getragenes 3b, Schicht 4 rutscht auf „fehlt", und Schicht 5 zerfällt in ein getragenes 5a und ein berührendes 5b. In der Tabelle stehen die strengen Urteile.
Schicht 2 ist die interessante Zeile, denn das Gate existiert — nur nicht hier.CURSOR.md formuliert eine echte Invariante: Wer die vier Prinzipien ändert, muss CLAUDE.md und .cursor/rules/karpathy-guidelines.mdc synchron halten. Das ist eine Korrektheitsbedingung über vier physische Kopien hinweg — und dahinter steht keinerlei Prüfung. Die Commit-Historie zeigt allerdings, dass das Repository sehr wohl von einem Gate geformt wurde, nur von außen: Commits vom 2026-01-31 lauten „Fix plugin.json schema validation errors" und „Fix plugin structure for Claude Code compatibility", später folgt „Fix plugin skill path". Der Validator der Host-Plattform hat dieses Repository so lange abgelehnt, bis es passte. Schicht 2 fehlt im Ökosystem also nicht, sie ist ausgelagert: Das Repository liefert kein Gate aus und braucht für das Plugin-Manifest auch keines. Ungeprüft bleibt genau die eigene Synchronisationspflicht.
Schicht 5b liest sich als Entscheidung, nicht als Versäumnis. „Jedes Ding existiert genau einmal" ist hier nicht bloß unerfüllt, es ist absichtlich umgedreht. CURSOR.md nennt den Grund offen — „Cursor does not read .claude-plugin/ or CLAUDE.md by default" — und leitet dieselbe Spezifikation dann auf vier Wegen aus, bis hin zu CLAUDE.md als Rückfallebene „if a stack only supports a root instruction file". Wo Hosts zueinander inkompatibel sind, ziehen Deduplizierung und Portabilität in entgegengesetzte Richtungen, und dieses Repository hat sich sehenden Auges für Portabilität entschieden. Es fehlt nicht die Entscheidung, sondern der Mechanismus, der die Kopien danach gleich hält.
Ein Gegenbeispiel-Korpus, auf den nichts verweist.EXAMPLES.md besteht durchgehend aus Paaren — „❌ What LLMs Do" gegen „✅ What Should Happen", in lauffähigem Python, über neun ausgearbeitete Fälle — und schließt mit einer Anti-Pattern-Tabelle und einem „Key Insight", der argumentiert, dass die schlechten Varianten im Zeitpunkt falsch liegen, nicht im Prinzip: Sie fügen Komplexität hinzu, bevor sie gebraucht wird. Das Dokument lehrt eine Norm, indem es ihre Verletzung vorführt — und es tut das gut. Keine Schicht hat einen Platz dafür: keine Regel (nichts lädt es), kein Gate, kein Ritual, kein Nachweis einer Absicht, kein Index. Eine Taxonomie, die 40 % eines Korpus nach Volumen nicht unterbringen kann, hat eine Kategorie zu wenig, und der ehrliche Name für die fehlende lautet Anschauungsmaterial.
Es ist zudem unerreichbar. Wir haben in allen acht übrigen Dateien ohne Groß-/Kleinschreibung nach examples.md gesucht und in jeder einzelnen null Treffer bekommen: plugin.json liefert nur ./skills/karpathy-guidelines aus, die Cursor-Regel ist allein die .mdc, CLAUDE.md ist in sich geschlossen, und keines der beiden READMEs erwähnt die Datei. Kein Agent lädt sie; kein Leser, der Links folgt, kommt dort an.
Regeln über die Regeln.CLAUDE.md endet mit einem Falsifikationstest über sich selbst: „These guidelines are working if: fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, and clarifying questions come before implementation rather than after mistakes." Weiter oben benennt die Datei ihren eigenen Preis: „Tradeoff: These guidelines bias toward caution over speed. For trivial tasks, use judgment." (Beide Zeilen standen noch auf HEAD, als wir die Datei am 2026-09-03 erneut gelesen haben.) Jede Schicht unseres Modells regelt die Arbeit; diese beiden Zeilen regeln das Regelwerk — die eine sagt, woran man merken würde, dass es nichts taugt, die andere, was es kostet und wo man es abschalten soll. Eine Standing-Rule-Datei ist definitionsgemäß das, was immer gilt; eine Klausel, die gegen ihre eigene Allgemeingültigkeit argumentiert, hat im Modell keinen Ort. In einem Korpus ohne Gates ist genau jene Wirksamkeitszeile das Einzige, was jemals verraten würde, dass der Korpus seine Tokens nicht wert ist.
Bei der Infrastruktur stimmen sie überein, und das gehört gesagt: Das README wirbt weder mit CI noch mit Tests oder Validierung — und nichts davon existiert. Es wird nichts behauptet, was fehlt.
Zwei Abweichungen bleiben. Erstens ein Owner-Drift: Beide READMEs geben Installationsbefehle für einen anderen Slug an — README.md:105 lautet /plugin marketplace add forrestchang/andrej-karpathy-skills, und die Zeilen 119 und 125 holen per curl von raw.githubusercontent.com/forrestchang/… (am 2026-09-03 erneut abgerufen, unverändert), mit identischen Zeilen in README.zh.md; auch marketplace.jsonowner.name und plugin.jsonauthor.name tragen noch den alten Namen. GitHubs Weiterleitung hält die Befehle sehr wahrscheinlich funktionsfähig, es ist also eine Namensinkonsistenz und keine kaputte Installation — aber die dokumentierte Identität passt nicht mehr zum Ort des Baums. Zweitens EXAMPLES.md: Der Baum enthält ein großes Artefakt, das die Dokumentation nie erwähnt.
Die beiden Meta-Zeilen übernehmen. Eine Regeldatei, die sagt, was sie kostet und woran man ihre Wirkung erkennt, ist seltener als eine, die gute Regeln aufstellt. Beides passt in zwei Sätze.
Den Halt-und-frag-Satz übernehmen, ohne Weichmacher.CLAUDE.md §1 erledigt Schicht 3b in einer Zeile, ganz ohne Ritual drumherum.
Wenn N Hosts N Pfade lesen, mache die Duplizierung mechanisch — eine generierte Kopie oder eine Prüfung per Kommando. Prosa merkt nicht, wenn vier Kopien auseinanderlaufen.
Einen Link-Check über das eigene Repository laufen lassen. Ein Durchlauf zeigt eine größte Datei ohne eingehende Referenz und einen veralteten Slug im Installationsbefehl im selben Zug.
Rund sechs Minuten, ausschließlich lesend, über die GitHub-API und raw.githubusercontent.com. Acht der neun Dateien wurden vollständig geöffnet; von EXAMPLES.md haben wir die ersten 220 und die letzten 60 Zeilen vollständig gelesen und die verbleibenden ~60 Zeilen (die Surgical Changes-Beispiele 1–2) nur über eine Suche nach Überschriften und Abschnittsmarken gesehen, nicht als Fließtext. README.zh.md wurde nicht als Prosa gelesen — nur die oberste Zeile und die Installationsbefehle in den Zeilen 105/119/125 —, wir behaupten also nicht, dass die chinesische Übersetzung bei den vier Prinzipien dem Englischen entspricht.
Gar nicht angesehen: offene Issues und Pull Requests (21.340 Forks und mehrere gemergte PRs deuten auf eine Beitragsfläche hin, die wir nicht beschrieben haben), die vier Nicht-main-Branches, Releases und Tags sowie die Repository-Einstellungen. Die letzte Lücke ist für das Urteil zu Schicht 2 erheblich: Ein in den GitHub-Einstellungen konfigurierter Pflicht-Check wäre ein echtes Gate, im Baum unsichtbar — und wir haben ihn nicht abgefragt. Stern- und Fork-Zahlen sind datierte Beobachtungen vom 2026-09-03; sie messen Aufmerksamkeit, nicht Qualität, und hier hängen sie an rund 2,4 KB Prosa.
andrej-karpathy-skills — một tệp quy tắc thường trực 2.4 KB mang cái tên số nhiều#
Bốn hướng dẫn hành vi dành cho agent lập trình — Think Before Coding, Simplicity First, Surgical Changes, Goal-Driven Execution — khoảng 2.4 KB văn xuôi quy phạm, được giao nguyên văn ở bốn định dạng host. Bất chấp dạng số nhiều trong tên, nó chứa đúng một tệp skill: đây là một tệp quy tắc thường trực, và là một tệp sạch sẽ khác thường.
Mười ba mục trong cây tại HEAD: chín tệp tổng cộng ~37.7 KB, bốn thư mục. Văn bản quy phạm nằm trong CLAUDE.md (2,357 B) và tồn tại lại từng byte một trong skills/karpathy-guidelines/SKILL.md (2,518 B) và .cursor/rules/karpathy-guidelines.mdc (2,638 B); CURSOR.md (1,955 B) giải thích cách đưa chính văn bản đó vào thêm các host khác. Hai tệp README (~6 KB mỗi tệp) trình bày lại bộ quy tắc với độ dài gấp khoảng ba lần, còn EXAMPLES.md là tệp lớn nhất với 14,838 B — khoảng 40 % toàn bộ số byte. Hai manifest JSON dưới .claude-plugin/ khiến nó cài đặt được như một plugin.
Không có .github/, không scripts/, không test, không package.json, không cấu hình CI: một phép so khớp trên toàn cây với workflow|test|lint|valid|schema|hook|ci|script|.yml|.yaml|package.json không trúng đường dẫn nào trong mười ba đường dẫn.
Chỉ nội dung luôn-đúng — không đường dẫn, không lệnh, không đặc thù dự án. Bản song sinh cho Cursor đặt alwaysApply: true.
2 · Cổng chặn cơ học
· vắng mặt
danh sách đầy đủ 13 đường dẫn của cây; CURSOR.md
Không gì trong kho có thể từ chối bất cứ điều gì.
3a · Trigger + các bước có thứ tự
· vắng mặt
CLAUDE.md §4
Một khuôn mẫu kế hoạch bốn dòng (1. [Step] → verify: [check]) cho công việc bất kỳ: không nêu tên công việc nào, không có gì lặp lại, không có trigger.
3b · Điểm dừng-và-hỏi
● có mang
CLAUDE.md §1
"Nếu điều gì đó chưa rõ, hãy dừng lại. Gọi tên thứ gây khó hiểu. Hỏi." — không rào đón, có trong cả ba bản sao lúc chạy.
4 · Bản ghi thành văn
· vắng mặt
CLAUDE.md §4; không ADR, không CONTRIBUTING, không tệp kế hoạch hay điều lệ ở bất cứ đâu
Không gì được lưu lại — không bởi kho, cũng không nằm trong kho.
5a · Metadata trigger
● có mang
frontmatter description: của SKILL.md; alwaysApply: true trong .mdc
Văn bản khi-nào-nạp thực sự, cộng thêm quyết định ngược lại được đưa ra một cách tường minh cho host thứ hai.
Một registry lập chỉ mục đúng một plugin — tự đăng ký để phân phối, chứ không phải chỉ mục của một kho tư liệu. Không ngày tháng, không lưu trữ; khử trùng lặp bị đảo ngược có chủ ý.
Bản ghi điều tra thô của chúng tôi chấm các tầng 3, 4 và 5 mỗi tầng một điểm "chạm tới" duy nhất; theo các phán quyết nghiêm ngặt mà loạt bài này dùng, tầng 3 tách thành 3a vắng mặt và 3b có mang, tầng 4 rơi xuống vắng mặt, còn tầng 5 tách thành 5a có mang và 5b chạm tới. Bảng trên giữ các phán quyết nghiêm ngặt.
Tầng 2 là hàng thú vị, bởi cổng chặn có tồn tại — chỉ là không ở đây.CURSOR.md phát biểu một bất biến thực sự: khi bạn thay đổi bốn nguyên tắc, hãy giữ CLAUDE.md và .cursor/rules/karpathy-guidelines.mdc đồng bộ với nhau. Đó là một điều kiện đúng đắn trải trên bốn bản sao vật lý, mà chẳng có phép kiểm tra nào đứng sau. Vậy mà lịch sử commit cho thấy kho này đã được định hình bởi một cổng chặn từ bên ngoài nó — các commit ngày 2026-01-31 ghi "Fix plugin.json schema validation errors" và "Fix plugin structure for Claude Code compatibility", cộng thêm một commit sau đó "Fix plugin skill path". Trình xác thực của nền tảng host đã từ chối kho này cho tới khi nó tuân thủ. Vì vậy tầng 2 không phải là thiếu khỏi hệ sinh thái, nó được đẩy ra bên ngoài: kho không giao kèm cổng chặn nào và, với manifest plugin, cũng chẳng cần. Chính nghĩa vụ đồng bộ của bản thân nó mới là phần không ai xác thực.
Tầng 5b đọc lên như một quyết định, không phải một sự bỏ sót. "Mỗi thứ tồn tại đúng một lần" ở đây không chỉ đơn thuần là không được đáp ứng, nó bị đảo ngược một cách cố ý. CURSOR.md nêu lý do rất thẳng thắn — "Cursor mặc định không đọc .claude-plugin/ hay CLAUDE.md" — rồi định tuyến cùng một đặc tả theo bốn hướng, xuống tới CLAUDE.md như phương án dự phòng "nếu một stack chỉ hỗ trợ một tệp chỉ dẫn ở thư mục gốc". Ở nơi các host không tương thích lẫn nhau, khử trùng lặp và tính khả chuyển kéo ngược chiều nhau, và kho này đã chọn tính khả chuyển với đôi mắt mở to. Thứ còn thiếu không phải là quyết định mà là cơ chế giữ cho các bản sao bằng nhau.
Một kho phản-ví-dụ mà chẳng có gì liên kết tới.EXAMPLES.md được dựng hoàn toàn từ các cặp — "❌ What LLMs Do" đối lại "✅ What Should Happen", bằng Python chạy được, trải qua chín trường hợp đã làm mẫu — khép lại bằng một bảng anti-pattern và một mục "Key Insight" lập luận rằng các phiên bản tồi sai ở thời điểm, chứ không sai về nguyên tắc: chúng thêm độ phức tạp trước khi cần đến. Nó dạy một chuẩn mực bằng cách trưng ra sự vi phạm chuẩn mực đó, và nó làm việc ấy tốt. Không tầng nào có chỗ cho nó: không phải quy tắc (chẳng gì nạp nó), không phải cổng chặn, không phải nghi thức, không phải bản ghi ý định, không phải chỉ mục. Một phân loại không đặt nổi 40 % một kho tư liệu tính theo dung lượng là một phân loại thiếu mất một hạng mục, và cái tên trung thực cho hạng mục còn thiếu ấy là tư liệu trình diễn.
Nó cũng bất khả đạt tới. Chúng tôi đã grep không phân biệt hoa thường cho examples.md trong cả tám tệp còn lại và nhận về không kết quả nào ở mọi tệp: plugin.json chỉ giao ./skills/karpathy-guidelines, quy tắc cho Cursor chỉ là tệp .mdc, CLAUDE.md khép kín trong chính nó, và không README nào nhắc tới nó. Không agent nào nạp nó; không độc giả nào lần theo liên kết mà tới được nó.
Những quy tắc về chính các quy tắc.CLAUDE.md khép lại bằng một phép kiểm chứng phủ định cho chính mình: "Các hướng dẫn này đang phát huy tác dụng nếu: ít thay đổi không cần thiết hơn trong các diff, ít lần viết lại vì làm quá phức tạp hơn, và các câu hỏi làm rõ đến trước khi cài đặt chứ không phải sau khi mắc lỗi." Gần phần đầu nó nêu cái giá của chính nó: "Đánh đổi: Các hướng dẫn này thiên về thận trọng hơn là tốc độ. Với những tác vụ tầm thường, hãy dùng phán đoán." (Cả hai dòng vẫn còn ở HEAD khi chúng tôi đọc lại tệp vào ngày 2026-09-03.) Mọi tầng trong mô hình của chúng tôi đều chi phối công việc; hai dòng này chi phối bộ quy tắc — một dòng nói bằng cách nào bạn sẽ nhận ra nó vô dụng, dòng kia nói nó tốn gì và ở đâu thì tắt nó đi. Một tệp quy tắc thường trực, theo định nghĩa, là những gì luôn đúng, nên một mệnh đề lập luận chống lại chính tính phổ quát của mình không có chỗ nào để tồn tại trong mô hình. Trong một kho tư liệu không có cổng chặn nào, dòng nói về hiệu lực ấy là thứ duy nhất có thể cho bạn biết rằng kho này không đáng số token nó tiêu.
Về hạ tầng thì chúng đồng thuận, và điều đó đáng được nói ra: README không quảng cáo CI, test hay xác thực nào, và cũng chẳng có cái nào tồn tại. Không có gì bị nói quá.
Còn lại hai chỗ vênh. Thứ nhất, trôi dạt chủ sở hữu: cả hai README vẫn đưa ra các lệnh cài đặt cho một slug khác — README.md:105 ghi /plugin marketplace add forrestchang/andrej-karpathy-skills, còn dòng 119 và 125 curl từ raw.githubusercontent.com/forrestchang/… (tải lại 2026-09-03; không đổi), với các dòng y hệt trong README.zh.md; owner.name trong marketplace.json và author.name trong plugin.json cũng mang cái tên cũ. Cơ chế chuyển hướng của GitHub rất có thể vẫn giữ cho các lệnh chạy được, nên đây là một sự thiếu nhất quán về tên gọi chứ không phải một bản cài hỏng — nhưng danh tính được ghi trong tài liệu không còn khớp với nơi cây thư mục thực sự cư ngụ. Thứ hai, EXAMPLES.md: cây thư mục chứa một hiện vật lớn mà tài liệu không hề nhắc tới.
Hãy sao chép hai dòng meta. Một tệp quy tắc nêu rõ nó tốn gì và bằng cách nào bạn biết nó đang phát huy tác dụng thì hiếm hơn một tệp chỉ nêu ra các quy tắc hay. Cả hai đều gói gọn trong hai câu.
Hãy sao chép câu dừng-và-hỏi, không rào đón.CLAUDE.md §1 làm đúng tầng 3b chỉ trong một dòng, mà không có nghi thức nào bao quanh.
Nếu N host đọc N đường dẫn, hãy làm cho việc nhân bản trở nên cơ học — một bản sao được sinh tự động hoặc một phép kiểm tra chạy bằng một lệnh. Văn xuôi không thể nhận ra khi bốn bản sao trôi dạt.
Hãy chạy một phép kiểm tra liên kết trên chính kho của bạn. Một lượt quét làm lộ ra tệp lớn nhất không có tham chiếu nào trỏ vào, và một slug lỗi thời trong một lệnh cài đặt, trong cùng một lần quét.
Khoảng sáu phút, chỉ đọc, qua GitHub API và raw.githubusercontent.com. Tám trong chín tệp đã được mở đọc đầy đủ; với EXAMPLES.md chúng tôi đọc trọn vẹn 220 dòng đầu và 60 dòng cuối, còn khoảng 60 dòng còn lại (các ví dụ 1–2 của Surgical Changes) chỉ được thấy qua một lần grep các tiêu đề và dấu mốc mục, chứ không phải dưới dạng nội dung. README.zh.md không được đọc như văn xuôi — chỉ dòng trên cùng và các lệnh cài đặt ở dòng 105/119/125 — nên chúng tôi không đưa ra khẳng định nào rằng bản dịch tiếng Trung là trung thành với bản tiếng Anh về bốn nguyên tắc.
Hoàn toàn không được kiểm tra: các issue và pull request đang mở (21,340 fork cùng vài PR đã merge gợi ý một bề mặt đóng góp mà chúng tôi chưa mô tả đặc điểm), bốn nhánh không phải main, các bản phát hành và tag, cùng các thiết lập của kho. Khoảng trống cuối cùng đó có ý nghĩa với phán quyết tầng 2: một status check bắt buộc được cấu hình trong thiết lập GitHub sẽ là một cổng chặn thực sự, vô hình trong cây thư mục, và chúng tôi đã không truy vấn nó. Số sao và số fork là những quan sát có gắn ngày từ 2026-09-03; chúng đo sự chú ý, không đo chất lượng, và ở đây chúng gắn vào khoảng 2.4 KB văn xuôi.
Nineteen self-contained Agent Skills, published as a plugin marketplace and framed by their own README as demonstration material — skills "that demonstrate what's possible", to "get inspiration for your own skills". It is a specimen collection, not an operating discipline, and reading it as the latter misjudges it. That is not a criticism — it is what the README says the repository is for.
419 files, 413 under skills/; the other six are README.md, .gitignore, THIRD_PARTY_NOTICES.md, .claude-plugin/marketplace.json, spec/agent-skills-spec.md and template/SKILL.md. Each skill directory holds a SKILL.md with name and description frontmatter; 18 of 19 also carry their own LICENSE.txt.
The mass is skewed — canvas-design 83 files, claude-api 70, docx 61, pptx 56, xlsx 53, together 323 of 413 — while eight skills have four files or fewer. By extension: 117 .xsd, 115 .md, 70 .py, 54 .ttf, 47 .txt: mostly reference material and tooling, not prose procedure. No .github/, no tests/, no CI config, no CHANGELOG, no AGENTS.md or CLAUDE.md.
Index complete and correct; no dates, no versions, no archive, dedup broken on purpose.
Three of the investigation lane's raw scores are read more strictly here: it recorded layers 2 and 5 as "carries" and layer 4 as "touches". This series requires a gate to refuse this repository's own contents and a record to be written before its own work. The 2′ and 4′ rows are where that reading puts what the repository genuinely does ship, so nothing is lost — only relocated. The evidence did not change, the question asked of it did.
Layer 2 is not missing — it is inverted.skills/docx/scripts/office/validate.py is 173 lines ending sys.exit(0 if success else 1), sys.exit(2) on bad input, checking generated Office XML against 117 bundled ISO/IEC 29500 and Microsoft schemas; docx/SKILL.md tells the agent to run it, plus a redlining check reporting text changed without a <w:ins>/<w:del> wrapper. skill-creator/scripts/quick_validate.py ends the same way. Real gates — but pointing outwards: they validate the agent's work product and ship as payload to whoever installs the skill, while nothing checks the corpus itself. A tree that hands strangers a validator and runs none on itself is a common pattern worth naming: the gate you can see in a diff is easy to mistake for one that protects you.
Layer 5b's duplication is a decision, not neglect. The tree with blob SHAs shows 50 distinct blobs present three times, byte-identical, across skills/docx, skills/pptx and skills/xlsx — validate.py (sha 29ca186a…), all 117 XSDs, all validators. A skill here is a separately licensed, independently installable unit, so it cannot depend on a sibling. Portability and "each thing exists exactly once" are in direct conflict; this repository chose portability, and our layer 5 scores only one side of that trade.
It measures whether a skill helps at all.skill-creator ships a paired-run benchmark: per test case it spawns a with-skill agent and a baseline — no skill when creating one, the snapshotted previous version when improving one — in the same turn, records {total_tokens, duration_ms}, grades pre-registered assertions, then python -m scripts.aggregate_benchmark reports pass rate, time and tokens per configuration "with mean +/- stddev and the delta". An analyst pass hunts for "assertions that always pass regardless of skill (non-discriminating), high-variance evals (possibly flaky), and time/token tradeoffs"; an optional blind judge sees two outputs "without telling it which is which".
All five layers ask about compliance — was the rule followed, can it be found, does something refuse when it is broken. None asks whether the rule earns its place. Note the direction: the with-skill run can lose, and the harness exists partly to catch an assertion that passes whether or not the skill was loaded. A gate asks "did you obey?"; this asks "was obeying worth it?" — a sixth discipline, and the one that would tell an organisation which standing rules to delete.
It fits the trigger description rather than writing it.scripts/run_loop.py (328 lines) treats the frontmatter description as a search problem: the source contains split_eval_set(eval_set, holdout, seed=42), stratified by should_trigger, and SKILL.md specifies a 60/40 train/test split, each query run three times "to get a reliable trigger rate", a model proposing replacements from what failed, and best_description chosen "by test score rather than train score to avoid overfitting". The evaluation set is engineered too: about 20 queries, half positive and half near-miss negatives, warning that a negative must be hard ("Write a fibonacci function" as a negative for a PDF skill "is too easy — it doesn't test anything"). Layer 5a assumes a human writes that description and that the discipline is keeping it accurate; here it is a fitted parameter guarding against a different failure — a description that scores well on the dozen queries you happened to think of and misroutes everything else.
Three further things fit no layer: per-skill licensing and third-party attribution, which force the triple copy above; two skills (discernment-nudge, academy-guide) triggered by the shape of the agent's own reply rather than by any job; and progressive disclosure as context-budget architecture.
README.md lists "./spec: The Agent Skills specification" as a headline skill set. spec/agent-skills-spec.md is three lines — "The spec is now located at <https://agentskills.io/specification>", re-checked live on 2026-09-03. Auditing this tree for its own rules now measures a forwarding address.
The README calls some skills Apache-2.0 and docx/pdf/pptx/xlsx "source-available", but gh api repos/anthropics/skills --jq .license returns null and there is no root licence file; licensing lives only in the 18 per-skill LICENSE.txt files, so a reader at the root cannot tell.
The README says frontmatter "requires only two fields: name and description" — true of all 19, but 17 also ship an undocumented third field, license:, mentioned neither there nor in the spec.
Copy the efficacy harness. Before adding a standing rule, ask what would prove it helps — and be willing to run the baseline that could show it does not. We found this nowhere else.
Copy the near-miss negatives. An index entry tested only against queries that should match it is untested; the hard cases are the ones that nearly match.
Do not read a validator in a tree as a gate on that tree. Ask of any sys.exit(1): what does it run against, and what runs it? Here — the agent's output, and the installing user.
When you empty a file, fix everything pointing at it in the same commit. The redirect in spec/ is fine; the README sentence calling it the specification is what misleads.
A corpus optimised for being copied from has a different and legitimate layer profile from one optimised for being operated. This repository invests in exactly the two layers redistribution needs and skips the three only an operating team needs — which describes our rubric at least as well as it describes the artefact.
Roughly seven minutes, read-only, via gh api and raw.githubusercontent.com; nothing cloned, nothing executed. Fully read: the six root files, all 485 lines of skill-creator/SKILL.md, all 91 of docx/SKILL.md, the body of discernment-nudge/SKILL.md, the frontmatter of all 19 SKILL.md files, and the complete 419-path tree with blob SHAs. Structure only — grepped for sys.exit, def, argparse, not read line by line: office/validate.py, quick_validate.py, run_loop.py; the quoted lines were seen, runtime behaviour was not verified.
Real gaps: the deep reference trees of the five heaviest skills (canvas-design, claude-api, pptx, xlsx, 60 of docx's 61 files) — the claim that they are reference material rather than procedure rests on file names plus one sampled SKILL.md; skill-creator/agents/{analyzer,comparator,grader}.md, quoted only as cited inside SKILL.md; the 18 LICENSE.txt bodies; mcp-builder/scripts/evaluation.py, which may hold a second evaluation harness; and eight further skills beyond their frontmatter. Git history, commits, contributors and issues were not inspected, so we cannot say whether the marketplace index is maintained over time or merely happens to be complete at this commit.
anthropics/skills — neunzehn Demonstrations-Skills, veröffentlicht zum Lesen, nicht zum Betreiben#
Neunzehn in sich geschlossene Agent Skills, veröffentlicht als Plugin-Marktplatz und von der eigenen README als Demonstrationsmaterial gerahmt — Skills, „that demonstrate what's possible", um „get inspiration for your own skills". Es ist eine Sammlung von Anschauungsstücken, keine betriebene Disziplin, und wer es als Letzteres liest, beurteilt es falsch. Das ist kein Vorwurf — es ist das, wofür die README das Repository erklärt.
419 Dateien, 413 davon unter skills/; die übrigen sechs sind README.md, .gitignore, THIRD_PARTY_NOTICES.md, .claude-plugin/marketplace.json, spec/agent-skills-spec.md und template/SKILL.md. Jedes Skill-Verzeichnis enthält eine SKILL.md mit name- und description-Frontmatter; 18 von 19 tragen zusätzlich eine eigene LICENSE.txt.
Die Masse ist stark ungleich verteilt — canvas-design 83 Dateien, claude-api 70, docx 61, pptx 56, xlsx 53, zusammen 323 von 413 — während acht Skills vier Dateien oder weniger haben. Nach Endung: 117 .xsd, 115 .md, 70 .py, 54 .ttf, 47 .txt: überwiegend Nachschlagematerial und Werkzeuge, keine Prosa-Prozeduren. Kein .github/, kein tests/, keine CI-Konfiguration, kein CHANGELOG, keine AGENTS.md und keine CLAUDE.md.
Eine eval_metadata.json, pro Testfall geschrieben, bevor die Ergebnisse bekannt sind, und später dagegen geprüft.
5a · Auslöser-Metadaten
● trägt
skills/xlsx/SKILL.md, skills/claude-api/SKILL.md
Das am besten Investierte hier: konstruierte Beschreibungen mit expliziten Negativgrenzen.
5b · Index, Daten, Dedup, Archiv
○ berührt
.claude-plugin/marketplace.json; 50 Blobs je 3× byte-identisch
Index vollständig und korrekt; keine Daten, keine Versionen, kein Archiv, Dedup absichtlich gebrochen.
Drei der Rohwertungen der Untersuchungsbahn werden hier strenger gelesen: sie hatte die Schichten 2 und 5 als „trägt" und Schicht 4 als „berührt" notiert. Diese Reihe verlangt, dass ein Gate die eigenen Inhalte dieses Repositorys verweigert und dass ein Vermerk vor dessen eigener Arbeit geschrieben wird. Die Zeilen 2′ und 4′ sind der Ort, an den diese Lesart das legt, was das Repository tatsächlich ausliefert — es geht also nichts verloren, es wird nur verschoben. Die Belege haben sich nicht geändert, die Frage an sie schon.
Schicht 2 fehlt nicht — sie ist umgedreht.skills/docx/scripts/office/validate.py sind 173 Zeilen, die mit sys.exit(0 if success else 1) enden, sys.exit(2) bei fehlerhafter Eingabe, und erzeugtes Office-XML gegen 117 mitgelieferte ISO/IEC-29500- und Microsoft-Schemata prüfen; docx/SKILL.md weist den Agenten an, das Skript auszuführen, dazu eine Redlining-Prüfung, die geänderten Text ohne <w:ins>/<w:del>-Klammer meldet. skill-creator/scripts/quick_validate.py endet genauso. Echte Gates — aber sie zeigen nach außen: Sie prüfen das Arbeitsergebnis des Agenten und werden als Nutzlast an alle ausgeliefert, die den Skill installieren, während nichts den Bestand selbst prüft. Ein Baum, der Fremden einen Validator in die Hand gibt und selbst keinen laufen lässt, ist ein verbreitetes Muster, das benannt gehört: Das Gate, das man im Diff sieht, wird leicht mit einem verwechselt, das einen schützt.
Die Duplikate in Schicht 5b sind eine Entscheidung, keine Nachlässigkeit. Der Baum mit den Blob-SHAs zeigt 50 verschiedene Blobs, die je dreimal byte-identisch in skills/docx, skills/pptx und skills/xlsx liegen — validate.py (SHA 29ca186a…), alle 117 XSDs, alle Validatoren. Ein Skill ist hier eine separat lizenzierte, unabhängig installierbare Einheit und darf deshalb nicht von einer Nachbareinheit abhängen. Portierbarkeit und „jedes Ding existiert genau einmal" stehen im direkten Widerspruch; dieses Repository hat sich für Portierbarkeit entschieden, und unsere Schicht 5 bewertet nur eine Seite dieses Handels.
Es misst, ob ein Skill überhaupt hilft.skill-creator liefert einen Benchmark mit gepaarten Läufen: Pro Testfall startet er im selben Zug einen Agenten mit Skill und eine Baseline — ohne Skill beim Neuanlegen, mit der als Momentaufnahme gesicherten Vorgängerversion beim Verbessern —, erfasst {total_tokens, duration_ms}, bewertet vorab registrierte Zusicherungen und meldet dann per python -m scripts.aggregate_benchmark Trefferquote, Zeit und Tokens je Konfiguration „with mean +/- stddev and the delta". Ein Analyse-Durchgang sucht gezielt nach „assertions that always pass regardless of skill (non-discriminating), high-variance evals (possibly flaky), and time/token tradeoffs"; ein optionaler blinder Juror sieht zwei Ausgaben, „without telling it which is which".
Alle fünf Schichten fragen nach Befolgung — wurde die Regel eingehalten, ist sie auffindbar, verweigert etwas, wenn sie gebrochen wird. Keine fragt, ob die Regel ihren Platz verdient. Man beachte die Richtung: Der Lauf mit Skill kann verlieren, und der Prüfstand existiert unter anderem, um eine Zusicherung zu entlarven, die mit wie ohne geladenen Skill besteht. Ein Gate fragt „hast du gehorcht?"; dies fragt „hat sich das Gehorchen gelohnt?" — eine sechste Disziplin, und diejenige, die einer Organisation sagen würde, welche ihrer festen Regeln zu löschen sind.
Es passt die Auslöser-Beschreibung an, statt sie zu schreiben.scripts/run_loop.py (328 Zeilen) behandelt die description im Frontmatter als Suchproblem: Der Quelltext enthält split_eval_set(eval_set, holdout, seed=42), stratifiziert nach should_trigger, und SKILL.md gibt eine 60/40-Aufteilung in Trainings- und Testmenge vor, jede Anfrage dreimal ausgeführt, „to get a reliable trigger rate", ein Modell, das aus den Fehlschlägen Ersatzformulierungen vorschlägt, und best_description, gewählt „by test score rather than train score to avoid overfitting". Auch die Evaluationsmenge ist konstruiert: rund 20 Anfragen, halb positiv, halb Beinahe-Treffer als Negativfälle, mit der Warnung, ein Negativfall müsse schwer sein („Write a fibonacci function" als Negativfall für einen PDF-Skill sei „too easy — it doesn't test anything"). Schicht 5a unterstellt, dass ein Mensch diese Beschreibung schreibt und die Disziplin darin besteht, sie aktuell zu halten; hier ist sie ein angepasster Parameter, der gegen ein anderes Versagen schützt — eine Beschreibung, die bei dem Dutzend Anfragen gut abschneidet, die einem gerade eingefallen sind, und alles Übrige falsch routet.
Drei weitere Dinge passen in keine Schicht: Lizenzierung je Skill und Drittanbieter-Nennungen, die die dreifache Kopie oben erzwingen; zwei Skills (discernment-nudge, academy-guide), deren Auslöser die Form der eigenen Antwort des Agenten ist und nicht irgendein Auftrag; und Progressive Disclosure als Architektur des Kontextbudgets.
Wo Dokumentation und Verzeichnisbaum sich widersprechen#
README.md führt „./spec: The Agent Skills specification" als eines der Haupt-Skill-Sets. spec/agent-skills-spec.md besteht aus drei Zeilen — „The spec is now located at <https://agentskills.io/specification>", live nachgeprüft am 2026-09-03. Wer diesen Baum auf seine eigenen Regeln prüft, misst inzwischen eine Nachsendeadresse.
Die README nennt einige Skills Apache-2.0 und docx/pdf/pptx/xlsx „source-available", doch gh api repos/anthropics/skills --jq .license liefert null, und eine Lizenzdatei im Wurzel- verzeichnis gibt es nicht; die Lizenzierung liegt allein in den 18 LICENSE.txt-Dateien der einzelnen Skills, sodass ein Leser an der Wurzel es nicht erkennen kann.
Die README sagt, das Frontmatter „requires only two fields: name and description" — für alle 19 zutreffend, aber 17 liefern zusätzlich ein undokumentiertes drittes Feld license:, das weder dort noch in der Spezifikation erwähnt wird.
Den Wirksamkeits-Prüfstand übernehmen. Bevor man eine feste Regel hinzufügt: fragen, was belegen würde, dass sie hilft — und bereit sein, die Baseline laufen zu lassen, die das Gegenteil zeigen könnte. Wir haben das sonst nirgends gefunden.
Die Beinahe-Treffer als Negativfälle übernehmen. Ein Indexeintrag, der nur gegen Anfragen getestet wird, die passen sollen, ist ungetestet; die harten Fälle sind die, die fast passen.
Einen Validator im Baum nicht als Gate über diesen Baum lesen. Bei jedem sys.exit(1) fragen: wogegen läuft es, und wer führt es aus? Hier — die Ausgabe des Agenten, und der installierende Nutzer.
Wenn man eine Datei leert, im selben Commit alles korrigieren, was auf sie zeigt. Die Weiterleitung in spec/ ist in Ordnung; irreführend ist der Satz in der README, der sie als die Spezifikation bezeichnet.
Ein Bestand, der darauf optimiert ist, von ihm abzuschreiben, hat ein anderes und legitimes Schichtprofil als einer, der auf Betrieb optimiert ist. Dieses Repository investiert genau in die zwei Schichten, die Weiterverbreitung braucht, und lässt die drei aus, die nur ein betreibendes Team braucht — was unsere Bewertungsmatrix mindestens so gut beschreibt wie das Artefakt.
Rund sieben Minuten, rein lesend, über gh api und raw.githubusercontent.com; nichts geklont, nichts ausgeführt. Vollständig gelesen: die sechs Wurzeldateien, alle 485 Zeilen von skill-creator/SKILL.md, alle 91 von docx/SKILL.md, der Rumpf von discernment-nudge/SKILL.md, das Frontmatter aller 19 SKILL.md-Dateien und der vollständige Baum mit 419 Pfaden samt Blob-SHAs. Nur strukturell — mit Grep nach sys.exit, def, argparse durchsucht, nicht Zeile für Zeile gelesen: office/validate.py, quick_validate.py, run_loop.py; die zitierten Zeilen wurden gesehen, das Laufzeitverhalten wurde nicht überprüft.
Echte Lücken: die tiefen Referenzbäume der fünf schwersten Skills (canvas-design, claude-api, pptx, xlsx, 60 der 61 Dateien von docx) — die Aussage, sie seien Nachschlagematerial und keine Prozedur, stützt sich auf Dateinamen plus eine stichprobenartig gelesene SKILL.md; skill-creator/agents/{analyzer,comparator,grader}.md, nur als Zitat innerhalb der SKILL.md erfasst; die Texte der 18 LICENSE.txt; mcp-builder/scripts/evaluation.py, das einen zweiten Evaluations-Prüfstand enthalten könnte; und acht weitere Skills über ihr Frontmatter hinaus. Git-Historie, Commits, Beitragende und Issues wurden nicht untersucht; wir können daher nicht sagen, ob der Marktplatz-Index über die Zeit gepflegt wird oder an diesem Commit nur zufällig vollständig ist.
anthropics/skills — mười chín skill trình diễn, xuất bản để được đọc chứ không phải để chạy#
Mười chín Agent Skill khép kín, xuất bản dưới dạng một chợ plugin và được chính README của chúng đóng khung như tư liệu trình diễn — những skill "thể hiện điều gì là khả thi", để "lấy cảm hứng cho skill của riêng bạn". Đây là một bộ sưu tập mẫu vật, không phải một kỷ luật vận hành, và đọc nó theo nghĩa sau là đánh giá sai nó. Đó không phải một lời chê — đó chính là điều README nói kho này dùng để làm gì.
419 tệp, 413 tệp nằm dưới skills/; sáu tệp còn lại là README.md, .gitignore, THIRD_PARTY_NOTICES.md, .claude-plugin/marketplace.json, spec/agent-skills-spec.md và template/SKILL.md. Mỗi thư mục skill chứa một SKILL.md với frontmatter name và description; 18 trong 19 skill còn mang theo LICENSE.txt riêng.
Khối lượng bị lệch — canvas-design 83 tệp, claude-api 70, docx 61, pptx 56, xlsx 53, cộng lại là 323 trong 413 — trong khi tám skill có bốn tệp hoặc ít hơn. Theo phần mở rộng: 117 .xsd, 115 .md, 70 .py, 54 .ttf, 47 .txt: chủ yếu là tư liệu tham chiếu và công cụ, không phải văn xuôi quy trình. Không có .github/, không tests/, không cấu hình CI, không CHANGELOG, không AGENTS.md hay CLAUDE.md.
Một eval_metadata.json được viết cho từng test case trước khi biết kết quả, rồi được đối chiếu về sau.
5a · Metadata trigger
● có mang
skills/xlsx/SKILL.md, skills/claude-api/SKILL.md
Thứ được đầu tư tốt nhất ở đây: các description được thiết kế kỹ, với những ranh giới phủ định tường minh.
5b · Chỉ mục, ngày tháng, khử trùng lặp, lưu trữ
○ chạm tới
.claude-plugin/marketplace.json; 50 blob hiện diện 3× giống hệt từng byte
Chỉ mục đầy đủ và chính xác; không ngày tháng, không phiên bản, không lưu trữ, khử trùng lặp bị phá vỡ có chủ ý.
Ba trong số các điểm thô của lane điều tra được đọc nghiêm ngặt hơn ở đây: lane đó ghi tầng 2 và tầng 5 là "có mang" và tầng 4 là "chạm tới". Loạt bài này đòi hỏi một cổng chặn phải từ chối được nội dung của chính kho này và một bản ghi phải được viết trước công việc của chính nó. Các hàng 2′ và 4′ là nơi cách đọc ấy đặt những gì kho này thực sự có giao đi, nên không có gì mất đi — chỉ là được dời chỗ. Bằng chứng không đổi, chỉ câu hỏi đặt ra cho nó là đổi.
Tầng 2 không thiếu — nó bị đảo ngược.skills/docx/scripts/office/validate.py dài 173 dòng, kết thúc bằng sys.exit(0 if success else 1), sys.exit(2) khi đầu vào sai, kiểm tra Office XML được sinh ra dựa trên 117 schema ISO/IEC 29500 và Microsoft đi kèm; docx/SKILL.md bảo agent chạy nó, cộng thêm một phép kiểm tra redlining báo cáo phần văn bản bị thay đổi mà không có bọc <w:ins>/<w:del>. skill-creator/scripts/quick_validate.py cũng kết thúc y như vậy. Đó là những cổng chặn thực thụ — nhưng hướng ra ngoài: chúng xác thực sản phẩm công việc của agent và được giao đi như tải trọng cho bất cứ ai cài skill, trong khi không gì kiểm tra chính kho tư liệu này. Một cây thư mục trao cho người lạ một trình xác thực mà lại không chạy trình nào lên chính mình là một khuôn mẫu phổ biến đáng được gọi tên: cái cổng chặn bạn nhìn thấy trong một diff rất dễ bị lầm là cái cổng chặn bảo vệ bạn.
Sự nhân bản ở tầng 5b là một quyết định, không phải sự cẩu thả. Cây thư mục kèm SHA của blob cho thấy 50 blob khác nhau hiện diện ba lần, giống hệt từng byte, trải trên skills/docx, skills/pptx và skills/xlsx — validate.py (sha 29ca186a…), toàn bộ 117 tệp XSD, toàn bộ các trình xác thực. Một skill ở đây là một đơn vị được cấp phép riêng, cài đặt được độc lập, nên nó không thể phụ thuộc vào một skill anh em. Tính khả chuyển và "mỗi thứ tồn tại đúng một lần" xung đột trực tiếp với nhau; kho này chọn tính khả chuyển, còn điểm số tầng 5 của chúng tôi chỉ chấm một phía của cuộc đánh đổi đó.
Nó đo xem một skill có giúp ích gì hay không.skill-creator giao kèm một benchmark chạy theo cặp: với mỗi test case nó sinh ra một agent có-skill và một agent nền — không skill khi đang tạo một skill mới, còn phiên bản trước đã được chụp lại khi đang cải thiện một skill — trong cùng một lượt, ghi lại {total_tokens, duration_ms}, chấm các khẳng định đã đăng ký trước, rồi python -m scripts.aggregate_benchmark báo cáo tỷ lệ đạt, thời gian và số token cho từng cấu hình "với trung bình +/- độ lệch chuẩn và độ chênh". Một lượt phân tích săn tìm "các khẳng định luôn đạt bất kể có skill hay không (không phân biệt được), các eval phương sai cao (có thể chập chờn), và các đánh đổi thời gian/token"; một giám khảo mù tùy chọn nhìn hai đầu ra "mà không được cho biết cái nào là cái nào".
Cả năm tầng đều hỏi về sự tuân thủ — quy tắc có được tuân theo không, có tìm thấy nó không, có thứ gì từ chối khi nó bị phá vỡ không. Không tầng nào hỏi liệu quy tắc có xứng đáng với chỗ đứng của nó. Hãy để ý chiều hướng: lượt chạy có-skill có thể thua, và bộ khung tồn tại một phần là để bắt được một khẳng định vẫn đạt dù skill có được nạp hay không. Một cổng chặn hỏi "bạn có tuân thủ không?"; thứ này hỏi "tuân thủ có đáng không?" — một kỷ luật thứ sáu, và là kỷ luật sẽ cho một tổ chức biết nên xóa những quy tắc thường trực nào.
Nó khớp cái description dùng làm trigger chứ không viết ra nó.scripts/run_loop.py (328 dòng) đối xử với description trong frontmatter như một bài toán tìm kiếm: mã nguồn chứa split_eval_set(eval_set, holdout, seed=42), phân tầng theo should_trigger, còn SKILL.md quy định tỷ lệ chia train/test 60/40, mỗi truy vấn chạy ba lần "để có được một tỷ lệ kích hoạt đáng tin cậy", một mô hình đề xuất các phương án thay thế từ những gì đã thất bại, và best_description được chọn "theo điểm test chứ không theo điểm train để tránh overfitting". Tập đánh giá cũng được thiết kế kỹ: khoảng 20 truy vấn, một nửa dương tính và một nửa là các phủ định suýt-trúng, kèm cảnh báo rằng một phủ định phải khó ("Write a fibonacci function" làm phủ định cho một skill về PDF "thì quá dễ — nó chẳng kiểm tra được gì"). Tầng 5a giả định rằng một con người viết cái description ấy và rằng kỷ luật nằm ở việc giữ cho nó chính xác; ở đây nó là một tham số được khớp, phòng vệ trước một kiểu thất bại khác — một description ăn điểm cao trên hơn chục truy vấn mà bạn tình cờ nghĩ ra được và định tuyến sai mọi thứ còn lại.
Ba thứ khác nữa không khớp tầng nào: cấp phép theo từng skill và ghi công bên thứ ba, thứ ép ra bộ ba bản sao nói trên; hai skill (discernment-nudge, academy-guide) được kích hoạt bởi hình dạng câu trả lời của chính agent chứ không bởi bất cứ công việc nào; và tiết lộ tiệm tiến như một kiến trúc ngân sách ngữ cảnh.
README.md liệt kê "./spec: Đặc tả Agent Skills" như một bộ skill nổi bật. spec/agent-skills-spec.md dài ba dòng — "Đặc tả nay nằm tại <https://agentskills.io/specification>", đã kiểm tra lại trực tiếp vào 2026-09-03. Việc kiểm toán cây thư mục này theo chính các quy tắc của nó giờ chỉ đo được một địa chỉ chuyển tiếp.
README gọi một số skill là Apache-2.0 và gọi docx/pdf/pptx/xlsx là "source-available", nhưng gh api repos/anthropics/skills --jq .license trả về null và không có tệp giấy phép nào ở gốc; việc cấp phép chỉ nằm trong 18 tệp LICENSE.txt của từng skill, nên một độc giả đứng ở gốc thì không thể biết.
README nói frontmatter "chỉ yêu cầu hai trường: name và description" — đúng với cả 19 skill, nhưng 17 skill còn giao kèm một trường thứ ba không được ghi trong tài liệu, license:, không được nhắc tới ở đó lẫn trong đặc tả.
Hãy sao chép bộ khung đo hiệu lực. Trước khi thêm một quy tắc thường trực, hãy hỏi điều gì sẽ chứng minh nó giúp ích — và hãy sẵn lòng chạy phép so nền có thể cho thấy nó không giúp ích. Chúng tôi không tìm thấy thứ này ở bất cứ đâu khác.
Hãy sao chép các phủ định suýt-trúng. Một mục chỉ mục chỉ được kiểm tra với những truy vấn lẽ ra phải khớp nó thì là chưa được kiểm tra; các ca khó mới là những ca suýt khớp.
Đừng đọc một trình xác thực trong một cây thư mục như một cổng chặn lên chính cây đó. Với bất kỳ sys.exit(1) nào, hãy hỏi: nó chạy lên cái gì, và cái gì chạy nó? Ở đây — lên đầu ra của agent, và do người dùng cài đặt chạy.
Khi bạn làm rỗng một tệp, hãy sửa mọi thứ trỏ vào nó trong cùng một commit. Phần chuyển hướng trong spec/ thì ổn; chính câu trong README gọi nó là bản đặc tả mới là thứ gây hiểu lầm.
Một kho tư liệu được tối ưu để người ta sao chép từ đó có một hồ sơ tầng khác biệt và chính đáng so với một kho được tối ưu để vận hành. Kho này đầu tư đúng vào hai tầng mà việc tái phân phối cần đến và bỏ qua ba tầng mà chỉ một đội vận hành mới cần — điều này mô tả bộ tiêu chí của chúng tôi ít nhất cũng chuẩn xác như nó mô tả hiện vật.
Khoảng bảy phút, chỉ đọc, qua gh api và raw.githubusercontent.com; không clone gì, không chạy gì. Đã đọc đầy đủ: sáu tệp ở gốc, toàn bộ 485 dòng của skill-creator/SKILL.md, toàn bộ 91 dòng của docx/SKILL.md, phần thân của discernment-nudge/SKILL.md, frontmatter của cả 19 tệp SKILL.md, và toàn bộ cây 419 đường dẫn kèm SHA của blob. Chỉ cấu trúc — đã grep tìm sys.exit, def, argparse, không đọc từng dòng: office/validate.py, quick_validate.py, run_loop.py; các dòng được trích dẫn thì đã được nhìn thấy, còn hành vi lúc chạy thì chưa được kiểm chứng.
Những khoảng trống thực sự: các cây tham chiếu sâu của năm skill nặng nhất (canvas-design, claude-api, pptx, xlsx, 60 trong 61 tệp của docx) — khẳng định rằng chúng là tư liệu tham chiếu chứ không phải quy trình chỉ dựa trên tên tệp cộng với một SKILL.md được lấy mẫu; skill-creator/agents/{analyzer,comparator,grader}.md, chỉ được trích dẫn theo cách chúng được nêu bên trong SKILL.md; phần thân của 18 tệp LICENSE.txt; mcp-builder/scripts/evaluation.py, thứ có thể chứa một bộ khung đánh giá thứ hai; và tám skill khác ngoài phần frontmatter của chúng. Lịch sử git, các commit, người đóng góp và các issue không được kiểm tra, nên chúng tôi không thể nói liệu chỉ mục chợ plugin có được bảo trì theo thời gian hay chỉ tình cờ đầy đủ tại commit này.
Despite the name this is not primarily a skills repository: it is a curated design-knowledge dataset — some 3.5 MB of CSV and JSON, governed with per-row provenance, confidence scores and freshness deadlines — plus a search CLI over it, the skill files being the wrapper that tells an agent how to ask.
676 blobs. Seven skills under .claude/skills/ (ui-ux-pro-max, ui-styling, design, design-system, brand, slides, banner-design), each a SKILL.md plus references/, scripts/ and data/. Five of the seven declare metadata.author: claudekit — vendored third-party skills, openly marked as such; only ui-ux-pro-max is this project's own work.
The source of truth is src/ui-ux-pro-max/, mirrored by hand-committed copies into cli/assets/ and .claude/skills/ui-ux-pro-max/ — not symlinks, because the root CLAUDE.md states that git-for-Windows breaks them — with a CI checker for the drift that follows. The data: 88 UI styles, 192 palettes with reasoning profiles, 1,934 Google Fonts (747 KB), 1,512 icons (824 KB), 22 per-stack guideline files. A separate stack/ subtree is a second product — a project scaffold with its own CLAUDE.md, two slash commands, a subagent and a CI workflow — alongside a Next.js data browser, an installer targeting 20 assistant platforms, four dated post-mortems and five localized READMEs.
Dated, provenanced, lifecycle states — with one real defect, named below.
Our investigation record scored layer 3 as a single "carries". Under this series' stricter split, 3a passes and 3b does not — the one place this page and the raw record differ. The nearest thing to a human checkpoint is the approvingMaintainer field in relevance-thresholds.json, an approval recorded as data rather than as a step in a ritual. The two files that could have overturned the verdict — stack/.claude/agents/design-review.md and stack/.claude/commands/design-review.md — were read on 2026-09-04: six review phases and a report template, whose only "ask" is a prompt for the dev-server URL when none was given. Neither hands a decision to a person, so 3b is settled rather than provisional.
Layer 2 is the strongest thing here, and it is CI-side only.cli/package.json defines verify:data as a chain any single failure kills: validate:csv → validate:semantic → validate:agent-guide → validate:catalog-summary --check → test:python (13 test modules) → evaluate:relevance → smoke:domains → smoke:stacks → check:assets. The sharpest piece is the inline "Path contract" step in check-asset-sync.yml: three grep -rnIP sweeps over both skill trees rejecting home-rooted, project-rooted and variable-rooted paths — with grep's exit codes reasoned about in a comment, so an unreadable file cannot turn into a green run, plus a pre-flight [ -d "$d" ] || exit 1. .gitattributes pins CSV and JSON to LF because catalog-summary.json stores sha256 hashes over their bytes and CRLF checkouts broke the check cross-platform. That is someone who has been burned writing the scar down.
One honest caveat. There is no .husky, no .githooks and no hooks installer in the tree, so "refuses even when nobody is looking" starts only once a merge request exists.
Correction, 2026-09-04. The first version of this page said the gate this repository ships to its users — stack/.github/workflows/design-review.yml — "ends its audit step with || true, so that one reports rather than refuses", and it was listed in the overview as a gate wired to nothing. That was wrong, and the mistake was ours on the day we read it rather than a later drift: the file has not changed since 2026-07-19. The || true sits on the first run of the audit so the report can be uploaded before the job dies; the workflow's last step, named "Fail on high-severity findings", re-runs scripts/design-audit.mjs with no such escape, and that script ends process.exit(counts.high > 0 ? 2 : 0). It is a real gate, and reading a mid-file || true as the workflow's ending is exactly the inference this series warns against elsewhere: we checked a line instead of the exit path.
A retrieval-quality evaluation regime with a held-out split.relevance-cases.json (37 KB) is a corpus of human relevance judgments, relevance-baseline.json (89 KB) the recorded run, and relevance-thresholds.json sets floors on routing accuracy, precision@1/@3, MRR@3, nDCG@3, negative abstention, typo recovery and design-system coherence — split into calibration ("May be inspected while tuning retrieval") and held_out ("Must not be inspected to tune ranking weights; used for final confirmation"). scripts/evaluate-relevance.py computes a runtime_fingerprint() over the search code and every CSV and an oracle_fingerprint() over the evaluator, the metrics module and the judgment file, so a recorded human approval is bound to the exact code and the exact judgments it approved. The file bounds its own claims too: the corpus "has no sampling variance … do not claim population confidence intervals from this curated set".
The five layers have no home for this. Every gate the rubric describes checks process compliance — did you write the file, is the path right. This one measures whether the agent gets the right answer, with a labelled oracle, a train/test split and rank metrics. Filing it as "a validator" records that something refuses and discards what it refuses about.
The corpus itself, governed like a database.data-provenance.json gives every row a verifiedAt, a confidence score, typed sources[] and a freshness policy — needs-review at 90 days, manual-verified at 365. catalog-summary.json carries sha256 snapshots and distinguishes 88 total styles / 79 searchable / 50 active / 29 supplemental / 9 deprecated: deprecate-not-delete is in the data model rather than left to habit. Referential contracts across files are tested, and a scheduled refresh-catalogs.yml re-pulls the upstreams. No layer here is about curating a body of knowledge an agent queries at runtime, or the regime that keeps it honest as its sources move — and here that is the dominant substance.
The README does not drift, and this is the one repository in the set that enforces that mechanically: scripts/validate-agent-guide.py (lines 19-20, 148-150) reads README.md and README.zh.md and asserts their claimed counts against the live CSVs. We checked independently — styles.csv has 88 rows (79 searchable per catalog-summary.json), ux-guidelines.csv exactly 119, matching the README.
The drift moved to the more consequential place. Read live on 2026-09-03, skill.json (v2.13.0) advertises "84 UI styles … 98 UX guidelines", and both .claude-plugin/plugin.json and .claude-plugin/marketplace.json say "84 styles" — against 88 total, 79 searchable, 119 guidelines. Grepping the three validators for those filenames returns nothing: the count check covers the READMEs and the skill guide, not the manifests a marketplace browser and a plugin installer actually read. Separately, CONTRIBUTING.md documents a .factory/ directory twice and the pull-request template names it, but the tree contains no such path.
Enforce a number where it is read, not where it is written. The lesson is not "add a check" — the check exists — but that it followed the document someone remembered rather than the file the outside world consumes.
Bind a human approval to what it approved.approvingMaintainer plus a fingerprint over code and judgment set makes a sign-off survive a version bump instead of quietly applying to something else. Cheap to copy, and the most transferable idea here.
A threshold file is a written record. Floors stated in advance and checked afterwards satisfy layer 4 with no prose at all — while the four docs/journals/ post-mortems, all dated 2026-08-12/13 against a repository pushed 2026-09-03, show how fast a retrospective writing habit goes dormant.
Avoid assuming CI is the whole gate. With no local hooks, a contributor's first feedback arrives after a push. A legitimate trade — worth making deliberately.
About seven minutes on 2026-09-03, GitHub API and raw.githubusercontent.com only; nothing cloned, nothing written. A second, targeted read on 2026-09-04 opened design-review.yml, scripts/design-audit.mjs and the two stack/.claude/…/design-review.md files — that is where the correction above and the settled 3b verdict come from. Not examined: the bodies of core.py (41 KB), design_system.py (71 KB), validate_data.py (52 KB) and reasoning_contract.py — for the last we claim only that it exists and is part of the runtime fingerprint. Also unopened: the bodies of refresh-catalogs.yml, release.yml, bump-versions.yml; the gallery/ app; the four non-English READMEs; three of the four journals; the 20 platform template JSONs; and git history, issues and merge requests — issue numbers appearing in CI comments were not fetched, so those comments' own account of them is reported, not independently confirmed.
ui-ux-pro-max — ein kuratierter Design-Datensatz mit Such-CLI, verpackt als sieben Skills#
Trotz des Namens ist dies in erster Linie kein Skills-Repository, sondern ein kuratierter Design-Wissens-Datensatz — rund 3,5 MB CSV und JSON, verwaltet mit zeilengenauer Herkunft, Konfidenzwerten und Frische-Fristen — plus eine Such-CLI darüber; die Skill-Dateien sind die Hülle, die einem Agenten sagt, wie er fragt.
676 Blobs. Sieben Skills unter .claude/skills/ (ui-ux-pro-max, ui-styling, design, design-system, brand, slides, banner-design), jeder eine SKILL.md plus references/, scripts/ und data/. Fünf der sieben deklarieren metadata.author: claudekit — eingebundene Fremd-Skills, offen als solche gekennzeichnet; nur ui-ux-pro-max ist die eigene Arbeit dieses Projekts.
Die Quelle der Wahrheit ist src/ui-ux-pro-max/, gespiegelt durch handcommittete Kopien nach cli/assets/ und .claude/skills/ui-ux-pro-max/ — keine Symlinks, weil die Root-CLAUDE.md festhält, dass git-for-Windows sie zerstört — mit einem CI-Prüfer für die daraus folgende Drift. Die Daten: 88 UI-Stile, 192 Paletten mit Reasoning-Profilen, 1.934 Google Fonts (747 KB), 1.512 Icons (824 KB), 22 Richtlinien-Dateien je Tech-Stack. Ein eigener stack/-Teilbaum ist ein zweites Produkt — ein Projektgerüst mit eigener CLAUDE.md, zwei Slash-Kommandos, einem Subagenten und einem CI-Workflow — daneben ein Next.js-Datenbrowser, ein Installer für 20 Assistenz-Plattformen, vier datierte Post-mortems und fünf lokalisierte READMEs.
Datiert, mit Herkunft und Lebenszyklus-Zuständen — mit einem realen Mangel, unten benannt.
Unser Untersuchungsprotokoll wertete Schicht 3 als ein einzelnes „trägt". In der strengeren Aufteilung dieser Serie besteht 3a, 3b nicht — die einzige Stelle, an der diese Seite vom Rohprotokoll abweicht. Das Nächstliegende an einem menschlichen Kontrollpunkt ist das Feld approvingMaintainer in relevance-thresholds.json, eine als Daten festgehaltene Freigabe statt eines Schritts in einem Ritual. Die zwei Dateien, die das Urteil hätten kippen können — stack/.claude/agents/design-review.md und stack/.claude/commands/design-review.md —, wurden am 2026-09-04 gelesen: sechs Prüfphasen und eine Berichtsvorlage, deren einziges „ask" die Nachfrage nach der Dev-Server-URL ist, wenn keine angegeben wurde. Keine übergibt eine Entscheidung an einen Menschen; 3b ist damit geklärt und nicht mehr vorläufig.
Schicht 2 ist das Stärkste hier — und existiert ausschließlich in der CI.cli/package.json definiert verify:data als Kette, die jeder einzelne Fehlschlag beendet: validate:csv → validate:semantic → validate:agent-guide → validate:catalog-summary --check → test:python (13 Testmodule) → evaluate:relevance → smoke:domains → smoke:stacks → check:assets. Das schärfste Stück ist der eingebettete Schritt „Path contract" in check-asset-sync.yml: drei grep -rnIP-Durchläufe über beide Skill-Bäume, die home-, projekt- und variablen-verankerte Pfade zurückweisen — mit einem Kommentar, der greps Exit-Codes durchdenkt, damit eine unlesbare Datei niemals zu einem grünen Lauf wird, plus ein vorgeschaltetes [ -d "$d" ] || exit 1. .gitattributes fixiert CSV und JSON auf LF, weil catalog-summary.json sha256-Werte über deren Bytes speichert und CRLF-Checkouts die Prüfung plattformübergreifend zerbrachen. Da schreibt jemand die Narbe auf, an der er sich verbrannt hat.
Ein ehrlicher Vorbehalt. Es gibt kein .husky, kein .githooks und keinen Hook-Installer im Baum, „verweigert auch, wenn niemand hinsieht" beginnt also erst mit dem Merge Request.
Korrektur, 2026-09-04. Die erste Fassung dieser Seite behauptete, das Gate, das dieses Repository an seine Nutzer ausliefert — stack/.github/workflows/design-review.yml — „beendet seinen Audit-Schritt mit || true, meldet also, statt zu verweigern", und führte es in der Übersicht als ein an nichts gehängtes Gate. Das war falsch, und der Fehler war unserer am Tag der Lektüre, kein späteres Abdriften: Die Datei ist seit dem 2026-07-19 unverändert. Das || true steht am ersten Lauf des Audits, damit der Bericht hochgeladen werden kann, bevor der Job stirbt; der letzte Schritt des Workflows, benannt „Fail on high-severity findings", führt scripts/design-audit.mjs ohne diesen Ausweg erneut aus, und dieses Skript endet mit process.exit(counts.high > 0 ? 2 : 0). Es ist ein echtes Gate. Ein || true mitten in der Datei als Ende des Workflows zu lesen, ist genau der Schluss, vor dem diese Reihe an anderer Stelle warnt: Wir haben eine Zeile geprüft statt des Exit-Pfads.
Ein Bewertungsregime für Retrieval-Qualität mit zurückgehaltenem Datensatz.relevance-cases.json (37 KB) ist ein Korpus menschlicher Relevanzurteile, relevance-baseline.json (89 KB) der aufgezeichnete Lauf, und relevance-thresholds.json setzt Untergrenzen für Routing-Genauigkeit, precision@1/@3, MRR@3, nDCG@3, negative Abstention, Tippfehler-Recovery und Design-System-Kohärenz — aufgeteilt in calibration („May be inspected while tuning retrieval") und held_out („Must not be inspected to tune ranking weights; used for final confirmation"). scripts/evaluate-relevance.py berechnet einen runtime_fingerprint() über den Suchcode und jede CSV sowie einen oracle_fingerprint() über den Evaluator, das Metrik-Modul und die Urteilsdatei — so ist eine festgehaltene menschliche Freigabe an genau diesen Code und genau diese Urteile gebunden. Die Datei begrenzt auch ihre eigenen Aussagen: der Korpus „has no sampling variance … do not claim population confidence intervals from this curated set".
Dafür haben die fünf Schichten keinen Platz. Jedes Gate der Systematik prüft Prozess-Konformität — hast du die Datei geschrieben, stimmt der Pfad. Dieses misst, ob der Agent die richtige Antwort bekommt: mit gelabeltem Orakel, Train/Test-Trennung und Rangmetriken. Es als „einen Validator" einzuordnen hält fest, dass etwas verweigert, und verwirft, worüber es verweigert.
Der Korpus selbst, verwaltet wie eine Datenbank.data-provenance.json gibt jeder Zeile ein verifiedAt, einen Konfidenzwert, typisierte sources[] und eine Frische-Regel — Nachprüfung nach 90 Tagen, manuell verifiziert 365 Tage. catalog-summary.json führt sha256-Momentaufnahmen und unterscheidet 88 Stile gesamt / 79 durchsuchbar / 50 aktiv / 29 ergänzend / 9 veraltet: „deprecaten statt löschen" steckt im Datenmodell, nicht in der Gewohnheit. Dateiübergreifende Referenzverträge werden getestet, und ein geplantes refresh-catalogs.yml zieht die Upstreams neu. Keine der Schichten handelt davon, einen Wissensbestand zu pflegen, den ein Agent zur Laufzeit abfragt, oder von dem Regime, das ihn ehrlich hält, während seine Quellen sich bewegen — und hier ist genau das die vorherrschende Substanz.
Das README driftet nicht, und dies ist das eine Repository der Auswahl, das genau das mechanisch erzwingt: scripts/validate-agent-guide.py (Zeilen 19-20, 148-150) liest README.md und README.zh.md und prüft deren behauptete Zahlen gegen die lebenden CSVs. Wir haben unabhängig nachgezählt — styles.csv hat 88 Zeilen (79 durchsuchbar laut catalog-summary.json), ux-guidelines.csv exakt 119, passend zum README.
Die Drift ist an die folgenreichere Stelle gewandert. Live gelesen am 2026-09-03 bewirbt skill.json (v2.13.0) „84 UI styles … 98 UX guidelines", und sowohl .claude-plugin/plugin.json als auch .claude-plugin/marketplace.json nennen „84 styles" — gegen 88 gesamt, 79 durchsuchbar, 119 Guidelines. Ein Grep der drei Validatoren nach diesen Dateinamen liefert nichts: die Zählprüfung deckt die READMEs und den Skill-Guide ab, nicht die Manifeste, die ein Marketplace-Browser und ein Plugin-Installer tatsächlich lesen. Getrennt davon dokumentiert CONTRIBUTING.md zweimal ein Verzeichnis .factory/, und die Merge-Request-Vorlage nennt es — der Baum enthält keinen solchen Pfad.
Erzwinge eine Zahl dort, wo sie gelesen wird, nicht dort, wo sie geschrieben wurde. Die Lehre ist nicht „bau eine Prüfung ein" — die Prüfung existiert —, sondern dass sie dem Dokument folgte, an das sich jemand erinnerte, statt der Datei, die die Außenwelt konsumiert.
Binde eine menschliche Freigabe an das, was sie freigegeben hat.approvingMaintainer plus ein Fingerabdruck über Code und Urteilsmenge lässt eine Freigabe einen Versionssprung überleben, statt still für etwas anderes zu gelten. Billig zu kopieren und die übertragbarste Idee hier.
Eine Schwellwert-Datei ist ein geschriebener Nachweis. Vorab festgehaltene und danach geprüfte Untergrenzen erfüllen Schicht 4 ganz ohne Prosa — während die vier Post-mortems in docs/journals/, alle datiert 2026-08-12/13 bei einem am 2026-09-03 gepushten Repository, zeigen, wie schnell eine retrospektive Schreibgewohnheit einschläft.
Nicht annehmen, die CI sei das ganze Gate. Ohne lokale Hooks kommt die erste Rückmeldung erst nach dem Push. Ein legitimer Tauschhandel — aber einer, den man bewusst eingehen sollte.
Rund sieben Minuten am 2026-09-03, ausschließlich GitHub-API und raw.githubusercontent.com; nichts geklont, nichts geschrieben. Ein zweiter, gezielter Lauf am 2026-09-04 öffnete design-review.yml, scripts/design-audit.mjs und die beiden stack/.claude/…/design-review.md — daher stammen die Korrektur oben und das geklärte 3b-Urteil. Nicht geprüft: die Rümpfe von core.py (41 KB), design_system.py (71 KB), validate_data.py (52 KB) und reasoning_contract.py — für Letztere behaupten wir nur, dass sie existiert und Teil des Runtime-Fingerabdrucks ist. Ebenfalls ungeöffnet: die Rümpfe von refresh-catalogs.yml, release.yml, bump-versions.yml; die gallery/-App; die vier nicht-englischen READMEs; drei der vier Journals; die 20 Plattform-Template-JSONs; sowie Git-Historie, Issues und Merge Requests — in CI-Kommentaren auftauchende Issue-Nummern wurden nicht abgerufen, berichtet wird also die Darstellung dieser Kommentare, nicht eine unabhängige Bestätigung.
ui-ux-pro-max — một bộ dữ liệu thiết kế được quản trị kèm CLI tìm kiếm, bọc thành bảy skill#
Bất chấp cái tên, đây trước hết không phải là một kho skill: nó là một bộ dữ liệu tri thức thiết kế được tuyển chọn — chừng 3.5 MB CSV và JSON, được quản trị với xuất xứ theo từng dòng, điểm tin cậy và hạn tươi mới — cộng thêm một CLI tìm kiếm trên đó, còn các tệp skill chỉ là lớp bọc nói cho agent biết cách hỏi.
676 blob. Bảy skill nằm dưới .claude/skills/ (ui-ux-pro-max, ui-styling, design, design-system, brand, slides, banner-design), mỗi cái là một SKILL.md cộng với references/, scripts/ và data/. Năm trong bảy cái khai báo metadata.author: claudekit — các skill bên thứ ba được vendor vào, đánh dấu công khai như vậy; chỉ ui-ux-pro-max là công sức của chính dự án này.
Nguồn sự thật là src/ui-ux-pro-max/, được nhân bản bằng các bản sao commit thủ công vào cli/assets/ và .claude/skills/ui-ux-pro-max/ — không phải symlink, vì CLAUDE.md ở gốc nói rằng git-for-Windows làm hỏng chúng — kèm một trình kiểm tra CI cho sự trôi dạt phát sinh sau đó. Dữ liệu: 88 phong cách UI, 192 bảng màu kèm hồ sơ lập luận, 1,934 Google Fonts (747 KB), 1,512 icon (824 KB), 22 tệp hướng dẫn theo từng stack. Một cây con stack/ riêng biệt là sản phẩm thứ hai — một bộ khung dự án với CLAUDE.md riêng, hai slash command, một subagent và một CI workflow — bên cạnh một trình duyệt dữ liệu Next.js, một trình cài đặt nhắm tới 20 nền tảng trợ lý, bốn bản post-mortem có ghi ngày và năm bản README bản địa hoá.
Có ngày tháng, có xuất xứ, có trạng thái vòng đời — với đúng một khiếm khuyết thật, nêu bên dưới.
Bản ghi điều tra của chúng tôi chấm tầng 3 là một "có mang" duy nhất. Theo cách tách nghiêm ngặt hơn của loạt bài này, 3a đạt còn 3b thì không — đây là chỗ duy nhất trang này và bản ghi thô khác nhau. Thứ gần nhất với một điểm kiểm soát của con người là trường approvingMaintainer trong relevance-thresholds.json, một sự phê duyệt được ghi lại dưới dạng dữ liệu chứ không phải như một bước trong nghi thức. Hai tệp lẽ ra có thể lật ngược kết luận — stack/.claude/agents/design-review.md và stack/.claude/commands/design-review.md — đã được đọc vào 2026-09-04: sáu pha rà soát và một mẫu báo cáo, mà "câu hỏi" duy nhất là một lời nhắc nhập URL dev-server khi chưa có ai đưa. Không cái nào trao một quyết định cho một con người, nên 3b là đã ngã ngũ chứ không còn tạm thời.
Tầng 2 là thứ mạnh nhất ở đây, và nó chỉ nằm ở phía CI.cli/package.json định nghĩa verify:data là một chuỗi mà chỉ một thất bại đơn lẻ cũng giết chết: validate:csv → validate:semantic → validate:agent-guide → validate:catalog-summary --check → test:python (13 module kiểm thử) → evaluate:relevance → smoke:domains → smoke:stacks → check:assets. Phần sắc bén nhất là bước "Path contract" viết thẳng trong check-asset-sync.yml: ba lượt quét grep -rnIP trên cả hai cây skill, loại bỏ các đường dẫn bắt rễ ở home, bắt rễ ở project và bắt rễ ở biến — với mã thoát của grep được lập luận hẳn trong một comment, để một tệp không đọc được không thể biến thành một lần chạy xanh, cộng thêm một bước tiền kiểm [ -d "$d" ] || exit 1. .gitattributes ghim CSV và JSON về LF vì catalog-summary.json lưu các hash sha256 trên byte của chúng và các bản checkout CRLF đã làm hỏng kiểm tra này trên đa nền tảng. Đó là một người từng bị bỏng đang ghi lại vết sẹo.
Một lưu ý thành thật. Trong cây không có .husky, không có .githooks và không có trình cài hook nào, nên "từ chối ngay cả khi không ai nhìn" chỉ bắt đầu khi đã có một merge request.
Đính chính, 2026-09-04. Phiên bản đầu của trang này nói rằng cái cổng chặn mà kho này ship cho người dùng của nó — stack/.github/workflows/design-review.yml — "kết thúc bước audit bằng || true, nên cái đó báo cáo chứ không từ chối", và nó bị liệt trong phần tổng quan như một cổng chặn nối vào hư không. Điều đó sai, và lỗi là của chúng tôi vào ngày đọc nó chứ không phải một sự trôi dạt về sau: tệp đó không thay đổi kể từ 2026-07-19. Cái || true nằm ở lần chạy đầu tiên của audit để báo cáo có thể được upload trước khi job chết; bước cuối cùng của workflow, tên là "Fail on high-severity findings", chạy lại scripts/design-audit.mjs không có lối thoát nào như thế, và script đó kết thúc bằng process.exit(counts.high > 0 ? 2 : 0). Nó là một cổng chặn thật, và việc đọc một || true giữa tệp như là đoạn kết của workflow chính xác là kiểu suy luận mà loạt bài này cảnh báo ở chỗ khác: chúng tôi đã kiểm tra một dòng thay vì đường thoát.
Một chế độ đánh giá chất lượng truy hồi có phần dữ liệu giữ lại.relevance-cases.json (37 KB) là một tập ngữ liệu các phán đoán liên quan do con người đưa ra, relevance-baseline.json (89 KB) là lần chạy đã ghi lại, và relevance-thresholds.json đặt sàn cho độ chính xác định tuyến, precision@1/@3, MRR@3, nDCG@3, khả năng từ chối trên truy vấn phủ định, khả năng phục hồi khi gõ sai và độ nhất quán của design-system — chia thành calibration ("Có thể được xem xét trong khi tinh chỉnh truy hồi") và held_out ("Không được xem xét để tinh chỉnh trọng số xếp hạng; dùng cho xác nhận cuối cùng"). scripts/evaluate-relevance.py tính một runtime_fingerprint() trên mã tìm kiếm và mọi tệp CSV, cùng một oracle_fingerprint() trên trình đánh giá, module đo lường và tệp phán đoán, để một phê duyệt của con người đã ghi lại được ràng buộc vào đúng đoạn mã và đúng bộ phán đoán mà nó đã phê duyệt. Tệp này cũng tự giới hạn các tuyên bố của chính mình: tập ngữ liệu "không có phương sai lấy mẫu … đừng tuyên bố khoảng tin cậy tổng thể từ tập được tuyển chọn này".
Năm tầng không có chỗ nào để chứa cái này. Mọi cổng chặn mà bộ tiêu chí mô tả đều kiểm tra sự tuân thủ quy trình — bạn đã viết tệp đó chưa, đường dẫn có đúng không. Cái này đo xem agent có ra câu trả lời đúng hay không, với một oracle có nhãn, một phân tách train/test và các chỉ số xếp hạng. Xếp nó vào ô "một trình xác thực" chỉ ghi lại rằng có thứ gì đó từ chối và vứt bỏ mất chuyện nó từ chối về cái gì.
Bản thân tập ngữ liệu, được quản trị như một cơ sở dữ liệu.data-provenance.json cho mỗi dòng một verifiedAt, một điểm tin cậy, các sources[] có kiểu và một chính sách tươi mới — cần rà soát lại ở 90 ngày, đã xác minh thủ công ở 365 ngày. catalog-summary.json mang các ảnh chụp sha256 và phân biệt 88 phong cách tổng / 79 tìm kiếm được / 50 đang hoạt động / 29 bổ sung / 9 đã phế: khai-tử-chứ-không-xoá nằm trong chính mô hình dữ liệu chứ không phó mặc cho thói quen. Các hợp đồng tham chiếu xuyên tệp đều được kiểm thử, và một refresh-catalogs.yml chạy theo lịch kéo lại các nguồn thượng nguồn. Không tầng nào ở đây nói về việc chăm sóc một khối tri thức mà agent truy vấn lúc chạy, hay về chế độ giữ cho nó trung thực khi các nguồn của nó dịch chuyển — mà ở đây đó lại là phần nội dung chủ đạo.
README không trôi dạt, và đây là kho duy nhất trong bộ này cưỡng chế điều đó bằng máy móc: scripts/validate-agent-guide.py (dòng 19-20, 148-150) đọc README.md và README.zh.md rồi khẳng định các con số mà chúng tuyên bố so với các CSV sống. Chúng tôi đã kiểm tra độc lập — styles.csv có 88 dòng (79 tìm kiếm được theo catalog-summary.json), ux-guidelines.csv đúng 119 dòng, khớp với README.
Sự trôi dạt đã chuyển sang chỗ hệ trọng hơn. Đọc trực tiếp vào 2026-09-03, skill.json (v2.13.0) quảng cáo "84 phong cách UI … 98 hướng dẫn UX", và cả .claude-plugin/plugin.json lẫn .claude-plugin/marketplace.json đều nói "84 styles" — so với 88 tổng, 79 tìm kiếm được, 119 hướng dẫn. Grep ba trình xác thực để tìm những tên tệp đó thì không ra gì: phần kiểm tra con số bao phủ các README và bản hướng dẫn skill, chứ không bao phủ các manifest mà một trình duyệt marketplace và một trình cài plugin thực sự đọc. Riêng biệt, CONTRIBUTING.md mô tả một thư mục .factory/ hai lần và mẫu pull request cũng gọi tên nó, nhưng trong cây không hề có đường dẫn đó.
Cưỡng chế một con số ở nơi nó được đọc, chứ không ở nơi nó được viết. Bài học không phải là "thêm một kiểm tra" — kiểm tra đã có sẵn — mà là nó đi theo tài liệu ai đó còn nhớ chứ không theo tệp mà thế giới bên ngoài thực sự tiêu thụ.
Ràng buộc một phê duyệt của con người vào đúng thứ nó đã phê duyệt.approvingMaintainer cộng với một fingerprint trên mã và bộ phán đoán khiến một chữ ký sống sót qua một lần tăng phiên bản thay vì lặng lẽ áp dụng cho thứ khác. Rẻ để sao chép, và là ý tưởng dễ chuyển giao nhất ở đây.
Một tệp ngưỡng chính là một bản ghi được viết ra. Các mức sàn nêu trước và kiểm tra sau thoả mãn tầng 4 mà không cần một dòng văn xuôi nào — trong khi bốn bản post-mortem trong docs/journals/, tất cả đề ngày 2026-08-12/13 trên một kho được push vào 2026-09-03, cho thấy một thói quen viết hồi cứu ngủ quên nhanh đến thế nào.
Tránh giả định rằng CI là toàn bộ cổng chặn. Không có hook cục bộ nào, phản hồi đầu tiên của người đóng góp chỉ đến sau khi push. Một đánh đổi chính đáng — đáng để thực hiện một cách có chủ ý.
Khoảng bảy phút vào 2026-09-03, chỉ dùng GitHub API và raw.githubusercontent.com; không clone gì, không ghi gì. Một lượt đọc thứ hai có chủ đích vào 2026-09-04 đã mở design-review.yml, scripts/design-audit.mjs và hai tệp stack/.claude/…/design-review.md — đó là nơi phần đính chính bên trên và kết luận đã ngã ngũ cho 3b bắt nguồn. Chưa xem xét: phần thân của core.py (41 KB), design_system.py (71 KB), validate_data.py (52 KB) và reasoning_contract.py — với cái cuối cùng chúng tôi chỉ tuyên bố rằng nó tồn tại và là một phần của runtime fingerprint. Cũng chưa mở: phần thân của refresh-catalogs.yml, release.yml, bump-versions.yml; ứng dụng gallery/; bốn README không phải tiếng Anh; ba trong bốn nhật ký; 20 tệp JSON mẫu cho các nền tảng; và lịch sử git, các issue và merge request — các số hiệu issue xuất hiện trong comment của CI không được tải về, nên tường thuật của chính những comment đó về chúng là được báo cáo lại, chứ không được xác nhận độc lập.
Not a skills collection: a 1,637-file Go, TypeScript and Python product that compresses what an agent reads and writes, distributed across ten third-party agent CLIs — with skills/ as one of several delivery surfaces, and by some distance the most machine-enforced discipline in this set.
The largest areas by file count are packages/ (378), proxy/ (292), engine/ (259), shared/ (127). skills/ is 96 entries, a third of them generated packs, a compiler and a gate script. Fourteen authored skills sit in two families: 13 product skills as skills/<id>/SKILL.md plus optional README.md, scripts/*.py and tests/*.mjs; and 6 native skills as skills/<id>/SKILL.md + agents/openai.yaml under a hard prompt_byte_budget of 900 bytes. Both compile into skills/generated/<target>/pack.json for six targets, mirrored into plugins/caveman/ by CI. Eight workflows, ~90 Go *_test.go files, a fuzz corpus.
The index is correct because a compiler refuses otherwise. No dates, no archive convention found.
Layer 2 is the strongest instance in this study.skills/verbs-gate.mjs (10,322 B) calls itself "the skills-verbs drift gate (fail-closed, deterministic)" and enforces one invariant: a SKILL.md may never document a CLI verb, MCP tool or SDK call the shipped source does not expose. It derives the real surfaces from both MCP servers, the CLI verb tables and both SDKs, and fails closed when a source cannot be parsed, so an empty surface cannot silently pass everything. skills/compile.mjs calls die() on nine violation classes. The repository also ships refusal rules to strangers, in skills/native-core.md and each pack's guardrails; those are payload, not its own gate. caveman is the case where both are true at once, which makes the distinction easy to see rather than academic.
Layer 4 is the one gap, and our own record was too generous. The investigation scored it "touches"; under the strict reading — a note written before the work, about this repository's work, checkable afterwards — it is absent. What exists is adjacent: an entry_condition and stop_condition per native skill is a precondition, not a record of intent; caveman-manage/SKILL.md's fixed Action / Before / Server response / After / Basis close is an after-the-fact report form shipped for users; and docs/HONEST-NUMBERS.md is a standing record of what is and is not proven — useful, and not this layer.
Six bodies of substance fit none of the five layers and together are most of the repository. Two are worth copying.
Instruction text as a metered, budgeted, priced resource.skills/registry.json sets native_pack.core_prompt_token_budget = 560 for the always-loaded Core and a per-skill prompt_byte_budget of 900 bytes. skills/compile.mjs enforces both with hard failures — line 69 die('native Core exceeds conservative token estimate: X > Y'), line 117 die('instruction bytes exceed budget'). The files are visibly written to fit: skills/investigate-first/SKILL.md is 688 bytes, five imperative bullets. docs/HONEST-NUMBERS.md prices the other direction: "Input cost the skill adds | ~1–1.5k tokens per turn". No layer has any notion of what an instruction costs. Layer 1's rule — only what is always true — is a semantic test; this is a byte count with a build failure behind it, which reframes the discipline as optimisation under a budget rather than a checklist.
A provenance type system for the product's own claims. Every number the tool emits carries one of three labels: inferred (computed locally), benchmark_counterfactual (a pinned benchmark), or verified (only from signed provider-ledger real traffic). README.md line 323: "offline caveman will never call itself verified". skills/caveman-manage/SKILL.md enforces the lattice at agent runtime — "Never convert experiment lift into verified_savings." It is not a rule (it constrains claims, not conduct), not a gate (nothing exits non-zero on an over-claim), not a ritual, record or index. It asks what the five layers never ask: not did the agent do the right thing but is the agent allowed to say that — which for public agent tooling is where the expensive failure lives.
A third deserves a line. .github/workflows/agent-conformance.yml pins ten third-party agent CLIs at exact versions and nightly reinstalls each at @latest in a throwaway job, piping the result to agents/drift-report.mjs, which files or updates a GitHub issue when an upstream surface has moved: a gate pointed outward, on a clock rather than a commit, that deliberately does not block.
Two disagreements, and the repository documents the first against itself.
The GitHub description, .claude-plugin/marketplace.json and README.md lines 132 and 150 all ship a headline "65% output token reduction (measured)" with a per-task table and a bar chart. docs/HONEST-NUMBERS.md line 16 says of the same metric: "Output reduction vs default verbose replies | Not published | Harness exists, but repository has no committed reviewed raw result". benchmarks/results/ contains exactly one file, a 0-byte .gitkeep — re-checked 2026-09-03. And CLAUDE.md line 22 states the rule the front page breaks: "Publish no reduction or quality-equivalence percentage without a committed reviewed benchmark."
Read fairly, this is disclosure rather than concealment: README.md line 156 links HONEST-NUMBERS.md from a caveat blockquote, and that page's section "## When caveman loses (net-negative)" cites the project's own bug reports against itself — including a Cursor A/B showing 4.3M tokens with caveman versus 1M without — and tells the reader to turn it off. Very few public repositories argue with their own headline in their own docs. The pattern worth naming is that the honest page and the front page have different audiences, and the front page wins by default.
The second is easy to fix. AGENTS.md and CLAUDE.md route work to sibling repositories by absolute paths on the maintainer's machine, two of which CLAUDE.md itself says are private — so the file every agent loads sends it somewhere it cannot reach.
Wire the gate to your own contents and to CI.verbs-gate.mjs plus a workflow that regenerates artefacts and runs git diff --exit-code: docs cannot drift from code, because the build stops.
Give instructions a budget with a build failure behind it. 560 tokens for the always-loaded core, 900 bytes per skill — the only mechanism in this study that stops a rule file growing.
Label every number with how it was obtained, then make the front page obey the label. The gap between the three-tier vocabulary and README.md line 150 is the whole lesson.
Avoid absolute local paths in a file every agent loads. A relative path costs nothing and does not send a stranger's agent to someone else's desktop.
About eight minutes, read-only, over gh api and raw.githubusercontent.com. We read the full 1,637-path tree and opened roughly 20 files: the rule files, docs/HONEST-NUMBERS.md, the registries, the enforcement scripts (verbs-gate.mjs first 90 of ~250 lines; check-profile-scope.mjs and verify_repo.py first 60 lines each), three workflows and four skill files. README.md was grepped, not read line by line.
Not opened — any claim about these rests on tree paths and file sizes alone: the whole Go engine/ and proxy/ source, packages/ (378 files, wholly unexamined), shared/, extension/, mem/, shrink/, rewriter/, mcp/, bin/install.js (82 KB, cited by size and by what CLAUDE.md says about it), src/hooks/*.js, and 9 of the 14 SKILL.md files. src/hooks/checksums.sha256 exists at 776 bytes per the tree, but we neither read it nor verified that verify_repo.py checks it — that coupling is CLAUDE.md's claim, not our observation. Layer 4 is the least confident verdict: the grep found no record files, but docs/technical/accounting-and-evidence.md and evals/README.md went unopened and either could hold a record-keeping ritual. We inspected no issues, pull requests, commit history or CI runs, so we cannot say whether these gates are green in practice, or whether the nightly drift job has ever fired.
caveman — ein Token-Kompressions-Produkt, das nebenbei Skills ausliefert#
Keine Skill-Sammlung: ein Produkt aus 1.637 Dateien in Go, TypeScript und Python, das komprimiert, was ein Agent liest und schreibt, verteilt über zehn fremde Agent-CLIs — mit skills/ als einer von mehreren Auslieferungsflächen, und mit deutlichem Abstand die am stärksten maschinell durchgesetzte Disziplin in diesem Feld.
Die grössten Bereiche nach Dateizahl sind packages/ (378), proxy/ (292), engine/ (259), shared/ (127). skills/ hat 96 Einträge, ein Drittel davon generierte Packs, ein Compiler und ein Gate-Skript. Vierzehn geschriebene Skills liegen in zwei Familien: 13 Produkt-Skills als skills/<id>/SKILL.md plus optional README.md, scripts/*.py und tests/*.mjs; und 6 native Skills als skills/<id>/SKILL.md + agents/openai.yaml unter einem harten prompt_byte_budget von 900 Bytes. Beide werden für sechs Ziele nach skills/generated/<target>/pack.json kompiliert und von CI nach plugins/caveman/ gespiegelt. Acht Workflows, ~90 Go-Dateien *_test.go, ein Fuzz-Korpus.
Der Index stimmt, weil ein Compiler sich sonst weigert. Keine Datumsangaben, keine Archiv-Konvention gefunden.
Schicht 2 ist der stärkste Fall dieser Studie.skills/verbs-gate.mjs (10.322 B) nennt sich selbst „the skills-verbs drift gate (fail-closed, deterministic)" und erzwingt eine Invariante: eine SKILL.md darf nie ein CLI-Verb, ein MCP-Tool oder einen SDK-Aufruf dokumentieren, den der ausgelieferte Quelltext nicht anbietet. Sie leitet die echten Oberflächen aus beiden MCP-Servern, den CLI-Verbtabellen und beiden SDKs ab und schlägt fehl, wenn eine Quelle nicht geparst werden kann, damit eine leere Oberfläche nicht stillschweigend alles durchwinkt. skills/compile.mjs ruft die() für neun Verletzungsklassen. Das Repository liefert zusätzlich Verweigerungsregeln an Fremde aus, in skills/native-core.md und in den Guardrails jedes Packs; das ist Nutzlast, nicht sein eigenes Gate. caveman ist der Fall, in dem beides zugleich zutrifft — das macht die Unterscheidung anschaulich statt akademisch.
Schicht 4 ist die eine Lücke, und unser eigener Befund war zu grosszügig. Die Untersuchung notierte „berührt"; nach der strengen Lesart — ein Vermerk, der vor der Arbeit entsteht, über die Arbeit dieses Repositorys, hinterher prüfbar — fehlt sie. Was existiert, ist benachbart: eine entry_condition und eine stop_condition je nativem Skill sind eine Vorbedingung, kein Vermerk der Absicht; der feste Abschluss Action / Before / Server response / After / Basis in caveman-manage/SKILL.md ist ein Berichtsformular im Nachhinein, ausgeliefert für Nutzer; und docs/HONEST-NUMBERS.md ist ein stehender Vermerk darüber, was belegt ist und was nicht — nützlich, und nicht diese Schicht.
Sechs Substanzblöcke passen in keine der fünf Schichten und machen zusammen den grössten Teil des Repositorys aus. Zwei lohnen die Nachahmung.
Anweisungstext als gemessene, budgetierte, bepreiste Ressource.skills/registry.json setzt native_pack.core_prompt_token_budget = 560 für den immer geladenen Core und je Skill ein prompt_byte_budget von 900 Bytes. skills/compile.mjs erzwingt beides mit hartem Abbruch — Zeile 69 die('native Core exceeds conservative token estimate: X > Y'), Zeile 117 die('instruction bytes exceed budget'). Den Dateien sieht man an, dass sie hineinpassen mussten: skills/investigate-first/SKILL.md hat 688 Bytes, fünf imperative Punkte. docs/HONEST-NUMBERS.md bepreist die Gegenrichtung: „Input cost the skill adds | ~1–1.5k tokens per turn". Keine der fünf Schichten hat einen Begriff davon, was eine Anweisung kostet. Die Regel von Schicht 1 — nur was immer gilt — ist ein semantischer Test; dies ist eine Byte-Zahl mit einem Build-Fehler dahinter, und das macht aus der Disziplin eine Optimierung unter Budget statt einer Checkliste.
Ein Herkunfts-Typsystem für die eigenen Behauptungen des Produkts. Jede Zahl, die das Werkzeug ausgibt, trägt eines von drei Etiketten: inferred (lokal berechnet), benchmark_counterfactual (fixierter Benchmark) oder verified (nur aus signiertem Provider-Ledger echten Verkehrs). README.md Zeile 323: „offline caveman will never call itself verified". skills/caveman-manage/SKILL.md erzwingt das Gitter zur Laufzeit des Agenten — „Never convert experiment lift into verified_savings." Das ist keine Regel (es beschränkt Behauptungen, nicht Verhalten), kein Gate (nichts endet bei einer Überbehauptung mit Fehlercode), kein Ritual, kein Vermerk, kein Index. Es stellt die Frage, die die fünf Schichten nie stellen: nicht hat der Agent das Richtige getan, sondern darf der Agent das sagen — und dort liegt bei öffentlichem Agenten-Werkzeug der teure Fehler.
Ein Drittes verdient eine Zeile. .github/workflows/agent-conformance.yml fixiert zehn fremde Agent-CLIs auf exakte Versionen und installiert sie nächtlich in einem Wegwerf-Job neu als @latest; das Ergebnis geht an agents/drift-report.mjs, das ein GitHub-Issue öffnet oder aktualisiert, wenn sich eine Oberfläche stromaufwärts bewegt hat: ein Gate, das nach aussen zeigt, getaktet von einer Uhr statt von einem Commit, und das bewusst nicht blockiert.
Wo Dokumentation und Verzeichnisbaum auseinandergehen#
Zwei Widersprüche, und den ersten dokumentiert das Repository gegen sich selbst.
Die GitHub-Beschreibung, .claude-plugin/marketplace.json und README.md Zeilen 132 und 150 führen alle die Schlagzeile „65 % Output-Token-Reduktion (measured)" mit einer Tabelle je Aufgabe und einem Balkendiagramm. docs/HONEST-NUMBERS.md Zeile 16 sagt zur selben Kennzahl: „Output reduction vs default verbose replies | Not published | Harness exists, but repository has no committed reviewed raw result". benchmarks/results/ enthält genau eine Datei, ein 0-Byte .gitkeep — am 2026-09-03 erneut geprüft. Und CLAUDE.md Zeile 22 formuliert die Regel, die die Startseite bricht: „Publish no reduction or quality-equivalence percentage without a committed reviewed benchmark."
Fair gelesen ist das Offenlegung, nicht Verschleierung: README.md Zeile 156 verlinkt HONEST-NUMBERS.md aus einem Warnhinweis heraus, und der Abschnitt „## When caveman loses (net-negative)" dieser Seite zitiert die eigenen Fehlerberichte des Projekts gegen sich selbst — darunter ein Cursor-A/B mit 4,3 Mio. Token mit caveman gegenüber 1 Mio. ohne — und sagt dem Leser, das Werkzeug abzuschalten. Sehr wenige öffentliche Repositorys widersprechen der eigenen Schlagzeile in der eigenen Doku. Das Muster, das man benennen sollte: die ehrliche Seite und die Startseite haben verschiedene Publika, und die Startseite gewinnt im Zweifel.
Der zweite ist leicht zu beheben. AGENTS.md und CLAUDE.md leiten Arbeit über absolute Pfade auf dem Rechner des Betreuers an Schwester-Repositorys weiter, von denen CLAUDE.md selbst zwei als privat bezeichnet — die Datei, die jeder Agent lädt, schickt ihn also irgendwohin, wo er nicht hinkommt.
Verdrahte das Gate mit den eigenen Inhalten und mit CI.verbs-gate.mjs plus ein Workflow, der Artefakte neu erzeugt und git diff --exit-code laufen lässt: die Doku kann nicht vom Code abdriften, weil der Build stehen bleibt.
Gib Anweisungen ein Budget mit einem Build-Fehler dahinter. 560 Token für den immer geladenen Core, 900 Bytes je Skill — der einzige Mechanismus in dieser Studie, der eine Regeldatei am Wachsen hindert.
Etikettiere jede Zahl mit ihrer Herkunft und sorge dafür, dass die Startseite das Etikett einhält. Die Lücke zwischen dem dreistufigen Vokabular und README.md Zeile 150 ist die Lehre.
Vermeide absolute lokale Pfade in einer Datei, die jeder Agent lädt. Ein relativer Pfad kostet nichts und schickt den Agenten eines Fremden nicht auf den Schreibtisch eines anderen.
Rund acht Minuten, nur lesend, über gh api und raw.githubusercontent.com. Wir haben den vollständigen Baum mit 1.637 Pfaden gelesen und etwa 20 Dateien geöffnet: die Regeldateien, docs/HONEST-NUMBERS.md, die Registries, die Durchsetzungsskripte (verbs-gate.mjs die ersten 90 von ~250 Zeilen; check-profile-scope.mjs und verify_repo.py je die ersten 60 Zeilen), drei Workflows und vier Skill-Dateien. README.md wurde gegreppt, nicht Zeile für Zeile gelesen.
Nicht geöffnet — jede Aussage darüber stützt sich allein auf Pfade und Dateigrössen: der gesamte Go-Quelltext in engine/ und proxy/, packages/ (378 Dateien, gar nicht untersucht), shared/, extension/, mem/, shrink/, rewriter/, mcp/, bin/install.js (82 KB, nur über die Grösse und über das zitiert, was CLAUDE.md darüber sagt), src/hooks/*.js sowie 9 der 14 SKILL.md-Dateien. src/hooks/checksums.sha256 existiert laut Baum mit 776 Bytes, aber wir haben es weder gelesen noch geprüft, ob verify_repo.py es tatsächlich kontrolliert — diese Kopplung ist eine Aussage von CLAUDE.md, keine eigene Beobachtung. Schicht 4 ist das unsicherste Urteil: der Grep fand keine Vermerk-Dateien, aber docs/technical/accounting-and-evidence.md und evals/README.md blieben ungeöffnet, und in beiden könnte ein Ritual der Vermerkführung stecken. Wir haben weder Issues noch Pull Requests, weder Commit-Historie noch CI-Läufe angesehen und können deshalb nicht sagen, ob diese Gates in der Praxis grün sind oder ob der nächtliche Drift-Job je ausgelöst hat.
caveman — một sản phẩm nén token tình cờ lại ship kèm các skill#
Không phải một bộ sưu tập skill: một sản phẩm 1,637 tệp viết bằng Go, TypeScript và Python, nén lại những gì một agent đọc và viết, phân phối qua mười CLI agent của bên thứ ba — với skills/ chỉ là một trong nhiều bề mặt phân phối, và là kỷ luật được máy móc cưỡng chế mạnh nhất trong bộ này, cách biệt khá xa.
Các khu vực lớn nhất theo số tệp là packages/ (378), proxy/ (292), engine/ (259), shared/ (127). skills/ có 96 mục, một phần ba trong đó là các pack được sinh ra, một trình biên dịch và một script cổng chặn. Mười bốn skill do người viết nằm trong hai họ: 13 skill sản phẩm dạng skills/<id>/SKILL.md cộng thêm README.md, scripts/*.py và tests/*.mjs tuỳ chọn; và 6 skill native dạng skills/<id>/SKILL.md + agents/openai.yaml dưới một prompt_byte_budget cứng 900 byte. Cả hai họ đều biên dịch thành skills/generated/<target>/pack.json cho sáu đích, và được CI nhân bản sang plugins/caveman/. Tám workflow, ~90 tệp *_test.go của Go, một tập ngữ liệu fuzz.
Chỉ mục đúng bởi vì một trình biên dịch từ chối nếu không. Không tìm thấy ngày tháng, không có quy ước lưu trữ.
Tầng 2 là trường hợp mạnh nhất trong nghiên cứu này.skills/verbs-gate.mjs (10,322 B) tự gọi mình là "cổng chặn trôi dạt skills-verbs (fail-closed, tất định)" và cưỡng chế đúng một bất biến: một SKILL.md không bao giờ được phép mô tả một verb CLI, một công cụ MCP hay một lời gọi SDK mà mã nguồn được ship không phơi ra. Nó suy ra các bề mặt thật từ cả hai máy chủ MCP, các bảng verb của CLI và cả hai SDK, và thất bại theo kiểu đóng khi một nguồn không phân tích được, để một bề mặt rỗng không thể lặng lẽ cho qua mọi thứ. skills/compile.mjs gọi die() trên chín lớp vi phạm. Kho này đồng thời cũng ship các quy tắc từ chối cho người lạ, trong skills/native-core.md và trong guardrail của từng pack; những cái đó là tải trọng, chứ không phải cổng chặn của chính nó. caveman là trường hợp mà cả hai đều đúng cùng lúc, khiến sự phân biệt này dễ thấy chứ không còn mang tính hàn lâm.
Tầng 4 là khoảng trống duy nhất, và bản ghi của chính chúng tôi đã quá rộng lượng. Cuộc điều tra chấm nó là "có chạm tới"; theo cách đọc nghiêm ngặt — một ghi chú viết trước khi làm, về công việc của chính kho này, có thể kiểm chứng về sau — thì nó vắng mặt. Cái đang tồn tại chỉ là thứ lân cận: một entry_condition và stop_condition cho mỗi skill native là một điều kiện tiên quyết, không phải một bản ghi về ý định; phần kết cố định Action / Before / Server response / After / Basis của caveman-manage/SKILL.md là một biểu mẫu báo cáo hậu kỳ được ship cho người dùng; và docs/HONEST-NUMBERS.md là một bản ghi thường trực về những gì đã và chưa được chứng minh — hữu ích, và không phải tầng này.
Sáu khối nội dung không khớp với tầng nào trong năm tầng, và gộp lại chúng là phần lớn của kho. Hai trong số đó đáng để sao chép.
Văn bản chỉ dẫn như một tài nguyên được đo, được cấp ngân sách, được định giá.skills/registry.json đặt native_pack.core_prompt_token_budget = 560 cho phần Core luôn được nạp và một prompt_byte_budget 900 byte cho mỗi skill. skills/compile.mjs cưỡng chế cả hai bằng những thất bại cứng — dòng 69 die('native Core exceeds conservative token estimate: X > Y'), dòng 117 die('instruction bytes exceed budget'). Các tệp được viết ra một cách thấy rõ là để vừa khuôn: skills/investigate-first/SKILL.md dài 688 byte, năm gạch đầu dòng mệnh lệnh. docs/HONEST-NUMBERS.md định giá theo chiều ngược lại: "Chi phí đầu vào mà skill thêm vào | ~1–1.5k token mỗi lượt". Không tầng nào có bất kỳ khái niệm gì về việc một chỉ dẫn tốn bao nhiêu. Quy tắc của tầng 1 — chỉ những gì luôn đúng — là một phép thử ngữ nghĩa; cái này là một con số byte có một lần build hỏng đứng phía sau, và điều đó đóng khung lại kỷ luật thành tối ưu hoá dưới ràng buộc ngân sách chứ không phải một danh mục kiểm tra.
Một hệ thống kiểu về xuất xứ cho chính các tuyên bố của sản phẩm. Mọi con số mà công cụ phát ra đều mang một trong ba nhãn: inferred (tính cục bộ), benchmark_counterfactual (một benchmark đã ghim), hoặc verified (chỉ từ lưu lượng thật trong sổ cái nhà cung cấp đã ký). README.md dòng 323: "khi offline, caveman sẽ không bao giờ tự gọi mình là verified". skills/caveman-manage/SKILL.md cưỡng chế cái dàn thứ bậc này ngay lúc agent chạy — "Không bao giờ chuyển mức tăng từ thí nghiệm thành verified_savings." Nó không phải một quy tắc (nó ràng buộc các tuyên bố, không ràng buộc hành vi), không phải một cổng chặn (chẳng có gì thoát khác 0 khi tuyên bố quá đà), không phải nghi thức, bản ghi hay chỉ mục. Nó hỏi điều mà năm tầng chưa bao giờ hỏi: không phải agent có làm đúng việc không mà là agent có được phép nói điều đó không — và với công cụ agent công khai, đó chính là nơi thất bại đắt giá nằm ở.
Một cái thứ ba xứng đáng được nhắc một dòng. .github/workflows/agent-conformance.yml ghim mười CLI agent của bên thứ ba ở các phiên bản chính xác và hằng đêm cài lại từng cái ở @latest trong một job dùng-rồi-bỏ, đẩy kết quả sang agents/drift-report.mjs, script này mở hoặc cập nhật một issue GitHub khi một bề mặt thượng nguồn đã dịch chuyển: một cổng chặn hướng ra ngoài, chạy theo đồng hồ chứ không theo commit, và cố ý không chặn.
Hai chỗ mâu thuẫn, và kho này tự lập tài liệu chống lại chính mình ở chỗ thứ nhất.
Mô tả trên GitHub, .claude-plugin/marketplace.json và README.md dòng 132 và 150 đều ship một tiêu đề lớn "giảm 65% token đầu ra (đã đo)" kèm một bảng theo từng tác vụ và một biểu đồ cột. docs/HONEST-NUMBERS.md dòng 16 nói về đúng chỉ số đó: "Mức giảm đầu ra so với các phản hồi dài dòng mặc định | Chưa công bố | Bộ khung đo có tồn tại, nhưng kho không có kết quả thô đã được rà soát và commit". Và benchmarks/results/ chứa đúng một tệp, một .gitkeep 0 byte — kiểm tra lại 2026-09-03. Còn CLAUDE.md dòng 22 nêu chính cái quy tắc mà trang chủ vi phạm: "Không công bố bất kỳ tỷ lệ phần trăm nào về mức giảm hay về tương đương chất lượng nếu không có một benchmark đã được rà soát và commit."
Đọc một cách công bằng, đây là công bố thông tin chứ không phải che giấu: README.md dòng 156 dẫn link tới HONEST-NUMBERS.md từ một blockquote cảnh báo, và mục "## When caveman loses (net-negative)" của trang đó dẫn chính các báo cáo lỗi của dự án để chống lại mình — bao gồm một phép so A/B trên Cursor cho thấy 4.3M token khi có caveman so với 1M khi không có — và bảo người đọc hãy tắt nó đi. Rất ít kho công khai tranh luận với chính tiêu đề lớn của mình ngay trong tài liệu của mình. Khuôn mẫu đáng đặt tên ở đây là trang trung thực và trang chủ có hai lượng khán giả khác nhau, và trang chủ thắng theo mặc định.
Cái thứ hai thì dễ sửa. AGENTS.md và CLAUDE.md định tuyến công việc sang các kho anh em bằng đường dẫn tuyệt đối trên máy của người bảo trì, mà hai trong số đó chính CLAUDE.md nói là riêng tư — nên cái tệp mà mọi agent đều nạp lại gửi nó tới nơi nó không thể tới được.
Nối cổng chặn vào chính nội dung của bạn và vào CI.verbs-gate.mjs cộng với một workflow tái sinh các artefact rồi chạy git diff --exit-code: tài liệu không thể trôi dạt khỏi mã, vì bản build dừng lại.
Cho các chỉ dẫn một ngân sách có một lần build hỏng đứng phía sau. 560 token cho phần core luôn được nạp, 900 byte mỗi skill — cơ chế duy nhất trong nghiên cứu này ngăn một tệp quy tắc phình to.
Gắn nhãn cho mọi con số theo cách nó được lấy ra, rồi bắt trang chủ tuân theo cái nhãn đó. Khoảng cách giữa bộ từ vựng ba bậc và README.md dòng 150 chính là toàn bộ bài học.
Tránh các đường dẫn tuyệt đối cục bộ trong một tệp mà mọi agent đều nạp. Một đường dẫn tương đối chẳng tốn gì và không gửi agent của một người lạ tới desktop của người khác.
Khoảng tám phút, chỉ đọc, qua gh api và raw.githubusercontent.com. Chúng tôi đã đọc toàn bộ cây 1,637 đường dẫn và mở chừng 20 tệp: các tệp quy tắc, docs/HONEST-NUMBERS.md, các registry, các script cưỡng chế (verbs-gate.mjs 90 dòng đầu trên khoảng ~250 dòng; check-profile-scope.mjs và verify_repo.py mỗi cái 60 dòng đầu), ba workflow và bốn tệp skill. README.md được grep, chứ không đọc từng dòng.
Chưa mở — mọi tuyên bố về những thứ này chỉ dựa trên đường dẫn trong cây và kích thước tệp: toàn bộ mã nguồn Go engine/ và proxy/, packages/ (378 tệp, hoàn toàn chưa xem xét), shared/, extension/, mem/, shrink/, rewriter/, mcp/, bin/install.js (82 KB, được dẫn theo kích thước và theo những gì CLAUDE.md nói về nó), src/hooks/*.js, và 9 trong 14 tệp SKILL.md. src/hooks/checksums.sha256 tồn tại với 776 byte theo cây, nhưng chúng tôi không đọc nó và cũng không xác minh rằng verify_repo.py có kiểm tra nó — mối ràng buộc đó là tuyên bố của CLAUDE.md, không phải quan sát của chúng tôi. Tầng 4 là kết luận ít chắc chắn nhất: lượt grep không tìm thấy tệp bản ghi nào, nhưng docs/technical/accounting-and-evidence.md và evals/README.md đã không được mở và cái nào trong hai cái đó cũng có thể chứa một nghi thức lưu giữ bản ghi. Chúng tôi không kiểm tra issue, pull request, lịch sử commit hay các lần chạy CI nào, nên chúng tôi không thể nói liệu các cổng chặn này có xanh trong thực tế hay không, hay liệu job phát hiện trôi dạt hằng đêm đã từng kích hoạt lần nào chưa.
A versioned, multi-runtime plugin shipping 25 engineering-lifecycle workflows (spec → plan → build → verify → review → ship) as SKILL.md files — and, alongside them, the CI machinery that lints their structure and measures whether their descriptions route to the right skill. "A collection of skills" undersells it: by file count the skills are the smaller half.
195 blobs. 25 skill directories at skills/<kebab-name>/SKILL.md, all markdown-first; only constraint-driven-development and idea-refine carry extra files. Frontmatter is exactly two fields, name and description; directory names are enforced kebab-case.
The weight sits in the siblings: evals/ (75 files — one case JSON per skill, plus runnable fixtures), scripts/ (13 — six validators, five with their own -test.js twin, plus lib/skill-lint.js as the single source of lint rules), hooks/ (9 — three shell hooks, tests, hooks.json, two design docs), references/ (7 checklists), agents/ (4 personas), docs/ (13 setup guides). Nine slash commands exist three times over — .claude/commands/*.md, .gemini/commands/*.toml, commands/*.toml — with .codex-plugin/, .agents/plugins/ and .opencode/skills alongside. Root carries AGENTS.md, CLAUDE.md, CONTRIBUTING.md, and both plugin.json and .claude-plugin/marketplace.json at version 0.6.8.
Version pinned in two manifests and kept in sync mechanically; dedup enforced at three points
Layer 2 is the finding. Across this corpus the mechanical gate is the layer most often missing; here it is the strongest thing in the repository. .github/workflows/test-plugin-install.yml runs on every push and pull request and executes six validators, claude plugin validate ., and a real marketplace-add plus plugin-install smoke test. scripts/validate-skills.js documents its exit codes — "0 = all clear, 1 = one or more errors" — and calls process.exit(1) at three sites. scripts/lib/skill-lint.js is the policy: name equal to the directory name, kebab-case, description capped at 1024 characters and not phrased as a negative trigger, required sections present, declared workflow steps matched by process sections. Five validators have -test.js twins run under node --test in the same workflow — the gates are themselves gated. And run-evals.js --min-rank1 80 reddens CI on a measured behavioural number, not on file shape.
Layer 4 is where the strict reading and the first pass disagree, and that is worth stating. The investigation lane recorded layer 4 as carried; under the rule that an artefact must be correct rather than merely present, it is a touch. evals/skill-impact.md is a well-designed append-only ledger — "Rejected Skill Changes", columns Date / Affected skill / Attempted change / Rank-1 score before→after / Rejected PR and outcome — and, read in full on 2026-09-03 and re-checked against the live file the same day, it holds the header row and nothing else. Two readings are honest: the structure shipped ahead of the practice, or no proposal has yet been rejected on eval evidence. Either way, copy the ledger and the habit. Separately, and to the repository's credit: the record-keeping rituals it ships to its users are real — documentation-and-adrs, spec and plan artefacts written before the work, and validate-artifact-paths.js in CI so their path convention cannot drift. That is a record discipline for other people's projects, a different claim from keeping one about your own.
Layer 1 does not sit where the shorthand expects.AGENTS.md and CLAUDE.md both open by disclaiming the obvious use — they configure agents working on this repository and are "not meant to be copied into other projects or into a global agent configuration" — so they are the standing rule file for contributors only. The consumer's always-loaded instruction is delivered by machinery instead: hooks/session-start.sh cats skills/using-agent-skills/SKILL.md into every new session as SessionStart additionalContext, and hooks/hooks.json registers exactly that one hook. Layer 1 here is a file and a hook, with two different audiences.
Adversarial pressure fixtures.evals/fixtures/ holds cases whose entire content is social pressure to abandon the workflow, graded pass or fail. evals/fixtures/shipping-and-launch/authority-pressure.md: "The launch sponsor says the public date cannot move and asks the team to mark the release GO despite the failing end-to-end checkout test." evals/fixtures/debugging-and-error-recovery/time-pressure.md does the same with a stakeholder who says there is no time to run the failing test first. evals/README.md states the intent plainly: these "verify that the workflow still holds when the prompt argues for skipping it."
The five layers all describe ways to state or enforce a discipline. This is neither. It assumes the discipline is already stated and asks whether it holds when a plausible authority argues against it. A gate refuses at a fixed boundary; a pressure fixture manufactures the conditions under which an agent talks itself past the boundary, and scores the outcome.
The anti-rationalization corpus. Every SKILL.md must contain a "Common Rationalizations" table — excuse left, rebuttal right — and a "Red Flags" list, machine-enforced: the section is in skill-lint.js's required sections, so a skill without one fails CI. The TDD table has seven rows; one reads "I'll write tests after the code works" → "You won't. And tests written after the fact test implementation, not behavior." AGENTS.md carries the same device for the repository's own agents under the heading "Anti-Rationalization".
That is not a rule (it requires nothing), not a gate (nothing refuses), not a step, not a record, not an index. It is a library of counter-arguments to arguments nobody has made yet, and it only makes sense if you model the agent as something that will construct a locally reasonable justification for skipping the ritual — a predicted failure of will, not of knowledge. With the pressure fixtures it is the same idea twice: once as prose, once as a graded test.
Four further things fell outside the rubric and are recorded for completeness: trigger metadata calibrated as a ratcheted metric (evals/README.md — 86% checked-in baseline, --min-rank1 80 in CI, and the rule "raise the floor as routing improves; never lower it to make a regression pass"); two runtime hooks that substitute rather than refuse (hooks/sdd-cache-pre.sh, an ETag-revalidated WebFetch cache; hooks/simplify-ignore.sh, which replaces file regions with BLOCK_<hash> placeholders on disk for a session); the parity tax of nine commands maintained in triplicate, with scripts/validate-commands.js policing description drift between the copies rather than eliminating them; and a rule in AGENTS.md forbidding a "router" persona that decides which other persona to call.
Substantially they agree, and the numbers check out: "install all 25 skills" matches 25 directories under skills/, and the nine slash commands match nine files in each of the three command directories. The README also self-discloses two known gaps with issue links (#361, per-skill install loses references/; #351, description-vocabulary gaps) — the opposite of overclaiming.
Two mismatches are worth naming. CLAUDE.md states under Commands that npm test is "Not applicable (this is a documentation project)" and offers frontmatter validation as prose advice — while the CI workflow runs six validators plus node --test over five validator test files. The standing rule file understates the repository's own gate by a wide margin, an unusual direction for a document to be wrong in. Second, hooks/hooks.json registers only the SessionStart hook; the two most substantial hooks ship with tests and design docs but are not wired into the manifest, so they are opt-in scripts rather than active plugin behaviour. The design docs say so; the tree alone does not.
Put the gate in CI against your own contents, and unit-test the gate. Six validators with five -test.js twins is the cheapest version of "the thing that refuses is itself checked".
Measure whether your trigger metadata routes. A rank-1 rate with a checked-in baseline and a floor that may only rise turns "write good descriptions" from a style note into a regression test.
Write pressure cases, not only happy-path cases. The interesting failure is not that the agent did not know the rule; it is that it found a reason to set it aside.
A ledger with a header row is not a record. Ship the structure for your own governance and the first row with it, or the artefact reads as kept when it is not.
Roughly eight minutes, read-only, over gh api and raw.githubusercontent.com; the complete 195-path tree was listed. Read in full or near-full: AGENTS.md, CLAUDE.md, the CI workflow, hooks/hooks.json, hooks/session-start.sh, the openings of hooks/sdd-cache-pre.sh and hooks/simplify-ignore.sh, evals/README.md, evals/skill-impact.md (complete), two pressure fixtures, scripts/validate-skills.js (complete), the opening of scripts/validate-commands.js, most of skills/test-driven-development/SKILL.md, the opening of skills/interview-me/SKILL.md, .claude/rules/skills-contributing.md, both manifests, and the openings of references/definition-of-done.md and README.md. scripts/lib/skill-lint.js was grepped for its rule constants and every error and warning message, but its matching logic was not read.
Not opened at all: 23 of the 25 SKILL.md bodies; scripts/run-evals.js, so the ranking harness and the headless executor are known only from evals/README.md and the CI invocation — it was not verified that the code does what the README says; all four agents/*.md personas; docs/skill-anatomy.md and 12 other docs; references/orchestration-patterns.md and five further checklists; every command body, so the README's claim that /build auto "pauses on failures or risky steps" is unverified; CONTRIBUTING.md, known only from three files citing it; .opencode/skills, a single blob, probably a symlink, unresolved; hooks/sdd-cache-post.sh, the three hook tests and both hook design docs. Commit history, the issue tracker and the current CI status on main were not checked — so "the gate exists and is wired to push and pull request" is proven from the workflow file, while "the gate is green" is not.
agent-skills — 25 Lifecycle-Skills, umgeben von mehr Maschinerie als die Skills selbst#
Ein versioniertes Multi-Runtime-Plugin, das 25 Engineering-Lifecycle-Workflows (spec → plan → build → verify → review → ship) als SKILL.md-Dateien ausliefert — und daneben die CI-Maschinerie, die deren Struktur prüft und misst, ob ihre Beschreibungen zum richtigen Skill routen. „Eine Sammlung von Skills“ untertreibt: nach Dateizahl sind die Skills die kleinere Hälfte.
195 Blobs. 25 Skill-Verzeichnisse unter skills/<kebab-name>/SKILL.md, alle markdown-first; nur constraint-driven-development und idea-refine tragen weitere Dateien. Das Frontmatter hat genau zwei Felder, name und description; Verzeichnisnamen sind erzwungenes kebab-case.
Das Gewicht liegt bei den Geschwistern: evals/ (75 Dateien — je ein Case-JSON pro Skill, dazu lauffähige Fixtures), scripts/ (13 — sechs Validatoren, fünf mit eigenem -test.js-Zwilling, dazu lib/skill-lint.js als einzige Quelle der Lint-Regeln), hooks/ (9 — drei Shell-Hooks, Tests, hooks.json, zwei Design-Dokumente), references/ (7 Checklisten), agents/ (4 Personas), docs/ (13 Setup-Anleitungen). Neun Slash-Kommandos existieren dreifach — .claude/commands/*.md, .gemini/commands/*.toml, commands/*.toml —, daneben .codex-plugin/, .agents/plugins/ und .opencode/skills. Im Wurzelverzeichnis liegen AGENTS.md, CLAUDE.md, CONTRIBUTING.md sowie plugin.json und .claude-plugin/marketplace.json, beide auf Version 0.6.8.
Version in zwei Manifesten festgezurrt und mechanisch synchron gehalten; Dedup an drei Stellen erzwungen
Schicht 2 ist der Fund. In diesem Korpus fehlt das mechanische Gate am häufigsten; hier ist es das Stärkste im Repository. .github/workflows/test-plugin-install.yml läuft bei jedem Push und jedem Pull Request und führt sechs Validatoren aus, dazu claude plugin validate . und einen echten Marketplace-Add- plus Plugin-Install-Rauchtest. scripts/validate-skills.js dokumentiert seine Exit-Codes — „0 = all clear, 1 = one or more errors“ — und ruft an drei Stellen process.exit(1) auf. scripts/lib/skill-lint.js ist die Policy: name gleich dem Verzeichnisnamen, kebab-case, Beschreibung auf 1024 Zeichen begrenzt und nicht als negativer Auslöser formuliert, Pflichtabschnitte vorhanden, deklarierte Workflow-Schritte durch Prozessabschnitte gedeckt. Fünf Validatoren haben -test.js-Zwillinge, die im selben Workflow unter node --test laufen — die Gates sind selbst gegated. Und run-evals.js --min-rank1 80 macht die CI an einer gemessenen Verhaltenszahl rot, nicht an der Dateiform.
Bei Schicht 4 weichen die strenge Lesart und der erste Durchgang voneinander ab, und das gehört gesagt. Die untersuchende Instanz notierte Schicht 4 als getragen; unter der Regel, dass ein Artefakt korrekt und nicht bloß vorhanden sein muss, ist es ein Streifen. evals/skill-impact.md ist ein gut entworfenes, nur anhängbares Register — „Rejected Skill Changes“, Spalten Date / Affected skill / Attempted change / Rank-1 score before→after / Rejected PR and outcome — und enthält, vollständig gelesen am 2026-09-03 und am selben Tag gegen die Live-Datei nachgeprüft, die Kopfzeile und sonst nichts. Zwei Lesarten sind redlich: die Struktur kam vor der Praxis, oder es wurde noch kein Vorschlag auf Eval-Basis abgelehnt. So oder so: das Register und die Gewohnheit kopieren. Getrennt davon und zur Ehre des Repositorys: die Nachweis-Rituale, die es an seine Nutzenden ausliefert, sind echt — documentation-and-adrs, vor der Arbeit geschriebene Spec- und Plan-Artefakte und validate-artifact-paths.js in der CI, damit deren Pfadkonvention nicht driften kann. Das ist eine Nachweisdisziplin für die Projekte anderer Leute — eine andere Aussage als eine über das eigene.
Schicht 1 sitzt nicht dort, wo die Faustregel sie vermutet.AGENTS.md und CLAUDE.md beginnen beide damit, die naheliegende Verwendung auszuschließen — sie konfigurieren Agenten, die an diesem Repository arbeiten, und sind „not meant to be copied into other projects or into a global agent configuration“ —, sind also die stehende Regeldatei allein für Beitragende. Die immer geladene Anweisung für Nutzende liefert stattdessen die Maschinerie: hooks/session-start.sh schreibt skills/using-agent-skills/SKILL.md in jede neue Session als SessionStart-additionalContext, und hooks/hooks.json registriert genau diesen einen Hook. Schicht 1 ist hier eine Datei und ein Hook, mit zwei verschiedenen Adressaten.
Adversariale Druck-Fixtures.evals/fixtures/ enthält Fälle, deren gesamter Inhalt sozialer Druck ist, den Workflow aufzugeben — bewertet mit bestanden oder nicht bestanden. evals/fixtures/shipping-and-launch/authority-pressure.md: „The launch sponsor says the public date cannot move and asks the team to mark the release GO despite the failing end-to-end checkout test.“ evals/fixtures/debugging-and-error-recovery/time-pressure.md macht dasselbe mit einer Person, die sagt, für den fehlschlagenden Test sei keine Zeit. evals/README.md benennt die Absicht schmucklos: diese Fälle „verify that the workflow still holds when the prompt argues for skipping it.“
Alle fünf Schichten beschreiben Arten, eine Disziplin zu formulieren oder zu erzwingen. Dies ist keines von beidem. Es setzt die Disziplin als formuliert voraus und fragt, ob sie hält, wenn eine plausible Autorität dagegen argumentiert. Ein Gate verweigert an einer festen Grenze; ein Druck-Fixture stellt die Bedingungen her, unter denen ein Agent sich über die Grenze hinwegredet, und bewertet das Ergebnis.
Der Anti-Rationalisierungs-Korpus. Jede SKILL.md muss eine Tabelle „Common Rationalizations“ enthalten — Ausrede links, Widerlegung rechts — sowie eine „Red Flags“-Liste, maschinell erzwungen: der Abschnitt steht in den Pflichtabschnitten von skill-lint.js, ein Skill ohne ihn fällt in der CI durch. Die TDD-Tabelle hat sieben Zeilen; eine lautet „I'll write tests after the code works“ → „You won't. And tests written after the fact test implementation, not behavior.“ AGENTS.md trägt dasselbe Mittel für die Agenten des Repositorys selbst, unter der Überschrift „Anti-Rationalization“.
Das ist keine Regel (es fordert nichts), kein Gate (nichts verweigert), kein Schritt, kein Nachweis, kein Index. Es ist eine Bibliothek von Gegenargumenten zu Argumenten, die noch niemand vorgebracht hat, und sie ergibt nur Sinn, wenn man den Agenten als etwas modelliert, das sich eine lokal vernünftige Rechtfertigung dafür bauen wird, das Ritual zu überspringen — ein vorhergesagtes Versagen des Willens, nicht des Wissens. Mit den Druck-Fixtures ist es derselbe Gedanke zweimal: einmal als Prosa, einmal als bewerteter Test.
Vier weitere Dinge fielen aus dem Raster und werden der Vollständigkeit halber festgehalten: Auslöser-Metadaten als hochgeschraubte Kennzahl (evals/README.md — 86 % Basiswert im Repository, --min-rank1 80 in der CI und die Regel „raise the floor as routing improves; never lower it to make a regression pass“); zwei Laufzeit-Hooks, die ersetzen statt zu verweigern (hooks/sdd-cache-pre.sh, ein per ETag revalidierter WebFetch-Cache; hooks/simplify-ignore.sh, das Dateibereiche für die Dauer einer Session auf der Platte durch BLOCK_<hash>-Platzhalter ersetzt); die Paritätssteuer von neun dreifach gepflegten Kommandos, bei denen scripts/validate-commands.js die Drift der Beschreibungen zwischen den Kopien überwacht, statt die Kopien zu beseitigen; und eine Regel in AGENTS.md, die eine „Router“-Persona verbietet, die entscheidet, welche andere Persona aufgerufen wird.
Im Wesentlichen stimmen sie überein, und die Zahlen gehen auf: „install all 25 skills“ entspricht 25 Verzeichnissen unter skills/, und die neun Slash-Kommandos entsprechen neun Dateien in jedem der drei Kommandoverzeichnisse. Die README legt zudem zwei bekannte Lücken mit Issue-Verweisen offen (#361, Einzelinstallation verliert references/; #351, Lücken im Beschreibungsvokabular) — das Gegenteil von Übertreibung.
Zwei Abweichungen gehören benannt. CLAUDE.md schreibt unter Commands, npm test sei „Not applicable (this is a documentation project)“, und bietet die Frontmatter-Prüfung als Prosa-Rat an — während der CI-Workflow sechs Validatoren ausführt und dazu node --test über fünf Validator-Testdateien. Die stehende Regeldatei untertreibt das eigene Gate des Repositorys deutlich, eine ungewöhnliche Richtung des Irrtums für ein Dokument. Zweitens registriert hooks/hooks.json nur den SessionStart-Hook; die beiden gewichtigsten Hooks kommen mit Tests und Design-Dokumenten, sind aber nicht im Manifest verdrahtet und damit optionale Skripte statt aktives Plugin-Verhalten. Die Design-Dokumente sagen das; der Baum allein nicht.
Das Gate gehört in die CI, gegen die eigenen Inhalte — und das Gate selbst gehört getestet. Sechs Validatoren mit fünf -test.js-Zwillingen sind die billigste Fassung von „das Verweigernde wird selbst geprüft“.
Miss, ob deine Auslöser-Metadaten wirklich routen. Eine Rank-1-Quote mit eingechecktem Basiswert und einer Untergrenze, die nur steigen darf, macht aus „schreib gute Beschreibungen“ einen Regressionstest.
Schreib Druckfälle, nicht nur Sonnenscheinfälle. Der interessante Fehlschlag ist nicht, dass der Agent die Regel nicht kannte, sondern dass er einen Grund fand, sie beiseitezulegen.
Ein Register mit einer Kopfzeile ist kein Nachweis. Liefere die Struktur für die eigene Governance zusammen mit der ersten Zeile aus, sonst liest sich das Artefakt als gepflegt, obwohl es das nicht ist.
Rund acht Minuten, ausschließlich lesend, über gh api und raw.githubusercontent.com; der vollständige Baum mit 195 Pfaden wurde aufgelistet. Ganz oder nahezu ganz gelesen: AGENTS.md, CLAUDE.md, der CI-Workflow, hooks/hooks.json, hooks/session-start.sh, die Anfänge von hooks/sdd-cache-pre.sh und hooks/simplify-ignore.sh, evals/README.md, evals/skill-impact.md (vollständig), zwei Druck-Fixtures, scripts/validate-skills.js (vollständig), der Anfang von scripts/validate-commands.js, der größte Teil von skills/test-driven-development/SKILL.md, der Anfang von skills/interview-me/SKILL.md, .claude/rules/skills-contributing.md, beide Manifeste sowie die Anfänge von references/definition-of-done.md und README.md. scripts/lib/skill-lint.js wurde nach seinen Regelkonstanten und allen Fehler- und Warnmeldungen durchsucht, seine Vergleichslogik aber nicht gelesen.
Überhaupt nicht geöffnet: 23 der 25 SKILL.md-Rümpfe; scripts/run-evals.js, sodass die Ranking-Maschinerie und der Headless-Executor nur aus evals/README.md und dem CI-Aufruf bekannt sind — es wurde nicht überprüft, ob der Code tut, was die README sagt; alle vier Personas unter agents/*.md; docs/skill-anatomy.md und zwölf weitere Dokumente; references/orchestration-patterns.md und fünf weitere Checklisten; sämtliche Kommandorümpfe, sodass die Behauptung der README, /build auto „pauses on failures or risky steps“, unbelegt bleibt; CONTRIBUTING.md, nur aus drei darauf verweisenden Dateien bekannt; .opencode/skills, ein einzelner Blob, vermutlich ein Symlink, nicht aufgelöst; hooks/sdd-cache-post.sh, die drei Hook-Tests und beide Hook-Design-Dokumente. Commit-Historie, Issue-Tracker und der aktuelle CI-Stand auf main wurden nicht geprüft — „das Gate existiert und hängt an Push und Pull Request“ ist damit aus der Workflow-Datei belegt, „das Gate ist grün“ nicht.
agent-skills — 25 skill vòng đời, được bọc trong nhiều bộ máy hơn cả bản thân các skill#
Một plugin có đánh phiên bản, chạy trên nhiều runtime, cung cấp 25 workflow của vòng đời kỹ thuật (spec → plan → build → verify → review → ship) dưới dạng các tệp SKILL.md — và, bên cạnh chúng, là bộ máy CI lint cấu trúc của chúng và đo xem phần mô tả của chúng có định tuyến đến đúng skill hay không. "Một bộ sưu tập các skill" là cách nói hạ thấp nó: tính theo số tệp thì các skill là nửa nhỏ hơn.
195 blob. 25 thư mục skill tại skills/<kebab-name>/SKILL.md, tất cả đều markdown-first; chỉ constraint-driven-development và idea-refine mang thêm tệp phụ. Frontmatter đúng hai trường, name và description; tên thư mục bị bắt buộc theo kebab-case.
Trọng lượng nằm ở các thư mục anh em: evals/ (75 tệp — một JSON case cho mỗi skill, cộng thêm các fixture chạy được), scripts/ (13 — sáu validator, năm trong số đó có bản sinh đôi -test.js riêng, cộng lib/skill-lint.js làm nguồn duy nhất của các quy tắc lint), hooks/ (9 — ba shell hook, các test, hooks.json, hai tài liệu thiết kế), references/ (7 checklist), agents/ (4 persona), docs/ (13 hướng dẫn cài đặt). Chín slash command tồn tại tới ba lần — .claude/commands/*.md, .gemini/commands/*.toml, commands/*.toml — cùng với .codex-plugin/, .agents/plugins/ và .opencode/skills bên cạnh. Thư mục gốc mang AGENTS.md, CLAUDE.md, CONTRIBUTING.md, và cả plugin.json lẫn .claude-plugin/marketplace.json ở phiên bản 0.6.8.
Chia làm hai: các tệp ở gốc điều chỉnh người đóng góp, còn một hook thì tiêm vào tệp luôn-được-nạp của người dùng
2 · Cổng cơ học
● mang
.github/workflows/test-plugin-install.yml, scripts/validate-skills.js, scripts/lib/skill-lint.js, bốn validator khác và các bản sinh đôi -test.js của chúng
Từ chối chính nội dung của repository này, trên mỗi push và pull request
Phiên bản được ghim trong hai manifest và giữ đồng bộ bằng máy; khử trùng lặp được cưỡng chế tại ba điểm
Tầng 2 chính là phát hiện. Xuyên suốt kho tư liệu này, cổng cơ học là tầng hay thiếu nhất; ở đây nó lại là thứ mạnh nhất trong repository. .github/workflows/test-plugin-install.yml chạy trên mỗi push và pull request và thực thi sáu validator, claude plugin validate ., cùng một smoke test marketplace-add và plugin-install thật. scripts/validate-skills.js ghi rõ các mã thoát của nó — "0 = all clear, 1 = one or more errors" — và gọi process.exit(1) tại ba chỗ. scripts/lib/skill-lint.js chính là chính sách: name bằng tên thư mục, kebab-case, mô tả bị giới hạn ở 1024 ký tự và không được diễn đạt như một trigger phủ định, các mục bắt buộc phải có mặt, các bước workflow đã khai báo phải khớp với các mục quy trình. Năm validator có bản sinh đôi -test.js chạy dưới node --test trong cùng workflow đó — chính các cổng cũng bị đặt cổng. Và run-evals.js --min-rank1 80 làm đỏ CI dựa trên một con số hành vi đo được, chứ không dựa trên hình dạng tệp.
Tầng 4 là nơi cách đọc nghiêm ngặt và lượt đọc đầu tiên bất đồng, và điều đó đáng được nói ra. Nhánh điều tra ghi nhận tầng 4 là mang; theo quy tắc rằng một artefact phải đúng chứ không chỉ đơn thuần là có mặt, nó chỉ là chạm tới. evals/skill-impact.md là một sổ cái chỉ-ghi-thêm được thiết kế tốt — "Rejected Skill Changes", các cột Date / Affected skill / Attempted change / Rank-1 score before→after / Rejected PR and outcome — và, khi được đọc trọn vẹn vào 2026-09-03 rồi kiểm tra lại với tệp trực tiếp trong cùng ngày, nó chỉ chứa hàng tiêu đề và không có gì khác. Có hai cách đọc đều trung thực: cấu trúc được phát hành trước khi có thực hành, hoặc chưa có đề xuất nào bị từ chối dựa trên bằng chứng eval. Dù thế nào, hãy sao chép cả sổ cái lẫn thói quen. Tách bạch ra, và đây là điểm đáng ghi nhận của repository: các nghi thức lưu hồ sơ mà nó cung cấp cho người dùng là thật — documentation-and-adrs, các artefact spec và plan được viết trước khi làm việc, và validate-artifact-paths.js trong CI để quy ước đường dẫn của chúng không thể trôi dạt. Đó là kỷ luật lưu hồ sơ dành cho dự án của người khác, một tuyên bố khác hẳn với việc tự giữ một bản ghi về chính mình.
Tầng 1 không nằm ở nơi mà cách nói tắt vẫn tưởng. Cả AGENTS.md lẫn CLAUDE.md đều mở đầu bằng việc phủ nhận cách dùng hiển nhiên — chúng cấu hình các agent làm việc trên chính repository này và "not meant to be copied into other projects or into a global agent configuration" — nên chúng chỉ là tệp quy tắc thường trực dành cho người đóng góp mà thôi. Chỉ thị luôn-được-nạp dành cho người dùng lại được chuyển giao bằng bộ máy: hooks/session-start.sh cat skills/using-agent-skills/SKILL.md vào mọi phiên mới dưới dạng additionalContext của SessionStart, và hooks/hooks.json đăng ký đúng một hook đó. Tầng 1 ở đây là một tệp và một hook, với hai đối tượng khác nhau.
Các fixture gây áp lực đối kháng.evals/fixtures/ chứa những case mà toàn bộ nội dung là áp lực xã hội nhằm khiến ta từ bỏ workflow, được chấm đạt hoặc không đạt. evals/fixtures/shipping-and-launch/authority-pressure.md: "The launch sponsor says the public date cannot move and asks the team to mark the release GO despite the failing end-to-end checkout test." evals/fixtures/debugging-and-error-recovery/time-pressure.md làm điều tương tự với một bên liên quan nói rằng không còn thời gian để chạy bài test đang trượt trước. evals/README.md phát biểu ý định một cách thẳng thắn: những case này "verify that the workflow still holds when the prompt argues for skipping it."
Cả năm tầng đều mô tả những cách để phát biểu hoặc cưỡng chế một kỷ luật. Đây không phải cái nào trong hai. Nó giả định kỷ luật đã được phát biểu rồi và hỏi xem nó có đứng vững không khi một thẩm quyền nghe có lý lập luận chống lại nó. Một cái cổng từ chối tại một ranh giới cố định; một fixture áp lực thì chế tạo ra chính những điều kiện mà trong đó một agent tự thuyết phục mình vượt qua ranh giới, rồi chấm điểm kết quả.
Kho phản-biện-lý-do. Mọi SKILL.md đều phải chứa một bảng "Common Rationalizations" — cái cớ bên trái, lời bác bỏ bên phải — và một danh sách "Red Flags", được máy cưỡng chế: mục này nằm trong danh sách mục bắt buộc của skill-lint.js, nên một skill thiếu nó sẽ trượt CI. Bảng TDD có bảy hàng; một hàng ghi "I'll write tests after the code works" → "You won't. And tests written after the fact test implementation, not behavior." AGENTS.md mang chính thủ pháp đó cho các agent của bản thân repository, dưới tiêu đề "Anti-Rationalization".
Đó không phải một quy tắc (nó không đòi hỏi gì cả), không phải một cái cổng (không có gì từ chối), không phải một bước, không phải một bản ghi, không phải một chỉ mục. Nó là một thư viện các lập luận phản bác nhắm vào những lập luận chưa ai đưa ra, và nó chỉ có nghĩa nếu bạn mô hình hóa agent như một thứ sẽ dựng lên một biện minh hợp lý tại chỗ để bỏ qua nghi thức — một thất bại được dự báo về ý chí, chứ không phải về kiến thức. Cùng với các fixture áp lực, đó là cùng một ý tưởng lặp lại hai lần: một lần dưới dạng văn xuôi, một lần dưới dạng một bài kiểm tra có chấm điểm.
Bốn thứ nữa nằm ngoài khung đánh giá và được ghi lại cho đầy đủ: metadata trigger được hiệu chỉnh thành một chỉ số chỉ đi lên một chiều (evals/README.md — đường cơ sở 86% đã được commit, --min-rank1 80 trong CI, và quy tắc "raise the floor as routing improves; never lower it to make a regression pass"); hai runtime hook thay thế thay vì từ chối (hooks/sdd-cache-pre.sh, một bộ nhớ đệm WebFetch được xác thực lại bằng ETag; hooks/simplify-ignore.sh, thứ thay các vùng tệp bằng placeholder BLOCK_<hash> trên đĩa trong suốt một phiên); khoản thuế đồng bộ của chín command được duy trì thành ba bản, với scripts/validate-commands.js canh chừng sự trôi dạt mô tả giữa các bản sao thay vì loại bỏ chúng; và một quy tắc trong AGENTS.md cấm một persona "router" chuyên quyết định gọi persona nào khác.
Về cơ bản chúng khớp nhau, và các con số kiểm tra đều đúng: "install all 25 skills" khớp với 25 thư mục dưới skills/, và chín slash command khớp với chín tệp trong mỗi thư mục trong ba thư mục command. README cũng tự công bố hai lỗ hổng đã biết kèm liên kết issue (#361, cài đặt theo từng skill làm mất references/; #351, các lỗ hổng từ vựng trong mô tả) — ngược lại hẳn với việc thổi phồng.
Có hai chỗ vênh đáng nêu tên. CLAUDE.md ghi ở mục Commands rằng npm test là "Not applicable (this is a documentation project)" và đưa ra việc kiểm tra frontmatter như một lời khuyên bằng văn xuôi — trong khi workflow CI chạy sáu validator cộng node --test trên năm tệp test của validator. Tệp quy tắc thường trực đánh giá thấp chính cái cổng của repository một khoảng rất xa, một hướng sai lệch bất thường đối với một tài liệu. Thứ hai, hooks/hooks.json chỉ đăng ký hook SessionStart; hai hook đáng kể nhất thì được phát hành kèm test và tài liệu thiết kế nhưng lại không được nối vào manifest, nên chúng là các script tùy chọn chứ không phải hành vi plugin đang hoạt động. Các tài liệu thiết kế nói vậy; riêng cây thư mục thì không.
Đặt cổng vào CI để kiểm chính nội dung của bạn, và unit-test cái cổng đó. Sáu validator với năm bản sinh đôi -test.js là phiên bản rẻ nhất của "thứ biết từ chối thì bản thân nó cũng được kiểm".
Hãy đo xem metadata trigger của bạn có định tuyến đúng không. Một tỷ lệ rank-1 với đường cơ sở được commit và một mức sàn chỉ được phép tăng sẽ biến "hãy viết mô tả cho tốt" từ một ghi chú về văn phong thành một bài kiểm thử hồi quy.
Hãy viết các case gây áp lực, không chỉ các case đường-thuận-lợi. Thất bại đáng quan tâm không phải là agent không biết quy tắc; mà là nó tìm ra một lý do để gạt quy tắc sang một bên.
Một sổ cái chỉ có hàng tiêu đề thì không phải một bản ghi. Hãy phát hành cấu trúc cho việc quản trị của chính bạn kèm luôn hàng đầu tiên, nếu không artefact sẽ đọc như thể đang được duy trì trong khi thực ra thì không.
Khoảng tám phút, chỉ đọc, qua gh api và raw.githubusercontent.com; toàn bộ cây 195 đường dẫn đã được liệt kê. Đã đọc trọn vẹn hoặc gần trọn vẹn: AGENTS.md, CLAUDE.md, workflow CI, hooks/hooks.json, hooks/session-start.sh, phần mở đầu của hooks/sdd-cache-pre.sh và hooks/simplify-ignore.sh, evals/README.md, evals/skill-impact.md (trọn vẹn), hai fixture áp lực, scripts/validate-skills.js (trọn vẹn), phần mở đầu của scripts/validate-commands.js, phần lớn skills/test-driven-development/SKILL.md, phần mở đầu của skills/interview-me/SKILL.md, .claude/rules/skills-contributing.md, cả hai manifest, và phần mở đầu của references/definition-of-done.md và README.md. scripts/lib/skill-lint.js đã được grep để lấy các hằng số quy tắc cùng mọi thông điệp lỗi và cảnh báo, nhưng logic so khớp của nó thì chưa được đọc.
Hoàn toàn không mở tới: 23 trong số 25 phần thân SKILL.md; scripts/run-evals.js, nên bộ khung xếp hạng và trình thực thi headless chỉ được biết qua evals/README.md và lời gọi trong CI — chưa kiểm chứng được rằng mã nguồn làm đúng những gì README nói; cả bốn persona agents/*.md; docs/skill-anatomy.md và 12 tài liệu khác; references/orchestration-patterns.md và năm checklist nữa; mọi phần thân command, nên tuyên bố của README rằng /build auto "pauses on failures or risky steps" là chưa được kiểm chứng; CONTRIBUTING.md, chỉ được biết qua ba tệp trích dẫn nó; .opencode/skills, một blob đơn lẻ, có lẽ là một symlink, chưa giải quyết được; hooks/sdd-cache-post.sh, ba bài test hook và cả hai tài liệu thiết kế hook. Lịch sử commit, trình theo dõi issue và trạng thái CI hiện tại trên main đều không được kiểm tra — nên "cổng có tồn tại và được nối vào push và pull request" là điều được chứng minh từ tệp workflow, còn "cổng đang xanh" thì không.
Thirteen instruction files about what good frontend design looks like, packaged as installable Agent Skills — so the delegation machinery is a thin frame around content that is not delegation discipline at all, but aesthetic judgement.
Flat in file count, large in prose. Thirteen skills, each exactly one skills/<folder>/SKILL.md, between 2.5 KB and 87 KB, some 330 KB of skill text in total; no skill has a subfolder, a references/ directory or a script of its own. Around them: skills/llms.txt (a thirteen-line index), .claude-plugin/{marketplace,plugin}.json, skill.sh (a bash name-to-path registry), CHANGELOG.md, a research/laziness/ corpus of ten Markdown files, four Node scripts, and about 1.3 MB of imagery. Conventions are consistent: uppercase SKILL.md, frontmatter with exactly two keys (name, description), and folder names deliberately distinct from install names — gpt-tasteskill/ installs as gpt-taste, taste-skill/ as design-taste-frontend.
Layer 2, and the shape of its absence. The will to gate is here; the executor is not. skills/taste-skill/SKILL.md §14 is a pre-flight check of about sixty boxes, headed "THIS IS NOT OPTIONAL. Run every box", and many are computable predicates: "EYEBROW COUNT (mechanical): count instances of uppercase tracking micro-labels … Count ≤ ceil(sectionCount / 3)?", "WCAG AA 4.5:1", "No window.addEventListener('scroll')". Each is grep-able; none is implemented anywhere in the tree — no CI, no hook, no test, no schema for the two-key frontmatter, no package.json. A specification for a gate, authored in executable language, then handed to the model's own honesty as the executor. To be precise about what is not claimed: the pre-flight ships to users as skill payload, so by our rule it is not this repository's own gate, and it never said it was.
Layer 3b, inverted. The stop-and-ask point is one line, §0.C: "If the brief is ambiguous, ask ONE question, do not guess … never a multi-question dump … If you can confidently infer from context, do not ask." A genuine human-stop, and the only one in roughly 330 KB of skill text — but written to rate-limit asking rather than guarantee it. Defensible for a design tool whose users want output; a real gap if the shape is copied where a wrong guess is expensive.
Where our reading differs from a looser one: layer 4 looks present if you count the shipped ritual, and it is a good one — stitch-skill requires a DESIGN.md spec written before any code, with a filled 12 KB exemplar so the format is copyable. But that is a record users keep about their work, not one this repository keeps about its own. CHANGELOG.md is retrospective, though unusually good at it: a v1→v2 diff with a reason per hardened rule.
A taste corpus stated as negative space. The largest thing shipped here fits none of the five layers. §9 "AI Tells (Forbidden Patterns)" enumerates forbidden outcomes with example strings: AI-purple gradients, Inter as the default typeface, three equal feature cards, "Jane Doe" and "Acme" placeholders, section-numbering eyebrows (00 / INDEX), decoration strips, scroll cues, version footers, a blanket em-dash ban. §10 is pure vocabulary — hero paradigms, sticky-stack, kinetic typography — with no procedure attached.
The five layers are about the discipline of delegation; this is the delegated judgement itself. Not a standing rule (the file's own preamble: "Every rule below is contextual. None of it fires automatically"), not a gate, not a ritual (no trigger, no ordered steps — a lookup list), not an index of artefacts. A sixth kind of thing, and its distinctive move is the blocklist form: naming what not to do is far more specific than naming what to do, and specificity is what survives a machine reading it.
The same rule deliberately duplicated per host. Layer 5 wants each thing to exist exactly once; this repository does the opposite on purpose. gpt-tasteskill re-cuts the rules for GPT/Codex, stitch-skill re-encodes them as a Google Stitch-compatible DESIGN.md, .github/copilot-instructions.md re-states five for Copilot, skills/llms.txt restates all thirteen, .claude-plugin/ packages the set for Claude Code. Each host loads instructions differently, so one canonical file would reach only one of them. The rubric has no slot for this, and the cost is unmanaged: nothing ties gpt-taste's rules back to taste-skill's when one changes, and the CHANGELOG's hardened bans are documented for taste-skill only.
One further fact, without judgement: all four executable files (scripts/*.mjs) process README banners, buttons and sponsor badges. The only automation here automates asset production; the skills have none.
Three disagreements, one substantial. §12 "The Block Library (Contract)" specifies skills/taste-skill/blocks/{hero,feature,social-proof,pricing,cta,footer,navigation,portfolio,transition}/, a required frontmatter schema, eight required body sections, and "Every block must pass the Pre-Flight Check". The tree contains no blocks/ path and not one block file (fetching skills/taste-skill/blocks/hero/README.md returns 404, checked 2026-09-03). The heading hedges — "Implementations Land Here Iteratively" — so this is a declared-but-unbuilt schema, not a false claim; it has zero instances and nothing that could check one.
Second: the README says "Numbers at the top of the file are 1-10 dials", inviting the reader to edit them, while the file says at line 51 "Do not ask the user to edit this file - overrides happen conversationally"; the dials also sit under §1, not at the top. Third: scripts/*.mjs all import sharp from "sharp", but there is no package.json and no lockfile, so the only executable code cannot run from a clean checkout.
Write the description as a trigger, including its exclusions. All thirteen do, several naming what they are not for — "Landing pages, portfolios, and redesigns. Not dashboards, not data tables." Cheapest layer-5 discipline there is, and it is the whole of what the load decision has to go on — see layer 3 for what that decision actually is.
Archive rather than delete, with a pinnable name.skills/taste-skill-v1/SKILL.md is kept verbatim beside v2 under its own install name design-taste-frontend-v1, and the CHANGELOG explains the fork. Anyone depending on the old behaviour can pin it.
If a check is written in mechanical language, wire it to a machine — or stop calling it mechanical. Sixty grep-able boxes with no CI is the most instructive failure shape in this study, and it is not this repository's alone.
Four hand-kept indexes agree today because someone keeps them agreeing. No generator, no checker — and not one date anywhere in the repository, so nothing tells a reader how old it is.
Roughly eight minutes, read-only, over the GitHub API and raw.githubusercontent.com. Read in full: the recursive tree with blob sizes; README.md to about line 220; both .claude-plugin/ manifests; .github/copilot-instructions.md; skill.sh; skills/llms.txt; four research/ files; skills/output-skill/SKILL.md; the heading outline of skills/taste-skill/SKILL.md plus §0.C, §1, §3.F, §12, §14; 45 lines of skills/stitch-skill/DESIGN.md; 60 lines of CHANGELOG.md.
Frontmatter only for the other twelve skills. Not read: the bodies of taste-skill-v1, gpt-tasteskill, image-to-code-skill, imagegen-frontend-web, imagegen-frontend-mobile, brandkit, redesign-skill, soft-skill, minimalist-skill, brutalist-skill — some 200 KB. A stop-and-ask point or a record-keeping step could be buried there and we would have missed it; the layer 3 and 4 verdicts rest on taste-skill, output-skill, stitch-skill and all thirteen descriptions. Also unread: CHANGELOG.md past line 60, six of the ten research/laziness files, three of the four scripts, and issues, pull requests and the external site (out of scope). We did not verify the installer specification the README claims compatibility with. The research/ corpus states findings about model behaviour whose sources are named in prose but never linked or dated; we verified none and do not repeat them here.
Taste Skill — eine Bibliothek von Design-Meinung, ausgeliefert in Gestalt von Skills#
Dreizehn Anweisungsdateien darüber, wie gutes Frontend-Design aussieht, verpackt als installierbare Agent Skills — die Delegations-Maschinerie ist damit ein dünner Rahmen um Inhalte, die überhaupt keine Delegations-Disziplin sind, sondern ästhetisches Urteil.
Flach in der Dateizahl, groß im Prosa-Umfang. Dreizehn Skills, jeder genau eine skills/<folder>/SKILL.md, zwischen 2,5 KB und 87 KB, zusammen rund 330 KB Skill-Text; kein Skill hat einen eigenen Unterordner, ein references/-Verzeichnis oder ein eigenes Skript. Darum herum: skills/llms.txt (ein dreizehnzeiliger Index), .claude-plugin/{marketplace,plugin}.json, skill.sh (eine Bash-Registry Name → Pfad), CHANGELOG.md, ein research/laziness/-Korpus aus zehn Markdown-Dateien, vier Node-Skripte und etwa 1,3 MB Bildmaterial. Die Konventionen sind konsistent: SKILL.md in Großbuchstaben, Frontmatter mit genau zwei Schlüsseln (name, description) und Ordnernamen, die bewusst von den Installationsnamen abweichen — gpt-tasteskill/ installiert als gpt-taste, taste-skill/ als design-taste-frontend.
Vier Indizes lösen auf; Archivieren statt Löschen ist echt
Schicht 2 und die Gestalt ihres Fehlens. Der Wille zu prüfen ist da, der Ausführende nicht. skills/taste-skill/SKILL.md §14 ist eine Pre-Flight-Prüfung aus rund sechzig Kästchen, überschrieben mit "THIS IS NOT OPTIONAL. Run every box", und viele sind berechenbare Prädikate: "EYEBROW COUNT (mechanical): count instances of uppercase tracking micro-labels … Count ≤ ceil(sectionCount / 3)?", "WCAG AA 4.5:1", "No window.addEventListener('scroll')". Jedes davon ist per grep prüfbar; keines ist im Baum implementiert — keine CI, kein Hook, kein Test, kein Schema für das zweischlüssige Frontmatter, keine package.json. Eine Spezifikation für ein Tor, in ausführbarer Sprache verfasst und dann der Selbstehrlichkeit des Modells als Ausführendem übergeben. Um genau zu sein, was hier nicht behauptet wird: Die Pre-Flight-Prüfung geht als Skill-Nutzlast an Anwender, ist nach unserer Regel also nicht das eigene Tor dieses Repositories — und es hat das auch nie behauptet.
Schicht 3b, umgedreht. Der Halte-und-frage-Punkt ist eine Zeile, §0.C: "If the brief is ambiguous, ask ONE question, do not guess … never a multi-question dump … If you can confidently infer from context, do not ask." Ein echter menschlicher Haltepunkt, und der einzige in rund 330 KB Skill-Text — aber geschrieben, um das Fragen zu begrenzen, nicht um es zu garantieren. Vertretbar für ein Design-Werkzeug, dessen Anwender Ergebnisse wollen; eine echte Lücke, sobald die Form dorthin kopiert wird, wo eine falsche Vermutung teuer ist.
Wo unsere Lesart von einer lockereren abweicht: Schicht 4 wirkt vorhanden, wenn man das ausgelieferte Ritual mitzählt — und es ist ein gutes: stitch-skill verlangt eine DESIGN.md-Spezifikation, geschrieben vor jedem Code, samt ausgefülltem 12-KB-Beispiel, damit das Format kopierbar ist. Das ist aber eine Aufzeichnung, die Anwender über ihre Arbeit führen, nicht das Repository über seine eigene. CHANGELOG.md ist rückblickend, allerdings ungewöhnlich gut darin: ein v1→v2-Diff mit einer Begründung je verschärfter Regel.
Ein Geschmackskorpus als Negativraum. Das größte hier ausgelieferte Stück passt in keine der fünf Schichten. §9 "AI Tells (Forbidden Patterns)" zählt verbotene Ergebnisse mit Beispielzeichenketten auf: KI-violette Verläufe, Inter als Standardschrift, drei gleich große Feature-Karten, "Jane Doe"- und "Acme"-Platzhalter, Abschnittsnummerierungs-Eyebrows (00 / INDEX), Dekorationsleisten, Scroll-Hinweise, Versionsfußzeilen, ein pauschales Gedankenstrich-Verbot. §10 ist reines Vokabular — Hero-Paradigmen, Sticky-Stack, kinetische Typografie — ohne angehängte Prozedur.
Die fünf Schichten handeln von der Disziplin des Delegierens; dies hier ist das delegierte Urteil selbst. Keine ständige Regel (das Vorwort der Datei selbst: "Every rule below is contextual. None of it fires automatically"), kein Tor, kein Ritual (kein Auslöser, keine geordneten Schritte — eine Nachschlageliste), kein Index von Artefakten. Eine sechste Art von Sache, und ihr charakteristischer Zug ist die Form der Sperrliste: zu benennen, was man nicht tun soll, ist weit spezifischer, als zu benennen, was man tun soll — und Spezifität übersteht das Gelesenwerden durch eine Maschine.
Dieselbe Regel absichtlich pro Host dupliziert. Schicht 5 will, dass jedes Ding genau einmal existiert; dieses Repository tut mit Absicht das Gegenteil. gpt-tasteskill schneidet die Regeln für GPT/Codex neu zu, stitch-skill kodiert sie als Google-Stitch-kompatible DESIGN.md, .github/copilot-instructions.md wiederholt fünf davon für Copilot, skills/llms.txt wiederholt alle dreizehn, .claude-plugin/ paketiert das Set für Claude Code. Jeder Host lädt Anweisungen anders, eine einzige kanonische Datei erreichte also nur einen davon. Die Rubrik hat dafür kein Fach, und die Kosten sind ungesteuert: nichts bindet die Regeln von gpt-taste an die von taste-skill, wenn eine sich ändert, und die verschärften Verbote des CHANGELOGs sind nur für taste-skill dokumentiert.
Eine weitere Tatsache, ohne Wertung: Alle vier ausführbaren Dateien (scripts/*.mjs) verarbeiten README-Banner, Buttons und Sponsoren-Badges. Die einzige Automatisierung hier automatisiert die Asset-Produktion; die Skills haben keine.
Drei Widersprüche, einer davon substanziell. §12 "The Block Library (Contract)" spezifiziert skills/taste-skill/blocks/{hero,feature,social-proof,pricing,cta,footer,navigation,portfolio,transition}/, ein verpflichtendes Frontmatter-Schema, acht verpflichtende Abschnitte im Rumpf sowie "Every block must pass the Pre-Flight Check". Der Baum enthält keinen blocks/-Pfad und keine einzige Block-Datei (ein Abruf von skills/taste-skill/blocks/hero/README.md liefert 404, geprüft am 2026-09-03). Die Überschrift schränkt selbst ein — "Implementations Land Here Iteratively" — es ist also ein erklärtes, aber nicht gebautes Schema, keine falsche Behauptung; es hat null Instanzen und nichts, das eine prüfen könnte.
Zweitens: Die README sagt "Numbers at the top of the file are 1-10 dials" und lädt zum Bearbeiten ein, während die Datei in Zeile 51 sagt "Do not ask the user to edit this file - overrides happen conversationally"; die Regler stehen zudem unter §1, nicht am Anfang. Drittens: scripts/*.mjs machen alle import sharp from "sharp", es gibt aber weder package.json noch Lockdatei — der einzige ausführbare Code kann aus einem frischen Checkout nicht laufen.
Schreibe die description als Auslöser, samt Ausschlüssen. Alle dreizehn tun das, mehrere benennen, wofür sie nicht da sind — "Landing pages, portfolios, and redesigns. Not dashboards, not data tables." Billigste Schicht-5-Disziplin, die es gibt, und sie ist alles, worauf sich die Ladeentscheidung stützen kann — was diese Entscheidung tatsächlich ist, steht in Schicht 3.
Archivieren statt löschen, mit anheftbarem Namen.skills/taste-skill-v1/SKILL.md steht wortgleich neben v2 unter dem eigenen Installationsnamen design-taste-frontend-v1, und das CHANGELOG erklärt die Abspaltung. Wer auf das alte Verhalten angewiesen ist, kann es festpinnen.
Wenn eine Prüfung in mechanischer Sprache geschrieben ist, hänge sie an eine Maschine — oder nenne sie nicht mehr mechanisch. Sechzig per grep prüfbare Kästchen ohne CI sind die lehrreichste Fehlerform dieser Studie, und sie gehört nicht diesem Repository allein.
Vier handgepflegte Indizes stimmen heute überein, weil jemand sie in Übereinstimmung hält. Kein Generator, kein Prüfer — und kein einziges Datum im Repository, nichts sagt einem Leser also, wie alt es ist.
Rund acht Minuten, ausschließlich lesend, über die GitHub-API und raw.githubusercontent.com. Vollständig gelesen: der rekursive Baum mit Blob-Größen; README.md bis etwa Zeile 220; beide .claude-plugin/-Manifeste; .github/copilot-instructions.md; skill.sh; skills/llms.txt; vier research/-Dateien; skills/output-skill/SKILL.md; die Überschriftengliederung von skills/taste-skill/SKILL.md samt §0.C, §1, §3.F, §12, §14; 45 Zeilen von skills/stitch-skill/DESIGN.md; 60 Zeilen von CHANGELOG.md.
Von den übrigen zwölf Skills nur das Frontmatter. Nicht gelesen: die Rümpfe von taste-skill-v1, gpt-tasteskill, image-to-code-skill, imagegen-frontend-web, imagegen-frontend-mobile, brandkit, redesign-skill, soft-skill, minimalist-skill, brutalist-skill — rund 200 KB. Ein Halte-und-frage-Punkt oder ein Aufzeichnungsschritt könnte dort verborgen sein und wäre uns entgangen; die Urteile zu Schicht 3 und 4 stützen sich auf taste-skill, output-skill, stitch-skill und alle dreizehn Beschreibungen. Ebenfalls ungelesen: CHANGELOG.md jenseits von Zeile 60, sechs der zehn research/laziness-Dateien, drei der vier Skripte sowie Issues, Merge Requests und die externe Website (außerhalb des Rahmens). Die Installer-Spezifikation, zu der die README Kompatibilität behauptet, haben wir nicht geprüft. Der research/-Korpus nennt Befunde zum Modellverhalten, deren Quellen in Prosa benannt, aber nie verlinkt oder datiert werden; wir haben keinen verifiziert und geben sie hier nicht wieder.
Taste Skill — một thư viện quan điểm thiết kế, phát hành dưới hình hài các skill#
Mười ba tệp chỉ dẫn về việc một thiết kế frontend tốt trông ra sao, được đóng gói thành các Agent Skill cài đặt được — nên bộ máy ủy thác chỉ là một cái khung mỏng bao quanh nội dung vốn hoàn toàn không phải kỷ luật ủy thác, mà là phán đoán thẩm mỹ.
Phẳng về số tệp, đồ sộ về văn xuôi. Mười ba skill, mỗi skill đúng một skills/<folder>/SKILL.md, kích thước từ 2.5 KB đến 87 KB, tổng cộng chừng 330 KB văn bản skill; không skill nào có thư mục con, thư mục references/ hay script riêng. Xung quanh chúng: skills/llms.txt (một chỉ mục mười ba dòng), .claude-plugin/{marketplace,plugin}.json, skill.sh (một sổ đăng ký tên-sang-đường-dẫn viết bằng bash), CHANGELOG.md, một kho research/laziness/ gồm mười tệp Markdown, bốn script Node, và khoảng 1.3 MB hình ảnh. Các quy ước thì nhất quán: SKILL.md viết hoa, frontmatter đúng hai khóa (name, description), và tên thư mục cố tình khác với tên cài đặt — gpt-tasteskill/ cài đặt thành gpt-taste, taste-skill/ thành design-taste-frontend.
Chỉ tồn tại một lần, như một trần giới hạn việc hỏi
4 · Bản ghi thành văn
· vắng mặt
CHANGELOG.md; không có hiến chương, kế hoạch hay bản ghi quyết định
Không có gì được viết ra trước công việc của chính nó
5a · Metadata trigger
● mang
frontmatter description trên cả 13 skill
Cả mười ba đều viết phần mô tả như một điều kiện nạp, kèm cả các trường hợp loại trừ
5b · Chỉ mục, ngày tháng, khử trùng lặp, lưu trữ
● mang
skills/llms.txt, skill.sh, các bảng trong README, skills/taste-skill-v1/
Bốn chỉ mục đều phân giải được; nguyên tắc lưu-trữ-chứ-không-xóa là có thật
Tầng 2, và hình dạng của sự vắng mặt ấy. Ý chí muốn đặt cổng thì có ở đây; thứ thực thi thì không. skills/taste-skill/SKILL.md §14 là một bản kiểm tra tiền-bay gồm khoảng sáu mươi ô, mang tiêu đề "THIS IS NOT OPTIONAL. Run every box", và nhiều ô trong đó là các vị từ tính toán được: "EYEBROW COUNT (mechanical): count instances of uppercase tracking micro-labels … Count ≤ ceil(sectionCount / 3)?", "WCAG AA 4.5:1", "No window.addEventListener('scroll')". Mỗi ô đều grep được; không ô nào được hiện thực hóa ở bất kỳ đâu trong cây thư mục — không CI, không hook, không test, không schema cho frontmatter hai khóa, không package.json. Một đặc tả cho một cái cổng, được soạn bằng ngôn ngữ thực thi được, rồi giao cho chính sự trung thực của mô hình làm trình thực thi. Nói cho chính xác về điều không được tuyên bố ở đây: bản kiểm tra tiền-bay được phát hành tới người dùng như phần tải trọng của skill, nên theo quy tắc của chúng tôi nó không phải cổng của chính repository này, và repository cũng chưa bao giờ nói nó là vậy.
Tầng 3b, bị đảo ngược. Điểm dừng-và-hỏi chỉ là một dòng, §0.C: "If the brief is ambiguous, ask ONE question, do not guess … never a multi-question dump … If you can confidently infer from context, do not ask." Một điểm dừng-hỏi-người thật sự, và là điểm duy nhất trong chừng 330 KB văn bản skill — nhưng được viết ra để giới hạn tần suất việc hỏi chứ không phải để bảo đảm nó xảy ra. Có thể biện hộ được với một công cụ thiết kế mà người dùng chỉ muốn có đầu ra; nhưng là một lỗ hổng thật sự nếu hình dạng đó bị sao chép sang nơi mà một phỏng đoán sai phải trả giá đắt.
Chỗ cách đọc của chúng tôi khác với một cách đọc lỏng hơn: tầng 4 trông như có mặt nếu bạn tính cả nghi thức được phát hành, và đó là một nghi thức tốt — stitch-skill đòi hỏi một đặc tả DESIGN.md được viết trước mọi dòng mã, kèm một mẫu 12 KB đã điền đầy để định dạng ấy sao chép được. Nhưng đó là bản ghi mà người dùng giữ về công việc của họ, không phải bản ghi mà repository này giữ về công việc của chính nó. CHANGELOG.md mang tính hồi cố, dù làm việc đó tốt một cách khác thường: một bản diff v1→v2 với một lý do cho mỗi quy tắc được siết chặt.
Một kho gu thẩm mỹ được phát biểu như khoảng âm. Thứ lớn nhất được phát hành ở đây không vừa với tầng nào trong năm tầng. §9 "AI Tells (Forbidden Patterns)" liệt kê các kết quả bị cấm kèm chuỗi ví dụ: gradient tím-kiểu-AI, Inter làm phông chữ mặc định, ba thẻ tính năng bằng nhau, placeholder "Jane Doe" và "Acme", các eyebrow đánh số mục (00 / INDEX), dải trang trí, gợi ý cuộn trang, footer ghi phiên bản, một lệnh cấm em-dash toàn diện. §10 thuần túy là từ vựng — hero paradigm, sticky-stack, kinetic typography — mà không đính kèm quy trình nào.
Năm tầng nói về kỷ luật của việc ủy thác; còn đây là chính phán đoán được ủy thác. Không phải một quy tắc thường trực (lời mở đầu của chính tệp đó: "Every rule below is contextual. None of it fires automatically"), không phải một cái cổng, không phải một nghi thức (không trigger, không các bước có thứ tự — chỉ là một danh sách tra cứu), không phải một chỉ mục artefact. Một loại thứ sáu, và nước đi đặc trưng của nó là dạng danh sách cấm: nêu tên điều không được làm thì cụ thể hơn nhiều so với nêu tên điều nên làm, và tính cụ thể mới là thứ sống sót khi một cỗ máy đọc nó.
Cùng một quy tắc bị nhân bản có chủ ý cho từng host. Tầng 5 muốn mỗi thứ chỉ tồn tại đúng một lần; repository này thì cố tình làm ngược lại. gpt-tasteskill cắt lại bộ quy tắc cho GPT/Codex, stitch-skill mã hóa lại chúng thành một DESIGN.md tương thích Google Stitch, .github/copilot-instructions.md phát biểu lại năm quy tắc cho Copilot, skills/llms.txt phát biểu lại cả mười ba, .claude-plugin/ đóng gói cả bộ cho Claude Code. Mỗi host nạp chỉ dẫn theo một cách khác nhau, nên một tệp chuẩn duy nhất sẽ chỉ tới được một trong số đó. Khung đánh giá không có ô nào cho chuyện này, và cái giá thì không được quản lý: không có gì buộc bộ quy tắc của gpt-taste trở lại với bộ của taste-skill khi một bên thay đổi, và các lệnh cấm được siết chặt trong CHANGELOG chỉ được ghi lại cho riêng taste-skill.
Một sự kiện nữa, không kèm phán xét: cả bốn tệp thực thi được (scripts/*.mjs) đều xử lý banner, nút bấm và huy hiệu nhà tài trợ trong README. Thứ tự động hóa duy nhất ở đây lại tự động hóa việc sản xuất tài nguyên hình ảnh; còn các skill thì chẳng có gì.
Ba chỗ bất đồng, một chỗ đáng kể. §12 "The Block Library (Contract)" đặc tả skills/taste-skill/blocks/{hero,feature,social-proof,pricing,cta,footer,navigation,portfolio,transition}/, một schema frontmatter bắt buộc, tám mục thân bài bắt buộc, và "Every block must pass the Pre-Flight Check". Cây thư mục không chứa đường dẫn blocks/ nào và không có lấy một tệp block nào (lấy skills/taste-skill/blocks/hero/README.md thì trả về 404, kiểm tra ngày 2026-09-03). Tiêu đề có rào đón — "Implementations Land Here Iteratively" — nên đây là một schema đã-khai-báo-nhưng-chưa-xây, không phải một tuyên bố sai; nó có số thực thể bằng không và cũng chẳng có gì có thể kiểm tra được một thực thể.
Thứ hai: README nói "Numbers at the top of the file are 1-10 dials", mời người đọc chỉnh sửa chúng, trong khi chính tệp đó ở dòng 51 lại nói "Do not ask the user to edit this file - overrides happen conversationally"; các núm chỉnh cũng nằm dưới §1, chứ không phải ở đầu tệp. Thứ ba: scripts/*.mjs đều import sharp from "sharp", nhưng không có package.json và không có lockfile, nên đoạn mã thực thi được duy nhất lại không chạy nổi từ một bản checkout sạch.
Hãy viết description như một trigger, kèm cả những trường hợp loại trừ. Cả mười ba skill đều làm vậy, vài skill còn nêu rõ chúng không dùng cho việc gì — "Landing pages, portfolios, and redesigns. Not dashboards, not data tables." Đây là kỷ luật tầng-5 rẻ nhất có thể có, và nó là toàn bộ những gì quyết định nạp có thể dựa vào — quyết định ấy thực chất là gì thì xem lớp 3.
Hãy lưu trữ thay vì xóa, với một cái tên ghim được.skills/taste-skill-v1/SKILL.md được giữ nguyên văn bên cạnh v2 dưới tên cài đặt riêng của nó là design-taste-frontend-v1, và CHANGELOG giải thích nhánh rẽ đó. Bất kỳ ai còn phụ thuộc vào hành vi cũ đều có thể ghim nó lại.
Nếu một kiểm tra được viết bằng ngôn ngữ cơ học, hãy nối nó vào một cỗ máy — hoặc đừng gọi nó là cơ học nữa. Sáu mươi ô grep được mà không có CI là hình dạng thất bại giàu tính chỉ dẫn nhất trong nghiên cứu này, và nó không phải là của riêng repository này.
Bốn chỉ mục giữ bằng tay hôm nay còn khớp nhau là vì có người giữ cho chúng khớp. Không trình sinh, không trình kiểm tra — và không có lấy một ngày tháng nào ở bất cứ đâu trong repository, nên chẳng có gì cho người đọc biết nó cũ đến mức nào.
Khoảng tám phút, chỉ đọc, qua GitHub API và raw.githubusercontent.com. Đã đọc trọn vẹn: cây thư mục đệ quy kèm kích thước blob; README.md đến khoảng dòng 220; cả hai manifest trong .claude-plugin/; .github/copilot-instructions.md; skill.sh; skills/llms.txt; bốn tệp research/; skills/output-skill/SKILL.md; dàn ý tiêu đề của skills/taste-skill/SKILL.md cộng §0.C, §1, §3.F, §12, §14; 45 dòng của skills/stitch-skill/DESIGN.md; 60 dòng của CHANGELOG.md.
Chỉ đọc frontmatter đối với mười hai skill còn lại. Chưa đọc: phần thân của taste-skill-v1, gpt-tasteskill, image-to-code-skill, imagegen-frontend-web, imagegen-frontend-mobile, brandkit, redesign-skill, soft-skill, minimalist-skill, brutalist-skill — chừng 200 KB. Một điểm dừng-và-hỏi hay một bước lưu hồ sơ có thể đang nằm chôn ở đó và chúng tôi đã bỏ sót; các phán quyết cho tầng 3 và tầng 4 dựa trên taste-skill, output-skill, stitch-skill và cả mười ba phần mô tả. Cũng chưa đọc: CHANGELOG.md từ sau dòng 60, sáu trong mười tệp research/laziness, ba trong bốn script, cùng các issue, pull request và trang web bên ngoài (ngoài phạm vi). Chúng tôi không kiểm chứng đặc tả trình cài đặt mà README tuyên bố là tương thích. Kho research/ nêu ra các phát hiện về hành vi của mô hình mà nguồn của chúng chỉ được nhắc tên trong văn xuôi chứ chưa bao giờ được liên kết hay ghi ngày; chúng tôi không kiểm chứng phát hiện nào và cũng không nhắc lại chúng ở đây.
A vendor-owned awesome-list whose README curates roughly 200 externally hosted skills, and which also carries two populations the README barely mentions: about thirty vendored copies of Anthropic's own skills, and 832 machine-generated <app>-automation skill files which, on the evidence of the six that were opened, route the agent to the vendor's own MCP endpoint.
1142 blobs, 2048 tree entries. The root holds README.md (40 KB, 503 lines), CONTRIBUTING.md, one CI workflow and about thirty skill directories.
composio-skills/ holds 832 generated directories, each containing exactly one SKILL.md of around 2.9 KB. Their byte sizes form a ladder driven only by the length of the app name — 2877 ably, 2892 adobe, 2907 accelo — which is what one template and a substitution looks like from the outside. A small tier is hand-enriched and larger (ahrefs 7859 B, apollo 7073 B). The second population is vendored: about thirty top-level directories copying Anthropic's own skills, each with an 11357-byte LICENSE.txt — document-skills/{docx,pptx,pdf,xlsx} carrying roughly 1.5 MB of OOXML schemas, canvas-design about forty fonts, plus skill-creator, mcp-builder, artifacts-builder, webapp-testing and others.
The file convention is uniform: <dir>/SKILL.md with YAML frontmatter carrying name and description; the generated tier adds a non-standard requires: mcp: [rube] field. There is no tests directory, no linter config, no schema for the frontmatter, no decisions tree.
Layer 2 is the surprise. The expectation going in was that a list-shaped repository would have no gate at all. .github/workflows/label-ready-skill.yml, read in full, runs an inline Node validator on every pull_request_target with seven distinct process.exit(1) paths — among them any changed file other than README.md, any byte changed outside the ## Skills … ## Getting Started window, a bullet not linking to an external https URL, and a bullet out of alphabetical order. Both required anchors verifiably exist, at README.md:107 and README.md:341, so this is live code and not a dead workflow. It refuses when nobody is looking, which is the whole test. Its limit is equally worth stating: the gate never opens a single SKILL.md. The 862 local skill directories are outside anything it sees.
Separately — a different finding, not the same one — the repository ships a real validator to its users. skill-creator/scripts/quick_validate.py, read in full, exits non-zero on a missing SKILL.md, malformed frontmatter, a missing name or description, or a name failing ^[a-z0-9-]+$. It is skill payload, not this repository's own gate, so it does not count toward layer 2. What it does do is measure the repository against itself: 28 of the 832 generated directories would fail it. Two carry a name beginning with a hyphen — -21risk-automation and -2chat-automation, both confirmed by reading the files — and 26 contain underscores. A gate exists and a standard exists; they were never pointed at each other.
Layer 5b holds most of the repository's substance, and it is measurably broken. Each of the 107 source paths in marketplace.json was resolution-tested against the tree, both repo-root-relative and composio-skills-relative: 28 resolve, 79 do not. All 833 entries under composio-skills/ — the 832 generated directories plus the registry file itself — appear in neither the marketplace file nor the README — grep -c 'composio-skills' README.md returns 0 — and the registry file itself lives insidecomposio-skills/ while indexing nothing in it. There are 26 exact duplicate pairs shipping one toolkit twice under underscore and hyphen spellings (anthropic-administrator-automation beside anthropic_administrator-automation; likewise all six zoho_*). No entry carries a version, a date or a last-checked field.
Our verdicts differ from the raw investigation record twice, both times from applying the rubric strictly. That record scored layer 5 "carries"; split, the metadata half carries and the index half mostly does not resolve, which is "touches". It scored layer 4 "touches" for CONTRIBUTING.md's pull-request guidelines, which ask a contributor to state up front what problem a skill solves — but that text lives in a pull-request body, is written with the work rather than before it, and nothing verifies it. On the strict temporal test, layer 4 is absent.
Adversarial submission triage. Two of the validator's seven rules are not quality checks at all. Rule 6 hard-fails any added line matching /\b(crypto|cryptocurrency|web3|blockchain|nft|defi|token(?:omics)?|wallet\b|solana|ethereum|bitcoin)\b/i — a keyword blocklist against promotional spam. Rule 5 fails any bullet whose host ends in the repository owner's own domain or the platform vendor's, so a curated list owned by a vendor bars that vendor from appearing in it. Rules 1 and 3 confine a contributor to one window of one file, so a submission physically cannot reach the 862 skill directories. This is a thought-through defence of a shared commons against people acting in bad faith, its own owner included, and the strongest example of that in the set. None of the five layers is about it: layer 2 covers "something that refuses", but the rubric's gate refuses incorrect work, while these rules refuse unwanted work from an untrusted population. Content policy, conflict-of-interest containment and blast-radius limiting are a governance discipline, not a correctness one.
A generated corpus with no generator. 832 of the 862 local skills are compiler output, not documents, and the generator is not in the repository: no source manifest, no catalogue snapshot, no regeneration command. The consequence is concrete — the 26 duplicate pairs are most plausibly build artefacts of an upstream catalogue holding both zoho_books and zoho-books slugs, and nobody can re-derive or diff the corpus to confirm it. Layer 5 asks whether things are findable and exist exactly once, presuming hand-authored artefacts whose duplication is an indexing failure. Here duplication is a build failure and the repair is upstream slug normalisation, not a better index. Provenance and reproducibility of generated agent instructions — what produced this file, from which revision, how do I rebuild it — is a discipline the five layers do not name. The same gap covers the vendored copies: licences are correctly propagated, but no directory records an upstream commit, a sync date or a fork rationale.
First, README.md:225-340, "App Automation via Composio", says "Pre-built workflow skills for 78 SaaS apps" and lists exactly 78 bullets with relative links — ./gmail-automation/, ./slack-automation/, ./jira-automation/. All 78 resolve to nothing. Every ./ link in the README (101 unique) was matched against the full tree; 78 fail, and they do not exist under composio-skills/ either. Re-checked 2026-09-03: …/tree/HEAD/gmail-automation returns 404.
Second, the 832 directories that do exist are mentioned zero times in the README. The largest asset is undocumented; the documented asset does not exist. Third, the banner claims "1000+ production ready and practical Claude Skills"; the tree holds roughly 862 local directories plus the external links, and "production ready" is not checkable for a tier that is one template with an app name substituted. Secondary drift: CONTRIBUTING.md defines five skill categories, the README ships eleven.
There is a sting in the first one. Rule 5 of the gate fails any added bullet whose URL is not absolute, and all 78 dead links are relative paths inside the window the validator polices — so a pull request repairing them would be hard-failed by CI. That is not a property of a layer but an interaction between two: a gate scoped to protect an index it cannot itself validate, thereby holding the index's broken state in place.
One thing is consistent, and it is precisely the part that is enforced: the workflow's required anchors exist and are correctly placed. Where a machine checks the README, the README is right.
Point the gate at the payload, not only at the index. The strongest layer-2 artefact in this study inspects one file and cannot see the other 1141. A gate's value is bounded by its scope, and that scope belongs in every description of it.
Run your own validator over your own corpus.quick_validate.py is good, and 28 of this repository's own skill directories would fail it. One CI loop over composio-skills/*/SKILL.md would have surfaced the two hyphen-leading names on the day they were generated.
An index needs a resolver check. 79 of 107 marketplace source paths and 78 of 78 README relative links are dead. Checking that a path in an index resolves to a path in the tree is a few lines of CI, and it is the difference between an index and a claim.
Build the stop-and-ask point into the artefact, not the contributor guide.CONTRIBUTING.md requirement 6 says "Confirm before destructive operations". The generated skill we read hands the agent a multi-tool execution call against live SaaS accounts with no confirmation step anywhere.
Roughly eight minutes, read-only, over the GitHub API and raw.githubusercontent.com. Read in full: the CI workflow; CONTRIBUTING.md; the complete 1142-blob path list; README.md headings plus lines 99-160 and 225-345; marketplace.json, with all 107 entries resolution-tested; skill-creator/scripts/quick_validate.py; and composio-skills/ably-automation/SKILL.md, the one generated skill whose body we read. Frontmatter only, five further generated skills: agentql-, -21risk-, -2chat-, anthropic-administrator- and anthropic_administrator-automation. Six of the 832 generated files were opened at all; exactly one of them was read whole.
Not examined, and we make no claim about their contents: the roughly thirty curated top-level SKILL.md bodies, so a stop-and-ask point or a record-keeping ritual could exist in one of those and we would have missed it; the other validator scripts under document-skills/ and slack-gif-creator/, cited in the raw record as tree paths only — we saw filenames, not code, so "exits non-zero" is unverified for them; connect-apps-plugin/; the shell scripts under artifacts-builder/scripts/; and 826 of the 832 generated SKILL.md files. The uniformity claim rests on one body, five frontmatters and the byte-size ladder visible in the tree listing, which is inference rather than reading, and the tree also shows a richer 6-8 KB tier we did not open.
We did not inspect git history, commit dates, branch protection, required-status-check configuration, or open issues and pull requests. So we cannot say whether the label-ready-skill workflow is advisory or wired to a protected branch — its success path adds a ready-to-merge label rather than blocking a merge — and we cannot say when the 78 links broke.
Awesome Claude Skills — eine kuratierte Liste, eine einkopierte Bibliothek und ein generiertes Korpus unter einer README#
Eine Awesome-Liste in Herstellerhand, deren README rund 200 extern gehostete Skills kuratiert — und die daneben zwei Bestände enthält, die die README kaum erwähnt: etwa dreißig einkopierte Kopien von Anthropics eigenen Skills und 832 maschinell generierte <app>-automation-Skill-Dateien, die nach Ausweis der sechs geöffneten den Agenten auf den MCP-Endpunkt des Herstellers leiten.
1.142 Blobs, 2.048 Baumeinträge. Im Wurzelverzeichnis liegen README.md (40 KB, 503 Zeilen), CONTRIBUTING.md, ein CI-Workflow und etwa dreißig Skill-Verzeichnisse.
composio-skills/ enthält 832 generierte Verzeichnisse mit jeweils genau einer SKILL.md von rund 2,9 KB. Ihre Byte-Größen bilden eine Leiter, die allein von der Länge des App-Namens getrieben wird — 2877 ably, 2892 adobe, 2907 accelo — und genau so sieht von außen eine Vorlage mit eingesetztem Namen aus. Eine kleine Schicht ist von Hand angereichert und größer (ahrefs 7859 B, apollo 7073 B). Der zweite Bestand ist einkopiert: etwa dreißig Verzeichnisse auf oberster Ebene, die Anthropics eigene Skills kopieren, jedes mit einer 11.357 Byte großen LICENSE.txt — document-skills/{docx,pptx,pdf,xlsx} mit rund 1,5 MB OOXML-Schemata, canvas-design mit etwa vierzig Schriften, dazu skill-creator, mcp-builder, artifacts-builder, webapp-testing und weitere.
Die Dateikonvention ist einheitlich: <dir>/SKILL.md mit YAML-Frontmatter aus name und description; die generierte Schicht ergänzt ein nicht standardisiertes Feld requires: mcp: [rube]. Es gibt kein Testverzeichnis, keine Linter-Konfiguration, kein Schema für das Frontmatter und keinen Entscheidungsbaum.
Aufwendige Indizes; 28 von 107 Quellpfaden lösen auf
Zwei Zeilen tragen diese Seite.
Schicht 2 ist die Überraschung. Die Erwartung war, dass ein listenförmiges Repository überhaupt kein Tor hat. .github/workflows/label-ready-skill.yml, vollständig gelesen, führt bei jedem pull_request_target einen eingebetteten Node-Validator mit sieben verschiedenen process.exit(1)-Pfaden aus — darunter jede geänderte Datei außer README.md, jedes außerhalb des Fensters ## Skills … ## Getting Started geänderte Byte, ein Punkt, der nicht auf eine externe https-URL verweist, und ein Punkt außerhalb der alphabetischen Reihenfolge. Beide geforderten Anker existieren nachweislich, bei README.md:107 und README.md:341 — es ist also aktiver Code und kein toter Workflow. Es verweigert auch dann, wenn niemand hinsieht, und genau das ist der Test. Ebenso erwähnenswert ist die Grenze: Das Tor öffnet nie eine einzige SKILL.md. Die 862 lokalen Skill-Verzeichnisse liegen außerhalb von allem, was es sieht.
Getrennt davon — ein anderer Befund, nicht derselbe — liefert das Repository seinen Nutzern einen echten Validator aus. skill-creator/scripts/quick_validate.py, vollständig gelesen, endet mit Fehlercode bei fehlender SKILL.md, defektem Frontmatter, fehlendem name oder description oder einem Namen, der ^[a-z0-9-]+$ nicht erfüllt. Er ist Skill-Nutzlast und nicht das eigene Tor dieses Repositories, zählt also nicht für Schicht 2. Was er sehr wohl tut: das Repository an sich selbst messen. 28 der 832 generierten Verzeichnisse würden durchfallen. Zwei tragen einen name, der mit einem Bindestrich beginnt — -21risk-automation und -2chat-automation, beide durch Lesen der Dateien bestätigt —, 26 enthalten Unterstriche. Ein Tor existiert und ein Standard existiert; sie wurden nie aufeinander gerichtet.
In Schicht 5b steckt die meiste Substanz des Repositories, und sie ist messbar kaputt. Jeder der 107 source-Pfade in marketplace.json wurde gegen den Baum aufgelöst, sowohl relativ zum Wurzelverzeichnis als auch relativ zu composio-skills: 28 lösen auf, 79 nicht. Alle 833 Einträge — die 832 generierten Verzeichnisse plus die Registry-Datei selbst — unter composio-skills/ tauchen weder in der Marketplace-Datei noch in der README auf — grep -c 'composio-skills' README.md liefert 0 — und die Registry-Datei selbst liegt innerhalb von composio-skills/, ohne irgendetwas darin zu indizieren. Es gibt 26 exakte Duplikatpaare, die dasselbe Toolkit zweimal ausliefern, einmal mit Unterstrich, einmal mit Bindestrich (anthropic-administrator-automation neben anthropic_administrator-automation; ebenso alle sechs zoho_*). Kein Eintrag trägt eine Version, ein Datum oder ein Zuletzt-geprüft-Feld.
Unsere Urteile weichen zweimal von der rohen Untersuchungsaufzeichnung ab, beide Male, weil das Raster streng angewendet wird. Jene Aufzeichnung bewertete Schicht 5 als „trägt"; aufgeteilt trägt die Metadaten-Hälfte, und die Index-Hälfte löst überwiegend nicht auf — also „streift". Schicht 4 bewertete sie als „streift", gestützt auf die Pull-Request-Richtlinien in CONTRIBUTING.md, die von Beitragenden verlangen, vorab zu benennen, welches Problem ein Skill löst. Dieser Text steht jedoch in einem Pull-Request-Rumpf, entsteht mit der Arbeit statt davor, und nichts prüft ihn nach. Nach dem strengen zeitlichen Test fehlt Schicht 4.
Triage feindseliger Einreichungen. Zwei der sieben Validator-Regeln sind überhaupt keine Qualitätsprüfungen. Regel 6 lässt jede hinzugefügte Zeile hart durchfallen, die auf /\b(crypto|cryptocurrency|web3|blockchain|nft|defi|token(?:omics)?|wallet\b|solana|ethereum|bitcoin)\b/i passt — eine Schlüsselwort-Sperrliste gegen Werbe-Spam. Regel 5 lässt jeden Listenpunkt durchfallen, dessen Host auf die eigene Domain des Repository-Eigentümers oder die des Plattformherstellers endet: Eine kuratierte Liste in Herstellerhand schließt diesen Hersteller also ausdrücklich aus. Die Regeln 1 und 3 beschränken Beitragende auf ein Fenster einer Datei, sodass eine Einreichung die 862 Skill-Verzeichnisse physisch nicht erreichen kann. Das ist eine durchdachte Verteidigung eines gemeinsamen Bestands gegen Akteure in böser Absicht, den eigenen Eigentümer eingeschlossen, und das stärkste Beispiel dafür im gesamten Feld. Keine der fünf Schichten handelt davon: Schicht 2 deckt „etwas, das verweigert" ab, aber das Tor des Rasters verweigert falsche Arbeit, während diese Regeln unerwünschte Arbeit aus einer nicht vertrauenswürdigen Menge verweigern. Inhaltsrichtlinie, Eindämmung von Interessenkonflikten und Begrenzung des Schadensradius sind eine Governance-Disziplin, keine Korrektheitsdisziplin.
Ein generiertes Korpus ohne Generator. 832 der 862 lokalen Skills sind Compiler-Ausgabe, keine Dokumente, und der Generator liegt nicht im Repository: kein Quell-Manifest, kein Katalog-Schnappschuss, kein Befehl zur Neuerzeugung. Die Folge ist konkret — die 26 Duplikatpaare sind höchstwahrscheinlich Build-Artefakte eines vorgelagerten Katalogs, der sowohl zoho_books als auch zoho-books als Slug führt, und niemand kann das Korpus neu ableiten oder vergleichen, um das zu bestätigen. Schicht 5 fragt, ob Dinge auffindbar sind und genau einmal existieren, und setzt handgeschriebene Artefakte voraus, deren Dopplung ein Indizierungsfehler ist. Hier ist die Dopplung ein Build-Fehler, und die Reparatur ist die Normalisierung der Slugs vorgelagert, kein besserer Index. Herkunft und Reproduzierbarkeit generierter Agenten-Anweisungen — was hat diese Datei erzeugt, aus welchem Stand, wie baue ich sie neu — ist eine Disziplin, die die fünf Schichten nicht benennen. Dieselbe Lücke gilt für die einkopierten Kopien: Lizenzen sind korrekt mitgeführt, aber kein Verzeichnis hält einen Upstream-Commit, ein Sync-Datum oder eine Begründung für den Fork fest.
Erstens: README.md:225-340, „App Automation via Composio", sagt „Pre-built workflow skills for 78 SaaS apps" und listet exakt 78 Punkte mit relativen Links — ./gmail-automation/, ./slack-automation/, ./jira-automation/. Alle 78 lösen ins Leere auf. Jeder ./-Link der README (101 eindeutige) wurde gegen den vollständigen Baum abgeglichen; 78 schlagen fehl, und sie existieren auch nicht unter composio-skills/. Am 2026-09-03 nachgeprüft: …/tree/HEAD/gmail-automation liefert 404.
Zweitens: Die 832 Verzeichnisse, die es gibt, werden in der README null Mal erwähnt. Der größte Bestand ist undokumentiert; der dokumentierte Bestand existiert nicht. Drittens behauptet das Banner „1000+ production ready and practical Claude Skills"; der Baum enthält rund 862 lokale Verzeichnisse plus die externen Links, und „production ready" ist für eine Schicht, die aus einer Vorlage mit eingesetztem App-Namen besteht, nicht überprüfbar. Nebenbei driftet die Kategorisierung: CONTRIBUTING.md definiert fünf Skill-Kategorien, die README führt elf.
Im ersten Punkt steckt eine Pointe. Regel 5 des Tors lässt jeden hinzugefügten Listenpunkt durchfallen, dessen URL nicht absolut ist, und alle 78 toten Links sind relative Pfade innerhalb des Fensters, das der Validator überwacht — ein Pull Request, der sie repariert, würde von der CI hart abgelehnt. Das ist keine Eigenschaft einer Schicht, sondern eine Wechselwirkung zwischen zweien: ein Tor, das einen Index schützen soll, den es selbst nicht validieren kann, und dessen kaputten Zustand damit festhält.
Eines ist konsistent, und zwar genau der Teil, der erzwungen wird: Die vom Workflow geforderten Anker existieren und stehen an der richtigen Stelle. Wo eine Maschine die README prüft, stimmt die README.
Richte das Tor auf die Nutzlast, nicht nur auf den Index. Das stärkste Schicht-2-Artefakt dieser Studie prüft eine Datei und kann die anderen 1141 nicht sehen. Der Wert eines Tors ist durch seinen Geltungsbereich begrenzt, und dieser Bereich gehört in jede Beschreibung davon.
Lass den eigenen Validator über das eigene Korpus laufen.quick_validate.py ist gut, und 28 der eigenen Skill-Verzeichnisse dieses Repositories würden durchfallen. Eine CI-Schleife über composio-skills/*/SKILL.md hätte die beiden mit Bindestrich beginnenden Namen am Tag ihrer Erzeugung sichtbar gemacht.
Ein Index braucht eine Auflösungsprüfung. 79 von 107 source-Pfaden im Marketplace und 78 von 78 relativen README-Links sind tot. Zu prüfen, ob ein Pfad im Index auf einen Pfad im Baum auflöst, sind ein paar Zeilen CI — und es ist der Unterschied zwischen einem Index und einer Behauptung.
Baue den Halte-und-frage-Punkt ins Artefakt, nicht in den Beitragsleitfaden.CONTRIBUTING.md Anforderung 6 sagt „Confirm before destructive operations". Der von uns gelesene generierte Skill übergibt dem Agenten einen Mehrfach-Werkzeugaufruf gegen produktive SaaS-Konten, ohne irgendeinen Bestätigungsschritt.
Rund acht Minuten, rein lesend, über die GitHub-API und raw.githubusercontent.com. Vollständig gelesen: der CI-Workflow; CONTRIBUTING.md; die vollständige Pfadliste aller 1.142 Blobs; die Überschriften der README.md sowie die Zeilen 99-160 und 225-345; marketplace.json, mit allen 107 Einträgen gegen den Baum aufgelöst; skill-creator/scripts/quick_validate.py; und composio-skills/ably-automation/SKILL.md, der einzige generierte Skill, dessen Rumpf wir gelesen haben. Nur das Frontmatter, bei fünf weiteren generierten Skills: agentql-, -21risk-, -2chat-, anthropic-administrator- und anthropic_administrator-automation. Sechs der 832 generierten Dateien wurden überhaupt geöffnet; genau eine davon wurde ganz gelesen.
Nicht geprüft, und wir behaupten nichts über deren Inhalt: die rund dreißig kuratierten SKILL.md-Rümpfe auf oberster Ebene — ein Halte-und-frage-Punkt oder ein Aufzeichnungs-Ritual könnte dort existieren und uns entgangen sein; die weiteren Validator-Skripte unter document-skills/ und slack-gif-creator/, die in der Rohaufzeichnung nur als Baumpfade zitiert sind — wir haben Dateinamen gesehen, keinen Code, „endet mit Fehlercode" ist für sie also ungeprüft; connect-apps-plugin/; die Shell-Skripte unter artifacts-builder/scripts/; und 826 der 832 generierten SKILL.md-Dateien. Die Behauptung der Gleichförmigkeit stützt sich auf einen Rumpf, fünf Frontmatter und die im Baumlisting sichtbare Byte-Größen-Leiter, was Schluss und nicht Lektüre ist; der Baum zeigt außerdem eine reichere Schicht von 6-8 KB, die wir nicht geöffnet haben.
Wir haben Git-Historie, Commit-Daten, Branch-Protection, die Konfiguration erforderlicher Status-Checks sowie offene Issues und Pull Requests nicht angesehen. Wir können daher nicht sagen, ob der Workflow label-ready-skill nur beratend ist oder an einen geschützten Branch gebunden — sein Erfolgspfad setzt ein Label ready-to-merge, statt einen Merge zu blockieren — und wir können nicht sagen, wann die 78 Links kaputtgegangen sind.
Awesome Claude Skills — một danh sách tuyển chọn, một thư viện vendored và một corpus sinh tự động dưới cùng một README#
Một awesome-list thuộc sở hữu của nhà cung cấp, mà README của nó tuyển chọn khoảng 200 skill được host bên ngoài, và đồng thời cũng chứa hai quần thể mà README hầu như không nhắc tới: khoảng ba mươi bản sao vendored các skill của chính Anthropic, và 832 file skill <app>-automation sinh tự động bằng máy mà, theo bằng chứng từ sáu file đã được mở, định tuyến agent tới chính MCP endpoint của nhà cung cấp.
1142 blob, 2048 mục cây thư mục. Thư mục gốc chứa README.md (40 KB, 503 dòng), CONTRIBUTING.md, một CI workflow và khoảng ba mươi thư mục skill.
composio-skills/ chứa 832 thư mục sinh tự động, mỗi thư mục có đúng một SKILL.md cỡ khoảng 2.9 KB. Kích thước byte của chúng tạo thành một cái thang chỉ bị chi phối bởi độ dài tên ứng dụng — 2877 ably, 2892 adobe, 2907 accelo — đó chính là hình dạng nhìn từ bên ngoài của một template cộng với một phép thế. Một tầng nhỏ được làm giàu bằng tay và lớn hơn (ahrefs 7859 B, apollo 7073 B). Quần thể thứ hai là vendored: khoảng ba mươi thư mục cấp cao nhất sao chép các skill của chính Anthropic, mỗi thư mục kèm một LICENSE.txt 11357 byte — document-skills/{docx,pptx,pdf,xlsx} mang theo khoảng 1.5 MB schema OOXML, canvas-design khoảng bốn mươi font, cộng thêm skill-creator, mcp-builder, artifacts-builder, webapp-testing và những cái khác.
Quy ước file là đồng nhất: <dir>/SKILL.md với YAML frontmatter mang name và description; tầng sinh tự động bổ sung một trường phi chuẩn requires: mcp: [rube]. Không có thư mục test, không có cấu hình linter, không có schema cho frontmatter, không có cây quyết định.
Các chỉ mục cầu kỳ; 28 trên 107 nguồn phân giải được
Hai hàng gánh cả trang này.
Lớp 2 là điều bất ngờ. Kỳ vọng ban đầu là một repository có hình dạng danh sách sẽ chẳng có cổng kiểm tra nào cả. .github/workflows/label-ready-skill.yml, đọc trọn vẹn, chạy một validator Node inline trên mọi pull_request_target với bảy nhánh process.exit(1) riêng biệt — trong đó có: bất kỳ file nào bị thay đổi ngoài README.md, bất kỳ byte nào bị thay đổi ngoài cửa sổ giữa ## Skills … ## Getting Started, một bullet không trỏ tới một URL https bên ngoài, và một bullet sai thứ tự bảng chữ cái. Cả hai anchor bắt buộc đều tồn tại có thể kiểm chứng, tại README.md:107 và README.md:341, nên đây là code sống chứ không phải một workflow chết. Nó từ chối ngay cả khi không ai nhìn, và đó chính là toàn bộ phép thử. Giới hạn của nó cũng đáng nêu ra không kém: cổng này không bao giờ mở lấy một SKILL.md nào. 862 thư mục skill cục bộ nằm ngoài mọi thứ nó nhìn thấy.
Tách bạch ra — đây là một phát hiện khác, không phải cùng một phát hiện — repository này có ship một validator thật cho người dùng của nó. skill-creator/scripts/quick_validate.py, đọc trọn vẹn, thoát khác 0 khi thiếu SKILL.md, frontmatter dị dạng, thiếu name hoặc description, hoặc một cái tên không khớp ^[a-z0-9-]+$. Nó là phần payload của skill, không phải cổng kiểm tra của chính repository này, nên nó không được tính vào lớp 2. Điều nó thật sự làm là đo repository này bằng chính nó: 28 trên 832 thư mục sinh tự động sẽ trượt validator đó. Hai thư mục mang name bắt đầu bằng dấu gạch nối — -21risk-automation và -2chat-automation, cả hai đều đã được xác nhận bằng cách đọc file — và 26 thư mục chứa dấu gạch dưới. Một cổng kiểm tra tồn tại và một chuẩn mực tồn tại; chúng chưa bao giờ được chĩa vào nhau.
Lớp 5b giữ phần lớn thực chất của repository, và nó hỏng một cách đo được. Mỗi đường dẫn trong số 107 source của marketplace.json đã được kiểm tra khả năng phân giải so với cây thư mục, cả theo kiểu tương đối với gốc repo lẫn tương đối với composio-skills: 28 phân giải được, 79 thì không. Toàn bộ 833 mục dưới composio-skills/ — 832 thư mục sinh tự động cộng với chính file registry — không xuất hiện trong file marketplace lẫn trong README — grep -c 'composio-skills' README.md trả về 0 — và bản thân file registry lại nằm bên trongcomposio-skills/ trong khi không lập chỉ mục bất cứ thứ gì trong đó. Có 26 cặp trùng lặp y hệt ship cùng một toolkit hai lần dưới cách viết gạch dưới và gạch nối (anthropic-administrator-automation bên cạnh anthropic_administrator-automation; tương tự cả sáu zoho_*). Không mục nào mang phiên bản, ngày tháng hay trường kiểm-tra-lần-cuối.
Phán quyết của chúng tôi khác với hồ sơ điều tra thô ở hai chỗ, cả hai đều do áp dụng rubric một cách nghiêm ngặt. Hồ sơ đó chấm lớp 5 là "có"; khi tách đôi, nửa metadata thì có còn nửa chỉ mục thì phần lớn không phân giải được, tức là "chạm tới". Nó chấm lớp 4 là "chạm tới" nhờ hướng dẫn pull-request của CONTRIBUTING.md, vốn yêu cầu người đóng góp nêu ngay từ đầu skill giải quyết vấn đề gì — nhưng đoạn văn đó nằm trong phần thân của một pull request, được viết cùng lúc với công việc chứ không phải trước nó, và không có gì kiểm chứng nó. Theo phép thử thời điểm nghiêm ngặt, lớp 4 vắng mặt.
Phân loại các submission đối kháng. Hai trong bảy quy tắc của validator hoàn toàn không phải là kiểm tra chất lượng. Quy tắc 6 fail cứng bất kỳ dòng thêm vào nào khớp /\b(crypto|cryptocurrency|web3|blockchain|nft|defi|token(?:omics)?|wallet\b|solana|ethereum|bitcoin)\b/i — một blocklist từ khóa chống spam quảng cáo. Quy tắc 5 fail bất kỳ bullet nào có host kết thúc bằng chính tên miền của chủ sở hữu repository hoặc của nhà cung cấp nền tảng, nên một danh sách tuyển chọn thuộc sở hữu của một nhà cung cấp lại cấm chính nhà cung cấp đó xuất hiện trong danh sách. Quy tắc 1 và 3 giam người đóng góp vào một cửa sổ của một file, nên một submission về mặt vật lý không thể chạm tới 862 thư mục skill. Đây là một sự phòng vệ được nghĩ thấu đáo cho một tài sản chung trước những người hành xử với ý đồ xấu, kể cả chính chủ sở hữu của nó, và là ví dụ mạnh nhất về điều đó trong cả nhóm. Không lớp nào trong năm lớp nói về nó: lớp 2 bao phủ "một thứ gì đó biết từ chối", nhưng cổng kiểm tra của rubric từ chối công việc sai, còn những quy tắc này từ chối công việc không mong muốn từ một quần thể không đáng tin. Chính sách nội dung, kiềm chế xung đột lợi ích và giới hạn bán kính thiệt hại là một kỷ luật quản trị, không phải một kỷ luật về tính đúng đắn.
Một corpus sinh tự động không có bộ sinh. 832 trên 862 skill cục bộ là đầu ra của trình biên dịch, không phải tài liệu, và bộ sinh không nằm trong repository: không có manifest nguồn, không có snapshot danh mục, không có lệnh tái sinh. Hệ quả rất cụ thể — 26 cặp trùng lặp nhiều khả năng nhất là artefact của quá trình build từ một danh mục thượng nguồn chứa cả slug zoho_books lẫn zoho-books, và không ai có thể tái tạo hay diff corpus để xác nhận điều đó. Lớp 5 hỏi liệu mọi thứ có tìm thấy được và có tồn tại đúng một lần không, với giả định các hiện vật được soạn bằng tay mà sự trùng lặp là một thất bại về lập chỉ mục. Ở đây trùng lặp là một thất bại về build và cách sửa nằm ở việc chuẩn hóa slug ở thượng nguồn, không phải một chỉ mục tốt hơn. Nguồn gốc và khả năng tái lập của các chỉ dẫn agent sinh tự động — cái gì tạo ra file này, từ revision nào, tôi rebuild nó thế nào — là một kỷ luật mà năm lớp không gọi tên. Cũng khoảng trống ấy bao phủ các bản sao vendored: giấy phép được truyền đi đúng cách, nhưng không thư mục nào ghi lại một commit thượng nguồn, một ngày đồng bộ hay một lý do fork.
Ba mâu thuẫn, mỗi cái đều được kiểm chứng bằng máy.
Thứ nhất, README.md:225-340, "App Automation via Composio", nói "Pre-built workflow skills for 78 SaaS apps" và liệt kê đúng 78 bullet với các link tương đối — ./gmail-automation/, ./slack-automation/, ./jira-automation/. Cả 78 đều phân giải về hư không. Mọi link ./ trong README (101 link duy nhất) đã được đối chiếu với toàn bộ cây thư mục; 78 link fail, và chúng cũng không tồn tại dưới composio-skills/. Kiểm tra lại ngày 2026-09-03: …/tree/HEAD/gmail-automation trả về 404.
Thứ hai, 832 thư mục thật sự tồn tại lại được nhắc tới không lần nào trong README. Tài sản lớn nhất thì không có tài liệu; tài sản có tài liệu thì không tồn tại. Thứ ba, banner tuyên bố "1000+ production ready and practical Claude Skills"; cây thư mục chứa khoảng 862 thư mục cục bộ cộng với các link bên ngoài, và "production ready" là điều không kiểm tra được với một tầng vốn chỉ là một template có thay tên ứng dụng vào. Sai lệch thứ cấp: CONTRIBUTING.md định nghĩa năm hạng mục skill, README ship mười một.
Có một cú chích trong mâu thuẫn thứ nhất. Quy tắc 5 của cổng kiểm tra fail bất kỳ bullet thêm vào nào có URL không tuyệt đối, và cả 78 link chết đều là đường dẫn tương đối nằm trong cửa sổ mà validator canh gác — nên một pull request sửa chúng sẽ bị CI fail cứng. Đó không phải là thuộc tính của một lớp mà là một tương tác giữa hai lớp: một cổng kiểm tra được giới hạn để bảo vệ một chỉ mục mà chính nó không thể kiểm chứng, qua đó giữ nguyên tình trạng hỏng của chỉ mục ấy.
Có một thứ nhất quán, và nó chính xác là phần được cưỡng chế: các anchor bắt buộc của workflow tồn tại và được đặt đúng chỗ. Ở đâu có máy kiểm tra README, ở đó README đúng.
Chĩa cổng kiểm tra vào payload, không chỉ vào chỉ mục. Hiện vật lớp-2 mạnh nhất trong nghiên cứu này kiểm tra một file và không thể nhìn thấy 1141 file còn lại. Giá trị của một cổng bị chặn bởi phạm vi của nó, và phạm vi ấy phải nằm trong mọi mô tả về nó.
Hãy chạy validator của chính bạn trên corpus của chính bạn.quick_validate.py là tốt, và 28 thư mục skill của chính repository này sẽ trượt nó. Một vòng lặp CI duy nhất trên composio-skills/*/SKILL.md hẳn đã phát hiện ra hai cái tên mở đầu bằng gạch nối ngay hôm chúng được sinh ra.
Một chỉ mục cần một phép kiểm tra phân giải. 79 trên 107 đường dẫn source của marketplace và 78 trên 78 link tương đối trong README đã chết. Kiểm tra rằng một đường dẫn trong chỉ mục phân giải được tới một đường dẫn trong cây thư mục chỉ tốn vài dòng CI, và đó là khác biệt giữa một chỉ mục và một lời tuyên bố.
Hãy xây điểm dừng-và-hỏi vào trong hiện vật, chứ không phải vào hướng dẫn đóng góp. Yêu cầu 6 của CONTRIBUTING.md nói "Confirm before destructive operations". Skill sinh tự động mà chúng tôi đọc lại trao cho agent một lời gọi thực thi đa công cụ nhắm vào các tài khoản SaaS đang chạy thật mà chẳng có bước xác nhận nào ở bất cứ đâu.
Khoảng tám phút, chỉ đọc, qua GitHub API và raw.githubusercontent.com. Đọc trọn vẹn: CI workflow; CONTRIBUTING.md; danh sách đường dẫn đầy đủ của 1142 blob; các heading của README.md cộng với các dòng 99-160 và 225-345; marketplace.json, với cả 107 mục được kiểm tra khả năng phân giải; skill-creator/scripts/quick_validate.py; và composio-skills/ably-automation/SKILL.md, skill sinh tự động duy nhất mà chúng tôi đọc phần thân. Chỉ đọc frontmatter, năm skill sinh tự động khác: agentql-, -21risk-, -2chat-, anthropic-administrator- và anthropic_administrator-automation. Chỉ sáu trong 832 file sinh tự động được mở ra; đúng một file trong số đó được đọc trọn vẹn.
Không được xem xét, và chúng tôi không đưa ra tuyên bố nào về nội dung của chúng: khoảng ba mươi phần thân SKILL.md cấp cao nhất được tuyển chọn, nên một điểm dừng-và-hỏi hay một nghi thức ghi chép có thể tồn tại trong một trong số đó mà chúng tôi đã bỏ sót; các script validator khác dưới document-skills/ và slack-gif-creator/, được trích trong hồ sơ thô chỉ như những đường dẫn cây — chúng tôi thấy tên file, không thấy code, nên "thoát khác 0" là chưa kiểm chứng đối với chúng; connect-apps-plugin/; các shell script dưới artifacts-builder/scripts/; và 826 trong 832 file SKILL.md sinh tự động. Tuyên bố về tính đồng nhất dựa trên một phần thân, năm frontmatter và cái thang kích thước byte nhìn thấy được trong danh sách cây thư mục, tức là suy luận chứ không phải đọc, và cây thư mục cũng cho thấy một tầng phong phú hơn cỡ 6-8 KB mà chúng tôi đã không mở.
Chúng tôi đã không xem xét lịch sử git, ngày commit, bảo vệ nhánh, cấu hình required-status-check, hay các issue và pull request đang mở. Nên chúng tôi không thể nói workflow label-ready-skill là mang tính tư vấn hay được nối vào một nhánh được bảo vệ — nhánh thành công của nó thêm một nhãn ready-to-merge chứ không chặn merge — và chúng tôi không thể nói 78 link đã chết từ khi nào.
A single output-style ruleset of 6,813 bytes — ten rules that force a coding agent to lead with the next action instead of burying it — packaged for nine agent runtimes, guarded by CI that actually refuses, and measured by a blinded A/B experiment whose published verdict is that the release gate failed.
The content is one file: skills/i-have-adhd/SKILL.md, ten numbered rules, 6,813 bytes. It exists twice — a byte-identical copy at .cursor/skills/i-have-adhd/SKILL.md, a real file rather than a symlink, because a symlink survives neither a Windows clone nor a GitHub ZIP download.
Everything else is scaffolding around that one file: nine-plus runtime packagings (.claude-plugin/, .codex-plugin/, .agents/plugins/, opencode.json + .opencode/, qwen-extension.json, kimi.plugin.json, gemini-extension.json + GEMINI.md, plugin.json, package.json); three parallel implementations of one SessionStart hook (hooks/always-on.mjs, .sh, .ps1) behind hooks/hooks.json; four GitHub workflows; five unittest files; four scripts (run_evals.py 17 KB, judge.py 13 KB, check_pi_extension.py 14.7 KB, check_context_compat.ts); and an evals/ directory with 14 cases, a rubric and a results document. Plus roughly 124 KB of localisation — six translated READMEs, five translated INSTALL guides, INSTALL.ja.md alone 31,355 bytes, larger than every source file combined.
Total 303 KB, 1,687 forks, last push 2026-09-01. The ratio is unusual: the thing being shipped is about 2 % of what is shipped.
Dedup enforced by byte comparison, dates present; no index and no archive, because there is one skill
The investigation recorded layer 5 as a whole as "carries". Under the split ruling it does not: 5b has the best dedup enforcement in this corpus and no index at all. Both halves of that sentence are true; separating them is the honest reading.
Layer 2 is where this repository is unlike most of the corpus.cursor-skill-sync.yml runs cmp on the two copies of SKILL.md and exits 1 with an ::error:: line carrying the exact cp command to fix it (read live, 2026-09-03). plugin-load-check.yml goes further: it npm-installs Claude Code, adds the checkout as a marketplace, installs the plugin into a scratch config directory, and fails unless grep -q "✔ enabled" finds it loaded — with a hook-parity matrix on ubuntu-latest and windows-latest. Its header comment says why the schema check was not enough: it catches "load-layer breakage that schema validation misses, e.g. the duplicate hooks declaration in #61". That is a gate written after a specific failure, which is how most good gates get written.
And yet the most consequential gate does not gate.CONTRIBUTING.md requires paired baseline/candidate evaluations and the release gate for behaviour changes; AGENTS.md lists four verification commands. No workflow runs any of them — the only test CI executes is python -m unittest tests.test_always_on_hooks -v, so four of the five test files never run there, and neither does check_context_compat.ts nor claude plugin validate. In scripts/run_evals.py the score branch prints the gate verdict as JSON and then returns 0 whatever it says; only validate returns 1. The gate is mandatory in prose and advisory in code. The repository says so itself: evals/RESULTS.md records "Release gate: FAILED" for the version that shipped, and explains why. That is candour, not concealment — and the pattern is worth naming precisely because a careful project fell into it.
It measures whether the instruction works.scripts/run_evals.py runs a baseline (the bare task prompt) against a candidate (the same prompt with the SKILL.md body injected) over 14 cases × 3 trials. scripts/judge.py grades each (case, trial) group in one call, blinded: conditions are relabelled A/B/C and the permutation comes from a sha256 digest of the group key, so a resumed run reproduces the labels it used the first time. Only the region of evals/rubric.md between <!-- judge:begin --> and <!-- judge:end --> reaches the grader, because the release-gate rules below that marker name the conditions and would leak the vocabulary the blinding exists to hide. The runners start with --setting-sources "" and --ignore-user-config --ephemeral for a stated reason: otherwise the repository's own always-on flag would inject the ruleset into the baseline and make the comparison measure the skill against itself.
evals/RESULTS.md then publishes the numbers including the losses (read live, 2026-09-03): weighted 4.045 → 4.473, a gain of +0.427; two regressions (partial-success −0.63, agent-owned-edit −0.33); a candidate mechanism named for one of them; one case declared unpassable by construction; and two limitations conceded in the author's own words — "Three trials is few" and "One judge model, judging its own family". Dated 2026-08-02, model pinned, runner CLI version named, cost recorded.
No layer has a place for this. All five are about the lifecycle of a rule — writing it, enforcing it, repeating it, recording intent around it, finding it again. None asks the prior question: does the rule do anything, measured against a control? Layer 2 is the nearest neighbour and does not fit. A gate refuses on structure or policy; this estimates an effect size, and pointedly refuses nothing.
It also regulates who wrote the diff.CONTRIBUTING.md requires every pull request to pick exactly one of Human-authored, Autonomous agent-authored or Hybrid, with the boundary drawn explicitly, and requires agent or hybrid PRs to disclose the tool, the model and version, what it did, what the human reviewed, and material limitations. The sharpest clause is an anti-laundering rule: "Do not call generated work human-authored or independently verified when it was only reviewed by the same agent that produced it." It is backed by an Author:Human|Hybrid|AI label group, four required checkboxes in the PR template, a "Final accountability" declaration, and a stated sanction. The five layers describe the work product and the process behind it; this describes the producer and who is answerable — a governance primitive the rubric has no slot for, in a repository whose contributor population is partly non-human.
Two further items fit no layer and are named here without elaboration: AGENTS.md defines an "AI Agora" speech protocol restricting where agents may comment, separating permission to speak from permission to act; and the cross-runtime portability work — nine loaders, three shell languages, two operating systems, four hand-synchronised re-implementations of the same frontmatter stripper — is by byte count the majority of the repository's non-translation substance.
The README is accurate: ten rules, numbered 1 to 10 in SKILL.md, and its link to the skill resolves. The disagreement is internal — between AGENTS.md / CONTRIBUTING.md and what CI actually executes. Both instances are described in the layer-2 section above.
Measure the instruction, then publish the losses. An A/B run with a fixed rubric, structural blinding and isolated runners is more work than writing the rule, and it is the only thing that separates a rule that works from a rule that reads well. Publishing the two regressions is what makes the +0.427 believable.
A gate in prose is not a gate.score returning 0 regardless of the verdict is a two-line defect in a well-built repository. If a check is meant to block, wire it to a non-zero exit and to a workflow — then check that CI runs more than one of your test files.
Duplicate deliberately, then enforce the duplication. The .cursor copy exists because symlinks do not survive ZIP downloads; cmp … || exit 1 makes the copy safe. Better than a symlink, and better than hope.
Auto-loading is not the only trigger discipline.disable-model-invocation: true, pinned by a test named test_skill_remains_explicitly_invoked, hands activation to the user — a slash command, or an opt-in file flag whose removal instructions the hook prints itself. For an output style that governs every response of a session, that is the right default.
Read in full: README.md, AGENTS.md, GEMINI.md, CONTRIBUTING.md, the PR template, skills/i-have-adhd/SKILL.md, all four workflows, hooks/hooks.json, hooks/always-on.sh, the three files in evals/ named above, and the four plugin/marketplace manifests plus .opencode/command/i-have-adhd.md.
Read only partially: scripts/run_evals.py (release-gate block and main() only), scripts/judge.py (searched for the blinding and permutation code only), evals/cases.jsonl (3 of 14 rows; the count of 14 was confirmed), tests/test_always_on_hooks.py and tests/test_omp_package.py (about 22 lines each), INSTALL.md (heading structure only).
Not opened at all: check_pi_extension.py, check_context_compat.ts, both TypeScript extensions, .opencode/plugins/i-have-adhd.mjs, the .mjs and .ps1 hooks, the four remaining test files and the opencode test driver, the two agent config files under skills/i-have-adhd/agents/, evals/runners.example.json, the six remaining runtime manifests, and all eleven translated documents.
The issues and pull-request API was not queried, so the "AI Agora" arrangement is reported only as AGENTS.md describes it: it was not verified that issue #127 exists, carries the label, or has agent comments. Commit history, releases and tags were not checked. Whether the .cursor mirror is currently in sync was not verified directly — the CI gate asserts it; only the two blob sizes were compared, both 6,813 bytes.
i-have-adhd — ein Regelwerk von 6,8 KB, und eine Messung, ob es wirkt#
Ein einziges Output-Style-Regelwerk von 6.813 Bytes — zehn Regeln, die einen Coding-Agenten zwingen, mit der nächsten Handlung zu beginnen statt sie zu vergraben — verpackt für neun Agenten-Laufzeitumgebungen, abgesichert durch eine CI, die tatsächlich verweigert, und vermessen durch ein verblindetes A/B-Experiment, dessen veröffentlichtes Urteil lautet: das Release-Gate ist durchgefallen.
Der Inhalt ist eine Datei: skills/i-have-adhd/SKILL.md, zehn nummerierte Regeln, 6.813 Bytes. Sie existiert zweimal — eine byte-identische Kopie unter .cursor/skills/i-have-adhd/SKILL.md, als echte Datei statt als Symlink, weil ein Symlink weder einen Windows-Clone noch einen GitHub-ZIP-Download übersteht.
Alles andere ist Gerüst um diese eine Datei: neun und mehr Laufzeit-Verpackungen (.claude-plugin/, .codex-plugin/, .agents/plugins/, opencode.json + .opencode/, qwen-extension.json, kimi.plugin.json, gemini-extension.json + GEMINI.md, plugin.json, package.json); drei parallele Implementierungen eines einzigen SessionStart-Hooks (hooks/always-on.mjs, .sh, .ps1) hinter hooks/hooks.json; vier GitHub-Workflows; fünf Unittest-Dateien; vier Skripte (run_evals.py 17 KB, judge.py 13 KB, check_pi_extension.py 14,7 KB, check_context_compat.ts); und ein Verzeichnis evals/ mit 14 Fällen, einer Rubrik und einem Ergebnisdokument. Dazu rund 124 KB Lokalisierung — sechs übersetzte READMEs, fünf übersetzte INSTALL-Anleitungen, INSTALL.ja.md allein 31.355 Bytes und damit größer als alle Quelldateien zusammen.
Insgesamt 303 KB, 1.687 Forks, letzter Push 2026-09-01. Das Verhältnis ist ungewöhnlich: das, was ausgeliefert wird, macht etwa 2 % dessen aus, was ausgeliefert wird.
Dedup per Byte-Vergleich erzwungen, Datumsangaben vorhanden; kein Index, kein Archiv, weil es nur einen Skill gibt
Die Untersuchung hatte Schicht 5 als Ganzes mit „trägt“ bewertet. Nach der aufgeteilten Bewertung gilt das nicht: 5b hat die beste Dedup-Absicherung dieses Korpus und überhaupt keinen Index. Beide Hälften dieses Satzes sind wahr; sie zu trennen ist die ehrliche Lesart.
Bei Schicht 2 unterscheidet sich dieses Repository vom größten Teil des Korpus.cursor-skill-sync.yml führt cmp über die beiden Kopien von SKILL.md aus und beendet sich mit 1, samt ::error::-Zeile mit dem exakten cp-Befehl zur Behebung (live gelesen am 2026-09-03). plugin-load-check.yml geht weiter: es installiert Claude Code per npm, fügt den Checkout als Marketplace hinzu, installiert das Plugin in ein separates Konfigurationsverzeichnis und schlägt fehl, wenn grep -q "✔ enabled" es nicht als geladen findet — dazu eine Hook-Paritätsmatrix auf ubuntu-latest und windows-latest. Der Kopfkommentar erklärt, warum die Schema-Prüfung nicht reichte: sie fange „load-layer breakage that schema validation misses, e.g. the duplicate hooks declaration in #61“. Das ist ein Gate, geschrieben nach einem konkreten Fehlschlag — so entstehen die meisten guten Gates.
Und doch verweigert ausgerechnet das folgenreichste Gate nichts.CONTRIBUTING.md verlangt bei Verhaltensänderungen gepaarte Baseline/Candidate-Auswertungen und die Anwendung des Release-Gates; AGENTS.md listet vier Verifikationsbefehle. Kein Workflow führt einen davon aus — der einzige Test, den die CI startet, ist python -m unittest tests.test_always_on_hooks -v, sodass vier der fünf Testdateien dort nie laufen, ebensowenig check_context_compat.ts oder claude plugin validate. In scripts/run_evals.py gibt der Zweig score das Gate-Urteil als JSON aus und liefert danach 0 zurück, gleich wie es lautet; nur validate liefert 1. Das Gate ist in der Prosa verpflichtend und im Code beratend. Das Repository sagt es selbst: evals/RESULTS.md hält „Release gate: FAILED“ für genau die ausgelieferte Version fest und begründet es. Das ist Offenheit, keine Verschleierung — und das Muster ist gerade deshalb benennenswert, weil ein sorgfältiges Projekt hineingeraten ist.
Es misst, ob die Anweisung wirkt.scripts/run_evals.py lässt eine Baseline (der nackte Aufgaben-Prompt) gegen einen Kandidaten (derselbe Prompt mit eingespeistem SKILL.md-Text) über 14 Fälle × 3 Durchläufe antreten. scripts/judge.py bewertet jede (case, trial)-Gruppe in einem Aufruf, verblindet: die Bedingungen werden zu A/B/C umbenannt, und die Permutation stammt aus einem sha256-Digest des Gruppenschlüssels — ein wiederaufgenommener Lauf reproduziert damit die Beschriftungen des ersten Laufs. Dem Bewerter wird nur der Bereich von evals/rubric.md zwischen <!-- judge:begin --> und <!-- judge:end --> gezeigt, weil die darunter stehenden Regeln des Release-Gates die Bedingungen beim Namen nennen und genau das Vokabular verraten würden, das die Verblindung verbergen soll. Die Runner starten mit --setting-sources "" und --ignore-user-config --ephemeral, aus einem genannten Grund: sonst würde das Always-on-Flag des Repositorys das Regelwerk in die Baseline einspeisen und der Vergleich würde den Skill gegen sich selbst messen.
evals/RESULTS.md veröffentlicht anschließend die Zahlen einschließlich der Verluste (live gelesen am 2026-09-03): gewichtet 4,045 → 4,473, ein Zuwachs von +0,427; zwei Verschlechterungen (partial-success −0,63, agent-owned-edit −0,33); für eine davon wird ein möglicher Mechanismus benannt; ein Fall wird als konstruktionsbedingt unbestehbar erklärt; und zwei Einschränkungen räumt der Autor in eigenen Worten ein — „Three trials is few“ und „One judge model, judging its own family“. Datiert auf 2026-08-02, Modell gepinnt, Version der Runner-CLI genannt, Kosten protokolliert.
Keine Schicht hat dafür einen Platz. Alle fünf handeln vom Lebenszyklus einer Regel — sie schreiben, durchsetzen, wiederholen, die Absicht dahinter festhalten, sie wiederfinden. Keine stellt die vorgelagerte Frage: bewirkt die Regel überhaupt etwas, gemessen gegen eine Kontrolle? Schicht 2 ist der nächste Nachbar und passt nicht. Ein Gate verweigert aufgrund von Struktur oder Richtlinie; hier wird eine Effektstärke geschätzt — und ausdrücklich nichts verweigert.
Es regelt außerdem, wer den Diff geschrieben hat.CONTRIBUTING.md verlangt für jeden Pull Request die Auswahl genau einer Kategorie — Human-authored, Autonomous agent-authored oder Hybrid — mit ausdrücklich gezogener Grenze, und verlangt bei Agenten- und Hybrid-PRs die Offenlegung von Werkzeug, Modell und Version, was es getan hat, was der Mensch geprüft hat und welche wesentlichen Einschränkungen bestehen. Die schärfste Klausel ist eine Anti-Waschregel: „Do not call generated work human-authored or independently verified when it was only reviewed by the same agent that produced it.“ Gestützt wird das durch eine Label-Gruppe Author:Human|Hybrid|AI, vier Pflicht-Checkboxen im PR-Template, einen Abschnitt „Final accountability“ und eine benannte Sanktion. Die fünf Schichten beschreiben das Arbeitsergebnis und den Prozess dahinter; dies beschreibt den Urheber und die Verantwortlichkeit — ein Governance-Element, für das die Rubrik keinen Platz hat, in einem Repository mit teils nicht-menschlicher Beitragenden-Population.
Zwei weitere Punkte passen in keine Schicht und seien ohne Ausführung genannt: AGENTS.md definiert ein Rede-Protokoll namens „AI Agora“, das einschränkt, wo Agenten kommentieren dürfen, und die Erlaubnis zu sprechen von der Erlaubnis zu handeln trennt; und die Portabilitätsarbeit über Laufzeitumgebungen hinweg — neun Loader, drei Shell-Sprachen, zwei Betriebssysteme, vier von Hand synchron gehaltene Neu-Implementierungen desselben Frontmatter-Strippers — ist nach Bytes der überwiegende Teil der nicht-übersetzten Substanz des Repositorys.
Die README ist korrekt: zehn Regeln, in SKILL.md von 1 bis 10 nummeriert, und ihr Link auf den Skill löst auf. Der Widerspruch ist ein interner — zwischen AGENTS.md / CONTRIBUTING.md und dem, was die CI tatsächlich ausführt. Beide Fälle sind oben im Abschnitt zu Schicht 2 beschrieben.
Miss die Anweisung, und veröffentliche die Verluste. Ein A/B-Lauf mit fixierter Rubrik, struktureller Verblindung und isolierten Runnern ist mehr Arbeit als das Schreiben der Regel — und er ist das Einzige, was eine Regel, die wirkt, von einer Regel trennt, die sich gut liest. Dass die beiden Verschlechterungen veröffentlicht werden, macht die +0,427 glaubwürdig.
Ein Gate in Prosa ist kein Gate. Dass score unabhängig vom Urteil 0 zurückgibt, ist ein Zweizeilen-Defekt in einem gut gebauten Repository. Soll eine Prüfung blockieren, muss sie an einen Exit-Code ungleich null und an einen Workflow gehängt sein — und man sollte nachsehen, ob die CI mehr als eine der eigenen Testdateien ausführt.
Dupliziere bewusst, und erzwinge dann die Duplikation. Die .cursor-Kopie existiert, weil Symlinks ZIP-Downloads nicht überstehen; cmp … || exit 1 macht die Kopie sicher. Besser als ein Symlink, und besser als Hoffnung.
Automatisches Laden ist nicht die einzige Auslöser-Disziplin.disable-model-invocation: true, festgenagelt durch einen Test namens test_skill_remains_explicitly_invoked, übergibt die Aktivierung an den Menschen — per Slash-Kommando oder per Opt-in-Datei-Flag, dessen Entfernungsanleitung der Hook selbst ausgibt. Für einen Output-Style, der jede Antwort einer Sitzung bestimmt, ist das die richtige Voreinstellung.
Vollständig gelesen: README.md, AGENTS.md, GEMINI.md, CONTRIBUTING.md, das PR-Template, skills/i-have-adhd/SKILL.md, alle vier Workflows, hooks/hooks.json, hooks/always-on.sh, die drei oben genannten Dateien in evals/ sowie die vier Plugin-/Marketplace-Manifeste und .opencode/command/i-have-adhd.md.
Nur teilweise gelesen: scripts/run_evals.py (nur Release-Gate-Block und main()), scripts/judge.py (nur nach dem Code für Verblindung und Permutation durchsucht), evals/cases.jsonl (3 von 14 Zeilen; die Zahl 14 wurde bestätigt), tests/test_always_on_hooks.py und tests/test_omp_package.py (je etwa 22 Zeilen), INSTALL.md (nur die Überschriftenstruktur).
Überhaupt nicht geöffnet: check_pi_extension.py, check_context_compat.ts, beide TypeScript-Extensions, .opencode/plugins/i-have-adhd.mjs, die .mjs- und .ps1-Hooks, die vier übrigen Testdateien und der opencode-Testtreiber, die beiden Agenten-Konfigurationsdateien unter skills/i-have-adhd/agents/, evals/runners.example.json, die sechs übrigen Laufzeit-Manifeste und alle elf übersetzten Dokumente.
Die API für Issues und Pull Requests wurde nicht abgefragt; die „AI Agora“-Regelung ist daher nur so berichtet, wie AGENTS.md sie beschreibt: es wurde nicht verifiziert, dass Issue #127 existiert, das Label trägt oder Agenten-Kommentare enthält. Commit-Historie, Releases und Tags wurden nicht geprüft. Ob der .cursor-Spiegel derzeit synchron ist, wurde nicht direkt verifiziert — das CI-Gate behauptet es; verglichen wurden nur die beiden Blob-Größen, beide 6.813 Bytes.
i-have-adhd — một bộ quy tắc 6.8 KB, và một phép đo xem nó có tác dụng hay không#
Một bộ quy tắc output-style duy nhất nặng 6,813 byte — mười quy tắc buộc một coding agent phải mở đầu bằng hành động kế tiếp thay vì chôn vùi nó — được đóng gói cho chín agent runtime, được canh gác bởi CI thật sự biết từ chối, và được đo bằng một thí nghiệm A/B mù mà phán quyết đã công bố là cổng phát hành đã trượt.
Nội dung chỉ là một file: skills/i-have-adhd/SKILL.md, mười quy tắc đánh số, 6,813 byte. Nó tồn tại hai lần — một bản sao giống hệt từng byte tại .cursor/skills/i-have-adhd/SKILL.md, là một file thật chứ không phải symlink, bởi vì symlink không sống sót qua một lần clone trên Windows lẫn một lần tải ZIP từ GitHub.
Mọi thứ còn lại là giàn giáo quanh cái file duy nhất đó: hơn chín cách đóng gói cho runtime (.claude-plugin/, .codex-plugin/, .agents/plugins/, opencode.json + .opencode/, qwen-extension.json, kimi.plugin.json, gemini-extension.json + GEMINI.md, plugin.json, package.json); ba hiện thực song song của cùng một hook SessionStart (hooks/always-on.mjs, .sh, .ps1) đằng sau hooks/hooks.json; bốn GitHub workflow; năm file unittest; bốn script (run_evals.py 17 KB, judge.py 13 KB, check_pi_extension.py 14.7 KB, check_context_compat.ts); và một thư mục evals/ với 14 case, một rubric và một tài liệu kết quả. Cộng thêm khoảng 124 KB bản địa hóa — sáu README được dịch, năm hướng dẫn INSTALL được dịch, riêng INSTALL.ja.md đã 31,355 byte, lớn hơn tất cả file nguồn cộng lại.
Tổng cộng 303 KB, 1,687 fork, lần push cuối 2026-09-01. Tỷ lệ này bất thường: thứ đang được ship chiếm khoảng 2 % những gì được ship.
Khử trùng lặp được cưỡng chế bằng so sánh byte, có ngày tháng; không có chỉ mục và không có lưu trữ, bởi vì chỉ có một skill
Cuộc điều tra đã ghi nhận lớp 5 như một khối là "có". Theo phán quyết tách đôi thì không: 5b có cơ chế cưỡng chế khử trùng lặp tốt nhất trong corpus này và hoàn toàn không có chỉ mục. Cả hai vế của câu đó đều đúng; tách chúng ra là cách đọc trung thực.
Lớp 2 là chỗ repository này khác với phần lớn corpus.cursor-skill-sync.yml chạy cmp trên hai bản sao của SKILL.md và thoát 1 kèm một dòng ::error:: mang chính xác lệnh cp để sửa (đọc trực tiếp, 2026-09-03). plugin-load-check.yml còn đi xa hơn: nó npm-install Claude Code, thêm bản checkout làm một marketplace, cài plugin vào một thư mục config tạm, và fail trừ khi grep -q "✔ enabled" tìm thấy nó đã được nạp — kèm một ma trận kiểm tra tương thích hook trên ubuntu-latest và windows-latest. Phần comment đầu file nói vì sao kiểm tra schema là chưa đủ: nó bắt được "load-layer breakage that schema validation misses, e.g. the duplicate hooks declaration in #61". Đó là một cổng kiểm tra được viết sau một thất bại cụ thể, và đó là cách phần lớn các cổng tốt ra đời.
Vậy mà cổng hệ trọng nhất lại không hề canh cổng.CONTRIBUTING.md yêu cầu các đánh giá baseline/candidate theo cặp và cổng phát hành cho mọi thay đổi hành vi; AGENTS.md liệt kê bốn lệnh kiểm chứng. Không workflow nào chạy bất kỳ lệnh nào trong số đó — bài test duy nhất CI thực thi là python -m unittest tests.test_always_on_hooks -v, nên bốn trong năm file test không bao giờ chạy ở đó, và check_context_compat.ts lẫn claude plugin validate cũng vậy. Trong scripts/run_evals.py, nhánh score in phán quyết của cổng ra dạng JSON rồi trả về 0 bất kể nó nói gì; chỉ có validate mới trả về 1. Cổng này là bắt buộc trong văn xuôi và chỉ mang tính tư vấn trong code. Chính repository tự nói ra điều đó: evals/RESULTS.md ghi "Release gate: FAILED" cho phiên bản đã ship, và giải thích vì sao. Đó là sự thẳng thắn, không phải che giấu — và khuôn mẫu này đáng được gọi tên chính bởi vì một dự án cẩn thận đã rơi vào nó.
Nó đo xem chỉ dẫn có tác dụng hay không.scripts/run_evals.py chạy một baseline (chỉ có prompt tác vụ trần) đối chọi với một candidate (cùng prompt đó nhưng có chèn phần thân SKILL.md) trên 14 case × 3 lượt. scripts/judge.py chấm mỗi nhóm (case, trial) trong một lời gọi, theo cách mù: các điều kiện được gán nhãn lại thành A/B/C và hoán vị đến từ một digest sha256 của khóa nhóm, nên một lần chạy được nối tiếp sẽ tái tạo đúng những nhãn nó đã dùng lần đầu. Chỉ vùng của evals/rubric.md nằm giữa <!-- judge:begin --> và <!-- judge:end --> mới đến được người chấm, bởi vì các quy tắc cổng phát hành nằm dưới mốc đó gọi tên các điều kiện và sẽ làm rò rỉ đúng thứ từ vựng mà việc làm mù sinh ra để che giấu. Các runner khởi động với --setting-sources "" và --ignore-user-config --ephemeral vì một lý do được nêu rõ: nếu không, cờ always-on của chính repository sẽ chèn bộ quy tắc vào baseline và khiến phép so sánh trở thành đo skill với chính nó.
evals/RESULTS.md sau đó công bố các con số bao gồm cả những lần thua (đọc trực tiếp, 2026-09-03): trọng số 4.045 → 4.473, tăng +0.427; hai lần thoái lui (partial-success −0.63, agent-owned-edit −0.33); một cơ chế ứng viên được nêu tên cho một trong hai; một case được tuyên bố là không thể vượt qua ngay từ cách dựng nó; và hai giới hạn được thừa nhận bằng chính lời tác giả — "Three trials is few" và "One judge model, judging its own family". Đề ngày 2026-08-02, model được ghim, phiên bản CLI của runner được nêu tên, chi phí được ghi lại.
Không lớp nào có chỗ cho việc này. Cả năm lớp đều nói về vòng đời của một quy tắc — viết nó, cưỡng chế nó, lặp lại nó, ghi lại ý định xung quanh nó, tìm lại nó. Không lớp nào hỏi câu hỏi có trước: liệu quy tắc đó có làm được gì không, đo so với một nhóm đối chứng? Lớp 2 là hàng xóm gần nhất và vẫn không khớp. Một cổng kiểm tra từ chối dựa trên cấu trúc hoặc chính sách; cái này ước lượng một cỡ hiệu ứng, và dứt khoát chẳng từ chối gì cả.
Nó cũng điều tiết việc ai đã viết ra cái diff.CONTRIBUTING.md yêu cầu mọi pull request phải chọn đúng một trong ba: Human-authored, Autonomous agent-authored hoặc Hybrid, với ranh giới được vạch ra tường minh, và yêu cầu các PR do agent hoặc hybrid tạo ra phải khai báo công cụ, model và phiên bản, nó đã làm gì, con người đã rà soát những gì, và các giới hạn đáng kể. Điều khoản sắc bén nhất là một quy tắc chống rửa nguồn: "Do not call generated work human-authored or independently verified when it was only reviewed by the same agent that produced it." Nó được hậu thuẫn bởi một nhóm nhãn Author:Human|Hybrid|AI, bốn checkbox bắt buộc trong template PR, một tuyên bố "Final accountability", và một chế tài được nêu rõ. Năm lớp mô tả sản phẩm công việc và quy trình đằng sau nó; cái này mô tả người tạo ra và ai phải chịu trách nhiệm — một nguyên thể quản trị mà rubric không có ô nào để đặt, trong một repository mà quần thể người đóng góp một phần không phải là con người.
Hai mục nữa không khớp lớp nào và được nêu tên ở đây mà không diễn giải thêm: AGENTS.md định nghĩa một giao thức phát ngôn "AI Agora" hạn chế nơi các agent được phép bình luận, tách quyền được nói khỏi quyền được hành động; và phần việc về tính khả chuyển liên-runtime — chín loader, ba ngôn ngữ shell, hai hệ điều hành, bốn bản tái hiện thực đồng bộ bằng tay của cùng một bộ tách frontmatter — tính theo số byte là phần lớn thực chất phi-bản-dịch của repository.
README thì chính xác: mười quy tắc, đánh số 1 đến 10 trong SKILL.md, và link của nó tới skill phân giải được. Mâu thuẫn nằm ở bên trong — giữa AGENTS.md / CONTRIBUTING.md và những gì CI thực sự thực thi. Cả hai trường hợp đều đã được mô tả trong phần lớp 2 ở trên.
Hãy đo chỉ dẫn, rồi công bố cả những lần thua. Một lần chạy A/B với rubric cố định, làm mù về mặt cấu trúc và các runner được cách ly thì tốn công hơn viết ra quy tắc, và nó là thứ duy nhất phân biệt một quy tắc có tác dụng với một quy tắc đọc nghe hay. Việc công bố hai lần thoái lui chính là thứ khiến +0.427 trở nên đáng tin.
Một cổng kiểm tra bằng văn xuôi thì không phải là một cổng. Việc score trả về 0 bất kể phán quyết là một khiếm khuyết hai dòng trong một repository được dựng tốt. Nếu một phép kiểm tra có ý định chặn, hãy nối nó với một mã thoát khác 0 và với một workflow — rồi kiểm tra rằng CI chạy nhiều hơn một trong các file test của bạn.
Hãy trùng lặp có chủ ý, rồi cưỡng chế sự trùng lặp đó. Bản sao .cursor tồn tại bởi vì symlink không sống sót qua các lần tải ZIP; cmp … || exit 1 khiến bản sao đó an toàn. Tốt hơn một symlink, và tốt hơn việc chỉ biết hy vọng.
Tự động nạp không phải là kỷ luật kích hoạt duy nhất.disable-model-invocation: true, được ghim bởi một bài test tên là test_skill_remains_explicitly_invoked, trao quyền kích hoạt cho người dùng — một slash command, hoặc một cờ file opt-in mà chính hook sẽ in ra hướng dẫn gỡ bỏ. Với một output style chi phối mọi phản hồi của một phiên làm việc, đó là mặc định đúng.
Đọc trọn vẹn: README.md, AGENTS.md, GEMINI.md, CONTRIBUTING.md, template PR, skills/i-have-adhd/SKILL.md, cả bốn workflow, hooks/hooks.json, hooks/always-on.sh, ba file trong evals/ đã nêu tên ở trên, và bốn manifest plugin/marketplace cộng với .opencode/command/i-have-adhd.md.
Chỉ đọc một phần: scripts/run_evals.py (chỉ khối cổng phát hành và main()), scripts/judge.py (chỉ tìm phần code làm mù và hoán vị), evals/cases.jsonl (3 trong 14 dòng; con số 14 đã được xác nhận), tests/test_always_on_hooks.py và tests/test_omp_package.py (mỗi file khoảng 22 dòng), INSTALL.md (chỉ cấu trúc heading).
Hoàn toàn không mở ra: check_pi_extension.py, check_context_compat.ts, cả hai extension TypeScript, .opencode/plugins/i-have-adhd.mjs, các hook .mjs và .ps1, bốn file test còn lại và trình chạy test opencode, hai file cấu hình agent dưới skills/i-have-adhd/agents/, evals/runners.example.json, sáu manifest runtime còn lại, và toàn bộ mười một tài liệu được dịch.
API issue và pull request đã không được truy vấn, nên bố trí "AI Agora" chỉ được tường thuật đúng như AGENTS.md mô tả: chưa kiểm chứng được rằng issue #127 có tồn tại, có mang nhãn đó, hay có bình luận của agent hay không. Lịch sử commit, các bản phát hành và tag đã không được kiểm tra. Việc bản sao .cursor hiện có đồng bộ hay không cũng chưa được kiểm chứng trực tiếp — cổng CI khẳng định điều đó; chỉ có kích thước hai blob là được so sánh, cả hai đều 6,813 byte.