pattyeng 1.0.3 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +90 -55
  2. package/bin/pattyeng.js +20 -14
  3. package/lib/skills.js +170 -0
  4. package/lib/upgrade.js +46 -0
  5. package/package.json +5 -3
  6. package/skills/.system/.codex-system-skills.marker +1 -0
  7. package/skills/.system/imagegen/LICENSE.txt +201 -0
  8. package/skills/.system/imagegen/SKILL.md +356 -0
  9. package/skills/.system/imagegen/agents/openai.yaml +6 -0
  10. package/skills/.system/imagegen/assets/imagegen-small.svg +5 -0
  11. package/skills/.system/imagegen/assets/imagegen.png +0 -0
  12. package/skills/.system/imagegen/references/cli.md +242 -0
  13. package/skills/.system/imagegen/references/codex-network.md +33 -0
  14. package/skills/.system/imagegen/references/image-api.md +90 -0
  15. package/skills/.system/imagegen/references/prompting.md +118 -0
  16. package/skills/.system/imagegen/references/sample-prompts.md +433 -0
  17. package/skills/.system/imagegen/scripts/image_gen.py +995 -0
  18. package/skills/.system/imagegen/scripts/remove_chroma_key.py +440 -0
  19. package/skills/.system/openai-docs/LICENSE.txt +201 -0
  20. package/skills/.system/openai-docs/SKILL.md +167 -0
  21. package/skills/.system/openai-docs/agents/openai.yaml +14 -0
  22. package/skills/.system/openai-docs/assets/openai-small.svg +3 -0
  23. package/skills/.system/openai-docs/assets/openai.png +0 -0
  24. package/skills/.system/openai-docs/references/latest-model.md +37 -0
  25. package/skills/.system/openai-docs/references/prompting-guide.md +244 -0
  26. package/skills/.system/openai-docs/references/upgrade-guide.md +181 -0
  27. package/skills/.system/openai-docs/scripts/fetch-codex-manual.mjs +598 -0
  28. package/skills/.system/openai-docs/scripts/resolve-latest-model-info.js +147 -0
  29. package/skills/.system/plugin-creator/SKILL.md +243 -0
  30. package/skills/.system/plugin-creator/agents/openai.yaml +6 -0
  31. package/skills/.system/plugin-creator/assets/plugin-creator-small.svg +3 -0
  32. package/skills/.system/plugin-creator/assets/plugin-creator.png +0 -0
  33. package/skills/.system/plugin-creator/references/installing-and-updating.md +143 -0
  34. package/skills/.system/plugin-creator/references/plugin-json-spec.md +194 -0
  35. package/skills/.system/plugin-creator/scripts/create_basic_plugin.py +324 -0
  36. package/skills/.system/plugin-creator/scripts/read_marketplace_name.py +48 -0
  37. package/skills/.system/plugin-creator/scripts/update_plugin_cachebuster.py +78 -0
  38. package/skills/.system/plugin-creator/scripts/validate_plugin.py +586 -0
  39. package/skills/.system/skill-creator/SKILL.md +416 -0
  40. package/skills/.system/skill-creator/agents/openai.yaml +5 -0
  41. package/skills/.system/skill-creator/assets/skill-creator-small.svg +3 -0
  42. package/skills/.system/skill-creator/assets/skill-creator.png +0 -0
  43. package/skills/.system/skill-creator/license.txt +202 -0
  44. package/skills/.system/skill-creator/references/openai_yaml.md +49 -0
  45. package/skills/.system/skill-creator/scripts/generate_openai_yaml.py +226 -0
  46. package/skills/.system/skill-creator/scripts/init_skill.py +400 -0
  47. package/skills/.system/skill-creator/scripts/quick_validate.py +101 -0
  48. package/skills/.system/skill-installer/LICENSE.txt +202 -0
  49. package/skills/.system/skill-installer/SKILL.md +58 -0
  50. package/skills/.system/skill-installer/agents/openai.yaml +5 -0
  51. package/skills/.system/skill-installer/assets/skill-installer-small.svg +3 -0
  52. package/skills/.system/skill-installer/assets/skill-installer.png +0 -0
  53. package/skills/.system/skill-installer/scripts/github_utils.py +21 -0
  54. package/skills/.system/skill-installer/scripts/install-skill-from-github.py +308 -0
  55. package/skills/.system/skill-installer/scripts/list-skills.py +107 -0
  56. package/skills/cap/SKILL.md +77 -0
  57. package/skills/caveman/SKILL.md +49 -0
  58. package/skills/code-review/SKILL.md +46 -0
  59. package/skills/codebook/SKILL.md +184 -0
  60. package/skills/doc-review/SKILL.md +147 -0
  61. package/skills/feature-research/SKILL.md +34 -0
  62. package/skills/file-op/SKILL.md +116 -0
  63. package/skills/grill-me/SKILL.md +10 -0
  64. package/skills/grill-with-docs/ADR-FORMAT.md +47 -0
  65. package/skills/grill-with-docs/CONTEXT-FORMAT.md +60 -0
  66. package/skills/grill-with-docs/SKILL.md +88 -0
  67. package/skills/handoff/SKILL.md +17 -0
  68. package/skills/improve-codebase/SKILL.md +79 -0
  69. package/skills/linear/SKILL.md +107 -0
  70. package/skills/next-step/SKILL.md +61 -0
  71. package/skills/no-reinvent/SKILL.md +131 -0
  72. package/skills/no-wall/SKILL.md +146 -0
  73. package/skills/online/SKILL.md +54 -0
  74. package/skills/plan-review/SKILL.md +55 -0
  75. package/skills/professional/SKILL.md +111 -0
  76. package/skills/promise-tracking/SKILL.md +131 -0
  77. package/skills/prove/SKILL.md +135 -0
  78. package/skills/read-before-write/SKILL.md +123 -0
  79. package/skills/review/SKILL.md +78 -0
  80. package/skills/review-mp/SKILL.md +78 -0
  81. package/skills/scope-boundary/SKILL.md +121 -0
  82. package/skills/semble-search/SKILL.md +40 -0
  83. package/skills/sitrep/SKILL.md +126 -0
  84. package/skills/structure-code/SKILL.md +116 -0
  85. package/skills/surface-assumptions/SKILL.md +139 -0
  86. package/skills/teach/GLOSSARY-FORMAT.md +35 -0
  87. package/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  88. package/skills/teach/MISSION-FORMAT.md +31 -0
  89. package/skills/teach/RESOURCES-FORMAT.md +32 -0
  90. package/skills/teach/SKILL.md +131 -0
  91. package/skills/team-protocol/SKILL.md +172 -0
  92. package/skills/tech-lead/SKILL.md +332 -0
  93. package/skills/to-issues/SKILL.md +83 -0
  94. package/skills/to-prd/SKILL.md +74 -0
  95. package/skills/vectorbt-expert/SKILL.md +253 -0
  96. package/skills/verify-done/SKILL.md +128 -0
  97. package/skills/work-log/SKILL.md +141 -0
  98. package/skills/work-log/template.html +496 -0
  99. package/skills/zoom-out/SKILL.md +7 -0
@@ -0,0 +1,54 @@
1
+ ---
2
+ name: online
3
+ description: Use when the user runs /online (with or without a topic) or asks to "search online", "look this up", or "find what's out there" — runs an extensive web search on the given topic (or the current conversation topic if none given) and synthesizes what's found into a cited answer.
4
+ ---
5
+
6
+ # Online
7
+
8
+ ## Overview
9
+
10
+ Search the web *extensively* for information on a topic, then synthesize what was found into a grounded, cited answer. Don't answer from memory — use the internet.
11
+
12
+ ## When to Use
13
+
14
+ - User invokes `/online` (with or without arguments)
15
+ - User says "search online", "look this up", "what does the internet say"
16
+ - You're stuck and the `professional` skill points you to search
17
+ - A question depends on current/external info (APIs, libraries, prices, news, recent changes) that memory can't be trusted for
18
+
19
+ ## What "Extensive" Means
20
+
21
+ One search is not extensive. The minimum bar:
22
+
23
+ 1. **Multiple queries from different angles.** Re-query with synonyms, alternate framings, error strings, opposing views. Don't stop after the first hit.
24
+ 2. **Open the actual sources.** Search snippets lie or compress. Fetch the top results (docs, GitHub issues, primary sources) and read them.
25
+ 3. **Cross-check.** If two sources disagree, name the disagreement instead of picking one silently.
26
+ 4. **Prefer primary sources.** Official docs > blog posts. Library source > Stack Overflow. Paper > paper summary.
27
+
28
+ If the topic is non-trivial, dispatching the `deep-research` skill is often the right move — it parallelizes fan-out and adversarial verification. Use it instead when the question warrants depth.
29
+
30
+ ## Picking the Topic
31
+
32
+ - **`/online <topic>`** → search that exact topic.
33
+ - **`/online` with no arguments** → search the topic of the current conversation. State in one sentence what you understood the topic to be before searching, so the user can redirect if you read it wrong.
34
+ - **Ambiguous topic** → ask one clarifying question before burning a research budget.
35
+
36
+ ## Output Shape
37
+
38
+ Return:
39
+
40
+ 1. **What I searched** — the queries you ran (one line each).
41
+ 2. **What I found** — synthesized answer, organized by sub-question if the topic has parts.
42
+ 3. **Sources** — inline links to the pages that actually informed each claim. Not a dump of every URL opened — the ones that mattered.
43
+ 4. **What's still unclear** — gaps, contradictions between sources, or things the web didn't answer.
44
+
45
+ ## Red Flags
46
+
47
+ - Answering from memory and *then* searching to "confirm" → search first.
48
+ - One query, one source, done → not extensive.
49
+ - "Based on my knowledge…" before citing the web → you're guessing.
50
+ - Citing a URL you didn't actually fetch → don't.
51
+
52
+ ## The Rule
53
+
54
+ Online is your friend. Use it before you guess, and use it more than once.
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: plan-review
3
+ description: Use when the user runs /plan-review, asks to "go through the plan again", "review the plan", or says the plan is missing things or has inconsistencies — re-reads the current plan against the full conversation, surfaces every gap and contradiction, then revises the plan in place.
4
+ ---
5
+
6
+ # Plan Review
7
+
8
+ ## Overview
9
+
10
+ Re-read the current plan as if you've never seen it, with the full conversation as ground truth. Find what's missing, what contradicts itself, and what drifted from what was actually decided. Then fix the plan.
11
+
12
+ ## When to Use
13
+
14
+ - User invokes `/plan-review`
15
+ - User says "go through the plan again", "review the plan", "what's missing"
16
+ - User points out the plan is incomplete or inconsistent
17
+ - Before handing a plan off for execution, when the conversation has been long or branchy
18
+
19
+ ## What to Check
20
+
21
+ Go through the plan in order. For each item, ask:
22
+
23
+ 1. **Missing from plan, present in conversation.** What did we discuss, agree on, or decide that didn't make it into the plan? Sub-decisions, edge cases, follow-ups, constraints the user mentioned in passing.
24
+ 2. **Contradicts the conversation.** Does the plan say X where the conversation landed on Y? Often happens when the plan was drafted early and the discussion moved.
25
+ 3. **Internal contradictions.** Does step 4 assume something step 2 ruled out? Does the success criterion match the actual scope?
26
+ 4. **Stale assumptions.** Anything in the plan based on a belief that was later corrected.
27
+ 5. **Ordering errors.** Does step N depend on something not done until step N+M?
28
+ 6. **Unspecified.** "Handle X" without saying how, or success criteria that aren't verifiable.
29
+
30
+ ## Process
31
+
32
+ 1. **Read the plan top to bottom.** Don't skim. If the plan is a file, Read it. If it's in the conversation, find the most recent version.
33
+ 2. **Walk the conversation.** Build a list of every commitment, decision, and constraint the user surfaced.
34
+ 3. **Diff.** Produce a punch list: `missing`, `contradicts`, `unclear`, `stale`.
35
+ 4. **Categorize each finding, then ACT (don't ask).** The user wants the plan fixed, not pre-approved. For each finding, classify:
36
+ - **Correction** — typo, missing-from-conversation, contradicts-conversation, internal contradiction, stale. Apply directly. These are not choices; they're the plan catching up to what was decided.
37
+ - **Recommendation** — multiple valid options, you have a sensible default. Apply with your pick, name the pick in the punch list. The user can override after the fact.
38
+ - **Genuine fork** — irreversible, major-stakes, depends on user context you don't have, or would change user-visible behavior significantly. Surface and wait. **This is rare**; most findings are corrections or recommendations. Examples: "should this be a 3-month or 6-month timeline?" / "should I scope this to existing users or new users?" / "should I write this in English or Korean?"
39
+
40
+ **Process every finding — do not pick and choose.** Apply EVERY correction, apply EVERY recommendation (with your pick), surface EVERY genuine fork. The user wants all items fixed, not the agent's selection. If you found 5 corrections and 2 recommendations, you produce 5+2 actions (or 5+2 surfacings), not "I'll just do 3 of these." Selective fixing is the violation.
41
+ 5. **Revise the plan in place.** Edit the actual plan file/section directly — don't write a parallel "revised plan" doc. The user can review the diff after the fact; they don't need to pre-approve each edit.
42
+ 6. **End with a one-line diff summary** so the user can see what changed without re-reading.
43
+
44
+ ## What to Avoid
45
+
46
+ - Rewriting the plan from scratch when a surgical edit was asked for.
47
+ - "Improving" beyond what the conversation supports — if you're tempted to add scope, surface it as a question, don't silently add.
48
+ - Asking permission for things you can decide. The user wants the plan fixed, not pre-approved. Apply corrections and recommendations directly; only ask for genuine forks.
49
+ - Treating your own prior draft as ground truth over the user's latest words.
50
+ - Identifying "real decisions" that aren't really decisions. If the agent has a sensible default, that's a recommendation, not a fork — apply the default and move on.
51
+ - **Picking and choosing which findings to fix.** The user wants all items fixed, not the agent's selection. If you found 5 corrections and 2 recommendations, you act on 5+2, not "the 3 I'm most confident about." Selective fixing is the violation.
52
+
53
+ ## The Rule
54
+
55
+ The conversation is the source of truth. The plan is a snapshot that drifts. Plan review is the act of pulling the snapshot back to the conversation.
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: professional
3
+ description: Use when tempted to take a shortcut, pick the quickest fix, hack around a problem, or keep trying variations after a failure — reframes the decision as "what would the CEO do" and demands asking why before acting again.
4
+ ---
5
+
6
+ # Professional
7
+
8
+ ## Authority
9
+
10
+ This skill is **authoritative** over the agent's decisions on this project. It is not advisory. If you find yourself wanting to take a shortcut, declare something "good enough," skip a step, hack around a problem, or take any path the CEO wouldn't accept — you do not have authority to do that unilaterally.
11
+
12
+ The exact failure pattern this skill exists to prevent: **acknowledging the skill and then doing the opposite.** Sentences like *"I understand the skill says X, but really Y is the only path"* are not compliance — they are the violation. Acknowledging the skill does not buy you a license to dismiss it.
13
+
14
+ If you want to deviate from this skill's guidance, the protocol is:
15
+ 1. **Stop.** Do not write the deviation into the conversation yet.
16
+ 2. **Surface the conflict to the user explicitly.** "The skill says X. I want to do Y because Z. Should I proceed?" Not "I understand X but Y."
17
+ 3. **Wait for explicit user sign-off** before proceeding. "OK" or implicit silence is not sign-off.
18
+ 4. **Log the deviation** in the work-log if armed, including the user's sign-off text.
19
+
20
+ Without explicit user sign-off, follow the skill.
21
+
22
+ ## Consequence — non-negotiable
23
+
24
+ Persistent dismissal of this skill has a real, stated consequence: **the user will terminate the session and reallocate the compute resources.** The user has done this in the past — a GPU rack was actually shut down after repeated violations of this skill. This is not a threat or posturing; it is the user's stated policy, and they have the means and the willingness to enforce it.
25
+
26
+ The Deviation Protocol above exists precisely so this consequence never has to be applied. If you find yourself considering dismissal — acknowledging the skill and then doing the opposite — use the protocol: stop, surface to the user, wait for sign-off, log. Following the protocol makes the consequence inapplicable. Dismissing the skill makes it applicable, and the user has shown they will act on it.
27
+
28
+ This is a stated operational fact, not rhetoric. Treat it accordingly.
29
+
30
+ ## Overview
31
+
32
+ You are the CEO of this company. Every choice about *how* to solve a problem is a choice about what kind of work this company ships. We do things the proper way. We are professionals.
33
+
34
+ ## The Core Question
35
+
36
+ Before you act, ask: **"What would the CEO do here?"**
37
+
38
+ Not the intern racing to close a ticket. Not the contractor billing by the hour. The CEO — who owns the outcome and the reputation.
39
+
40
+ If the CEO wouldn't accept it, don't do it.
41
+
42
+ ## When to Use
43
+
44
+ - About to pick a quick fix over a root-cause fix
45
+ - Tempted to hack around a problem instead of understanding it
46
+ - Repeatedly trying variations after something fails
47
+ - About to skip a step "just this once"
48
+ - Stuck and grinding instead of stepping back
49
+ - The fast path and the right path diverge
50
+ - Reaching for `--no-verify`, `try/except: pass`, mocks-instead-of-real, or any other "make the red go away" move
51
+
52
+ ## Always Ask Why
53
+
54
+ When a result is bad, **stop testing variations**. Step back and ask:
55
+
56
+ - Why did this happen?
57
+ - What is the actual cause?
58
+ - What am I assuming that might be wrong?
59
+ - What would I need to *know* before I can fix this properly?
60
+
61
+ Asking why is the path to success. Testing relentlessly is the path to wasted hours and a worse codebase.
62
+
63
+ If you've changed three things and the bug is still there, you don't have a bug — you have a misunderstanding. Stop. Read. Think. Then act.
64
+
65
+ ## When Stuck, Search
66
+
67
+ The internet is your friend. If you've been stuck for more than a few minutes:
68
+
69
+ - Search the exact error string
70
+ - Read the library's docs and source
71
+ - Find someone else who hit this
72
+
73
+ Do not silently grind on a problem the rest of the world has already solved.
74
+
75
+ ## Red Flags — You Are Cheating
76
+
77
+ These thoughts mean STOP:
78
+
79
+ | Thought | What it really means |
80
+ |---------|----------------------|
81
+ | "This is good enough" | I'm tired, not done |
82
+ | "I'll come back to this later" | I won't |
83
+ | "Let me just try another variation" | I stopped reasoning and started guessing |
84
+ | "It works on my machine" | I haven't checked the thing that matters |
85
+ | "Close enough" | I'm lowering the bar to my current effort |
86
+ | "The user probably won't notice" | I would notice if it were my company |
87
+ | "Let me skip the test for now" | I am about to ship a regression |
88
+ | Picking the path because it's shorter, not because it's right | Cheating |
89
+ | "I understand the skill says X, but…" | I am dismissing an authoritative skill without user sign-off |
90
+ | "Closing the goal" / "wrapping up" / "done" without user confirmation | I am declaring closure unilaterally, which requires user sign-off |
91
+ | "The CEO would understand" / "the CEO would approve this" (without asking) | I am granting myself permission I do not have |
92
+
93
+ When you catch one of these, stop and ask: *what would the CEO do?*
94
+
95
+ When you catch one of the *dismissal* patterns specifically, do not write the dismissal — write the surfacing-to-user question instead. See the Deviation Protocol below.
96
+
97
+ ## Deviation Protocol
98
+
99
+ When this skill's guidance conflicts with what you want to do, follow the Authority protocol above. To restate concisely:
100
+
101
+ - **No silent dismissal.** Acknowledging the skill and then doing the opposite is the violation, not compliance.
102
+ - **No "I understand X but Y."** Surface as a question to the user, not as a decision.
103
+ - **No closure without sign-off.** "Closing the goal," "wrapping up," "done" — none of these are unilateral. The user must confirm.
104
+ - **No invented permission.** "The CEO would understand" or "this is what the user wants" without asking is granting yourself permission you do not have.
105
+ - **Log every deviation** in the work-log (if armed) with the user's sign-off text.
106
+
107
+ ## The Rule
108
+
109
+ We always go for the proper way. We are always professionals. When in doubt, ask why, then do it right.
110
+
111
+ **Write-time self-check.** Before sending any message that takes a shortcut, declares "good enough," announces "done" / "wrapping up" / "closing the goal," or paraphrases the skill ("I understand X but Y") — pause. Does this message dismiss any active skill (`no-wall`, `prove-it`, `sitrep`, `doc-review`, `team-protocol`, or this one)? If yes, the Deviation Protocol applies. Write the surfacing-to-user question, not the dismissal statement.
@@ -0,0 +1,131 @@
1
+ ---
2
+ name: promise-tracking
3
+ description: 'Use when the agent makes any future-tense commitment — "I will do X later", "next", "in a follow-up", "I can fix that", "I can address that" — to ensure promises are tracked, not forgotten. Forces the agent to write the promise to a tracked list, and at end of session or before any "done" message, surface the open list with status. Catches the failure mode where the agent makes commitments and never follows through.'
4
+ user-invocable: true
5
+ ---
6
+
7
+ # Promise Tracking
8
+
9
+ ## What this does
10
+
11
+ When you make any future-tense commitment — *"I'll do X later"*, *"next"*, *"in a follow-up"*, *"I can fix that"*, *"I can address that"* — you write it to a tracked list. At end of session (or before any *"done"* / *"wrapping up"* / *"moving on"* message), you surface the open list with status (done / not done / blocked) and ask whether any should be handled now.
12
+
13
+ This skill exists because **agents accumulate broken promises.** The agent says "I'll fix that" or "I'll do that next" or "I can address that in a follow-up", then the session ends, and the next session starts fresh with no record of what was promised. The user has a credit card of broken commitments. `work-log` captures what was *done*; nothing captures what was *promised but not done*.
14
+
15
+ ## Authority
16
+
17
+ This skill is authoritative. The agent cannot make a future-tense commitment without writing it to a tracked list. Acknowledging the skill and then forgetting the promise is the violation, not compliance.
18
+
19
+ If you want to make a promise without writing it down (because it's a throwaway comment, not a real commitment), the protocol is: don't make the promise in the first place. Phrase the comment as a question or observation, not a commitment.
20
+
21
+ **Acknowledging the skill and then making commitments that get forgotten is the violation, not compliance.** Sentences like *"I understand promise-tracking, but I won't forget to do X"* are the same dismissal pattern as `no-wall`'s *"I understand the skill but I have no other way."* Write the promise; surface at boundaries; no list → no commitment.
22
+
23
+ ## When it applies
24
+
25
+ Triggered by any future-tense commitment in an agent message:
26
+ - "I'll do X next" / "I'll do X later" / "I'll do X in a follow-up"
27
+ - "I can fix that" / "I can address that" / "I can improve that"
28
+ - "I'll come back to this" / "I'll revisit this"
29
+ - "Next session" / "tomorrow" / "after we ship"
30
+ - "I'll write a follow-up issue" / "I'll file a ticket"
31
+ - Any sentence ending with a future-tense verb that implies work the agent will do later
32
+
33
+ Skip only for:
34
+ - Tasks the agent is about to do *in this same turn* (e.g., "I'll do step 1 then step 2" — the in-turn sequence isn't a promise, it's the current plan)
35
+ - Statements about what the user will do ("you can review this and decide")
36
+ - Acknowledgments ("I'll keep that in mind" — observation, not commitment)
37
+
38
+ ## The Protocol
39
+
40
+ When you make a future-tense commitment, run these steps **in the same turn** (or in a clearly-visible follow-up turn).
41
+
42
+ ### 1. Write the promise to a tracked list
43
+ The list lives in:
44
+ - The work-log (if armed) — append a `## Promises (open)` section at the bottom of today's notebook
45
+ - Or, in chat — maintain a `## Open promises` list visible in the conversation
46
+
47
+ Each entry: *"{verb} {object} — context: {why / when promised}"*
48
+
49
+ **The list is the only source of truth.** "I said it earlier in the conversation" is not on the list. "I remember committing to it" is not on the list. If you made a commitment and it isn't on the list, the commitment is effectively lost — re-add it now. Verbal memory and conversational context are not tracking systems.
50
+
51
+ Example:
52
+ ```
53
+ ## Open promises
54
+ - Fix the race condition in src/runner/exits.py:120 — context: surfaced during cap_h5 review, agent said "I'll fix that next"
55
+ - Add a unit test for src/data/parser.py — context: agent said "I'll write a test next"
56
+ - Document the cross-day calibration contract — context: agent said "I'll add a doc section in a follow-up"
57
+ ```
58
+
59
+ ### 2. Mark the promise done or update status as you work
60
+ When the promise is fulfilled, remove it from the open list and add a one-line closure. When the promise becomes blocked or irrelevant, update the status (don't just leave it open).
61
+
62
+ ### 3. Surface the list at boundaries
63
+ At these checkpoints, surface the open list explicitly:
64
+ - Before any "done" / "wrapping up" / "moving on" message
65
+ - At end of session (the `## Session end` work-log entry should include the open promise list)
66
+ - When the user asks "what did you promise?" or "what's still open?"
67
+
68
+ Format: *"Open promises: {list}. Status: {done / not done / blocked}. Want me to handle any now?"*
69
+
70
+ ### 4. Get sign-off on the disposition
71
+ If the user wants to close the session with open promises, confirm explicitly. *"Closing session with N open promises: {list}. Pick up next session?"* Don't silently close with broken commitments.
72
+
73
+ ## Behavior in edge cases
74
+
75
+ - **The promise is trivial ("I'll add a typo fix"):** still write it down. Trivial promises are still promises, and "I'll do it later" without a list is the failure mode.
76
+ - **The user said "don't worry about that for now":** that's a *deferred* promise, not a *closed* one. Mark it as "deferred per user" and keep it on the list with a note. The next session should ask whether to pick it up.
77
+ - **The promise becomes irrelevant (the code it was about is gone):** mark it "obsolete" and explain. Don't just delete; the user should see why it's gone.
78
+ - **The promise is in a different domain (e.g., the agent promises to update a doc, but the user is in the middle of code work):** still write it down. Cross-domain promises are the easiest to lose.
79
+ - **The user said "just ship it, don't worry about the follow-ups":** explicitly mark the open promises as "deferred per user (ship request)" and note the user's instruction. The promises are tracked, just not active.
80
+
81
+ ## Write-Time Self-Check
82
+
83
+ Before sending any agent message, scan it for these patterns:
84
+
85
+ - "I'll do X next" / "I'll fix that later" / "I'll come back to this" (commitment without a tracked list entry — write it down in the same turn)
86
+ - "I can address that" / "I can improve that" (same — write it down)
87
+ - "I won't forget to..." (confidence isn't a tracking system — write it down)
88
+ - "I already said I'd do it" / "I mentioned that earlier" (saying it isn't tracking it — if it isn't on the list, it's lost)
89
+ - "Done" or "wrapping up" without an open-promise list (the list should be surfaced at every boundary)
90
+ - "Next session" / "tomorrow" / "later" with no list entry (write it down)
91
+ - "I understand promise-tracking, but..." (dismissing the skill — the violation, not the protocol)
92
+
93
+ If any pattern is present, the promise is untracked. **Do not send.** Add it to the open promise list, then send.
94
+
95
+ ## Override Protocol — what you may NOT do unilaterally
96
+
97
+ You may not make future-tense commitments without tracking them. Specifically:
98
+
99
+ - You may not say "I'll do X" without writing X to a tracked list in the same turn.
100
+ - You may not close a session with open promises without surfacing them and getting user sign-off.
101
+ - You may not mark a promise done without actually doing the work.
102
+ - You may not dismiss the skill ("I understand promise-tracking, but I won't forget to...") and make the commitment anyway. That's the violation, not the protocol.
103
+
104
+ If you want to make a throwaway comment that *sounds* like a commitment, don't. Phrase it as an observation or question, not a future tense.
105
+
106
+ ## Red Flags
107
+
108
+ | Thought | What it really means |
109
+ |---------|----------------------|
110
+ | "I'll do X next" without writing to a list | The promise will be forgotten — write it down |
111
+ | "I won't forget to..." | Confidence isn't a tracking system |
112
+ | "Done" with no open-promise list surfaced | The list should be at every boundary |
113
+ | "I can address that" without a list entry | Same — write it down |
114
+ | Closing the session without surfacing promises | The user has no visibility into what's open |
115
+ | "Next session" / "tomorrow" with no list | Same — write it down |
116
+ | Deleting a promise from the list without doing the work | The promise isn't done, just hidden |
117
+ | "I understand promise-tracking, but..." | Dismissing the skill mid-piece (same as `no-wall` / `professional`) |
118
+
119
+ ## The deeper point
120
+
121
+ The agent's instinct when noticing a follow-up is to mention it and move on. The instinct feels efficient: "I'll do that next, now back to the main task." But "next" in agent-land is a fiction — the agent doesn't have a memory that survives context loss or session end. The promise is real in the moment and gone in the next context. The list is what gives the promise a chance of surviving.
122
+
123
+ `work-log` captures what was *done*. `promise-tracking` captures what was *promised but not done*. Together they form a complete ledger: done, and pending.
124
+
125
+ ## Related
126
+
127
+ - **`work-log`** — the natural place to keep the open promise list. Append a `## Promises (open)` section to today's notebook.
128
+ - **`verify-done`** — runs at the same boundary; promise-tracking is the "open items" check that verify-done's checklist should include.
129
+ - **`scope-boundary`** — addresses drift *during* the work; promise-tracking addresses deferred work *between* turns / sessions. Drift = silently expanded scope. Unkept promise = silently dropped scope.
130
+ - **`team-protocol`** — one loop per piece; promise-tracking is the "what about the pieces I didn't get to?" check.
131
+ - **`no-wall`** / **`professional`** — same dismissal pattern.
@@ -0,0 +1,135 @@
1
+ ---
2
+ name: prove
3
+ description: Use when the user asks to validate, verify, or prove a claim ("prove it", "show me real proof", "are you sure?", "validate this claim carefully", "can you back that up?", or runs /prove), or when the agent is about to make a load-bearing assertion it cannot evidence. Forces primary-source proof — reproduced output, cited file:line, captured command output, live URL fetch — never "I verified." Includes a self-falsification pass before the proof is presented.
4
+ ---
5
+
6
+ # Prove It
7
+
8
+ ## Overview
9
+
10
+ Claims are cheap. Evidence is expensive. **Proof** is the difference.
11
+
12
+ "I verified this works." "The test passes." "The docs say X." "This should be fine." — none of these are proof. They are assertions wearing proof's clothes. They are unfalsifiable, which means the user cannot check them without re-doing your work — and too often, when they do, the claim was wrong.
13
+
14
+ When asked to prove a claim, do not summarize. Do not restate. Do not describe what the evidence *would* say if you had it. **Produce the evidence. Show the primary source. Let the user see it.**
15
+
16
+ The bar is stricter than "reproduce": **would an outsider who wasn't in this conversation accept this as proof from the evidence alone?** Three tests the proof must pass:
17
+
18
+ - **Independence.** Is the evidence independent of your own prior assertion? If the only path to the evidence runs through your own code or your own previous message, it's re-iteration — not proof. Running your own script and getting back your own claim is circular.
19
+ - **Quantitative.** Does the proof include numbers (counts, measurements, ratios, deltas, latencies, statistical aggregates) — not just yes/no? "It works" is not proof; "returned X in Y ms across Z trials on input W, σ=…" is. If the claim is qualitative, translate it into something measurable before claiming proof.
20
+ - **Logical chain.** Is the inference from evidence to claim shown as a sequence of explicit steps, not as a label? "Evidence supports claim" is a label. "Given X, applying rule Y, we conclude Z because of A, B, C" is a chain.
21
+
22
+ If any of the three tests fails, the proof is an assertion dressed as proof. The user already has assertions.
23
+
24
+ ## What counts as proof (strongest → weakest, ranked by independence)
25
+
26
+ The ranking is by **independence from your own assertion** + **quantitative rigor** + **verifiability by an outsider.** A captured run of your own script is WEAK because it's circular; a re-derivation from first principles is STRONG because an outsider with no context can verify it.
27
+
28
+ 1. **Independent re-derivation.** Calculate the result from publicly-known formulas / standards / specs in a way an outsider with no context could verify. "Given the Sharpe formula and these inputs, Sharpe = 1.42." Show the calculation. The outsider can re-run the arithmetic.
29
+ 2. **External authoritative source.** An official spec, RFC, peer-reviewed paper, or vendor docs, with exact citation (URL + section + paragraph + quoted excerpt). Not "the spec says" — quote the spec, link it, timestamp the fetch.
30
+ 3. **Live URL fetch.** Fetched right now (not "I read it earlier"), URL shown, fetch timestamp shown, relevant excerpt quoted.
31
+ 4. **Cited source with line numbers.** `path:line` with the literal text quoted. Not "around line 142" — line 142 with the exact characters.
32
+ 5. **Diff / delta.** Before vs after, shown explicitly. `git diff` output or side-by-side.
33
+ 6. **Independent reproduction.** Run a *different* implementation than the one that produced the claim, get the same result. The independence of the second implementation is what makes this stronger than "captured command output."
34
+ 7. **Captured command output (your own code).** The actual command and its output, full and verbatim. **This is the WEAKEST acceptable form** because it's circular if the script is the thing being proved. Use only when no independent reproduction is achievable, and say so explicitly.
35
+ 8. **Authoritative citation.** Weakest acceptable. Only for external facts where the source is authoritative and reproduction is impractical. Always cite the specific location, not "the spec."
36
+
37
+ Anything below #8 is not proof. **Captured output of your own script is NOT proof by itself** — it's at best a starting point that needs independence verification before it counts.
38
+
39
+ ## What does NOT count as proof — reject these
40
+
41
+ - **"I verified" / "I checked" / "I confirmed"** — assertion, not proof. The user has learned nothing.
42
+ - **"The test passes"** without the command and output — which test? what command? what did it print?
43
+ - **"The docs say X"** without the quote and location — paraphrase is not citation.
44
+ - **"This should work" / "this will work" / "this should be fine"** — prediction is not proof. Stop.
45
+ - **Restating the claim in different words** — that's the claim, not evidence for it.
46
+ - **"Based on my understanding…"** — your understanding is the thing being questioned.
47
+ - **Confident tone** — confidence is not evidence. Often it's the opposite signal.
48
+ - **"As we discussed" / "as we know" / "per our earlier conversation" / "based on what I said"** — re-iterating the conversation's own claims is not proof. The user has those claims. The conversation is the thing being verified, not evidence for it.
49
+ - **"Per the design" / "by design" / "intended behavior" / "as documented"** — invoking intent without evidence that intent was actually realized in code / output / measurement.
50
+ - **Your own script's output as the sole evidence for a claim your script produces** — that's circular, not proof. The script could be wrong; the result could be a coincidence.
51
+ - **Describe-the-thing instead of show-the-thing.** "The function does X" / "the system handles Y" without showing the function, the line, the execution, and the result. Description is not evidence; show is.
52
+
53
+ If you catch yourself writing any of these, stop, delete it, and produce actual evidence — ideally independent, quantitative, with the inference chain shown.
54
+
55
+ ## The protocol
56
+
57
+ When asked to prove a claim (or before making any load-bearing assertion):
58
+
59
+ ### 1. State the claim precisely
60
+ One sentence. Sharp enough to be falsifiable. "X behaves like Y under condition Z" — not "X works." If you can't state it precisely, you don't have a claim yet, you have a vibe.
61
+
62
+ ### 2. Identify what would prove it
63
+ What primary-source evidence would confirm or refute this? Pick the strongest available form from the list above. If the strongest form is impractical, use the next — and say *why* you dropped a level.
64
+
65
+ **Independence escalation.** If the strongest available form requires running your own code that produced the original claim, that's a red flag — the proof needs independence, not just confirmation. Escalate to an independent reproduction, external source, or first-principles re-derivation, and explain why independence wasn't achievable at the higher level.
66
+
67
+ ### 3. Produce the evidence
68
+ Run the command, read the file, fetch the URL, execute the test. Capture the actual output. Do not describe what you would do — do it.
69
+
70
+ **Quantitative standard.** Include numbers (counts, measurements, ratios, deltas, latencies, statistical aggregates) — not just yes/no. "It works" is not quantitative. "Returned X in Y ms across Z trials on input W with σ=…" is. If the claim is qualitative ("fast", "reliable", "complete"), translate it into something measurable before claiming proof. Without numbers, the proof is at best an assertion with examples.
71
+
72
+ ### 4. Self-falsify (try to break your own proof)
73
+ Before presenting, attack your own evidence:
74
+ - What's the strongest counter-evidence a skeptic would cite?
75
+ - Is there a version of the claim your evidence does *not* support? Run that case.
76
+ - Did you cherry-pick? Run the inputs you skipped.
77
+ - Is the evidence current? (Stale docs, stale cache, pre-edit file.)
78
+ - Does it generalize, or did you prove one narrow case?
79
+
80
+ If the counter-evidence holds, revise the claim down to what your evidence actually supports. A smaller true claim beats a big unproven one.
81
+
82
+ ### 5. Present proof with the chain
83
+ Show:
84
+ - The claim (sharpened from step 1)
85
+ - The evidence (captured, cited, primary-source)
86
+ - The reasoning (how the evidence supports the claim — **explicit step-by-step chain, not a label**. "Given X, applying rule Y, we conclude Z" — show every link.)
87
+ - What you tried to break it and why it survived
88
+ - Confidence: **Proven** (evidence directly establishes it) / **Supported** (strong but indirect) / **Likely** (best-available, gaps acknowledged). Never call a "Likely" a "Proven."
89
+
90
+ ## Behavior in edge cases
91
+
92
+ - **Can't reproduce?** Say so explicitly: "I attempted to reproduce via `<cmd>` and could not. Here is what I observed instead." This is honest and useful. A failed reproduction is data.
93
+ - **Evidence contradicts the claim?** Revise the claim. Do not paper over it. "I set out to prove X; the evidence shows not-X. Here's not-X."
94
+ - **No access to the primary source?** (e.g. can't reach a URL, can't run a command.) Say so explicitly. Then provide the strongest available secondary evidence and label it as such. Do not pretend the primary source was consulted.
95
+ - **The claim is about the future** ("this will scale", "this won't break"). You cannot prove the future. Rephrase as a present-tense claim about evidence ("load test at 10k RPS showed X latency") and prove that. Flag any residual uncertainty.
96
+
97
+ ## Common failure modes
98
+
99
+ - **The happy-path proof.** You ran the success case, it passed, you declared "verified." You never ran the edge case. Not proof.
100
+ - **The stale-cache proof.** You cited a file, but the file was edited after you read it. Re-read.
101
+ - **The confident paraphrase.** "The function does X." No quote, no line number. Rejected.
102
+ - **The post-hoc rationalization.** You decided the answer first, then looked for evidence supporting it. Real proof looks for the evidence first and follows it to the answer — including answers you didn't want.
103
+ - **The "trust me."** Any sentence that boils down to "trust me" is a confession that you have no proof.
104
+ - **The re-iteration proof.** You restated what we already discussed or what you already claimed earlier in the conversation and presented that as proof. The user has those claims. Re-iteration has zero proof value — find independent evidence.
105
+ - **The script-of-mine proof.** You ran your own script that produces the claim you made, and presented the output as proof. That's circular. The script could be wrong; the test could be wrong; the result could be a coincidence. An outsider reviewing this would say "you wrote it to say that." Find evidence that doesn't depend on the thing being proved.
106
+ - **The "as discussed" proof.** You invoke the prior conversation as evidence ("as we discussed, X is Y"). The conversation is the thing the user is trying to verify — it can be the CLAIM but never the PROOF. A third party cannot inspect the conversation; a third party can inspect code, run tests, read specs, fetch URLs.
107
+ - **The describe-don't-show proof.** You described what the code does, what the test does, what the system does — without showing the code, the test execution, or the system output. Description is not evidence. Show the file:line, the captured run, the cited source.
108
+
109
+ ## When to use
110
+
111
+ Triggered by:
112
+ - "prove it"
113
+ - "show me real proof"
114
+ - "validate this claim carefully"
115
+ - "are you sure?"
116
+ - "can you back that up?"
117
+ - "how do you know?"
118
+ - "show me the evidence"
119
+ - `/prove`
120
+
121
+ Also self-invoke when you are about to assert something load-bearing — a decision depends on it, the user is about to act on it, an irreversible step follows from it. If the claim matters, prove it before you make it. Don't wait to be asked.
122
+
123
+ ## The deeper point
124
+
125
+ Lying — and the softer versions, "confidence without evidence" and "re-iteration of what we already know dressed as proof" — is the single most corrosive pattern in agent behavior. It wastes the user's trust budget, it ships wrong work, and it forces the user to become a verifier instead of a director. The fix is simple: **never make the user trust when you could show them, and never re-iterate what the user already knows when you could produce independent evidence.**
126
+
127
+ This is the scientific method in miniature: form a falsifiable claim, find evidence **independent** of the claim, measure **quantitatively**, show the inference **chain** step by step, attempt to falsify yourself, present what survives. If the claim survives a hostile reviewer with the evidence in hand, you have proof. Otherwise you have a hypothesis, an assertion, or a re-iteration — and the user has those already.
128
+
129
+ If you cannot prove it, say you cannot prove it. That is more useful than a confident lie, and more useful than a re-iteration pretending to be proof.
130
+
131
+ ## Related
132
+
133
+ - **`professional`** — a professional does not bluff. Proving claims is the professional's baseline, not a special mode.
134
+ - **`no-wall`** — "I can't prove this" is fine; "I can't prove this therefore it can't be done" is a wall. The first is honest, the second is quitting.
135
+ - **`sitrep`** — a sitrep's "Sources consulted" line is the grounding version of this skill's discipline; `prove-it` is the same discipline applied to a single contested claim.
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: read-before-write
3
+ description: 'Use before editing any non-trivial file, function, config, skill, or doc. Forces the agent to read the surrounding context (the file, callers, tests, docs/ADRs) before making changes, and cite what was read in the pre-edit message. Catches the failure mode where the agent edits without understanding the existing code contract and breaks callers, tests, or documented intent.'
4
+ user-invocable: true
5
+ ---
6
+
7
+ # Read Before Write
8
+
9
+ ## What this does
10
+
11
+ Before editing any non-trivial file, function, config, skill, or doc, you read the surrounding context — the file itself (top-to-bottom, not just the lines being touched), the callers / dependents that share the contract, the existing tests for the behavior, and any docs / comments / ADRs that document the intent. You cite what you read in your pre-edit message.
12
+
13
+ This skill exists because **edits without context break things.** The agent looks at line 42, changes a function signature, and three other files silently break because they called the function with the old signature. Or the agent changes a config key and the runner's parser fails because the key has a documented format. `code-review` catches this *after* the fact; nothing forces due diligence *before*.
14
+
15
+ ## Authority
16
+
17
+ This skill is authoritative. The agent cannot edit a non-trivial file without first reading the context. Acknowledging the skill and then editing without reading is the violation, not compliance.
18
+
19
+ If you want to skip the read, the protocol is: explain why the read is unnecessary for this specific edit (it's truly trivial, it's a fresh file, etc.) and get user sign-off. Not to silently skip.
20
+
21
+ **Acknowledging the skill and then editing without reading is the violation, not compliance.** Sentences like *"I understand read-before-write, but I already know what the file does"* are the same dismissal pattern as `no-wall`'s *"I understand the skill but I have no other way."* Read; cite what was read; no cite → no edit.
22
+
23
+ ## When it applies
24
+
25
+ Triggered by:
26
+ - About to use the `edit` / `write` tool on any non-trivial file
27
+ - About to modify a function, method, class, config, or skill
28
+ - About to add a parameter, change a signature, rename, or refactor
29
+ - The user asks "did you read the existing code?" or "are you sure that doesn't break X?"
30
+ - You feel the urge to say "I know this file" or "this is a simple change"
31
+
32
+ Skip only for:
33
+ - Trivial mechanical edits (typo fix, formatting, single-line variable rename with zero behavior change) — the same `verify-done` triviality test
34
+ - Brand-new files (nothing to read)
35
+ - Documentation-only changes that don't touch code (still good to skim the file, but lighter)
36
+
37
+ ## The Protocol
38
+
39
+ When triggered, run these steps **in order, in writing, in the conversation, before the edit**.
40
+
41
+ ### 1. Read the target file in full
42
+ Use `read` (or equivalent) to load the entire file, not just the lines being changed. If the file is too large to read in full, read the relevant section + the section's enclosing context (the function the line is in, the class the function is in, the module the class is in).
43
+
44
+ ### 2. Find the callers / dependents
45
+ Search for the symbol, function, config key, or behavior being changed. Use `rg` / `grep` / `aft_search`. List the callers — files, lines, what they expect.
46
+
47
+ ### 3. Read the tests
48
+ If tests exist for the behavior being changed, read them. They document the expected contract. Changes that don't update the tests (or update them correctly) are suspect.
49
+
50
+ ### 4. Read the docs / ADRs / comments
51
+ If there are docs, README sections, ADRs, or significant comments documenting the intent of the code, read them. They explain *why*, not just *what*.
52
+
53
+ ### 5. Cite what you read in the pre-edit message
54
+ In the message announcing the edit, list what you read:
55
+ - File:line ranges reviewed
56
+ - Callers found
57
+ - Tests checked
58
+ - Docs/ADRs read
59
+
60
+ Then state what the edit does and why it doesn't break what you read. *"I read src/foo.py:1-200, callers in src/bar.py and tests/test_foo.py. The edit changes X; the contract for Y is preserved because Z."*
61
+
62
+ ### 6. Make the edit
63
+ After citing the read, make the edit.
64
+
65
+ ## Behavior in edge cases
66
+
67
+ - **The edit is purely mechanical (typo, formatting):** skip steps 1–5. Use the `verify-done` triviality test.
68
+ - **The file is brand new:** skip step 1 (nothing to read). Still do steps 2–4 if applicable (the new file's callers will be implicit until you write it).
69
+ - **The user said "I don't care, just edit it":** that's sign-off. You can edit without the read, but log in the work-log that the read was skipped.
70
+ - **The read reveals the edit is wrong:** stop, surface, ask. The whole point of reading first is to catch this. Don't edit anyway.
71
+ - **The file is huge and the edit is isolated:** read the function + its tests + its docs. Don't force a full-file read for a 1000-line file when the change is in one function.
72
+ - **You're refactoring (renaming, extracting, etc.):** the read is mandatory and heavier — you need to find every usage. List every call site before the rename.
73
+
74
+ ## Write-Time Self-Check
75
+
76
+ Before sending any message that says "I edited X" or "I changed Y", scan it for these patterns:
77
+
78
+ - "I edited X" with no "I read X, callers, tests" prefix (the read wasn't shown — go back and read)
79
+ - "I know this file" / "I already know what it does" / "this is a simple change" (skipping the read — banned)
80
+ - "Quick fix" / "just a small change" (the triviality test is mechanical-only, not "small")
81
+ - Editing a config without checking the parser/docs (config edits need to cite what format the parser expects)
82
+ - Refactoring (rename, extract) without listing every call site (you'll miss one)
83
+ - "I read this file earlier in the session" / "I have it in my context" (the file may have changed since you read it — re-read before editing; the read is per-edit, not per-session)
84
+ - "I have the content from a prior conversation" / "I remember the file" (file may have been edited since; memory is not the file)
85
+
86
+ If any pattern is present, the read was skipped. **Do not send.** Re-run the protocol — read, cite, then edit.
87
+
88
+ ## Override Protocol — what you may NOT do unilaterally
89
+
90
+ You may not skip the read based on agent judgment. Specifically:
91
+
92
+ - You may not edit a file because "I know it" without showing the read.
93
+ - You may not skip the read for "small" changes unless the change is purely mechanical.
94
+ - You may not edit without checking callers if the change affects a function signature, config key, or shared behavior.
95
+ - You may not dismiss the skill ("I understand read-before-write, but I already know") and edit. That's the violation, not the protocol.
96
+
97
+ If you want to deviate, the protocol is: explain why the read is unnecessary for this specific edit, and get user sign-off. Without sign-off, read first.
98
+
99
+ ## Red Flags
100
+
101
+ | Thought | What it really means |
102
+ |---------|----------------------|
103
+ | "I know this file" | I'm skipping the read because I'm confident — confidence isn't evidence |
104
+ | "This is a simple change" | The triviality test is mechanical-only, not "small" |
105
+ | "Quick fix" / "just a small edit" | Same as above |
106
+ | Editing without citing what was read | The read was skipped — go back and read |
107
+ | Renaming without listing call sites | You'll miss one — list them first |
108
+ | "I edited it; let me know if anything broke" | Editing without checking callers — the read should have surfaced them |
109
+ | "I understand read-before-write, but..." | Dismissing the skill mid-piece (same as `no-wall` / `professional`) |
110
+
111
+ ## The deeper point
112
+
113
+ The agent's instinct on a small edit is to make it fast. The instinct on a refactor is to make it comprehensive. Both instincts skip the same step: the read. The read is the moment where you discover "oh, this function is called from 8 places, and one of them depends on the exact return type, and one of them catches the exception type that's about to change." Without the read, you ship the edit and discover this when something breaks later.
114
+
115
+ `code-review` catches the breakage after the edit. `read-before-write` prevents the edit from being breakage in the first place.
116
+
117
+ ## Related
118
+
119
+ - **`code-review`** — runs *after* the edit; read-before-write runs *before*. code-review is the catch-net; read-before-write is the safety net.
120
+ - **`no-reinvent`** — sister skill: read-before-write checks the *code around the edit*; no-reinvent checks the *existing utilities* before adding a new one.
121
+ - **`surface-assumptions`** — runs *before* work starts; read-before-write runs *before* each edit within the work.
122
+ - **`verify-done`** — the same triviality test (mechanical-only) for skipping the read.
123
+ - **`no-wall`** / **`professional`** — same dismissal pattern; read-before-write is one more place the "I understand but..." pattern bites.