recallnest 2.6.1 → 3.0.1
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/CHANGELOG.md +292 -0
- package/README.md +280 -195
- package/README_CN.md +266 -199
- package/config.json.example +8 -1
- package/docs/api-reference.md +1 -1
- package/integrations/README.md +1 -1
- package/integrations/agy/README.md +73 -0
- package/integrations/agy/setup.sh +75 -0
- package/integrations/setup-all.sh +1 -1
- package/package.json +7 -5
- package/src/access-tracker.ts +10 -1
- package/src/activity-counter.ts +69 -11
- package/src/age-label.ts +29 -0
- package/src/audit-log.ts +35 -0
- package/src/auto-gc.ts +97 -30
- package/src/capture-engine.ts +26 -4
- package/src/cli.ts +224 -10
- package/src/consolidation-engine.ts +317 -123
- package/src/context-composer-stable.ts +5 -1
- package/src/data-checkup.ts +17 -3
- package/src/dream-pipeline.ts +90 -12
- package/src/embedder.ts +44 -5
- package/src/env-config.ts +71 -0
- package/src/forget-engine.ts +8 -2
- package/src/gateway-server.ts +272 -0
- package/src/ingest.ts +248 -22
- package/src/kg-extractor.ts +17 -0
- package/src/llm-client.ts +86 -25
- package/src/mcp-server.ts +2 -1
- package/src/mcp-tools-advanced.ts +7 -2
- package/src/mcp-tools-core.ts +11 -1
- package/src/mcp-tools-governance.ts +45 -3
- package/src/memory-evolution.ts +16 -0
- package/src/memory-output.ts +47 -8
- package/src/memory-promotion.ts +280 -0
- package/src/memory-store-port.ts +32 -3
- package/src/memory-utility.ts +314 -0
- package/src/pivot-apply.ts +52 -1
- package/src/pivot-evidence.ts +128 -0
- package/src/ppr-traversal.ts +25 -1
- package/src/recall-ledger.ts +76 -0
- package/src/retriever.ts +82 -9
- package/src/runtime-config.ts +9 -0
- package/src/scope-policy.ts +22 -1
- package/src/session-engine.ts +11 -4
- package/src/session-output.ts +13 -4
- package/src/session-store.ts +2 -3
- package/src/skill-promotion.ts +218 -1
- package/src/store.ts +231 -71
- package/src/synthesis-contract.ts +286 -0
- package/src/version-manager.ts +83 -0
- package/src/workflow-observation-schema.ts +26 -0
- package/integrations/gemini-cli/README.md +0 -57
- package/integrations/gemini-cli/setup.sh +0 -64
- package/src/__tests__/access-tracker-novelty.test.ts +0 -304
- package/src/__tests__/activity-counter.test.ts +0 -125
- package/src/__tests__/adaptive-fidelity.test.ts +0 -102
- package/src/__tests__/admission-control.test.ts +0 -206
- package/src/__tests__/anchor-generator.test.ts +0 -67
- package/src/__tests__/api-server-security.test.ts +0 -102
- package/src/__tests__/auto-consolidation.test.ts +0 -168
- package/src/__tests__/auto-recall.test.ts +0 -131
- package/src/__tests__/babel-integration.test.ts +0 -144
- package/src/__tests__/batch-dedup.test.ts +0 -65
- package/src/__tests__/belief-history.test.ts +0 -220
- package/src/__tests__/canary-eval.test.ts +0 -114
- package/src/__tests__/capture-engine.test.ts +0 -1328
- package/src/__tests__/capture-heuristic.test.ts +0 -171
- package/src/__tests__/cascade-forget.test.ts +0 -210
- package/src/__tests__/category-min-scores.test.ts +0 -116
- package/src/__tests__/cc8-cc1-essential-context.test.ts +0 -298
- package/src/__tests__/circuit-breaker.test.ts +0 -99
- package/src/__tests__/cluster-consolidation.test.ts +0 -945
- package/src/__tests__/confidence-metadata.test.ts +0 -125
- package/src/__tests__/confidence-tracker.test.ts +0 -261
- package/src/__tests__/conflict-advisor.test.ts +0 -206
- package/src/__tests__/conflict-escalation.test.ts +0 -149
- package/src/__tests__/conflict-lifecycle.test.ts +0 -83
- package/src/__tests__/conflict-output.test.ts +0 -85
- package/src/__tests__/conflict-store.test.ts +0 -418
- package/src/__tests__/connector-v1.test.ts +0 -181
- package/src/__tests__/consolidation-engine.test.ts +0 -430
- package/src/__tests__/constructive-retrieval.test.ts +0 -509
- package/src/__tests__/context-collapse-renderer.test.ts +0 -214
- package/src/__tests__/context-composer-pins.test.ts +0 -64
- package/src/__tests__/context-composer-task-selection.test.ts +0 -24
- package/src/__tests__/context-reconstructor.test.ts +0 -65
- package/src/__tests__/context-renderer.test.ts +0 -91
- package/src/__tests__/continuity-eval.test.ts +0 -275
- package/src/__tests__/continuity-schema.test.ts +0 -97
- package/src/__tests__/contracts.test.ts +0 -262
- package/src/__tests__/conversation-importer.test.ts +0 -692
- package/src/__tests__/core-recall-eval.test.ts +0 -235
- package/src/__tests__/core-summary.test.ts +0 -109
- package/src/__tests__/data-checkup.test.ts +0 -276
- package/src/__tests__/decay-exemption.test.ts +0 -129
- package/src/__tests__/dedup-actions.test.ts +0 -58
- package/src/__tests__/dedup-guard.test.ts +0 -39
- package/src/__tests__/deterministic-id.test.ts +0 -39
- package/src/__tests__/distill-lock.test.ts +0 -305
- package/src/__tests__/distill-session-argshape.test.ts +0 -79
- package/src/__tests__/doctor.test.ts +0 -319
- package/src/__tests__/dream-pipeline.test.ts +0 -780
- package/src/__tests__/drill-down.test.ts +0 -108
- package/src/__tests__/embedder.test.ts +0 -122
- package/src/__tests__/emotion-decay.test.ts +0 -46
- package/src/__tests__/emotion-detector.test.ts +0 -56
- package/src/__tests__/emotion-phase1-integration.test.ts +0 -153
- package/src/__tests__/emotion-retrieval.test.ts +0 -56
- package/src/__tests__/entity-resolver.test.ts +0 -58
- package/src/__tests__/env-config.test.ts +0 -151
- package/src/__tests__/error-signature-boost.test.ts +0 -87
- package/src/__tests__/error-signature.test.ts +0 -95
- package/src/__tests__/error-taxonomy.test.ts +0 -129
- package/src/__tests__/ethics-layer.test.ts +0 -476
- package/src/__tests__/event-segmenter.test.ts +0 -153
- package/src/__tests__/feature-flags-integration.test.ts +0 -54
- package/src/__tests__/frequency-tracker.test.ts +0 -113
- package/src/__tests__/freshness.test.ts +0 -186
- package/src/__tests__/graph-export.test.ts +0 -489
- package/src/__tests__/hotness-blend.test.ts +0 -283
- package/src/__tests__/ingest-chunking.test.ts +0 -44
- package/src/__tests__/ingest.test.ts +0 -360
- package/src/__tests__/interference-detector.test.ts +0 -203
- package/src/__tests__/kg-extractor.test.ts +0 -192
- package/src/__tests__/kg-store.test.ts +0 -300
- package/src/__tests__/llm-client-pivot.test.ts +0 -628
- package/src/__tests__/llm-consolidation.test.ts +0 -226
- package/src/__tests__/maintenance-locks.test.ts +0 -189
- package/src/__tests__/mcp-efficiency.test.ts +0 -288
- package/src/__tests__/mcp-related-scopes.test.ts +0 -151
- package/src/__tests__/memory-boundaries.test.ts +0 -282
- package/src/__tests__/memory-evolution-b2-b3-e1.test.ts +0 -345
- package/src/__tests__/memory-evolution.test.ts +0 -271
- package/src/__tests__/memory-health-rebalance.test.ts +0 -144
- package/src/__tests__/memory-lint.test.ts +0 -421
- package/src/__tests__/memory-output.test.ts +0 -215
- package/src/__tests__/memory-promotion.test.ts +0 -315
- package/src/__tests__/migrate-dedup-ids.test.ts +0 -65
- package/src/__tests__/multi-vector.test.ts +0 -242
- package/src/__tests__/narrative-architecture.test.ts +0 -456
- package/src/__tests__/noise-filter.test.ts +0 -205
- package/src/__tests__/noise-prototype-bank.test.ts +0 -280
- package/src/__tests__/obsidian-connector.test.ts +0 -363
- package/src/__tests__/omitted-reporting.test.ts +0 -98
- package/src/__tests__/pending-review.test.ts +0 -77
- package/src/__tests__/pii-redact.test.ts +0 -333
- package/src/__tests__/pivot-apply.test.ts +0 -373
- package/src/__tests__/pivot-distill-supervisor.test.ts +0 -457
- package/src/__tests__/pivot-distill.test.ts +0 -1178
- package/src/__tests__/post-retrieval-filter.test.ts +0 -178
- package/src/__tests__/ppr-traversal.test.ts +0 -256
- package/src/__tests__/prediction-engine.test.ts +0 -349
- package/src/__tests__/predictive-prospective-memory.test.ts +0 -416
- package/src/__tests__/preference-guard-smoke.test.ts +0 -211
- package/src/__tests__/preference-matcher.test.ts +0 -282
- package/src/__tests__/preference-slots.test.ts +0 -205
- package/src/__tests__/prospective-memory.test.ts +0 -283
- package/src/__tests__/pull-from-macbook-sync-only.test.ts +0 -679
- package/src/__tests__/query-entity-detector.test.ts +0 -171
- package/src/__tests__/query-expander-alias.test.ts +0 -146
- package/src/__tests__/query-expander.test.ts +0 -34
- package/src/__tests__/recall-gate.test.ts +0 -266
- package/src/__tests__/recall-governor.test.ts +0 -227
- package/src/__tests__/recall-mode.test.ts +0 -64
- package/src/__tests__/resolve-db-path.test.ts +0 -130
- package/src/__tests__/resolve-tier.test.ts +0 -64
- package/src/__tests__/result-synthesizer.test.ts +0 -198
- package/src/__tests__/resume-context.test.ts +0 -4898
- package/src/__tests__/retrieval-eval.test.ts +0 -163
- package/src/__tests__/retrieval-trace.test.ts +0 -213
- package/src/__tests__/retriever-boundary-weight.test.ts +0 -136
- package/src/__tests__/retriever-lazy-init-dispatch.test.ts +0 -123
- package/src/__tests__/retroactive-boost.test.ts +0 -223
- package/src/__tests__/salience-scoring.test.ts +0 -106
- package/src/__tests__/scope-inventory.test.ts +0 -200
- package/src/__tests__/scope-policy.test.ts +0 -69
- package/src/__tests__/scope-suggester.test.ts +0 -80
- package/src/__tests__/session-checkpoint.test.ts +0 -291
- package/src/__tests__/session-distiller.test.ts +0 -640
- package/src/__tests__/session-gc.test.ts +0 -215
- package/src/__tests__/skill-engine.test.ts +0 -552
- package/src/__tests__/skill-promotion.test.ts +0 -654
- package/src/__tests__/skill-verifier.test.ts +0 -122
- package/src/__tests__/source-heartbeat.test.ts +0 -250
- package/src/__tests__/stable-context-length-contract.test.ts +0 -62
- package/src/__tests__/store-patch-metadata.test.ts +0 -205
- package/src/__tests__/store-read-consistency.test.ts +0 -122
- package/src/__tests__/store-schema-migration.test.ts +0 -87
- package/src/__tests__/store-scope-audit.test.ts +0 -81
- package/src/__tests__/store-upsert.test.ts +0 -201
- package/src/__tests__/supersede-chain.test.ts +0 -154
- package/src/__tests__/temporal-parser.test.ts +0 -241
- package/src/__tests__/temporal-validity.test.ts +0 -160
- package/src/__tests__/term-registry-terminal-roster.test.ts +0 -127
- package/src/__tests__/term-registry.test.ts +0 -121
- package/src/__tests__/tool-error-surfacing.test.ts +0 -98
- package/src/__tests__/tool-output-compressor.test.ts +0 -160
- package/src/__tests__/topic-tag.test.ts +0 -113
- package/src/__tests__/trusted-memory.test.ts +0 -839
- package/src/__tests__/ui-server-security.test.ts +0 -93
- package/src/__tests__/usage-tracker.test.ts +0 -287
- package/src/__tests__/version-manager.test.ts +0 -213
- package/src/__tests__/workflow-observation-skill-outcome.test.ts +0 -352
- package/src/__tests__/workflow-observation.test.ts +0 -433
- package/src/__tests__/write-verifier.test.ts +0 -122
- /package/integrations/{gemini-cli/gemini-md-snippet.md → agy/agy-md-snippet.md} +0 -0
package/README.md
CHANGED
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
# RecallNest
|
|
4
4
|
|
|
5
|
-
**Shared Memory Layer for
|
|
5
|
+
**Shared Memory Layer for Every AI Client — CLI agents, desktop apps, your own scripts**
|
|
6
6
|
|
|
7
|
-
*One memory. Every
|
|
7
|
+
*One memory. Every client. Context that survives across windows — and across machines.*
|
|
8
8
|
|
|
9
9
|
A local-first memory system backed by LanceDB that turns scattered conversation history into reusable knowledge — shared across your coding agents, recalled automatically.
|
|
10
10
|
|
|
11
11
|
[](https://github.com/AliceLJY/recallnest)
|
|
12
12
|
[](LICENSE)
|
|
13
|
-
[](https://bun.sh)
|
|
14
14
|
[](https://lancedb.com)
|
|
15
|
-
[](https://modelcontextprotocol.io)
|
|
16
16
|
[](https://github.com/AliceLJY/recallnest/actions/workflows/ci.yml)
|
|
17
17
|
[](https://github.com/AliceLJY/recallnest)
|
|
18
18
|
|
|
@@ -26,115 +26,38 @@ A local-first memory system backed by LanceDB that turns scattered conversation
|
|
|
26
26
|
|
|
27
27
|
Coding agents forget everything between windows. Your context — project configs, debugging decisions, entity mappings — is scattered across Claude Code, Codex, Kimi, Antigravity — and every other terminal you open — with no shared memory.
|
|
28
28
|
|
|
29
|
-
RecallNest
|
|
29
|
+
RecallNest is **one LanceDB-backed memory layer that all of them read and write**. Context stored in one window is recalled in another. Sessions checkpoint on exit and resume on start. Memory decays, evolves, and self-organizes — it is not a log you grep.
|
|
30
30
|
|
|
31
|
+
### What a recall actually looks like
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
```text
|
|
34
|
+
Query : deploy rollback
|
|
35
|
+
Hits : 5
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
# ID Score Category Tier Source Date Age Retrieval Path
|
|
38
|
+
1 ee79037a 46.1% cases peripheral cc 2026-08-25 2d vector
|
|
39
|
+
[assistant] Rolled back to the previous image and pinned the digest so the next…
|
|
40
|
+
prov : evidence/transcript-ingest
|
|
41
|
+
imgs : 52 agent-made in this session · read sess=dca70d4a
|
|
39
42
|
```
|
|
40
43
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
Claude Code prompts for a Jina API key during installation. The key is stored through Claude Code's sensitive plugin configuration, while the generated config and LanceDB database live in the plugin's persistent data directory rather than the versioned plugin cache.
|
|
44
|
+
Three things in that block carry most of the design:
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
- **`Source cc` · `Age 2d`** — this came out of a Claude Code window two days ago and you
|
|
47
|
+
are reading it from a different terminal, possibly on a different machine. That is the
|
|
48
|
+
premise the whole project is built on.
|
|
49
|
+
- **`prov : evidence/…`** — every row states which layer it sits on. A fragment scraped out
|
|
50
|
+
of a transcript never gets to pose as a decision you actually made; moving to durable
|
|
51
|
+
memory is a separate, gated step with its own evidence requirement.
|
|
52
|
+
- **`imgs : …`** — that session contained 52 images. **Not one of them is in the database.**
|
|
53
|
+
The line exists so you know there is something to go look at, and producing it cost no
|
|
54
|
+
model call, no vector, and no storage.
|
|
48
55
|
|
|
49
|
-
|
|
56
|
+
That last one is the approach in miniature: **store what makes a thing findable, not
|
|
57
|
+
everything that could ever be asked about it.** The full reasoning — including the two
|
|
58
|
+
places where the obvious implementation was wrong — is in
|
|
59
|
+
[Images: addressable, not embedded](#images-addressable-not-embedded).
|
|
50
60
|
|
|
51
|
-
```bash
|
|
52
|
-
npx recallnest --help # run directly
|
|
53
|
-
# or
|
|
54
|
-
npm install -g recallnest # install globally
|
|
55
|
-
recallnest doctor
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
Works with Node.js 18+ (via tsx) or Bun. No git clone needed.
|
|
59
|
-
|
|
60
|
-
### Option C: Manual setup
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
git clone https://github.com/AliceLJY/recallnest.git
|
|
64
|
-
cd recallnest
|
|
65
|
-
bun install
|
|
66
|
-
cp config.json.example config.json
|
|
67
|
-
cp .env.example .env
|
|
68
|
-
# Edit .env → add your JINA_API_KEY
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Start the server
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
bun run api
|
|
75
|
-
# → RecallNest API running at http://localhost:4318
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### Try it
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
# Store a memory
|
|
82
|
-
curl -X POST http://localhost:4318/v1/store \
|
|
83
|
-
-H "Content-Type: application/json" \
|
|
84
|
-
-d '{"text": "User prefers dark mode", "category": "preferences"}'
|
|
85
|
-
|
|
86
|
-
# Recall memories
|
|
87
|
-
curl -X POST http://localhost:4318/v1/recall \
|
|
88
|
-
-H "Content-Type: application/json" \
|
|
89
|
-
-d '{"query": "user preferences"}'
|
|
90
|
-
|
|
91
|
-
# Check stats
|
|
92
|
-
curl http://localhost:4318/v1/stats
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### Connect your terminals
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
bash integrations/claude-code/setup.sh
|
|
99
|
-
bash integrations/gemini-cli/setup.sh
|
|
100
|
-
bash integrations/codex/setup.sh
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
Each script installs MCP access and managed continuity rules, so `resume_context` fires automatically in fresh windows.
|
|
104
|
-
|
|
105
|
-
### Index existing conversations
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
bun run src/cli.ts ingest --source all
|
|
109
|
-
bun run seed:continuity
|
|
110
|
-
bun run src/cli.ts doctor
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## Web UI
|
|
116
|
-
|
|
117
|
-
<p align="center">
|
|
118
|
-
<img src="assets/dashboard.png" alt="RecallNest Dashboard" width="800" />
|
|
119
|
-
<br><em>Dashboard — total count, category distribution, health score, and growth trends at a glance.</em>
|
|
120
|
-
</p>
|
|
121
|
-
|
|
122
|
-
<p align="center">
|
|
123
|
-
<img src="assets/screenshots/ui-full.png" alt="RecallNest Search Workbench" width="800" />
|
|
124
|
-
<br><em>Search Workbench — hybrid search with topic tag filtering, 4 retrieval profiles, Skills browser, and asset management.</em>
|
|
125
|
-
</p>
|
|
126
|
-
|
|
127
|
-
<p align="center">
|
|
128
|
-
<img src="assets/knowledge-graph.png" alt="RecallNest Knowledge Graph" width="800" />
|
|
129
|
-
<br><em>Knowledge Graph — interactive force-directed visualization with semantic bridges revealing cross-domain connections.</em>
|
|
130
|
-
</p>
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
bun run src/ui-server.ts
|
|
134
|
-
# → http://localhost:4317
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
---
|
|
138
61
|
|
|
139
62
|
## Core Capabilities
|
|
140
63
|
|
|
@@ -196,134 +119,251 @@ bun run src/ui-server.ts
|
|
|
196
119
|
|
|
197
120
|
---
|
|
198
121
|
|
|
199
|
-
##
|
|
122
|
+
## Architecture
|
|
200
123
|
|
|
201
|
-
|
|
124
|
+
```
|
|
125
|
+
CLIENTS ACCESS CORE ENGINE STORAGE
|
|
126
|
+
────────────────────── ─────────────────────── ──────────────────────────── ──────────────────────
|
|
127
|
+
|
|
128
|
+
Claude Code MCP over stdio Retriever LanceDB
|
|
129
|
+
Codex ───▶ 44 tools, 3 tiers ───▶ vector + BM25 + RRF ───▶ vector + columnar
|
|
130
|
+
Kimi · Antigravity Classifier · 6 categories
|
|
131
|
+
Doubao desktop Context composer
|
|
132
|
+
HTTP API :4318 resume_context Jina embeddings v5
|
|
133
|
+
your scripts · cron ───▶ 21 endpoints ───▶ Decay · Weibull half-life ─▶ 1024-dim, task-aware
|
|
134
|
+
Conflict · audit + merge
|
|
135
|
+
phone app ───▶ read-only gateway ───▶ Capture: evidence → durable
|
|
136
|
+
:8791, token-gated
|
|
137
|
+
```
|
|
202
138
|
|
|
203
|
-
|
|
204
|
-
- **Safer memory evolution** — belief changes preserve the old row as `superseded`; procedural memories avoid time decay; cold-start and length-normalization behavior no longer suppress short entity queries or stable memories.
|
|
205
|
-
- **More reliable consolidation** — `dream` now distinguishes failure classes, honors wall-clock budgets, refills vectors before semantic clustering, and asserts that successful runs actually produced work.
|
|
206
|
-
- **Broader conversation coverage** — Kimi, AGY/Antigravity, and minis sources are recognized across ingestion, scope boundaries, and term resolution.
|
|
207
|
-
- **One public version** — npm metadata, CLI `--version`, MCP handshakes, HTTP health responses, and the Claude Code marketplace all follow the `2.6.0` release contract.
|
|
208
|
-
- **Installable Claude Code plugin** — installation now registers the 43-tool MCP server and continuity skill, asks for the Jina key through sensitive plugin configuration, and keeps config plus LanceDB data in Claude Code's persistent plugin data directory.
|
|
139
|
+
### Internal Design
|
|
209
140
|
|
|
210
|
-
|
|
141
|
+
- **L0 / L1 / L2 Dynamic Folding** — every memory stores 3 granularity layers (one-liner / bullet summary / full content); retrieval dynamically selects which layer to return based on relevance score and token budget
|
|
142
|
+
- **Weibull Decay + Emotion Modulation** — memories decay along a parametric Weibull curve; importance scores modulate the half-life, and emotional salience extends it further (up to 30%)
|
|
143
|
+
- **Vector Pre-filter + LLM Dedup** — 90% of dedup decisions use cheap cosine similarity (>= 0.92); only borderline cases invoke LLM judgment, keeping costs low without sacrificing accuracy
|
|
144
|
+
- **Category-Aware Merge Strategies** — `profile` and `preferences` use merge-on-conflict (latest wins); `events` and `cases` use append-only (history preserved)
|
|
145
|
+
- **Display Score vs Elimination Score** — dual-track retrieval: tier floor prevents core memories from ever dropping out, while decay boost lets fresh memories surface temporarily without permanently displacing stable ones
|
|
211
146
|
|
|
212
|
-
|
|
213
|
-
- Plugin data survives plugin updates because it is stored outside the versioned cache. A manual clone continues to use its existing `config.json` and database path.
|
|
214
|
-
- Retrieval auditing now includes read operations. `audit.jsonl` has no automatic rotation yet; consider archiving it if it approaches 50 MB.
|
|
215
|
-
- `RECALLNEST_LAYER_ADMISSION` remains opt-in (`observe` or `on`); the default is `off`.
|
|
147
|
+
> Full architecture deep-dive: [`docs/architecture.md`](docs/architecture.md)
|
|
216
148
|
|
|
217
149
|
---
|
|
218
150
|
|
|
219
|
-
##
|
|
151
|
+
## Who Can Connect
|
|
220
152
|
|
|
221
|
-
|
|
153
|
+
**The data layer does not know what your client looks like.** RecallNest exposes the same LanceDB store through three outlets, so the right one is picked per client — not per protocol.
|
|
222
154
|
|
|
223
|
-
|
|
155
|
+
| What your client can do | Route | Verified with |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| Run a local command (CLI agent) | **MCP over stdio** | Claude Code, Codex, Kimi, Antigravity |
|
|
158
|
+
| Run a local command (GUI app, MCP config filled by hand) | **MCP over stdio** | Doubao desktop — same shape as Cherry Studio / ChatBox |
|
|
159
|
+
| Only speak HTTP | **HTTP API** | custom agents, scripts, cron |
|
|
160
|
+
| Run on another machine | swap the stdio command for `ssh <host> recallnest-mcp` | four clients on a laptop reading one store on a home server |
|
|
224
161
|
|
|
225
|
-
|
|
162
|
+
Two consequences worth stating plainly:
|
|
226
163
|
|
|
227
|
-
- **
|
|
164
|
+
- **Not tied to one protocol.** A GUI chat app that supports MCP config connects the same way a terminal agent does. A client that can only issue HTTP requests still reads the same memory.
|
|
165
|
+
- **Not tied to one machine.** Because the MCP transport is stdio, the launch command is yours to define — point it at `ssh` and every client on every machine shares a single source of truth instead of each host growing its own database.
|
|
228
166
|
|
|
229
|
-
|
|
167
|
+
Adding a client does not mean changing RecallNest. A capable client writes one config line; a limited one gets a thin gateway in front of the HTTP API.
|
|
230
168
|
|
|
231
|
-
|
|
169
|
+
### AI apps on a phone: the read-only gateway
|
|
232
170
|
|
|
233
|
-
|
|
171
|
+
The HTTP API (`:4318`) binds to `127.0.0.1` and rejects any request whose Host header is not local. That is **deliberate** — it also exposes write routes (`/v1/store`, `/v1/checkpoint`), so putting it on a public address would hand out write access.
|
|
234
172
|
|
|
235
|
-
|
|
173
|
+
To let an AI app on your phone read the same memory, put a read-only gateway in front:
|
|
236
174
|
|
|
237
|
-
|
|
175
|
+
```bash
|
|
176
|
+
openssl rand -hex 32 > ~/.config/recallnest/gateway-token
|
|
177
|
+
chmod 600 ~/.config/recallnest/gateway-token
|
|
238
178
|
|
|
239
|
-
|
|
179
|
+
bun run api # local API on :4318
|
|
180
|
+
bun run gateway # read-only gateway on :8791 → forwards to :4318
|
|
181
|
+
```
|
|
240
182
|
|
|
241
|
-
|
|
183
|
+
The gateway allows read routes only (`/recall`, `/search`, `/stats`, `/health`); **every write route is a 404**. Bearer token compared in constant time, per-minute rate limit, hard caps on request and response size. Put it behind a tunnel (Tailscale Serve/Funnel, Cloudflare Tunnel, …) to reach it from a phone.
|
|
242
184
|
|
|
243
|
-
|
|
185
|
+
```bash
|
|
186
|
+
curl -X POST https://<your-tunnel>/recall \
|
|
187
|
+
-H "Authorization: Bearer $(cat ~/.config/recallnest/gateway-token)" \
|
|
188
|
+
-H 'content-type: application/json' \
|
|
189
|
+
-d '{"query":"how did we fix that deploy issue","limit":3,"allScopes":true}'
|
|
190
|
+
```
|
|
244
191
|
|
|
245
|
-
|
|
192
|
+
Optional: set `RECALLNEST_GATEWAY_FILE_ROOTS="notes=/abs/path,wiki=/abs/path"` to add `GET /files/search`, a read-only ripgrep search over markdown directories you name (the query is passed as an argv element, never through a shell). Leave it unset and the route does not exist.
|
|
246
193
|
|
|
247
|
-
|
|
194
|
+
> The gateway also binds to `127.0.0.1` by default — exposing it is the tunnel's job. Evaluate that risk yourself.
|
|
248
195
|
|
|
249
|
-
|
|
196
|
+
This is how the author connected [OpenMinis](https://github.com/OpenMinis/OpenMinis) on an iPhone: the phone app reaches the gateway over a Tailscale Funnel and queries the same memory store. The interesting part is what it reads back — its own history. Those conversations get exported, flow back, and are indexed, so a phone agent that cold-starts every time ends up with memory that survives its sessions.
|
|
250
197
|
|
|
251
|
-
## New in v2.3: Connector Ecosystem + Source Health
|
|
252
198
|
|
|
253
|
-
v2.2 hardened retrieval quality; v2.3 opens RecallNest to external data sources with a standard connector framework and operational health monitoring.
|
|
254
199
|
|
|
255
|
-
|
|
200
|
+
## Quick Start
|
|
256
201
|
|
|
257
|
-
|
|
202
|
+
### Option A: Claude Code Plugin (recommended)
|
|
258
203
|
|
|
259
|
-
|
|
204
|
+
```bash
|
|
205
|
+
/plugin marketplace add AliceLJY/recallnest
|
|
206
|
+
/plugin install recallnest@AliceLJY
|
|
207
|
+
```
|
|
260
208
|
|
|
261
|
-
|
|
209
|
+
RecallNest starts automatically with Claude Code. No manual MCP config needed.
|
|
262
210
|
|
|
263
|
-
|
|
211
|
+
Claude Code prompts for a Jina API key during installation. The key is stored through Claude Code's sensitive plugin configuration, while the generated config and LanceDB database live in the plugin's persistent data directory rather than the versioned plugin cache.
|
|
212
|
+
|
|
213
|
+
> The Claude Code plugin and npm package share one release version and are updated together.
|
|
214
|
+
>
|
|
215
|
+
> **Requires:** [Bun](https://bun.sh). Dependencies install on first start.
|
|
264
216
|
|
|
217
|
+
### Option B: npm install
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
npx recallnest --help # run directly
|
|
221
|
+
# or
|
|
222
|
+
npm install -g recallnest # install globally
|
|
223
|
+
recallnest doctor
|
|
265
224
|
```
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
│ ┌─────────────────────┐ ┌────────────────────────────┐ │
|
|
279
|
-
│ │ MCP Server │ │ HTTP API Server │ │
|
|
280
|
-
│ │ 43 tools │ │ 21 endpoints │ │
|
|
281
|
-
│ └─────────┬───────────┘ └──────────┬─────────────────┘ │
|
|
282
|
-
└────────────┼─────────────────────────┼───────────────────┘
|
|
283
|
-
└──────────┬──────────────┘
|
|
284
|
-
▼
|
|
285
|
-
┌──────────────────────────────────────────────────────────┐
|
|
286
|
-
│ Core Engine │
|
|
287
|
-
│ │
|
|
288
|
-
│ ┌────────────┐ ┌────────────┐ ┌─────────────────────┐ │
|
|
289
|
-
│ │ Retriever │ │ Classifier │ │ Context Composer │ │
|
|
290
|
-
│ │ (vector + │ │ (6 cats) │ │ (resume_context) │ │
|
|
291
|
-
│ │ BM25 + RRF)│ │ │ │ │ │
|
|
292
|
-
│ └────────────┘ └────────────┘ └──────────────────────┘ │
|
|
293
|
-
│ ┌────────────┐ ┌────────────┐ ┌─────────────────────┐ │
|
|
294
|
-
│ │ Decay │ │ Conflict │ │ Capture Engine │ │
|
|
295
|
-
│ │ Engine │ │ Engine │ │ (evidence → durable) │ │
|
|
296
|
-
│ │ (Weibull) │ │ (audit + │ │ │ │
|
|
297
|
-
│ │ │ │ merge) │ │ │ │
|
|
298
|
-
│ └────────────┘ └────────────┘ └──────────────────────┘ │
|
|
299
|
-
└──────────────────────────┬───────────────────────────────┘
|
|
300
|
-
▼
|
|
301
|
-
┌──────────────────────────────────────────────────────────┐
|
|
302
|
-
│ Storage Layer │
|
|
303
|
-
│ ┌─────────────────────┐ ┌────────────────────────────┐ │
|
|
304
|
-
│ │ LanceDB │ │ Jina Embeddings v5 │ │
|
|
305
|
-
│ │ (vector + columnar) │ │ (1024-dim, task-aware) │ │
|
|
306
|
-
│ └─────────────────────┘ └────────────────────────────┘ │
|
|
307
|
-
└──────────────────────────────────────────────────────────┘
|
|
225
|
+
|
|
226
|
+
Works with Node.js 22+ (via tsx) or Bun. No git clone needed.
|
|
227
|
+
|
|
228
|
+
### Option C: Manual setup
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
git clone https://github.com/AliceLJY/recallnest.git
|
|
232
|
+
cd recallnest
|
|
233
|
+
bun install
|
|
234
|
+
cp config.json.example config.json
|
|
235
|
+
cp .env.example .env
|
|
236
|
+
# Edit .env → add your JINA_API_KEY
|
|
308
237
|
```
|
|
309
238
|
|
|
310
|
-
###
|
|
239
|
+
### Start the server
|
|
311
240
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
- **Display Score vs Elimination Score** — dual-track retrieval: tier floor prevents core memories from ever dropping out, while decay boost lets fresh memories surface temporarily without permanently displacing stable ones
|
|
241
|
+
```bash
|
|
242
|
+
bun run api
|
|
243
|
+
# → RecallNest API running at http://localhost:4318
|
|
244
|
+
```
|
|
317
245
|
|
|
318
|
-
|
|
246
|
+
### Try it
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
# Store a memory
|
|
250
|
+
curl -X POST http://localhost:4318/v1/store \
|
|
251
|
+
-H "Content-Type: application/json" \
|
|
252
|
+
-d '{"text": "User prefers dark mode", "category": "preferences"}'
|
|
253
|
+
|
|
254
|
+
# Recall memories
|
|
255
|
+
curl -X POST http://localhost:4318/v1/recall \
|
|
256
|
+
-H "Content-Type: application/json" \
|
|
257
|
+
-d '{"query": "user preferences"}'
|
|
258
|
+
|
|
259
|
+
# Check stats
|
|
260
|
+
curl http://localhost:4318/v1/stats
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### Connect your terminals
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
bash integrations/claude-code/setup.sh
|
|
267
|
+
bash integrations/agy/setup.sh
|
|
268
|
+
bash integrations/codex/setup.sh
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Each script installs MCP access and managed continuity rules, so `resume_context` fires automatically in fresh windows.
|
|
272
|
+
|
|
273
|
+
### Index existing conversations
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
bun run src/cli.ts ingest --source all
|
|
277
|
+
bun run seed:continuity
|
|
278
|
+
bun run src/cli.ts doctor
|
|
279
|
+
```
|
|
319
280
|
|
|
320
281
|
---
|
|
321
282
|
|
|
283
|
+
## Images: addressable, not embedded
|
|
284
|
+
|
|
285
|
+
Conversations contain images. A text memory layer does not. The usual answer is a
|
|
286
|
+
multimodal embedding model — encode every image into the same space as the text. That is
|
|
287
|
+
right for photo libraries. It is the wrong shape here, for a cheap reason: **in a
|
|
288
|
+
conversation an image almost never arrives alone.** It comes wrapped in "look at this
|
|
289
|
+
error", and the reply right after it usually describes what was in the picture. The words
|
|
290
|
+
around the image are already an index of it. What was missing was never semantic search
|
|
291
|
+
over pixels — it was knowing a picture is sitting there at all.
|
|
292
|
+
|
|
293
|
+
So RecallNest does not encode images. It records **how many images are in the session a
|
|
294
|
+
memory came from**, and lets you decide whether to open the original transcript. Meaning
|
|
295
|
+
is resolved on demand, by whatever model is asking, at the moment it matters.
|
|
296
|
+
|
|
297
|
+
The cost is worth stating plainly: **no multimodal model, no re-embedding, no image
|
|
298
|
+
storage, no change to any vector.** Backfilling 21,319 existing memories touched metadata
|
|
299
|
+
only.
|
|
300
|
+
|
|
301
|
+
Two design choices in it were not obvious, and both were wrong on the first attempt.
|
|
302
|
+
|
|
303
|
+
### Session-level, on purpose
|
|
304
|
+
|
|
305
|
+
The marker counts the whole session, not the turn — coarser than it first looks like it
|
|
306
|
+
should be, and the coarseness is the point.
|
|
307
|
+
|
|
308
|
+
A turn that is nothing but a pasted screenshot has almost no text, so it never cleared the
|
|
309
|
+
length gate and never entered the store. Measured on real transcripts, **12.5% of turns
|
|
310
|
+
containing a pasted image were dropped whole** — including the ones worth the most, like
|
|
311
|
+
seven screenshots with no caption, or "here are the steps" attached to a picture that *is*
|
|
312
|
+
the steps. A turn-level marker has nothing to attach to for exactly those. A session-level
|
|
313
|
+
marker lands on that session's *other* memories, which did get stored, and those are what
|
|
314
|
+
a search surfaces.
|
|
315
|
+
|
|
316
|
+
The trade-off is undisguised: every memory from a session carries the same count, so the
|
|
317
|
+
images may have nothing to do with the row you are looking at. The line says
|
|
318
|
+
`in this session`, not `in this memory`, for that reason.
|
|
319
|
+
|
|
320
|
+
### Two classes, because they answer different questions
|
|
321
|
+
|
|
322
|
+
| Bucket | What it is | The question it answers |
|
|
323
|
+
|---|---|---|
|
|
324
|
+
| user-pasted | Pictures a human put into a message | *Where is that screenshot I sent?* |
|
|
325
|
+
| agent-made | Everything else the session produced | *What did the page look like? What did I generate?* |
|
|
326
|
+
|
|
327
|
+
Keeping only the first is tempting — a person searching their own memory wants their own
|
|
328
|
+
screenshots. But an agent reconstructing its past work wants the other: the diagram it
|
|
329
|
+
drew, the rendering it captured, the illustration it made for a post. **Of 1,767 sessions
|
|
330
|
+
carrying images, 1,103 contain no human-pasted image at all.** Keep one bucket and those
|
|
331
|
+
sessions go silent — precisely the ones where the agent did visual work.
|
|
332
|
+
|
|
333
|
+
### The second bucket is a complement, not a list
|
|
334
|
+
|
|
335
|
+
The first implementation defined agent-made images by enumeration: inside `tool_result`,
|
|
336
|
+
inside `payload.output`, inside `tool.result`. Every location was real. The list was still
|
|
337
|
+
wrong, because **the set of ways an image can appear only grows**, and an enumeration
|
|
338
|
+
silently drops whatever it did not anticipate.
|
|
339
|
+
|
|
340
|
+
So the second bucket is a complement: count every image signal in the record, subtract the
|
|
341
|
+
ones positively identified as human-pasted, attribute the rest without asking where it came
|
|
342
|
+
from. Across 9,619 transcripts:
|
|
343
|
+
|
|
344
|
+
| | Enumerated | Complement |
|
|
345
|
+
|---|---|---|
|
|
346
|
+
| Agent-made images | 5,812 | **10,938** |
|
|
347
|
+
| Sessions with any image | 1,507 | **1,767** |
|
|
348
|
+
| Human-pasted images | 1,629 | 1,629 |
|
|
349
|
+
|
|
350
|
+
**The enumeration missed 5,126 images and 376 sessions** — nearly half. The largest class
|
|
351
|
+
it dropped was image *generation*, which lives in neither container the list knew about.
|
|
352
|
+
Human-pasted counts are identical under both definitions, which is the check that matters:
|
|
353
|
+
widening the second bucket did not contaminate the precise one. A regression test feeds the
|
|
354
|
+
parser an `image_generation_call` — a shape the source never names — and asserts it lands
|
|
355
|
+
in the second bucket; under the enumerated implementation that test fails.
|
|
356
|
+
|
|
357
|
+
One caveat: the complement counts *signals*, not certified pictures. A single generation can
|
|
358
|
+
leave both a call and a completion record and be counted twice. That direction was chosen
|
|
359
|
+
deliberately — the question is "is there anything here to look at", not "exactly how many".
|
|
360
|
+
|
|
361
|
+
|
|
322
362
|
## Interfaces
|
|
323
363
|
|
|
324
364
|
RecallNest serves two interfaces:
|
|
325
365
|
|
|
326
|
-
- **MCP** — for any
|
|
366
|
+
- **MCP (stdio)** — for any client that can launch a command: CLI agents (Claude Code, Codex, Kimi, Antigravity) and GUI apps that accept an MCP config (Doubao, Cherry Studio, ChatBox)
|
|
327
367
|
- **HTTP API** — for custom agents, SDK-based apps, and any HTTP client
|
|
328
368
|
|
|
329
369
|
### Agent framework examples
|
|
@@ -339,7 +379,7 @@ Examples live in [`integrations/examples/`](integrations/examples/):
|
|
|
339
379
|
---
|
|
340
380
|
|
|
341
381
|
<details>
|
|
342
|
-
<summary><strong>MCP Tools (
|
|
382
|
+
<summary><strong>MCP Tools (44 tools)</strong></summary>
|
|
343
383
|
|
|
344
384
|
| Tool | Description |
|
|
345
385
|
|------|-------------|
|
|
@@ -351,6 +391,7 @@ Examples live in [`integrations/examples/`](integrations/examples/):
|
|
|
351
391
|
| `store_case` | Store a reusable problem-solution pair as durable `cases` memory |
|
|
352
392
|
| `promote_memory` | Explicitly promote evidence into durable memory |
|
|
353
393
|
| `promote_scan` | Scan recent evidence and auto-promote qualifying memories into durable storage |
|
|
394
|
+
| `promote_synthesis` | Scan dream-synthesized conclusions and promote the ones their own evidence set supports |
|
|
354
395
|
| `list_conflicts` | List or inspect promotion conflict candidates |
|
|
355
396
|
| `audit_conflicts` | Summarize stale/escalated conflict priorities |
|
|
356
397
|
| `escalate_conflicts` | Preview or apply conflict escalation metadata |
|
|
@@ -463,6 +504,48 @@ bun run src/cli.ts doctor
|
|
|
463
504
|
|
|
464
505
|
---
|
|
465
506
|
|
|
507
|
+
## Web UI
|
|
508
|
+
|
|
509
|
+
<p align="center">
|
|
510
|
+
<img src="assets/dashboard.png" alt="RecallNest Dashboard" width="800" />
|
|
511
|
+
<br><em>Dashboard — total count, category distribution, health score, and growth trends at a glance.</em>
|
|
512
|
+
</p>
|
|
513
|
+
|
|
514
|
+
<p align="center">
|
|
515
|
+
<img src="assets/screenshots/ui-full.png" alt="RecallNest Search Workbench" width="800" />
|
|
516
|
+
<br><em>Search Workbench — hybrid search with topic tag filtering, 4 retrieval profiles, Skills browser, and asset management.</em>
|
|
517
|
+
</p>
|
|
518
|
+
|
|
519
|
+
<p align="center">
|
|
520
|
+
<img src="assets/knowledge-graph.png" alt="RecallNest Knowledge Graph" width="800" />
|
|
521
|
+
<br><em>Knowledge Graph — interactive force-directed visualization with semantic bridges revealing cross-domain connections.</em>
|
|
522
|
+
</p>
|
|
523
|
+
|
|
524
|
+
```bash
|
|
525
|
+
bun run src/ui-server.ts
|
|
526
|
+
# → http://localhost:4317
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
---
|
|
530
|
+
|
|
531
|
+
## What's new
|
|
532
|
+
|
|
533
|
+
**v3.0** raised the runtime floor to **Node 22** (the only breaking change — Bun users are
|
|
534
|
+
unaffected) and gave synthesized conclusions a road into stable memory: a `dream` insight
|
|
535
|
+
can now be promoted on the strength of its own validated evidence set, instead of being
|
|
536
|
+
permanently stuck on the evidence layer where nothing downstream could lean on it.
|
|
537
|
+
|
|
538
|
+
It also fixed a rate-limit reply that could trigger an unbounded request storm — measured
|
|
539
|
+
at over 61,000 requests in five seconds against an endpoint asking us to slow down. Found
|
|
540
|
+
by the new HTTP contract tests, which drive the real client classes against a loopback
|
|
541
|
+
server instead of stubbing the SDK.
|
|
542
|
+
|
|
543
|
+
Existing LanceDB data opens in place; there is no export or import step.
|
|
544
|
+
|
|
545
|
+
**Full history — v3.0 through v1.0, with the upgrade notes for each — is in
|
|
546
|
+
[CHANGELOG.md](CHANGELOG.md).**
|
|
547
|
+
|
|
548
|
+
|
|
466
549
|
## Multilingual Support
|
|
467
550
|
|
|
468
551
|
RecallNest works out of the box with English. For multilingual memory (Chinese, Japanese, Thai, and 20+ more), install [babel-memory](https://github.com/AliceLJY/babel-memory) with the language packs you need:
|
|
@@ -492,6 +575,8 @@ RecallNest auto-detects babel-memory at startup — no configuration needed. Wit
|
|
|
492
575
|
|
|
493
576
|
RecallNest is actively maintained. All major architecture phases are complete — see the full [Roadmap](ROADMAP.md) for current priorities and future plans.
|
|
494
577
|
|
|
578
|
+
Maintainers: see [Publishing RecallNest](https://github.com/AliceLJY/recallnest/blob/main/docs/releasing.md) for the npm Trusted Publishing, validation, and recovery process.
|
|
579
|
+
|
|
495
580
|
---
|
|
496
581
|
|
|
497
582
|
## Relationship to memory-lancedb-pro
|
|
@@ -499,7 +584,7 @@ RecallNest is actively maintained. All major architecture phases are complete
|
|
|
499
584
|
RecallNest started as a fork of [memory-lancedb-pro](https://github.com/CortexReach/memory-lancedb-pro) and shares its core ideas around hybrid retrieval, decay modeling, and memory-as-engineering-system. The key difference:
|
|
500
585
|
|
|
501
586
|
- **memory-lancedb-pro** is an OpenClaw plugin — it adds long-term memory to a single OpenClaw agent.
|
|
502
|
-
- **RecallNest** is a standalone memory layer — it serves
|
|
587
|
+
- **RecallNest** is a standalone memory layer — it serves CLI agents, GUI chat apps and plain HTTP callers simultaneously through MCP + HTTP API, with session continuity, structured assets, and conflict management built in.
|
|
503
588
|
|
|
504
589
|
## Credit
|
|
505
590
|
|
|
@@ -520,9 +605,9 @@ Part of the **小试AI** open-source AI workflow:
|
|
|
520
605
|
|---------|-------------|
|
|
521
606
|
| [babel-memory](https://github.com/AliceLJY/babel-memory) | Multilingual preprocessing for BM25 — 27+ languages, zero deps |
|
|
522
607
|
| cc-empire *(private)* | Hooks/rules/methodology — the connective tissue of the whole ecosystem |
|
|
523
|
-
| [telegram-ai-bridge](https://github.com/AliceLJY/telegram-ai-bridge) | Telegram bots for Claude, Codex, and
|
|
608
|
+
| [telegram-ai-bridge](https://github.com/AliceLJY/telegram-ai-bridge) | Telegram bots for Claude, Codex, Agy, and Kimi |
|
|
524
609
|
| [tg-bridge-channel](https://github.com/AliceLJY/tg-bridge-channel) | Sister Telegram bridge using Claude Agent View background sessions |
|
|
525
|
-
| [wechat-ai-bridge](https://github.com/AliceLJY/wechat-ai-bridge) | Run Claude Code / Codex
|
|
610
|
+
| [wechat-ai-bridge](https://github.com/AliceLJY/wechat-ai-bridge) | Run Claude Code / Codex in WeChat with session management |
|
|
526
611
|
| [openclaw-tunnel](https://github.com/AliceLJY/openclaw-tunnel) | Docker ↔ host CLI bridge (maintenance mode — LanceDB test only) |
|
|
527
612
|
| [digital-clone-skill](https://github.com/AliceLJY/digital-clone-skill) | Build digital clones from corpus data |
|
|
528
613
|
| [claude-code-studio](https://github.com/AliceLJY/claude-code-studio) | Multi-session collaboration platform for Claude Code |
|