@ghostpaw/questlog 0.5.1 → 0.6.1

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 (41) hide show
  1. package/README.md +92 -1
  2. package/SKILL.md +293 -0
  3. package/dist/cli.js +7202 -0
  4. package/dist/database-DShQ4N46.d.cts +20 -0
  5. package/dist/database-DShQ4N46.d.ts +20 -0
  6. package/dist/index.cjs +35 -5
  7. package/dist/index.d.cts +5 -19
  8. package/dist/index.d.ts +5 -19
  9. package/dist/index.js +35 -5
  10. package/dist/mcp-server.js +5929 -0
  11. package/dist/mcp.cjs +4952 -0
  12. package/dist/mcp.d.cts +89 -0
  13. package/dist/mcp.d.ts +89 -0
  14. package/dist/mcp.js +4944 -0
  15. package/package.json +46 -9
  16. package/skills/questlog/SKILL.md +293 -0
  17. package/skills/questlog/references/archive-delete-and-prune.md +25 -0
  18. package/skills/questlog/references/choose-work-shape.md +25 -0
  19. package/skills/questlog/references/clarify-ambiguous-requests.md +24 -0
  20. package/skills/questlog/references/close-work-and-claim-outcomes.md +23 -0
  21. package/skills/questlog/references/create-concrete-quest.md +21 -0
  22. package/skills/questlog/references/detect-slips-and-staleness.md +22 -0
  23. package/skills/questlog/references/escalate-and-unblock.md +22 -0
  24. package/skills/questlog/references/frame-initiative-questline.md +23 -0
  25. package/skills/questlog/references/handle-exceptions-and-weird-cases.md +24 -0
  26. package/skills/questlog/references/intake-triage.md +25 -0
  27. package/skills/questlog/references/maintain-clear-ownership.md +22 -0
  28. package/skills/questlog/references/manage-approvals-and-promises.md +22 -0
  29. package/skills/questlog/references/plan-successor-work.md +22 -0
  30. package/skills/questlog/references/plan-time-correctly.md +22 -0
  31. package/skills/questlog/references/prioritize-across-streams.md +21 -0
  32. package/skills/questlog/references/protect-capacity-and-focus.md +20 -0
  33. package/skills/questlog/references/recover-from-modeling-mistakes.md +25 -0
  34. package/skills/questlog/references/report-status-and-manage-expectations.md +20 -0
  35. package/skills/questlog/references/revise-or-reshape-commitment.md +22 -0
  36. package/skills/questlog/references/run-operational-review.md +24 -0
  37. package/skills/questlog/references/run-recurring-rhythms.md +24 -0
  38. package/skills/questlog/references/search-and-retrieve-context.md +23 -0
  39. package/skills/questlog/references/sequence-with-unlocks.md +23 -0
  40. package/skills/questlog/references/settle-rumor-into-structure.md +25 -0
  41. package/skills/questlog/references/tag-and-filter-portfolios.md +21 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ghostpaw/questlog",
3
- "version": "0.5.1",
3
+ "version": "0.6.1",
4
4
  "description": "Unified task and calendar model for Node.js — SQLite, zero dependencies, with a built-in LLM tool facade",
5
5
  "type": "module",
6
6
  "exports": {
@@ -13,13 +13,26 @@
13
13
  "types": "./dist/index.d.cts",
14
14
  "default": "./dist/index.cjs"
15
15
  }
16
- }
16
+ },
17
+ "./mcp": {
18
+ "import": {
19
+ "types": "./dist/mcp.d.ts",
20
+ "default": "./dist/mcp.js"
21
+ },
22
+ "require": {
23
+ "types": "./dist/mcp.d.cts",
24
+ "default": "./dist/mcp.cjs"
25
+ }
26
+ },
27
+ "./package.json": "./package.json"
17
28
  },
18
29
  "main": "./dist/index.cjs",
19
30
  "module": "./dist/index.js",
20
31
  "types": "./dist/index.d.ts",
21
32
  "files": [
22
- "dist"
33
+ "dist",
34
+ "skills",
35
+ "SKILL.md"
23
36
  ],
24
37
  "sideEffects": false,
25
38
  "scripts": {
@@ -30,15 +43,29 @@
30
43
  "lint:fix": "biome check --fix",
31
44
  "format": "biome format --write",
32
45
  "typecheck": "tsc --noEmit",
33
- "check": "biome check && tsc --noEmit",
46
+ "check": "npm run check:types && npm run check:lint && npm test && npm run build && npm run check:deps && npm run check:surfaces && npm run check:size && npm run check:api && npm run check:consumer && npm run check:startup && npm run check:ratchet",
47
+ "check:deps": "node scripts/check-zero-deps.mjs",
34
48
  "clean": "rm -rf dist",
35
49
  "demo:build": "node scripts/build_demo.mjs",
36
50
  "demo:watch": "node scripts/build_demo.mjs --watch",
37
51
  "demo:serve": "npm run demo:build && node scripts/serve_demo.mjs",
38
- "prepublishOnly": "npm run check && npm run build",
52
+ "prepublishOnly": "npm run check",
39
53
  "release:patch": "npm version patch && git push && git push --tags",
40
54
  "release:minor": "npm version minor && git push && git push --tags",
41
- "release:major": "npm version major && git push && git push --tags"
55
+ "release:major": "npm version major && git push && git push --tags",
56
+ "version": "node scripts/sync_version.mjs && npm run surfaces && git add src/version.ts SKILL.md skills plugin.json mcp.json server.json .claude-plugin mcpb && biome format --write package.json package-lock.json && git add package.json package-lock.json",
57
+ "surfaces": "node --experimental-strip-types scripts/surfaces/generate.mjs",
58
+ "check:surfaces": "node --experimental-strip-types scripts/surfaces/generate.mjs --check",
59
+ "check:types": "tsc --noEmit",
60
+ "check:lint": "biome check",
61
+ "check:ratchet": "node --test scripts/guard/*.test.mjs && node scripts/guard/ratchet.mjs",
62
+ "budgets:update": "npm run build && node scripts/guard/size.mjs --update && node scripts/guard/api.mjs --update && node scripts/guard/startup.mjs --update",
63
+ "bench": "npm run build && node scripts/bench/bench.mjs",
64
+ "check:size": "node scripts/guard/size.mjs",
65
+ "check:api": "node scripts/guard/api.mjs",
66
+ "check:consumer": "node scripts/guard/consumer.mjs",
67
+ "check:startup": "node scripts/guard/startup.mjs",
68
+ "mcpb": "node scripts/mcpb/build.mjs"
42
69
  },
43
70
  "engines": {
44
71
  "node": ">=24"
@@ -61,7 +88,12 @@
61
88
  "rrule",
62
89
  "recurrence",
63
90
  "typescript",
64
- "zero-dependencies"
91
+ "zero-dependencies",
92
+ "mcp",
93
+ "mcp-server",
94
+ "model-context-protocol",
95
+ "agent-skills",
96
+ "cli"
65
97
  ],
66
98
  "license": "MIT",
67
99
  "repository": {
@@ -73,7 +105,7 @@
73
105
  "email": "max@anonyfox.com",
74
106
  "url": "https://anonyfox.com"
75
107
  },
76
- "homepage": "https://github.com/GhostPawJS/questlog",
108
+ "homepage": "https://ghostpaw.anonyfox.com/agent-tasks/",
77
109
  "bugs": {
78
110
  "url": "https://github.com/GhostPawJS/questlog/issues"
79
111
  },
@@ -88,9 +120,14 @@
88
120
  "@biomejs/biome": "2.4.4",
89
121
  "@types/node": "^25.3.0",
90
122
  "esbuild": "^0.27.4",
123
+ "fflate": "0.8.3",
91
124
  "preact": "^10.29.0",
92
125
  "sql.js-fts5": "^1.4.0",
93
126
  "tsup": "^8.0.0",
94
127
  "typescript": "^5.9.3"
95
- }
128
+ },
129
+ "bin": {
130
+ "ghostpaw-questlog": "./dist/cli.js"
131
+ },
132
+ "mcpName": "io.github.GhostPawJS/questlog"
96
133
  }
@@ -0,0 +1,293 @@
1
+ ---
2
+ name: questlog
3
+ description: "Manage local tasks, calendar commitments, and recurring work. Use when planning, executing, reviewing, or organizing work."
4
+ license: "MIT"
5
+ compatibility: "Node.js 24 or newer. MCP stdio or ghostpaw-questlog CLI."
6
+ ---
7
+
8
+ # questlog
9
+
10
+ Questlog manages local tasks, calendar commitments, and recurring work. Search before creating work, inspect before changing it, and keep uncertain work as rumors. Use unlock prerequisites to sequence work. run_quest refuses blocked starts unless force is true. Review commitments and resolve work with an honest outcome.
11
+
12
+ ## Calling tools
13
+
14
+ MCP: connect to ghostpaw-questlog, then call a tool by name with its JSON arguments.
15
+
16
+ CLI: `ghostpaw-questlog call <tool> '<JSON object>'` or `ghostpaw-questlog <tool> --parameter value` (without a global install: `npx -y @ghostpaw/questlog <tool> ...`).
17
+
18
+ Inspect schemas with `ghostpaw-questlog describe <tool>`. Use `--db <path>` to select a database.
19
+
20
+ ## search_questlog
21
+
22
+ Search quests and rumors by text when you need to find an existing item before inspecting or changing it.
23
+
24
+ Use when: Use this first when the exact quest, rumor, or id is not already known.
25
+
26
+ Not for: Do not use this when you already know the exact item id and want its full detail.
27
+
28
+ Read-only.
29
+
30
+ | Parameter | Type | Required | Values / description |
31
+ | --- | --- | --- | --- |
32
+ | query | string | yes | Text to search for in rumor and quest titles and body text. |
33
+ | limit | integer | no | Maximum number of matches to return. |
34
+ | kinds | array | no | Optional entity kinds to search. |
35
+ | mode | string | no | browse, identify_one. Whether to browse results normally or ask for clarification when several matches are found. |
36
+
37
+ ## review_questlog
38
+
39
+ Review one operational questlog surface such as available quests, open rumors, blocked work, or due repeatable anchors.
40
+
41
+ Use when: Use this when you want a dashboard-style list view instead of inspecting one specific item.
42
+
43
+ Not for: Do not use this when you already know the exact item you want to inspect in depth.
44
+
45
+ Read-only.
46
+
47
+ | Parameter | Type | Required | Values / description |
48
+ | --- | --- | --- | --- |
49
+ | view | string | yes | questlines, quests.active, quests.available, quests.blocked, quests.deferred, quests.due_soon, quests.in_progress, quests.missed_scheduled, quests.open, quests.overdue, quests.resolved, quests.scheduled_for_day, quests.scheduled_now, repeatables.due_anchors, rumors. Which operational review surface to return. |
50
+ | filters | object | no | Optional filters for supported review surfaces. |
51
+ | now | integer | no | Optional evaluation timestamp for time-sensitive views. |
52
+
53
+ ## inspect_questlog_item
54
+
55
+ Inspect one specific questlog item in depth and return its richer structured detail and important related refs.
56
+
57
+ Use when: Use this when you already know the target item id and want either compact or full detail for one rumor, quest, questline, or repeatable quest.
58
+
59
+ Not for: Do not use this to discover items when the exact target is not known yet.
60
+
61
+ Read-only.
62
+
63
+ | Parameter | Type | Required | Values / description |
64
+ | --- | --- | --- | --- |
65
+ | target | object | yes | The specific item to inspect. |
66
+ | detailLevel | string | no | compact, full. How much detail to return. |
67
+ | now | integer | no | Optional evaluation timestamp for time-sensitive detail. |
68
+
69
+ ## capture_rumor
70
+
71
+ Capture uncertain incoming work as a rumor so it can be triaged later without prematurely turning it into committed execution.
72
+
73
+ Use when: Use this when something matters enough to record but is not yet ready to become a quest or questline.
74
+
75
+ Not for: Do not use this for already-committed work that should be created directly as a quest or questline.
76
+
77
+ Writes: writes_state.
78
+
79
+ | Parameter | Type | Required | Values / description |
80
+ | --- | --- | --- | --- |
81
+ | title | string | yes | Short rumor title describing the incoming signal or possible work. |
82
+ | details | string | no | Optional supporting context that explains why the rumor might matter. |
83
+ | now | integer | no | Optional creation timestamp for the rumor. |
84
+
85
+ ## shape_work
86
+
87
+ Create a quest (with timing, tags, and objective in one call), create a questline, settle a rumor into concrete work, or manage quest-questline membership. Use create_quest for clear commitments — include tags and timing directly to avoid follow-up calls.
88
+
89
+ Use when: Use this when deciding what real work exists and how it should be grouped before or around execution. Prefer a single create_quest call with all fields over separate create + plan_quest + tag_work calls.
90
+
91
+ Not for: Do not use this for quest execution steps like starting, finishing, abandoning, or logging effort.
92
+
93
+ Writes: writes_state.
94
+
95
+ | Parameter | Type | Required | Values / description |
96
+ | --- | --- | --- | --- |
97
+ | action | string | yes | attach_quest_to_questline, create_quest, create_questline, detach_quest_from_questline, dismiss_rumor, reopen_rumor, settle_rumor, update_rumor. Action to perform. |
98
+ | questId | integer | no | Quest to attach or detach. |
99
+ | questlineId | integer | no | Questline that should receive the quest. |
100
+ | quest | object | no | |
101
+ | questline | object | no | |
102
+ | rumorId | integer | no | Rumor to settle, dismiss, or reopen. |
103
+ | dismissedAt | integer | no | Optional dismissal timestamp. |
104
+ | settledAt | integer | no | Optional settlement timestamp. |
105
+ | quests | array | no | Quests to create during rumor settlement. Include timing and tags directly. |
106
+ | now | integer | no | Optional timestamp for membership, reopen, or rumor update. |
107
+ | title | string | no | New title for the update_rumor action. |
108
+ | details | string | no | New or enriched context text for the update_rumor action. |
109
+
110
+ ## plan_quest
111
+
112
+ Refine a quest by revising its objective before actual start or by changing its temporal planning fields.
113
+
114
+ Use when: Use this when you need to sharpen what the quest means or how it is timed without starting or resolving it.
115
+
116
+ Not for: Do not use this for lifecycle execution such as start, finish, abandon, or effort logging.
117
+
118
+ Writes: writes_state.
119
+
120
+ | Parameter | Type | Required | Values / description |
121
+ | --- | --- | --- | --- |
122
+ | action | string | yes | revise_objective, set_time. Action to perform. |
123
+ | questId | integer | yes | The quest to refine. |
124
+ | objective | string | no | The new quest objective text. Required for revise_objective. |
125
+ | notBeforeAt | integer | no | Optional earliest actionable timestamp. |
126
+ | dueAt | integer | no | Optional latest acceptable completion timestamp. |
127
+ | scheduledStartAt | integer | no | Optional planned schedule window start. |
128
+ | scheduledEndAt | integer | no | Optional planned schedule window end. |
129
+ | allDay | boolean | no | Whether the planned schedule window is all-day. |
130
+ | estimateSeconds | integer | no | Optional active-effort estimate in seconds. |
131
+ | now | integer | no | Optional update timestamp. |
132
+
133
+ ## run_quest
134
+
135
+ Run quest lifecycle actions such as starting, logging effort, finishing, abandoning, or abandoning and spawning follow-up quests atomically.
136
+
137
+ Use when: Use this for actual execution lifecycle steps after the quest already exists.
138
+
139
+ Not for: Do not use this for work shaping, planning-only edits, tagging, or rewards.
140
+
141
+ Writes: writes_state.
142
+
143
+ | Parameter | Type | Required | Values / description |
144
+ | --- | --- | --- | --- |
145
+ | action | string | yes | start, log_effort, finish, abandon, abandon_and_spawn_followups. Action to perform. |
146
+ | questId | integer | yes | Quest whose execution state should change. |
147
+ | startedAt | integer | no | Optional start timestamp for the start action. |
148
+ | force | boolean | no | Start despite unmet unlock prerequisites. Defaults to false. |
149
+ | effortSeconds | integer | no | Positive active-effort increment in seconds. Required for log_effort. |
150
+ | now | integer | no | Optional effort-log timestamp. |
151
+ | outcome | string | no | Terminal outcome text. Required for finish, abandon, and abandon_and_spawn_followups. |
152
+ | resolvedAt | integer | no | Optional resolved timestamp for finish or abandon actions. |
153
+ | followups | array | no | Follow-up quests to create atomically. Required for abandon_and_spawn_followups. |
154
+
155
+ ## organize_work
156
+
157
+ Organize grouping and dependency structure by updating questlines or changing hard unlock prerequisites between concrete quests.
158
+
159
+ Use when: Use this when work structure or gating logic should change without changing quest execution state.
160
+
161
+ Not for: Do not use this for quest execution, planning-only edits, intake capture, or tag-like classification.
162
+
163
+ Writes: writes_state.
164
+
165
+ | Parameter | Type | Required | Values / description |
166
+ | --- | --- | --- | --- |
167
+ | action | string | yes | add_unlock, archive_questline, remove_unlock, replace_unlocks, set_questline_fields. Action to perform. |
168
+ | questlineId | integer | no | Questline to update or archive. |
169
+ | title | string | no | Optional new questline title. |
170
+ | description | string | no | Optional new questline description. |
171
+ | startsAt | integer | no | Optional questline start timestamp. |
172
+ | dueAt | integer | no | Optional questline due timestamp. |
173
+ | archivedAt | integer | no | Optional archive timestamp. |
174
+ | toQuestId | integer | no | Quest whose blockers should change. |
175
+ | fromQuestId | integer | no | Prerequisite quest id. |
176
+ | fromQuestIds | array | no | Full prerequisite quest id set. |
177
+ | now | integer | no | Optional timestamp. |
178
+
179
+ ## manage_repeatable
180
+
181
+ Manage recurring work definitions by creating, updating, previewing, spawning, or archiving repeatable quests.
182
+
183
+ Use when: Use this when the work is a repeatable template or when due recurring anchors need to be previewed or materialized.
184
+
185
+ Not for: Do not use this for one-off concrete quest execution, for inspecting an existing concrete quest, or for hiding a repeatable quest. Use `retire_work` for hiding.
186
+
187
+ Writes: writes_state.
188
+
189
+ | Parameter | Type | Required | Values / description |
190
+ | --- | --- | --- | --- |
191
+ | action | string | yes | archive, create, preview_due, spawn_due, update. Action to perform. |
192
+ | repeatableQuestId | integer | no | Repeatable quest to archive or update. |
193
+ | repeatableQuest | object | no | |
194
+ | title | string | no | Optional new title for the update action. |
195
+ | objective | string | no | Optional new objective for the update action. |
196
+ | questlineId | integer | no | Optional new questline id. |
197
+ | rrule | string | no | Optional new RRULE. |
198
+ | anchorAt | integer | no | Optional new recurrence anchor timestamp. |
199
+ | notBeforeOffsetSeconds | integer | no | Optional new not-before offset in seconds. |
200
+ | dueOffsetSeconds | integer | no | Optional new due offset in seconds. |
201
+ | scheduledStartOffsetSeconds | integer | no | Optional new scheduled-start offset in seconds. |
202
+ | scheduledEndOffsetSeconds | integer | no | Optional new scheduled-end offset in seconds. |
203
+ | allDay | boolean | no | Whether future schedules are all-day. |
204
+ | estimateSeconds | integer | no | Optional new effort estimate. |
205
+ | archivedAt | integer | no | Optional archive timestamp. |
206
+ | now | integer | no | Evaluation or update timestamp. |
207
+
208
+ ## tag_work
209
+
210
+ Classify work by adding, removing, or replacing tags on quests and by replacing the future tag template set on repeatable quests.
211
+
212
+ Use when: Use this when you want classification, reporting, or saved-filter semantics rather than lifecycle or dependency semantics.
213
+
214
+ Not for: Do not use tags to model status, time planning, or hard prerequisites.
215
+
216
+ Writes: writes_state.
217
+
218
+ | Parameter | Type | Required | Values / description |
219
+ | --- | --- | --- | --- |
220
+ | action | string | yes | add, remove, replace. Action to perform. |
221
+ | target | object | yes | |
222
+ | tagNames | array | yes | Tag names to add, remove, or replace. |
223
+ | now | integer | no | Optional timestamp for the tag mutation. |
224
+
225
+ ## reward_work
226
+
227
+ Manage rewards by adding, updating, removing, or claiming quest rewards, or by replacing future reward templates on repeatable quests.
228
+
229
+ Use when: Use this when a completed or recurring piece of work should grant or update reward information.
230
+
231
+ Not for: Do not use this to finish quests themselves or to model dependencies, classification, or scheduling.
232
+
233
+ Writes: writes_state.
234
+
235
+ | Parameter | Type | Required | Values / description |
236
+ | --- | --- | --- | --- |
237
+ | action | string | yes | add, claim, remove, replace_repeatable_template, update. Action to perform. |
238
+ | target | object | yes | |
239
+ | reward | object | no | |
240
+ | rewards | array | no | Full future reward template set. Required for replace_repeatable_template. |
241
+ | claimedAt | integer | no | Optional claim timestamp. |
242
+ | now | integer | no | Optional timestamp for removal or template replacement. |
243
+
244
+ ## retire_work
245
+
246
+ Hide an item from normal active operation without rewriting history by soft-deleting a rumor, quest, questline, or repeatable quest.
247
+
248
+ Use when: Use this when work should disappear from active reads while preserving historical truth.
249
+
250
+ Not for: Do not use this when you mean to archive a questline or repeatable quest while keeping it visible as retired structure.
251
+
252
+ Writes: writes_state.
253
+
254
+ | Parameter | Type | Required | Values / description |
255
+ | --- | --- | --- | --- |
256
+ | action | string | yes | hide. The retirement action to perform. |
257
+ | target | object | yes | The target to hide. |
258
+ | deletedAt | integer | no | Optional timestamp to record when the item became hidden. |
259
+
260
+ ## Workflow guides
261
+
262
+ - [archive-delete-and-prune](references/archive-delete-and-prune.md): Choose the right retirement action for each kind of work so history stays honest and hiding does not get confused with archival or terminal execution truth.
263
+ - [choose-work-shape](references/choose-work-shape.md): Choose the right structure for new work by separating uncertainty, one-shot execution, multi-step arcs, and recurring patterns.
264
+ - [clarify-ambiguous-requests](references/clarify-ambiguous-requests.md): Treat ambiguity as a real state, capture uncertainty honestly, and only commit work structure once the next executable shape is clear.
265
+ - [close-work-and-claim-outcomes](references/close-work-and-claim-outcomes.md): Close work with the correct terminal lifecycle action, then handle any concrete reward claim as a separate explicit step.
266
+ - [create-concrete-quest](references/create-concrete-quest.md): Create real, bounded executable quests only when the objective is concrete enough to execute without interpretive guesswork.
267
+ - [detect-slips-and-staleness](references/detect-slips-and-staleness.md): Detect work that is slipping or going stale by reading overdue, deferred, in-progress, and related operational views before choosing one recovery move.
268
+ - [escalate-and-unblock](references/escalate-and-unblock.md): Diagnose blockers honestly, then remove or realign hard gates when the model is wrong instead of treating every delay as generic escalation theater.
269
+ - [frame-initiative-questline](references/frame-initiative-questline.md): Use questlines for shared initiative context, then attach concrete quests and maintain the structure without confusing one quest with one arc.
270
+ - [handle-exceptions-and-weird-cases](references/handle-exceptions-and-weird-cases.md): Handle weird cases by diagnosing the actual tool outcome, routing into clarification or recovery when needed, and refusing to fake a clean normal-state story.
271
+ - [intake-triage](references/intake-triage.md): Triage new asks, ideas, and vague incoming work into the right next step without prematurely committing execution structure.
272
+ - [maintain-clear-ownership](references/maintain-clear-ownership.md): Keep ownership explicit through quest content and classification because Questlog does not provide a separate assignee field or ownership tool.
273
+ - [manage-approvals-and-promises](references/manage-approvals-and-promises.md): Treat approvals and commitments as modeled work with timing and dependencies instead of burying them as vague narrative promises.
274
+ - [plan-successor-work](references/plan-successor-work.md): Create explicit successor work after closure by spawning follow-ups or shaping new work, while keeping uncertain next steps in intake instead of faking certainty.
275
+ - [plan-time-correctly](references/plan-time-correctly.md): Use quest planning fields honestly so availability, due pressure, and schedule intent stay meaningful instead of getting collapsed into one generic date.
276
+ - [prioritize-across-streams](references/prioritize-across-streams.md): Prioritize across competing work streams by reading real candidate sets, distinguishing available from blocked work, and then reflecting the choice in planning.
277
+ - [protect-capacity-and-focus](references/protect-capacity-and-focus.md): Protect capacity and focus by reading the real in-progress and scheduled-now load, then using planning to rebalance instead of silently overcommitting.
278
+ - [recover-from-modeling-mistakes](references/recover-from-modeling-mistakes.md): Recover from modeling mistakes by diagnosing the exact current state first, then applying the smallest honest corrective tool instead of rewriting history blindly.
279
+ - [report-status-and-manage-expectations](references/report-status-and-manage-expectations.md): Build status reporting from the real questlog state, separating available, blocked, in-progress, slipping, and resolved work without relying on memory.
280
+ - [revise-or-reshape-commitment](references/revise-or-reshape-commitment.md): Revise a quest objective before execution starts, but reshape commitments honestly with lifecycle tools once real execution history exists.
281
+ - [run-operational-review](references/run-operational-review.md): Drive daily or weekly operational review from structured list views, then move from diagnosis into actual planning or execution changes.
282
+ - [run-recurring-rhythms](references/run-recurring-rhythms.md): Model recurring work as repeatable definitions that spawn fresh concrete quests over time instead of living forever as one immortal task.
283
+ - [search-and-retrieve-context](references/search-and-retrieve-context.md): Find relevant questlog context quickly, then switch from discovery to exact inspection without confusing free-text search with structured review surfaces.
284
+ - [sequence-with-unlocks](references/sequence-with-unlocks.md): Model hard sequencing with unlocks between concrete quests so blocked and available work stay truthful and reviewable.
285
+ - [settle-rumor-into-structure](references/settle-rumor-into-structure.md): Turn a ready rumor into committed quest or questline structure without losing provenance or pretending vague intake is settled.
286
+ - [tag-and-filter-portfolios](references/tag-and-filter-portfolios.md): Use tags for cross-cutting classification and portfolio filtering without confusing tags for status, timing, or dependency modeling.
287
+
288
+ ## Principles
289
+
290
+ - Store the least committed truth first.
291
+ - Read before you prescribe.
292
+ - Protect history when reality changes.
293
+ - Close the last mile, not just the main work.
@@ -0,0 +1,25 @@
1
+ # Archive Delete And Prune
2
+
3
+ Primary tools:
4
+ - `shape_work`
5
+ - `organize_work`
6
+ - `manage_repeatable`
7
+ - `retire_work`
8
+ - `run_quest`
9
+
10
+ Steps:
11
+ 1. Use `shape_work` to dismiss rumors when intake should be retired without becoming committed work.
12
+ 2. Use `organize_work` to archive questlines when the arc is complete but should remain visible as retired structure.
13
+ 3. Use `manage_repeatable` to archive repeatable definitions when they should stop spawning future work.
14
+ 4. Use `retire_work` to hide items when they should disappear from active operation while preserving history.
15
+ 5. Use `run_quest` to abandon real committed work instead of hiding it when the truthful record is that the work ended unsuccessfully.
16
+
17
+ Outcome handling:
18
+ - Treat `success` as confirmation that the right retirement path happened.
19
+ - Treat `no_op` from repeated hide as confirmation that the item is already retired that way.
20
+ - Treat `error` as a sign that the target or retirement mode is wrong.
21
+
22
+ Failure handling:
23
+ - Do not soft-hide committed execution work just to make dashboards look tidy.
24
+ - Do not confuse archive with hide.
25
+ - Do not use `manage_repeatable` for hiding repeatables now that `retire_work` is the canonical hide path.
@@ -0,0 +1,25 @@
1
+ # Choose Work Shape
2
+
3
+ Primary tools:
4
+ - `capture_rumor`
5
+ - `shape_work`
6
+ - `manage_repeatable`
7
+ - `inspect_questlog_item`
8
+
9
+ Steps:
10
+ 1. Use `capture_rumor` when the work is still uncertain, interpretive, or politically fuzzy.
11
+ 2. Use `shape_work` with `create_quest` when there is one concrete executable step with one honest objective.
12
+ 3. Use `shape_work` with `create_questline` when several related quests need shared initiative context.
13
+ 4. Use `manage_repeatable` with `create` when the work is a cadence that should spawn fresh quests over time.
14
+ 5. Use `shape_work` with `settle_rumor` when a rumor is ready to graduate into committed quest or questline structure.
15
+ 6. Use `inspect_questlog_item` after creation when you need to confirm the chosen shape before planning or execution.
16
+
17
+ Outcome handling:
18
+ - Treat `success` as confirmation that the chosen shape now exists in the system.
19
+ - Treat `needs_clarification` as a sign that the shape choice is still incomplete and should not be guessed.
20
+ - Treat `error` as a sign that the requested shape or inputs are invalid as entered.
21
+
22
+ Failure handling:
23
+ - If the work feels both vague and actionable, keep it as a rumor until one executable step is truly obvious.
24
+ - Do not create a repeatable just because something happened twice.
25
+ - Do not force a questline when one real quest would be enough.
@@ -0,0 +1,24 @@
1
+ # Clarify Ambiguous Requests
2
+
3
+ Primary tools:
4
+ - `capture_rumor`
5
+ - `search_questlog`
6
+ - `inspect_questlog_item`
7
+ - `shape_work`
8
+
9
+ Steps:
10
+ 1. If the request is still ambiguous, use `capture_rumor` instead of forcing it into a quest too early.
11
+ 2. Use `search_questlog` when the ambiguity might really be duplicate or overlapping work instead of net-new intake.
12
+ 3. Use `inspect_questlog_item` when you need the exact current state of the intake item before deciding how to commit it.
13
+ 4. Once the missing outcome or structure is clear, use `shape_work` with the smallest honest action: `create_quest`, `create_questline`, or `settle_rumor`.
14
+ 5. If `shape_work` returns `needs_clarification`, answer the missing branch choice before retrying. Do not guess between quests and questlines.
15
+
16
+ Outcome handling:
17
+ - Treat `success` as a valid clarification milestone or committed structure change.
18
+ - Treat `needs_clarification` as expected when the system can see that the request is valid in spirit but still underdetermined.
19
+ - Treat `error` as a real contract or state problem that must be repaired before continuing.
20
+
21
+ Failure handling:
22
+ - If someone wants speed without clarity, record the uncertainty as intake and move forward honestly.
23
+ - If several plausible existing items match, stop at clarification instead of choosing one silently.
24
+ - Do not fabricate a crisp quest objective just to make the system look tidy.
@@ -0,0 +1,23 @@
1
+ # Close Work And Claim Outcomes
2
+
3
+ Primary tools:
4
+ - `run_quest`
5
+ - `reward_work`
6
+ - `review_questlog`
7
+ - `inspect_questlog_item`
8
+
9
+ Steps:
10
+ 1. Use `run_quest` with the correct terminal action: `finish` for successful completion or `abandon` when the work did not land.
11
+ 2. Use `inspect_questlog_item` or `review_questlog` when you need to confirm the exact post-resolution state.
12
+ 3. If rewards exist, use `reward_work` with `action: "claim"` as a separate follow-up step.
13
+ 4. Accept `no_op` on repeated reward claim as confirmation that the outcome was already claimed.
14
+
15
+ Outcome handling:
16
+ - Treat `success` as a real terminal lifecycle step or reward claim.
17
+ - Treat `no_op` on claim as valid confirmation, not as a failure.
18
+ - Treat `error` as a real invalid-state problem that needs diagnosis before retrying.
19
+
20
+ Failure handling:
21
+ - Do not treat quest finish and reward claim as one hidden operation.
22
+ - Do not leave reward claim ambiguous after successful closure when the reward matters.
23
+ - Do not close work with a fake success outcome when it should be abandoned instead.
@@ -0,0 +1,21 @@
1
+ # Create Concrete Quest
2
+
3
+ Primary tools:
4
+ - `shape_work`
5
+ - `inspect_questlog_item`
6
+ - `plan_quest`
7
+
8
+ Steps:
9
+ 1. Use `shape_work` with `action: "create_quest"` only when there is one clear executable objective.
10
+ 2. Put shared arc context in a questline, not inside a bloated quest objective.
11
+ 3. Use `inspect_questlog_item` after creation when you need to confirm the exact quest detail that was created.
12
+ 4. Use `plan_quest` later for timing or estimate refinement instead of overloading creation with every downstream decision.
13
+
14
+ Outcome handling:
15
+ - Treat `success` as confirmation that a concrete quest now exists.
16
+ - Treat `error` as a sign that the requested quest input is invalid and should be repaired before retrying.
17
+
18
+ Failure handling:
19
+ - If the objective still needs interpretation, go back to intake or clarification instead of creating the quest.
20
+ - If the work is really multi-step, use questline structure instead of one overloaded quest.
21
+ - Do not create a quest whose title and objective hide uncertainty.
@@ -0,0 +1,22 @@
1
+ # Detect Slips And Staleness
2
+
3
+ Primary tools:
4
+ - `review_questlog`
5
+ - `inspect_questlog_item`
6
+ - `plan_quest`
7
+ - `run_quest`
8
+
9
+ Steps:
10
+ 1. Use `review_questlog` to look at overdue, due-soon, deferred, in-progress, or missed-scheduled views.
11
+ 2. Use `inspect_questlog_item` when one slipping item needs exact diagnosis before action.
12
+ 3. If the problem is timing drift, use `plan_quest` to repair the planning state.
13
+ 4. If the problem is execution drift, use `run_quest` for the next real lifecycle move.
14
+
15
+ Outcome handling:
16
+ - Treat empty stale-work views as valid `success`.
17
+ - Treat `error` as a bad view or filter choice, not as evidence that the work is healthy.
18
+
19
+ Failure handling:
20
+ - Do not call work healthy just because it is still open.
21
+ - Do not change timing blindly before you inspect the exact item.
22
+ - Do not assume a stale item is blocked; diagnose it first.
@@ -0,0 +1,22 @@
1
+ # Escalate And Unblock
2
+
3
+ Primary tools:
4
+ - `review_questlog`
5
+ - `inspect_questlog_item`
6
+ - `organize_work`
7
+ - `plan_quest`
8
+
9
+ Steps:
10
+ 1. Use `review_questlog` to confirm whether work is actually blocked.
11
+ 2. Use `inspect_questlog_item` to diagnose the exact blocker on the affected quest.
12
+ 3. If the unlock graph is wrong, use `organize_work` to remove or replace the blocker set.
13
+ 4. If the work is not truly blocked, use planning changes instead of fake escalation language.
14
+
15
+ Outcome handling:
16
+ - Treat `success` as a real unblock step.
17
+ - Treat `error` as a structural issue that still needs diagnosis.
18
+
19
+ Failure handling:
20
+ - Do not call work blocked when it is only unclear or underspecified.
21
+ - Do not leave a quest in the blocked state after the model has changed.
22
+ - Do not remove prerequisites casually; inspect before unblocking.
@@ -0,0 +1,23 @@
1
+ # Frame Initiative Questline
2
+
3
+ Primary tools:
4
+ - `shape_work`
5
+ - `organize_work`
6
+ - `review_questlog`
7
+ - `inspect_questlog_item`
8
+
9
+ Steps:
10
+ 1. Use `shape_work` with `create_questline` when several related quests need one umbrella initiative.
11
+ 2. Use `shape_work` with `attach_quest_to_questline` or `detach_quest_from_questline` to place concrete quests correctly inside the initiative.
12
+ 3. Use `organize_work` to update questline fields or archive the questline once the arc is truly retired.
13
+ 4. Use `review_questlog` and `inspect_questlog_item` to verify the initiative health and exact structure.
14
+
15
+ Outcome handling:
16
+ - Treat `success` as a real questline or membership change.
17
+ - Treat `no_op` as confirmation that the quest was already attached or detached as requested.
18
+ - Treat `error` as a sign that the target ids or structural state are invalid.
19
+
20
+ Failure handling:
21
+ - Do not create a questline for one isolated executable task.
22
+ - Do not leave membership implied; attach or detach quests explicitly.
23
+ - Do not archive a questline just to hide active work that still matters.
@@ -0,0 +1,24 @@
1
+ # Handle Exceptions And Weird Cases
2
+
3
+ Primary tools:
4
+ - `inspect_questlog_item`
5
+ - `search_questlog`
6
+ - `review_questlog`
7
+ - then the nearest corrective tool such as `shape_work`, `organize_work`, `plan_quest`, or `run_quest`
8
+
9
+ Steps:
10
+ 1. Start with diagnosis, not mutation. Use `inspect_questlog_item`, `search_questlog`, or `review_questlog` depending on what is actually unknown.
11
+ 2. If the tool returns `needs_clarification`, stop and answer the missing branch instead of guessing.
12
+ 3. If the tool returns `error`, read the recovery guidance and choose the next corrective tool deliberately.
13
+ 4. Only mutate state after the weird case has been made specific enough to model honestly.
14
+
15
+ Outcome handling:
16
+ - Treat `success` as a real answer, even if that answer is an empty review view.
17
+ - Treat `no_op` as signal that the requested change was already true.
18
+ - Treat `needs_clarification` as expected when the system can enumerate the ambiguity safely.
19
+ - Treat `error` as a structured boundary, not as a cue to improvise around the rules.
20
+
21
+ Failure handling:
22
+ - Do not force a weird case into a fake normal flow just to keep moving.
23
+ - Do not guess among multiple plausible targets.
24
+ - Do not mutate first and inspect later.
@@ -0,0 +1,25 @@
1
+ # Intake Triage
2
+
3
+ Primary tools:
4
+ - `search_questlog`
5
+ - `capture_rumor`
6
+ - `inspect_questlog_item`
7
+ - `shape_work`
8
+
9
+ Steps:
10
+ 1. Start with `search_questlog` when the ask might duplicate existing work. Use `mode: "identify_one"` when you need one exact target instead of a browse list.
11
+ 2. If the work is still vague, risky, or under-specified, use `capture_rumor` with only the minimum facts that explain what arrived and why it matters.
12
+ 3. Use `inspect_questlog_item` on the returned rumor id when you need to confirm the intake record before deciding what to do next.
13
+ 4. Use `shape_work` for the next honest transition: `dismiss_rumor`, `reopen_rumor`, or later `settle_rumor`.
14
+ 5. If the ask is already clearly executable, hand off to `shape_work` with `create_quest` or `create_questline` instead of letting it rot in intake.
15
+
16
+ Outcome handling:
17
+ - Treat `success` as a usable search or intake result.
18
+ - Treat `no_op` as confirmation that the rumor is already in the requested state.
19
+ - Treat `needs_clarification` from `search_questlog` as a stop signal: choose among the returned candidates instead of guessing.
20
+ - Treat `error` as a cue to repair the query or target before continuing.
21
+
22
+ Failure handling:
23
+ - If the ask is urgent but unclear, still capture it first instead of inventing execution detail.
24
+ - If similar work already exists, reuse or update that thread instead of creating parallel intake.
25
+ - Do not create a quest just because someone asked for something.