@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.
- package/README.md +92 -1
- package/SKILL.md +293 -0
- package/dist/cli.js +7202 -0
- package/dist/database-DShQ4N46.d.cts +20 -0
- package/dist/database-DShQ4N46.d.ts +20 -0
- package/dist/index.cjs +35 -5
- package/dist/index.d.cts +5 -19
- package/dist/index.d.ts +5 -19
- package/dist/index.js +35 -5
- package/dist/mcp-server.js +5929 -0
- package/dist/mcp.cjs +4952 -0
- package/dist/mcp.d.cts +89 -0
- package/dist/mcp.d.ts +89 -0
- package/dist/mcp.js +4944 -0
- package/package.json +46 -9
- package/skills/questlog/SKILL.md +293 -0
- package/skills/questlog/references/archive-delete-and-prune.md +25 -0
- package/skills/questlog/references/choose-work-shape.md +25 -0
- package/skills/questlog/references/clarify-ambiguous-requests.md +24 -0
- package/skills/questlog/references/close-work-and-claim-outcomes.md +23 -0
- package/skills/questlog/references/create-concrete-quest.md +21 -0
- package/skills/questlog/references/detect-slips-and-staleness.md +22 -0
- package/skills/questlog/references/escalate-and-unblock.md +22 -0
- package/skills/questlog/references/frame-initiative-questline.md +23 -0
- package/skills/questlog/references/handle-exceptions-and-weird-cases.md +24 -0
- package/skills/questlog/references/intake-triage.md +25 -0
- package/skills/questlog/references/maintain-clear-ownership.md +22 -0
- package/skills/questlog/references/manage-approvals-and-promises.md +22 -0
- package/skills/questlog/references/plan-successor-work.md +22 -0
- package/skills/questlog/references/plan-time-correctly.md +22 -0
- package/skills/questlog/references/prioritize-across-streams.md +21 -0
- package/skills/questlog/references/protect-capacity-and-focus.md +20 -0
- package/skills/questlog/references/recover-from-modeling-mistakes.md +25 -0
- package/skills/questlog/references/report-status-and-manage-expectations.md +20 -0
- package/skills/questlog/references/revise-or-reshape-commitment.md +22 -0
- package/skills/questlog/references/run-operational-review.md +24 -0
- package/skills/questlog/references/run-recurring-rhythms.md +24 -0
- package/skills/questlog/references/search-and-retrieve-context.md +23 -0
- package/skills/questlog/references/sequence-with-unlocks.md +23 -0
- package/skills/questlog/references/settle-rumor-into-structure.md +25 -0
- package/skills/questlog/references/tag-and-filter-portfolios.md +21 -0
package/README.md
CHANGED
|
@@ -6,11 +6,82 @@
|
|
|
6
6
|
[](package.json)
|
|
7
7
|
[](https://www.typescriptlang.org)
|
|
8
8
|
[](https://ghostpawjs.github.io/questlog)
|
|
9
|
+
[](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+).
|
|
@@ -187,6 +260,24 @@ Each tool exports runtime metadata — name, description, JSON Schema, input des
|
|
|
187
260
|
- **WoW-style markers.** Semantic marker IDs (`attention.available`, `progress.complete`, ...) computed on every read, renderable to any channel.
|
|
188
261
|
- **Colocated tests.** Every non-type module has a colocated `.test.ts` file. The behavior described in docs is backed by executable coverage.
|
|
189
262
|
|
|
263
|
+
## Performance
|
|
264
|
+
|
|
265
|
+
Measured with `npm run bench` on Node 24.14.0, Linux, Intel Xeon (shared
|
|
266
|
+
cloud vCPU), 10,000 quests in a file-backed database:
|
|
267
|
+
|
|
268
|
+
| Operation | p50 | p95 |
|
|
269
|
+
|---|---:|---:|
|
|
270
|
+
| `search_questlog` (tool) | 0.06 ms | 0.07 ms |
|
|
271
|
+
| MCP `tools/call` search, stdio framing included | 0.07 ms | 0.08 ms |
|
|
272
|
+
| `read.searchQuestlog`, one matching quest | 0.07 ms | 0.08 ms |
|
|
273
|
+
| `read.searchQuestlog`, all 10,000 quests matching | 26.6 ms | 41.9 ms |
|
|
274
|
+
| `write.createQuest` | 0.22 ms | 0.69 ms |
|
|
275
|
+
|
|
276
|
+
The library search returns every match with a highlighted snippet, so a query
|
|
277
|
+
that matches the whole log pays for building all of those rows. Cold start
|
|
278
|
+
(process spawn to first response, median) is about 30 ms for `--version` and
|
|
279
|
+
the MCP server.
|
|
280
|
+
|
|
190
281
|
## Package Surface
|
|
191
282
|
|
|
192
283
|
```ts
|
|
@@ -207,7 +298,7 @@ All domain types are also available at the root for TypeScript consumers:
|
|
|
207
298
|
import type {
|
|
208
299
|
QuestlogDb,
|
|
209
300
|
QuestState,
|
|
210
|
-
|
|
301
|
+
QuestDetail,
|
|
211
302
|
CreateQuestInput,
|
|
212
303
|
QuestlogSearchResult,
|
|
213
304
|
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.
|