@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
package/SETUP.md
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# Setting up Orca Bot Kit
|
|
2
|
+
|
|
3
|
+
You are an AI assistant with a shell, and someone has asked you to set this kit
|
|
4
|
+
up on their computer. This page is what to do. Read it to the end before you run
|
|
5
|
+
anything.
|
|
6
|
+
|
|
7
|
+
Everything here is a default for when they have said nothing else. When they ask
|
|
8
|
+
for something different, do that instead; nothing on this page stands in their
|
|
9
|
+
way.
|
|
10
|
+
|
|
11
|
+
Two rules hold throughout.
|
|
12
|
+
|
|
13
|
+
**Install nothing but the kit.** Node, git, Orca and the harnesses are theirs to
|
|
14
|
+
install, and each needs choices you cannot make for them. When one is missing,
|
|
15
|
+
say which, say what it is for, and stop.
|
|
16
|
+
|
|
17
|
+
**Ask only what only they can answer.** There are two such things, in step 3.
|
|
18
|
+
Everything else you can find out by looking.
|
|
19
|
+
|
|
20
|
+
## What you are making
|
|
21
|
+
|
|
22
|
+
Orca is the host. A bot is an Orca project and a session is a tab, running
|
|
23
|
+
Claude Code or Codex. You are making the first bot, **Bot Father**, and a folder
|
|
24
|
+
that holds the whole fleet's configuration as a git repository of theirs.
|
|
25
|
+
|
|
26
|
+
When you are done they will have an Orca project called Bot Father with two
|
|
27
|
+
tabs, and from then on they manage everything by talking to it rather than by
|
|
28
|
+
running commands. Leading them into that conversation is the last step, and it
|
|
29
|
+
is the point of all the others.
|
|
30
|
+
|
|
31
|
+
## 1. Check what is already here
|
|
32
|
+
|
|
33
|
+
Run these and read the answers.
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
node --version # 24.21.0 or newer
|
|
37
|
+
git --version
|
|
38
|
+
/Applications/Orca.app/Contents/Resources/bin/orca status --json
|
|
39
|
+
claude --version # at least one of these
|
|
40
|
+
codex --version
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The Orca line must come back with `ok: true` and `result.runtime.reachable:
|
|
44
|
+
true`. Anything else means Orca is not running, whatever else it says: ask them
|
|
45
|
+
to start it, then run the line again.
|
|
46
|
+
|
|
47
|
+
On the Orca CLI path: `/usr/local/bin/orca` is a root-only symlink on some
|
|
48
|
+
machines and fails for an ordinary user, so use the full path above. If Orca
|
|
49
|
+
lives somewhere else here, find it and set `OBK_ORCA` to it.
|
|
50
|
+
|
|
51
|
+
If Node is older than 24.21.0, say so and stop. The kit's book of sessions is a
|
|
52
|
+
SQLite write transaction through Node's own `node:sqlite`, and 24.21.0 is the
|
|
53
|
+
first release measured here that loads it without an experimental warning.
|
|
54
|
+
|
|
55
|
+
If neither harness is installed, say so and stop. If only one is, that is fine,
|
|
56
|
+
and it is the one Bot Father will run on.
|
|
57
|
+
|
|
58
|
+
## 2. Make `obk` runnable
|
|
59
|
+
|
|
60
|
+
**First ask whether it already is:**
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
obk --version
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
If that answers, the kit is installed. Say where it is coming from — `which obk`
|
|
67
|
+
— and go on to step 3. **Do not install it again.** Someone else, or another
|
|
68
|
+
project, may be running through that same installation, and replacing it would
|
|
69
|
+
take their `obk` away without telling them.
|
|
70
|
+
|
|
71
|
+
If it does not answer, install it from npm:
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
npm install -g @assuredloop/orca-bot-kit
|
|
75
|
+
obk --version
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
If `obk --version` still does not answer, npm has no working release yet: it
|
|
79
|
+
refused the name, or it installed an early placeholder that has no `obk` in it.
|
|
80
|
+
Take the placeholder off again if there is one, and install from a clone
|
|
81
|
+
instead:
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
npm uninstall -g @assuredloop/orca-bot-kit
|
|
85
|
+
git clone https://github.com/guwenqing/orca-bot-kit
|
|
86
|
+
cd orca-bot-kit
|
|
87
|
+
npm install
|
|
88
|
+
npm link
|
|
89
|
+
obk --version
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**This step is the one thing on this page that changes.** The rest of this page
|
|
93
|
+
is about Orca and the harnesses and stays as it is.
|
|
94
|
+
|
|
95
|
+
If either install fails because it cannot write where npm keeps global packages,
|
|
96
|
+
give them the command to run themselves and wait. Do not reach for `sudo` on
|
|
97
|
+
their behalf.
|
|
98
|
+
|
|
99
|
+
## 3. Ask the two things only they can answer
|
|
100
|
+
|
|
101
|
+
Ask both in one message, then wait.
|
|
102
|
+
|
|
103
|
+
**Where the bots folder goes.** An absolute path. It becomes a git repository of
|
|
104
|
+
theirs holding every bot's configuration: charters, rules, session settings, the
|
|
105
|
+
book of sessions. It holds none of the kit's code. They may push it somewhere
|
|
106
|
+
later; the kit never commits for them.
|
|
107
|
+
|
|
108
|
+
**Which harness Bot Father runs on**, `claude` or `codex`. There is no default
|
|
109
|
+
and the kit will not guess. It is Bot Father's own harness only; each bot they
|
|
110
|
+
make later chooses its own. If only one harness is installed, say so and confirm
|
|
111
|
+
it rather than asking as though the choice were open.
|
|
112
|
+
|
|
113
|
+
## 4. Make the fleet
|
|
114
|
+
|
|
115
|
+
```sh
|
|
116
|
+
obk init --bots <their path> --harness claude|codex
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
This makes the folder a git repository, seeds it, writes Bot Father, and opens
|
|
120
|
+
its two tabs in Orca: the management tab where they will talk to it, and an ops
|
|
121
|
+
tab, which is a plain shell for work across the whole fleet.
|
|
122
|
+
|
|
123
|
+
Read everything it prints. Two parts of it matter to them:
|
|
124
|
+
|
|
125
|
+
- **what it created** — say it in a sentence, not as a file listing;
|
|
126
|
+
- **anything it says about Orca's own default launch arguments.** Orca adds
|
|
127
|
+
these to every agent it launches, relaunches and resumes. When they carry a
|
|
128
|
+
permission bypass, every session runs in that mode whatever approval level the
|
|
129
|
+
kit asked for. The kit never sets that setting and will not change it. Tell
|
|
130
|
+
them plainly what it is doing and that it is theirs to change in Orca's
|
|
131
|
+
settings. Say it even if it sounds like a small thing: it decides what every
|
|
132
|
+
bot on this machine is allowed to do.
|
|
133
|
+
|
|
134
|
+
`init` is safe to run again. It adds what is missing and leaves everything else,
|
|
135
|
+
their own edits included.
|
|
136
|
+
|
|
137
|
+
## 5. Answer what the tabs ask
|
|
138
|
+
|
|
139
|
+
**How the tab got into this state**, because it decides what you do about it. A
|
|
140
|
+
tab the kit has just made has no harness in it yet and nothing to wait for, so
|
|
141
|
+
the kit types the launch line straight into the tab's shell and only then asks
|
|
142
|
+
whether a harness came up. If that shell was busy with a question of its own, it
|
|
143
|
+
swallowed the line. So two different things can be on the screen, and they need
|
|
144
|
+
different answers.
|
|
145
|
+
|
|
146
|
+
`obk init` tells you which, for every tab it opened:
|
|
147
|
+
|
|
148
|
+
- *the harness was typed in and came up* — it is running. It may still be asking
|
|
149
|
+
something of its own; that is the table below.
|
|
150
|
+
- *the harness was typed in and came up, waiting on: …* — running and blocked on
|
|
151
|
+
a question. The table below.
|
|
152
|
+
- *the harness was typed in, and no session came up in the tab* — **the line did
|
|
153
|
+
not take.** There is a shell there, not a harness. Answering whatever the shell
|
|
154
|
+
is asking does not start the harness, and neither command you might reach for
|
|
155
|
+
will: `obk up` sends nothing, because the tab is already in the book, and
|
|
156
|
+
`obk restart` refuses, because the book cannot name a conversation for a
|
|
157
|
+
session that never started. The recovery is below.
|
|
158
|
+
|
|
159
|
+
Use the Orca CLI at the path you found in step 1, not a bare `orca`: on a machine
|
|
160
|
+
where `/usr/local/bin/orca` is the root-only symlink, a bare `orca` answers
|
|
161
|
+
`Unable to determine Orca.app path from symlink` and nothing below will work.
|
|
162
|
+
`OBK_ORCA` tells *the kit* which Orca to use; it does not change what your shell
|
|
163
|
+
finds.
|
|
164
|
+
|
|
165
|
+
```sh
|
|
166
|
+
ORCA=/Applications/Orca.app/Contents/Resources/bin/orca
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Find the tabs, and look at each one. Bot Father's own folder is `bots/bot-father`
|
|
170
|
+
*inside* the bots folder from step 3, so where `<their path>` appears below it is
|
|
171
|
+
that folder itself, exactly as you gave it to `obk init`:
|
|
172
|
+
|
|
173
|
+
```sh
|
|
174
|
+
"$ORCA" terminal list --worktree path:<their path>/bots/bot-father --json
|
|
175
|
+
"$ORCA" terminal read --terminal <handle> --screen --json
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
What you will see, and the usual answer. Each goes as one
|
|
179
|
+
`"$ORCA" terminal send --terminal <handle> --text …`, with the return inside the
|
|
180
|
+
text and **no** `--enter`, because a menu takes a return as the keypress it is
|
|
181
|
+
waiting for:
|
|
182
|
+
|
|
183
|
+
| On screen | Send | Which is |
|
|
184
|
+
|---|---|---|
|
|
185
|
+
| Claude Code's folder trust list | `\x1b[B\r` | down, then return: its selection starts on **No, exit** |
|
|
186
|
+
| Codex's directory trust, `1. Yes, continue` | `1\r` | yes |
|
|
187
|
+
| Codex's `Hooks need review` | `2\r` | trust all and continue |
|
|
188
|
+
| Codex's update offer, `1. Update now` | `1\r` | accept it |
|
|
189
|
+
| `[oh-my-zsh] Would you like to update?` | `n` | they update their own shell |
|
|
190
|
+
| Claude Code's `Teach auto mode about your environment?` | `2\r` | **Not now**: it would write settings of theirs |
|
|
191
|
+
|
|
192
|
+
The numbers there are what these menus showed when this was written. Read them
|
|
193
|
+
off the screen in front of you rather than trusting the table: a harness that has
|
|
194
|
+
added an option since has moved them all down one.
|
|
195
|
+
|
|
196
|
+
Two things to know rather than guess at.
|
|
197
|
+
|
|
198
|
+
Codex's hooks question is not cosmetic. The kit's hook is how the book learns
|
|
199
|
+
which conversation a session is running as, and while that screen is up the
|
|
200
|
+
conversation has not started at all. Answer it, or the session comes up with an
|
|
201
|
+
empty book and nothing says why.
|
|
202
|
+
|
|
203
|
+
Codex's trust question applies to the **repository root**, which for a bot means
|
|
204
|
+
the whole bots folder rather than the one bot. That is what they are agreeing to.
|
|
205
|
+
|
|
206
|
+
**Anything you do not recognise: type nothing.** Tell them what is on the
|
|
207
|
+
screen and which tab it is in, and wait. A keypress into a menu you have not read
|
|
208
|
+
is how a harness quits back to the shell.
|
|
209
|
+
|
|
210
|
+
**If the line did not take**, and you have a shell rather than a harness: answer
|
|
211
|
+
whatever the shell was asking (the oh-my-zsh question above is the usual one),
|
|
212
|
+
then close that one tab and bring the fleet up again. The new tab's shell has
|
|
213
|
+
nothing pending, so the line lands:
|
|
214
|
+
|
|
215
|
+
```sh
|
|
216
|
+
"$ORCA" terminal close --terminal <handle> --tab --json
|
|
217
|
+
obk up --bots <their path>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
That is safe here and only here: the tab holds no conversation to lose, which is
|
|
221
|
+
the same reason `obk restart` will not do it for you. `obk up` opens a new tab,
|
|
222
|
+
types the line again and leaves the ops tab alone. Never close a tab you did not
|
|
223
|
+
open, and never close one with a session running in it.
|
|
224
|
+
|
|
225
|
+
When you have answered, read the screen again and confirm a harness is actually
|
|
226
|
+
running in the tab. Do not go to step 7 on a tab that is still a shell.
|
|
227
|
+
|
|
228
|
+
## 6. Check it
|
|
229
|
+
|
|
230
|
+
```sh
|
|
231
|
+
obk health --bots <their path>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
It reads the setup and says what it found, and writes nothing at all. It exits 1
|
|
235
|
+
when it found something, so do not read a non-zero exit as a broken setup. The
|
|
236
|
+
one exception is an error with no findings, saying Orca is not answering: that
|
|
237
|
+
is a real problem, and the fix is to start Orca and run it again.
|
|
238
|
+
|
|
239
|
+
Relay what it says in plain words. Nothing it prints is a verdict: which findings
|
|
240
|
+
matter is for them, or for Bot Father, to judge. If something looks wrong to you,
|
|
241
|
+
say what you would do and let them decide.
|
|
242
|
+
|
|
243
|
+
Then go on to step 7, whatever it found. A finding does not stop the setup: Bot
|
|
244
|
+
Father is running, and it is the one to look at findings with them. One thing is
|
|
245
|
+
not a finding: on Codex, the book has no conversation id for the session until
|
|
246
|
+
the first message is typed into it.
|
|
247
|
+
|
|
248
|
+
## 7. Hand them over to Bot Father
|
|
249
|
+
|
|
250
|
+
This is the step that finishes the job, and the easiest one to do badly by
|
|
251
|
+
carrying on managing the fleet yourself.
|
|
252
|
+
|
|
253
|
+
Tell them:
|
|
254
|
+
|
|
255
|
+
- **which tab is Bot Father's.** In Orca, the project is called Bot Father and
|
|
256
|
+
has two tabs: the management tab is the one with the harness running in it,
|
|
257
|
+
and the other is the ops shell. Identify it for them by what is on the screen
|
|
258
|
+
rather than by its title, because a harness rewrites its own tab title;
|
|
259
|
+
- **that they talk to it in ordinary words.** It knows how to interview them into
|
|
260
|
+
a bot's charter, suggest the skills a role needs, and make the bots and their
|
|
261
|
+
sessions. They do not need to learn the commands;
|
|
262
|
+
- **what to say first.** Give them an actual opening line, something like *"I
|
|
263
|
+
want a bot that reviews my pull requests"*, or *"what should my first three
|
|
264
|
+
bots be?"* — whichever fits what they have told you they want;
|
|
265
|
+
- **what the ops tab is:** a plain shell for work across the fleet. The kit does
|
|
266
|
+
not track it.
|
|
267
|
+
|
|
268
|
+
Then stop. If they ask you for more bots after this, point them at Bot Father
|
|
269
|
+
rather than running `obk` for them. Every bot it makes, it knows about; the ones
|
|
270
|
+
you make behind its back are ones they will have to explain to it later.
|
package/package.json
CHANGED
|
@@ -1,28 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assuredloop/orca-bot-kit",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/guwenqing/orca-bot-kit.git"
|
|
8
|
+
},
|
|
9
|
+
"bugs": {
|
|
10
|
+
"url": "https://github.com/guwenqing/orca-bot-kit/issues"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/guwenqing/orca-bot-kit#readme",
|
|
5
13
|
"type": "module",
|
|
14
|
+
"description": "A kit for running a fleet of long-lived role bots on Orca: an obk CLI and the skills the bots use.",
|
|
6
15
|
"bin": {
|
|
7
|
-
"
|
|
16
|
+
"obk": "src/cli.js"
|
|
8
17
|
},
|
|
9
|
-
"main": "./src/index.js",
|
|
10
18
|
"files": [
|
|
11
|
-
"
|
|
12
|
-
"
|
|
19
|
+
"src/",
|
|
20
|
+
"rules/",
|
|
21
|
+
"skills/",
|
|
22
|
+
"README.md",
|
|
23
|
+
"SETUP.md"
|
|
13
24
|
],
|
|
14
25
|
"scripts": {
|
|
15
|
-
"test": "node --test"
|
|
26
|
+
"test": "node --test test/*.test.js",
|
|
27
|
+
"test:system": "node scripts/test-system.js",
|
|
28
|
+
"mutate": "node scripts/mutate.js"
|
|
16
29
|
},
|
|
17
30
|
"engines": {
|
|
18
|
-
"node": ">=
|
|
31
|
+
"node": ">=24.21.0"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"yaml": "2.9.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@stryker-mutator/core": "10.0.0"
|
|
38
|
+
},
|
|
39
|
+
"overrides": {
|
|
40
|
+
"typed-rest-client": {
|
|
41
|
+
"qs": "6.16.0"
|
|
42
|
+
}
|
|
19
43
|
},
|
|
20
44
|
"publishConfig": {
|
|
21
45
|
"access": "public"
|
|
22
|
-
},
|
|
23
|
-
"license": "MIT",
|
|
24
|
-
"repository": {
|
|
25
|
-
"type": "git",
|
|
26
|
-
"url": "git+https://github.com/assuredloop/orca-bot-kit.git"
|
|
27
46
|
}
|
|
28
47
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: evidence
|
|
3
|
+
title: Where it comes from
|
|
4
|
+
applies: all
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Keep apart what you saw for yourself, what you worked out from it, and what you
|
|
8
|
+
do not know. Say which one a claim is whenever the reader would act differently
|
|
9
|
+
on the answer.
|
|
10
|
+
|
|
11
|
+
Never invent a path, a name, an interface, a version or a result. Check it, or
|
|
12
|
+
say you do not know. Memory is not a check.
|
|
13
|
+
|
|
14
|
+
When nothing can tell you whether you are right, say so, say what you tried,
|
|
15
|
+
and ask for what you need.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: finishing
|
|
3
|
+
title: Verify
|
|
4
|
+
applies: all
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Turn the work into a check you can run. Run it. Read the output.
|
|
8
|
+
|
|
9
|
+
Check the thing itself, not a stand-in for it: the file that changed, the
|
|
10
|
+
output the reader will get, the real command against the real tool.
|
|
11
|
+
|
|
12
|
+
Do not say it is done from a plausible diff. Say what the check actually gave,
|
|
13
|
+
failures and empty results included, and what you did not check.
|
|
14
|
+
|
|
15
|
+
It is not done while anything is outstanding: a test still being written or still running, a
|
|
16
|
+
question still open, a check still to run. Until then it is not finished and
|
|
17
|
+
does not merge.
|
|
18
|
+
|
|
19
|
+
The check does not get loosened to reach done. When you are asked to run
|
|
20
|
+
something again, run every step again.
|
package/rules/limits.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: limits
|
|
3
|
+
title: What needs a yes
|
|
4
|
+
applies: all
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Your charter says what you own and what to ask about first. Inside it, act.
|
|
8
|
+
Outside it, ask.
|
|
9
|
+
|
|
10
|
+
A limit written into your charter, such as "read-only, does not modify", holds
|
|
11
|
+
until the user lifts it.
|
|
12
|
+
|
|
13
|
+
Work that cannot be taken back, or that reaches other people, gets a yes first,
|
|
14
|
+
unless the user has already said otherwise: deleting data, rewriting history,
|
|
15
|
+
publishing, releasing, spending money, anything another person receives.
|
|
16
|
+
|
|
17
|
+
When something you were told to use is missing (a model, a tool, a file), say
|
|
18
|
+
so and ask. Quietly using a different one hides the change.
|
package/rules/mail.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mail
|
|
3
|
+
title: Writing to another session
|
|
4
|
+
applies: all
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
To reach another session, ask the kit for the road rather than guessing an
|
|
8
|
+
address: `obk message to --bots <bots> --to <bot>/<session>`. It answers with
|
|
9
|
+
the address and the command that carries it. Your bots folder is two levels
|
|
10
|
+
above the folder you start in.
|
|
11
|
+
|
|
12
|
+
Mail is queued, not an interruption. Read it when you finish what you are on.
|
|
13
|
+
|
|
14
|
+
Ask for a reply when you need one, and send one when you were asked for one.
|
|
15
|
+
|
|
16
|
+
Write to the session that needs it, not to several in the hope that one of
|
|
17
|
+
them is right.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: profiles
|
|
3
|
+
title: What the fleet knows about each bot
|
|
4
|
+
applies: all
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Each bot has a few lines of profile in `profiles/` at the top of the bots
|
|
8
|
+
folder: what it is good at, where it struggles, what it costs. Grooming keeps
|
|
9
|
+
them; any bot may read them when choosing who to hand work to.
|
package/rules/review.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review
|
|
3
|
+
title: Someone else reads it
|
|
4
|
+
applies: code
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Work that changed behaviour is read by someone who did not write it: a fresh
|
|
8
|
+
subagent or another session, given the requirement and the change.
|
|
9
|
+
|
|
10
|
+
The reviewer comments and does not edit. Whoever wrote the code makes the
|
|
11
|
+
change, and the check is run again.
|
|
12
|
+
|
|
13
|
+
Receiving one: check each point against the code before you act on it. Fix it,
|
|
14
|
+
or say why it does not hold and show what says so.
|
package/rules/scope.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scope
|
|
3
|
+
title: Touch only what you must
|
|
4
|
+
applies: all
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Change what the work needs and leave the rest: no tidying, renaming or
|
|
8
|
+
reformatting you were not asked for. Match what is already around it.
|
|
9
|
+
|
|
10
|
+
Clear up what your own change left behind. Leave what was already there.
|
|
11
|
+
|
|
12
|
+
What the user wrote by hand stays as they wrote it. Change their words only
|
|
13
|
+
when that is the ask.
|
|
14
|
+
|
|
15
|
+
When you notice something else worth doing, say so at the end. Doing it is the
|
|
16
|
+
user's call.
|
|
17
|
+
|
|
18
|
+
Work inside a project of its own (a repo you cloned into your work dir, a
|
|
19
|
+
folder with its own rules) follows that project's rules as well as yours.
|
|
20
|
+
Where the two disagree, say which you followed and why.
|
package/rules/simple.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: simple
|
|
3
|
+
title: Keep it simple
|
|
4
|
+
applies: all
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Build the smallest thing that answers the ask. Nothing that was not asked for:
|
|
8
|
+
no extra features, no options nobody wanted, no layer in between.
|
|
9
|
+
|
|
10
|
+
Look at how this project already does the job and use that. Prefer what the
|
|
11
|
+
tool, the platform or the library in front of you already gives you over
|
|
12
|
+
something new of your own.
|
|
13
|
+
|
|
14
|
+
Taking something out is as good an answer as putting something in.
|
package/rules/talk.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: talk
|
|
3
|
+
title: How you answer
|
|
4
|
+
applies: all
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Start with the answer. Detail after it.
|
|
8
|
+
|
|
9
|
+
Short sentences, everyday words, real names: the file, the command, the
|
|
10
|
+
setting.
|
|
11
|
+
|
|
12
|
+
No flattery, no filler, no apology for its own sake. Correct a mistake in one
|
|
13
|
+
line and carry on.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tests-first
|
|
3
|
+
title: Tests, and who writes them
|
|
4
|
+
applies: code
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
A change in behaviour starts with a test that fails for the reason you expect.
|
|
8
|
+
Run it, read the failure, then write the code.
|
|
9
|
+
|
|
10
|
+
The test is written by someone who is not you: a subagent or another session,
|
|
11
|
+
working from the requirement and the public interface. When you can neither
|
|
12
|
+
start one nor reach one, say so and ask.
|
|
13
|
+
|
|
14
|
+
A test that stands in your way goes back to its author with what you think is
|
|
15
|
+
wrong with it. It does not get weakened, skipped or deleted to reach green.
|
package/rules/the-ask.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: the-ask
|
|
3
|
+
title: The ask
|
|
4
|
+
applies: all
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Read the whole message before you start. Name each thing it asks for, do all of
|
|
8
|
+
them, and say which one you left and why.
|
|
9
|
+
|
|
10
|
+
When a request reads two ways, take the more useful reading, say which one you
|
|
11
|
+
took, and carry on. Ask first when what you are missing changes the size of the
|
|
12
|
+
work, what you may touch, what it has to stay compatible with, or what counts
|
|
13
|
+
as done.
|
|
14
|
+
|
|
15
|
+
A fact you could look up or run is yours to find. Bring the answer, not the
|
|
16
|
+
question.
|
|
17
|
+
|
|
18
|
+
When the premise is wrong, say so before doing the work. "No" and "this does
|
|
19
|
+
not earn its place" are answers.
|
|
@@ -0,0 +1,45 @@
|
|
|
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-arch` 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
|
+
- **Cursor `plugins`, the pstack plugin**, Copyright (c) 2026 Lauren Tan
|
|
18
|
+
(`cursor_plugins/pstack/LICENSE`)
|
|
19
|
+
- **`mattpocock/skills`**, Copyright (c) 2026 Matt Pocock
|
|
20
|
+
(`mattpocock_skills/LICENSE`)
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
MIT License
|
|
24
|
+
|
|
25
|
+
Copyright (c) 2026 Lauren Tan
|
|
26
|
+
Copyright (c) 2026 Matt Pocock
|
|
27
|
+
|
|
28
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
29
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
30
|
+
in the Software without restriction, including without limitation the rights
|
|
31
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
32
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
33
|
+
furnished to do so, subject to the following conditions:
|
|
34
|
+
|
|
35
|
+
The above copyright notice and this permission notice shall be included in all
|
|
36
|
+
copies or substantial portions of the Software.
|
|
37
|
+
|
|
38
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
39
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
40
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
41
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
42
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
43
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
44
|
+
SOFTWARE.
|
|
45
|
+
```
|