@ghostpaw/questlog 0.5.1 → 0.6.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 (41) hide show
  1. package/README.md +74 -1
  2. package/SKILL.md +293 -0
  3. package/dist/cli.js +7204 -0
  4. package/dist/database-DShQ4N46.d.cts +20 -0
  5. package/dist/database-DShQ4N46.d.ts +20 -0
  6. package/dist/index.cjs +33 -1
  7. package/dist/index.d.cts +3 -19
  8. package/dist/index.d.ts +3 -19
  9. package/dist/index.js +33 -1
  10. package/dist/mcp-server.js +5931 -0
  11. package/dist/mcp.cjs +4954 -0
  12. package/dist/mcp.d.cts +89 -0
  13. package/dist/mcp.d.ts +89 -0
  14. package/dist/mcp.js +4946 -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/README.md CHANGED
@@ -6,11 +6,82 @@
6
6
  [![dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)](package.json)
7
7
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue?logo=typescript&logoColor=white)](https://www.typescriptlang.org)
8
8
  [![Live Demo](https://img.shields.io/badge/demo-live-06d6a0?style=flat&logo=github)](https://ghostpawjs.github.io/questlog)
9
+ [![MCP Registry](https://img.shields.io/badge/MCP_Registry-io.github.GhostPawJS%2Fquestlog-06d6a0)](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.GhostPawJS%2Fquestlog/versions/latest)
9
10
 
10
11
  A unified task and calendar model for Node.js, built on SQLite.
11
12
 
12
13
  Questlog treats tasks, events, deadlines, recurring commitments, and loose intake as one coherent data model instead of separate systems. It ships as a single prebundled blob with zero runtime dependencies, designed for two audiences at once: human developers working directly in code, and LLM agents operating through a structured tool facade.
13
14
 
15
+ ## MCP server
16
+
17
+ Every client below starts the same stdio server: `npx -y @ghostpaw/questlog mcp`.
18
+ Data lives in `~/.ghostpaw/questlog.db` unless the `GHOSTPAW_QUESTLOG_DB`
19
+ environment variable (absolute path) or `--db <path>` says otherwise.
20
+
21
+ **Claude Code**
22
+
23
+ ```bash
24
+ claude mcp add ghostpaw-questlog -- npx -y @ghostpaw/questlog mcp
25
+ ```
26
+
27
+ or as a plugin, which also installs the skill:
28
+
29
+ ```bash
30
+ /plugin marketplace add GhostPawJS/questlog
31
+ /plugin install ghostpaw-questlog@ghostpaw-questlog
32
+ ```
33
+
34
+ **Codex CLI** (`~/.codex/config.toml`)
35
+
36
+ ```toml
37
+ [mcp_servers.ghostpaw-questlog]
38
+ command = "npx"
39
+ args = ["-y", "@ghostpaw/questlog", "mcp"]
40
+ ```
41
+
42
+ **Cursor** (`.cursor/mcp.json`), **Claude Desktop** (`claude_desktop_config.json`)
43
+ or a project `.mcp.json`:
44
+
45
+ ```json
46
+ {
47
+ "mcpServers": {
48
+ "ghostpaw-questlog": {
49
+ "command": "npx",
50
+ "args": ["-y", "@ghostpaw/questlog", "mcp"]
51
+ }
52
+ }
53
+ }
54
+ ```
55
+
56
+ Claude Desktop users can also install `server.mcpb` from the
57
+ [latest GitHub release](https://github.com/GhostPawJS/questlog/releases/latest).
58
+ A Dockerfile is included for container hosts:
59
+ `docker build -t ghostpaw-questlog . && docker run -i --rm -v questlog:/data ghostpaw-questlog`.
60
+
61
+ The server speaks MCP 2026-07-28 (stateless, `server/discover`) and the
62
+ initialize-based revisions 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05.
63
+
64
+ ## CLI
65
+
66
+ ```bash
67
+ npx -y @ghostpaw/questlog tools
68
+ npx -y @ghostpaw/questlog call capture_rumor '{"title":"Review release notes"}'
69
+ npx -y @ghostpaw/questlog call search_questlog '{"query":"release notes"}'
70
+ ```
71
+
72
+ Install globally for the `ghostpaw-questlog` binary: `npm i -g @ghostpaw/questlog`.
73
+ `ghostpaw-questlog mcp` starts the stdio server.
74
+
75
+ ## Agent Skill
76
+
77
+ `SKILL.md` (repo root) and `skills/questlog/SKILL.md` follow the
78
+ [Agent Skills](https://agentskills.io) format and ship in the npm package.
79
+ Copy `skills/questlog/` into your agent's skills folder, or print it:
80
+
81
+ ```bash
82
+ npx -y @ghostpaw/questlog skill > SKILL.md
83
+ ```
84
+
14
85
  ## Install
15
86
 
16
87
  ```bash
@@ -176,6 +247,8 @@ Twelve tools shaped around operator intent, not raw storage operations:
176
247
 
177
248
  Each tool exports runtime metadata — name, description, JSON Schema, input descriptions, side-effect level — so agent harnesses can wire them without reading docs.
178
249
 
250
+ The `run_quest` tool refuses to start a quest with unmet unlock prerequisites and returns the blocking quests with inspection hints. Set `force: true` to start anyway with a warning. The library `startQuest` function remains permissive.
251
+
179
252
  ## Key Properties
180
253
 
181
254
  - **Zero runtime dependencies.** Only `node:sqlite` (built into Node 24+).
@@ -207,7 +280,7 @@ All domain types are also available at the root for TypeScript consumers:
207
280
  import type {
208
281
  QuestlogDb,
209
282
  QuestState,
210
- QuestDetailRecord,
283
+ QuestDetail,
211
284
  CreateQuestInput,
212
285
  QuestlogSearchResult,
213
286
  QuestlogToolDefinition,
package/SKILL.md ADDED
@@ -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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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](skills/questlog/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.