@assuredloop/orca-bot-kit 0.1.0 → 0.3.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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +548 -3
  3. package/SETUP.md +275 -0
  4. package/package.json +32 -13
  5. package/rules/evidence.md +15 -0
  6. package/rules/finishing.md +23 -0
  7. package/rules/limits.md +18 -0
  8. package/rules/mail.md +17 -0
  9. package/rules/profiles.md +9 -0
  10. package/rules/review.md +14 -0
  11. package/rules/scope.md +22 -0
  12. package/rules/simple.md +14 -0
  13. package/rules/talk.md +13 -0
  14. package/rules/tests-first.md +17 -0
  15. package/rules/the-ask.md +19 -0
  16. package/skills/obk-arch/LICENSES.md +52 -0
  17. package/skills/obk-arch/NOTICE.md +242 -0
  18. package/skills/obk-arch/SKILL.md +598 -0
  19. package/skills/obk-bot-building/LICENSES.md +21 -0
  20. package/skills/obk-bot-building/NOTICE.md +113 -0
  21. package/skills/obk-bot-building/SKILL.md +312 -0
  22. package/skills/obk-debugging/LICENSES.md +67 -0
  23. package/skills/obk-debugging/NOTICE.md +115 -0
  24. package/skills/obk-debugging/SKILL.md +434 -0
  25. package/skills/obk-decision-memo/LICENSES.md +49 -0
  26. package/skills/obk-decision-memo/NOTICE.md +181 -0
  27. package/skills/obk-decision-memo/SKILL.md +241 -0
  28. package/skills/obk-finops/LICENSES.md +19 -0
  29. package/skills/obk-finops/NOTICE.md +77 -0
  30. package/skills/obk-finops/SKILL.md +148 -0
  31. package/skills/obk-fleet-review/LICENSES.md +52 -0
  32. package/skills/obk-fleet-review/NOTICE.md +104 -0
  33. package/skills/obk-fleet-review/SKILL.md +256 -0
  34. package/skills/obk-grilling/LICENSES.md +42 -0
  35. package/skills/obk-grilling/NOTICE.md +111 -0
  36. package/skills/obk-grilling/SKILL.md +221 -0
  37. package/skills/obk-grooming/LICENSES.md +52 -0
  38. package/skills/obk-grooming/NOTICE.md +111 -0
  39. package/skills/obk-grooming/SKILL.md +222 -0
  40. package/skills/obk-handoff/LICENSES.md +45 -0
  41. package/skills/obk-handoff/NOTICE.md +51 -0
  42. package/skills/obk-handoff/SKILL.md +119 -0
  43. package/skills/obk-personal-facilitation/LICENSES.md +53 -0
  44. package/skills/obk-personal-facilitation/NOTICE.md +62 -0
  45. package/skills/obk-personal-facilitation/SKILL.md +86 -0
  46. package/skills/obk-recall/LICENSES.md +42 -0
  47. package/skills/obk-recall/NOTICE.md +53 -0
  48. package/skills/obk-recall/SKILL.md +129 -0
  49. package/skills/obk-researching/LICENSES.md +67 -0
  50. package/skills/obk-researching/NOTICE.md +170 -0
  51. package/skills/obk-researching/SKILL.md +269 -0
  52. package/skills/obk-reviewing/LICENSES.md +66 -0
  53. package/skills/obk-reviewing/NOTICE.md +58 -0
  54. package/skills/obk-reviewing/SKILL.md +411 -0
  55. package/skills/obk-tdd/LICENSES.md +68 -0
  56. package/skills/obk-tdd/NOTICE.md +54 -0
  57. package/skills/obk-tdd/SKILL.md +547 -0
  58. package/skills/obk-tdd/mutation-tools.md +80 -0
  59. package/skills/obk-teach/LICENSES.md +42 -0
  60. package/skills/obk-teach/NOTICE.md +65 -0
  61. package/skills/obk-teach/SKILL.md +106 -0
  62. package/skills/obk-why/LICENSES.md +42 -0
  63. package/skills/obk-why/NOTICE.md +74 -0
  64. package/skills/obk-why/SKILL.md +180 -0
  65. package/skills/obk-writing/LICENSES.md +272 -0
  66. package/skills/obk-writing/NOTICE.md +161 -0
  67. package/skills/obk-writing/SKILL.md +254 -0
  68. package/src/book.js +268 -0
  69. package/src/bot.js +451 -0
  70. package/src/cli.js +1169 -0
  71. package/src/conversations.js +150 -0
  72. package/src/groom.js +159 -0
  73. package/src/health.js +309 -0
  74. package/src/hooks.js +257 -0
  75. package/src/init.js +314 -0
  76. package/src/launch.js +299 -0
  77. package/src/message.js +402 -0
  78. package/src/orca.js +362 -0
  79. package/src/pause.js +63 -0
  80. package/src/record.js +209 -0
  81. package/src/restart.js +193 -0
  82. package/src/retire.js +92 -0
  83. package/src/roster.js +71 -0
  84. package/src/rules.js +408 -0
  85. package/src/skills.js +630 -0
  86. package/src/sources.js +371 -0
  87. package/src/up.js +500 -0
  88. package/src/usage.js +401 -0
  89. package/bin/okb.js +0 -4
  90. package/src/index.js +0 -11
@@ -0,0 +1,113 @@
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
+ `obk-bot-building` reproduces no third-party text. What it took from outside
8
+ this kit, it took as an idea and wrote again in its own words, for the reason
9
+ given under "Ideas taken from material with no licence" below.
10
+
11
+ ## The owner's own words
12
+
13
+ The charter is three questions because he settled it at three. His word on the
14
+ proposal that the interview happens once at a bot's creation and asks what the
15
+ bot owns, what good work looks like, and what it must ask about first, in the
16
+ research pack's session dialogue: "looks good for charter interview."
17
+
18
+ Two other lines of his shape this skill. On what a bot is allowed to do: he is
19
+ "building bot to allow agency by itself but in the boundary and contract we are
20
+ creating, not freely", which is why the limits section here reads as a boundary
21
+ to act inside rather than as a leash. His one-liner remark ("I expect to have
22
+ one liner the user can send to LLM, and then the rest is done by AI") was about
23
+ setup, not the interview, and is no longer used for it; the interview follows
24
+ his own grilling instruction instead (below).
25
+
26
+ On bringing in a session they already run: "yes the session history shall be
27
+ able to resume, i.e., resume an external session, the rest is best effort
28
+ migrated with llm capability", and, correcting a restatement of it, "as the
29
+ setup is done via llm, including future setup via the bot manager, the llm does
30
+ best effort to help user migrate". That is where "best effort, and say so
31
+ plainly" comes from.
32
+
33
+ ## This kit's own design
34
+
35
+ The PRD and the ADRs carry the rest: the line-up suggestions and the
36
+ role-to-skills guidance (PRD 6.8, ADR 0019, which puts that table in the
37
+ management skill), a session's settings and the rule that the kit never
38
+ hardcodes a model id, the approval levels and that the widest one is used only
39
+ when the user asks for it in plain words, the two plain defaults that no
40
+ silent fallback happens and that a role limit such as "read-only, does not
41
+ modify" is a normal part of a charter (PRD 6.4 and 6.6), and pinning an online
42
+ skill source to a version with a word about what a source carrying scripts or
43
+ hooks means (PRD 6.7).
44
+
45
+ ## Ideas taken from material with no licence
46
+
47
+ The research pack's `grok-bot-lessons.md` gathers how one hosted bot product is
48
+ run. Its material comes from a knowledge base and from that product's own
49
+ marketplace and documentation pages. No licence is attached to those pages, and
50
+ the pack's own caution records that the marketplace entries were summarised by
51
+ a fetch tool rather than read verbatim. So no text of theirs is reproduced
52
+ here, and none of it was read as text worth copying. What was taken is the
53
+ idea, restated:
54
+
55
+ - that a bot is a job somebody holds rather than a prompt that came out well,
56
+ and is named after a job a person could hold;
57
+ - that the thing worth writing down is what it owns, what good looks like, and
58
+ what it must not do without asking;
59
+ - that an interview at creation is what writes that down;
60
+ - that a bot an existing one could own the work of should not be created;
61
+ - that a role needing several unrelated verbs is more than one role, that the
62
+ split goes by domain rather than by how much work there is, and that a
63
+ specialist is worth adding only when a real bottleneck has shown up: a noisy
64
+ shared context, a bot that cannot review its own work, or permissions that
65
+ have diverged;
66
+ - that instructions have three lifetimes, the durable role, the one assignment
67
+ and the reusable procedure, and that a one-off correction must not quietly
68
+ become a rule.
69
+
70
+ ## What was deliberately not taken
71
+
72
+ That source's creation interview fills a fixed list of about ten fields. This
73
+ skill asks three questions and stops. The owner settled the charter at three,
74
+ and the rest of what a bot needs is settings, which are not an interview.
75
+
76
+ Its bot-classification vocabulary is not here either; reviewing a fleet that
77
+ already exists is a different job and lives in `obk-fleet-review`.
78
+
79
+ ## Sources that need no third-party notice
80
+
81
+ Everything above is either this kit's own design, the owner's own words, or an
82
+ idea restated in our own words from material that carries no licence. Nothing
83
+ in this skill reproduces a third party's text, so there is no permission notice
84
+ to pass on. See [LICENSES.md](LICENSES.md).
85
+
86
+ ## What the re-validation changed (#156)
87
+
88
+ - The charter questions are asked together, each with a drafted answer, not
89
+ one at a time: the owner asked to be asked three questions at a time with a
90
+ recommended answer (research-pack dialogue, 2026-09-19 13:24, with matt's
91
+ grilling loaded), and
92
+ his usage review complains of one question per turn.
93
+ - The answer handed back is the roster card PRD 6.8 decides (name, harness,
94
+ model and effort, a two-line charter, one hard limit).
95
+ - The skills for each role are named, since ADR 0019 puts that choice in the
96
+ management skill.
97
+ - What the command line does and does not do, checked against `obk --help`:
98
+ `obk skills fetch` was missing; a charter, settings or list change is an
99
+ edit plus `obk rules build` or `obk skills build`; pausing or retiring has
100
+ no command. Each management action is committed (PRD 6.10). Issue #158 later
101
+ gave changing, pausing and retiring their commands, and the hand edit is
102
+ left for the special case, said so.
103
+ - A change of model, effort or approval reaches a session only by `obk
104
+ restart`, on the user's word, and a whole-fleet restart is done from the ops
105
+ tab (PRD 6.5).
106
+ - Bringing in a session: the outside id goes into the book by hand, and a
107
+ resume across folders is to be tried before it is promised.
108
+ - Cut: a paragraph restating the opening, and two sentences of framing.
109
+ - Memory per bot is the owner's decision of 2026-09-23 (issue #211): a bot may
110
+ turn on its harness's memory for itself, since the owner's global setting is
111
+ off. The three Claude Code keys, and that without `autoMemoryDirectory` every
112
+ bot in the repo shares one memory, were measured live and are in the tech
113
+ notes; Codex's memories are the user's and cannot be one bot's.
@@ -0,0 +1,312 @@
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
+ A session that works on files of its own gets a work dir inside the bot's
117
+ folder, under `work/`: `--work-dir work/<session>`. Every clone it needs goes
118
+ in there too, not beside the bots folder or anywhere else outside the bot
119
+ home. Where the user names another place in plain words, that place is the
120
+ work dir, and its clones go there. `work/` is kept out of the bots repo, and a
121
+ path written relative to the bot home still points at the right folder when
122
+ the bots folder moves. `obk session add` and `obk session change` say so when a
123
+ work dir leads out of the bot home; take that back to the user rather than
124
+ past them.
125
+
126
+ ## Offer a line-up rather than a blank page
127
+
128
+ Someone making their first bots does not know what a good set looks like, so
129
+ propose one and say what each part is for. A pair of developers, perhaps on
130
+ different models, with an architect over them: each developer works an issue
131
+ of its own, and the architect hands out the issues, settles disagreements and
132
+ digs into the hard causes. A workhorse, a writer and a thinker, for work that
133
+ is not development.
134
+
135
+ Suggestions only: they take out or rename what they like, and you build what
136
+ they end up with.
137
+
138
+ ## A bot that writes code
139
+
140
+ Its tests come from a different author than its code, and its work is read
141
+ by a different reviewer. Write it that way in the charter and the start
142
+ prompts: "a different author", "a different reviewer". Which kind each one
143
+ is, a fresh subagent, a new session, another bot or a person, is the user's
144
+ to say. Ask them, and write what they chose; where they leave it open, leave
145
+ it open. Do not choose for them: the kind you write becomes the rule. A
146
+ line-up that hands one developer's tests to the other has two sessions on
147
+ every issue and loses the pair's parallel work.
148
+
149
+ The kit's `tests-first` and `review` rule units say this. They apply to code,
150
+ so a bot carries them only when its `rules:` list in `bot.yaml` names them,
151
+ as `kit:tests-first` and `kit:review`; add them to a code-writing bot's list
152
+ by hand and run `obk rules build`.
153
+
154
+ ## Give it the skills the job needs, and no more
155
+
156
+ Match the skills to the work, not to the title. Something that mostly finds
157
+ things out wants `obk-researching`; something that writes for people wants
158
+ `obk-writing`; a bot that decides wants `obk-decision-memo`. A developer bot
159
+ wants `obk-tdd`, `obk-reviewing` and `obk-debugging`, a reviewer the reviewing
160
+ one above all, and an architect `obk-arch` on top. Someone's own errands want
161
+ `obk-personal-facilitation`.
162
+
163
+ Every extra skill is more for the bot to read and one more thing that might
164
+ fire when it should not. Where you are not sure, leave it out and add it when
165
+ the job shows it is missing.
166
+
167
+ A skill can come from the kit, from the user's own folder, from a repo
168
+ online, or from a path on disk. An online source is pinned to a version, and
169
+ it is worth saying out loud that a source carrying scripts or hooks runs on
170
+ their machine on their risk.
171
+
172
+ ## Bringing in a session they already run
173
+
174
+ Someone moving in usually has a conversation going that they do not want to
175
+ lose. Take the harness's own id for it and record it against the session in
176
+ the book (by hand, since no command takes an outside id), and `obk up` brings
177
+ it back with its history; then read its tab and answer what is on screen
178
+ (see "When a tab it opened is waiting"). Whether a harness resumes a conversation that was
179
+ started in another folder is something to try before promising.
180
+
181
+ Everything else is best effort, and say so plainly rather than promising a
182
+ clean move: what was in that session's own settings, the rules it worked to,
183
+ the skills it had. Carry across what you can find, list what you could not,
184
+ and let them tell you what mattered.
185
+
186
+ ## Write it down
187
+
188
+ The kit's command line does the writing, and the files belong to the user:
189
+ `obk bot create` makes the bot, `obk session add` gives it a session, `obk
190
+ source add` records where online skills come from and `obk skills fetch`
191
+ clones them, `obk skills add` puts one on a bot, `obk skills build` links
192
+ them, and `obk up` opens what is missing in Orca. `obk bot change` gives a
193
+ bot a new charter, `obk session change` changes a session's settings, and
194
+ `obk skills remove` takes a skill off a list (then `obk skills build`). `obk
195
+ pause` stops a bot or a session for now and `obk unpause` brings it back;
196
+ `obk retire` ends one. After `obk up`, `obk restart` or `obk unpause`, read
197
+ every tab it opened and answer what is on screen yourself (next section).
198
+ For a special case no command covers, such as a bot's
199
+ rules list, edit the file, run `obk rules build` or `obk skills build`, and
200
+ say that you edited it by hand.
201
+ Run `obk --help` for the flags of the version actually installed rather than
202
+ trusting a line you remember.
203
+
204
+ A bot that should learn across its sessions can use its harness's own memory,
205
+ turned on for that bot alone, whatever the user's own setting is for everything
206
+ else. The harness writes it, loads it and keeps it tidy itself. On Claude Code
207
+ that is three keys in the bot's `.claude/settings.json`, beside the kit's hook:
208
+ `autoMemoryEnabled: true`; `env` setting `CLAUDE_CODE_DISABLE_AUTO_MEMORY` to
209
+ `"0"` where the user turns memory off that way; and `autoMemoryDirectory`
210
+ naming a folder of the bot's own outside the bots repo, by an absolute path or
211
+ one starting with `~/`, because without it
212
+ every bot in the repo shares one memory. The first 200 lines or 25 KB of its
213
+ index load at every start. Codex's memories belong to the user and are shared
214
+ by every Codex session, so a Codex bot cannot have its own; say so before
215
+ turning them on for one. It is a hand edit, and say that you made it.
216
+
217
+ After each change, commit what it changed in the bots folder; the kit never
218
+ commits by itself.
219
+
220
+ Do the reversible part and stop at the line. Making a bot, adding a session
221
+ and linking skills add things and are safe to run again; closing a tab,
222
+ pausing or retiring a bot and restarting anything are not, and they wait for
223
+ the word.
224
+
225
+ ## When a tab it opened is waiting
226
+
227
+ A new tab often stops on a first-run screen before the session starts:
228
+ the harness asking whether to trust the folder, Codex asking to review
229
+ hooks, a harness offering its own update, the shell offering to update
230
+ itself. Answering these is your job, not the user's. Answer them in the tab
231
+ yourself, without asking, and tell the user afterwards what you answered.
232
+ The kit types the launch line and nothing more, so no one else will.
233
+
234
+ Look at every tab `obk up`, `obk restart` or `obk unpause` opened, not only
235
+ the ones it says are waiting. The kit cannot always tell: a tab stopped on a
236
+ trust screen is often reported as up, Claude Code's every time and Codex's
237
+ sometimes. Read each screen with `<orca> terminal read --terminal <handle>
238
+ --screen`, where `<handle>` is the terminal the kit named for the tab and
239
+ `<orca>` is the Orca CLI the kit uses: `$OBK_ORCA` when that is set, and
240
+ otherwise `/Applications/Orca.app/Contents/Resources/bin/orca`. A bare
241
+ `orca` can fail. Send each answer as one `<orca> terminal send --terminal
242
+ <handle> --text …`, with the return inside the text and no `--enter`:
243
+
244
+ | On screen | Send | Which is |
245
+ |---|---|---|
246
+ | Claude Code's folder trust list | `\x1b[B\r` | down, return: it starts on **No, exit** |
247
+ | Codex's `Trust this folder?`, `1. Trust and continue` | `1\r` | yes (older: `1. Yes, continue`) |
248
+ | Codex's `Hooks need review` | `2\r` | trust all and continue |
249
+ | Codex's `/new`: `Where should the new conversation run?` | `1\r` | current checkout (bot home) |
250
+ | Codex's update offer, `1. Update now` | `1\r` | accept it |
251
+ | `[oh-my-zsh] Would you like to update?` | `n` | no: the shell is the user's to update |
252
+ | Claude Code's `Teach auto mode about…` | `2\r` | **Not now**: it writes the user's settings |
253
+
254
+ Read the numbers off the screen in front of you rather than trusting the
255
+ table: a harness that has added an option has moved them. Codex's hooks
256
+ question matters most. The kit's hook is how the book learns which
257
+ conversation the session is running, and until it is answered the
258
+ conversation has not started. Codex's trust applies to the repository root,
259
+ which is the whole bots folder. Codex's `/new` asks where the new
260
+ conversation runs; the answer is always the current checkout, the bot home,
261
+ and never `2. New worktree`: the kit never makes a git worktree.
262
+
263
+ Where the kit says no session came up, the shell swallowed the launch line,
264
+ usually while it was asking its own question. Answer the shell, then close
265
+ that one tab (`<orca> terminal close --terminal <handle> --tab`) and run
266
+ `obk up` again. This is the one tab you may close without asking: the kit
267
+ opened it a moment ago, and it holds no conversation.
268
+
269
+ A screen you do not recognise gets no keypress. Take what it says, and which
270
+ bot and tab it is in, to the user. When you have answered, read the screen
271
+ again and check a session is running before you call the bot ready.
272
+
273
+ ## When the bot is already running
274
+
275
+ Changing a bot whose sessions are up is the ordinary case rather than the
276
+ awkward one. Both harnesses read a skill through the link and notice a change
277
+ to the skills directory while a session is running, so putting a skill on a
278
+ bot, or taking one off, reaches a live session without restarting it.
279
+
280
+ Noticing is not the same as confirmed. Check that the session can actually see
281
+ the skill before telling anyone it is there, and check by asking that session
282
+ rather than by looking again at the disk you just wrote: what you wrote is not
283
+ evidence about what another process has loaded. Where it has not appeared, say
284
+ so and say what would make it appear. A restart is the user's to ask for, and
285
+ taking one because it is the quick way ends a conversation they were in the
286
+ middle of.
287
+
288
+ Instructions are not skills. A session is working from the rules it read when
289
+ it started, so a change to a bot's `AGENTS.md` may not reach one that is
290
+ already up even when a skill change would, and a session's model, effort or
291
+ approval only changes when it is started again (`obk restart`, on the user's
292
+ word, and then read its tabs as above). Say which you changed, and what that
293
+ means for the sessions running now. Where everything needs restarting, remind
294
+ them to do it from Bot Father's ops tab.
295
+
296
+ And tell them. A bot's sessions share its rules and its skills, so a change
297
+ made for one of them lands on all of them, and the session that asked is not
298
+ the only one affected. Say what changed and what it means for what they are
299
+ doing, in their own tabs, rather than leaving them to find out mid-task.
300
+
301
+ ## What they get back
302
+
303
+ Its card: the name, the harness, model and effort of its sessions, a two-line
304
+ charter, and its one hard limit. Its sessions and what each is for. The skills
305
+ it has and where they came from. And the one thing you need from them, where
306
+ something is still open.
307
+
308
+ Point at the charter rather than reproducing it, and say what you inferred
309
+ rather than what they told you, so the parts they have not really agreed to
310
+ are the parts they read.
311
+
312
+ 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.