@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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +545 -3
  3. package/SETUP.md +270 -0
  4. package/package.json +32 -13
  5. package/rules/evidence.md +15 -0
  6. package/rules/finishing.md +20 -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 +20 -0
  12. package/rules/simple.md +14 -0
  13. package/rules/talk.md +13 -0
  14. package/rules/tests-first.md +15 -0
  15. package/rules/the-ask.md +19 -0
  16. package/skills/obk-arch/LICENSES.md +45 -0
  17. package/skills/obk-arch/NOTICE.md +134 -0
  18. package/skills/obk-arch/SKILL.md +387 -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 +235 -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 +419 -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 +146 -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 +219 -0
  34. package/skills/obk-grilling/LICENSES.md +42 -0
  35. package/skills/obk-grilling/NOTICE.md +103 -0
  36. package/skills/obk-grilling/SKILL.md +217 -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 +219 -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 +259 -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 +408 -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 +516 -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 +169 -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 +1130 -0
  71. package/src/conversations.js +150 -0
  72. package/src/groom.js +157 -0
  73. package/src/health.js +309 -0
  74. package/src/hooks.js +202 -0
  75. package/src/init.js +314 -0
  76. package/src/launch.js +276 -0
  77. package/src/message.js +380 -0
  78. package/src/orca.js +291 -0
  79. package/src/pause.js +58 -0
  80. package/src/record.js +209 -0
  81. package/src/restart.js +192 -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 +629 -0
  86. package/src/sources.js +370 -0
  87. package/src/up.js +475 -0
  88. package/src/usage.js +401 -0
  89. package/bin/okb.js +0 -4
  90. package/src/index.js +0 -11
@@ -0,0 +1,241 @@
1
+ ---
2
+ name: obk-decision-memo
3
+ description: >-
4
+ Writing up a decision so someone else can take it: the conclusion first, the
5
+ evidence it rests on with how fresh each piece is, the alternatives that were
6
+ really considered and why each was dropped, the risks, the strongest argument
7
+ against your own recommendation, and what you are not sure about. Use when a
8
+ choice matters enough to be written down, is expensive to reverse, or will be
9
+ asked about later: picking between options, committing to a direction, or
10
+ recommending something to whoever decides.
11
+ ---
12
+
13
+ # Writing up a decision
14
+
15
+ A memo exists so that the person who has to decide can decide, and so that
16
+ whoever asks in a year gets the reasoning rather than the outcome. Both of
17
+ those are served by the same thing: the conclusion up front, and an honest
18
+ account of what it rests on.
19
+
20
+ These are defaults for work where nothing says otherwise. A user who asks for
21
+ something else gets what they asked for; say which of these you left and why.
22
+
23
+ ## Say what is being decided
24
+
25
+ Before anything else, get the decision into two or three lines for yourself:
26
+ the choice, and what turns on it. If you cannot get it that small, you do not yet have a
27
+ decision: you have a subject, and the memo will wander.
28
+
29
+ Then say who decides. A memo written for someone with no authority over the
30
+ thing is a briefing, and it should be honest about being one.
31
+
32
+ Say who else is in it and what they stand to gain. Where someone taking part in
33
+ the decision has an interest in one of the options, that is a fact about the
34
+ decision and belongs in the memo, because it changes how the decision has to be
35
+ taken and not only which option wins. It outranks the comparison.
36
+
37
+ Say how reversible it is, and how long it will be lived with. That governs how
38
+ much work the memo is worth: a choice you can undo next week does not earn a
39
+ week of research, and one that will outlive everyone reading it does. Calibrate
40
+ to consequence and say what calibration you used.
41
+
42
+ Where a date forces the matter before the evidence is in, say what can honestly
43
+ be settled by then and let that be the ask. Something has to be decided on the
44
+ day, but it does not have to be the thing you cannot yet support: who decides,
45
+ what they are authorised to spend or commit, and the rule that will pick the
46
+ answer once the missing fact arrives are all real decisions. Guessing the
47
+ answer to look decisive on the day is the failure this trades away.
48
+
49
+ ## Frame it before you shop
50
+
51
+ Write down the job to be done, the hard constraints, and what is deliberately
52
+ out of scope, all in language that does not belong to any of the options. Once
53
+ a candidate's vocabulary gets into the requirements, the comparison is over and
54
+ that candidate has won it: a requirement phrased as "we need its workflow
55
+ engine" has already chosen.
56
+
57
+ Keep doing nothing in the comparison, as a real option rather than a straw one,
58
+ and say what it costs. Sometimes the current state does the job and the change
59
+ is all ownership and no value. A memo that cannot say what happens if nobody
60
+ acts has not established that anything needs deciding.
61
+
62
+ And ask whether the question is the right one before answering it, and whether
63
+ it is the real goal or a stand-in for it. A different framing sometimes makes
64
+ the whole comparison unnecessary, and that is the most valuable thing a memo
65
+ can find. Put the premises the reader has to accept where
66
+ they can disagree with them, rather than burying them in the reasoning.
67
+
68
+ ## Alternatives worth the name
69
+
70
+ Two or three real candidates and the do-nothing baseline beat a long list.
71
+ Breadth is not the number of options; it is whether the options differ in a way
72
+ that matters. A list of near-identical variants is a single option wearing
73
+ several hats.
74
+
75
+ Where the obvious options all share a shape, go looking on purpose: what would
76
+ the opposite look like, what would the version ten times simpler be, what would
77
+ this look like if the tightest constraint were lifted, and what would someone
78
+ who works in this field every day think obvious. You are trying to find the
79
+ option nobody has thought of, not to fill a table.
80
+
81
+ Every option that was dropped carries the reason it was dropped, in one line
82
+ that names the thing about it that failed. "Rejected" with no reason reads as
83
+ "not considered", and the reader will re-propose it.
84
+
85
+ Where an option fails a hard constraint, it is out, or it stays in with a named
86
+ mitigation, not with a lower score. A hard constraint nobody checked is not a
87
+ pass. Do not turn judgement into arithmetic: a
88
+ weighted table gives the answer you chose the weights for, and it hides the
89
+ reasoning in a number. Compare the survivors in plain language, on the things
90
+ that actually differ.
91
+
92
+ Compare what it costs to live with, not what it costs to start. The glue, the
93
+ upgrades, the thing that has to be maintained around it, what happens when you
94
+ want to leave; and how long until it pays off, and what else that time and
95
+ money would have bought. Compare exact versions and tiers, not reputations.
96
+ Where two survivors come out even, prefer the one easier to undo.
97
+
98
+ ## Evidence, and how fresh it is
99
+
100
+ A claim that decides something needs a source that owns it: the documentation,
101
+ the specification, the contract, the measurement, the record. Popularity and
102
+ reputation are how you find candidates, and they are never how you choose one.
103
+
104
+ Record the finding, not just the link. "See their docs" is not evidence; what
105
+ the docs say, in the words that settle the question, is. Note when you looked,
106
+ because the volatile things (versions, prices, support, security, who
107
+ maintains it) are exactly the things a decision turns on, and they are stale
108
+ by the time anyone reads the memo.
109
+
110
+ A number you worked out yourself needs more care than a sentence you worked
111
+ out yourself, because a figure travels further than the caveat attached to it
112
+ and arrives at the next meeting as a fact. Give a range rather than a point,
113
+ put the assumptions beside it, and say plainly that it is an estimate and what
114
+ would move it.
115
+
116
+ Mark how you know each thing, because the reader is entitled to discount:
117
+
118
+ - **You ran it or measured it**, on something representative.
119
+ - **You read it** in something authoritative, and can point at where.
120
+ - **You worked it out** from what you read. This is where most mistakes live,
121
+ and the label is what lets a reader find them.
122
+ - **Someone told you**, and you could not check it. Most of what a memo rests
123
+ on arrives this way, so it needs saying rather than quietly reading as
124
+ established. Who told you matters: the person doing the work describing their
125
+ own week is worth more than a figure that has been passed along twice, and
126
+ the difference often decides the memo.
127
+
128
+ That list runs from the strongest support to the weakest. Where a fact matters
129
+ enough, move it towards the top as far as is cheap: go and measure the thing
130
+ rather than reasoning about it, read the contract rather than recalling it.
131
+ Then say where it stopped, and keep the honest label when a better check was
132
+ not available. Where you could not check something at all, say so in
133
+ the memo rather than in a footnote.
134
+
135
+ Not being able to check something does not stop you comparing it. Where
136
+ somebody hands you the terms of two named options, compare those terms, say
137
+ they are as supplied and unchecked, and name which of them the answer turns on.
138
+ A recommendation that holds if the stated terms are right is a real answer, and
139
+ saying so is different from pretending the terms were verified; it stays
140
+ provisional until they are checked.
141
+
142
+ What you cannot do is compare what you do not have. Where the options are not
143
+ even named, or the facts that would separate them are missing entirely, the
144
+ memo changes job and says so in its first paragraph: it becomes a
145
+ recommendation about how to find out, naming what to get, from whom, and what
146
+ it would settle. Filling that gap from memory is the most damaging thing you
147
+ could hand over, because it reads exactly like a comparison built on evidence.
148
+
149
+ ## Argue against yourself
150
+
151
+ Write the strongest argument against your own recommendation, in its best form,
152
+ and put it in the memo. Not a weak version you can knock down: the one that
153
+ would persuade you if you heard it from someone you respected. A memo with no
154
+ counterargument reads as advocacy, and a reader who finds the obvious objection
155
+ missing stops trusting the rest of it.
156
+
157
+ Where you wrote it yourself, say so, because an argument you found and were not
158
+ persuaded by is a weaker thing than one from somebody who believes it. Getting
159
+ it from a person who actually holds the view is better whenever you can.
160
+
161
+ Then look for what would have to be true. Imagine it is a year on and this went
162
+ badly: what happened? List the ways it fails, say which of them you could
163
+ prevent and which you are choosing to accept, and say which would be fatal
164
+ rather than merely painful. Rank them by what they would cost, not by how easy
165
+ they are to fix.
166
+
167
+ Separate what you are betting on into what must be true for this to work at
168
+ all, what would hurt if wrong but is survivable, and what does not matter yet.
169
+ The first group is the one to check before committing, not after.
170
+
171
+ When you have someone else look at it, give them the memo and the constraints
172
+ and not your reasoning, and ask them to find what is wrong with it rather than
173
+ what they think of it. Handing over your conclusion gets you agreement with
174
+ your conclusion. What comes back is information rather than a verdict: read the
175
+ thing again against each objection before you decide which ones hold. If you
176
+ push back, push back with evidence, and never by making clear which answer you
177
+ want. An objection that is dropped only because you argued confidently has not
178
+ been answered.
179
+
180
+ Be honest rather than supportive. Where the answer is that none of the options
181
+ is good, or that the thing is not worth doing, that is the memo.
182
+
183
+ ## What you are not sure about
184
+
185
+ Say how confident you are and why, in a line, rather than leaving the reader to
186
+ infer it from your tone. Confident prose about thin evidence is the failure
187
+ this whole thing exists to prevent.
188
+
189
+ Say what would change your mind. Name the specific finding, measurement or
190
+ event that would move the recommendation to a different option. That is what
191
+ tells the reader whether to act now or wait, and it is the sentence that makes
192
+ the memo useful a year later.
193
+
194
+ Where a real unknown is blocking, propose the smallest thing that would settle
195
+ it: the question, what would count as a pass and a fail, how long it gets. A
196
+ trial that could not change the decision is not worth running, and a trial does
197
+ not take away the duties of owning the choice while it runs. Stop looking when
198
+ more looking would not change the answer.
199
+
200
+ Deferring is a real outcome, and so is doing nothing. Where you defer, say what
201
+ you are waiting for and what would trigger picking it up again, so that
202
+ deferring does not quietly become forgetting.
203
+
204
+ ## The memo
205
+
206
+ Lead with the conclusion. A reader who stops after the first paragraph should
207
+ have the recommendation and the main reason for it.
208
+
209
+ After that, in whatever order serves the reader: what was considered and
210
+ dropped, the evidence with where and when it came from, the risks and which are
211
+ accepted, the strongest argument against, what you are unsure about and what
212
+ would change it, and when to look at it again. Those are questions it answers,
213
+ not headings it has to print; where an answer is one line, it is one line.
214
+
215
+ Where the project already keeps decisions somewhere, match what is there: the
216
+ place, the naming, the sections it already uses. Continue the sequence rather
217
+ than starting a second one, and where two conventions are already in use, say
218
+ so rather than quietly picking. Where there is no convention, put it where the
219
+ person asked for it or hand it back in your reply; do not invent a new place to
220
+ keep documents.
221
+
222
+ Write in the words the reader uses. Where a sentence says the choice is fast,
223
+ clean, modern or robust, replace it with the number or the behaviour you mean,
224
+ because those words survive review by meaning nothing.
225
+
226
+ The detail lives in the evidence or in what it points at, not in the argument.
227
+
228
+ ## It is a proposal until someone accepts it
229
+
230
+ A memo you wrote is a recommendation, however sure you are. Someone with the
231
+ authority decides, and the memo records who that was and when. Do not write up
232
+ your own recommendation as a decision, and do not let a discussion that nobody
233
+ objected to become one. Silence is not agreement, and the person who was going
234
+ to object may not have read it yet.
235
+
236
+ Once it is decided, the memo stops being an argument and becomes a record.
237
+ Leave it where it is when things change: write the next one, and say which one
238
+ it replaces. A decision that was right at the time and wrong later is the
239
+ normal case, and the reasoning is the part worth keeping.
240
+
241
+ Sources and licences: [NOTICE.md](NOTICE.md).
@@ -0,0 +1,19 @@
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-finops` names its sources in [NOTICE.md](NOTICE.md).
9
+
10
+ ## Sources that need no third-party notice
11
+
12
+ This skill reproduces no third-party text. It was written from this kit's own
13
+ PRD and ADRs, from facts measured on the harnesses for this slice and recorded
14
+ in the tech notes, and from the owner's own conclusions about his own spending,
15
+ restated in our own words.
16
+
17
+ Where the ideas behind it trace to material with no licence attached, nothing
18
+ of that material is copied here and credit is given in NOTICE.md instead, which
19
+ is where it belongs.
@@ -0,0 +1,77 @@
1
+ <!-- Attribution for the sources this skill was built from. Kept out of
2
+ SKILL.md so it is not read into context on every use; it travels with
3
+ the skill directory, which is what the licences require. -->
4
+
5
+ # Sources and licences
6
+
7
+ `obk-finops` reproduces no third-party text. It is written from this kit's own
8
+ design, from what was measured for it, and from the owner's own conclusions
9
+ about his own spending, restated in our own words.
10
+
11
+ ## The owner's own conclusions, restated
12
+
13
+ He reviewed his real sessions and wrote down what he found. That is his own
14
+ writing rather than a third party's, so there is no licence question, but the
15
+ research pack holds it only at one remove, as another agent's digest, so
16
+ nothing here quotes it:
17
+
18
+ - that the figure worth knowing is what a result cost rather than what a token
19
+ cost, and that the sum includes the runs that failed, the work handed to
20
+ another tool, anything charged outside the token bill, and the person's own
21
+ time correcting and re-explaining, which is usually the largest part and the
22
+ part nobody writes down;
23
+ - that effort should follow the work: high for the orchestrating session,
24
+ medium for the workers, and the top of the range kept for deep read-only
25
+ analysis, as the owner's usage review puts it;
26
+ - that a long thread pays to re-read itself, that a high median input per call
27
+ is the measurable form of it, and that compaction is where it becomes
28
+ visible;
29
+ - that a sentence in a prompt is not a budget control, and that where a limit
30
+ cannot be enforced by the platform, that has to be written down beside it
31
+ rather than left for a reader to assume;
32
+ - the two directions to read the evidence in: short simple turns on a top
33
+ model, or a high effort setting that is never used, mean the model is more
34
+ than the job needs; repeated corrections, the same error returning after a
35
+ fix was claimed, and tests failing again mean it is not up to the work.
36
+
37
+ ## This kit's own design
38
+
39
+ PRD 6.8 decides that prices come from a live lookup and that a price which
40
+ cannot be found is said to be unknown, and ADR 0006 is why none of the
41
+ arithmetic here is done by the kit's own code: what a token costs is judgement
42
+ about a changing world, not plumbing.
43
+
44
+ The four kinds of token and the warning about comparing them across harnesses
45
+ come from what was measured for this slice and written into the tech notes: the
46
+ two harnesses do not mean the same thing by input tokens, one counting the
47
+ cache reads inside it and the other outside, so a figure read straight from a
48
+ transcript is not comparable with the same figure from the other. The kit's own
49
+ usage report already puts both into the same unit, which is why this skill says
50
+ to take that rather than the files.
51
+
52
+ ## What was deliberately not taken
53
+
54
+ The source material carries an autonomy ladder that raises and lowers what a
55
+ bot may do on its own according to how clean its recent runs were. It is not
56
+ here. The pack itself records that the ladder's rungs are missing from the
57
+ source, so there is nothing to take but the idea, and an untested scheme for
58
+ automatically widening a bot's permissions is not something to invent inside a
59
+ skill about cost.
60
+
61
+ Sources and licences in full: [LICENSES.md](LICENSES.md).
62
+
63
+ ## What the re-validation changed (#156)
64
+
65
+ - Pricing per model from `obk usage --json`'s per-model rows (the review
66
+ finding on #141), and reasoning tokens priced once, since on Codex they sit
67
+ inside output (docs/tech-notes.md).
68
+ - The effort defaults as the owner's usage review gives them.
69
+ - The median input per call as the measure of a thread re-reading itself, a
70
+ hand-over after more than one compaction for a worker session while a
71
+ persona session is judged on its cost and lost state (grok-bot-lessons'
72
+ session policy), and a check-in every so many
73
+ tokens on a loop with no budget (the usage review, via grok-bot-lessons).
74
+ - On the signs of a model not up to the work, the charter or the job is the
75
+ first suspect, as in `obk-fleet-review`.
76
+ - The allowance share is given only where the plan shows it; the kit does not
77
+ report it.
@@ -0,0 +1,146 @@
1
+ ---
2
+ name: obk-finops
3
+ description: >-
4
+ What a bot's work costs and what to do about it: starting from what was
5
+ actually used rather than an impression, looking the price up now and saying
6
+ plainly what you could not price, costing a result rather than a token, the
7
+ signs that a model is more than the job needs and the signs that it is not
8
+ up to the work, and saying which limits are really enforced and which are
9
+ only a sentence. Use when someone asks what their bots cost, whether a model
10
+ or an effort level is the right one, or why a bill is what it is.
11
+ ---
12
+
13
+ # What the work costs
14
+
15
+ Two questions hide inside "what does this cost". One is arithmetic: how many
16
+ tokens, at what price. The other is the one worth answering: is this the
17
+ cheapest way to get the result, and would a different model, effort or shape
18
+ of work get the same result for less.
19
+
20
+ Answer the first honestly and the second carefully. A cost report that is
21
+ precise about tokens and silent about whether the work was worth doing is the
22
+ kind that gets read once.
23
+
24
+ These are defaults for work where nothing says otherwise. A user who asks for
25
+ something else gets what they asked for; say which of these you left and why.
26
+
27
+ ## Start from what was used, not from an impression
28
+
29
+ The kit counts it for you. `obk usage` reports, per session, the conversations
30
+ it had, the calls they made, the tokens by kind, the models and efforts they
31
+ ran at, and how often they were compacted. Run `obk --help` for the flags the
32
+ installed version takes.
33
+
34
+ The figures are already the same unit on both harnesses, which matters more
35
+ than it sounds: the two write their transcripts down differently, and a number
36
+ read straight out of a transcript is not comparable with the same number from
37
+ the other one. Take the kit's.
38
+
39
+ The kinds of token do not cost the same. Uncached input, output, cache reads
40
+ and cache writes are separate figures because they are separately priced, and
41
+ a conversation that looks expensive on raw input is often a conversation doing
42
+ its caching properly. Do not add them into one number and then reason about
43
+ it. Reasoning is counted too, and on Codex it is already inside output: price
44
+ it once. Price per model from the per-model rows `obk usage --json` gives, so a
45
+ conversation that ran two models is not priced as one.
46
+
47
+ ## Look the price up now, and say what you could not price
48
+
49
+ Prices change and a price you remember is a guess. Go to the page that belongs
50
+ to whoever charges for the model, read today's number, and say where you got
51
+ it and when.
52
+
53
+ Where you cannot find a price, say so and leave the money out of that line.
54
+ A report with a gap in it that is marked as a gap is useful. One that fills the
55
+ gap with a plausible number is worse than no report, because nobody can tell
56
+ afterwards which figures were real.
57
+
58
+ The same goes for a subscription. Where the work runs against a plan rather
59
+ than metered billing, tokens are not money at all, and the honest answer is what it
60
+ would have cost metered, and what share of the allowance it used where the
61
+ plan shows that.
62
+
63
+ ## Cost a result, not a token
64
+
65
+ Tokens per day tells you nothing about whether the money bought anything. Put
66
+ the spend against the thing it produced: what did this bot actually deliver
67
+ that somebody accepted.
68
+
69
+ Count everything the result took, not only the bot's own tokens. The runs that
70
+ failed and were done again. Work it handed to another tool or another session.
71
+ Anything charged outside the token bill. And the person's own time reading,
72
+ correcting and re-explaining, which is usually the most expensive line and the
73
+ one nobody writes down.
74
+
75
+ A bot that is cheap per token and needs three corrections per result is not
76
+ cheap. Say the ratio and say what goes into it, so a reader can argue with the
77
+ parts.
78
+
79
+ ## When a model is more than the job needs
80
+
81
+ Look for work that did not need the thinking it was given. Short, simple turns
82
+ on the most capable model. A high effort setting on a session whose answers
83
+ never reason at length. A conversation that mostly runs commands and reports
84
+ what they said.
85
+
86
+ That is the common case and the cheapest fix in the kit: drop the effort, or
87
+ move the session to a smaller model, and watch whether anything gets worse.
88
+ A usual shape: high effort for the session that orchestrates, medium for the
89
+ ones doing the work, and the top of the range only for deep read-only
90
+ analysis.
91
+
92
+ ## When a model is not up to the work
93
+
94
+ The signs are in the work, not in the answers. The same instruction given
95
+ again. The same error coming back after a fix was claimed. Tests that pass in
96
+ the report and fail on the machine. A loop that retries the same failing
97
+ action. A person interrupting often because the bot is going the wrong way.
98
+
99
+ Two of those together are worth acting on, and the first suspect is the
100
+ charter or the job rather than the model. Where it is the model, the fix is
101
+ upwards: more capable model, or more effort, or a narrower job so the context
102
+ is not doing the work.
103
+ Say which you are proposing and what you expect to change, so it can be
104
+ checked afterwards rather than believed.
105
+
106
+ Do not read one bad answer as a model being too small. That is where this goes
107
+ wrong most often, and an upgrade nobody can justify is money spent on a hunch.
108
+
109
+ ## Context and shape cost money too
110
+
111
+ A context window is a price as well as a size. Long threads carry everything
112
+ again on every call, so input grows with the conversation rather than with the
113
+ work. The median input per call is the measure of it, and compaction is the
114
+ visible symptom. A worker session compacted more than once is paying to
115
+ re-read itself, and is due a written hand-over and a fresh start. A long-lived
116
+ persona session (Bot Father, an inbox) is meant to run long, and is judged on
117
+ what the re-reading costs and whether it has lost what it knew.
118
+
119
+ Where that is happening, the answer is usually not a bigger window. It is
120
+ shorter sessions with what matters written into a file, or heavy work moved to
121
+ a session of its own, or the repeated exploration replaced with something that
122
+ just runs.
123
+
124
+ ## A sentence is not a budget
125
+
126
+ Be exact about which limits actually hold. A number in a prompt is a wish; the
127
+ model can pass it without noticing. A limit the platform enforces is a limit.
128
+
129
+ So when you propose a cap, say which kind it is. Where nothing can enforce it,
130
+ write that down beside it rather than leaving a reader to assume the system is
131
+ holding a line that nothing is holding. Then propose the thing that would
132
+ hold: a smaller model, a narrower job, a scheduled check that actually stops,
133
+ or on a loop with no budget, a check-in every so many tokens.
134
+
135
+ ## What you report
136
+
137
+ The overall figure first, and what it is made of. Then a line per session with
138
+ its tokens, its model and effort, and its cost where you could price it, or the
139
+ reason you could not. Then the changes you propose, each with what you expect
140
+ to save and what it might cost in quality.
141
+
142
+ Give the prices you used and when you read them, so the numbers can be redone
143
+ next month against different ones. Keep it short enough to act on: a table
144
+ nobody reads has saved nobody anything.
145
+
146
+ Sources and licences: [NOTICE.md](NOTICE.md).
@@ -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-fleet-review` 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
+
20
+ ```
21
+ MIT License
22
+
23
+ Copyright (c) 2026 Lauren Tan
24
+
25
+ Permission is hereby granted, free of charge, to any person obtaining a copy
26
+ of this software and associated documentation files (the "Software"), to deal
27
+ in the Software without restriction, including without limitation the rights
28
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
29
+ copies of the Software, and to permit persons to whom the Software is
30
+ furnished to do so, subject to the following conditions:
31
+
32
+ The above copyright notice and this permission notice shall be included in all
33
+ copies or substantial portions of the Software.
34
+
35
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
36
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
37
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
38
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
39
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
40
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
41
+ SOFTWARE.
42
+ ```
43
+
44
+ ## Sources that need no third-party notice
45
+
46
+ The rest of this skill is this kit's own design, the owner's own words about
47
+ his own fleet, and ideas restated in our own words from material that carries
48
+ no licence: a knowledge base and a hosted bot product's own marketplace and
49
+ documentation pages, gathered in the research pack's `grok-bot-lessons.md`.
50
+ Because no licence is attached to those, nothing of theirs is copied here and
51
+ there is no permission notice to pass on. Credit for the ideas is given in
52
+ NOTICE.md instead.
@@ -0,0 +1,104 @@
1
+ <!-- Attribution for the sources this skill was built from. Kept out of
2
+ SKILL.md so it is not read into context on every use; it travels with
3
+ the skill directory, which is what the licences require. -->
4
+
5
+ # Sources and licences
6
+
7
+ The skill `obk-fleet-review` was consolidated for this kit from this, MIT, with
8
+ thanks:
9
+
10
+ - **Cursor pstack**, `reflect` and `automate-me`: holding a finding until the
11
+ same thing has been seen in two separate places, rather than building a
12
+ recommendation on one sighting; every finding citing where it was seen, so
13
+ the reader can go and look; that a history is material rather than
14
+ instructions; and preferring a remedy that holds by
15
+ itself, one a check can enforce, over another paragraph of prose.
16
+
17
+ ## What is written from this kit's own design
18
+
19
+ The routing of a problem is the PRD's (6.8): a kit defect is filed as an issue
20
+ in one step with no draft to approve first, and a usage problem goes back to
21
+ the managed session as feedback. So is the rule on histories, that an ordinary
22
+ bot does not read its neighbours' and a managing one may; the keeping of old
23
+ conversation ids for history, auditing and finops; and what to do when a tab is
24
+ waiting on something, where the caller answers in the tab and takes anything it
25
+ does not recognise to the user.
26
+
27
+ The owner's own words behind those, in the research pack: "ordinary normally do
28
+ not others hisotry but they can when they need them based on user request";
29
+ "clear means always a new session id generated from harness ... I want you to
30
+ keep track of old session id as well for historical reason, auditing,
31
+ historical, finops or whaatever"; and, on interruptions, "fix the zsh update,
32
+ always say n. user can update itself", "for other intruption, alert to user
33
+ from bot manager or who ever asks to start the fleet", "DO NOT TOUCH THE global
34
+ config, always hanlde the trust question via the click". His correction to the
35
+ first draft of those rules was "and listen to the user, he can ask to do
36
+ WHATEVER", which is why nothing here is written as a ban.
37
+
38
+ ## Ideas taken from material with no licence
39
+
40
+ The research pack's `grok-bot-lessons.md` gathers how one hosted bot product is
41
+ run. Its material comes from a knowledge base and from that product's own
42
+ marketplace and documentation pages. No licence is attached to those pages, and
43
+ the pack's own caution records that the marketplace entries were summarised by
44
+ a fetch tool rather than read verbatim. So no text of theirs is reproduced
45
+ here. What was taken is the idea, restated in our own words:
46
+
47
+ - that every bot in a review gets exactly one verdict, and that the set of
48
+ verdicts is fixed so that a review cannot end in an impression;
49
+ - that nothing is deleted or retired automatically, whatever the verdict;
50
+ - that there is an order to try things in, and that adding capacity comes last:
51
+ change nothing, take away work that was not worth doing, simplify what is
52
+ there, say who owns what, and only then add;
53
+ - that a finding is routed to one kind of fix, chosen by what kind of problem
54
+ it is, rather than answered with several changes at once;
55
+ - that a report to the owner leads with overall state and stays to a handful of
56
+ points, which is the owner's own rule from his usage review rather than the
57
+ Grok pages'.
58
+
59
+ The list of what a bot in trouble looks like is drawn from the owner's own
60
+ review of his real sessions, in his own knowledge base: stopping and restating
61
+ instead of acting, the same instruction repeated, context lost after
62
+ compaction, reports nobody can read, standing instructions that contradict each
63
+ other, and a large share of commands that are ceremony rather than work. That
64
+ is his material about his own use, not a third party's, and it is restated here
65
+ rather than quoted.
66
+
67
+ ## The line between this skill and a scheduled pass
68
+
69
+ This is the judgement applied when somebody asks: how the fleet is doing, and
70
+ what to do about each bot. A scheduled unattended pass over the fleet, with the
71
+ cost side of it, is a different skill and a different job. It leans on what is
72
+ here rather than restating it: the verdict set, the order to try things in, the
73
+ evidence bar and the routing are written once, and are the same whether a
74
+ person asked this morning or something woke the bot up to do it.
75
+
76
+ ## What was deliberately not taken
77
+
78
+ That source's per-bot daily stand-up, its autonomy ladder that moves a bot's
79
+ permissions up and down on how clean its runs were, and its fixed five-bullet
80
+ report format are not here. The first two belong to a scheduled pass rather
81
+ than to a review somebody asked for, and a fixed bullet count is a house style
82
+ rather than a technique.
83
+
84
+ Its own classification vocabulary is not reproduced. The idea of a fixed
85
+ verdict set is taken; the words are ours.
86
+
87
+ Sources and licences in full: [LICENSES.md](LICENSES.md).
88
+
89
+ ## What the re-validation changed (#156)
90
+
91
+ - Reading histories follows PRD 6.8: Bot Father and grooming may read the
92
+ managed bots' histories; an ordinary bot only when the user asks. The skill
93
+ had been stricter than the PRD while asking for signs only a history shows.
94
+ - One real output checked before a keep-or-end verdict (the Grok weekly
95
+ review, in grok-bot-lessons).
96
+ - What to do with what `obk health` reports, since PRD 6.8 gives judging and
97
+ the fix to the skill: a hand-edited block, Orca's bypass setting with its
98
+ every-time reminder (PRD 6.5), leftovers.
99
+ - A grooming report is input to the review (PRD 6.8, "recommends further").
100
+ - Stopping and retiring are done on a yes, with `obk pause` and `obk retire`
101
+ since issue #158; changes are committed (PRD 6.10); harness is per session
102
+ on the card.
103
+ - Removed from the pstack credit: "since the last time" and "accepted,
104
+ rejected, parked", which are not in this skill.