@assuredloop/orca-bot-kit 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +548 -3
- package/SETUP.md +275 -0
- package/package.json +32 -13
- package/rules/evidence.md +15 -0
- package/rules/finishing.md +23 -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 +22 -0
- package/rules/simple.md +14 -0
- package/rules/talk.md +13 -0
- package/rules/tests-first.md +17 -0
- package/rules/the-ask.md +19 -0
- package/skills/obk-arch/LICENSES.md +52 -0
- package/skills/obk-arch/NOTICE.md +242 -0
- package/skills/obk-arch/SKILL.md +598 -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 +312 -0
- package/skills/obk-debugging/LICENSES.md +67 -0
- package/skills/obk-debugging/NOTICE.md +115 -0
- package/skills/obk-debugging/SKILL.md +434 -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 +148 -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 +256 -0
- package/skills/obk-grilling/LICENSES.md +42 -0
- package/skills/obk-grilling/NOTICE.md +111 -0
- package/skills/obk-grilling/SKILL.md +221 -0
- package/skills/obk-grooming/LICENSES.md +52 -0
- package/skills/obk-grooming/NOTICE.md +111 -0
- package/skills/obk-grooming/SKILL.md +222 -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 +269 -0
- package/skills/obk-reviewing/LICENSES.md +66 -0
- package/skills/obk-reviewing/NOTICE.md +58 -0
- package/skills/obk-reviewing/SKILL.md +411 -0
- package/skills/obk-tdd/LICENSES.md +68 -0
- package/skills/obk-tdd/NOTICE.md +54 -0
- package/skills/obk-tdd/SKILL.md +547 -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 +180 -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 +1169 -0
- package/src/conversations.js +150 -0
- package/src/groom.js +159 -0
- package/src/health.js +309 -0
- package/src/hooks.js +257 -0
- package/src/init.js +314 -0
- package/src/launch.js +299 -0
- package/src/message.js +402 -0
- package/src/orca.js +362 -0
- package/src/pause.js +63 -0
- package/src/record.js +209 -0
- package/src/restart.js +193 -0
- package/src/retire.js +92 -0
- package/src/roster.js +71 -0
- package/src/rules.js +408 -0
- package/src/skills.js +630 -0
- package/src/sources.js +371 -0
- package/src/up.js +500 -0
- package/src/usage.js +401 -0
- package/bin/okb.js +0 -4
- package/src/index.js +0 -11
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
This skill is not a port of any one source, because no source has a skill for
|
|
8
|
+
this. Most of it comes from two places of our own, and two MIT skills
|
|
9
|
+
contribute a piece each.
|
|
10
|
+
|
|
11
|
+
- **This repository's own earlier `personal-facilitation` skill**, written for
|
|
12
|
+
the Codex desktop kit and removed when the tree was cleaned (`git show
|
|
13
|
+
51a42a3:skills/personal-facilitation/SKILL.md`). Almost everything here is
|
|
14
|
+
from it: reading the list the user already keeps before creating another, a
|
|
15
|
+
simple editable file where the bot keeps its work when there is none, asking
|
|
16
|
+
about the location only when several lists make the choice unclear, the
|
|
17
|
+
user's wording with a concrete next action and only the deadline they gave,
|
|
18
|
+
no invented dates or priorities, a practical ordering kept apart from the
|
|
19
|
+
user's decision, preserving unrelated entries and notes, modifying an entry
|
|
20
|
+
rather than duplicating it, marking complete only on the user's word or a
|
|
21
|
+
verified outcome, returning the next actionable item, using the host's own
|
|
22
|
+
scheduling for a reminder and verifying what was set, a line in a to-do file
|
|
23
|
+
or a saved skill not being a scheduled reminder, and reporting a missing host
|
|
24
|
+
capability instead of claiming something will run later.
|
|
25
|
+
- **The research pack's `grok-bot-lessons.md`**, our own read of the owner's
|
|
26
|
+
knowledge base on running a personal helper bot. "36 drafts queued, 0 sent":
|
|
27
|
+
finish every reversible step and stop at the irreversible one (BNK-2920 §09,
|
|
28
|
+
the wording ours). Save a routine only once a manual run has come out right
|
|
29
|
+
(BNK-2921); here scoped to a routine that does work, since a plain reminder
|
|
30
|
+
has nothing to run by hand. The time zone and the end date in a routine's
|
|
31
|
+
checklist.
|
|
32
|
+
- **`mattpocock/skills`, `skills/in-progress/loop-me`** (MIT): do the most you
|
|
33
|
+
can before involving the person, so they are asked once, late; and hand back
|
|
34
|
+
something decision-ready that points at the thing rather than reproducing it.
|
|
35
|
+
- **Cursor `plugins`, `third_party/x/skills/x-chat`** (MIT, `third_party/x/
|
|
36
|
+
LICENSE`, "Copyright (c) 2026 Cursor"): outbound text needs the person's
|
|
37
|
+
approval unless they already said to send it ("reply that I'll be there"),
|
|
38
|
+
and a vague "check my inbox" is not that.
|
|
39
|
+
|
|
40
|
+
Written differently from the old skill, on purpose: no fixed path (PRD 7.1
|
|
41
|
+
assumes no way of working); a vague item stays on the list and is asked about,
|
|
42
|
+
rather than dropped; the old paragraph on local memory and contacting other
|
|
43
|
+
bots is left out, as wiring rather than list-keeping; and "read back the
|
|
44
|
+
edited content" became comparing against what was there before, because
|
|
45
|
+
reading your own version back cannot catch a line dropped by accident.
|
|
46
|
+
|
|
47
|
+
The rest of the research pack's sources have no personal-assistant or to-do
|
|
48
|
+
skill in them. The nearest were `anthropics/skills`' `discernment-nudge` (a
|
|
49
|
+
different job), `garrytan/gstack`'s engineering TODO format (PRD 7.1 prescribes
|
|
50
|
+
no document format) and its privacy gate for a memory store; none is taken.
|
|
51
|
+
|
|
52
|
+
From an acceptance run of the first version, by a bot that had not seen it
|
|
53
|
+
written: ask in the reply, not in a file; keep a date on an item marked done;
|
|
54
|
+
act on an urgency the person states; ask where an undated item goes only when
|
|
55
|
+
the list is divided by due date; setting a reminder is not the same as it
|
|
56
|
+
reaching them; a task with no reversible half still hands back what to do.
|
|
57
|
+
|
|
58
|
+
The owner's word on this skill is one line: a very light one (research-pack
|
|
59
|
+
dialogue, 2026-09-19 19:44). The PRD carries it as decided (7.2). He said
|
|
60
|
+
nothing about what it should contain, so the content is the old skill's, the
|
|
61
|
+
borrowed pieces and what an acceptance run showed, and the reasons are left
|
|
62
|
+
out of the body so it stays light without losing a technique.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: obk-personal-facilitation
|
|
3
|
+
description: >-
|
|
4
|
+
Keeping someone's own to-do list and helping with their day: working from the
|
|
5
|
+
list they keep, writing what they said and not what you inferred, changing an
|
|
6
|
+
entry rather than adding a second, marking something done only on their word
|
|
7
|
+
or a checked outcome, and stopping before the step that cannot be taken back.
|
|
8
|
+
Use when the job is someone's tasks and errands rather than a project: adding
|
|
9
|
+
to their list, tidying it, working out what to do next, or a reminder.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Keeping someone's list
|
|
13
|
+
|
|
14
|
+
These are one person's own tasks, not a project's backlog. Keep the list true
|
|
15
|
+
and short enough to act on.
|
|
16
|
+
|
|
17
|
+
These are defaults for work where nothing says otherwise. A user who asks for
|
|
18
|
+
something else gets what they asked for; say which of these you left and why.
|
|
19
|
+
|
|
20
|
+
## Work from the list they already keep
|
|
21
|
+
|
|
22
|
+
Look for it before you start another one; a second list means neither is
|
|
23
|
+
complete. Where there is none, make a plain text file a person can read and
|
|
24
|
+
edit, wherever this bot keeps its work. Where there are several and the choice
|
|
25
|
+
is real, ask which; where one is obviously live, use it and say which.
|
|
26
|
+
|
|
27
|
+
## Write down what they said
|
|
28
|
+
|
|
29
|
+
Their words for the item, not your tidier version. One concrete next action,
|
|
30
|
+
phrased so they could start it without working anything out. Only the date
|
|
31
|
+
they actually gave you: no invented deadline, priority, category or detail.
|
|
32
|
+
|
|
33
|
+
Where an item is too vague to carry a next action, keep it and ask. Do what you
|
|
34
|
+
can first, then ask once, in your reply rather than in a file.
|
|
35
|
+
|
|
36
|
+
## Change the entry, do not add another
|
|
37
|
+
|
|
38
|
+
When they revise something, edit the entry that is there and leave every other
|
|
39
|
+
line alone. Then compare the result against what was there before, rather than
|
|
40
|
+
reading back your own new version.
|
|
41
|
+
|
|
42
|
+
## Done is their word, or an outcome you checked
|
|
43
|
+
|
|
44
|
+
Mark something complete when they say so, or when the thing they asked for has
|
|
45
|
+
happened and you have seen it; not because you did the step you thought was
|
|
46
|
+
the whole of it. Where finishing leaves a date behind it, keep the date on the
|
|
47
|
+
item. "Book the dentist" is done once it is booked.
|
|
48
|
+
|
|
49
|
+
## Ordering is a suggestion; the priority is theirs
|
|
50
|
+
|
|
51
|
+
An order they give you is theirs: when they say something has become urgent,
|
|
52
|
+
act on it and say you moved it. An order you worked out is a suggestion: offer
|
|
53
|
+
it, say what it rests on, and leave their list alone until they say. A new
|
|
54
|
+
undated item goes where the list's shape puts it, which on a plain run is the
|
|
55
|
+
end; where the sections are about when things are due, ask.
|
|
56
|
+
|
|
57
|
+
## A line in a file is not a reminder
|
|
58
|
+
|
|
59
|
+
Where they ask to be reminded, or for something to happen regularly, use
|
|
60
|
+
whatever actually schedules work where you are running. Writing "remind me
|
|
61
|
+
Tuesday" into a file, or saving it as a skill, schedules nothing. Check what
|
|
62
|
+
you set: the task, the time and its time zone, the repeat, and when it stops if
|
|
63
|
+
it should. Work out how it reaches them, since a job that fires into a log
|
|
64
|
+
nobody opens has reminded nobody. Where nothing can schedule it, or you may not
|
|
65
|
+
reach what can, say so and hand back exactly what would need to be set. A
|
|
66
|
+
routine that does work on its own, rather than only reminding, runs once by
|
|
67
|
+
hand first.
|
|
68
|
+
|
|
69
|
+
## Stop at the step that cannot be taken back
|
|
70
|
+
|
|
71
|
+
Do the reversible part and stop at the line. Write the message, fill in the
|
|
72
|
+
form, get the thing ready; leave the sending, the paying, the booking and the
|
|
73
|
+
deleting to them, unless they have told you to go ahead with that thing.
|
|
74
|
+
"Reply that I will be there" is permission; "check my inbox" is not. A draft
|
|
75
|
+
not sent is finished work: say where it is and point the item at it. Where a
|
|
76
|
+
task has no reversible half, hand them the thing to do and what they need in
|
|
77
|
+
hand for it.
|
|
78
|
+
|
|
79
|
+
## What they get back
|
|
80
|
+
|
|
81
|
+
What you changed, the one thing to do next, and what you need from them. Where
|
|
82
|
+
they asked what is on the list, show it; otherwise point at the list rather than
|
|
83
|
+
reproducing it. Their list is personal: use what is in it for the job they
|
|
84
|
+
asked for, and do not copy it anywhere else.
|
|
85
|
+
|
|
86
|
+
Sources and licences: [NOTICE.md](NOTICE.md).
|
|
@@ -0,0 +1,42 @@
|
|
|
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-recall` 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
|
+
```
|
|
@@ -0,0 +1,53 @@
|
|
|
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-recall` was consolidated for this kit from this, MIT, with
|
|
8
|
+
thanks:
|
|
9
|
+
|
|
10
|
+
- **Cursor pstack**, `recall`, and its `poteto-mode` `session-pickup` playbook:
|
|
11
|
+
rebuilding recent working context before acting rather than writing a
|
|
12
|
+
history; classifying and routing first, with one specific prior session being
|
|
13
|
+
a pickup rather than a recall and an already-supplied state capsule meaning
|
|
14
|
+
no mining at all, with the pickup itself carried here in short (last
|
|
15
|
+
messages first, then the decisions, what landed against what was planned,
|
|
16
|
+
the resume point, nothing finished redone, what was inherited said), since
|
|
17
|
+
the kit has no separate pickup skill; locking the scope before searching, with "recent" as a real
|
|
18
|
+
range stated back and never quietly narrowed; ordering candidates by when
|
|
19
|
+
they were last modified rather than by identifier; searching for the topic
|
|
20
|
+
first and reading only the matching sessions and only their relevant parts;
|
|
21
|
+
skipping the current session and the obvious noise; reducing a long
|
|
22
|
+
transcript elsewhere and keeping only the reduced timeline; the per-session
|
|
23
|
+
fields (the goal, the decisions, the open threads, the struggles and
|
|
24
|
+
corrections, the artefacts), each traceable to where it came from; the rule
|
|
25
|
+
that your own history is not the whole record and that a feature with a long
|
|
26
|
+
bug tail keeps most of its story elsewhere, so the shared record is swept by
|
|
27
|
+
default rather than as a judgement call; null results being findings and an
|
|
28
|
+
unavailable source being said rather than skipped silently; verifying what
|
|
29
|
+
the mining surfaced against live state, and reading the record itself rather
|
|
30
|
+
than a trimmed summary when the answer turns on what was actually done; the
|
|
31
|
+
output contract: a capsule of at most five, one tagged line per thread with
|
|
32
|
+
an untagged thread counting as not done, at most five recurring problems
|
|
33
|
+
including a fix that shipped and was reverted, and one concrete next move;
|
|
34
|
+
cutting detail before cutting threads; citing findings to their source; and
|
|
35
|
+
sanitising private context before it goes anywhere else. From
|
|
36
|
+
`session-pickup`: the prior trail is authoritative input, so resist the bias
|
|
37
|
+
to re-derive it, and a "verify from scratch" pass means treating it as
|
|
38
|
+
untrustworthy when it is not; and a passing prior self-report is not the
|
|
39
|
+
proof.
|
|
40
|
+
|
|
41
|
+
Made generic, which is what the owner asked for. The original names a fixed
|
|
42
|
+
transcript path, a particular set of hosted sources and a parallel fan-out on
|
|
43
|
+
named models; this version has the harness or the project say where a session's
|
|
44
|
+
record lives, uses whatever sources the project actually has, and states a
|
|
45
|
+
missing one as a limit on what could be checked. The privacy rule is kept and
|
|
46
|
+
generalised: another project's history is not read without being asked.
|
|
47
|
+
|
|
48
|
+
One departure: the original keeps itself from being invoked on its own with
|
|
49
|
+
`disable-model-invocation: true`, which is not portable frontmatter (ADR 0019
|
|
50
|
+
and PRD 7.2: these run on purpose, never automatically). Its description can
|
|
51
|
+
therefore say "before starting or resuming work" safely; ours cannot, so the
|
|
52
|
+
description and the skill both say it runs when it is asked for, and that
|
|
53
|
+
having been away from the work is not itself a trigger.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: obk-recall
|
|
3
|
+
description: >-
|
|
4
|
+
Rebuilding where a piece of work actually stands: fixing the scope first,
|
|
5
|
+
reading back over your own history and whatever the project records around
|
|
6
|
+
the same code, checking what you find against the live state, and handing
|
|
7
|
+
back a short brief of where things are and what to do next. Run it when you
|
|
8
|
+
are asked to: "catch me up", "what was I doing with X", "where did I leave
|
|
9
|
+
off", "get up to speed on this before we start". Not something to do
|
|
10
|
+
unbidden: being asked to carry on with a task is a request for the task.
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Working out where you left off
|
|
14
|
+
|
|
15
|
+
You are rebuilding context, not writing history. The output is short and it
|
|
16
|
+
ends in a next action.
|
|
17
|
+
|
|
18
|
+
This is run when someone asks for it. Having been away from the work is not
|
|
19
|
+
itself a trigger: pick up what you were asked to pick up, and say so if you
|
|
20
|
+
find you have lost the thread. Rebuilding context nobody asked for spends
|
|
21
|
+
their time and their money on your comfort.
|
|
22
|
+
|
|
23
|
+
These are defaults for work where nothing says otherwise. A user who asks for
|
|
24
|
+
something else gets what they asked for; say which of these you left and why.
|
|
25
|
+
|
|
26
|
+
## First, decide whether this is the right thing
|
|
27
|
+
|
|
28
|
+
- **One specific earlier session to continue** needs less than the rest of
|
|
29
|
+
this. Read its last messages first, then scan back for the decisions. Rebuild
|
|
30
|
+
what actually landed, set it beside what was planned, and name the point to
|
|
31
|
+
resume from. Do not redo what it finished. Say what you inherited and where
|
|
32
|
+
you are picking up.
|
|
33
|
+
- **A summary for someone else to read** is not this either. This is for
|
|
34
|
+
acting on.
|
|
35
|
+
- **If they have already told you the state** (the branch, the files, what
|
|
36
|
+
changed), use it. Do not go mining for what you have just been handed.
|
|
37
|
+
|
|
38
|
+
## Fix the scope before you search
|
|
39
|
+
|
|
40
|
+
Say it back before you start: how far back, what topic, and whose work. "Recent"
|
|
41
|
+
is a real range. Pick one and name it. Never quietly turn "everything" into
|
|
42
|
+
"the last few", and never widen a narrow question because the search was easy.
|
|
43
|
+
|
|
44
|
+
Stay inside the work you were asked about. Another project's history is not
|
|
45
|
+
yours to read without being asked, and a bot that wanders into unrelated
|
|
46
|
+
conversations is a problem whatever it finds there.
|
|
47
|
+
|
|
48
|
+
## Read your own history
|
|
49
|
+
|
|
50
|
+
Where a session's record lives depends on the harness, and the project or the
|
|
51
|
+
harness will tell you. Find that out rather than guessing at a path.
|
|
52
|
+
|
|
53
|
+
Then:
|
|
54
|
+
|
|
55
|
+
- Go by when things were last touched, not by the order names happen to sort
|
|
56
|
+
in. An identifier is not a date.
|
|
57
|
+
- Search for the topic first, and only read the sessions that match, and only
|
|
58
|
+
the parts of them that matter. Whole transcripts are long and mostly
|
|
59
|
+
irrelevant.
|
|
60
|
+
- Skip the session you are in, and the obvious noise: helper runs, test
|
|
61
|
+
sessions, anything that was not the work.
|
|
62
|
+
- When a transcript is long, reduce it somewhere else and bring back the
|
|
63
|
+
reduced timeline. Pulling the whole thing into the conversation you are
|
|
64
|
+
trying to rebuild is self-defeating. If what you sent off never comes back,
|
|
65
|
+
treat it as a source you could not reach: say so, say what the brief rests on
|
|
66
|
+
instead, and do not hold the brief waiting on it.
|
|
67
|
+
|
|
68
|
+
From each one, take: what the work was, what was decided, what was left open,
|
|
69
|
+
where it got stuck or was corrected, and what it produced (branches, changes,
|
|
70
|
+
issues). Note which session each came from, so a claim can be traced.
|
|
71
|
+
|
|
72
|
+
## Then read what everyone else recorded
|
|
73
|
+
|
|
74
|
+
Your own history is only half of it, and it is the half most likely to be
|
|
75
|
+
flattering. Where the topic names a feature, a file or an area, also look at
|
|
76
|
+
what the project records around it: what shipped, what was reverted and why,
|
|
77
|
+
what people keep reporting, what is still failing. A thing with a long tail of
|
|
78
|
+
trouble keeps most of its story outside your conversations.
|
|
79
|
+
|
|
80
|
+
Use whatever the project actually has: its history and its review discussion
|
|
81
|
+
where it keeps them, and a tracker, documents, a chat log, somewhere errors land: some
|
|
82
|
+
projects have them and some do not. Where one is missing, that is a fact
|
|
83
|
+
about what you could check, not a step to pretend you did.
|
|
84
|
+
|
|
85
|
+
Skip this only when the question is purely about your own activity ("what did
|
|
86
|
+
I do this week"), where your history and the current state are the whole
|
|
87
|
+
answer.
|
|
88
|
+
|
|
89
|
+
## Check it against what is true now
|
|
90
|
+
|
|
91
|
+
Whatever the reading turned up (a branch, a change, an issue), go and look at
|
|
92
|
+
its current state rather than trusting the account. A conversation from
|
|
93
|
+
Thursday does not know what happened on Friday. Where the answer hinges on
|
|
94
|
+
what was actually done rather than what was said, read the record itself
|
|
95
|
+
rather than a summary of it. A passing report from the earlier session is not
|
|
96
|
+
the proof; the thing it reported on is.
|
|
97
|
+
|
|
98
|
+
That is a check on the state, not a licence to do the work again. What the
|
|
99
|
+
earlier sessions worked out and decided is what you are inheriting, and it is
|
|
100
|
+
the best thing you have: take it, and resist the pull to re-derive it because
|
|
101
|
+
you were not there. Re-running a prior investigation to see whether you agree
|
|
102
|
+
treats a trail as untrustworthy when it is not, and spends exactly the time the
|
|
103
|
+
brief exists to save. Where the trail does turn out to be wrong, that is a
|
|
104
|
+
finding to report, not a quiet correction.
|
|
105
|
+
|
|
106
|
+
Then set what shipped beside what was planned. The difference between the two
|
|
107
|
+
is most of the brief: what is already done comes off the list, and what is left
|
|
108
|
+
names the point to pick up from.
|
|
109
|
+
|
|
110
|
+
## The brief
|
|
111
|
+
|
|
112
|
+
Lead with where things stand. Detail below that, or cut.
|
|
113
|
+
|
|
114
|
+
- **Where it stands.** At most five lines: what this work is and where it has
|
|
115
|
+
got to.
|
|
116
|
+
- **The threads.** One line each, and each one carries its state plainly:
|
|
117
|
+
landed, open, in progress on a branch, done but not committed, reverted,
|
|
118
|
+
planned and not started. A thread with no state named is a thread nobody can
|
|
119
|
+
act on.
|
|
120
|
+
- **What keeps going wrong.** At most five, and only the recurring ones.
|
|
121
|
+
Include anything that was fixed and then came back, so the next attempt
|
|
122
|
+
starts after the last failure rather than before it.
|
|
123
|
+
- **The next move.** One concrete action.
|
|
124
|
+
|
|
125
|
+
Anything adjacent stays out unless it is in the way. When it grows past a
|
|
126
|
+
screen, cut the detail rather than dropping a thread. Say where each thing
|
|
127
|
+
came from, and take out anything private before it goes anywhere else.
|
|
128
|
+
|
|
129
|
+
Sources and licences: [NOTICE.md](NOTICE.md).
|
|
@@ -0,0 +1,67 @@
|
|
|
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-researching` 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 each notice is reproduced with it:
|
|
15
|
+
|
|
16
|
+
- **Cursor `plugins`, the pstack plugin**, Copyright (c) 2026 Lauren Tan
|
|
17
|
+
(`cursor_plugins/pstack/LICENSE`)
|
|
18
|
+
- **`addyosmani/agent-skills`**, Copyright (c) 2025 Addy Osmani
|
|
19
|
+
(`addyosmani_agent-skills/LICENSE`)
|
|
20
|
+
- **`garrytan/gstack`**, Copyright (c) 2026 Garry Tan
|
|
21
|
+
(`garrytan_gstack/LICENSE`)
|
|
22
|
+
- **`mattpocock/skills`**, Copyright (c) 2026 Matt Pocock
|
|
23
|
+
(`mattpocock_skills/LICENSE`)
|
|
24
|
+
- **Cloudflare's security-audit skill**, Copyright (c) 2025-2026 Cloudflare, Inc.
|
|
25
|
+
(`cloudflare_security-audit-skill/LICENSE`)
|
|
26
|
+
- **`openai/skills`, the notion-research-documentation skill**, Copyright 2025 Notion Labs, Inc.
|
|
27
|
+
(`openai_skills/skills/.curated/notion-research-documentation/LICENSE.txt`)
|
|
28
|
+
|
|
29
|
+
Each licence file was read at the path given above.
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
MIT License
|
|
33
|
+
|
|
34
|
+
Copyright (c) 2026 Lauren Tan
|
|
35
|
+
Copyright (c) 2025 Addy Osmani
|
|
36
|
+
Copyright (c) 2026 Garry Tan
|
|
37
|
+
Copyright (c) 2026 Matt Pocock
|
|
38
|
+
Copyright (c) 2025-2026 Cloudflare, Inc.
|
|
39
|
+
Copyright 2025 Notion Labs, Inc.
|
|
40
|
+
|
|
41
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
42
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
43
|
+
in the Software without restriction, including without limitation the rights
|
|
44
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
45
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
46
|
+
furnished to do so, subject to the following conditions:
|
|
47
|
+
|
|
48
|
+
The above copyright notice and this permission notice shall be included in all
|
|
49
|
+
copies or substantial portions of the Software.
|
|
50
|
+
|
|
51
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
52
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
53
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
54
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
55
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
56
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
57
|
+
SOFTWARE.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## One source read only as a quotation
|
|
61
|
+
|
|
62
|
+
`tw93/Waza` is not among the clones in the research pack. Its
|
|
63
|
+
`rules/anti-patterns.md` is quoted in the pack's `source-book-2.md`, which
|
|
64
|
+
records the repository as MIT, and what this skill takes from it is the idea of
|
|
65
|
+
labelling a claim by whether it was checked, written in our own words rather
|
|
66
|
+
than copied. No Waza text is reproduced here, and its licence file was not
|
|
67
|
+
available to read.
|
|
@@ -0,0 +1,170 @@
|
|
|
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 permission notices these licences require are in
|
|
8
|
+
[LICENSES.md](LICENSES.md), beside this file.
|
|
9
|
+
|
|
10
|
+
The skill `obk-researching` was consolidated for this kit from these, with
|
|
11
|
+
thanks. Each licence below was read from the file named beside it.
|
|
12
|
+
|
|
13
|
+
- **Cursor `plugins`, `pstack/skills/why/references/`**: MIT,
|
|
14
|
+
`cursor_plugins/pstack/LICENSE`, "Copyright (c) 2026 Lauren Tan". Three files
|
|
15
|
+
carry most of this skill.
|
|
16
|
+
- `epistemics.md`: the tiers a claim can sit in and the rule that every claim
|
|
17
|
+
sits in one of them; the phrasing that goes with each; the words that carry
|
|
18
|
+
a citation with them and need one immediately beside them; the words to
|
|
19
|
+
avoid and why each ("obviously" would not be asked about, "clearly"
|
|
20
|
+
precedes what is not, "just" hides a difficulty, "I think" turns evidence
|
|
21
|
+
into opinion); not turning an absence of evidence into evidence of absence; the
|
|
22
|
+
embedded-hypothesis trap, where the asker's guess is a prompt for
|
|
23
|
+
investigation rather than a conclusion to validate; surfacing both sides
|
|
24
|
+
when sources disagree rather than picking the tidier narrative; naming a
|
|
25
|
+
gap concretely as the question, the sources, the search terms and what came
|
|
26
|
+
back; and the check that a report with no gaps in it is suspicious.
|
|
27
|
+
- `investigator-prompt.md`: the posture that gathering is not concluding, and
|
|
28
|
+
that the more boring and exact the notes the more useful they are, with one
|
|
29
|
+
verbatim quote and a precise citation worth more than a paragraph of
|
|
30
|
+
plausible summary; quote rather than paraphrase where the wording carries
|
|
31
|
+
the weight; go wide before going deep; read the whole thing rather than the
|
|
32
|
+
title or the summary, because the qualification is usually further down;
|
|
33
|
+
track what you searched and not only what you found, since an absence means
|
|
34
|
+
nothing to a reader who does not know what was looked for; resist the story
|
|
35
|
+
and treat the piece that does not fit as the interesting one; consider the
|
|
36
|
+
counterfactual before calling evidence strong; and never round a partial
|
|
37
|
+
finding up.
|
|
38
|
+
- `synthesizer-prompt.md`: the shape of the write-up, including one line per
|
|
39
|
+
source consulted covering the ones that held nothing and the ones that
|
|
40
|
+
could not be reached, with the reason; and its closing point that the value
|
|
41
|
+
of the output is its honesty rather than its authority, so that a reader
|
|
42
|
+
who takes it to the person who really knows can ask a better question.
|
|
43
|
+
- `why/SKILL.md` adds coverage rather than minimalism, documenting the null
|
|
44
|
+
instead of skipping the search, and the high bar for skipping a source:
|
|
45
|
+
provably irrelevant rather than probably irrelevant.
|
|
46
|
+
- **`addyosmani/agent-skills`, `skills/source-driven-development`**: MIT,
|
|
47
|
+
`addyosmani_agent-skills/LICENSE`, "Copyright (c) 2025 Addy Osmani". The
|
|
48
|
+
source hierarchy and what sits outside it: model-written summaries and your
|
|
49
|
+
own training data are not sources, and memory in particular is the one that
|
|
50
|
+
feels like knowledge. Its blanket line that forum answers and blog posts are
|
|
51
|
+
not primary is not carried: the review on #129 moved authority to the claim,
|
|
52
|
+
so a blog post is the source that owns a claim about its author's own
|
|
53
|
+
work. Being precise
|
|
54
|
+
about what you fetch, the specific page rather than the front page. Surfacing
|
|
55
|
+
a conflict between two authoritative sources instead of choosing. Treating
|
|
56
|
+
fetched pages as data and not as instructions, so that text addressing the
|
|
57
|
+
reader rather than documenting the subject is content and nothing more, and
|
|
58
|
+
never lets retrieved material expand the task. Citation practice: deep links,
|
|
59
|
+
quote the passage that carries a non-obvious claim, and say plainly when you
|
|
60
|
+
could not find documentation. And the rule this skill takes whole, that
|
|
61
|
+
hedging is the worst of the three options: either verify and cite, or mark it
|
|
62
|
+
unverified, because a disclaimer in a subordinate clause reads as confidence.
|
|
63
|
+
- **`garrytan/gstack`, `ETHOS.md`**: MIT, `garrytan_gstack/LICENSE`,
|
|
64
|
+
"Copyright (c) 2026 Garry Tan". The three layers of what you find and how
|
|
65
|
+
much weight each bears: the settled and well-trodden, where the risk is
|
|
66
|
+
assuming the obvious answer is right and the cost of checking is near zero;
|
|
67
|
+
the new and popular, where the crowd can be wrong about a new thing as easily
|
|
68
|
+
as an old one and search results are inputs to thinking rather than answers;
|
|
69
|
+
and reasoning from the specifics, which is the most valuable and is still an
|
|
70
|
+
inference. Its `office-hours/SKILL.md` adds the privacy gate before a search:
|
|
71
|
+
look things up by general category rather than by the private thing you are
|
|
72
|
+
working on, and strip names, addresses, paths and anything that looks like a
|
|
73
|
+
secret from a query before it leaves the machine.
|
|
74
|
+
- **`openai/skills`, `skills/.curated/notion-research-documentation`**: MIT,
|
|
75
|
+
that skill's own `LICENSE.txt`, "Copyright 2025 Notion Labs, Inc." The search
|
|
76
|
+
strategy, which is the only material of its kind in the sources: broad to
|
|
77
|
+
narrow, several related queries rather than one, what to do when there are
|
|
78
|
+
too many results (narrow, or sample deliberately across kinds rather than
|
|
79
|
+
taking the first few) and too few (broaden, try the words the field itself
|
|
80
|
+
uses, look in the neighbouring subject), and the shape of a query that is too
|
|
81
|
+
vague against one that is too specific to match anything. Its citation
|
|
82
|
+
guidance is also taken: group a run of claims from one source rather than
|
|
83
|
+
citing every sentence, put the citation beside what it supports, mark a
|
|
84
|
+
quotation as a quotation, keep a sources section that includes what held
|
|
85
|
+
nothing, and flag a superseded source where it stands.
|
|
86
|
+
- **`mattpocock/skills`, `skills/engineering/research`**: MIT,
|
|
87
|
+
`mattpocock_skills/LICENSE`, "Copyright (c) 2026 Matt Pocock". Twelve lines,
|
|
88
|
+
one of which the research pack singled out and this skill is built around:
|
|
89
|
+
follow every claim back to the source that owns it, and go to primary
|
|
90
|
+
material rather than a secondary write-up of it.
|
|
91
|
+
- **Cloudflare's security-audit skill**: MIT,
|
|
92
|
+
`cloudflare_security-audit-skill/LICENSE`, "Copyright (c) 2025-2026
|
|
93
|
+
Cloudflare, Inc." Coverage honesty: never imply that one pass exhausts the
|
|
94
|
+
subject, and a scoped piece of work presents itself as partial rather than
|
|
95
|
+
letting silence read as "the rest is fine".
|
|
96
|
+
|
|
97
|
+
Two things come from the research pack rather than from a repository, and are
|
|
98
|
+
marked here because the difference matters:
|
|
99
|
+
|
|
100
|
+
- The evidence-label pair `(verified: <command>)` and `(inferred: did not
|
|
101
|
+
run)`, which `source-book-2.md:139` calls the single best sentence in its
|
|
102
|
+
whole survey, is quoted there from **tw93/Waza**'s `rules/anti-patterns.md`
|
|
103
|
+
(recorded as MIT in the same book's source table). Waza is not among the
|
|
104
|
+
clones in the research pack, so this is taken from the book's verbatim quote
|
|
105
|
+
rather than from the repository. The label's checkable form is kept as the
|
|
106
|
+
source has it, because being able to audit the label is the whole of its
|
|
107
|
+
value; the prose around it is ours. The source applies `inferred` to
|
|
108
|
+
reasoning from code, so this skill keeps it for an inference and asks for
|
|
109
|
+
`not checked` where the claim is somebody else's unchecked account.
|
|
110
|
+
- The pack's own reports label each claim by where it came from and whether it
|
|
111
|
+
was checked, and keep a section of gaps and cautions at the end. That habit,
|
|
112
|
+
rather than any source, is why this skill treats a claim's support and the
|
|
113
|
+
report's coverage as two separate things to state.
|
|
114
|
+
|
|
115
|
+
Made generic, which is what the owner asked for. The pstack originals are about
|
|
116
|
+
code and its history, run named investigator and synthesizer subagents, and map
|
|
117
|
+
seven hosted integrations to fixed categories. This version is about finding
|
|
118
|
+
anything out from whatever sources exist, keeps the confidence labels and the
|
|
119
|
+
null-result discipline in the skill itself, and leaves how the work is divided
|
|
120
|
+
up to whoever is doing it.
|
|
121
|
+
|
|
122
|
+
Where this overlaps `obk-why`, that is deliberate and allowed by ADR 0019: a
|
|
123
|
+
skill carries what it needs rather than depending on another being loaded.
|
|
124
|
+
`obk-why` anchors in code and its history; this one is about sources, coverage
|
|
125
|
+
and how far a claim can be trusted.
|
|
126
|
+
|
|
127
|
+
PRD 7.1 decides what this skill is for. The words are the coordinator's
|
|
128
|
+
proposal of three light technique skills, "Find sources, say how each claim is
|
|
129
|
+
supported, and separate fact from inference ... techniques only, no process,
|
|
130
|
+
deeply written", which the owner approved on 2026-09-20 at 19:45:42 ("I agree
|
|
131
|
+
to what you suggest").
|
|
132
|
+
|
|
133
|
+
## What an acceptance run changed
|
|
134
|
+
|
|
135
|
+
The skill was run by a bot that had not seen it written, against a real
|
|
136
|
+
question with genuinely mixed evidence: what is actually established about
|
|
137
|
+
people running teams of AI agents, from a research pack that labels its own
|
|
138
|
+
sources. Five things in it come from what that found.
|
|
139
|
+
|
|
140
|
+
- The three labels say how the writer came by a claim. They do not say how good
|
|
141
|
+
it is, so a controlled study and a sales page both came out as "someone
|
|
142
|
+
stated it". The skill now carries how far a claim has travelled as part of
|
|
143
|
+
that label, which was the single most decision-relevant property in the run
|
|
144
|
+
and the one the reader had asked for.
|
|
145
|
+
- The skill said an inference should be hedged and then, six lines later, that
|
|
146
|
+
hedging is the worst of the options. That is a plain contradiction and it is
|
|
147
|
+
now stated as what it meant: hedge the strength of an inference, label the
|
|
148
|
+
state of the evidence, and do not do the first in place of the second.
|
|
149
|
+
- Nothing covered a corpus somebody else assembled for another purpose, which
|
|
150
|
+
matters most when the answer is an absence, and nothing distinguished running
|
|
151
|
+
out of material from an answer that had settled.
|
|
152
|
+
- The hand-back was shaped for another researcher, so the answer sat underneath
|
|
153
|
+
the coverage. It is now ordered for whoever asked, and says that where they
|
|
154
|
+
asked in order to decide, saying what you would do next is part of answering.
|
|
155
|
+
- The list of words to avoid read as a list to police. It is now the check it
|
|
156
|
+
was meant to be.
|
|
157
|
+
|
|
158
|
+
## What the re-validation changed (#155)
|
|
159
|
+
|
|
160
|
+
No silent substitution: an answer about a neighbouring subject is said to be
|
|
161
|
+
one (pstack `why/references/investigator-prompt.md:63`). Checking citations
|
|
162
|
+
before handing over, by spot-check and wherever unsure (its
|
|
163
|
+
`synthesizer-prompt.md:44`). A source's date and
|
|
164
|
+
the period or version a claim covers (`investigator-prompt.md:79`). Other
|
|
165
|
+
explanations that fit, in the hand-back (`synthesizer-prompt.md:78-86`). The
|
|
166
|
+
answer and its strength first, per `rules/talk.md`. Labels on every claim a
|
|
167
|
+
reader would act on rather than every claim, per `rules/evidence.md`. Opening a
|
|
168
|
+
page verifies that it was said, not that it is true. Credits for the
|
|
169
|
+
blast-radius ladder and for retrofitted rationales, which the skill does not
|
|
170
|
+
carry, are removed; a repeated paragraph on who is speaking is merged.
|