@assuredloop/orca-bot-kit 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +548 -3
  3. package/SETUP.md +275 -0
  4. package/package.json +32 -13
  5. package/rules/evidence.md +15 -0
  6. package/rules/finishing.md +23 -0
  7. package/rules/limits.md +18 -0
  8. package/rules/mail.md +17 -0
  9. package/rules/profiles.md +9 -0
  10. package/rules/review.md +14 -0
  11. package/rules/scope.md +22 -0
  12. package/rules/simple.md +14 -0
  13. package/rules/talk.md +13 -0
  14. package/rules/tests-first.md +17 -0
  15. package/rules/the-ask.md +19 -0
  16. package/skills/obk-arch/LICENSES.md +52 -0
  17. package/skills/obk-arch/NOTICE.md +242 -0
  18. package/skills/obk-arch/SKILL.md +598 -0
  19. package/skills/obk-bot-building/LICENSES.md +21 -0
  20. package/skills/obk-bot-building/NOTICE.md +113 -0
  21. package/skills/obk-bot-building/SKILL.md +312 -0
  22. package/skills/obk-debugging/LICENSES.md +67 -0
  23. package/skills/obk-debugging/NOTICE.md +115 -0
  24. package/skills/obk-debugging/SKILL.md +434 -0
  25. package/skills/obk-decision-memo/LICENSES.md +49 -0
  26. package/skills/obk-decision-memo/NOTICE.md +181 -0
  27. package/skills/obk-decision-memo/SKILL.md +241 -0
  28. package/skills/obk-finops/LICENSES.md +19 -0
  29. package/skills/obk-finops/NOTICE.md +77 -0
  30. package/skills/obk-finops/SKILL.md +148 -0
  31. package/skills/obk-fleet-review/LICENSES.md +52 -0
  32. package/skills/obk-fleet-review/NOTICE.md +104 -0
  33. package/skills/obk-fleet-review/SKILL.md +256 -0
  34. package/skills/obk-grilling/LICENSES.md +42 -0
  35. package/skills/obk-grilling/NOTICE.md +111 -0
  36. package/skills/obk-grilling/SKILL.md +221 -0
  37. package/skills/obk-grooming/LICENSES.md +52 -0
  38. package/skills/obk-grooming/NOTICE.md +111 -0
  39. package/skills/obk-grooming/SKILL.md +222 -0
  40. package/skills/obk-handoff/LICENSES.md +45 -0
  41. package/skills/obk-handoff/NOTICE.md +51 -0
  42. package/skills/obk-handoff/SKILL.md +119 -0
  43. package/skills/obk-personal-facilitation/LICENSES.md +53 -0
  44. package/skills/obk-personal-facilitation/NOTICE.md +62 -0
  45. package/skills/obk-personal-facilitation/SKILL.md +86 -0
  46. package/skills/obk-recall/LICENSES.md +42 -0
  47. package/skills/obk-recall/NOTICE.md +53 -0
  48. package/skills/obk-recall/SKILL.md +129 -0
  49. package/skills/obk-researching/LICENSES.md +67 -0
  50. package/skills/obk-researching/NOTICE.md +170 -0
  51. package/skills/obk-researching/SKILL.md +269 -0
  52. package/skills/obk-reviewing/LICENSES.md +66 -0
  53. package/skills/obk-reviewing/NOTICE.md +58 -0
  54. package/skills/obk-reviewing/SKILL.md +411 -0
  55. package/skills/obk-tdd/LICENSES.md +68 -0
  56. package/skills/obk-tdd/NOTICE.md +54 -0
  57. package/skills/obk-tdd/SKILL.md +547 -0
  58. package/skills/obk-tdd/mutation-tools.md +80 -0
  59. package/skills/obk-teach/LICENSES.md +42 -0
  60. package/skills/obk-teach/NOTICE.md +65 -0
  61. package/skills/obk-teach/SKILL.md +106 -0
  62. package/skills/obk-why/LICENSES.md +42 -0
  63. package/skills/obk-why/NOTICE.md +74 -0
  64. package/skills/obk-why/SKILL.md +180 -0
  65. package/skills/obk-writing/LICENSES.md +272 -0
  66. package/skills/obk-writing/NOTICE.md +161 -0
  67. package/skills/obk-writing/SKILL.md +254 -0
  68. package/src/book.js +268 -0
  69. package/src/bot.js +451 -0
  70. package/src/cli.js +1169 -0
  71. package/src/conversations.js +150 -0
  72. package/src/groom.js +159 -0
  73. package/src/health.js +309 -0
  74. package/src/hooks.js +257 -0
  75. package/src/init.js +314 -0
  76. package/src/launch.js +299 -0
  77. package/src/message.js +402 -0
  78. package/src/orca.js +362 -0
  79. package/src/pause.js +63 -0
  80. package/src/record.js +209 -0
  81. package/src/restart.js +193 -0
  82. package/src/retire.js +92 -0
  83. package/src/roster.js +71 -0
  84. package/src/rules.js +408 -0
  85. package/src/skills.js +630 -0
  86. package/src/sources.js +371 -0
  87. package/src/up.js +500 -0
  88. package/src/usage.js +401 -0
  89. package/bin/okb.js +0 -4
  90. package/src/index.js +0 -11
@@ -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.