@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
package/SETUP.md ADDED
@@ -0,0 +1,275 @@
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. Trust and continue` (older: `1. Yes, continue`) | `1\r` | yes |
187
+ | Codex's `Hooks need review` | `2\r` | trust all and continue |
188
+ | Codex's `/new`: `Where should the new conversation run?` | `1\r` | current checkout (bot home) |
189
+ | Codex's update offer, `1. Update now` | `1\r` | accept it |
190
+ | `[oh-my-zsh] Would you like to update?` | `n` | they update their own shell |
191
+ | Claude Code's `Teach auto mode about your environment?` | `2\r` | **Not now**: it would write settings of theirs |
192
+
193
+ The numbers there are what these menus showed when this was written. Read them
194
+ off the screen in front of you rather than trusting the table: a harness that has
195
+ added an option since has moved them all down one.
196
+
197
+ Three things to know rather than guess at.
198
+
199
+ Codex's hooks question is not cosmetic. The kit's hook is how the book learns
200
+ which conversation a session is running as, and while that screen is up the
201
+ conversation has not started at all. Answer it, or the session comes up with an
202
+ empty book and nothing says why.
203
+
204
+ Codex's trust question applies to the **repository root**, which for a bot means
205
+ the whole bots folder rather than the one bot. That is what they are agreeing to.
206
+
207
+ Codex's `/new` question (0.156.1 on) is always answered with the current
208
+ checkout, which is the bot home. The kit never makes a git worktree, so
209
+ `2. New worktree` is never the answer.
210
+
211
+ **Anything you do not recognise: type nothing.** Tell them what is on the
212
+ screen and which tab it is in, and wait. A keypress into a menu you have not read
213
+ is how a harness quits back to the shell.
214
+
215
+ **If the line did not take**, and you have a shell rather than a harness: answer
216
+ whatever the shell was asking (the oh-my-zsh question above is the usual one),
217
+ then close that one tab and bring the fleet up again. The new tab's shell has
218
+ nothing pending, so the line lands:
219
+
220
+ ```sh
221
+ "$ORCA" terminal close --terminal <handle> --tab --json
222
+ obk up --bots <their path>
223
+ ```
224
+
225
+ That is safe here and only here: the tab holds no conversation to lose, which is
226
+ the same reason `obk restart` will not do it for you. `obk up` opens a new tab,
227
+ types the line again and leaves the ops tab alone. Never close a tab you did not
228
+ open, and never close one with a session running in it.
229
+
230
+ When you have answered, read the screen again and confirm a harness is actually
231
+ running in the tab. Do not go to step 7 on a tab that is still a shell.
232
+
233
+ ## 6. Check it
234
+
235
+ ```sh
236
+ obk health --bots <their path>
237
+ ```
238
+
239
+ It reads the setup and says what it found, and writes nothing at all. It exits 1
240
+ when it found something, so do not read a non-zero exit as a broken setup. The
241
+ one exception is an error with no findings, saying Orca is not answering: that
242
+ is a real problem, and the fix is to start Orca and run it again.
243
+
244
+ Relay what it says in plain words. Nothing it prints is a verdict: which findings
245
+ matter is for them, or for Bot Father, to judge. If something looks wrong to you,
246
+ say what you would do and let them decide.
247
+
248
+ Then go on to step 7, whatever it found. A finding does not stop the setup: Bot
249
+ Father is running, and it is the one to look at findings with them. One thing is
250
+ not a finding: on Codex, the book has no conversation id for the session until
251
+ the first message is typed into it.
252
+
253
+ ## 7. Hand them over to Bot Father
254
+
255
+ This is the step that finishes the job, and the easiest one to do badly by
256
+ carrying on managing the fleet yourself.
257
+
258
+ Tell them:
259
+
260
+ - **which tab is Bot Father's.** In Orca, the project is called Bot Father and
261
+ has two tabs: the management tab is the one with the harness running in it,
262
+ and the other is the ops shell. Identify it for them by what is on the screen
263
+ rather than by its title, because a harness rewrites its own tab title;
264
+ - **that they talk to it in ordinary words.** It knows how to interview them into
265
+ a bot's charter, suggest the skills a role needs, and make the bots and their
266
+ sessions. They do not need to learn the commands;
267
+ - **what to say first.** Give them an actual opening line, something like *"I
268
+ want a bot that reviews my pull requests"*, or *"what should my first three
269
+ bots be?"* — whichever fits what they have told you they want;
270
+ - **what the ops tab is:** a plain shell for work across the fleet. The kit does
271
+ not track it.
272
+
273
+ Then stop. If they ask you for more bots after this, point them at Bot Father
274
+ rather than running `obk` for them. Every bot it makes, it knows about; the ones
275
+ 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.1.0",
4
- "description": "Orca bot kit",
3
+ "version": "0.3.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
- "okb": "bin/okb.js"
16
+ "obk": "src/cli.js"
8
17
  },
9
- "main": "./src/index.js",
10
18
  "files": [
11
- "bin",
12
- "src"
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": ">=20.0.0"
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,23 @@
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
+ What does not run is checked against the ask: it answers the question, can be
13
+ followed, and its claims hold. Say what stood in, and what it could not show.
14
+
15
+ Do not say it is done from a plausible diff. Say what the check actually gave,
16
+ failures and empty results included, and what you did not check.
17
+
18
+ It is not done while anything is outstanding: a test still being written or still running, a
19
+ question still open, a check still to run. Until then it is not finished and
20
+ does not merge.
21
+
22
+ The check does not get loosened to reach done. When you are asked to run
23
+ something again, run every step again.
@@ -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_CLI:-obk}" message to --bots <bots> --to <bot>/<session>`. It
9
+ answers with the address and the command that carries it. Your bots folder is
10
+ two levels 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.
@@ -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,22 @@
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, so
20
+ read its AGENTS.md or CLAUDE.md before you start. Where the two disagree, do not
21
+ pick one: tell whoever gave you the work, quote both, and hold that part until
22
+ it is settled.
@@ -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,17 @@
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. When a failing test really is
9
+ impractical, say why and name the check you ran instead; naming one you will run
10
+ later is not having run it.
11
+
12
+ Wherever a real test is warranted, it is written by someone who is not you: a
13
+ subagent or another session, working from the requirement and the public
14
+ interface. When you can neither start one nor reach one, say so and ask.
15
+
16
+ A test that stands in your way goes back to its author with what you think is
17
+ wrong with it. It does not get weakened, skipped or deleted to reach green.
@@ -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,52 @@
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
+ The part on decision records copies words only from Michael Nygard's
12
+ "Documenting Architecture Decisions" (CC0 1.0) and MADR 4.0.0 (taken under
13
+ CC0-1.0, one of its two licences). CC0 waives all rights and asks for no
14
+ notice, so there is nothing to reproduce for them: see
15
+ https://creativecommons.org/publicdomain/zero/1.0/. The other decision-record
16
+ sources in NOTICE.md gave ideas only, and none of their text is used.
17
+
18
+ ## MIT
19
+
20
+ The MIT permission notice below applies to the work of each of these copyright
21
+ holders, and is reproduced with each of their notices. The path after each one
22
+ is the licence file it was read from, in the research pack's source clones.
23
+
24
+ - **Cursor `plugins`, the pstack plugin**, Copyright (c) 2026 Lauren Tan
25
+ (`cursor_plugins/pstack/LICENSE`)
26
+ - **`mattpocock/skills`**, Copyright (c) 2026 Matt Pocock
27
+ (`mattpocock_skills/LICENSE`)
28
+
29
+ ```
30
+ MIT License
31
+
32
+ Copyright (c) 2026 Lauren Tan
33
+ Copyright (c) 2026 Matt Pocock
34
+
35
+ Permission is hereby granted, free of charge, to any person obtaining a copy
36
+ of this software and associated documentation files (the "Software"), to deal
37
+ in the Software without restriction, including without limitation the rights
38
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
39
+ copies of the Software, and to permit persons to whom the Software is
40
+ furnished to do so, subject to the following conditions:
41
+
42
+ The above copyright notice and this permission notice shall be included in all
43
+ copies or substantial portions of the Software.
44
+
45
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
46
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
47
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
48
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
49
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
50
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
51
+ SOFTWARE.
52
+ ```