nemoris 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +49 -49
- package/LICENSE +21 -21
- package/README.md +209 -209
- package/SECURITY.md +59 -119
- package/bin/nemoris +46 -46
- package/config/agents/agent.toml.example +28 -28
- package/config/agents/content.toml +23 -0
- package/config/agents/default.toml +22 -22
- package/config/agents/heartbeat.toml +35 -0
- package/config/agents/iris.toml +23 -0
- package/config/agents/lab.toml +23 -0
- package/config/agents/main.toml +45 -0
- package/config/agents/nemo.toml +21 -0
- package/config/agents/ops.toml +38 -0
- package/config/agents/orchestrator.toml +18 -18
- package/config/agents/revenue.toml +23 -0
- package/config/agents/testyboo.toml +19 -0
- package/config/delivery.toml +73 -73
- package/config/embeddings.toml +5 -5
- package/config/identity/content-purpose.md +11 -0
- package/config/identity/content-soul.md +45 -0
- package/config/identity/default-purpose.md +1 -1
- package/config/identity/default-soul.md +3 -3
- package/config/identity/heartbeat-purpose.md +9 -0
- package/config/identity/heartbeat-soul.md +16 -0
- package/config/identity/iris-purpose.md +17 -0
- package/config/identity/iris-soul.md +68 -0
- package/config/identity/lab-purpose.md +10 -0
- package/config/identity/lab-soul.md +38 -0
- package/config/identity/main-purpose.md +17 -0
- package/config/identity/main-soul.md +66 -0
- package/config/identity/main-user.md +22 -0
- package/config/identity/ops-purpose.md +9 -0
- package/config/identity/ops-soul.md +16 -0
- package/config/identity/orchestrator-purpose.md +1 -1
- package/config/identity/orchestrator-soul.md +1 -1
- package/config/identity/revenue-purpose.md +9 -0
- package/config/identity/revenue-soul.md +41 -0
- package/config/identity/testyboo-purpose.md +13 -0
- package/config/identity/testyboo-soul.md +20 -0
- package/config/improvement-targets.toml +15 -15
- package/config/jobs/heartbeat-check.toml +30 -30
- package/config/jobs/memory-rollup.toml +46 -46
- package/config/jobs/workspace-health.toml +63 -63
- package/config/mcp.toml +16 -16
- package/config/output-contracts.toml +17 -17
- package/config/peers.toml +32 -32
- package/config/peers.toml.example +32 -32
- package/config/policies/memory-default.toml +10 -10
- package/config/policies/memory-heartbeat.toml +5 -5
- package/config/policies/memory-ops.toml +10 -10
- package/config/policies/tools-heartbeat-minimal.toml +8 -8
- package/config/policies/tools-interactive-safe.toml +8 -8
- package/config/policies/tools-ops-bounded.toml +8 -8
- package/config/policies/tools-orchestrator.toml +7 -7
- package/config/providers/anthropic.toml +15 -15
- package/config/providers/ollama.toml +5 -5
- package/config/providers/openai-codex.toml +9 -9
- package/config/providers/openrouter.toml +5 -5
- package/config/router.toml +22 -22
- package/config/runtime.toml +114 -114
- package/config/skills/self-improvement.toml +15 -15
- package/config/skills/telegram-onboarding-spec.md +240 -240
- package/config/skills/workspace-monitor.toml +15 -15
- package/config/task-router.toml +42 -42
- package/install.sh +50 -50
- package/package.json +91 -90
- package/src/auth/auth-profiles.js +169 -169
- package/src/auth/openai-codex-oauth.js +285 -285
- package/src/battle.js +449 -449
- package/src/cli/help.js +265 -265
- package/src/cli/output-filter.js +49 -49
- package/src/cli/runtime-control.js +704 -704
- package/src/cli-main.js +2763 -2763
- package/src/cli.js +78 -78
- package/src/config/loader.js +332 -332
- package/src/config/schema-validator.js +214 -214
- package/src/config/toml-lite.js +8 -8
- package/src/daemon/action-handlers.js +71 -71
- package/src/daemon/healing-tick.js +87 -87
- package/src/daemon/health-probes.js +90 -90
- package/src/daemon/notifier.js +57 -57
- package/src/daemon/nurse.js +218 -218
- package/src/daemon/repair-log.js +106 -106
- package/src/daemon/rule-staging.js +90 -90
- package/src/daemon/rules.js +29 -29
- package/src/daemon/telegram-commands.js +54 -54
- package/src/daemon/updater.js +85 -85
- package/src/jobs/job-runner.js +78 -78
- package/src/mcp/consumer.js +129 -129
- package/src/memory/active-recall.js +171 -171
- package/src/memory/backend-manager.js +97 -97
- package/src/memory/backends/file-backend.js +38 -38
- package/src/memory/backends/qmd-backend.js +219 -219
- package/src/memory/embedding-guards.js +24 -24
- package/src/memory/embedding-index.js +118 -118
- package/src/memory/embedding-service.js +179 -179
- package/src/memory/file-index.js +177 -177
- package/src/memory/memory-signature.js +5 -5
- package/src/memory/memory-store.js +648 -648
- package/src/memory/retrieval-planner.js +66 -66
- package/src/memory/scoring.js +145 -145
- package/src/memory/simhash.js +78 -78
- package/src/memory/sqlite-active-store.js +824 -824
- package/src/memory/write-policy.js +36 -36
- package/src/onboarding/aliases.js +33 -33
- package/src/onboarding/auth/api-key.js +224 -224
- package/src/onboarding/auth/ollama-detect.js +42 -42
- package/src/onboarding/clack-prompter.js +77 -77
- package/src/onboarding/doctor.js +530 -530
- package/src/onboarding/lock.js +42 -42
- package/src/onboarding/model-catalog.js +344 -344
- package/src/onboarding/phases/auth.js +576 -589
- package/src/onboarding/phases/build.js +130 -130
- package/src/onboarding/phases/choose.js +82 -82
- package/src/onboarding/phases/detect.js +98 -98
- package/src/onboarding/phases/hatch.js +216 -216
- package/src/onboarding/phases/identity.js +79 -79
- package/src/onboarding/phases/ollama.js +345 -345
- package/src/onboarding/phases/scaffold.js +99 -99
- package/src/onboarding/phases/telegram.js +377 -377
- package/src/onboarding/phases/validate.js +204 -204
- package/src/onboarding/phases/verify.js +206 -206
- package/src/onboarding/platform.js +482 -482
- package/src/onboarding/status-bar.js +95 -95
- package/src/onboarding/templates.js +794 -794
- package/src/onboarding/toml-writer.js +38 -38
- package/src/onboarding/tui.js +250 -250
- package/src/onboarding/uninstall.js +153 -153
- package/src/onboarding/wizard.js +516 -499
- package/src/providers/anthropic.js +168 -168
- package/src/providers/base.js +247 -247
- package/src/providers/circuit-breaker.js +136 -136
- package/src/providers/ollama.js +163 -163
- package/src/providers/openai-codex.js +149 -149
- package/src/providers/openrouter.js +136 -136
- package/src/providers/registry.js +36 -36
- package/src/providers/router.js +16 -16
- package/src/runtime/bootstrap-cache.js +47 -47
- package/src/runtime/capabilities-prompt.js +25 -25
- package/src/runtime/completion-ping.js +99 -99
- package/src/runtime/config-validator.js +121 -121
- package/src/runtime/context-ledger.js +360 -360
- package/src/runtime/cutover-readiness.js +42 -42
- package/src/runtime/daemon.js +729 -729
- package/src/runtime/delivery-ack.js +195 -195
- package/src/runtime/delivery-adapters/local-file.js +41 -41
- package/src/runtime/delivery-adapters/openclaw-cli.js +94 -94
- package/src/runtime/delivery-adapters/openclaw-peer.js +98 -98
- package/src/runtime/delivery-adapters/shadow.js +13 -13
- package/src/runtime/delivery-adapters/standalone-http.js +98 -98
- package/src/runtime/delivery-adapters/telegram.js +104 -104
- package/src/runtime/delivery-adapters/tui.js +128 -128
- package/src/runtime/delivery-manager.js +807 -807
- package/src/runtime/delivery-store.js +168 -168
- package/src/runtime/dependency-health.js +118 -118
- package/src/runtime/envelope.js +114 -114
- package/src/runtime/evaluation.js +1089 -1089
- package/src/runtime/exec-approvals.js +216 -216
- package/src/runtime/executor.js +500 -500
- package/src/runtime/failure-ping.js +67 -67
- package/src/runtime/flows.js +83 -83
- package/src/runtime/guards.js +45 -45
- package/src/runtime/handoff.js +51 -51
- package/src/runtime/identity-cache.js +28 -28
- package/src/runtime/improvement-engine.js +109 -109
- package/src/runtime/improvement-harness.js +581 -581
- package/src/runtime/input-sanitiser.js +72 -72
- package/src/runtime/interaction-contract.js +347 -347
- package/src/runtime/lane-readiness.js +226 -226
- package/src/runtime/migration.js +323 -323
- package/src/runtime/model-resolution.js +78 -78
- package/src/runtime/network.js +64 -64
- package/src/runtime/notification-store.js +97 -97
- package/src/runtime/notifier.js +256 -256
- package/src/runtime/orchestrator.js +53 -53
- package/src/runtime/orphan-reaper.js +41 -41
- package/src/runtime/output-contract-schema.js +139 -139
- package/src/runtime/output-contract-validator.js +439 -439
- package/src/runtime/peer-readiness.js +69 -69
- package/src/runtime/peer-registry.js +133 -133
- package/src/runtime/pilot-status.js +108 -108
- package/src/runtime/prompt-builder.js +261 -261
- package/src/runtime/provider-attempt.js +582 -582
- package/src/runtime/report-fallback.js +71 -71
- package/src/runtime/result-normalizer.js +183 -183
- package/src/runtime/retention.js +74 -74
- package/src/runtime/review.js +244 -244
- package/src/runtime/route-job.js +15 -15
- package/src/runtime/run-store.js +38 -38
- package/src/runtime/schedule.js +88 -88
- package/src/runtime/scheduler-state.js +434 -434
- package/src/runtime/scheduler.js +656 -656
- package/src/runtime/session-compactor.js +182 -182
- package/src/runtime/session-search.js +155 -155
- package/src/runtime/slack-inbound.js +249 -249
- package/src/runtime/ssrf.js +102 -102
- package/src/runtime/status-aggregator.js +330 -330
- package/src/runtime/task-contract.js +140 -140
- package/src/runtime/task-packet.js +107 -107
- package/src/runtime/task-router.js +140 -140
- package/src/runtime/telegram-inbound.js +1565 -1565
- package/src/runtime/token-counter.js +134 -134
- package/src/runtime/token-estimator.js +59 -59
- package/src/runtime/tool-loop.js +200 -200
- package/src/runtime/transport-server.js +311 -311
- package/src/runtime/tui-server.js +411 -411
- package/src/runtime/ulid.js +44 -44
- package/src/security/ssrf-check.js +197 -197
- package/src/setup.js +369 -369
- package/src/shadow/bridge.js +303 -303
- package/src/skills/loader.js +84 -84
- package/src/tools/catalog.json +49 -49
- package/src/tools/cli-delegate.js +44 -44
- package/src/tools/mcp-client.js +106 -106
- package/src/tools/micro/cancel-task.js +6 -6
- package/src/tools/micro/complete-task.js +6 -6
- package/src/tools/micro/fail-task.js +6 -6
- package/src/tools/micro/http-fetch.js +74 -74
- package/src/tools/micro/index.js +36 -36
- package/src/tools/micro/lcm-recall.js +60 -60
- package/src/tools/micro/list-dir.js +17 -17
- package/src/tools/micro/list-skills.js +46 -46
- package/src/tools/micro/load-skill.js +38 -38
- package/src/tools/micro/memory-search.js +45 -45
- package/src/tools/micro/read-file.js +11 -11
- package/src/tools/micro/session-search.js +54 -54
- package/src/tools/micro/shell-exec.js +43 -43
- package/src/tools/micro/trigger-job.js +79 -79
- package/src/tools/micro/web-search.js +58 -58
- package/src/tools/micro/workspace-paths.js +39 -39
- package/src/tools/micro/write-file.js +14 -14
- package/src/tools/micro/write-memory.js +41 -41
- package/src/tools/registry.js +348 -348
- package/src/tools/tool-result-contract.js +36 -36
- package/src/tui/chat.js +835 -835
- package/src/tui/renderer.js +175 -175
- package/src/tui/socket-client.js +217 -217
- package/src/utils/canonical-json.js +29 -29
- package/src/utils/compaction.js +30 -30
- package/src/utils/env-loader.js +5 -5
- package/src/utils/errors.js +80 -80
- package/src/utils/fs.js +101 -101
- package/src/utils/ids.js +5 -5
- package/src/utils/model-context-limits.js +30 -30
- package/src/utils/token-budget.js +74 -74
- package/src/utils/usage-cost.js +25 -25
- package/src/utils/usage-metrics.js +14 -14
package/.env.example
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
# ============================================================
|
|
2
|
-
# Nemoris — Environment Variables
|
|
3
|
-
# Copy this file to .env and fill in your values
|
|
4
|
-
# Run: nemoris setup (walks you through the essentials)
|
|
5
|
-
# ============================================================
|
|
6
|
-
|
|
7
|
-
# ---- Anthropic (required for cloud AI) --------------------
|
|
8
|
-
NEMORIS_ANTHROPIC_API_KEY= # Get from console.anthropic.com
|
|
9
|
-
|
|
10
|
-
# ---- OpenRouter (optional — fallback + Perplexity search) --
|
|
11
|
-
OPENROUTER_API_KEY= # Get from openrouter.ai
|
|
12
|
-
|
|
13
|
-
# ---- Telegram (required for Telegram channel) -------------
|
|
14
|
-
NEMORIS_TELEGRAM_BOT_TOKEN= # From @BotFather on Telegram
|
|
15
|
-
NEMORIS_TELEGRAM_CHAT_ID= # Your Telegram user/chat ID
|
|
16
|
-
NEMORIS_ALLOW_ANY_CHAT=false # true = accept messages from any chat (dev only)
|
|
17
|
-
NEMORIS_ALLOW_TELEGRAM_DELIVERY=true # false = suppress outbound Telegram messages
|
|
18
|
-
|
|
19
|
-
# ---- Slack (optional) -------------------------------------
|
|
20
|
-
SLACK_BOT_TOKEN= # xoxb-... from Slack App dashboard
|
|
21
|
-
SLACK_SIGNING_SECRET= # From Slack App dashboard → Basic Info
|
|
22
|
-
|
|
23
|
-
# ---- Ollama (optional — local inference) ------------------
|
|
24
|
-
# Install from https://ollama.com then run: nemoris setup ollama
|
|
25
|
-
OLLAMA_BASE_URL=http://localhost:11434 # Override if Ollama runs on a different port
|
|
26
|
-
NEMORIS_OLLAMA_MODEL=kimi-k2.5 # Default local model
|
|
27
|
-
|
|
28
|
-
# ---- Runtime tuning (optional) ----------------------------
|
|
29
|
-
NEMORIS_RATE_LIMIT_MAX=10 # Max messages per window (default: 10)
|
|
30
|
-
NEMORIS_RATE_LIMIT_WINDOW_MS=60000 # Rate limit window in ms (default: 60000)
|
|
31
|
-
NEMORIS_IDENTITY_CACHE_TTL_MS=300000 # Identity cache TTL in ms (default: 5 min)
|
|
32
|
-
|
|
33
|
-
# ---- Provider mode (required at startup) ------------------
|
|
34
|
-
NEMORIS_ALLOW_PROVIDER_MODE=remote # "remote" or "local"
|
|
35
|
-
NEMORIS_ALLOW_REMOTE_PROVIDER_MODE=true
|
|
36
|
-
|
|
37
|
-
# ---- Advanced / internal ----------------------------------
|
|
38
|
-
NEMORIS_AGENT_NAME= # Override default agent name
|
|
39
|
-
NEMORIS_LIVE_ROOT= # Override live root path
|
|
40
|
-
NEMORIS_INIT_MODE= # "fresh" forces re-initialisation
|
|
41
|
-
NEMORIS_QUIET=false # Suppress startup logs
|
|
42
|
-
ANTHROPIC_THINKING_ENABLED=false # Enable /think extended thinking mode
|
|
43
|
-
|
|
44
|
-
# ---- Semantic embeddings (local via Ollama nomic-embed-text) --
|
|
45
|
-
# NEMORIS_ALLOW_EMBEDDINGS=1
|
|
46
|
-
# NEMORIS_ALLOW_REMOTE_EMBEDDINGS=0
|
|
47
|
-
|
|
48
|
-
# ---- Feature flags ----------------------------------------
|
|
49
|
-
NEMORIS_WEBHOOK_SECRET= # Optional — validates Telegram webhook payloads
|
|
1
|
+
# ============================================================
|
|
2
|
+
# Nemoris — Environment Variables
|
|
3
|
+
# Copy this file to .env and fill in your values
|
|
4
|
+
# Run: nemoris setup (walks you through the essentials)
|
|
5
|
+
# ============================================================
|
|
6
|
+
|
|
7
|
+
# ---- Anthropic (required for cloud AI) --------------------
|
|
8
|
+
NEMORIS_ANTHROPIC_API_KEY= # Get from console.anthropic.com
|
|
9
|
+
|
|
10
|
+
# ---- OpenRouter (optional — fallback + Perplexity search) --
|
|
11
|
+
OPENROUTER_API_KEY= # Get from openrouter.ai
|
|
12
|
+
|
|
13
|
+
# ---- Telegram (required for Telegram channel) -------------
|
|
14
|
+
NEMORIS_TELEGRAM_BOT_TOKEN= # From @BotFather on Telegram
|
|
15
|
+
NEMORIS_TELEGRAM_CHAT_ID= # Your Telegram user/chat ID
|
|
16
|
+
NEMORIS_ALLOW_ANY_CHAT=false # true = accept messages from any chat (dev only)
|
|
17
|
+
NEMORIS_ALLOW_TELEGRAM_DELIVERY=true # false = suppress outbound Telegram messages
|
|
18
|
+
|
|
19
|
+
# ---- Slack (optional) -------------------------------------
|
|
20
|
+
SLACK_BOT_TOKEN= # xoxb-... from Slack App dashboard
|
|
21
|
+
SLACK_SIGNING_SECRET= # From Slack App dashboard → Basic Info
|
|
22
|
+
|
|
23
|
+
# ---- Ollama (optional — local inference) ------------------
|
|
24
|
+
# Install from https://ollama.com then run: nemoris setup ollama
|
|
25
|
+
OLLAMA_BASE_URL=http://localhost:11434 # Override if Ollama runs on a different port
|
|
26
|
+
NEMORIS_OLLAMA_MODEL=kimi-k2.5 # Default local model
|
|
27
|
+
|
|
28
|
+
# ---- Runtime tuning (optional) ----------------------------
|
|
29
|
+
NEMORIS_RATE_LIMIT_MAX=10 # Max messages per window (default: 10)
|
|
30
|
+
NEMORIS_RATE_LIMIT_WINDOW_MS=60000 # Rate limit window in ms (default: 60000)
|
|
31
|
+
NEMORIS_IDENTITY_CACHE_TTL_MS=300000 # Identity cache TTL in ms (default: 5 min)
|
|
32
|
+
|
|
33
|
+
# ---- Provider mode (required at startup) ------------------
|
|
34
|
+
NEMORIS_ALLOW_PROVIDER_MODE=remote # "remote" or "local"
|
|
35
|
+
NEMORIS_ALLOW_REMOTE_PROVIDER_MODE=true
|
|
36
|
+
|
|
37
|
+
# ---- Advanced / internal ----------------------------------
|
|
38
|
+
NEMORIS_AGENT_NAME= # Override default agent name
|
|
39
|
+
NEMORIS_LIVE_ROOT= # Override live root path
|
|
40
|
+
NEMORIS_INIT_MODE= # "fresh" forces re-initialisation
|
|
41
|
+
NEMORIS_QUIET=false # Suppress startup logs
|
|
42
|
+
ANTHROPIC_THINKING_ENABLED=false # Enable /think extended thinking mode
|
|
43
|
+
|
|
44
|
+
# ---- Semantic embeddings (local via Ollama nomic-embed-text) --
|
|
45
|
+
# NEMORIS_ALLOW_EMBEDDINGS=1
|
|
46
|
+
# NEMORIS_ALLOW_REMOTE_EMBEDDINGS=0
|
|
47
|
+
|
|
48
|
+
# ---- Feature flags ----------------------------------------
|
|
49
|
+
NEMORIS_WEBHOOK_SECRET= # Optional — validates Telegram webhook payloads
|
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Lee Anderson
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Lee Anderson
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,209 +1,209 @@
|
|
|
1
|
-
<p align="left">
|
|
2
|
-
<img src="assets/logo.svg" alt="Nemoris" width="600">
|
|
3
|
-
</p>
|
|
4
|
-
|
|
5
|
-
[](https://npmjs.com/package/nemoris)
|
|
6
|
-
[](LICENSE)
|
|
7
|
-
[](https://github.com/amzer24/nemoris/actions/workflows/main.yml)
|
|
8
|
-
[](https://nodejs.org)
|
|
9
|
-
|
|
10
|
-
A personal AI agent runtime. Runs locally. Persistent memory, delivery guarantees, scheduled jobs, and self-healing — no cloud, no lock-in.
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
npm install -g nemoris
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
Most agent frameworks give you a chatbot that forgets everything between sessions and silently drops messages when something breaks.
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## Why Nemoris
|
|
21
|
-
|
|
22
|
-
Nemoris fixes this with three things that actually work:
|
|
23
|
-
|
|
24
|
-
### Active Memory
|
|
25
|
-
SQLite-backed semantic memory with embeddings, salience scoring, deduplication, and compaction. Your agents remember what matters across sessions — not just within them.
|
|
26
|
-
|
|
27
|
-
### Delivery Guarantees
|
|
28
|
-
Criticality-classified message delivery with retry pipelines, ack tracking, and pending decision management. Messages don't get lost. Decisions don't fall through cracks.
|
|
29
|
-
|
|
30
|
-
### Task Contracts
|
|
31
|
-
Structured task lifecycle with state machines, escalation chains, and explicit completion signals. When an agent starts something, it finishes it — or tells you why it didn't.
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## Quick Start
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
# Install globally
|
|
39
|
-
npm install -g nemoris
|
|
40
|
-
|
|
41
|
-
# Interactive setup (~2 minutes)
|
|
42
|
-
nemoris setup
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
You'll need an API key from Anthropic or OpenRouter — or just use Ollama for free local models.
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
# Start the daemon
|
|
49
|
-
nemoris start
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
The setup wizard connects a provider, optionally wires up Telegram, and starts your first agent. Coming from OpenClaw? Run `nemoris migrate` — agents, jobs, and memory import in under 2 minutes.
|
|
53
|
-
|
|
54
|
-
### Requirements
|
|
55
|
-
|
|
56
|
-
- **Node.js >= 22**
|
|
57
|
-
- **Ollama** (optional — free local models via [ollama.ai](https://ollama.ai))
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## Providers
|
|
62
|
-
|
|
63
|
-
- **Anthropic** (Claude) — direct API with prompt caching
|
|
64
|
-
- **OpenRouter** — access to 100+ models
|
|
65
|
-
- **Ollama** — free local models, zero cloud dependency
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## What You Get
|
|
70
|
-
|
|
71
|
-
| Feature | What it does |
|
|
72
|
-
|---------|-------------|
|
|
73
|
-
| **Active Memory** | Semantic search, embeddings, salience scoring, dedup, compaction — all in SQLite |
|
|
74
|
-
| **Self-Healing** | Nurse system with health probes, automatic repair, rule promotion, severity-tiered notifications |
|
|
75
|
-
| **Exec Approval** | Side-effect gating — approve or deny shell commands from Telegram before they run |
|
|
76
|
-
| **Task Contracts** | State machine lifecycle, escalation chains, completion pings, multi-agent coordination |
|
|
77
|
-
| **Context Compaction** | DAG-based session summarisation — long conversations stay fast and relevant |
|
|
78
|
-
| **Runtime Resilience** | Circuit breaker, near-duplicate detection, idempotent retries |
|
|
79
|
-
| **Session Search** | FTS5 full-text search over conversation history via `/search` and `session_search` tool |
|
|
80
|
-
| **MCP Consumer** | Connect external MCP servers as native tools — filesystem, GitHub, databases, anything |
|
|
81
|
-
| **Vision** | Telegram photos processed by vision-capable models |
|
|
82
|
-
| **Scheduled Jobs** | Cron-triggered and ad-hoc jobs land in the same unified queue as interactive messages |
|
|
83
|
-
| **Multi-Agent** | Agents trigger each other via task contracts and completion pings |
|
|
84
|
-
| **Telegram** | Chat with agents from your phone — slash commands, photos, reactions |
|
|
85
|
-
| **OpenClaw Migration** | Full import of agents, jobs, and memory |
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## CLI Commands
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
nemoris setup # Interactive setup wizard
|
|
93
|
-
nemoris start # Start the daemon
|
|
94
|
-
nemoris stop # Stop the daemon
|
|
95
|
-
nemoris status # Show running agents, jobs, providers
|
|
96
|
-
nemoris doctor # Health check and dependency report
|
|
97
|
-
nemoris migrate # Import from OpenClaw
|
|
98
|
-
nemoris mcp list # Show connected MCP servers and tools
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
## Telegram Commands
|
|
102
|
-
|
|
103
|
-
| Command | Description |
|
|
104
|
-
|---------|-------------|
|
|
105
|
-
| `/switch` | Switch who you're talking to |
|
|
106
|
-
| `/who` | Show current agent |
|
|
107
|
-
| `/status` | System status and usage |
|
|
108
|
-
| `/cost` | Today / week / month spending totals |
|
|
109
|
-
| `/search` | Search conversation history |
|
|
110
|
-
| `/logs` | Tail recent daemon logs |
|
|
111
|
-
| `/model` | Change AI model — `/model sonnet \| haiku \| opus` |
|
|
112
|
-
| `/clear` | Start a fresh conversation |
|
|
113
|
-
| `/stop` | Cancel current task |
|
|
114
|
-
| `/compact` | Free up memory (keeps recent turns) |
|
|
115
|
-
| `/exec_approve <id>` | Approve a pending exec command |
|
|
116
|
-
| `/exec_deny <id>` | Deny a pending exec command |
|
|
117
|
-
| `/agents` | List available agents |
|
|
118
|
-
| `/help` | Show all commands |
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## Architecture
|
|
123
|
-
|
|
124
|
-
Nemoris runs as a single background daemon on your machine — no Docker, no cloud. Inbound messages enter a unified queue alongside scheduled jobs. The drain loop hydrates context (memory, history, tools), calls the LLM, executes tool calls with approval gating, writes to memory, and delivers responses. The Nurse watches everything and repairs what breaks.
|
|
125
|
-
|
|
126
|
-
```
|
|
127
|
-
Telegram / MCP / CLI
|
|
128
|
-
│
|
|
129
|
-
┌─────▼──────┐
|
|
130
|
-
│ Inbound │
|
|
131
|
-
│ Handler │
|
|
132
|
-
└─────┬──────┘
|
|
133
|
-
│
|
|
134
|
-
┌─────▼──────┐ ┌────────────┐
|
|
135
|
-
│ Unified │◄────│ Scheduled │
|
|
136
|
-
│ Queue │ │ Jobs │
|
|
137
|
-
└─────┬──────┘ └────────────┘
|
|
138
|
-
│
|
|
139
|
-
┌─────▼──────┐
|
|
140
|
-
│ Drain │
|
|
141
|
-
│ Loop │
|
|
142
|
-
└─────┬──────┘
|
|
143
|
-
│
|
|
144
|
-
┌─────▼──────────────────────────────────┐
|
|
145
|
-
│ Executor │
|
|
146
|
-
│ ┌──────┐ ┌───────┐ ┌──────────────┐ │
|
|
147
|
-
│ │ LLM ├──► Tools ├──► Memory Write │ │
|
|
148
|
-
│ └──────┘ └───┬───┘ └──────────────┘ │
|
|
149
|
-
│ │ │
|
|
150
|
-
│ ┌──────▼──────┐ │
|
|
151
|
-
│ │ Exec Approve│ │
|
|
152
|
-
│ └─────────────┘ │
|
|
153
|
-
└─────┬──────────────────────────────────┘
|
|
154
|
-
│
|
|
155
|
-
┌─────▼──────┐ ┌────────────┐
|
|
156
|
-
│ Delivery │ │ Nurse │
|
|
157
|
-
│ Pipeline │ │ (healing) │
|
|
158
|
-
└─────┬──────┘ └──────┬─────┘
|
|
159
|
-
│ │
|
|
160
|
-
┌─────▼───┐ ┌────▼─────┐
|
|
161
|
-
│Telegram │ │ Probes & │
|
|
162
|
-
│Agent │ │ Repair │
|
|
163
|
-
│Webhook │ └──────────┘
|
|
164
|
-
└─────────┘
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## Platform Support
|
|
170
|
-
|
|
171
|
-
| Platform | Service Manager | Status |
|
|
172
|
-
|----------|----------------|--------|
|
|
173
|
-
| macOS | launchd | Full support |
|
|
174
|
-
| Linux | systemd (user) | Full support |
|
|
175
|
-
| Windows | PM2 | Supported (WSL2 recommended) |
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## Development
|
|
180
|
-
|
|
181
|
-
Requires Node.js >= 22.
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
git clone https://github.com/amzer24/nemoris.git
|
|
185
|
-
cd nemoris
|
|
186
|
-
npm install
|
|
187
|
-
npm test #
|
|
188
|
-
npm run test:e2e # End-to-end tests
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
Agents are configured in TOML with their own identity files, memory, tool access, and workspace context. See `docs/` for specs and architecture decisions.
|
|
192
|
-
|
|
193
|
-
---
|
|
194
|
-
|
|
195
|
-
## Contributing
|
|
196
|
-
|
|
197
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
|
|
198
|
-
|
|
199
|
-
Please read our [Code of Conduct](CODE_OF_CONDUCT.md) before participating.
|
|
200
|
-
|
|
201
|
-
## Security
|
|
202
|
-
|
|
203
|
-
See [SECURITY.md](SECURITY.md) for our security policy and how to report vulnerabilities.
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
## License
|
|
208
|
-
|
|
209
|
-
[MIT](LICENSE)
|
|
1
|
+
<p align="left">
|
|
2
|
+
<img src="assets/logo.svg" alt="Nemoris" width="600">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
[](https://npmjs.com/package/nemoris)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](https://github.com/amzer24/nemoris/actions/workflows/main.yml)
|
|
8
|
+
[](https://nodejs.org)
|
|
9
|
+
|
|
10
|
+
A personal AI agent runtime. Runs locally. Persistent memory, delivery guarantees, scheduled jobs, and self-healing — no cloud, no lock-in.
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install -g nemoris
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Most agent frameworks give you a chatbot that forgets everything between sessions and silently drops messages when something breaks.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Why Nemoris
|
|
21
|
+
|
|
22
|
+
Nemoris fixes this with three things that actually work:
|
|
23
|
+
|
|
24
|
+
### Active Memory
|
|
25
|
+
SQLite-backed semantic memory with embeddings, salience scoring, deduplication, and compaction. Your agents remember what matters across sessions — not just within them.
|
|
26
|
+
|
|
27
|
+
### Delivery Guarantees
|
|
28
|
+
Criticality-classified message delivery with retry pipelines, ack tracking, and pending decision management. Messages don't get lost. Decisions don't fall through cracks.
|
|
29
|
+
|
|
30
|
+
### Task Contracts
|
|
31
|
+
Structured task lifecycle with state machines, escalation chains, and explicit completion signals. When an agent starts something, it finishes it — or tells you why it didn't.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Quick Start
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Install globally
|
|
39
|
+
npm install -g nemoris
|
|
40
|
+
|
|
41
|
+
# Interactive setup (~2 minutes)
|
|
42
|
+
nemoris setup
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
You'll need an API key from Anthropic or OpenRouter — or just use Ollama for free local models.
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Start the daemon
|
|
49
|
+
nemoris start
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The setup wizard connects a provider, optionally wires up Telegram, and starts your first agent. Coming from OpenClaw? Run `nemoris migrate` — agents, jobs, and memory import in under 2 minutes.
|
|
53
|
+
|
|
54
|
+
### Requirements
|
|
55
|
+
|
|
56
|
+
- **Node.js >= 22**
|
|
57
|
+
- **Ollama** (optional — free local models via [ollama.ai](https://ollama.ai))
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Providers
|
|
62
|
+
|
|
63
|
+
- **Anthropic** (Claude) — direct API with prompt caching
|
|
64
|
+
- **OpenRouter** — access to 100+ models
|
|
65
|
+
- **Ollama** — free local models, zero cloud dependency
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## What You Get
|
|
70
|
+
|
|
71
|
+
| Feature | What it does |
|
|
72
|
+
|---------|-------------|
|
|
73
|
+
| **Active Memory** | Semantic search, embeddings, salience scoring, dedup, compaction — all in SQLite |
|
|
74
|
+
| **Self-Healing** | Nurse system with health probes, automatic repair, rule promotion, severity-tiered notifications |
|
|
75
|
+
| **Exec Approval** | Side-effect gating — approve or deny shell commands from Telegram before they run |
|
|
76
|
+
| **Task Contracts** | State machine lifecycle, escalation chains, completion pings, multi-agent coordination |
|
|
77
|
+
| **Context Compaction** | DAG-based session summarisation — long conversations stay fast and relevant |
|
|
78
|
+
| **Runtime Resilience** | Circuit breaker, near-duplicate detection, idempotent retries |
|
|
79
|
+
| **Session Search** | FTS5 full-text search over conversation history via `/search` and `session_search` tool |
|
|
80
|
+
| **MCP Consumer** | Connect external MCP servers as native tools — filesystem, GitHub, databases, anything |
|
|
81
|
+
| **Vision** | Telegram photos processed by vision-capable models |
|
|
82
|
+
| **Scheduled Jobs** | Cron-triggered and ad-hoc jobs land in the same unified queue as interactive messages |
|
|
83
|
+
| **Multi-Agent** | Agents trigger each other via task contracts and completion pings |
|
|
84
|
+
| **Telegram** | Chat with agents from your phone — slash commands, photos, reactions |
|
|
85
|
+
| **OpenClaw Migration** | Full import of agents, jobs, and memory |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## CLI Commands
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
nemoris setup # Interactive setup wizard
|
|
93
|
+
nemoris start # Start the daemon
|
|
94
|
+
nemoris stop # Stop the daemon
|
|
95
|
+
nemoris status # Show running agents, jobs, providers
|
|
96
|
+
nemoris doctor # Health check and dependency report
|
|
97
|
+
nemoris migrate # Import from OpenClaw
|
|
98
|
+
nemoris mcp list # Show connected MCP servers and tools
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Telegram Commands
|
|
102
|
+
|
|
103
|
+
| Command | Description |
|
|
104
|
+
|---------|-------------|
|
|
105
|
+
| `/switch` | Switch who you're talking to |
|
|
106
|
+
| `/who` | Show current agent |
|
|
107
|
+
| `/status` | System status and usage |
|
|
108
|
+
| `/cost` | Today / week / month spending totals |
|
|
109
|
+
| `/search` | Search conversation history |
|
|
110
|
+
| `/logs` | Tail recent daemon logs |
|
|
111
|
+
| `/model` | Change AI model — `/model sonnet \| haiku \| opus` |
|
|
112
|
+
| `/clear` | Start a fresh conversation |
|
|
113
|
+
| `/stop` | Cancel current task |
|
|
114
|
+
| `/compact` | Free up memory (keeps recent turns) |
|
|
115
|
+
| `/exec_approve <id>` | Approve a pending exec command |
|
|
116
|
+
| `/exec_deny <id>` | Deny a pending exec command |
|
|
117
|
+
| `/agents` | List available agents |
|
|
118
|
+
| `/help` | Show all commands |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Architecture
|
|
123
|
+
|
|
124
|
+
Nemoris runs as a single background daemon on your machine — no Docker, no cloud. Inbound messages enter a unified queue alongside scheduled jobs. The drain loop hydrates context (memory, history, tools), calls the LLM, executes tool calls with approval gating, writes to memory, and delivers responses. The Nurse watches everything and repairs what breaks.
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Telegram / MCP / CLI
|
|
128
|
+
│
|
|
129
|
+
┌─────▼──────┐
|
|
130
|
+
│ Inbound │
|
|
131
|
+
│ Handler │
|
|
132
|
+
└─────┬──────┘
|
|
133
|
+
│
|
|
134
|
+
┌─────▼──────┐ ┌────────────┐
|
|
135
|
+
│ Unified │◄────│ Scheduled │
|
|
136
|
+
│ Queue │ │ Jobs │
|
|
137
|
+
└─────┬──────┘ └────────────┘
|
|
138
|
+
│
|
|
139
|
+
┌─────▼──────┐
|
|
140
|
+
│ Drain │
|
|
141
|
+
│ Loop │
|
|
142
|
+
└─────┬──────┘
|
|
143
|
+
│
|
|
144
|
+
┌─────▼──────────────────────────────────┐
|
|
145
|
+
│ Executor │
|
|
146
|
+
│ ┌──────┐ ┌───────┐ ┌──────────────┐ │
|
|
147
|
+
│ │ LLM ├──► Tools ├──► Memory Write │ │
|
|
148
|
+
│ └──────┘ └───┬───┘ └──────────────┘ │
|
|
149
|
+
│ │ │
|
|
150
|
+
│ ┌──────▼──────┐ │
|
|
151
|
+
│ │ Exec Approve│ │
|
|
152
|
+
│ └─────────────┘ │
|
|
153
|
+
└─────┬──────────────────────────────────┘
|
|
154
|
+
│
|
|
155
|
+
┌─────▼──────┐ ┌────────────┐
|
|
156
|
+
│ Delivery │ │ Nurse │
|
|
157
|
+
│ Pipeline │ │ (healing) │
|
|
158
|
+
└─────┬──────┘ └──────┬─────┘
|
|
159
|
+
│ │
|
|
160
|
+
┌─────▼───┐ ┌────▼─────┐
|
|
161
|
+
│Telegram │ │ Probes & │
|
|
162
|
+
│Agent │ │ Repair │
|
|
163
|
+
│Webhook │ └──────────┘
|
|
164
|
+
└─────────┘
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Platform Support
|
|
170
|
+
|
|
171
|
+
| Platform | Service Manager | Status |
|
|
172
|
+
|----------|----------------|--------|
|
|
173
|
+
| macOS | launchd | Full support |
|
|
174
|
+
| Linux | systemd (user) | Full support |
|
|
175
|
+
| Windows | PM2 | Supported (WSL2 recommended) |
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Development
|
|
180
|
+
|
|
181
|
+
Requires Node.js >= 22.
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
git clone https://github.com/amzer24/nemoris.git
|
|
185
|
+
cd nemoris
|
|
186
|
+
npm install
|
|
187
|
+
npm test # 1403 tests
|
|
188
|
+
npm run test:e2e # End-to-end tests
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Agents are configured in TOML with their own identity files, memory, tool access, and workspace context. See `docs/` for specs and architecture decisions.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Contributing
|
|
196
|
+
|
|
197
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
|
|
198
|
+
|
|
199
|
+
Please read our [Code of Conduct](CODE_OF_CONDUCT.md) before participating.
|
|
200
|
+
|
|
201
|
+
## Security
|
|
202
|
+
|
|
203
|
+
See [SECURITY.md](SECURITY.md) for our security policy and how to report vulnerabilities.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## License
|
|
208
|
+
|
|
209
|
+
[MIT](LICENSE)
|