@cocaxcode/logbook-mcp 0.4.1 → 0.4.2

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 CHANGED
@@ -2,7 +2,7 @@
2
2
  <h1 align="center">@cocaxcode/logbook-mcp</h1>
3
3
  <p align="center">
4
4
  <strong>Your developer logbook, always one sentence away.</strong><br/>
5
- Notes &middot; TODOs &middot; Code TODOs &middot; Full-text search &middot; Zero config
5
+ Notes &middot; TODOs &middot; Reminders &middot; Code TODOs &middot; Full-text search &middot; Zero config
6
6
  </p>
7
7
  </p>
8
8
 
@@ -12,7 +12,7 @@
12
12
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="License" /></a>
13
13
  <img src="https://img.shields.io/badge/node-%3E%3D20-339933?style=flat-square&logo=node.js&logoColor=white" alt="Node" />
14
14
  <img src="https://img.shields.io/badge/tools-9-blueviolet?style=flat-square" alt="9 tools" />
15
- <img src="https://img.shields.io/badge/tests-56-brightgreen?style=flat-square" alt="56 tests" />
15
+ <img src="https://img.shields.io/badge/tests-63-brightgreen?style=flat-square" alt="63 tests" />
16
16
  </p>
17
17
 
18
18
  <p align="center">
@@ -20,6 +20,7 @@
20
20
  <a href="#installation">Installation</a> &middot;
21
21
  <a href="#just-talk-to-it">Usage</a> &middot;
22
22
  <a href="#features">Features</a> &middot;
23
+ <a href="#reminders">Reminders</a> &middot;
23
24
  <a href="#tool-reference">Tool Reference</a> &middot;
24
25
  <a href="#storage">Storage</a> &middot;
25
26
  <a href="#contributing">Contributing</a>
@@ -35,16 +36,21 @@ You make decisions every day. Why JWT over sessions? Why Redis over Memcached? W
35
36
 
36
37
  Your TODOs live in 5 different places: Jira, sticky notes, code comments, your head, and that Slack message you'll never find again.
37
38
 
38
- **logbook-mcp** is a developer logbook that lives inside your AI assistant. Notes, TODOs, and code TODOs — all queryable with natural language, without ever leaving your workflow.
39
+ **logbook-mcp** is a developer logbook that lives inside your AI assistant. Notes, TODOs, reminders, and code TODOs — all queryable with natural language, without ever leaving your workflow.
39
40
 
40
41
  ### Why logbook-mcp?
41
42
 
42
- - **Zero context switching** — don't leave Claude/Cursor to open another app
43
- - **Zero config** — auto-detects your project, creates the DB on first use
44
- - **Zero AI costs** returns raw data, your AI client does the formatting
45
- - **Captures what git doesn't** decisions, ideas, blockers, and context
46
- - **Code TODOs included** scans your source for `TODO/FIXME/HACK/BUG` automatically
47
- - **Full-text search** FTS5 powered, finds anything instantly
43
+ | Feature | Benefit |
44
+ |---------|---------|
45
+ | **Zero context switching** | Don't leave Claude/Cursor to open another app |
46
+ | **Zero config** | Auto-detects your project, creates the DB on first use |
47
+ | **Zero AI costs** | Returns raw data, your AI client does the formatting |
48
+ | **Captures what git doesn't** | Decisions, ideas, blockers, reminders, and context |
49
+ | **Code TODOs included** | Scans your source for `TODO/FIXME/HACK/BUG` automatically |
50
+ | **Auto-sync code TODOs** | Detects when code TODOs disappear (you fixed them) |
51
+ | **Full-text search** | FTS5 powered, finds anything instantly |
52
+ | **Recurring reminders** | Daily, weekly, monthly patterns with auto-ack |
53
+ | **Multi-project** | One database, all your projects, query per-project or globally |
48
54
 
49
55
  ---
50
56
 
@@ -151,31 +157,42 @@ Add to `.gemini/settings.json`:
151
157
 
152
158
  No commands to memorize. Just tell your AI what you need:
153
159
 
154
- ### Notes — capture decisions and context
160
+ ### Notes — capture what matters
155
161
 
156
162
  | You say | What happens |
157
163
  |---------|-------------|
158
- | *"I decided to use JWT instead of sessions for scalability"* | `logbook_note` saves it as a **decision** in the current project |
159
- | *"Note: Redis doesn't support nested JSON queries natively"* | `logbook_note` saves it as a **learning** for future reference |
160
- | *"The CI pipeline is failing due to a timeout in integration tests"* | `logbook_note` captures the **blocker** so standup reports include it |
164
+ | *"I decided to use JWT instead of sessions for scalability"* | Saved as **decision** retrievable months from now |
165
+ | *"Note: Redis doesn't support nested JSON queries natively"* | Saved as a note for future reference |
166
+ | *"The CI is failing due to a timeout in integration tests"* | Captured as **blocker** shows up in standups |
167
+ | *"We could add WebSocket support for real-time updates"* | Saved as **idea** — won't get lost in Slack |
161
168
 
162
169
  ### TODOs — your checklist, always at hand
163
170
 
164
171
  | You say | What happens |
165
172
  |---------|-------------|
166
- | *"TODO: implement email validation for registration"* | `logbook_todo_add` creates a TODO, AI infers topic **feature** |
167
- | *"Add these TODOs: fix token refresh. update dependencies. add rate limiting"* | `logbook_todo_add` creates **3 TODOs** at once, each with its inferred topic |
168
- | *"Mark 5 and 8 as done"* | `logbook_todo_done` marks both TODOs as completed |
169
- | *"What's pending?"* | `logbook_todo_list` shows all TODOs grouped by topic, including code TODOs |
173
+ | *"TODO: implement email validation"* | Created with topic **feature** (AI infers it) |
174
+ | *"Add these: fix token refresh. update deps. add rate limiting"* | **3 TODOs** created at once, each categorized |
175
+ | *"Mark 5 and 8 as done"* | Both marked as completed |
176
+ | *"What's pending?"* | All TODOs grouped by topic, including code TODOs |
177
+ | *"What's pending across all projects?"* | Global view of everything |
170
178
 
171
- ### Search and history
179
+ ### Reminders never forget
172
180
 
173
181
  | You say | What happens |
174
182
  |---------|-------------|
175
- | *"What did I do yesterday?"* | `logbook_log` returns notes + completed TODOs from yesterday |
176
- | *"Search everything about auth"* | `logbook_search` finds notes and TODOs matching "auth" via FTS5 |
177
- | *"Show me all decisions this month"* | `logbook_log` filters by topic **decision** and date range |
178
- | *"What's pending across all projects?"* | `logbook_todo_list` with global scope shows everything |
183
+ | *"Remind me tomorrow to deploy"* | One-time reminder for tomorrow |
184
+ | *"Remind me every Tuesday to review PRs"* | Recurring weekly reminder |
185
+ | *"Remind me the 1st of each month to renew certificates"* | Monthly recurring reminder |
186
+ | *"Remind me on weekdays to check the CI"* | Monday to Friday reminder |
187
+
188
+ ### Search — find anything, instantly
189
+
190
+ | You say | What happens |
191
+ |---------|-------------|
192
+ | *"What did I do yesterday?"* | Notes + completed TODOs from yesterday |
193
+ | *"Search everything about auth"* | FTS5 search across all notes and TODOs |
194
+ | *"Show me all decisions this month"* | Filtered by topic **decision** and date range |
195
+ | *"Why did we choose JWT?"* | Finds the decision note, even months later |
179
196
 
180
197
  ---
181
198
 
@@ -186,91 +203,254 @@ No commands to memorize. Just tell your AI what you need:
186
203
  logbook-mcp auto-detects which git project you're in. No setup, no config files:
187
204
 
188
205
  ```
189
- Working in ~/projects/my-api/
190
- Notes and TODOs automatically linked to "my-api"
206
+ You're in ~/projects/my-api/
207
+ "What's pending?" shows only my-api TODOs
191
208
 
192
- Working in ~/projects/my-frontend/
193
- Separate context, same database
209
+ You're in ~/projects/my-frontend/
210
+ Same question shows only my-frontend TODOs
194
211
 
195
- Ask for "all projects"
212
+ You ask "all projects"
196
213
  → Global view across everything
197
214
  ```
198
215
 
199
- ### Notes with topics
216
+ ### 7 built-in topics
200
217
 
201
- 6 built-in topics that cover every scenario:
218
+ Every note, TODO, and reminder is categorized. The AI infers the topic automatically, or you can specify it:
202
219
 
203
- | Topic | What it captures | From commits |
204
- |-------|-----------------|--------------|
205
- | **feature** | New functionality | `feat:` |
206
- | **fix** | Bug fixes | `fix:` |
207
- | **chore** | Maintenance, refactoring, CI/CD | `refactor:` `docs:` `ci:` `build:` `test:` |
208
- | **idea** | Future proposals, explorations | — |
209
- | **decision** | Architecture choices with reasoning | |
210
- | **blocker** | Things blocking your progress | — |
220
+ | Topic | Purpose | Auto-mapped from commits | AI infers from |
221
+ |-------|---------|:------------------------:|----------------|
222
+ | **feature** | New functionality | `feat:` | "implement", "add", "create" |
223
+ | **fix** | Bug fixes | `fix:` | "fix", "bug", "broken" |
224
+ | **chore** | Maintenance, CI/CD, refactoring | `refactor:` `docs:` `ci:` `build:` `test:` | "update", "clean", "refactor" |
225
+ | **idea** | Future proposals | — | "maybe", "could", "explore" |
226
+ | **decision** | Architecture choices | | "decided", "chose", "going with" |
227
+ | **blocker** | Things blocking progress | — | "blocked", "can't", "waiting" |
228
+ | **reminder** | Time-based reminders | — | Auto-assigned when `remind_at` is set |
211
229
 
212
- Need more? Create custom topics:
230
+ Topics are auto-created when the AI uses one that doesn't exist. You can also create custom topics:
213
231
 
214
232
  ```
215
- "Create a topic called 'security' for security-related items"
216
- logbook_topics(action: 'add', name: 'security')
233
+ "Create a topic called 'security'"
234
+ Done. Now you can tag notes and TODOs with 'security'.
217
235
  ```
218
236
 
219
237
  ### TODOs as checklist
220
238
 
221
- Manual TODOs with priority levels (`low`, `normal`, `high`, `urgent`):
239
+ Manual TODOs with priority levels:
222
240
 
223
241
  ```
224
- feature (3)
242
+ 📋 feature (3)
225
243
  ☐ #12 Implement email validation
226
244
  ☐ #15 [HIGH] Dynamic permissions endpoint
227
245
  ☑ #9 Google OAuth login (completed Mar 17)
228
246
 
229
- fix (1)
247
+ 📋 fix (1)
230
248
  ☐ #8 [URGENT] Token doesn't refresh
231
249
 
232
- blocker (1)
250
+ 📋 blocker (1)
233
251
  ☐ #20 Resolve CI timeout
234
252
  ```
235
253
 
236
- ### Code TODOs
254
+ ### Code TODOs — live from your source
237
255
 
238
- Your `TODO`, `FIXME`, `HACK`, and `BUG` comments in source code appear alongside manual TODOs:
256
+ Your `TODO`, `FIXME`, `HACK`, and `BUG` comments appear alongside manual TODOs:
239
257
 
240
258
  ```
241
- feature (2)
259
+ 📋 feature (2)
242
260
  ☐ #12 [manual] Implement email validation
243
261
  📄 [code] TODO: add OAuth support — src/auth/service.ts:45
244
262
 
245
- fix (2)
263
+ 📋 fix (3)
246
264
  ☐ #8 [manual] Token doesn't refresh
247
265
  📄 [code] FIXME: handle null case — src/users/controller.ts:78
248
266
  📄 [code] BUG: race condition — src/chat/gateway.ts:112
249
267
 
250
- chore (1)
268
+ 📋 chore (1)
251
269
  📄 [code] HACK: proxy workaround — src/middleware/cors.ts:23
252
270
  ```
253
271
 
254
- Code TODOs are scanned live via `git grep`they disappear when you fix them.
272
+ **Auto-sync:** When you fix a code TODO and it disappears from the source, logbook detects it and marks it as resolved. No action needed it happens automatically when you list your TODOs.
273
+
274
+ ### Batch operations
275
+
276
+ ```
277
+ "Add: validate email. fix token. update deps" → 3 TODOs created
278
+ "Mark 5, 8, and 12 as done" → 3 TODOs completed
279
+ "Delete TODOs 3 and 7" → 2 TODOs removed
280
+ ```
255
281
 
256
282
  ### Full-text search (FTS5)
257
283
 
258
- Search across all notes and TODOs instantly:
284
+ Instant search across all notes and TODOs, powered by SQLite FTS5:
259
285
 
260
286
  ```
261
287
  "Search auth"
262
288
  → Finds notes about JWT decisions, TODOs about auth endpoints,
263
- and anything mentioning "auth" across all projects
289
+ and anything mentioning "auth" across all projects if you want
264
290
  ```
265
291
 
266
- ### Batch operations
292
+ ---
293
+
294
+ ## Reminders
267
295
 
268
- Create, complete, or delete multiple items at once:
296
+ logbook-mcp supports both one-time and recurring reminders.
297
+
298
+ ### One-time reminders
269
299
 
270
300
  ```
271
- "Add: validate email. fix token. update deps" → 3 TODOs created
272
- "Mark 5, 8, and 12 as done" → 3 TODOs completed
273
- "Delete TODOs 3 and 7" → 2 TODOs removed
301
+ "Remind me tomorrow to deploy to production"
302
+ remind_at: "2026-03-20", topic: "reminder"
303
+
304
+ "Remind me on March 25 to review the quarterly report"
305
+ → remind_at: "2026-03-25", topic: "reminder"
306
+ ```
307
+
308
+ ### Recurring reminders
309
+
310
+ | You say | Pattern | When it fires |
311
+ |---------|---------|---------------|
312
+ | *"Remind me every day to check CI"* | `daily` | Every day |
313
+ | *"Remind me on weekdays to do standup"* | `weekdays` | Monday to Friday |
314
+ | *"Remind me every Tuesday to review PRs"* | `weekly:2` | Every Tuesday |
315
+ | *"Remind me Mondays and Wednesdays to sync"* | `weekly:1,3` | Mon + Wed |
316
+ | *"Remind me the 1st of each month to renew certs"* | `monthly:1` | 1st of month |
317
+ | *"Remind me the 1st and 15th to check billing"* | `monthly:1,15` | 1st + 15th |
318
+
319
+ ### How reminders behave
320
+
321
+ ```
322
+ Tuesday 9:00 — you open Claude
323
+ ⏰ Reminder: review PRs (weekly, every Tuesday)
324
+ → Shows once, auto-acknowledged for today
325
+
326
+ Tuesday 14:00 — you open Claude again
327
+ → Nothing. Already shown today.
328
+
329
+ Wednesday — you open Claude
330
+ → Nothing. Not a Tuesday.
331
+
332
+ Next Tuesday — you open Claude
333
+ → ⏰ Reminder: review PRs (shows again)
334
+ ```
335
+
336
+ **To stop a recurring reminder permanently:** delete it with `logbook_todo_rm`.
337
+
338
+ ### Overdue reminders
339
+
340
+ One-time reminders that weren't completed show as overdue:
341
+
342
+ ```
343
+ ⏰ Reminders for today (Mar 19)
344
+ my-api: deploy to production
345
+
346
+ ⚠️ Overdue
347
+ my-frontend: fix dark mode (was due Mar 17 — 2 days late)
348
+ ```
349
+
350
+ ### MCP Resource: automatic reminder delivery
351
+
352
+ logbook-mcp exposes a **Resource** (`logbook://reminders`) that MCP clients can load automatically when starting a session. This means your AI tells you about pending reminders **without you asking**.
353
+
354
+ #### Resource compatibility
355
+
356
+ | Client | Resources support | Reminders behavior |
357
+ |--------|:-----------------:|-------------------|
358
+ | **Claude Code** | ✅ Yes | Reminders shown automatically on session start |
359
+ | **Claude Desktop** | ✅ Yes | Reminders shown automatically on session start |
360
+ | **Cursor** | ❌ No | Ask *"any reminders?"* — works via `logbook_todo_list` |
361
+ | **Windsurf** | ❌ No | Ask *"any reminders?"* — works via `logbook_todo_list` |
362
+ | **VS Code + Copilot** | ⚠️ Partial | Depends on MCP extension used |
363
+ | **Codex CLI** | ❌ No | Ask *"any reminders?"* — works via `logbook_todo_list` |
364
+ | **Gemini CLI** | ❌ No | Ask *"any reminders?"* — works via `logbook_todo_list` |
365
+
366
+ > **Important:** Even without Resource support, reminders always work. You just need to ask for them instead of getting them automatically. All 9 tools work identically across all MCP clients.
367
+
368
+ ---
369
+
370
+ ## A Day With logbook-mcp
371
+
372
+ Here's what a typical day looks like:
373
+
374
+ ### Morning — start your day
375
+
376
+ ```
377
+ You: "What did I do yesterday?"
378
+
379
+ Claude: Yesterday on my-api:
380
+ 📝 [decision] Chose sliding window for rate limiting over fixed window
381
+ ☑ #8 Fixed token refresh bug
382
+ ☑ #12 Implemented email validation
383
+ 📄 [resolved] FIXME in src/users/controller.ts (handle null case)
384
+
385
+ You: "What's pending?"
386
+
387
+ Claude: my-api — 4 pending:
388
+ 📋 feature
389
+ ☐ #15 [HIGH] Dynamic permissions endpoint
390
+ 📄 TODO: add OAuth — src/auth/service.ts:45
391
+ 📋 chore
392
+ ☐ #21 Update dependencies
393
+ 📋 reminder
394
+ ⏰ #25 Review PRs (recurring: every Tuesday)
395
+ ```
396
+
397
+ ### Working — capture as you go
398
+
399
+ ```
400
+ You: "I decided to use Redis for session cache because
401
+ Memcached doesn't support key expiration callbacks"
402
+
403
+ Claude: ✅ Note saved [decision] in my-api
404
+
405
+ You: "TODO: add rate limit headers to API responses.
406
+ TODO: document the new permissions endpoint.
407
+ TODO: fix CORS for mobile app"
408
+
409
+ Claude: ✅ 3 TODOs created:
410
+ ☐ #26 [feature] Add rate limit headers
411
+ ☐ #27 [chore] Document permissions endpoint
412
+ ☐ #28 [fix] Fix CORS for mobile app
413
+
414
+ You: "Remind me Friday to deploy the permissions update"
415
+
416
+ Claude: ✅ Reminder set for 2026-03-21 [reminder]
417
+ ```
418
+
419
+ ### End of day — wrap up
420
+
421
+ ```
422
+ You: "Mark 15, 26, and 28 as done"
423
+
424
+ Claude: ✅ 3 TODOs completed
425
+
426
+ You: "What did I do today?"
427
+
428
+ Claude: Today on my-api:
429
+ 📝 [decision] Redis for session cache (expiration callbacks)
430
+ ☑ #15 Dynamic permissions endpoint
431
+ ☑ #26 Rate limit headers
432
+ ☑ #28 CORS fix for mobile
433
+ 📄 [resolved] HACK in src/middleware/cors.ts (removed workaround)
434
+ ```
435
+
436
+ ### Weekly review — see the big picture
437
+
438
+ ```
439
+ You: "Summary of this week across all projects"
440
+
441
+ Claude:
442
+ my-api: 3 notes, 8 TODOs completed, 4 pending
443
+ my-frontend: 1 note, 3 TODOs completed, 2 pending
444
+ my-docs: 0 notes, 1 TODO completed, 0 pending
445
+
446
+ You: "Search everything about auth across all projects"
447
+
448
+ Claude: 12 results:
449
+ [note] my-api — Decided JWT over sessions (Mar 12)
450
+ [note] my-api — Redis for session cache (Mar 19)
451
+ [todo] my-api — ☐ Add OAuth support
452
+ [todo] my-frontend — ☑ Auth redirect fix (completed Mar 15)
453
+ ...
274
454
  ```
275
455
 
276
456
  ---
@@ -283,12 +463,13 @@ Create, complete, or delete multiple items at once:
283
463
  | **Notes** | `logbook_note` | 1 |
284
464
  | **TODOs** | `logbook_todo_add` `logbook_todo_list` `logbook_todo_done` `logbook_todo_edit` `logbook_todo_rm` | 5 |
285
465
  | **Config** | `logbook_topics` | 1 |
286
- | **Total** | | **9** |
466
+ | **Resource** | `logbook://reminders` | |
467
+ | **Total** | | **9 tools + 1 resource** |
287
468
 
288
469
  <details>
289
470
  <summary><strong>logbook_log</strong> — Activity for a period</summary>
290
471
 
291
- Shows notes and completed TODOs for a time range.
472
+ Shows notes, completed TODOs, and resolved code TODOs for a time range.
292
473
 
293
474
  | Param | Type | Default | Description |
294
475
  |-------|------|---------|-------------|
@@ -305,8 +486,8 @@ Shows notes and completed TODOs for a time range.
305
486
 
306
487
  | Param | Type | Required | Description |
307
488
  |-------|------|----------|-------------|
308
- | `content` | string | Yes | Note content |
309
- | `topic` | string | No | Topic name (AI can infer it) |
489
+ | `content` | string | Yes | Note content (max 5000 chars) |
490
+ | `topic` | string | No | Topic name AI infers it, or auto-created if new |
310
491
  </details>
311
492
 
312
493
  <details>
@@ -314,10 +495,12 @@ Shows notes and completed TODOs for a time range.
314
495
 
315
496
  | Param | Type | Description |
316
497
  |-------|------|-------------|
317
- | `content` | string | Single TODO content |
318
- | `topic` | string | Topic for single TODO |
498
+ | `content` | string | Single TODO content (max 2000 chars) |
499
+ | `topic` | string | Topic auto-inferred or auto-created |
319
500
  | `priority` | `low` `normal` `high` `urgent` | Priority (default: normal) |
320
- | `items` | array | Multiple TODOs: `[{content, topic?, priority?}]` |
501
+ | `remind_at` | `YYYY-MM-DD` | One-time reminder date |
502
+ | `remind_pattern` | string | Recurring: `daily`, `weekdays`, `weekly:N`, `monthly:N` |
503
+ | `items` | array | Multiple TODOs: `[{content, topic?, priority?, remind_at?, remind_pattern?}]` (max 50) |
321
504
  </details>
322
505
 
323
506
  <details>
@@ -340,6 +523,8 @@ Shows notes and completed TODOs for a time range.
340
523
  |-------|------|-------------|
341
524
  | `ids` | number or number[] | ID(s) to mark |
342
525
  | `undo` | boolean | If true, sets back to pending (default: false) |
526
+
527
+ For recurring reminders, "done" means acknowledged for today. It will reappear on the next matching day.
343
528
  </details>
344
529
 
345
530
  <details>
@@ -349,7 +534,7 @@ Shows notes and completed TODOs for a time range.
349
534
  |-------|------|-------------|
350
535
  | `id` | number | TODO ID to edit |
351
536
  | `content` | string | New content |
352
- | `topic` | string | New topic |
537
+ | `topic` | string | New topic (auto-created if new) |
353
538
  | `priority` | `low` `normal` `high` `urgent` | New priority |
354
539
  </details>
355
540
 
@@ -358,7 +543,9 @@ Shows notes and completed TODOs for a time range.
358
543
 
359
544
  | Param | Type | Description |
360
545
  |-------|------|-------------|
361
- | `ids` | number or number[] | ID(s) to delete |
546
+ | `ids` | number or number[] | ID(s) to delete permanently |
547
+
548
+ Use this to stop recurring reminders permanently.
362
549
  </details>
363
550
 
364
551
  <details>
@@ -366,7 +553,7 @@ Shows notes and completed TODOs for a time range.
366
553
 
367
554
  | Param | Type | Default | Description |
368
555
  |-------|------|---------|-------------|
369
- | `query` | string | — | Search text (required) |
556
+ | `query` | string | — | Search text (required, max 500 chars) |
370
557
  | `type` | `all` `notes` `todos` | `all` | Search scope |
371
558
  | `topic` | string | — | Filter by topic |
372
559
  | `scope` | `project` `global` | `project` | Project or global |
@@ -379,8 +566,8 @@ Shows notes and completed TODOs for a time range.
379
566
  | Param | Type | Default | Description |
380
567
  |-------|------|---------|-------------|
381
568
  | `action` | `list` `add` | `list` | List or create topics |
382
- | `name` | string | — | New topic name (for add) |
383
- | `description` | string | — | Topic description (for add) |
569
+ | `name` | string | — | New topic name (lowercase, `[a-z0-9-]` only, max 50 chars) |
570
+ | `description` | string | — | Topic description (max 200 chars) |
384
571
  </details>
385
572
 
386
573
  ---
@@ -391,56 +578,14 @@ All data lives in a single SQLite database:
391
578
 
392
579
  ```
393
580
  ~/.logbook/
394
- └── logbook.db # All projects, notes, TODOs in one file
581
+ └── logbook.db # All projects, notes, TODOs, reminders in one file
395
582
  ```
396
583
 
397
584
  - **WAL mode** for concurrent reads
398
585
  - **FTS5** virtual tables for instant full-text search
399
586
  - **Triggers** keep search indexes in sync automatically
400
587
  - **Foreign keys** with `ON DELETE SET NULL` — delete a project, notes remain
401
-
402
- Add to your global `.gitignore`:
403
- ```
404
- .logbook/
405
- ```
406
-
407
- ---
408
-
409
- ## How It Improves Your Productivity
410
-
411
- ### Morning standup in 10 seconds
412
-
413
- Instead of trying to remember what you did yesterday:
414
-
415
- ```
416
- "What did I do yesterday?"
417
- → Complete summary: notes, decisions, completed TODOs
418
- ```
419
-
420
- ### Never lose a decision again
421
-
422
- ```
423
- "Why did we choose JWT?"
424
- → Search finds your note: "Decided JWT over sessions for horizontal scalability"
425
- ```
426
-
427
- ### One place for all TODOs
428
-
429
- No more scattered checklists. Manual TODOs + code TODOs + priorities, all in one view:
430
-
431
- ```
432
- "What's pending?"
433
- → Grouped by topic, with priority flags, across code and manual items
434
- ```
435
-
436
- ### Context that survives across sessions
437
-
438
- Your AI assistant forgets everything between sessions. Your logbook doesn't:
439
-
440
- ```
441
- "Search everything about the auth migration"
442
- → All notes, decisions, and TODOs related to auth — from any date
443
- ```
588
+ - **Code TODO snapshots** — tracks which code TODOs existed, detects when they're resolved
444
589
 
445
590
  ---
446
591
 
@@ -449,16 +594,18 @@ Your AI assistant forgets everything between sessions. Your logbook doesn't:
449
594
  ```
450
595
  src/
451
596
  ├── index.ts # Entry: --mcp → server, else CLI
452
- ├── server.ts # createServer() factory, registers 9 tools
597
+ ├── server.ts # createServer() 9 tools + 1 resource
453
598
  ├── cli.ts # CLI (help, version)
454
599
  ├── types.ts # Shared interfaces
455
600
  ├── db/
456
601
  │ ├── connection.ts # getDb() singleton → ~/.logbook/logbook.db
457
602
  │ ├── schema.ts # Tables + FTS5 + triggers + topic seed
458
- │ └── queries.ts # Typed query functions
603
+ │ └── queries.ts # Typed query functions + reminder logic
459
604
  ├── git/
460
605
  │ ├── detect-repo.ts # Auto-detect project via git rev-parse
461
606
  │ └── code-todos.ts # Scan TODO/FIXME/HACK/BUG via git grep
607
+ ├── resources/
608
+ │ └── reminders.ts # MCP Resource: logbook://reminders
462
609
  └── tools/ # 9 MCP tools (one file each)
463
610
  ```
464
611
 
@@ -472,7 +619,7 @@ src/
472
619
  git clone https://github.com/cocaxcode/logbook-mcp.git
473
620
  cd logbook-mcp
474
621
  npm install
475
- npm test # 56 tests
622
+ npm test # 60 tests
476
623
  npm run build # Build with tsup
477
624
  npm run typecheck # TypeScript check
478
625
  npm run inspector # Test with MCP Inspector
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/cli.ts
4
- var VERSION = true ? "0.4.0" : "0.0.0";
4
+ var VERSION = true ? "0.4.2" : "0.0.0";
5
5
  async function runCli(argv) {
6
6
  if (argv.includes("--version") || argv.includes("-v")) {
7
7
  console.log(`logbook-mcp v${VERSION}`);
package/dist/index.js CHANGED
@@ -6,13 +6,13 @@ async function main() {
6
6
  const hasMcpFlag = argv.includes("--mcp");
7
7
  if (hasMcpFlag) {
8
8
  const { StdioServerTransport } = await import("@modelcontextprotocol/sdk/server/stdio.js");
9
- const { createServer } = await import("./server-7D4ICBXI.js");
9
+ const { createServer } = await import("./server-CAXX2WED.js");
10
10
  const server = createServer();
11
11
  const transport = new StdioServerTransport();
12
12
  await server.connect(transport);
13
13
  console.error("logbook-mcp server running on stdio");
14
14
  } else {
15
- const { runCli } = await import("./cli-AMORGACN.js");
15
+ const { runCli } = await import("./cli-FN2NON34.js");
16
16
  await runCli(argv);
17
17
  }
18
18
  }
@@ -111,6 +111,12 @@ CREATE TRIGGER IF NOT EXISTS todos_au AFTER UPDATE ON todos BEGIN
111
111
  INSERT INTO todos_fts(rowid, content) VALUES (new.id, new.content);
112
112
  END;
113
113
  `;
114
+ var MIGRATIONS_SQL = `
115
+ -- Add reminder columns to existing todos tables (safe to run multiple times)
116
+ ALTER TABLE todos ADD COLUMN remind_at TEXT;
117
+ ALTER TABLE todos ADD COLUMN remind_pattern TEXT;
118
+ ALTER TABLE todos ADD COLUMN remind_last_done TEXT;
119
+ `;
114
120
  var SEED_TOPICS_SQL = `
115
121
  INSERT OR IGNORE INTO topics (name, description, commit_prefix, is_custom) VALUES
116
122
  ('feature', 'Funcionalidad nueva', 'feat', 0),
@@ -137,6 +143,12 @@ function getDb(dbPath) {
137
143
  db.pragma("journal_mode = WAL");
138
144
  db.pragma("foreign_keys = ON");
139
145
  db.exec(SCHEMA_SQL);
146
+ for (const stmt of MIGRATIONS_SQL.split(";").map((s) => s.trim()).filter(Boolean)) {
147
+ try {
148
+ db.exec(stmt);
149
+ } catch {
150
+ }
151
+ }
140
152
  db.exec(SEED_TOPICS_SQL);
141
153
  return db;
142
154
  }
@@ -1121,7 +1133,7 @@ function registerRemindersResource(server) {
1121
1133
  }
1122
1134
 
1123
1135
  // src/server.ts
1124
- var VERSION = true ? "0.4.0" : "0.0.0";
1136
+ var VERSION = true ? "0.4.2" : "0.0.0";
1125
1137
  function createServer() {
1126
1138
  const server = new McpServer({
1127
1139
  name: "logbook-mcp",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocaxcode/logbook-mcp",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "MCP server — cuaderno de bitácora del developer. Notas, TODOs y code TODOs sin salir de tu AI.",
5
5
  "type": "module",
6
6
  "bin": {