@assuredloop/orca-bot-kit 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +545 -3
- package/SETUP.md +270 -0
- package/package.json +32 -13
- package/rules/evidence.md +15 -0
- package/rules/finishing.md +20 -0
- package/rules/limits.md +18 -0
- package/rules/mail.md +17 -0
- package/rules/profiles.md +9 -0
- package/rules/review.md +14 -0
- package/rules/scope.md +20 -0
- package/rules/simple.md +14 -0
- package/rules/talk.md +13 -0
- package/rules/tests-first.md +15 -0
- package/rules/the-ask.md +19 -0
- package/skills/obk-arch/LICENSES.md +45 -0
- package/skills/obk-arch/NOTICE.md +134 -0
- package/skills/obk-arch/SKILL.md +387 -0
- package/skills/obk-bot-building/LICENSES.md +21 -0
- package/skills/obk-bot-building/NOTICE.md +113 -0
- package/skills/obk-bot-building/SKILL.md +235 -0
- package/skills/obk-debugging/LICENSES.md +67 -0
- package/skills/obk-debugging/NOTICE.md +115 -0
- package/skills/obk-debugging/SKILL.md +419 -0
- package/skills/obk-decision-memo/LICENSES.md +49 -0
- package/skills/obk-decision-memo/NOTICE.md +181 -0
- package/skills/obk-decision-memo/SKILL.md +241 -0
- package/skills/obk-finops/LICENSES.md +19 -0
- package/skills/obk-finops/NOTICE.md +77 -0
- package/skills/obk-finops/SKILL.md +146 -0
- package/skills/obk-fleet-review/LICENSES.md +52 -0
- package/skills/obk-fleet-review/NOTICE.md +104 -0
- package/skills/obk-fleet-review/SKILL.md +219 -0
- package/skills/obk-grilling/LICENSES.md +42 -0
- package/skills/obk-grilling/NOTICE.md +103 -0
- package/skills/obk-grilling/SKILL.md +217 -0
- package/skills/obk-grooming/LICENSES.md +52 -0
- package/skills/obk-grooming/NOTICE.md +111 -0
- package/skills/obk-grooming/SKILL.md +219 -0
- package/skills/obk-handoff/LICENSES.md +45 -0
- package/skills/obk-handoff/NOTICE.md +51 -0
- package/skills/obk-handoff/SKILL.md +119 -0
- package/skills/obk-personal-facilitation/LICENSES.md +53 -0
- package/skills/obk-personal-facilitation/NOTICE.md +62 -0
- package/skills/obk-personal-facilitation/SKILL.md +86 -0
- package/skills/obk-recall/LICENSES.md +42 -0
- package/skills/obk-recall/NOTICE.md +53 -0
- package/skills/obk-recall/SKILL.md +129 -0
- package/skills/obk-researching/LICENSES.md +67 -0
- package/skills/obk-researching/NOTICE.md +170 -0
- package/skills/obk-researching/SKILL.md +259 -0
- package/skills/obk-reviewing/LICENSES.md +66 -0
- package/skills/obk-reviewing/NOTICE.md +58 -0
- package/skills/obk-reviewing/SKILL.md +408 -0
- package/skills/obk-tdd/LICENSES.md +68 -0
- package/skills/obk-tdd/NOTICE.md +54 -0
- package/skills/obk-tdd/SKILL.md +516 -0
- package/skills/obk-tdd/mutation-tools.md +80 -0
- package/skills/obk-teach/LICENSES.md +42 -0
- package/skills/obk-teach/NOTICE.md +65 -0
- package/skills/obk-teach/SKILL.md +106 -0
- package/skills/obk-why/LICENSES.md +42 -0
- package/skills/obk-why/NOTICE.md +74 -0
- package/skills/obk-why/SKILL.md +169 -0
- package/skills/obk-writing/LICENSES.md +272 -0
- package/skills/obk-writing/NOTICE.md +161 -0
- package/skills/obk-writing/SKILL.md +254 -0
- package/src/book.js +268 -0
- package/src/bot.js +451 -0
- package/src/cli.js +1130 -0
- package/src/conversations.js +150 -0
- package/src/groom.js +157 -0
- package/src/health.js +309 -0
- package/src/hooks.js +202 -0
- package/src/init.js +314 -0
- package/src/launch.js +276 -0
- package/src/message.js +380 -0
- package/src/orca.js +291 -0
- package/src/pause.js +58 -0
- package/src/record.js +209 -0
- package/src/restart.js +192 -0
- package/src/retire.js +92 -0
- package/src/roster.js +71 -0
- package/src/rules.js +408 -0
- package/src/skills.js +629 -0
- package/src/sources.js +370 -0
- package/src/up.js +475 -0
- package/src/usage.js +401 -0
- package/bin/okb.js +0 -4
- package/src/index.js +0 -11
|
@@ -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.
|