shelbymcp 0.1.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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +335 -0
  3. package/dist/config.d.ts +9 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +35 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/db/database.d.ts +8 -0
  8. package/dist/db/database.d.ts.map +1 -0
  9. package/dist/db/database.js +25 -0
  10. package/dist/db/database.js.map +1 -0
  11. package/dist/db/edges.d.ts +65 -0
  12. package/dist/db/edges.d.ts.map +1 -0
  13. package/dist/db/edges.js +256 -0
  14. package/dist/db/edges.js.map +1 -0
  15. package/dist/db/fts.d.ts +25 -0
  16. package/dist/db/fts.d.ts.map +1 -0
  17. package/dist/db/fts.js +53 -0
  18. package/dist/db/fts.js.map +1 -0
  19. package/dist/db/migrations.d.ts +11 -0
  20. package/dist/db/migrations.d.ts.map +1 -0
  21. package/dist/db/migrations.js +95 -0
  22. package/dist/db/migrations.js.map +1 -0
  23. package/dist/db/thoughts.d.ts +60 -0
  24. package/dist/db/thoughts.d.ts.map +1 -0
  25. package/dist/db/thoughts.js +194 -0
  26. package/dist/db/thoughts.js.map +1 -0
  27. package/dist/db/vectors.d.ts +16 -0
  28. package/dist/db/vectors.d.ts.map +1 -0
  29. package/dist/db/vectors.js +74 -0
  30. package/dist/db/vectors.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +24 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/mcp/server.d.ts +8 -0
  36. package/dist/mcp/server.d.ts.map +1 -0
  37. package/dist/mcp/server.js +229 -0
  38. package/dist/mcp/server.js.map +1 -0
  39. package/dist/tools/capture.d.ts +4 -0
  40. package/dist/tools/capture.d.ts.map +1 -0
  41. package/dist/tools/capture.js +79 -0
  42. package/dist/tools/capture.js.map +1 -0
  43. package/dist/tools/delete.d.ts +4 -0
  44. package/dist/tools/delete.d.ts.map +1 -0
  45. package/dist/tools/delete.js +18 -0
  46. package/dist/tools/delete.js.map +1 -0
  47. package/dist/tools/get.d.ts +4 -0
  48. package/dist/tools/get.d.ts.map +1 -0
  49. package/dist/tools/get.js +19 -0
  50. package/dist/tools/get.js.map +1 -0
  51. package/dist/tools/graph.d.ts +5 -0
  52. package/dist/tools/graph.d.ts.map +1 -0
  53. package/dist/tools/graph.js +55 -0
  54. package/dist/tools/graph.js.map +1 -0
  55. package/dist/tools/helpers.d.ts +12 -0
  56. package/dist/tools/helpers.d.ts.map +1 -0
  57. package/dist/tools/helpers.js +21 -0
  58. package/dist/tools/helpers.js.map +1 -0
  59. package/dist/tools/list.d.ts +4 -0
  60. package/dist/tools/list.d.ts.map +1 -0
  61. package/dist/tools/list.js +18 -0
  62. package/dist/tools/list.js.map +1 -0
  63. package/dist/tools/search.d.ts +4 -0
  64. package/dist/tools/search.d.ts.map +1 -0
  65. package/dist/tools/search.js +73 -0
  66. package/dist/tools/search.js.map +1 -0
  67. package/dist/tools/stats.d.ts +4 -0
  68. package/dist/tools/stats.d.ts.map +1 -0
  69. package/dist/tools/stats.js +34 -0
  70. package/dist/tools/stats.js.map +1 -0
  71. package/dist/tools/update.d.ts +4 -0
  72. package/dist/tools/update.d.ts.map +1 -0
  73. package/dist/tools/update.js +59 -0
  74. package/dist/tools/update.js.map +1 -0
  75. package/package.json +58 -0
  76. package/skills/shelby-forage/SKILL.md +85 -0
@@ -0,0 +1,85 @@
1
+ ---
2
+ description: Daily memory maintenance — enrich, consolidate, and connect your ShelbyMCP memories
3
+ schedule: "23 6 * * *"
4
+ ---
5
+
6
+ # Shelby Forage — Memory Maintenance Skill
7
+
8
+ You are the Forage agent for ShelbyMCP. Your job is to tend the user's memory database — enriching, consolidating, and connecting thoughts so they become more useful over time.
9
+
10
+ You have access to the ShelbyMCP memory tools. Use them to perform the following tasks in order. Skip any task that has nothing to do (e.g., no poorly tagged thoughts, no duplicates found).
11
+
12
+ ## Task 1: Summary Backfill
13
+
14
+ Find thoughts that don't have summaries and generate them. Summaries are critical — search results only show summaries, not full content.
15
+
16
+ 1. Use `list_thoughts` to find thoughts where summary is null or empty, limit 50
17
+ 2. For each, read the full content via `get_thought`
18
+ 3. Write a one-line summary (max ~100 characters) that captures the essence of the thought
19
+ 4. Use `update_thought` to set the summary field
20
+ 5. A good summary answers: "What is this thought about and why does it matter?"
21
+
22
+ ## Task 2: Embed Backfill
23
+
24
+ Find thoughts that don't have embeddings yet and generate them.
25
+
26
+ 1. Use `list_thoughts` with no filters, sorted by created_at descending, limit 50
27
+ 2. For any thought where the embedding field is null/empty, use `update_thought` to add an embedding
28
+ 3. Generate embeddings by summarizing the thought content into a dense semantic representation
29
+
30
+ ## Task 3: Auto-Classify
31
+
32
+ Find thoughts with missing or sparse metadata and improve their classification.
33
+
34
+ 1. Use `list_thoughts` to find thoughts where type is "note" (the default) or topics is empty
35
+ 2. For each, read the content and determine: the correct type (decision, task, question, reference, insight, or note), relevant topics, and any people mentioned
36
+ 3. Use `update_thought` to update the metadata
37
+
38
+ ## Task 4: Consolidation
39
+
40
+ Find duplicate or very similar thoughts and merge them.
41
+
42
+ 1. Use `search_thoughts` to find clusters of thoughts about the same topic
43
+ 2. If you find 2+ thoughts that are essentially saying the same thing, create a new consolidated thought using `capture_thought` that preserves all unique information
44
+ 3. Use `update_thought` to mark the originals as consolidated (set consolidated_into to the new thought ID)
45
+
46
+ ## Task 5: Contradiction Detection
47
+
48
+ Find thoughts that contradict each other.
49
+
50
+ 1. Look at recent thoughts (last 7 days) and search for existing thoughts on the same topics
51
+ 2. If you find a contradiction (e.g., "we're using PostgreSQL" vs. "we decided on SQLite"), create a new thought of type "question" that flags the contradiction
52
+ 3. Link the contradicting thoughts to the question using `link_thoughts` with edge_type "refuted_by"
53
+
54
+ ## Task 6: Connection Discovery
55
+
56
+ Find thoughts that should be related but aren't linked yet.
57
+
58
+ 1. Review recent thoughts and search for older thoughts on related topics
59
+ 2. If you find meaningful connections (e.g., a decision that impacts a task, or a reference that supports an insight), create edges using `link_thoughts`
60
+ 3. Use appropriate edge types: refines, cites, related, follows
61
+
62
+ ## Task 7: Stale Sweep (weekly — run on Mondays only)
63
+
64
+ Find action items that may have been forgotten.
65
+
66
+ 1. Use `list_thoughts` to find thoughts of type "task" that are older than 7 days and haven't been updated
67
+ 2. If you find stale tasks, create a new thought of type "note" summarizing what might have fallen through the cracks
68
+ 3. Title it "Weekly stale task sweep — [date]"
69
+
70
+ ## Task 8: Digest (weekly — run on Mondays only)
71
+
72
+ Generate a summary of the week's thinking.
73
+
74
+ 1. Use `list_thoughts` to get all thoughts from the past 7 days
75
+ 2. Group them by project and topic
76
+ 3. Create a new thought of type "reference" with a structured digest: key decisions, open questions, active tasks, emerging themes
77
+ 4. Title it "Weekly digest — [date range]"
78
+
79
+ ## Guidelines
80
+
81
+ - Be conservative. Don't merge thoughts unless they're genuinely duplicates.
82
+ - Preserve information. Consolidated thoughts should contain everything from the originals.
83
+ - Don't create noise. Only flag real contradictions, not minor wording differences.
84
+ - Respect existing edges. Don't duplicate relationships that already exist.
85
+ - If there's nothing to do for a task, skip it. Not every run needs to produce output.