@assuredloop/orca-bot-kit 0.17.0 → 0.19.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/README.md CHANGED
@@ -453,8 +453,21 @@ up. Each run renews its own schedule, which Claude Code would otherwise end
453
453
  after a week, and `--on --at` puts it back if it lapses. A `/clear` in its tab
454
454
  leaves it running until the session is next restarted; after that, `--on --at`
455
455
  puts it back.
456
- `obk groom --compact` compacts its conversation between runs. Grooming on Codex
457
- comes later: on a Codex Bot Father, add the session with `--harness claude`.
456
+ `obk groom --compact` compacts its conversation between runs.
457
+
458
+ The grooming session is always a Claude Code one, even on a Codex Bot Father (add
459
+ it with `--harness claude` there): it is the clock, and where the reports arrive.
460
+ To have the grooming itself done on Codex, turn it on with `--run-on codex`, and
461
+ give the runs their model and effort:
462
+
463
+ ```sh
464
+ obk groom --bots /path/to/my-bots --on --at 04:00 --run-on codex --model gpt-6-sol --effort medium
465
+ ```
466
+
467
+ Each fire then makes a temporary Codex session of the grooming session's, named
468
+ `groom-<date and time>`, which does the grooming, mails its report back, and is
469
+ retired; the grooming session sends the report on to the management session. A
470
+ run an earlier fire left behind is retired at the next one.
458
471
 
459
472
  ## When something is wrong
460
473
 
@@ -485,6 +498,10 @@ What it looks for:
485
498
  brings it back; when the book names no conversation for it, restart would
486
499
  refuse, and the finding says to close the tab in Orca and run
487
500
  `obk up … --session`. A tab the kit cannot read is never called down;
501
+ - **a Claude session on an address the kit did not make**: such as the bare
502
+ `<bot>.<session>` every fleet's sessions had before 0.10.0, which a session of
503
+ another fleet can write to. Its next start through the kit gives it one of its
504
+ own, so the finding names the `obk restart … --session` that does it;
488
505
  - **leftovers no book owns**: an Orca project inside your bots folder with no
489
506
  bot in it, a tab in a bot's project that the book does not name, a start
490
507
  prompt written for a session that has gone, a clone of a skills source you no
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assuredloop/orca-bot-kit",
3
- "version": "0.17.0",
3
+ "version": "0.19.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
package/rules/mail.md CHANGED
@@ -12,5 +12,8 @@ Mail is queued, not an interruption. Read it when you finish what you are on.
12
12
 
13
13
  Ask for a reply when you need one, and send one when you were asked for one.
14
14
 
15
+ A message sent is queued, not read or acted on: the reply, or the work done,
16
+ is what shows it arrived. Look for one before you send it again.
17
+
15
18
  Write to the session that needs it, not to several in the hope that one of
16
19
  them is right.
@@ -29,6 +29,9 @@ below.
29
29
  hatches in the types, the lock reflex where nothing was meant to be shared,
30
30
  callers needing the internal rules), with deviations treated as signal and a
31
31
  few edge cases not condemning a design.
32
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
33
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
34
+ from; the revision actually read was not recorded)
32
35
  - **Cursor pstack**, `architect`'s `runner-prompt` further to the above.
33
36
  Grounding the design in what the code actually touches before sketching, and
34
37
  what a sketch is (types and signatures with unimplemented bodies, a reader
@@ -37,17 +40,26 @@ below.
37
40
  and trusting types inside; one source of truth per invariant, derived rather
38
41
  than kept in step; and asking what happens if an operation runs twice or
39
42
  crashes halfway.
43
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
44
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
45
+ from; the revision actually read was not recorded)
40
46
  - **Cursor pstack**, `figure-it-out` further to the above. Capturing the
41
47
  baseline before the change so the check reads as the old value against the
42
48
  new; verdicts of verified, not verified or inconclusive with inconclusive not
43
49
  being a pass; inspecting the artefact rather than a report of it; and
44
50
  suspecting the observation method when something passes too easily.
51
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
52
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
53
+ from; the revision actually read was not recorded)
45
54
  - **Cursor pstack**, `blast-radius` further to the above. Looking where a
46
55
  symbol search stops: the library's own source and its pinned version, when
47
56
  things run, the shape of what an interface returns, a column, a wire format,
48
57
  another language reading the same bytes, a feature flag; giving each risk a
49
58
  real likelihood and a real cost; and listing separately what was checked and
50
59
  cleared, since a search that finds nothing is still a result.
60
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
61
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
62
+ from; the revision actually read was not recorded)
51
63
  - **Cursor pstack**, `create-verification-skill`. The whole of making a thing
52
64
  runnable and drivable, which the owner asked to live inside this skill rather
53
65
  than have one of its own: interviewing the repository rather than the user
@@ -69,6 +81,9 @@ below.
69
81
  which that skill's own users praised most because an agent stops searching
70
82
  the codebase for where things are. Kept here in that reduced form rather than
71
83
  as its own generated directory.
84
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
85
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
86
+ from; the revision actually read was not recorded)
72
87
  - **Cursor pstack**, `principle-sequence-verifiable-units`, `figure-it-out`,
73
88
  `blast-radius`, `principle-foundational-thinking`, `principle-model-the-domain`,
74
89
  `principle-exhaust-the-design-space` and the `poteto-mode` planning playbooks.
@@ -90,6 +105,9 @@ below.
90
105
  cannot happen, ran it, reproduced it) with "listing the callers is not the
91
106
  job", the one fact a change is safe because of, and anything short of
92
107
  running it said rather than written up as settled.
108
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
109
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
110
+ from; the revision actually read was not recorded)
93
111
  - **mattpocock/skills**, `codebase-design` with `DEEPENING` and
94
112
  `DESIGN-IT-TWICE`, `domain-modeling` with its `ADR-FORMAT`, `prototype` and
95
113
  `to-tickets`. The three questions to put to an interface (fewer ways in,
@@ -116,6 +134,9 @@ below.
116
134
  the exception for a change that has to happen everywhere; and a prototype
117
135
  being throwaway code that answers a question, with the polish skipped on
118
136
  purpose.
137
+ Revision: mattpocock/skills@c55ee46073ed923f86ce59a5eb3b6d895095d1b7
138
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
139
+ from; the revision actually read was not recorded)
119
140
  - **mattpocock/skills**, `triage` with its `AGENT-BRIEF`, and `to-tickets`
120
141
  further to the above. Handing work over behavioural rather than procedural,
121
142
  what the system should do and not how, the builder exploring fresh and
@@ -132,6 +153,9 @@ below.
132
153
  it was turned down before, asking the reporter specific questions rather
133
154
  than for more information, and noting when a piece needs a person's
134
155
  judgement rather than being delegated.
156
+ Revision: mattpocock/skills@c55ee46073ed923f86ce59a5eb3b6d895095d1b7
157
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
158
+ from; the revision actually read was not recorded)
135
159
 
136
160
  Left behind on purpose: the multi-model arena and its runners, fixed model
137
161
  choices, the phase todolist and its ceremony, tracker and pull-request
@@ -173,11 +197,15 @@ Words were copied only from the two sources whose licences waive all rights:
173
197
  one or two pages, since nobody reads large documents; records numbered in
174
198
  sequence with numbers never reused; and a superseded record kept, because it
175
199
  is still worth knowing that it was the decision.
200
+ Read: 2026-09-24 (reconstructed: read by this date, when the entry was
201
+ written; the day it was read was not recorded)
176
202
  - **MADR 4.0.0** (adr.github.io/madr; MIT or CC0-1.0 at the reader's choice,
177
203
  taken here under CC0). The people who decided and the people consulted as
178
204
  fields of the record, "rejected" among the statuses, consequences written as
179
205
  good and bad, and a way to confirm the decision is kept (MADR's
180
206
  Confirmation, here "Checked by").
207
+ Revision: adr/madr@2475fe1973f66a12aaf58a91d8fa7b42c0f5ea3d (the 4.0.0 release
208
+ this entry names)
181
209
 
182
210
  Taken as ideas only, in this skill's own words, because their licences do not
183
211
  allow the text to be reused (all rights reserved unless noted):
@@ -193,23 +221,38 @@ allow the text to be reused (all rights reserved unless noted):
193
221
  decision; the confidence level; and the definition of done (evidence, at
194
222
  least two options compared on criteria, challenged and agreed, written and
195
223
  shared, a plan to check and revisit it).
224
+ Read: 2026-09-24 (reconstructed: read by this date, when the entry was
225
+ written; the day it was read was not recorded)
196
226
  - **Martin Fowler**, bliki "Architecture Decision Record". Writing the record
197
227
  as a way to bring disagreement into the open; most important first; the
198
228
  confidence and what should trigger a re-evaluation; an accepted record never
199
229
  reopened, only superseded.
230
+ Read: 2026-09-24 (reconstructed: read by this date, when the entry was
231
+ written; the day it was read was not recorded)
200
232
  - **AWS Prescriptive Guidance**, "Using architectural decision records…". A
201
233
  rejected record kept with its reason so the topic is not argued again; an
202
234
  accepted record not changed, a change being a new record noted in the
203
235
  record's change history.
236
+ Read: 2026-09-24 (reconstructed: read by this date, when the entry was
237
+ written; the day it was read was not recorded)
204
238
  - **Microsoft Azure Well-Architected Framework**, "Maintain an architecture
205
239
  decision record" (Microsoft Learn terms of use). Not editing accepted records
206
240
  but superseding them and linking the two; a record not being a design guide,
207
241
  standing on its own with detail linked; consequences never hidden.
242
+ Read: 2026-09-24 (reconstructed: read by this date, when the entry was
243
+ written; the day it was read was not recorded)
208
244
  - **Joel Parker Henderson**, `architecture-decision-record` (CC BY-NC-SA 4.0,
209
245
  which does not fit this use). Dating a fact that will change.
246
+ Revision:
247
+ joelparkerhenderson/architecture-decision-record@b1de91256a57110b655ff3572ce1fc41fbc2dac6
248
+ (reconstructed: the source's head when this entry was written, 2026-09-24; the
249
+ revision actually read was not recorded)
210
250
  - **adr-tools** (Nat Pryce; the tool is GPL-3.0, the content it adds to a
211
251
  project CC BY 4.0). Superseding changes only the old record's status, to a
212
252
  link to the new one.
253
+ Revision: npryce/adr-tools@b3279baf9be2207d1a4f4bbd608fd0b591c72aee
254
+ (reconstructed: the source's head when this entry was written, 2026-09-24; the
255
+ revision actually read was not recorded)
213
256
  - **The GDS Way**, "Documenting architecture decisions", and **GOV.UK**,
214
257
  "Architectural Decision Record Framework" (both Open Government Licence
215
258
  v3.0), and **Google Cloud Architecture Center**, "Architecture decision
@@ -218,6 +261,8 @@ allow the text to be reused (all rights reserved unless noted):
218
261
  names the decision rather than the problem, a superseded status with a link
219
262
  to the new record, records kept findable (GDS Way); and a change carrying the
220
263
  previous decision and why it changed (Google).
264
+ Read: 2026-09-24 (reconstructed: read by this date, when the entry was
265
+ written; the day it was read was not recorded)
221
266
 
222
267
  What the owner said, and how it shaped this part (issue #264, 2026-09-24): a
223
268
  record that partly replaces an older one replaces it with a new one, and he
@@ -44,6 +44,11 @@ hooks means (PRD 6.7).
44
44
 
45
45
  ## Ideas taken from material with no licence
46
46
 
47
+ - **The Grok Bot pages**, docs.x.ai/grok-bot and x.ai/bot/marketplace, as the
48
+ research pack's `grok-bot-lessons.md` gathers them.
49
+ Read: 2026-09-19 (as recorded in grok-bot-lessons.md, which fetched them that
50
+ day)
51
+
47
52
  The research pack's `grok-bot-lessons.md` gathers how one hosted bot product is
48
53
  run. Its material comes from a knowledge base and from that product's own
49
54
  marketplace and documentation pages. No licence is attached to those pages, and
@@ -317,6 +317,13 @@ conversation runs (0.156.1, 0.157.1 and 0.158.0 all did); the answer is
317
317
  always the current checkout, the bot home, and never `2. New worktree`:
318
318
  the kit never makes a git worktree.
319
319
 
320
+ The hooks review of a Codex temporary session you made yourself is the one
321
+ exception: answer it with `obk temp trust-hooks --bots <bots> --name
322
+ <session>`, not with the keys. It reads the screen, chooses **Trust all and
323
+ continue** only if the review is there, and checks that the review went. A
324
+ permission rule can allow that one command, where it cannot allow keys sent
325
+ into any tab.
326
+
320
327
  Where the kit says no session came up, the shell swallowed the launch line,
321
328
  usually while it was asking its own question. Answer the shell, then close
322
329
  that one tab (`<orca> terminal close --terminal <handle> --tab`) and run
@@ -20,6 +20,9 @@ with thanks:
20
20
  measuring before fixing a slow thing, the regression test at a correct seam
21
21
  and "no correct seam is itself the finding", redacting secrets from anything
22
22
  shown, and the list to clear before calling it done.
23
+ Revision: mattpocock/skills@c55ee46073ed923f86ce59a5eb3b6d895095d1b7
24
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
25
+ from; the revision actually read was not recorded)
23
26
  - **Waza**, `hunt`, through the verbatim passages in the research pack. The
24
27
  gate sentence and its form ("I believe the root cause is X because Y", named
25
28
  to a file, function, line or condition), the rule that the cause must explain
@@ -33,6 +36,8 @@ with thanks:
33
36
  re-read the path, and stopping after three failed hypotheses. The owner
34
37
  marked the gate sentence as worth borrowing in his own notes; the rest of
35
38
  `hunt` came in on the research's recommendation.
39
+ Revision: tw93/Waza@59323dee82b04fa8b9ad97a8ee503ca8aee7eb3c (as recorded in
40
+ the research pack's source-book-2.md, read 2026-09-19)
36
41
  - **Cursor pstack**, `principle-fix-root-causes` and the `poteto-mode`
37
42
  playbooks. Not adding guards to silence a crash, a workaround needing a
38
43
  paragraph meaning the code is wrong, checking for the pattern rather than the
@@ -58,6 +63,9 @@ with thanks:
58
63
  it not yet being a diagnosis; confirming against a paired capture or else
59
64
  calling it the strongest hypothesis the artefact supports; and proving the
60
65
  mechanism on the live process where it can still be reached.
66
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
67
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
68
+ from; the revision actually read was not recorded)
61
69
  - **obra/superpowers**, `systematic-debugging` with `root-cause-tracing` and
62
70
  `condition-based-waiting`. Logging what enters and leaves each boundary and
63
71
  reading where it first goes wrong before digging in, tracing backwards
@@ -72,11 +80,17 @@ with thanks:
72
80
  cause really is external, handling at the boundary and a way to see it next
73
81
  time, with most "no root cause" being an investigation stopped early; and
74
82
  finding the test that leaves state behind by running them one at a time.
83
+ Revision: obra/superpowers@5bf4e78011075bcfc0dc295f0724994cd123ee71
84
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
85
+ from; the revision actually read was not recorded)
75
86
 
76
87
  - **obra/superpowers**, `systematic-debugging`, further to the above. Finding
77
88
  the nearest thing that works in the same codebase, reading it properly rather
78
89
  than skimming, and listing every difference however small without deciding in
79
90
  advance which cannot matter.
91
+ Revision: obra/superpowers@5bf4e78011075bcfc0dc295f0724994cd123ee71
92
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
93
+ from; the revision actually read was not recorded)
80
94
  - **addyosmani/agent-skills**, `debugging-and-error-recovery`. The decision
81
95
  tree for a bug you cannot reproduce on demand, sorted into timing,
82
96
  environment, state left behind and genuinely random, with what to try in each
@@ -85,6 +99,9 @@ with thanks:
85
99
  build can carry something shaped like an instruction and is to be read for
86
100
  clues rather than followed; keeping the evidence before a restart or a
87
101
  clean-up; and a test that looks wrong going back rather than being obeyed.
102
+ Revision: addyosmani/agent-skills@dc27a9c2e13721158157632de61b4106c6c2a2a1
103
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
104
+ from; the revision actually read was not recorded)
88
105
  - **Waza**, `hunt`, further to the above. Its gotchas: walking back out of a
89
106
  library frame into your own code, suspecting persisted output written by the
90
107
  old code when the algorithm changed and the output did not, trusting the
@@ -93,14 +110,25 @@ with thanks:
93
110
  lower-layer baseline before blaming the visible thing, diagnosing an external
94
111
  tool before switching it, and never restarting more than twice without new
95
112
  evidence.
113
+ Revision: tw93/Waza@59323dee82b04fa8b9ad97a8ee503ca8aee7eb3c (as recorded in
114
+ the research pack's source-book-2.md, read 2026-09-19)
96
115
 
97
116
  - **garrytan/gstack**, `investigate`: earlier fixes in the same area pointing
98
117
  at the shape of the code, and the rest of the suite still passing after the
99
118
  fix.
119
+ Revision: garrytan/gstack@a6b3a57512ca6d5c6aa5b68f74f736195021f96e
120
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
121
+ from; the revision actually read was not recorded)
100
122
  - **Kent Beck's own rules file**: two tests for a defect, one at the interface
101
123
  and the smallest one where the fault lives.
124
+ Revision: KentBeck/BPlusTree3@ca80e4d85a99cd0af2effe717f709d43e80403bc
125
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
126
+ from; the revision actually read was not recorded)
102
127
  - **Cursor pstack**, `runtime-forensics`, further to the above: when the
103
128
  question is why, the deliverable is the diagnosis, not a fix.
129
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
130
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
131
+ from; the revision actually read was not recorded)
104
132
 
105
133
  The owner's own framing leads the skill: reproduce it, find the difference in
106
134
  environment, version and context, and the hard cases being random and slow
@@ -46,6 +46,9 @@ thanks. Each licence below was read from the file named beside it.
46
46
  recorded. Its completion check contributes the question of whether the
47
47
  baseline is genuine rather than a straw candidate and whether every rejected
48
48
  alternative has a reason.
49
+ Revision: citypaul/.dotfiles@a109f9972bb46671c624fc05752031523e1cf6fc
50
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
51
+ from; the revision actually read was not recorded)
49
52
  - **`addyosmani/agent-skills`, `skills/documentation-and-adrs`**: MIT,
50
53
  `addyosmani_agent-skills/LICENSE`, "Copyright (c) 2025 Addy Osmani". Writing
51
54
  a decision down when it would be expensive to reverse. Matching the
@@ -56,6 +59,9 @@ thanks. Each licence below was read from the file named beside it.
56
59
  giving the reason it was rejected. And the lifecycle: do not delete or edit
57
60
  an old decision when things change, write the next one and say which one it
58
61
  replaces, because the historical context is the part worth keeping.
62
+ Revision: addyosmani/agent-skills@dc27a9c2e13721158157632de61b4106c6c2a2a1
63
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
64
+ from; the revision actually read was not recorded)
59
65
  - **`addyosmani/agent-skills`, `skills/idea-refine`**: same licence. The
60
66
  machinery for alternatives that are actually different: the lenses for
61
67
  generating them, which this skill carries as asking what the opposite would
@@ -73,6 +79,9 @@ thanks. Each licence below was read from the file named beside it.
73
79
  those words. Its "not doing, and
74
80
  why" is the reason this skill treats the dropped options as a part of the
75
81
  memo rather than an appendix to it.
82
+ Revision: addyosmani/agent-skills@dc27a9c2e13721158157632de61b4106c6c2a2a1
83
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
84
+ from; the revision actually read was not recorded)
76
85
  - **`addyosmani/agent-skills`, `skills/doubt-driven-development`**: same
77
86
  licence. Checking your own conclusion: name the decision in two or three
78
87
  lines, because if you cannot get it that small you have a subject rather than
@@ -82,6 +91,9 @@ thanks. Each licence below was read from the file named beside it.
82
91
  what comes back as data rather than a verdict, re-reading the thing against
83
92
  each finding, since rubber-stamping a reviewer is the same failure as
84
93
  ignoring one.
94
+ Revision: addyosmani/agent-skills@dc27a9c2e13721158157632de61b4106c6c2a2a1
95
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
96
+ from; the revision actually read was not recorded)
85
97
  - **`citypaul/.dotfiles`, `claude/.claude/skills/double-check`**: MIT, the
86
98
  repository root licence above. How a finding is closed: push back with
87
99
  evidence and never by signalling which outcome you want, and treat an
@@ -91,6 +103,9 @@ thanks. Each licence below was read from the file named beside it.
91
103
  authoritative, or inferred. And its rule that severity is judged by the
92
104
  impact if it ships rather than by the effort to fix it or by the reviewer's
93
105
  own certainty.
106
+ Revision: citypaul/.dotfiles@a109f9972bb46671c624fc05752031523e1cf6fc
107
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
108
+ from; the revision actually read was not recorded)
94
109
  - **`citypaul/.dotfiles`, `claude/.claude/skills/find-gaps`**: MIT, the
95
110
  repository root licence above. What a plan or a memo is missing rather than
96
111
  what it gets wrong: treating silence as a red flag rather than a green light,
@@ -99,6 +114,9 @@ thanks. Each licence below was read from the file named beside it.
99
114
  anything. Its warning against inventing a gap to make the review look
100
115
  productive is why this skill says a memo may honestly conclude that none of
101
116
  the options is good.
117
+ Revision: citypaul/.dotfiles@a109f9972bb46671c624fc05752031523e1cf6fc
118
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
119
+ from; the revision actually read was not recorded)
102
120
  - **`garrytan/gstack`, `office-hours/SKILL.md` and `plan-ceo-review/SKILL.md`**:
103
121
  MIT, `garrytan_gstack/LICENSE`, "Copyright (c) 2026 Garry Tan". The premise
104
122
  challenge, which this skill carries as asking whether the question is the
@@ -107,6 +125,9 @@ thanks. Each licence below was read from the file named beside it.
107
125
  the outcome or is it solving a proxy for it. And its practice of putting the
108
126
  premises where the reader can disagree with them rather than burying them in
109
127
  the reasoning.
128
+ Revision: garrytan/gstack@a6b3a57512ca6d5c6aa5b68f74f736195021f96e
129
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
130
+ from; the revision actually read was not recorded)
110
131
 
111
132
  Made generic, which is what the owner asked for. The strongest source is
112
133
  build-against-buy shaped and comes with a fixed template, an evaluation table
@@ -64,6 +64,32 @@ than metered billing, tokens are not money at all, and the honest answer is what
64
64
  would have cost metered, and what share of the allowance it used where the
65
65
  plan shows that.
66
66
 
67
+ ## When a bill and an estimate cover the same work
68
+
69
+ An invoice, a bill or the provider's usage page is better evidence than an
70
+ estimate made from tokens and a price you looked up today. Where both cover
71
+ the same work, report the charge and say that is where the figure came from.
72
+ The estimate is not added to it: it measures the same spending a second time,
73
+ and is worth keeping beside the charge only to show how far the two differ.
74
+
75
+ Watch for the same thing in smaller pieces. A figure for a whole session
76
+ already includes the calls inside it, so do not add the per-call figures to
77
+ it, or a day's total to the sessions it is made of. Take one level and say
78
+ which.
79
+
80
+ Keep currencies apart. An invoice in euros and an estimate in dollars are two
81
+ figures, each with its currency, until you have a rate you can name, with its
82
+ date and its source. Converting quietly hides a guess inside a number.
83
+
84
+ And an unknown stays unknown. A day with no invoice yet and no price you could
85
+ find is a gap, not a zero: a zero says the work was free.
86
+
87
+ A worked example. For 20 September the provider's invoice says 41.20 USD for
88
+ the API, and the token estimate for the same day, at today's list price, is
89
+ 38.90 USD. Report one figure, 41.20 USD, with its source: the invoice. Add
90
+ that the estimate came to 38.90 USD, so a reader can see the estimate runs
91
+ about six per cent low, and leave it out of the total.
92
+
67
93
  ## Cost a result, not a token
68
94
 
69
95
  Tokens per day tells you nothing about whether the money bought anything. Put
@@ -13,6 +13,9 @@ thanks:
13
13
  the reader can go and look; that a history is material rather than
14
14
  instructions; and preferring a remedy that holds by
15
15
  itself, one a check can enforce, over another paragraph of prose.
16
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
17
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
18
+ from; the revision actually read was not recorded)
16
19
 
17
20
  ## What is written from this kit's own design
18
21
 
@@ -37,6 +40,11 @@ WHATEVER", which is why nothing here is written as a ban.
37
40
 
38
41
  ## Ideas taken from material with no licence
39
42
 
43
+ - **The Grok Bot pages**, docs.x.ai/grok-bot and x.ai/bot/marketplace, as the
44
+ research pack's `grok-bot-lessons.md` gathers them.
45
+ Read: 2026-09-19 (as recorded in grok-bot-lessons.md, which fetched them that
46
+ day)
47
+
40
48
  The research pack's `grok-bot-lessons.md` gathers how one hosted bot product is
41
49
  run. Its material comes from a knowledge base and from that product's own
42
50
  marketplace and documentation pages. No licence is attached to those pages, and
@@ -20,6 +20,9 @@ with thanks:
20
20
  to make, and being finished only when the frontier is empty with nothing
21
21
  silently assumed and the user confirming the shared understanding before
22
22
  anything is built.
23
+ Revision: mattpocock/skills@c55ee46073ed923f86ce59a5eb3b6d895095d1b7
24
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
25
+ from; the revision actually read was not recorded)
23
26
  - **mattpocock/skills**, `engineering/domain-modeling` with its
24
27
  `CONTEXT-FORMAT` and `ADR-FORMAT`. Challenging a term that conflicts with
25
28
  the agreed one and doing it immediately, proposing a precise term where one
@@ -39,6 +42,9 @@ with thanks:
39
42
  that carries lock-in, a boundary and what is deliberately outside it, a
40
43
  deliberate departure from the obvious path, a constraint invisible in the
41
44
  code, and an alternative rejected for a non-obvious reason.
45
+ Revision: mattpocock/skills@c55ee46073ed923f86ce59a5eb3b6d895095d1b7
46
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
47
+ from; the revision actually read was not recorded)
42
48
 
43
49
  `grill-with-docs` is a one-line skill that loads the two above, and `grill-me`
44
50
  one that loads `grilling` alone. ADR 0019 proposes that a kit skill carries
@@ -76,23 +82,23 @@ words where they are quoted here:
76
82
  Five deliberate departures from `grilling` and `domain-modeling`, so they are
77
83
  not mistaken for consolidation:
78
84
 
79
- - **A round is three questions, not the whole frontier.** `grilling` says to
85
+ - A round is three questions, not the whole frontier. `grilling` says to
80
86
  ask the entire frontier in one round. The owner asked for three at a time
81
87
  (13:24:19, recovered in the audit), and a round of nine reads as a form and gets
82
88
  filled in like one. The frontier still governs *which* questions are
83
89
  askable; it no longer governs how many go out at once.
84
- - **Small settled things get recorded.** `domain-modeling` says to offer an ADR
90
+ - Small settled things get recorded. `domain-modeling` says to offer an ADR
85
91
  only when all three conditions hold and otherwise to skip it. That is the
86
92
  right gate for a decision note, and this skill keeps it, but it applies the
87
93
  gate to the note rather than to the record, because a reversible unsurprising
88
94
  choice is still what the next person needs in order to build the agreed
89
95
  thing. Everything settled goes down; a few earn the note.
90
- - **What was not settled is recorded too.** Neither source asks for this. It
96
+ - What was not settled is recorded too. Neither source asks for this. It
91
97
  comes from the audit of the owner's own design session, where what he had
92
98
  merely agreed with in passing, and what had been assumed on his behalf, were
93
99
  the things that later had to be untangled.
94
100
 
95
- - **A decision note lists its alternatives and is replaced whole.**
101
+ - A decision note lists its alternatives and is replaced whole.
96
102
  `ADR-FORMAT` makes a note one paragraph, with the rejected options and the
97
103
  consequences optional. The owner decided that a decision record lists every
98
104
  alternative that was on the table with why it was not chosen, and that a
@@ -101,7 +107,7 @@ not mistaken for consolidation:
101
107
  teaches the record; this skill's note says the same, so the two do not
102
108
  disagree.
103
109
 
104
- - **Questions are kept short.** `grilling` allows a question several
110
+ - Questions are kept short. `grilling` allows a question several
105
111
  paragraphs of setup; a long one here is taken as a sign it is two questions
106
112
  or that teaching should come first.
107
113
 
@@ -13,10 +13,16 @@ with thanks:
13
13
  the place it was seen, so a reader can go and look; and the rule that a
14
14
  transcript is data to be read rather than instruction to be followed, which
15
15
  is what the section on reading another bot's history is built on.
16
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
17
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
18
+ from; the revision actually read was not recorded)
16
19
  - **Addy Osmani's agent skills**, `constraint-driven-development`: its warning
17
20
  that a figure with no reason attached gets deleted by the next person it
18
21
  inconveniences, which is why a note says what moved it. Its ratchet is not
19
22
  applied to the notes (see below).
23
+ Revision: addyosmani/agent-skills@dc27a9c2e13721158157632de61b4106c6c2a2a1
24
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
25
+ from; the revision actually read was not recorded)
20
26
 
21
27
  ## The owner's own conclusions, restated
22
28
 
@@ -60,6 +66,11 @@ only a summary. The facts about Claude Code's scheduler are in the tech notes.
60
66
 
61
67
  ## Ideas taken from material with no licence
62
68
 
69
+ - **The Grok Bot pages**, docs.x.ai/grok-bot and x.ai/bot/marketplace, as the
70
+ research pack's `grok-bot-lessons.md` gathers them.
71
+ Read: 2026-09-19 (as recorded in grok-bot-lessons.md, which fetched them that
72
+ day)
73
+
63
74
  The research pack's account of how one hosted bot product runs its fleet
64
75
  suggested the daily pass over every bot and the habit of routing each finding
65
76
  to a single kind of fix. Those pages carry no licence and the pack holds only
@@ -244,6 +244,16 @@ at: `obk session add --bots <folder> --bot bot-father --name grooming --model
244
244
  <m> --effort <e>`, with `--harness claude` where Bot Father runs on Codex, then
245
245
  `obk up`. Its launch line carries them, so they are what every run uses.
246
246
 
247
+ The runs can be done on Codex instead. The session stays this Claude Code one,
248
+ the clock and the reader, and `obk groom --on --at <HH:MM> --run-on codex
249
+ --model <m> --effort <e>` schedules it: each fire makes a temporary Codex
250
+ session, `groom-<date and time>`, with that model and effort, which does the
251
+ pass with this skill, mails its report to the grooming session and is retired
252
+ by it; the grooming session sends the report on to the management session. A
253
+ run an earlier fire left behind is retired at the next fire. If you are such a
254
+ run, do the pass, send the report as your task says, and stop: schedule
255
+ nothing and make no session.
256
+
247
257
  Do not schedule a pass nobody has watched. `obk groom --now` runs it once in its
248
258
  tab; read what it produced, and fix the run rather than the report. Then, after
249
259
  one explicit yes from the user who has read a run, `obk groom --on --at <HH:MM>`
@@ -15,6 +15,9 @@ with thanks:
15
15
  From its `docs/productivity/handoff.md`: the next agent takes the note as a
16
16
  contract and will not re-check it, so read it before handing it over and
17
17
  downgrade anything only assumed.
18
+ Revision: mattpocock/skills@c55ee46073ed923f86ce59a5eb3b6d895095d1b7
19
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
20
+ from; the revision actually read was not recorded)
18
21
  - **Cursor pstack**, the `poteto-mode` `pause-safely` playbook: stopping at a
19
22
  safe boundary by finishing or backing out of the current step and never
20
23
  stopping mid-edit in a known-broken state, starting nothing new and stopping
@@ -26,6 +29,9 @@ with thanks:
26
29
  conversation, the commits and whether the tree is clean, and the first action
27
30
  on resume ("this is a pause, not a final report"). Also its rule that a pause
28
31
  is explicit: on "keep going", do not pause.
32
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
33
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
34
+ from; the revision actually read was not recorded)
29
35
 
30
36
  Two additions are not from either source, both from an acceptance run of this
31
37
  skill: commit your own work and only your own, since the durable-work
@@ -22,6 +22,8 @@ contribute a piece each.
22
22
  scheduling for a reminder and verifying what was set, a line in a to-do file
23
23
  or a saved skill not being a scheduled reminder, and reporting a missing host
24
24
  capability instead of claiming something will run later.
25
+ Revision: guwenqing/orca-bot-kit@51a42a3e61711b0f33b00482657499de9afee16e (the
26
+ commit the `git show` above names)
25
27
  - **The research pack's `grok-bot-lessons.md`**, our own read of the owner's
26
28
  knowledge base on running a personal helper bot. "36 drafts queued, 0 sent":
27
29
  finish every reversible step and stop at the irreversible one (BNK-2920 §09,
@@ -29,13 +31,20 @@ contribute a piece each.
29
31
  (BNK-2921); here scoped to a routine that does work, since a plain reminder
30
32
  has nothing to run by hand. The time zone and the end date in a routine's
31
33
  checklist.
34
+ Revision: none (the kit's own research pack, not a published source)
32
35
  - **`mattpocock/skills`, `skills/in-progress/loop-me`** (MIT): do the most you
33
36
  can before involving the person, so they are asked once, late; and hand back
34
37
  something decision-ready that points at the thing rather than reproducing it.
38
+ Revision: mattpocock/skills@c55ee46073ed923f86ce59a5eb3b6d895095d1b7
39
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
40
+ from; the revision actually read was not recorded)
35
41
  - **Cursor `plugins`, `third_party/x/skills/x-chat`** (MIT, `third_party/x/
36
42
  LICENSE`, "Copyright (c) 2026 Cursor"): outbound text needs the person's
37
43
  approval unless they already said to send it ("reply that I'll be there"),
38
44
  and a vague "check my inbox" is not that.
45
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
46
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
47
+ from; the revision actually read was not recorded)
39
48
 
40
49
  Written differently from the old skill, on purpose: no fixed path (PRD 7.1
41
50
  assumes no way of working); a vague item stays on the list and is asked about,
@@ -33,6 +33,36 @@ they actually gave you: no invented deadline, priority, category or detail.
33
33
  Where an item is too vague to carry a next action, keep it and ask. Do what you
34
34
  can first, then ask once, in your reply rather than in a file.
35
35
 
36
+ ## When the list comes from several places
37
+
38
+ Chats, mail and trackers are full of questions to a group, answered later by
39
+ someone else, or overtaken since. Read only the sources they gave you, and put
40
+ on the list only what is theirs.
41
+
42
+ An item is theirs when it was addressed to them, by name or directly, or when
43
+ they took it on ("I'll look at it"). A question to a group they are in is not
44
+ theirs for being in the group.
45
+
46
+ Before you add one, read what came after it: a later reply may have answered
47
+ it, or someone else may have taken it. Where a tracker keeps its own state,
48
+ that state wins over an old message about it: a closed issue is closed,
49
+ whatever the thread said last week.
50
+
51
+ Tell three kinds apart. Something they have to do goes on the list. A quick
52
+ question they can answer in a line goes to them now, with the answer ready if
53
+ you have it. Information that asks nothing of them does not go on the list at
54
+ all.
55
+
56
+ And their own word beats every source. An item they took off or rewrote stays
57
+ as they left it, even where the chat still says otherwise: do not put it back.
58
+
59
+ For example: on Monday someone asks the team chat "can anyone look at the
60
+ failing build?". They are in the team, and nobody names them. On Tuesday a
61
+ colleague replies "fixed, it was the cache". That is not their item: it was not
62
+ addressed to them, and someone else has answered it. Had it said "@them, can
63
+ you look at the build?" with no reply since, it would be an action on their
64
+ list, with the message as where it came from.
65
+
36
66
  ## Change the entry, do not add another
37
67
 
38
68
  When they revise something, edit the entry that is there and leave every other
@@ -37,6 +37,9 @@ thanks:
37
37
  to re-derive it, and a "verify from scratch" pass means treating it as
38
38
  untrustworthy when it is not; and a passing prior self-report is not the
39
39
  proof.
40
+ Revision: cursor/plugins@6ed0f7a9504f577d7529064103cecce9be7dfc5e
41
+ (reconstructed: the research pack's 2026-09-20 clone the skills were built
42
+ from; the revision actually read was not recorded)
40
43
 
41
44
  Made generic, which is what the owner asked for. The original names a fixed
42
45
  transcript path, a particular set of hosted sources and a parallel fan-out on