@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.
- package/LICENSE +21 -0
- package/README.md +548 -3
- package/SETUP.md +275 -0
- package/package.json +32 -13
- package/rules/evidence.md +15 -0
- package/rules/finishing.md +23 -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 +22 -0
- package/rules/simple.md +14 -0
- package/rules/talk.md +13 -0
- package/rules/tests-first.md +17 -0
- package/rules/the-ask.md +19 -0
- package/skills/obk-arch/LICENSES.md +52 -0
- package/skills/obk-arch/NOTICE.md +242 -0
- package/skills/obk-arch/SKILL.md +598 -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 +312 -0
- package/skills/obk-debugging/LICENSES.md +67 -0
- package/skills/obk-debugging/NOTICE.md +115 -0
- package/skills/obk-debugging/SKILL.md +434 -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 +148 -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 +256 -0
- package/skills/obk-grilling/LICENSES.md +42 -0
- package/skills/obk-grilling/NOTICE.md +111 -0
- package/skills/obk-grilling/SKILL.md +221 -0
- package/skills/obk-grooming/LICENSES.md +52 -0
- package/skills/obk-grooming/NOTICE.md +111 -0
- package/skills/obk-grooming/SKILL.md +222 -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 +269 -0
- package/skills/obk-reviewing/LICENSES.md +66 -0
- package/skills/obk-reviewing/NOTICE.md +58 -0
- package/skills/obk-reviewing/SKILL.md +411 -0
- package/skills/obk-tdd/LICENSES.md +68 -0
- package/skills/obk-tdd/NOTICE.md +54 -0
- package/skills/obk-tdd/SKILL.md +547 -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 +180 -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 +1169 -0
- package/src/conversations.js +150 -0
- package/src/groom.js +159 -0
- package/src/health.js +309 -0
- package/src/hooks.js +257 -0
- package/src/init.js +314 -0
- package/src/launch.js +299 -0
- package/src/message.js +402 -0
- package/src/orca.js +362 -0
- package/src/pause.js +63 -0
- package/src/record.js +209 -0
- package/src/restart.js +193 -0
- package/src/retire.js +92 -0
- package/src/roster.js +71 -0
- package/src/rules.js +408 -0
- package/src/skills.js +630 -0
- package/src/sources.js +371 -0
- package/src/up.js +500 -0
- package/src/usage.js +401 -0
- package/bin/okb.js +0 -4
- 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.
|