nexo-brain 2.0.0 → 2.2.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.
- package/README.md +143 -44
- package/bin/nexo-brain.js +53 -26
- package/package.json +15 -3
- package/scripts/migrate-to-unified 2.sh +813 -0
- package/scripts/migrate-v1.5-to-v1.6 2.py +778 -0
- package/scripts/migrate-v1.7-to-v1.8 2.py +214 -0
- package/scripts/pre-commit-check 2.sh +55 -0
- package/src/__pycache__/auto_update.cpython-310.pyc +0 -0
- package/src/__pycache__/hnsw_index.cpython-310.pyc +0 -0
- package/src/__pycache__/kg_populate.cpython-310.pyc +0 -0
- package/src/__pycache__/knowledge_graph.cpython-310.pyc +0 -0
- package/src/__pycache__/plugin_loader.cpython-310.pyc +0 -0
- package/src/__pycache__/tools_coordination.cpython-310.pyc +0 -0
- package/src/__pycache__/tools_credentials.cpython-310.pyc +0 -0
- package/src/__pycache__/tools_learnings.cpython-310.pyc +0 -0
- package/src/__pycache__/tools_menu.cpython-310.pyc +0 -0
- package/src/__pycache__/tools_reminders.cpython-310.pyc +0 -0
- package/src/__pycache__/tools_reminders_crud.cpython-310.pyc +0 -0
- package/src/__pycache__/tools_sessions.cpython-310.pyc +0 -0
- package/src/__pycache__/tools_task_history.cpython-310.pyc +0 -0
- package/src/auto_close_sessions 2.py +159 -0
- package/src/auto_update 2.py +634 -0
- package/src/claim_graph 2.py +323 -0
- package/src/cognitive/__init__ 2.py +62 -0
- package/src/cognitive/__pycache__/__init__.cpython-310.pyc +0 -0
- package/src/cognitive/__pycache__/_core.cpython-310.pyc +0 -0
- package/src/cognitive/__pycache__/_decay.cpython-310.pyc +0 -0
- package/src/cognitive/__pycache__/_ingest.cpython-310.pyc +0 -0
- package/src/cognitive/__pycache__/_memory.cpython-310.pyc +0 -0
- package/src/cognitive/__pycache__/_search.cpython-310.pyc +0 -0
- package/src/cognitive/__pycache__/_trust.cpython-310.pyc +0 -0
- package/src/cognitive/_core 2.py +567 -0
- package/src/cognitive/_decay 2.py +382 -0
- package/src/cognitive/_ingest 2.py +892 -0
- package/src/cognitive/_memory 2.py +912 -0
- package/src/cognitive/_search 2.py +949 -0
- package/src/cognitive/_trust 2.py +464 -0
- package/src/cognitive/_trust.py +10 -36
- package/src/crons/manifest 2.json +106 -0
- package/src/crons/manifest.json +106 -0
- package/src/crons/sync 2.py +217 -0
- package/src/crons/sync.py +217 -0
- package/src/dashboard/__init__ 2.py +0 -0
- package/src/dashboard/__pycache__/__init__.cpython-310.pyc +0 -0
- package/src/dashboard/__pycache__/app.cpython-310.pyc +0 -0
- package/src/dashboard/app 2.py +789 -0
- package/src/dashboard/app.py +16 -2
- package/src/dashboard/templates/dashboard.html +3 -2
- package/src/db/__init__ 2.py +89 -0
- package/src/db/__pycache__/__init__.cpython-310.pyc +0 -0
- package/src/db/__pycache__/__init__.cpython-312.pyc +0 -0
- package/src/db/__pycache__/__init__.cpython-314.pyc +0 -0
- package/src/db/__pycache__/_core.cpython-310.pyc +0 -0
- package/src/db/__pycache__/_core.cpython-312.pyc +0 -0
- package/src/db/__pycache__/_core.cpython-314.pyc +0 -0
- package/src/db/__pycache__/_credentials.cpython-310.pyc +0 -0
- package/src/db/__pycache__/_credentials.cpython-312.pyc +0 -0
- package/src/db/__pycache__/_credentials.cpython-314.pyc +0 -0
- package/src/db/__pycache__/_entities.cpython-310.pyc +0 -0
- package/src/db/__pycache__/_entities.cpython-312.pyc +0 -0
- package/src/db/__pycache__/_entities.cpython-314.pyc +0 -0
- package/src/db/__pycache__/_episodic.cpython-310.pyc +0 -0
- package/src/db/__pycache__/_episodic.cpython-312.pyc +0 -0
- package/src/db/__pycache__/_episodic.cpython-314.pyc +0 -0
- package/src/db/__pycache__/_evolution.cpython-310.pyc +0 -0
- package/src/db/__pycache__/_evolution.cpython-312.pyc +0 -0
- package/src/db/__pycache__/_evolution.cpython-314.pyc +0 -0
- package/src/db/__pycache__/_fts.cpython-310.pyc +0 -0
- package/src/db/__pycache__/_fts.cpython-312.pyc +0 -0
- package/src/db/__pycache__/_fts.cpython-314.pyc +0 -0
- package/src/db/__pycache__/_learnings.cpython-310.pyc +0 -0
- package/src/db/__pycache__/_learnings.cpython-312.pyc +0 -0
- package/src/db/__pycache__/_learnings.cpython-314.pyc +0 -0
- package/src/db/__pycache__/_reminders.cpython-310.pyc +0 -0
- package/src/db/__pycache__/_reminders.cpython-312.pyc +0 -0
- package/src/db/__pycache__/_reminders.cpython-314.pyc +0 -0
- package/src/db/__pycache__/_schema.cpython-310.pyc +0 -0
- package/src/db/__pycache__/_schema.cpython-312.pyc +0 -0
- package/src/db/__pycache__/_schema.cpython-314.pyc +0 -0
- package/src/db/__pycache__/_sessions.cpython-310.pyc +0 -0
- package/src/db/__pycache__/_sessions.cpython-312.pyc +0 -0
- package/src/db/__pycache__/_sessions.cpython-314.pyc +0 -0
- package/src/db/__pycache__/_tasks.cpython-310.pyc +0 -0
- package/src/db/__pycache__/_tasks.cpython-312.pyc +0 -0
- package/src/db/__pycache__/_tasks.cpython-314.pyc +0 -0
- package/src/db/_core 2.py +417 -0
- package/src/db/_credentials 2.py +124 -0
- package/src/db/_entities 2.py +178 -0
- package/src/db/_episodic 2.py +738 -0
- package/src/db/_episodic.py +1 -1
- package/src/db/_evolution 2.py +54 -0
- package/src/db/_fts 2.py +406 -0
- package/src/db/_learnings 2.py +168 -0
- package/src/db/_reminders 2.py +338 -0
- package/src/db/_reminders.py +9 -5
- package/src/db/_schema 2.py +364 -0
- package/src/db/_sessions 2.py +300 -0
- package/src/db/_tasks 2.py +91 -0
- package/src/evolution_cycle 2.py +266 -0
- package/src/hnsw_index 2.py +254 -0
- package/src/hooks/auto_capture 2.py +208 -0
- package/src/hooks/caffeinate-guard 2.sh +8 -0
- package/src/hooks/capture-session 2.sh +21 -0
- package/src/hooks/capture-session.sh +2 -0
- package/src/hooks/capture-tool-logs 2.sh +127 -0
- package/src/hooks/capture-tool-logs.sh +3 -2
- package/src/hooks/daily-briefing-check 2.sh +33 -0
- package/src/hooks/inbox-hook 2.sh +76 -0
- package/src/hooks/inbox-hook.sh +3 -2
- package/src/hooks/post-compact 2.sh +148 -0
- package/src/hooks/post-compact.sh +1 -1
- package/src/hooks/pre-compact 2.sh +151 -0
- package/src/hooks/pre-compact.sh +1 -1
- package/src/hooks/session-start 2.sh +268 -0
- package/src/hooks/session-start.sh +6 -3
- package/src/hooks/session-stop 2.sh +140 -0
- package/src/hooks/session-stop.sh +3 -2
- package/src/kg_populate 2.py +290 -0
- package/src/knowledge_graph 2.py +257 -0
- package/src/maintenance 2.py +59 -0
- package/src/migrate_embeddings 2.py +122 -0
- package/src/plugin_loader 2.py +202 -0
- package/src/plugins/__init__ 2.py +0 -0
- package/src/plugins/__pycache__/__init__ 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/__init__.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/adaptive_mode 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/adaptive_mode.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/agents 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/agents.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/artifact_registry 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/artifact_registry.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/backup 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/backup.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/cognitive_memory 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/cognitive_memory.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/core_rules 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/core_rules.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/cortex 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/cortex.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/entities 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/entities.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/episodic_memory 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/episodic_memory.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/evolution 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/evolution.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/guard 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/guard.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/knowledge_graph_tools 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/knowledge_graph_tools.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/preferences 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/preferences.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/update 2.cpython-310.pyc +0 -0
- package/src/plugins/__pycache__/update.cpython-310.pyc +0 -0
- package/src/plugins/adaptive_mode 2.py +805 -0
- package/src/plugins/agents 2.py +52 -0
- package/src/plugins/artifact_registry 2.py +450 -0
- package/src/plugins/backup 2.py +104 -0
- package/src/plugins/cognitive_memory 2.py +564 -0
- package/src/plugins/core_rules 2.py +252 -0
- package/src/plugins/core_rules.py +34 -17
- package/src/plugins/cortex 2.py +299 -0
- package/src/plugins/entities 2.py +67 -0
- package/src/plugins/episodic_memory 2.py +533 -0
- package/src/plugins/evolution 2.py +115 -0
- package/src/plugins/guard 2.py +746 -0
- package/src/plugins/knowledge_graph_tools 2.py +105 -0
- package/src/plugins/preferences 2.py +47 -0
- package/src/plugins/update 2.py +256 -0
- package/src/plugins/update.py +18 -0
- package/src/requirements 2.txt +12 -0
- package/src/rules/__init__ 2.py +0 -0
- package/src/rules/core-rules 2.json +331 -0
- package/src/rules/migrate 2.py +207 -0
- package/src/scripts/check-context 2.py +264 -0
- package/src/scripts/check-context.py +4 -7
- package/src/scripts/deep-sleep/apply_findings.py +570 -167
- package/src/scripts/deep-sleep/collect.py +480 -0
- package/src/scripts/deep-sleep/extract-prompt.md +233 -0
- package/src/scripts/deep-sleep/extract.py +249 -0
- package/src/scripts/deep-sleep/synthesize-prompt.md +197 -0
- package/src/scripts/deep-sleep/synthesize.py +191 -0
- package/src/scripts/nexo-auto-update 2.py +6 -0
- package/src/scripts/nexo-backup 2.sh +25 -0
- package/src/scripts/nexo-brain-activation 2.sh +140 -0
- package/src/scripts/nexo-catchup 2.py +242 -0
- package/src/scripts/nexo-catchup.py +5 -8
- package/src/scripts/nexo-cognitive-decay 2.py +182 -0
- package/src/scripts/nexo-daily-self-audit 2.py +552 -0
- package/src/scripts/nexo-daily-self-audit.py +28 -19
- package/src/scripts/nexo-deep-sleep 2.sh +97 -0
- package/src/scripts/nexo-deep-sleep.sh +31 -16
- package/src/scripts/nexo-evolution-run 2.py +597 -0
- package/src/scripts/nexo-evolution-run.py +5 -20
- package/src/scripts/nexo-followup-hygiene 2.py +112 -0
- package/src/scripts/nexo-followup-hygiene.py +4 -2
- package/src/scripts/nexo-github-monitor 2.py +256 -0
- package/src/scripts/nexo-github-monitor.py +6 -9
- package/src/scripts/nexo-immune 2.py +927 -0
- package/src/scripts/nexo-immune.py +4 -17
- package/src/scripts/nexo-inbox-hook 2.sh +74 -0
- package/src/scripts/nexo-install 2.py +6 -0
- package/src/scripts/nexo-learning-housekeep 2.py +245 -0
- package/src/scripts/nexo-learning-validator 2.py +207 -0
- package/src/scripts/nexo-learning-validator.py +0 -29
- package/src/scripts/nexo-migrate 2.py +232 -0
- package/src/scripts/nexo-postmortem-consolidator 2.py +421 -0
- package/src/scripts/nexo-postmortem-consolidator.py +9 -20
- package/src/scripts/nexo-pre-commit 2.py +120 -0
- package/src/scripts/nexo-prevent-sleep 2.sh +29 -0
- package/src/scripts/nexo-proactive-dashboard 2.py +345 -0
- package/src/scripts/nexo-proactive-dashboard.py +1 -0
- package/src/scripts/nexo-reflection 2.py +253 -0
- package/src/scripts/nexo-runtime-preflight 2.py +274 -0
- package/src/scripts/nexo-send-email 2.py +25 -0
- package/src/scripts/nexo-send-reply 2.py +178 -0
- package/src/scripts/nexo-sleep 2.py +592 -0
- package/src/scripts/nexo-sleep.py +8 -18
- package/src/scripts/nexo-snapshot-restore 2.sh +35 -0
- package/src/scripts/nexo-synthesis 2.py +253 -0
- package/src/scripts/nexo-synthesis.py +8 -19
- package/src/scripts/nexo-tcc-approve 2.sh +79 -0
- package/src/scripts/nexo-update 2.sh +161 -0
- package/src/scripts/nexo-watchdog 2.sh +878 -0
- package/src/scripts/nexo-watchdog-smoke 2.py +119 -0
- package/src/server 2.py +733 -0
- package/src/server.py +6 -1
- package/src/storage_router 2.py +32 -0
- package/src/tools_coordination 2.py +102 -0
- package/src/tools_credentials 2.py +68 -0
- package/src/tools_learnings 2.py +220 -0
- package/src/tools_menu 2.py +227 -0
- package/src/tools_menu.py +1 -1
- package/src/tools_reminders 2.py +86 -0
- package/src/tools_reminders_crud 2.py +159 -0
- package/src/tools_reminders_crud.py +7 -0
- package/src/tools_sessions 2.py +476 -0
- package/src/tools_sessions.py +67 -0
- package/src/tools_task_history 2.py +57 -0
- package/templates/CLAUDE.md 2.template +63 -0
- package/templates/openclaw 2.json +13 -0
- package/tests/__init__ 2.py +0 -0
- package/tests/conftest 2.py +71 -0
- package/tests/test_cognitive 2.py +205 -0
- package/tests/test_knowledge_graph 2.py +140 -0
- package/tests/test_migrations 2.py +137 -0
- package/src/__pycache__/auto_close_sessions.cpython-310.pyc +0 -0
- package/src/__pycache__/auto_close_sessions.cpython-314.pyc +0 -0
- package/src/__pycache__/auto_update.cpython-314.pyc +0 -0
- package/src/__pycache__/claim_graph.cpython-310.pyc +0 -0
- package/src/__pycache__/claim_graph.cpython-314.pyc +0 -0
- package/src/__pycache__/evolution_cycle.cpython-310.pyc +0 -0
- package/src/__pycache__/evolution_cycle.cpython-314.pyc +0 -0
- package/src/__pycache__/hnsw_index.cpython-314.pyc +0 -0
- package/src/__pycache__/kg_populate.cpython-314.pyc +0 -0
- package/src/__pycache__/knowledge_graph.cpython-314.pyc +0 -0
- package/src/__pycache__/maintenance.cpython-310.pyc +0 -0
- package/src/__pycache__/maintenance.cpython-314.pyc +0 -0
- package/src/__pycache__/migrate_embeddings.cpython-310.pyc +0 -0
- package/src/__pycache__/migrate_embeddings.cpython-314.pyc +0 -0
- package/src/__pycache__/plugin_loader.cpython-314.pyc +0 -0
- package/src/__pycache__/server.cpython-310.pyc +0 -0
- package/src/__pycache__/server.cpython-314.pyc +0 -0
- package/src/__pycache__/storage_router.cpython-310.pyc +0 -0
- package/src/__pycache__/storage_router.cpython-314.pyc +0 -0
- package/src/__pycache__/tools_coordination.cpython-314.pyc +0 -0
- package/src/__pycache__/tools_credentials.cpython-314.pyc +0 -0
- package/src/__pycache__/tools_learnings.cpython-314.pyc +0 -0
- package/src/__pycache__/tools_menu.cpython-314.pyc +0 -0
- package/src/__pycache__/tools_reminders.cpython-314.pyc +0 -0
- package/src/__pycache__/tools_reminders_crud.cpython-314.pyc +0 -0
- package/src/__pycache__/tools_sessions.cpython-314.pyc +0 -0
- package/src/__pycache__/tools_task_history.cpython-314.pyc +0 -0
- package/src/cognitive/__pycache__/__init__.cpython-314.pyc +0 -0
- package/src/cognitive/__pycache__/_core.cpython-314.pyc +0 -0
- package/src/cognitive/__pycache__/_decay.cpython-314.pyc +0 -0
- package/src/cognitive/__pycache__/_ingest.cpython-314.pyc +0 -0
- package/src/cognitive/__pycache__/_memory.cpython-314.pyc +0 -0
- package/src/cognitive/__pycache__/_search.cpython-314.pyc +0 -0
- package/src/cognitive/__pycache__/_trust.cpython-314.pyc +0 -0
- package/src/dashboard/__pycache__/__init__.cpython-314.pyc +0 -0
- package/src/dashboard/__pycache__/app.cpython-314.pyc +0 -0
- package/src/hooks/__pycache__/auto_capture.cpython-310.pyc +0 -0
- package/src/hooks/__pycache__/auto_capture.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/__init__.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/adaptive_mode.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/agents.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/artifact_registry.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/backup.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/cognitive_memory.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/core_rules.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/cortex.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/entities.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/episodic_memory.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/evolution.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/guard.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/knowledge_graph_tools.cpython-314.pyc +0 -0
- package/src/plugins/__pycache__/preferences.cpython-314.pyc +0 -0
- package/src/rules/__pycache__/__init__.cpython-310.pyc +0 -0
- package/src/rules/__pycache__/__init__.cpython-314.pyc +0 -0
- package/src/rules/__pycache__/migrate.cpython-310.pyc +0 -0
- package/src/rules/__pycache__/migrate.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/check-context.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/check-context.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-auto-update.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-auto-update.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-catchup.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-catchup.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-cognitive-decay.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-cognitive-decay.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-daily-self-audit.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-daily-self-audit.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-evolution-run.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-evolution-run.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-followup-hygiene.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-followup-hygiene.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-github-monitor.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-github-monitor.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-immune.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-immune.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-install.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-install.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-learning-housekeep.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-learning-housekeep.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-learning-validator.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-learning-validator.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-migrate.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-migrate.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-postmortem-consolidator.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-postmortem-consolidator.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-pre-commit.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-pre-commit.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-proactive-dashboard.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-proactive-dashboard.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-reflection.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-reflection.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-runtime-preflight.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-runtime-preflight.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-send-email.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-send-email.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-send-reply.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-send-reply.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-sleep.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-sleep.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-synthesis.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-synthesis.cpython-314.pyc +0 -0
- package/src/scripts/__pycache__/nexo-watchdog-smoke.cpython-310.pyc +0 -0
- package/src/scripts/__pycache__/nexo-watchdog-smoke.cpython-314.pyc +0 -0
- package/src/scripts/deep-sleep/__pycache__/analyze_session.cpython-310.pyc +0 -0
- package/src/scripts/deep-sleep/__pycache__/analyze_session.cpython-314.pyc +0 -0
- package/src/scripts/deep-sleep/__pycache__/apply_findings.cpython-310.pyc +0 -0
- package/src/scripts/deep-sleep/__pycache__/apply_findings.cpython-314.pyc +0 -0
- package/src/scripts/deep-sleep/__pycache__/collect_transcripts.cpython-310.pyc +0 -0
- package/src/scripts/deep-sleep/__pycache__/collect_transcripts.cpython-314.pyc +0 -0
- package/src/scripts/deep-sleep/analyze_session.py +0 -217
- package/src/scripts/deep-sleep/collect_transcripts.py +0 -145
- package/src/scripts/deep-sleep/prompt.md +0 -109
- package/tests/__pycache__/__init__.cpython-310.pyc +0 -0
- package/tests/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tests/__pycache__/conftest.cpython-310-pytest-9.0.2.pyc +0 -0
- package/tests/__pycache__/conftest.cpython-310.pyc +0 -0
- package/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
- package/tests/__pycache__/test_cognitive.cpython-310-pytest-9.0.2.pyc +0 -0
- package/tests/__pycache__/test_cognitive.cpython-310.pyc +0 -0
- package/tests/__pycache__/test_cognitive.cpython-314-pytest-9.0.2.pyc +0 -0
- package/tests/__pycache__/test_knowledge_graph.cpython-310-pytest-9.0.2.pyc +0 -0
- package/tests/__pycache__/test_knowledge_graph.cpython-310.pyc +0 -0
- package/tests/__pycache__/test_knowledge_graph.cpython-314-pytest-9.0.2.pyc +0 -0
- package/tests/__pycache__/test_migrations.cpython-310-pytest-9.0.2.pyc +0 -0
- package/tests/__pycache__/test_migrations.cpython-310.pyc +0 -0
- package/tests/__pycache__/test_migrations.cpython-314-pytest-9.0.2.pyc +0 -0
package/README.md
CHANGED
|
@@ -6,17 +6,17 @@
|
|
|
6
6
|
[](https://github.com/wazionapps/nexo/stargazers)
|
|
7
7
|
[](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,
|
|
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
|
|
|
13
13
|
<p align="center">
|
|
14
|
-
<a href="https://www.youtube.com/watch?v=
|
|
15
|
-
<img src="assets/nexo-brain-infographic-
|
|
14
|
+
<a href="https://www.youtube.com/watch?v=IBs7zh7ZMG0">
|
|
15
|
+
<img src="assets/nexo-brain-infographic-v5.png" alt="NEXO Brain Architecture" width="700">
|
|
16
16
|
</a>
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
|
-
[Watch the
|
|
19
|
+
[Watch the overview on YouTube](https://www.youtube.com/watch?v=IBs7zh7ZMG0) · [Watch the full deep-dive](https://www.youtube.com/watch?v=bKAfowyyy5M)
|
|
20
20
|
|
|
21
21
|
Every time you close a session, everything is lost. Your agent doesn't remember yesterday's decisions, repeats the same mistakes, and starts from zero. NEXO Brain fixes this with a cognitive architecture modeled after how human memory actually works.
|
|
22
22
|
|
|
@@ -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
|
|
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 (
|
|
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.
|
|
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
|
-
| **
|
|
278
|
-
| **
|
|
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
|
-
| **
|
|
281
|
-
| **
|
|
282
|
-
| **
|
|
283
|
-
| **
|
|
284
|
-
| **
|
|
285
|
-
| **
|
|
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
|
|
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
|
-
|
|
294
|
+
## Deep Sleep v2 — Overnight Learning (v2.1.0)
|
|
290
295
|
|
|
291
|
-
|
|
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 |
|
|
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 +
|
|
321
|
-
| **
|
|
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
|
-
|
|
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 |
|
|
455
|
-
| Plugins | Guard, episodic memory, cognitive memory, entities, preferences |
|
|
456
|
-
| Hooks (7) | SessionStart, Stop, PostToolUse, PreCompact, PostCompact
|
|
457
|
-
| Nervous system |
|
|
458
|
-
| Dashboard | Web UI at localhost:6174 (6 pages) |
|
|
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
|
-
|
|
|
461
|
-
| Auto-update |
|
|
462
|
-
|
|
|
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
|
|
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
|
-
###
|
|
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
|
|
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
|
|
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
|
|
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
|
[](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**: 494
|
|
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**:
|
|
665
|
-
- **Hooks**:
|
|
666
|
-
- **Installer**: Now configures dashboard LaunchAgent, nervous system scripts, and all
|
|
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/bin/nexo-brain.js
CHANGED
|
@@ -54,7 +54,7 @@ function log(msg) {
|
|
|
54
54
|
|
|
55
55
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
56
56
|
// CORE PROCESS & HOOK DEFINITIONS
|
|
57
|
-
// All 13 nightly/periodic processes and all
|
|
57
|
+
// All 13 nightly/periodic processes and all 8 core hooks that make NEXO functional.
|
|
58
58
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
59
59
|
|
|
60
60
|
/**
|
|
@@ -105,33 +105,36 @@ const ALL_PROCESSES = [
|
|
|
105
105
|
];
|
|
106
106
|
|
|
107
107
|
/**
|
|
108
|
-
* Complete definition of all
|
|
108
|
+
* Complete definition of all 8 core hooks.
|
|
109
109
|
* event: Claude Code hook event name
|
|
110
110
|
* matcher: glob matcher for the hook
|
|
111
111
|
* script: script filename inside NEXO_HOME/hooks/ (or a raw command template)
|
|
112
112
|
* key: unique identifier to detect if already registered (avoids duplicates)
|
|
113
|
+
* timeout: seconds before Claude Code kills the hook (prevents hangs)
|
|
113
114
|
*/
|
|
114
115
|
const ALL_CORE_HOOKS = [
|
|
115
116
|
{ event: "SessionStart", key: "session-start-ts", commandTemplate: (nexoHome) =>
|
|
116
117
|
`date +%s > ${path.join(nexoHome, "operations", ".session-start-ts")}`,
|
|
117
|
-
purpose: "Session timing" },
|
|
118
|
+
timeout: 2, purpose: "Session timing" },
|
|
119
|
+
{ event: "SessionStart", key: "daily-briefing-check.sh", script: "daily-briefing-check.sh",
|
|
120
|
+
timeout: 5, purpose: "Briefing schedule check" },
|
|
118
121
|
{ event: "SessionStart", key: "session-start.sh", script: "session-start.sh",
|
|
119
|
-
purpose: "Briefing + context" },
|
|
122
|
+
timeout: 35, purpose: "Briefing + context" },
|
|
120
123
|
{ event: "Stop", key: "session-stop.sh", script: "session-stop.sh",
|
|
121
|
-
purpose: "POSTMORTEM — the most important" },
|
|
124
|
+
timeout: 10, purpose: "POSTMORTEM — the most important" },
|
|
122
125
|
{ event: "PostToolUse", key: "capture-tool-logs.sh", script: "capture-tool-logs.sh",
|
|
123
|
-
purpose: "Operation capture" },
|
|
126
|
+
timeout: 5, purpose: "Operation capture" },
|
|
124
127
|
{ event: "PostToolUse", key: "inbox-hook.sh", script: "inbox-hook.sh",
|
|
125
|
-
purpose: "Inter-session messaging" },
|
|
128
|
+
timeout: 5, purpose: "Inter-session messaging" },
|
|
126
129
|
{ event: "PreCompact", key: "pre-compact.sh", script: "pre-compact.sh",
|
|
127
|
-
purpose: "Memory preservation" },
|
|
130
|
+
timeout: 10, purpose: "Memory preservation" },
|
|
128
131
|
{ event: "PostCompact", key: "post-compact.sh", script: "post-compact.sh",
|
|
129
|
-
purpose: "Memory restoration" },
|
|
132
|
+
timeout: 10, purpose: "Memory restoration" },
|
|
130
133
|
];
|
|
131
134
|
|
|
132
135
|
/**
|
|
133
|
-
* Register all
|
|
134
|
-
* Additive: adds missing hooks, never removes user's custom ones.
|
|
136
|
+
* Register all 8 core hooks in settings.hooks.
|
|
137
|
+
* Additive + auto-migrate: adds missing hooks, updates stale paths, never removes user's custom ones.
|
|
135
138
|
*/
|
|
136
139
|
function registerAllCoreHooks(settings, hooksDir, nexoHome) {
|
|
137
140
|
if (!settings.hooks) settings.hooks = {};
|
|
@@ -143,13 +146,7 @@ function registerAllCoreHooks(settings, hooksDir, nexoHome) {
|
|
|
143
146
|
for (const hook of ALL_CORE_HOOKS) {
|
|
144
147
|
if (!settings.hooks[hook.event]) settings.hooks[hook.event] = [];
|
|
145
148
|
|
|
146
|
-
//
|
|
147
|
-
const alreadyExists = settings.hooks[hook.event].some(
|
|
148
|
-
(h) => h.command && h.command.includes(hook.key)
|
|
149
|
-
);
|
|
150
|
-
if (alreadyExists) continue;
|
|
151
|
-
|
|
152
|
-
// Build the command
|
|
149
|
+
// Build the canonical command for this hook
|
|
153
150
|
let command;
|
|
154
151
|
if (hook.commandTemplate) {
|
|
155
152
|
command = hook.commandTemplate(nexoHome);
|
|
@@ -157,10 +154,40 @@ function registerAllCoreHooks(settings, hooksDir, nexoHome) {
|
|
|
157
154
|
command = `NEXO_HOME=${nexoHome} bash ${path.join(hooksDir, hook.script)}`;
|
|
158
155
|
}
|
|
159
156
|
|
|
160
|
-
settings.hooks
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
157
|
+
// Claude Code settings.hooks supports two formats:
|
|
158
|
+
// Flat: [{type:"command", command:"..."}]
|
|
159
|
+
// Nested: [{matcher:"*", hooks:[{type:"command", command:"..."}]}]
|
|
160
|
+
// We need to search and update in both formats.
|
|
161
|
+
let found = false;
|
|
162
|
+
|
|
163
|
+
for (const entry of settings.hooks[hook.event]) {
|
|
164
|
+
if (entry.hooks && Array.isArray(entry.hooks)) {
|
|
165
|
+
// Nested format: {matcher, hooks: [...]}
|
|
166
|
+
const subIdx = entry.hooks.findIndex(
|
|
167
|
+
(h) => h.command && h.command.includes(hook.key)
|
|
168
|
+
);
|
|
169
|
+
if (subIdx !== -1) {
|
|
170
|
+
const existing = entry.hooks[subIdx];
|
|
171
|
+
if (existing.command !== command) existing.command = command;
|
|
172
|
+
if (hook.timeout && !existing.timeout) existing.timeout = hook.timeout;
|
|
173
|
+
found = true;
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
} else if (entry.command && entry.command.includes(hook.key)) {
|
|
177
|
+
// Flat format: {type:"command", command:"..."}
|
|
178
|
+
if (entry.command !== command) entry.command = command;
|
|
179
|
+
if (hook.timeout && !entry.timeout) entry.timeout = hook.timeout;
|
|
180
|
+
found = true;
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if (!found) {
|
|
186
|
+
// Hook missing — add it in flat format (Claude Code accepts both)
|
|
187
|
+
const newEntry = { type: "command", command };
|
|
188
|
+
if (hook.timeout) newEntry.timeout = hook.timeout;
|
|
189
|
+
settings.hooks[hook.event].push(newEntry);
|
|
190
|
+
}
|
|
164
191
|
}
|
|
165
192
|
}
|
|
166
193
|
|
|
@@ -649,7 +676,7 @@ async function main() {
|
|
|
649
676
|
}
|
|
650
677
|
log(" Scripts updated.");
|
|
651
678
|
|
|
652
|
-
// Register ALL
|
|
679
|
+
// Register ALL 8 core hooks in settings.json (additive — don't remove user's custom hooks)
|
|
653
680
|
let settings = {};
|
|
654
681
|
if (fs.existsSync(CLAUDE_SETTINGS)) {
|
|
655
682
|
try { settings = JSON.parse(fs.readFileSync(CLAUDE_SETTINGS, "utf8")); } catch {}
|
|
@@ -659,7 +686,7 @@ async function main() {
|
|
|
659
686
|
registerAllCoreHooks(settings, migHooksDest, NEXO_HOME);
|
|
660
687
|
fs.mkdirSync(path.dirname(CLAUDE_SETTINGS), { recursive: true });
|
|
661
688
|
fs.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(settings, null, 2));
|
|
662
|
-
log(" All
|
|
689
|
+
log(" All 8 core hooks registered in Claude Code settings.");
|
|
663
690
|
|
|
664
691
|
// Regenerate ALL 13 LaunchAgents / systemd timers
|
|
665
692
|
const migSchedule = loadOrCreateSchedule(NEXO_HOME);
|
|
@@ -1741,7 +1768,7 @@ ${doScan ? `- Stack: ${Object.keys(profileData.code.languages || {}).slice(0, 5)
|
|
|
1741
1768
|
},
|
|
1742
1769
|
};
|
|
1743
1770
|
|
|
1744
|
-
// Configure ALL
|
|
1771
|
+
// Configure ALL 8 core hooks for session capture (Sensory Register)
|
|
1745
1772
|
if (!settings.hooks) settings.hooks = {};
|
|
1746
1773
|
|
|
1747
1774
|
// Hook scripts already copied above — just reference the dest dir
|
|
@@ -1752,7 +1779,7 @@ ${doScan ? `- Stack: ${Object.keys(profileData.code.languages || {}).slice(0, 5)
|
|
|
1752
1779
|
const settingsDir = path.dirname(CLAUDE_SETTINGS);
|
|
1753
1780
|
fs.mkdirSync(settingsDir, { recursive: true });
|
|
1754
1781
|
fs.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(settings, null, 2));
|
|
1755
|
-
log("MCP server +
|
|
1782
|
+
log("MCP server + 8 core hooks configured in Claude Code settings.");
|
|
1756
1783
|
|
|
1757
1784
|
// Step 7: Create schedule.json (only on fresh install) and install ALL 13 processes
|
|
1758
1785
|
log("Setting up automated processes...");
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexo-brain",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"mcpName": "io.github.wazionapps/nexo",
|
|
5
|
-
"description": "NEXO — Cognitive co-operator for Claude Code.
|
|
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",
|