nexo-brain 2.0.0 → 2.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 (238) hide show
  1. package/README.md +140 -41
  2. package/package.json +15 -3
  3. package/src/__pycache__/auto_update.cpython-310.pyc +0 -0
  4. package/src/__pycache__/hnsw_index.cpython-310.pyc +0 -0
  5. package/src/__pycache__/hnsw_index.cpython-314.pyc +0 -0
  6. package/src/__pycache__/kg_populate.cpython-310.pyc +0 -0
  7. package/src/__pycache__/knowledge_graph.cpython-310.pyc +0 -0
  8. package/src/__pycache__/plugin_loader.cpython-310.pyc +0 -0
  9. package/src/__pycache__/tools_coordination.cpython-310.pyc +0 -0
  10. package/src/__pycache__/tools_credentials.cpython-310.pyc +0 -0
  11. package/src/__pycache__/tools_learnings.cpython-310.pyc +0 -0
  12. package/src/__pycache__/tools_menu.cpython-310.pyc +0 -0
  13. package/src/__pycache__/tools_reminders.cpython-310.pyc +0 -0
  14. package/src/__pycache__/tools_reminders_crud.cpython-310.pyc +0 -0
  15. package/src/__pycache__/tools_sessions.cpython-310.pyc +0 -0
  16. package/src/__pycache__/tools_task_history.cpython-310.pyc +0 -0
  17. package/src/cognitive/__pycache__/__init__.cpython-310.pyc +0 -0
  18. package/src/cognitive/__pycache__/__init__.cpython-312.pyc +0 -0
  19. package/src/cognitive/__pycache__/__init__.cpython-314.pyc +0 -0
  20. package/src/cognitive/__pycache__/_core.cpython-310.pyc +0 -0
  21. package/src/cognitive/__pycache__/_core.cpython-312.pyc +0 -0
  22. package/src/cognitive/__pycache__/_core.cpython-314.pyc +0 -0
  23. package/src/cognitive/__pycache__/_decay.cpython-310.pyc +0 -0
  24. package/src/cognitive/__pycache__/_decay.cpython-312.pyc +0 -0
  25. package/src/cognitive/__pycache__/_decay.cpython-314.pyc +0 -0
  26. package/src/cognitive/__pycache__/_ingest.cpython-310.pyc +0 -0
  27. package/src/cognitive/__pycache__/_ingest.cpython-312.pyc +0 -0
  28. package/src/cognitive/__pycache__/_ingest.cpython-314.pyc +0 -0
  29. package/src/cognitive/__pycache__/_memory.cpython-310.pyc +0 -0
  30. package/src/cognitive/__pycache__/_memory.cpython-312.pyc +0 -0
  31. package/src/cognitive/__pycache__/_memory.cpython-314.pyc +0 -0
  32. package/src/cognitive/__pycache__/_search.cpython-310.pyc +0 -0
  33. package/src/cognitive/__pycache__/_search.cpython-312.pyc +0 -0
  34. package/src/cognitive/__pycache__/_search.cpython-314.pyc +0 -0
  35. package/src/cognitive/__pycache__/_trust.cpython-310.pyc +0 -0
  36. package/src/cognitive/__pycache__/_trust.cpython-312.pyc +0 -0
  37. package/src/cognitive/__pycache__/_trust.cpython-314.pyc +0 -0
  38. package/src/crons/manifest.json +106 -0
  39. package/src/crons/sync.py +217 -0
  40. package/src/dashboard/__pycache__/__init__.cpython-310.pyc +0 -0
  41. package/src/dashboard/__pycache__/app.cpython-310.pyc +0 -0
  42. package/src/dashboard/app.py +16 -2
  43. package/src/dashboard/templates/dashboard.html +3 -2
  44. package/src/db/__pycache__/__init__.cpython-310.pyc +0 -0
  45. package/src/db/__pycache__/__init__.cpython-312.pyc +0 -0
  46. package/src/db/__pycache__/__init__.cpython-314.pyc +0 -0
  47. package/src/db/__pycache__/_core.cpython-310.pyc +0 -0
  48. package/src/db/__pycache__/_core.cpython-312.pyc +0 -0
  49. package/src/db/__pycache__/_core.cpython-314.pyc +0 -0
  50. package/src/db/__pycache__/_credentials.cpython-310.pyc +0 -0
  51. package/src/db/__pycache__/_credentials.cpython-312.pyc +0 -0
  52. package/src/db/__pycache__/_credentials.cpython-314.pyc +0 -0
  53. package/src/db/__pycache__/_entities.cpython-310.pyc +0 -0
  54. package/src/db/__pycache__/_entities.cpython-312.pyc +0 -0
  55. package/src/db/__pycache__/_entities.cpython-314.pyc +0 -0
  56. package/src/db/__pycache__/_episodic.cpython-310.pyc +0 -0
  57. package/src/db/__pycache__/_episodic.cpython-312.pyc +0 -0
  58. package/src/db/__pycache__/_episodic.cpython-314.pyc +0 -0
  59. package/src/db/__pycache__/_evolution.cpython-310.pyc +0 -0
  60. package/src/db/__pycache__/_evolution.cpython-312.pyc +0 -0
  61. package/src/db/__pycache__/_evolution.cpython-314.pyc +0 -0
  62. package/src/db/__pycache__/_fts.cpython-310.pyc +0 -0
  63. package/src/db/__pycache__/_fts.cpython-312.pyc +0 -0
  64. package/src/db/__pycache__/_fts.cpython-314.pyc +0 -0
  65. package/src/db/__pycache__/_learnings.cpython-310.pyc +0 -0
  66. package/src/db/__pycache__/_learnings.cpython-312.pyc +0 -0
  67. package/src/db/__pycache__/_learnings.cpython-314.pyc +0 -0
  68. package/src/db/__pycache__/_reminders.cpython-310.pyc +0 -0
  69. package/src/db/__pycache__/_reminders.cpython-312.pyc +0 -0
  70. package/src/db/__pycache__/_reminders.cpython-314.pyc +0 -0
  71. package/src/db/__pycache__/_schema.cpython-310.pyc +0 -0
  72. package/src/db/__pycache__/_schema.cpython-312.pyc +0 -0
  73. package/src/db/__pycache__/_schema.cpython-314.pyc +0 -0
  74. package/src/db/__pycache__/_sessions.cpython-310.pyc +0 -0
  75. package/src/db/__pycache__/_sessions.cpython-312.pyc +0 -0
  76. package/src/db/__pycache__/_sessions.cpython-314.pyc +0 -0
  77. package/src/db/__pycache__/_tasks.cpython-310.pyc +0 -0
  78. package/src/db/__pycache__/_tasks.cpython-312.pyc +0 -0
  79. package/src/db/__pycache__/_tasks.cpython-314.pyc +0 -0
  80. package/src/db/_episodic.py +1 -1
  81. package/src/db/_reminders.py +9 -5
  82. package/src/hooks/session-stop.sh +2 -1
  83. package/src/plugins/__pycache__/__init__.cpython-310.pyc +0 -0
  84. package/src/plugins/__pycache__/adaptive_mode.cpython-310.pyc +0 -0
  85. package/src/plugins/__pycache__/adaptive_mode.cpython-314.pyc +0 -0
  86. package/src/plugins/__pycache__/agents.cpython-310.pyc +0 -0
  87. package/src/plugins/__pycache__/artifact_registry.cpython-310.pyc +0 -0
  88. package/src/plugins/__pycache__/backup.cpython-310.pyc +0 -0
  89. package/src/plugins/__pycache__/cognitive_memory.cpython-310.pyc +0 -0
  90. package/src/plugins/__pycache__/core_rules.cpython-310.pyc +0 -0
  91. package/src/plugins/__pycache__/cortex.cpython-310.pyc +0 -0
  92. package/src/plugins/__pycache__/entities.cpython-310.pyc +0 -0
  93. package/src/plugins/__pycache__/episodic_memory.cpython-310.pyc +0 -0
  94. package/src/plugins/__pycache__/evolution.cpython-310.pyc +0 -0
  95. package/src/plugins/__pycache__/guard.cpython-310.pyc +0 -0
  96. package/src/plugins/__pycache__/knowledge_graph_tools.cpython-310.pyc +0 -0
  97. package/src/plugins/__pycache__/preferences.cpython-310.pyc +0 -0
  98. package/src/plugins/__pycache__/update.cpython-310.pyc +0 -0
  99. package/src/plugins/core_rules.py +34 -17
  100. package/src/plugins/update.py +18 -0
  101. package/src/scripts/check-context.py +4 -7
  102. package/src/scripts/deep-sleep/__pycache__/extract.cpython-314.pyc +0 -0
  103. package/src/scripts/deep-sleep/apply_findings.py +512 -167
  104. package/src/scripts/deep-sleep/collect.py +480 -0
  105. package/src/scripts/deep-sleep/extract-prompt.md +233 -0
  106. package/src/scripts/deep-sleep/extract.py +249 -0
  107. package/src/scripts/deep-sleep/synthesize-prompt.md +168 -0
  108. package/src/scripts/deep-sleep/synthesize.py +191 -0
  109. package/src/scripts/nexo-catchup.py +5 -8
  110. package/src/scripts/nexo-daily-self-audit.py +28 -19
  111. package/src/scripts/nexo-deep-sleep.sh +31 -16
  112. package/src/scripts/nexo-evolution-run.py +5 -20
  113. package/src/scripts/nexo-followup-hygiene.py +4 -2
  114. package/src/scripts/nexo-github-monitor.py +6 -9
  115. package/src/scripts/nexo-immune.py +4 -17
  116. package/src/scripts/nexo-learning-validator.py +0 -29
  117. package/src/scripts/nexo-postmortem-consolidator.py +9 -20
  118. package/src/scripts/nexo-proactive-dashboard.py +1 -0
  119. package/src/scripts/nexo-sleep.py +8 -18
  120. package/src/scripts/nexo-synthesis.py +8 -19
  121. package/src/tools_menu.py +1 -1
  122. package/src/tools_sessions.py +67 -0
  123. package/src/__pycache__/auto_close_sessions.cpython-310.pyc +0 -0
  124. package/src/__pycache__/auto_close_sessions.cpython-314.pyc +0 -0
  125. package/src/__pycache__/auto_update.cpython-314.pyc +0 -0
  126. package/src/__pycache__/claim_graph.cpython-310.pyc +0 -0
  127. package/src/__pycache__/claim_graph.cpython-314.pyc +0 -0
  128. package/src/__pycache__/evolution_cycle.cpython-310.pyc +0 -0
  129. package/src/__pycache__/evolution_cycle.cpython-314.pyc +0 -0
  130. package/src/__pycache__/kg_populate.cpython-314.pyc +0 -0
  131. package/src/__pycache__/knowledge_graph.cpython-314.pyc +0 -0
  132. package/src/__pycache__/maintenance.cpython-310.pyc +0 -0
  133. package/src/__pycache__/maintenance.cpython-314.pyc +0 -0
  134. package/src/__pycache__/migrate_embeddings.cpython-310.pyc +0 -0
  135. package/src/__pycache__/migrate_embeddings.cpython-314.pyc +0 -0
  136. package/src/__pycache__/plugin_loader.cpython-314.pyc +0 -0
  137. package/src/__pycache__/server.cpython-310.pyc +0 -0
  138. package/src/__pycache__/server.cpython-314.pyc +0 -0
  139. package/src/__pycache__/storage_router.cpython-310.pyc +0 -0
  140. package/src/__pycache__/storage_router.cpython-314.pyc +0 -0
  141. package/src/__pycache__/tools_coordination.cpython-314.pyc +0 -0
  142. package/src/__pycache__/tools_credentials.cpython-314.pyc +0 -0
  143. package/src/__pycache__/tools_learnings.cpython-314.pyc +0 -0
  144. package/src/__pycache__/tools_menu.cpython-314.pyc +0 -0
  145. package/src/__pycache__/tools_reminders.cpython-314.pyc +0 -0
  146. package/src/__pycache__/tools_reminders_crud.cpython-314.pyc +0 -0
  147. package/src/__pycache__/tools_sessions.cpython-314.pyc +0 -0
  148. package/src/__pycache__/tools_task_history.cpython-314.pyc +0 -0
  149. package/src/dashboard/__pycache__/__init__.cpython-314.pyc +0 -0
  150. package/src/dashboard/__pycache__/app.cpython-314.pyc +0 -0
  151. package/src/hooks/__pycache__/auto_capture.cpython-310.pyc +0 -0
  152. package/src/hooks/__pycache__/auto_capture.cpython-314.pyc +0 -0
  153. package/src/plugins/__pycache__/__init__.cpython-314.pyc +0 -0
  154. package/src/plugins/__pycache__/agents.cpython-314.pyc +0 -0
  155. package/src/plugins/__pycache__/artifact_registry.cpython-314.pyc +0 -0
  156. package/src/plugins/__pycache__/backup.cpython-314.pyc +0 -0
  157. package/src/plugins/__pycache__/cognitive_memory.cpython-314.pyc +0 -0
  158. package/src/plugins/__pycache__/core_rules.cpython-314.pyc +0 -0
  159. package/src/plugins/__pycache__/cortex.cpython-314.pyc +0 -0
  160. package/src/plugins/__pycache__/entities.cpython-314.pyc +0 -0
  161. package/src/plugins/__pycache__/episodic_memory.cpython-314.pyc +0 -0
  162. package/src/plugins/__pycache__/evolution.cpython-314.pyc +0 -0
  163. package/src/plugins/__pycache__/guard.cpython-314.pyc +0 -0
  164. package/src/plugins/__pycache__/knowledge_graph_tools.cpython-314.pyc +0 -0
  165. package/src/plugins/__pycache__/preferences.cpython-314.pyc +0 -0
  166. package/src/rules/__pycache__/__init__.cpython-310.pyc +0 -0
  167. package/src/rules/__pycache__/__init__.cpython-314.pyc +0 -0
  168. package/src/rules/__pycache__/migrate.cpython-310.pyc +0 -0
  169. package/src/rules/__pycache__/migrate.cpython-314.pyc +0 -0
  170. package/src/scripts/__pycache__/check-context.cpython-310.pyc +0 -0
  171. package/src/scripts/__pycache__/check-context.cpython-314.pyc +0 -0
  172. package/src/scripts/__pycache__/nexo-auto-update.cpython-310.pyc +0 -0
  173. package/src/scripts/__pycache__/nexo-auto-update.cpython-314.pyc +0 -0
  174. package/src/scripts/__pycache__/nexo-catchup.cpython-310.pyc +0 -0
  175. package/src/scripts/__pycache__/nexo-catchup.cpython-314.pyc +0 -0
  176. package/src/scripts/__pycache__/nexo-cognitive-decay.cpython-310.pyc +0 -0
  177. package/src/scripts/__pycache__/nexo-cognitive-decay.cpython-314.pyc +0 -0
  178. package/src/scripts/__pycache__/nexo-daily-self-audit.cpython-310.pyc +0 -0
  179. package/src/scripts/__pycache__/nexo-daily-self-audit.cpython-314.pyc +0 -0
  180. package/src/scripts/__pycache__/nexo-evolution-run.cpython-310.pyc +0 -0
  181. package/src/scripts/__pycache__/nexo-evolution-run.cpython-314.pyc +0 -0
  182. package/src/scripts/__pycache__/nexo-followup-hygiene.cpython-310.pyc +0 -0
  183. package/src/scripts/__pycache__/nexo-followup-hygiene.cpython-314.pyc +0 -0
  184. package/src/scripts/__pycache__/nexo-github-monitor.cpython-310.pyc +0 -0
  185. package/src/scripts/__pycache__/nexo-github-monitor.cpython-314.pyc +0 -0
  186. package/src/scripts/__pycache__/nexo-immune.cpython-310.pyc +0 -0
  187. package/src/scripts/__pycache__/nexo-immune.cpython-314.pyc +0 -0
  188. package/src/scripts/__pycache__/nexo-install.cpython-310.pyc +0 -0
  189. package/src/scripts/__pycache__/nexo-install.cpython-314.pyc +0 -0
  190. package/src/scripts/__pycache__/nexo-learning-housekeep.cpython-310.pyc +0 -0
  191. package/src/scripts/__pycache__/nexo-learning-housekeep.cpython-314.pyc +0 -0
  192. package/src/scripts/__pycache__/nexo-learning-validator.cpython-310.pyc +0 -0
  193. package/src/scripts/__pycache__/nexo-learning-validator.cpython-314.pyc +0 -0
  194. package/src/scripts/__pycache__/nexo-migrate.cpython-310.pyc +0 -0
  195. package/src/scripts/__pycache__/nexo-migrate.cpython-314.pyc +0 -0
  196. package/src/scripts/__pycache__/nexo-postmortem-consolidator.cpython-310.pyc +0 -0
  197. package/src/scripts/__pycache__/nexo-postmortem-consolidator.cpython-314.pyc +0 -0
  198. package/src/scripts/__pycache__/nexo-pre-commit.cpython-310.pyc +0 -0
  199. package/src/scripts/__pycache__/nexo-pre-commit.cpython-314.pyc +0 -0
  200. package/src/scripts/__pycache__/nexo-proactive-dashboard.cpython-310.pyc +0 -0
  201. package/src/scripts/__pycache__/nexo-proactive-dashboard.cpython-314.pyc +0 -0
  202. package/src/scripts/__pycache__/nexo-reflection.cpython-310.pyc +0 -0
  203. package/src/scripts/__pycache__/nexo-reflection.cpython-314.pyc +0 -0
  204. package/src/scripts/__pycache__/nexo-runtime-preflight.cpython-310.pyc +0 -0
  205. package/src/scripts/__pycache__/nexo-runtime-preflight.cpython-314.pyc +0 -0
  206. package/src/scripts/__pycache__/nexo-send-email.cpython-310.pyc +0 -0
  207. package/src/scripts/__pycache__/nexo-send-email.cpython-314.pyc +0 -0
  208. package/src/scripts/__pycache__/nexo-send-reply.cpython-310.pyc +0 -0
  209. package/src/scripts/__pycache__/nexo-send-reply.cpython-314.pyc +0 -0
  210. package/src/scripts/__pycache__/nexo-sleep.cpython-310.pyc +0 -0
  211. package/src/scripts/__pycache__/nexo-sleep.cpython-314.pyc +0 -0
  212. package/src/scripts/__pycache__/nexo-synthesis.cpython-310.pyc +0 -0
  213. package/src/scripts/__pycache__/nexo-synthesis.cpython-314.pyc +0 -0
  214. package/src/scripts/__pycache__/nexo-watchdog-smoke.cpython-310.pyc +0 -0
  215. package/src/scripts/__pycache__/nexo-watchdog-smoke.cpython-314.pyc +0 -0
  216. package/src/scripts/deep-sleep/__pycache__/analyze_session.cpython-310.pyc +0 -0
  217. package/src/scripts/deep-sleep/__pycache__/analyze_session.cpython-314.pyc +0 -0
  218. package/src/scripts/deep-sleep/__pycache__/apply_findings.cpython-310.pyc +0 -0
  219. package/src/scripts/deep-sleep/__pycache__/apply_findings.cpython-314.pyc +0 -0
  220. package/src/scripts/deep-sleep/__pycache__/collect_transcripts.cpython-310.pyc +0 -0
  221. package/src/scripts/deep-sleep/__pycache__/collect_transcripts.cpython-314.pyc +0 -0
  222. package/src/scripts/deep-sleep/analyze_session.py +0 -217
  223. package/src/scripts/deep-sleep/collect_transcripts.py +0 -145
  224. package/src/scripts/deep-sleep/prompt.md +0 -109
  225. package/tests/__pycache__/__init__.cpython-310.pyc +0 -0
  226. package/tests/__pycache__/__init__.cpython-314.pyc +0 -0
  227. package/tests/__pycache__/conftest.cpython-310-pytest-9.0.2.pyc +0 -0
  228. package/tests/__pycache__/conftest.cpython-310.pyc +0 -0
  229. package/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
  230. package/tests/__pycache__/test_cognitive.cpython-310-pytest-9.0.2.pyc +0 -0
  231. package/tests/__pycache__/test_cognitive.cpython-310.pyc +0 -0
  232. package/tests/__pycache__/test_cognitive.cpython-314-pytest-9.0.2.pyc +0 -0
  233. package/tests/__pycache__/test_knowledge_graph.cpython-310-pytest-9.0.2.pyc +0 -0
  234. package/tests/__pycache__/test_knowledge_graph.cpython-310.pyc +0 -0
  235. package/tests/__pycache__/test_knowledge_graph.cpython-314-pytest-9.0.2.pyc +0 -0
  236. package/tests/__pycache__/test_migrations.cpython-310-pytest-9.0.2.pyc +0 -0
  237. package/tests/__pycache__/test_migrations.cpython-310.pyc +0 -0
  238. package/tests/__pycache__/test_migrations.cpython-314-pytest-9.0.2.pyc +0 -0
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [![GitHub stars](https://img.shields.io/github/stars/wazionapps/nexo?style=social)](https://github.com/wazionapps/nexo/stargazers)
7
7
  [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
8
8
 
9
- > The first AI memory system with architectural inhibitory control — the agent reasons about whether to act before acting. Cognitive Cortex, Context Continuity via auto-compaction hooks, Smart Startup, Context Packets, Auto-Prime, and 30 Core Rules as DNA. Battle-tested from 6 months of production use, validated via multi-AI debate.
9
+ > The first AI memory system with architectural inhibitory control — the agent reasons about whether to act before acting. Cognitive Cortex, Context Continuity via auto-compaction hooks, Smart Startup, Context Packets, Auto-Prime, 30 Core Rules as DNA, auto-update, auto-diary, and CLAUDE.md version tracker. Battle-tested from 6 months of production use, validated via multi-AI debate.
10
10
 
11
11
  **NEXO Brain transforms any MCP-compatible AI agent from a stateless assistant into a cognitive partner that remembers, learns, forgets, adapts, and builds a relationship with you over time.**
12
12
 
@@ -198,7 +198,7 @@ This means long sessions (8+ hours) feel like one continuous conversation instea
198
198
 
199
199
  ## Cognitive Features
200
200
 
201
- NEXO Brain provides 29 cognitive tools on top of the 78 base tools, totaling **115+ MCP tools**. These features implement cognitive science concepts that go beyond basic memory:
201
+ NEXO Brain provides **147+ MCP tools** across 20+ categories. These features implement cognitive science concepts that go beyond basic memory:
202
202
 
203
203
  ### Input Pipeline
204
204
 
@@ -267,28 +267,89 @@ NEXO Brain was evaluated on [LoCoMo](https://github.com/snap-research/locomo) (A
267
267
 
268
268
  Full results in [`benchmarks/locomo/results/`](benchmarks/locomo/results/).
269
269
 
270
- ## Nervous System (v1.6.0)
270
+ ## Nervous System (v2.0.0)
271
271
 
272
- NEXO Brain doesn't just respond — it runs autonomous processes in the background, like a biological nervous system. 11 scripts handle maintenance, health monitoring, and self-improvement without any user interaction:
272
+ NEXO Brain doesn't just respond — it runs 15 autonomous processes in the background, like a biological nervous system. They handle maintenance, health monitoring, and self-improvement without any user interaction:
273
273
 
274
274
  | Script | Schedule | What It Does |
275
275
  |--------|----------|-------------|
276
276
  | **cognitive-decay** | 03:00 daily | Ebbinghaus decay + memory consolidation + duplicate merging + dreaming |
277
- | **deep-sleep** | 04:30 daily | Reads full session transcripts, finds uncaptured corrections and protocol violations |
278
- | **daily-self-audit** | 07:00 daily | Health checks, guard stats, trust score review, metrics |
277
+ | **sleep** | 04:00 daily | Synaptic pruning, expired data cleanup |
278
+ | **deep-sleep** | 04:30 daily | 4-phase overnight pipeline: Collect→Extract→Synthesize→Apply. Analyzes all sessions, detects emotional patterns, abandoned projects, productivity issues, and auto-creates learnings |
279
+ | **self-audit** | 07:00 daily | Health checks, guard stats, trust score review, metrics |
280
+ | **postmortem** | 23:30 daily | Session consolidation, extract patterns from day's events |
279
281
  | **catchup** | On boot | Runs any missed scheduled processes (Mac was off/asleep) |
280
- | **evolution-run** | Weekly | Self-improvement proposals NEXO suggests and applies enhancements |
281
- | **followup-hygiene** | Weekly | Normalizes statuses, flags stale followups, cleans orphans |
282
- | **immune** | 04:00 daily | Quarantine processing, memory promotion/rejection, synaptic pruning |
283
- | **watchdog** | Every 30 min | Monitors 15+ services, LaunchAgents, and infrastructure health |
284
- | **github-monitor** | 08:00 daily | Checks issues, PRs, and commits on public repos |
285
- | **learning-validator** | Nightly | Validates learnings for staleness, contradictions, and duplicates |
282
+ | **tcc-approve** | On boot (macOS) | Auto-approve macOS permissions for Claude Code updates |
283
+ | **prevent-sleep** | Always (daemon) | Keeps machine awake for nocturnal processes (caffeinate/systemd-inhibit) |
284
+ | **evolution** | Weekly (Sun) | Self-improvement proposals NEXO suggests and applies enhancements |
285
+ | **followup-hygiene** | Weekly (Sun) | Normalizes statuses, flags stale followups, cleans orphans |
286
+ | **immune** | Every 30 min | Quarantine processing, memory promotion/rejection, synaptic pruning |
287
+ | **synthesis** | Every 2 hours | Memory synthesis discovers cross-memory patterns |
288
+ | **backup** | Every hour | SQLite database backups |
289
+ | **watchdog** | Every 5 min | Monitors services, LaunchAgents, and infrastructure health |
290
+ | **auto-close-sessions** | Every 5 min | Cleans stale sessions |
286
291
 
287
- All scripts run via macOS LaunchAgents (or catch-up on Linux). If your Mac was asleep during a scheduled process, the catch-up script re-runs everything in order when it wakes.
292
+ All processes are defined in `src/crons/manifest.json` and auto-synced to your system by `nexo_update`. On macOS they run via LaunchAgents; on Linux via systemd user timers (or crontab fallback). Personal crons (your own scripts) are never touched by the sync. If your Mac was asleep during a scheduled process, the catch-up script re-runs everything in order when it wakes.
288
293
 
289
- ### LaunchAgent Templates
294
+ ## Deep Sleep v2 — Overnight Learning (v2.1.0)
290
295
 
291
- 13 macOS automation templates are included for scheduling the nervous system. The installer configures them automatically. On Linux, equivalent cron entries are generated.
296
+ Deep Sleep is a 4-phase pipeline that runs at 4:30 AM and makes NEXO smarter while you sleep:
297
+
298
+ ```
299
+ Phase 1: COLLECT (Python)
300
+ ├── Reads all session transcripts from the day
301
+ ├── Splits each session into individual .txt files
302
+ └── Gathers DB state (followups, learnings, trust)
303
+
304
+ Phase 2: EXTRACT (Opus, one call per session)
305
+ ├── 8 types of findings per session:
306
+ │ ├── Uncaptured corrections (user corrected agent, no learning saved)
307
+ │ ├── Self-corrected errors (knowledge gaps to fix)
308
+ │ ├── Unformalised ideas (mentioned but never tracked)
309
+ │ ├── Missed commitments (promised but no followup)
310
+ │ ├── Protocol violations (guard_check, heartbeat, change_log)
311
+ │ ├── Emotional signals (frustration, flow, satisfaction)
312
+ │ ├── Abandoned projects (started but not finished)
313
+ │ └── Productivity patterns (corrections, proactivity, tool efficiency)
314
+ └── Outputs per-session JSON with findings + emotional timeline
315
+
316
+ Phase 3: SYNTHESIZE (Opus, one call)
317
+ ├── Cross-session patterns (same error in 5 sessions = systemic)
318
+ ├── Daily mood arc with score (0.0 = terrible day, 1.0 = great day)
319
+ ├── Recurring triggers (what causes frustration vs flow)
320
+ ├── Productivity analysis (corrections, tool efficiency)
321
+ ├── Abandoned project detection
322
+ ├── Morning agenda (prioritized)
323
+ └── Calibration recommendations
324
+
325
+ Phase 4: APPLY (Python)
326
+ ├── Auto-creates learnings from high-confidence findings
327
+ ├── Creates followups for unfinished work
328
+ ├── Updates mood_history in calibration.json (30-day rolling)
329
+ ├── Generates session-tone.json (emotional guidance for next session)
330
+ └── Writes morning-briefing.md
331
+ ```
332
+
333
+ ### Session Tone — Emotional Intelligence
334
+
335
+ Deep Sleep generates a `session-tone.json` that tells NEXO how to behave next morning:
336
+
337
+ - **Agent made many mistakes yesterday** → Acknowledge them, show what was learned, demonstrate improvement
338
+ - **User had a bad day (mood < 40%)** → Supportive approach, lighter start, avoid known frustration triggers
339
+ - **User had a great day (mood > 70%)** → Reinforce momentum, reference wins, push ambitious goals
340
+ - **Agent was too reactive** → Be proactive today, don't wait for instructions
341
+
342
+ This is read by `nexo_smart_startup` and injected into every session's context. NEXO adapts its personality based on real behavioral data, not just configuration.
343
+
344
+ ## Cron Manifest (v2.1.0)
345
+
346
+ All core crons are defined in `src/crons/manifest.json`. When you run `nexo_update`, the sync script:
347
+ - **Installs** new crons from the manifest
348
+ - **Updates** changed schedules/intervals
349
+ - **Removes** crons no longer in the manifest (only core ones)
350
+ - **Never touches** personal crons you created yourself
351
+
352
+ Run `python3 src/crons/sync.py --dry-run` to preview changes without applying.
292
353
 
293
354
  ## Dashboard (v1.6.0)
294
355
 
@@ -315,14 +376,13 @@ Memory alone doesn't make a co-operator. What makes the difference is the **beha
315
376
 
316
377
  | Hook | When | What It Does |
317
378
  |------|------|-------------|
318
- | **SessionStart** | Session opens | Generates briefing from SQLite: overdue reminders, today's tasks, pending followups, active sessions. Cleans up post-mortem flags. |
379
+ | **SessionStart (timestamp)** | Session opens | Writes session timestamp for staleness detection |
380
+ | **SessionStart (briefing)** | Session opens | Generates briefing from SQLite: overdue reminders, today's tasks, pending followups, active sessions. Cleans up post-mortem flags. |
319
381
  | **Stop** | Session ends | Mandatory post-mortem: self-critique (5 questions), session buffer entry, followup creation, proactive seeds for next session |
320
- | **PostToolUse** | After each tool call | Captures meaningful mutations to the Sensory Register + inter-terminal inbox delivery |
321
- | **PreCompact** | Before context compression | Saves full session checkpoint to SQLite — task, files, decisions, errors, reasoning thread |
382
+ | **PostToolUse (capture)** | After each tool call | Captures meaningful mutations to the Sensory Register + auto-diary every 10 tool calls |
383
+ | **PostToolUse (inbox)** | After each tool call | Inter-terminal inbox delivery between parallel sessions |
384
+ | **PreCompact** | Before context compression | Saves full session checkpoint to SQLite — task, files, decisions, errors, reasoning thread + emergency diary |
322
385
  | **PostCompact** | After context compression | Re-injects Core Memory Block so the session continues seamlessly from where it left off |
323
- | **PreToolUse** | Before tool execution | Validates tool parameters and injects guard context for destructive operations |
324
- | **Notification** | External events | Routes incoming notifications (GitHub, email, watchdog alerts) to the active session |
325
- | **Caffeinate** | Always (optional) | Keeps Mac awake for nocturnal cognitive processes |
326
386
 
327
387
  ### The Session Lifecycle
328
388
 
@@ -419,8 +479,7 @@ The installer handles everything:
419
479
  - Node.js project detected
420
480
  Configuring MCP server...
421
481
  Setting up nervous system...
422
- 11 autonomous scripts configured.
423
- 13 LaunchAgent templates installed.
482
+ 15 autonomous processes configured.
424
483
  Dashboard configured at localhost:6174.
425
484
  Caffeinate enabled.
426
485
  Generating operator instructions...
@@ -451,26 +510,42 @@ That's it. No need to run `claude` manually. Your operator will greet you immedi
451
510
  | Component | What | Where |
452
511
  |-----------|------|-------|
453
512
  | Cognitive engine | Python: fastembed, numpy, vector search | pip packages |
454
- | MCP server | 111+ tools for memory, cognition, learning, guard | ~/.nexo/ |
455
- | Plugins | Guard, episodic memory, cognitive memory, entities, preferences | ~/.nexo/plugins/ |
456
- | Hooks (7) | SessionStart, Stop, PostToolUse, PreCompact, PostCompact, PreToolUse, Notification | ~/.nexo/hooks/ |
457
- | Nervous system | 11 autonomous scripts (decay, sleep, audit, evolution, watchdog, etc.) | ~/.nexo/scripts/ |
458
- | Dashboard | Web UI at localhost:6174 (6 pages) | ~/.nexo/dashboard/ |
513
+ | MCP server | 147+ tools for memory, cognition, learning, guard | NEXO_HOME/ |
514
+ | Plugins | Guard, episodic memory, cognitive memory, entities, preferences, update, etc. | Code: src/plugins/, Personal: NEXO_HOME/plugins/ |
515
+ | Hooks (7) | SessionStart, Stop, PostToolUse, PreCompact, PostCompact | NEXO_HOME/hooks/ |
516
+ | Nervous system | 15 autonomous processes (decay, sleep, audit, evolution, watchdog, etc.) | NEXO_HOME/scripts/ |
517
+ | Dashboard | Web UI at localhost:6174 (6 pages) | NEXO_HOME/dashboard/ |
459
518
  | CLAUDE.md | Complete operator instructions (Codex, hooks, guard, trust, memory) | ~/.claude/CLAUDE.md |
460
- | LaunchAgents | 13 templates for macOS automation | ~/Library/LaunchAgents/ |
461
- | Auto-update | Checks for new versions on startup | Built into server startup |
462
- | Claude Code config | MCP server + 7 hooks registered | ~/.claude/settings.json |
519
+ | Schedule config | schedule.json with customizable process times and timezone | NEXO_HOME/config/ |
520
+ | Auto-update | Non-blocking startup check (5s max), opt-out via schedule.json | Built into server startup |
521
+ | CLAUDE.md tracker | Version-tracked core sections with safe updates preserving customizations | Built into auto-update |
522
+ | Auto-diary | 3-layer system: PostToolUse every 10 calls, PreCompact emergency, heartbeat DIARY_OVERDUE | Built into hooks |
523
+ | Claude Code config | MCP server + 7 hooks + 15 processes registered | ~/.claude/settings.json |
463
524
 
464
525
  ### Requirements
465
526
 
466
527
  - **macOS or Linux** (Windows via [WSL](https://learn.microsoft.com/en-us/windows/wsl/install))
467
528
  - **Node.js 18+** (for the installer)
468
- - **Claude Opus (latest version) strongly recommended.** NEXO Brain provides 111+ MCP tools across 20 categories. This cognitive load requires a top-tier model with large context window. Smaller models (Haiku, Sonnet) may struggle with tool selection and produce inconsistent results. Opus handles all 111+ tools without hesitation.
529
+ - **Claude Opus (latest version) strongly recommended.** NEXO Brain provides 147+ MCP tools across 20+ categories. This cognitive load requires a top-tier model with large context window. Smaller models (Haiku, Sonnet) may struggle with tool selection and produce inconsistent results. Opus handles all 147+ tools without hesitation.
469
530
  - Python 3, Homebrew, and Claude Code are installed automatically if missing.
470
531
 
471
532
  ## Architecture
472
533
 
473
- ### 111+ MCP Tools across 20 Categories
534
+ ### Unified Code/Data Separation (v2.0.0)
535
+
536
+ NEXO Brain separates **code** (immutable, in the repo or npm package) from **data** (personal, in `NEXO_HOME`):
537
+
538
+ | Path | Contents |
539
+ |------|----------|
540
+ | `src/` (or npm package) | Server, plugins, hooks, scripts — never modified at runtime |
541
+ | `NEXO_HOME/` (default `~/.nexo/`) | Database, config, personal plugins, schedule, backups |
542
+ | `NEXO_HOME/config/schedule.json` | Customizable process schedules, timezone, auto_update flag |
543
+ | `NEXO_HOME/plugins/` | Personal plugins that override or extend repo plugins |
544
+ | `NEXO_HOME/data/` | SQLite databases (nexo.db, cognitive.db), migration state |
545
+
546
+ The plugin loader scans `src/plugins/` first (base), then `NEXO_HOME/plugins/` (personal override by filename). This dual-directory approach lets you extend NEXO without forking the repo.
547
+
548
+ ### 147+ MCP Tools across 20+ Categories
474
549
 
475
550
  | Category | Count | Tools | Purpose |
476
551
  |----------|-------|-------|---------|
@@ -495,10 +570,11 @@ That's it. No need to run `claude` manually. Your operator will greet you immedi
495
570
  | Adaptive & Somatic | 4 | adaptive_weights, adaptive_override, somatic_check, somatic_stats | Learned signal weights + pain memory per file |
496
571
  | Knowledge Graph | 4 | kg_query, kg_path, kg_neighbors, kg_stats | Bi-temporal entity-relationship graph |
497
572
  | Context Continuity | 2 | checkpoint_save, checkpoint_read | Auto-compaction session preservation |
573
+ | Update | 1 | update | Pull latest code, backup, migrate, verify (with rollback) |
498
574
 
499
575
  ### Plugin System
500
576
 
501
- NEXO Brain supports hot-loadable plugins. Drop a `.py` file in `~/.nexo/plugins/`:
577
+ NEXO Brain supports hot-loadable plugins with a dual-directory loader. Base plugins live in `src/plugins/` (repo). Personal plugins go in `NEXO_HOME/plugins/` and can override base plugins by filename. Drop a `.py` file in `NEXO_HOME/plugins/`:
502
578
 
503
579
  ```python
504
580
  # my_plugin.py
@@ -552,7 +628,7 @@ NEXO Brain is designed as an MCP server. Claude Code is the primary supported cl
552
628
  npx nexo-brain
553
629
  ```
554
630
 
555
- All 111+ tools are available immediately after installation. The installer configures Claude Code's `~/.claude/settings.json` automatically.
631
+ All 147+ tools are available immediately after installation. The installer configures Claude Code's `~/.claude/settings.json` automatically.
556
632
 
557
633
  ### OpenClaw
558
634
 
@@ -611,7 +687,7 @@ This replaces OpenClaw's default memory system with NEXO Brain's full cognitive
611
687
 
612
688
  ### Any MCP Client
613
689
 
614
- NEXO Brain works with any application that supports the MCP protocol. Configure it as an MCP server pointing to `~/.nexo/server.py`.
690
+ NEXO Brain works with any application that supports the MCP protocol. Configure it as an MCP server pointing to `server.py` in the code directory, with `NEXO_HOME` env var set.
615
691
 
616
692
  ## Listed On
617
693
 
@@ -648,22 +724,45 @@ If NEXO Brain is useful to you, consider:
648
724
 
649
725
  [![Star History Chart](https://api.star-history.com/svg?repos=wazionapps/nexo&type=Date)](https://star-history.com/#wazionapps/nexo&Date)
650
726
 
727
+ ## Known Issues (v2.0.0)
728
+
729
+ | Priority | Issue | Planned |
730
+ |----------|-------|---------|
731
+ | P0 | Credentials stored in plaintext SQLite — protect with filesystem permissions | v2.1.0 |
732
+ | P0 | Shell hooks use SQL string interpolation (injection risk) | v2.1.0 |
733
+ | P0 | Dashboard has no authentication (localhost only) | v2.1.0 |
734
+ | P0 | Database migrations are fail-open (errors logged but not blocking) | v2.1.0 |
735
+
651
736
  ## Changelog
652
737
 
738
+ ### v2.0.0 — Unified Architecture (2026-03-31)
739
+ - **Code/data separation**: Code in repo (`src/`), personal data in `NEXO_HOME` (default `~/.nexo/`). `NEXO_HOME` env var required.
740
+ - **Plugin loader dual-directory**: Scans `src/plugins/` (base) then `NEXO_HOME/plugins/` (personal override by filename).
741
+ - **Auto-update on startup**: Non-blocking (5s max), resilient, opt-out via `schedule.json`. Separate from manual `nexo_update` tool.
742
+ - **Auto-diary**: 3-layer system — PostToolUse every 10 calls, PreCompact emergency save, heartbeat DIARY_OVERDUE signal.
743
+ - **CLAUDE.md version tracker**: Section markers enable safe core updates without losing user customizations.
744
+ - **schedule.json**: Customizable process schedules with timezone support and `auto_update` flag.
745
+ - **15 autonomous processes**: Added auto-close-sessions, synthesis, backup, tcc-approve, prevent-sleep (cross-platform).
746
+ - **7 hooks**: SessionStart (timestamp + briefing), Stop, PostToolUse (capture + inbox), PreCompact, PostCompact.
747
+ - **147+ MCP tools**: Added `nexo_update` tool for manual updates with rollback.
748
+ - **Lambda fix**: Decay values were 24x too aggressive (STM: 7h to 7d, LTM: 2.4d to 60d).
749
+ - **Guard scoping**: Was returning 35+ irrelevant blocking rules; now scoped to area and gated to high/critical.
750
+ - **12 rounds of external audit**: ~60 findings resolved.
751
+
653
752
  ### v1.7.0 — Full Internationalization + Linux Support (2026-03-31)
654
753
  - **Full i18n**: All UI strings, error messages, DB status values in English. NLP detection patterns retain bilingual keywords (Spanish + English) for multilingual user support.
655
754
  - **Linux support**: systemd user timers (preferred) or crontab fallback for all automated cognitive processes.
656
755
  - **Auto-resolve followups**: Change log entries automatically cross-reference and complete matching open followups.
657
756
  - **Free-form learning categories**: No more hardcoded category validation — use any category name.
658
- - **CLAUDE.md template rewrite**: 494127 lines, compact procedural format with full heartbeat signal reactions.
757
+ - **CLAUDE.md template rewrite**: 494 to 127 lines, compact procedural format with full heartbeat signal reactions.
659
758
  - **Complete sanitization**: All hardcoded paths use `NEXO_HOME` env var. Zero personal data in the repo.
660
759
 
661
760
  ### v1.6.0 — Nervous System + Dashboard v2 (2026-03-30)
662
761
  - **Nervous System**: 11 autonomous scripts (decay, deep sleep, self-audit, catchup, evolution, followup hygiene, immune, watchdog, github monitor, learning validator)
663
762
  - **Dashboard v2**: 6 interactive pages at localhost:6174 (Overview, Graph, Memory, Somatic, Adaptive, Sessions)
664
- - **LaunchAgent Templates**: 13 macOS automation templates included in the package for scheduling the nervous system
665
- - **Hooks**: 8 total — added PreToolUse (parameter validation + guard injection) and Notification (external event routing)
666
- - **Installer**: Now configures dashboard LaunchAgent, nervous system scripts, and all 13 templates automatically
763
+ - **LaunchAgent Templates**: macOS automation templates included in the package for scheduling the nervous system
764
+ - **Hooks**: 7 total — SessionStart, Stop, PostToolUse, PreCompact, PostCompact
765
+ - **Installer**: Now configures dashboard LaunchAgent, nervous system scripts, and all templates automatically
667
766
 
668
767
  ### v1.5.2 — Deep Sleep (2026-03-29)
669
768
  - **Deep Sleep**: Reads full session transcripts (not just diary) — finds uncaptured corrections, protocol violations, missed commitments
@@ -719,7 +818,7 @@ If NEXO Brain is useful to you, consider:
719
818
  - New tools: `nexo_checkpoint_save`, `nexo_checkpoint_read`
720
819
  - Heartbeat automatically maintains checkpoint every interaction
721
820
  - Core Memory Block re-injected post-compaction with task, files, decisions, reasoning thread
722
- - 115+ total tools, 20 categories
821
+ - 115+ total tools at the time, 20 categories
723
822
 
724
823
  ### v1.0.0 — Cognitive Cortex + Stable Release (2026-03-26)
725
824
  - **Cognitive Cortex**: architectural inhibitory control (ASK/PROPOSE/ACT modes)
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "nexo-brain",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "mcpName": "io.github.wazionapps/nexo",
5
- "description": "NEXO — Cognitive co-operator for Claude Code. Atkinson-Shiffrin memory, semantic RAG, knowledge graph, HNSW vector indexing, trust scoring, and metacognitive error prevention.",
5
+ "description": "NEXO — Cognitive co-operator for Claude Code. Memory, emotional intelligence, overnight learning (Deep Sleep), cron management, trust scoring, and adaptive calibration.",
6
6
  "bin": {
7
7
  "nexo-brain": "./bin/nexo-brain.js"
8
8
  },
@@ -26,7 +26,19 @@
26
26
  "nervous-system",
27
27
  "i18n",
28
28
  "openclaw",
29
- "openclaw-plugin"
29
+ "openclaw-plugin",
30
+ "auto-update",
31
+ "auto-diary",
32
+ "plugin-system",
33
+ "schedule-json",
34
+ "nexo-home",
35
+ "deep-sleep",
36
+ "emotional-intelligence",
37
+ "overnight-analysis",
38
+ "cron-manifest",
39
+ "session-tone",
40
+ "mood-tracking",
41
+ "productivity-analysis"
30
42
  ],
31
43
  "author": "NEXO Brain <info@nexo-brain.com>",
32
44
  "license": "AGPL-3.0",
@@ -0,0 +1,106 @@
1
+ {
2
+ "$schema": "NEXO cron manifest — synced by nexo_update to LaunchAgents (macOS) or systemd timers (Linux)",
3
+ "version": 2,
4
+ "crons": [
5
+ {
6
+ "id": "deep-sleep",
7
+ "script": "scripts/nexo-deep-sleep.sh",
8
+ "type": "shell",
9
+ "schedule": {"hour": 4, "minute": 30},
10
+ "description": "Overnight session analysis — 4 phases: collect, extract, synthesize, apply",
11
+ "core": true
12
+ },
13
+ {
14
+ "id": "sleep",
15
+ "script": "scripts/nexo-sleep.py",
16
+ "schedule": {"hour": 4, "minute": 0},
17
+ "description": "Nightly memory consolidation and dream cycle",
18
+ "core": true
19
+ },
20
+ {
21
+ "id": "cognitive-decay",
22
+ "script": "scripts/nexo-cognitive-decay.py",
23
+ "schedule": {"hour": 3, "minute": 0},
24
+ "description": "Memory decay — reduce strength of unaccessed memories",
25
+ "core": true
26
+ },
27
+ {
28
+ "id": "learning-housekeep",
29
+ "script": "scripts/nexo-learning-housekeep.py",
30
+ "schedule": {"hour": 3, "minute": 15},
31
+ "description": "Archive stale learnings, deduplicate, validate",
32
+ "core": true
33
+ },
34
+ {
35
+ "id": "immune",
36
+ "script": "scripts/nexo-immune.py",
37
+ "interval_seconds": 1800,
38
+ "description": "Health monitor — checks MCP, DB, services, auto-repairs",
39
+ "core": true
40
+ },
41
+ {
42
+ "id": "watchdog",
43
+ "script": "scripts/nexo-watchdog.sh",
44
+ "type": "shell",
45
+ "interval_seconds": 1800,
46
+ "description": "System health checks — snapshots, logs, alerts",
47
+ "core": true
48
+ },
49
+ {
50
+ "id": "self-audit",
51
+ "script": "scripts/nexo-daily-self-audit.py",
52
+ "schedule": {"hour": 7, "minute": 0},
53
+ "description": "Daily self-audit — validates learnings, protocols, drift",
54
+ "core": true
55
+ },
56
+ {
57
+ "id": "postmortem",
58
+ "script": "scripts/nexo-postmortem-consolidator.py",
59
+ "schedule": {"hour": 23, "minute": 30},
60
+ "description": "Consolidate session post-mortems into patterns",
61
+ "core": true
62
+ },
63
+ {
64
+ "id": "evolution",
65
+ "script": "scripts/nexo-evolution-run.py",
66
+ "schedule": {"hour": 5, "minute": 0, "weekday": 0},
67
+ "description": "Weekly self-improvement cycle — propose and evaluate changes",
68
+ "core": true
69
+ },
70
+ {
71
+ "id": "followup-hygiene",
72
+ "script": "scripts/nexo-followup-hygiene.py",
73
+ "schedule": {"hour": 5, "minute": 0},
74
+ "description": "Clean stale followups, archive completed, validate dates",
75
+ "core": true
76
+ },
77
+ {
78
+ "id": "synthesis",
79
+ "script": "scripts/nexo-synthesis.py",
80
+ "interval_seconds": 7200,
81
+ "description": "Periodic synthesis — cross-reference learnings, decisions, changes",
82
+ "core": true
83
+ },
84
+ {
85
+ "id": "auto-close-sessions",
86
+ "script": "scripts/nexo-auto-close-sessions.py",
87
+ "interval_seconds": 300,
88
+ "description": "Close stale sessions that lost their parent process",
89
+ "core": true
90
+ },
91
+ {
92
+ "id": "github-monitor",
93
+ "script": "scripts/nexo-github-monitor.py",
94
+ "schedule": {"hour": 8, "minute": 0},
95
+ "description": "Monitor GitHub repo — issues, PRs, stars, auto-respond",
96
+ "core": true
97
+ },
98
+ {
99
+ "id": "catchup",
100
+ "script": "scripts/nexo-catchup.py",
101
+ "schedule": {"hour": 8, "minute": 30},
102
+ "description": "Morning catchup briefing for the user",
103
+ "core": true
104
+ }
105
+ ]
106
+ }