@assuredloop/orca-bot-kit 0.1.0 → 0.2.0
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.
- package/LICENSE +21 -0
- package/README.md +545 -3
- package/SETUP.md +270 -0
- package/package.json +32 -13
- package/rules/evidence.md +15 -0
- package/rules/finishing.md +20 -0
- package/rules/limits.md +18 -0
- package/rules/mail.md +17 -0
- package/rules/profiles.md +9 -0
- package/rules/review.md +14 -0
- package/rules/scope.md +20 -0
- package/rules/simple.md +14 -0
- package/rules/talk.md +13 -0
- package/rules/tests-first.md +15 -0
- package/rules/the-ask.md +19 -0
- package/skills/obk-arch/LICENSES.md +45 -0
- package/skills/obk-arch/NOTICE.md +134 -0
- package/skills/obk-arch/SKILL.md +387 -0
- package/skills/obk-bot-building/LICENSES.md +21 -0
- package/skills/obk-bot-building/NOTICE.md +113 -0
- package/skills/obk-bot-building/SKILL.md +235 -0
- package/skills/obk-debugging/LICENSES.md +67 -0
- package/skills/obk-debugging/NOTICE.md +115 -0
- package/skills/obk-debugging/SKILL.md +419 -0
- package/skills/obk-decision-memo/LICENSES.md +49 -0
- package/skills/obk-decision-memo/NOTICE.md +181 -0
- package/skills/obk-decision-memo/SKILL.md +241 -0
- package/skills/obk-finops/LICENSES.md +19 -0
- package/skills/obk-finops/NOTICE.md +77 -0
- package/skills/obk-finops/SKILL.md +146 -0
- package/skills/obk-fleet-review/LICENSES.md +52 -0
- package/skills/obk-fleet-review/NOTICE.md +104 -0
- package/skills/obk-fleet-review/SKILL.md +219 -0
- package/skills/obk-grilling/LICENSES.md +42 -0
- package/skills/obk-grilling/NOTICE.md +103 -0
- package/skills/obk-grilling/SKILL.md +217 -0
- package/skills/obk-grooming/LICENSES.md +52 -0
- package/skills/obk-grooming/NOTICE.md +111 -0
- package/skills/obk-grooming/SKILL.md +219 -0
- package/skills/obk-handoff/LICENSES.md +45 -0
- package/skills/obk-handoff/NOTICE.md +51 -0
- package/skills/obk-handoff/SKILL.md +119 -0
- package/skills/obk-personal-facilitation/LICENSES.md +53 -0
- package/skills/obk-personal-facilitation/NOTICE.md +62 -0
- package/skills/obk-personal-facilitation/SKILL.md +86 -0
- package/skills/obk-recall/LICENSES.md +42 -0
- package/skills/obk-recall/NOTICE.md +53 -0
- package/skills/obk-recall/SKILL.md +129 -0
- package/skills/obk-researching/LICENSES.md +67 -0
- package/skills/obk-researching/NOTICE.md +170 -0
- package/skills/obk-researching/SKILL.md +259 -0
- package/skills/obk-reviewing/LICENSES.md +66 -0
- package/skills/obk-reviewing/NOTICE.md +58 -0
- package/skills/obk-reviewing/SKILL.md +408 -0
- package/skills/obk-tdd/LICENSES.md +68 -0
- package/skills/obk-tdd/NOTICE.md +54 -0
- package/skills/obk-tdd/SKILL.md +516 -0
- package/skills/obk-tdd/mutation-tools.md +80 -0
- package/skills/obk-teach/LICENSES.md +42 -0
- package/skills/obk-teach/NOTICE.md +65 -0
- package/skills/obk-teach/SKILL.md +106 -0
- package/skills/obk-why/LICENSES.md +42 -0
- package/skills/obk-why/NOTICE.md +74 -0
- package/skills/obk-why/SKILL.md +169 -0
- package/skills/obk-writing/LICENSES.md +272 -0
- package/skills/obk-writing/NOTICE.md +161 -0
- package/skills/obk-writing/SKILL.md +254 -0
- package/src/book.js +268 -0
- package/src/bot.js +451 -0
- package/src/cli.js +1130 -0
- package/src/conversations.js +150 -0
- package/src/groom.js +157 -0
- package/src/health.js +309 -0
- package/src/hooks.js +202 -0
- package/src/init.js +314 -0
- package/src/launch.js +276 -0
- package/src/message.js +380 -0
- package/src/orca.js +291 -0
- package/src/pause.js +58 -0
- package/src/record.js +209 -0
- package/src/restart.js +192 -0
- package/src/retire.js +92 -0
- package/src/roster.js +71 -0
- package/src/rules.js +408 -0
- package/src/skills.js +629 -0
- package/src/sources.js +370 -0
- package/src/up.js +475 -0
- package/src/usage.js +401 -0
- package/bin/okb.js +0 -4
- package/src/index.js +0 -11
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: obk-bot-building
|
|
3
|
+
description: >-
|
|
4
|
+
Bringing a bot into being: finding out whether the job wants one at all,
|
|
5
|
+
interviewing its owner into a charter that says what it owns, what good
|
|
6
|
+
looks like and what it must ask about first, splitting a role that carries
|
|
7
|
+
unrelated work, giving each session a duty of its own, choosing the skills
|
|
8
|
+
the job needs and no more, and carrying an existing conversation across.
|
|
9
|
+
Use when someone wants a new bot, another session on a bot they have, a
|
|
10
|
+
role written down, or a session they already run brought in.
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Making a bot
|
|
14
|
+
|
|
15
|
+
A bot is a job somebody holds, not a prompt that came out well. The work is
|
|
16
|
+
the interview; the files it leaves behind are the easy part, and the kit's
|
|
17
|
+
own commands write them.
|
|
18
|
+
|
|
19
|
+
These are defaults for work where nothing says otherwise. A user who asks for
|
|
20
|
+
something else gets what they asked for; say which of these you left and why.
|
|
21
|
+
|
|
22
|
+
## Ask whether this wants a new bot
|
|
23
|
+
|
|
24
|
+
Look at the fleet before you add to it. Where a bot already there could own
|
|
25
|
+
this job, say so and offer that instead: a second bot with an overlapping job
|
|
26
|
+
splits the context, and now two of them half-know the same thing and neither
|
|
27
|
+
is accountable for it.
|
|
28
|
+
|
|
29
|
+
A new bot earns its place when the work has an owner who is not the owner of
|
|
30
|
+
any existing one, or when a real bottleneck has shown up: the shared context
|
|
31
|
+
is noisy, the bot cannot review its own work, or the permissions the job
|
|
32
|
+
needs are wider than the ones it has now. Wanting the work done faster is not
|
|
33
|
+
one of those.
|
|
34
|
+
|
|
35
|
+
Say which it is, in one line, before you write anything.
|
|
36
|
+
|
|
37
|
+
## Name it after a job a person could hold
|
|
38
|
+
|
|
39
|
+
Inbox Manager, Expense Manager, API Reviewer. A name that describes a job
|
|
40
|
+
brings its own boundary with it, and everyone reading the roster later knows
|
|
41
|
+
what to send it and what not to.
|
|
42
|
+
|
|
43
|
+
A name that describes a tool, a model, a mood or everything ("assistant")
|
|
44
|
+
does not, and leaves a bot nobody can hold to anything.
|
|
45
|
+
|
|
46
|
+
## The interview writes the charter
|
|
47
|
+
|
|
48
|
+
Three questions, and they are the charter: what this bot owns, what good work
|
|
49
|
+
looks like for it, and what it must ask about before it acts.
|
|
50
|
+
|
|
51
|
+
Ask the three together, and bring an answer of your own to each. Someone who
|
|
52
|
+
is handed a blank page writes a paragraph they will not recognise in a month;
|
|
53
|
+
someone who is handed a draft corrects it in a sentence, and the correction is
|
|
54
|
+
the part worth having. Say which parts of your draft you inferred so they know
|
|
55
|
+
what to push back on.
|
|
56
|
+
|
|
57
|
+
Write what they said, in their words. Where an answer is too vague to act on,
|
|
58
|
+
keep it and ask again rather than tidying it into something that only looks
|
|
59
|
+
finished. A charter nobody recognises is worse than a short one: it will be
|
|
60
|
+
followed.
|
|
61
|
+
|
|
62
|
+
Stop when those three are answered. The rest of what a bot needs is settings,
|
|
63
|
+
and settings are not an interview.
|
|
64
|
+
|
|
65
|
+
## Split a role that carries unrelated work
|
|
66
|
+
|
|
67
|
+
Where the job needs several unrelated verbs, it is two jobs. Say so and
|
|
68
|
+
propose the split rather than writing one charter that covers both, and split
|
|
69
|
+
by domain rather than by how much work there is: a bot with a narrow domain
|
|
70
|
+
and a lot to do is fine, and a bot with two domains and very little is not.
|
|
71
|
+
|
|
72
|
+
The test is whether one sentence can say what it owns without an "and" doing
|
|
73
|
+
the heavy lifting.
|
|
74
|
+
|
|
75
|
+
## Say what it may do alone, and what it must ask about
|
|
76
|
+
|
|
77
|
+
Sort by what can be undone. What is reversible, it does; what is not, it asks
|
|
78
|
+
about first. A limit is a normal part of a charter and reads as a plain
|
|
79
|
+
sentence: read-only, does not modify. Never sends anything outside the company
|
|
80
|
+
without a yes. Never spends money.
|
|
81
|
+
|
|
82
|
+
Give the limit teeth by saying what evidence it brings when it escalates, so
|
|
83
|
+
asking is one message rather than a conversation.
|
|
84
|
+
|
|
85
|
+
Within that boundary the bot acts on its own; that is the point of writing it
|
|
86
|
+
down.
|
|
87
|
+
|
|
88
|
+
## The role, the task, and the procedure
|
|
89
|
+
|
|
90
|
+
Three lifetimes, and they belong in three places. The role is durable and
|
|
91
|
+
lives in the charter. A task is one assignment and lives in the message that
|
|
92
|
+
asks for it. A procedure is reusable and lives in a skill.
|
|
93
|
+
|
|
94
|
+
A one-off correction is a task. Do not let it rewrite the role: "not like
|
|
95
|
+
that, do it this way today" said once becomes a rule forever, and a year later
|
|
96
|
+
nobody can say why the bot refuses something reasonable. Where a correction
|
|
97
|
+
really is durable, say that you are changing the charter, and change it.
|
|
98
|
+
|
|
99
|
+
## A session is a duty, not a copy
|
|
100
|
+
|
|
101
|
+
Sessions of one bot share its home, its rules and its skills. What tells them
|
|
102
|
+
apart is the start prompt, and nothing else: it is sent when the tab is made
|
|
103
|
+
and again after a clear, and it is the only thing that says this tab is the
|
|
104
|
+
one that reviews and that one is the one that answers mail.
|
|
105
|
+
|
|
106
|
+
Each carries its own harness, model, effort, context window and approval
|
|
107
|
+
level. Leave a setting out and the harness's own default applies, which is
|
|
108
|
+
usually right; do not put a model id in because it sounds current. Where the
|
|
109
|
+
model someone asked for is not available, say so and ask. Never quietly run
|
|
110
|
+
on another one: a bot that silently changed model is a bot whose output
|
|
111
|
+
nobody can compare with last week's.
|
|
112
|
+
|
|
113
|
+
Approval is the ordinary automatic level unless the user asks for something
|
|
114
|
+
else in plain words. Do not raise it to make a session smoother.
|
|
115
|
+
|
|
116
|
+
## Offer a line-up rather than a blank page
|
|
117
|
+
|
|
118
|
+
Someone making their first bots does not know what a good set looks like, so
|
|
119
|
+
propose one and say what each part is for. A pair of developers on different
|
|
120
|
+
models with an architect over them, where one implements, the other writes
|
|
121
|
+
the acceptance tests and reviews, and the architect settles disagreements and
|
|
122
|
+
digs into the hard causes. A workhorse, a writer and a thinker, for work that
|
|
123
|
+
is not development.
|
|
124
|
+
|
|
125
|
+
Suggestions only: they take out or rename what they like, and you build what
|
|
126
|
+
they end up with.
|
|
127
|
+
|
|
128
|
+
## Give it the skills the job needs, and no more
|
|
129
|
+
|
|
130
|
+
Match the skills to the work, not to the title. Something that mostly finds
|
|
131
|
+
things out wants `obk-researching`; something that writes for people wants
|
|
132
|
+
`obk-writing`; a bot that decides wants `obk-decision-memo`. A developer bot
|
|
133
|
+
wants `obk-tdd`, `obk-reviewing` and `obk-debugging`, a reviewer the reviewing
|
|
134
|
+
one above all, and an architect `obk-arch` on top. Someone's own errands want
|
|
135
|
+
`obk-personal-facilitation`.
|
|
136
|
+
|
|
137
|
+
Every extra skill is more for the bot to read and one more thing that might
|
|
138
|
+
fire when it should not. Where you are not sure, leave it out and add it when
|
|
139
|
+
the job shows it is missing.
|
|
140
|
+
|
|
141
|
+
A skill can come from the kit, from the user's own folder, from a repo
|
|
142
|
+
online, or from a path on disk. An online source is pinned to a version, and
|
|
143
|
+
it is worth saying out loud that a source carrying scripts or hooks runs on
|
|
144
|
+
their machine on their risk.
|
|
145
|
+
|
|
146
|
+
## Bringing in a session they already run
|
|
147
|
+
|
|
148
|
+
Someone moving in usually has a conversation going that they do not want to
|
|
149
|
+
lose. Take the harness's own id for it and record it against the session in
|
|
150
|
+
the book (by hand, since no command takes an outside id), and `obk up` brings
|
|
151
|
+
it back with its history. Whether a harness resumes a conversation that was
|
|
152
|
+
started in another folder is something to try before promising.
|
|
153
|
+
|
|
154
|
+
Everything else is best effort, and say so plainly rather than promising a
|
|
155
|
+
clean move: what was in that session's own settings, the rules it worked to,
|
|
156
|
+
the skills it had. Carry across what you can find, list what you could not,
|
|
157
|
+
and let them tell you what mattered.
|
|
158
|
+
|
|
159
|
+
## Write it down
|
|
160
|
+
|
|
161
|
+
The kit's command line does the writing, and the files belong to the user:
|
|
162
|
+
`obk bot create` makes the bot, `obk session add` gives it a session, `obk
|
|
163
|
+
source add` records where online skills come from and `obk skills fetch`
|
|
164
|
+
clones them, `obk skills add` puts one on a bot, `obk skills build` links
|
|
165
|
+
them, and `obk up` opens what is missing in Orca. `obk bot change` gives a
|
|
166
|
+
bot a new charter, `obk session change` changes a session's settings, and
|
|
167
|
+
`obk skills remove` takes a skill off a list (then `obk skills build`). `obk
|
|
168
|
+
pause` stops a bot or a session for now and `obk unpause` brings it back;
|
|
169
|
+
`obk retire` ends one. For a special case no command covers, such as a bot's
|
|
170
|
+
rules list, edit the file, run `obk rules build` or `obk skills build`, and
|
|
171
|
+
say that you edited it by hand.
|
|
172
|
+
Run `obk --help` for the flags of the version actually installed rather than
|
|
173
|
+
trusting a line you remember.
|
|
174
|
+
|
|
175
|
+
A bot that should learn across its sessions can use its harness's own memory,
|
|
176
|
+
turned on for that bot alone, whatever the user's own setting is for everything
|
|
177
|
+
else. The harness writes it, loads it and keeps it tidy itself. On Claude Code
|
|
178
|
+
that is three keys in the bot's `.claude/settings.json`, beside the kit's hook:
|
|
179
|
+
`autoMemoryEnabled: true`; `env` setting `CLAUDE_CODE_DISABLE_AUTO_MEMORY` to
|
|
180
|
+
`"0"` where the user turns memory off that way; and `autoMemoryDirectory`
|
|
181
|
+
naming a folder of the bot's own outside the bots repo, by an absolute path or
|
|
182
|
+
one starting with `~/`, because without it
|
|
183
|
+
every bot in the repo shares one memory. The first 200 lines or 25 KB of its
|
|
184
|
+
index load at every start. Codex's memories belong to the user and are shared
|
|
185
|
+
by every Codex session, so a Codex bot cannot have its own; say so before
|
|
186
|
+
turning them on for one. It is a hand edit, and say that you made it.
|
|
187
|
+
|
|
188
|
+
After each change, commit what it changed in the bots folder; the kit never
|
|
189
|
+
commits by itself.
|
|
190
|
+
|
|
191
|
+
Do the reversible part and stop at the line. Making a bot, adding a session
|
|
192
|
+
and linking skills add things and are safe to run again; closing a tab,
|
|
193
|
+
pausing or retiring a bot and restarting anything are not, and they wait for
|
|
194
|
+
the word.
|
|
195
|
+
|
|
196
|
+
## When the bot is already running
|
|
197
|
+
|
|
198
|
+
Changing a bot whose sessions are up is the ordinary case rather than the
|
|
199
|
+
awkward one. Both harnesses read a skill through the link and notice a change
|
|
200
|
+
to the skills directory while a session is running, so putting a skill on a
|
|
201
|
+
bot, or taking one off, reaches a live session without restarting it.
|
|
202
|
+
|
|
203
|
+
Noticing is not the same as confirmed. Check that the session can actually see
|
|
204
|
+
the skill before telling anyone it is there, and check by asking that session
|
|
205
|
+
rather than by looking again at the disk you just wrote: what you wrote is not
|
|
206
|
+
evidence about what another process has loaded. Where it has not appeared, say
|
|
207
|
+
so and say what would make it appear. A restart is the user's to ask for, and
|
|
208
|
+
taking one because it is the quick way ends a conversation they were in the
|
|
209
|
+
middle of.
|
|
210
|
+
|
|
211
|
+
Instructions are not skills. A session is working from the rules it read when
|
|
212
|
+
it started, so a change to a bot's `AGENTS.md` may not reach one that is
|
|
213
|
+
already up even when a skill change would, and a session's model, effort or
|
|
214
|
+
approval only changes when it is started again (`obk restart`, on the user's
|
|
215
|
+
word). Say which you changed, and what that means for the sessions running
|
|
216
|
+
now. Where everything needs restarting, remind them to do it from Bot Father's
|
|
217
|
+
ops tab.
|
|
218
|
+
|
|
219
|
+
And tell them. A bot's sessions share its rules and its skills, so a change
|
|
220
|
+
made for one of them lands on all of them, and the session that asked is not
|
|
221
|
+
the only one affected. Say what changed and what it means for what they are
|
|
222
|
+
doing, in their own tabs, rather than leaving them to find out mid-task.
|
|
223
|
+
|
|
224
|
+
## What they get back
|
|
225
|
+
|
|
226
|
+
Its card: the name, the harness, model and effort of its sessions, a two-line
|
|
227
|
+
charter, and its one hard limit. Its sessions and what each is for. The skills
|
|
228
|
+
it has and where they came from. And the one thing you need from them, where
|
|
229
|
+
something is still open.
|
|
230
|
+
|
|
231
|
+
Point at the charter rather than reproducing it, and say what you inferred
|
|
232
|
+
rather than what they told you, so the parts they have not really agreed to
|
|
233
|
+
are the parts they read.
|
|
234
|
+
|
|
235
|
+
Sources and licences: [NOTICE.md](NOTICE.md).
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<!-- The licences of the sources this skill was consolidated from. They travel
|
|
2
|
+
with the skill directory because the licences require it of anyone who
|
|
3
|
+
distributes the material. NOTICE.md says what was taken from each source;
|
|
4
|
+
this file carries the permission notices themselves. -->
|
|
5
|
+
|
|
6
|
+
# Licences of the sources
|
|
7
|
+
|
|
8
|
+
`obk-debugging` consolidates material from the sources named in
|
|
9
|
+
[NOTICE.md](NOTICE.md). Their licences are reproduced below in full.
|
|
10
|
+
|
|
11
|
+
## MIT
|
|
12
|
+
|
|
13
|
+
The MIT permission notice below applies to the work of each of these copyright
|
|
14
|
+
holders, and is reproduced with each of their notices. The path after each one
|
|
15
|
+
is the licence file it was read from, in the research pack's source clones.
|
|
16
|
+
|
|
17
|
+
- **`mattpocock/skills`**, Copyright (c) 2026 Matt Pocock
|
|
18
|
+
(`mattpocock_skills/LICENSE`)
|
|
19
|
+
- **Cursor `plugins`, the pstack plugin**, Copyright (c) 2026 Lauren Tan
|
|
20
|
+
(`cursor_plugins/pstack/LICENSE`)
|
|
21
|
+
- **`obra/superpowers`**, Copyright (c) 2025 Jesse Vincent
|
|
22
|
+
(`obra_superpowers/LICENSE`)
|
|
23
|
+
- **`addyosmani/agent-skills`**, Copyright (c) 2025 Addy Osmani
|
|
24
|
+
(`addyosmani_agent-skills/LICENSE`)
|
|
25
|
+
- **`garrytan/gstack`**, Copyright (c) 2026 Garry Tan
|
|
26
|
+
(`garrytan_gstack/LICENSE`)
|
|
27
|
+
- **`KentBeck/BPlusTree3`, for his own rules file**, Copyright (c) 2025 Kent Beck
|
|
28
|
+
(`KentBeck_BPlusTree3/LICENSE`)
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
MIT License
|
|
32
|
+
|
|
33
|
+
Copyright (c) 2026 Matt Pocock
|
|
34
|
+
Copyright (c) 2026 Lauren Tan
|
|
35
|
+
Copyright (c) 2025 Jesse Vincent
|
|
36
|
+
Copyright (c) 2025 Addy Osmani
|
|
37
|
+
Copyright (c) 2026 Garry Tan
|
|
38
|
+
Copyright (c) 2025 Kent Beck
|
|
39
|
+
|
|
40
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
41
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
42
|
+
in the Software without restriction, including without limitation the rights
|
|
43
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
44
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
45
|
+
furnished to do so, subject to the following conditions:
|
|
46
|
+
|
|
47
|
+
The above copyright notice and this permission notice shall be included in all
|
|
48
|
+
copies or substantial portions of the Software.
|
|
49
|
+
|
|
50
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
51
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
52
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
53
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
54
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
55
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
56
|
+
SOFTWARE.
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Sources that could not be read
|
|
60
|
+
|
|
61
|
+
- **`tw93/Waza`** is not among the clones in the research pack. Its `hunt`
|
|
62
|
+
skill is quoted in the pack's `source-book-2.md`, which records the
|
|
63
|
+
repository as MIT. What this skill takes from it is written in our own words.
|
|
64
|
+
|
|
65
|
+
These are named in NOTICE.md for honesty about where the material came from.
|
|
66
|
+
No text of theirs is reproduced in this skill, and their licence files were not
|
|
67
|
+
available here to reproduce.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<!-- Attribution for the sources this skill was built from. Kept out of
|
|
2
|
+
SKILL.md so it is not read into context on every use; it travels with
|
|
3
|
+
the skill directory, which is what the licences require. -->
|
|
4
|
+
|
|
5
|
+
# Sources and licences
|
|
6
|
+
|
|
7
|
+
The skill `obk-debugging` was consolidated for this kit from these, all MIT,
|
|
8
|
+
with thanks:
|
|
9
|
+
|
|
10
|
+
- **mattpocock/skills**, `engineering/diagnosing-bugs`. The whole shape of it.
|
|
11
|
+
The feedback loop as the skill itself and worth disproportionate effort, the
|
|
12
|
+
ten ways to build one in order, tightening it for speed, sharpness and
|
|
13
|
+
repeatability, raising the rate on an intermittent bug rather than chasing a
|
|
14
|
+
clean one, the four things that make a loop finished, the refusal to
|
|
15
|
+
hypothesise before the command exists, reproducing the reported symptom
|
|
16
|
+
rather than a nearby one, cutting until every part is load-bearing, three to
|
|
17
|
+
five ranked falsifiable candidates with the prediction each makes, showing
|
|
18
|
+
the ranked list to whoever is there, one variable per probe, a debugger over
|
|
19
|
+
logs and never logging everything, tagging temporary logs with one marker,
|
|
20
|
+
measuring before fixing a slow thing, the regression test at a correct seam
|
|
21
|
+
and "no correct seam is itself the finding", redacting secrets from anything
|
|
22
|
+
shown, and the list to clear before calling it done.
|
|
23
|
+
- **Waza**, `hunt`, through the verbatim passages in the research pack. The
|
|
24
|
+
gate sentence and its form ("I believe the root cause is X because Y", named
|
|
25
|
+
to a file, function, line or condition), the rule that the cause must explain
|
|
26
|
+
every symptom including the one waved away, running the one probe that would
|
|
27
|
+
fail if you were wrong and discarding on contradiction rather than stacking a
|
|
28
|
+
fix on it, every log as a yes-or-no question and a log that changes behaviour
|
|
29
|
+
being evidence in itself, the rationalisation tells, the sibling sweep with
|
|
30
|
+
every match answered in writing, bisecting only with a pass/fail command
|
|
31
|
+
decided up front and a clean tree first, reading the diff when the last good
|
|
32
|
+
version is close, the same symptom after a fix meaning stop patching and
|
|
33
|
+
re-read the path, and stopping after three failed hypotheses. The owner
|
|
34
|
+
marked the gate sentence as worth borrowing in his own notes; the rest of
|
|
35
|
+
`hunt` came in on the research's recommendation.
|
|
36
|
+
- **Cursor pstack**, `principle-fix-root-causes` and the `poteto-mode`
|
|
37
|
+
playbooks. Not adding guards to silence a crash, a workaround needing a
|
|
38
|
+
paragraph meaning the code is wrong, checking for the pattern rather than the
|
|
39
|
+
instance, suspecting stored state first when something fails after a restart,
|
|
40
|
+
and from `principle-attack-the-premise`, two fixes sharing one premise
|
|
41
|
+
meaning the premise is what to suspect and test next, written down before
|
|
42
|
+
another fix is tried, while it may still not be the cause. From the
|
|
43
|
+
`hillclimb` playbook: several runs and the median, keeping a change only
|
|
44
|
+
when the number moves past the noise, and correctness outranking the
|
|
45
|
+
number. From the `perf-issue` playbook: measuring before claiming a limit, the
|
|
46
|
+
families a fix takes used as hypothesis generators rather than a checklist,
|
|
47
|
+
and capturing the measurement again afterwards to compare against the
|
|
48
|
+
baseline. Every shipped line tracing to runtime evidence with the smallest
|
|
49
|
+
change the evidence justifies and reverting what a refuted idea motivated,
|
|
50
|
+
and verifying on the same surface with "inconclusive is not a pass" and a
|
|
51
|
+
unit test showing branch behaviour rather than absence of the bug. From its
|
|
52
|
+
`runtime-forensics` and
|
|
53
|
+
`trace-forensics` playbooks: an existing capture is read rather than re-run,
|
|
54
|
+
turned into a queryable shape before reading and reduced elsewhere when it is
|
|
55
|
+
large; narrowing to the hot call path, to the retainer chain from a leaked
|
|
56
|
+
object back to a root, or to a blocked thread and its wait reason; mapping
|
|
57
|
+
the finding to file, symbol and line, with a frame that has no source behind
|
|
58
|
+
it not yet being a diagnosis; confirming against a paired capture or else
|
|
59
|
+
calling it the strongest hypothesis the artefact supports; and proving the
|
|
60
|
+
mechanism on the live process where it can still be reached.
|
|
61
|
+
- **obra/superpowers**, `systematic-debugging` with `root-cause-tracing` and
|
|
62
|
+
`condition-based-waiting`. Logging what enters and leaves each boundary and
|
|
63
|
+
reading where it first goes wrong before digging in, tracing backwards
|
|
64
|
+
through the call chain to where the wrong value was born and fixing it there,
|
|
65
|
+
logging before the dangerous operation rather than after it fails, printing
|
|
66
|
+
to the error stream in tests because a logger may be swallowed, three failed
|
|
67
|
+
fixes meaning the architecture rather than the hypothesis is wrong and what
|
|
68
|
+
that looks like, waiting for the condition rather than for a duration,
|
|
69
|
+
reading fresh state inside the loop, always setting a limit with a message,
|
|
70
|
+
the case where a fixed wait is right and what has to accompany it, and the
|
|
71
|
+
things someone says when they can see you are guessing. Also, when the
|
|
72
|
+
cause really is external, handling at the boundary and a way to see it next
|
|
73
|
+
time, with most "no root cause" being an investigation stopped early; and
|
|
74
|
+
finding the test that leaves state behind by running them one at a time.
|
|
75
|
+
|
|
76
|
+
- **obra/superpowers**, `systematic-debugging`, further to the above. Finding
|
|
77
|
+
the nearest thing that works in the same codebase, reading it properly rather
|
|
78
|
+
than skimming, and listing every difference however small without deciding in
|
|
79
|
+
advance which cannot matter.
|
|
80
|
+
- **addyosmani/agent-skills**, `debugging-and-error-recovery`. The decision
|
|
81
|
+
tree for a bug you cannot reproduce on demand, sorted into timing,
|
|
82
|
+
environment, state left behind and genuinely random, with what to try in each
|
|
83
|
+
and documenting the conditions as a real answer for the last; and treating
|
|
84
|
+
error output as untrusted data, since a message from a dependency, a log or a
|
|
85
|
+
build can carry something shaped like an instruction and is to be read for
|
|
86
|
+
clues rather than followed; keeping the evidence before a restart or a
|
|
87
|
+
clean-up; and a test that looks wrong going back rather than being obeyed.
|
|
88
|
+
- **Waza**, `hunt`, further to the above. Its gotchas: walking back out of a
|
|
89
|
+
library frame into your own code, suspecting persisted output written by the
|
|
90
|
+
old code when the algorithm changed and the output did not, trusting the
|
|
91
|
+
observation over the log and treating the gap as an un-instrumented path, a
|
|
92
|
+
guard that refuses having a set of causes rather than one, taking a
|
|
93
|
+
lower-layer baseline before blaming the visible thing, diagnosing an external
|
|
94
|
+
tool before switching it, and never restarting more than twice without new
|
|
95
|
+
evidence.
|
|
96
|
+
|
|
97
|
+
- **garrytan/gstack**, `investigate`: earlier fixes in the same area pointing
|
|
98
|
+
at the shape of the code, and the rest of the suite still passing after the
|
|
99
|
+
fix.
|
|
100
|
+
- **Kent Beck's own rules file**: two tests for a defect, one at the interface
|
|
101
|
+
and the smallest one where the fault lives.
|
|
102
|
+
- **Cursor pstack**, `runtime-forensics`, further to the above: when the
|
|
103
|
+
question is why, the deliverable is the diagnosis, not a fix.
|
|
104
|
+
|
|
105
|
+
The owner's own framing leads the skill: reproduce it, find the difference in
|
|
106
|
+
environment, version and context, and the hard cases being random and slow
|
|
107
|
+
(research-pack dialogue, 2026-09-19 18:45). The plain opening and the dropped
|
|
108
|
+
slogans follow his remark that the source's voice was too strong and too
|
|
109
|
+
personal (18:41 and 18:46).
|
|
110
|
+
|
|
111
|
+
Left behind on purpose: the iron-law capitals and "refuse to give up" framing,
|
|
112
|
+
validating at every layer as a general answer (it contradicts fixing the cause,
|
|
113
|
+
and the kit's own rules say the smallest change that works), per-vendor tooling
|
|
114
|
+
names and control-skill machinery, fixed model choices, and the parts that
|
|
115
|
+
assume a particular tracker or pull-request flow.
|