# toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded)
## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style
Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.
- tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03
## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool
Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation.
- tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03
## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs
Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.
- tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03
# toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded)
# toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded)
## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style
Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.
- tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03
## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool
Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation.
- tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03
## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs
Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.
- tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03
# toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded)
version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1
[200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}:
6f9fa0c7|decision|stack:nextjs|Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.||stack;decision|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 6f9fa0c7|decision|stack:nextjs|Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.||stack;decision|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
7a3a4867|bug|redis-pool|Redis pool: cap at 10 connections to avoid socket timeouts on saturation.||redis;bug|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 7a3a4867|bug|redis-pool|Redis pool: cap at 10 connections to avoid socket timeouts on saturation.||redis;bug|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
ce358636|pattern|commit-style|Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.||git;pattern|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 ce358636|pattern|commit-style|Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.||git;pattern|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1
[200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}:
2d299473|decision|graph-single-component|All graph APIs must render a single connected component.||graph;api|2026-07-31||0||0.7|1|2026-07-31T09:12:00.000Z|0 2d299473|decision|graph-single-component|All graph APIs must render a single connected component.||graph;api|2026-07-31||0||0.7|1|2026-07-31T09:12:00.000Z|0
e4b00a8c|warning|ttl-default|Entries expire after 7 days by default. Set ttl per entry.||ttl;default|2026-07-30||0||0.7|1|2026-07-30T09:12:00.000Z|0 e4b00a8c|warning|ttl-default|Entries expire after 7 days by default. Set ttl per entry.||ttl;default|2026-07-30||0||0.7|1|2026-07-30T09:12:00.000Z|0
8a7e25e7|knowledge|storage-format|Memory lives in .toon-memory/memory/data.toon as pipe-delimited rows.||storage;format|2026-07-29||0||0.7|1|2026-07-29T09:12:00.000Z|0 8a7e25e7|knowledge|storage-format|Memory lives in .toon-memory/memory/data.toon as pipe-delimited rows.||storage;format|2026-07-29||0||0.7|1|2026-07-29T09:12:00.000Z|0
version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1
[200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}:
6f9fa0c7|decision|stack:nextjs|Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.||stack;decision|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 6f9fa0c7|decision|stack:nextjs|Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.||stack;decision|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
7a3a4867|bug|redis-pool|Redis pool: cap at 10 connections to avoid socket timeouts on saturation.||redis;bug|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 7a3a4867|bug|redis-pool|Redis pool: cap at 10 connections to avoid socket timeouts on saturation.||redis;bug|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
ce358636|pattern|commit-style|Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.||git;pattern|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 ce358636|pattern|commit-style|Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.||git;pattern|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
8a7e25e7|knowledge|storage-format|Memory lives in .toon-memory/memory/data.toon as pipe-delimited rows.||storage;format|2026-07-29||0||0.7|1|2026-07-29T09:12:00.000Z|0 8a7e25e7|knowledge|storage-format|Memory lives in .toon-memory/memory/data.toon as pipe-delimited rows.||storage;format|2026-07-29||0||0.7|1|2026-07-29T09:12:00.000Z|0
version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1
[200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}:
6f9fa0c7|decision|stack:nextjs|Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.||stack;decision|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 6f9fa0c7|decision|stack:nextjs|Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.||stack;decision|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
7a3a4867|bug|redis-pool|Redis pool: cap at 10 connections to avoid socket timeouts on saturation.||redis;bug|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 7a3a4867|bug|redis-pool|Redis pool: cap at 10 connections to avoid socket timeouts on saturation.||redis;bug|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
ce358636|pattern|commit-style|Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.||git;pattern|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 ce358636|pattern|commit-style|Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.||git;pattern|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1
[200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}:
2d299473|decision|graph-single-component|All graph APIs must render a single connected component.||graph;api|2026-07-31||0||0.7|1|2026-07-31T09:12:00.000Z|0 2d299473|decision|graph-single-component|All graph APIs must render a single connected component.||graph;api|2026-07-31||0||0.7|1|2026-07-31T09:12:00.000Z|0
e4b00a8c|warning|ttl-default|Entries expire after 7 days by default. Set ttl per entry.||ttl;default|2026-07-30||0||0.7|1|2026-07-30T09:12:00.000Z|0 e4b00a8c|warning|ttl-default|Entries expire after 7 days by default. Set ttl per entry.||ttl;default|2026-07-30||0||0.7|1|2026-07-30T09:12:00.000Z|0
8a7e25e7|knowledge|storage-format|Memory lives in .toon-memory/memory/data.toon as pipe-delimited rows.||storage;format|2026-07-29||0||0.7|1|2026-07-29T09:12:00.000Z|0 8a7e25e7|knowledge|storage-format|Memory lives in .toon-memory/memory/data.toon as pipe-delimited rows.||storage;format|2026-07-29||0||0.7|1|2026-07-29T09:12:00.000Z|0
version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1 version: 1
[200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}: [200|]{id|category|key|content|file|tags|date|ttl|accessed|links}:
6f9fa0c7|decision|stack:nextjs|Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.||stack;decision|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 6f9fa0c7|decision|stack:nextjs|Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.||stack;decision|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
7a3a4867|bug|redis-pool|Redis pool: cap at 10 connections to avoid socket timeouts on saturation.||redis;bug|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 7a3a4867|bug|redis-pool|Redis pool: cap at 10 connections to avoid socket timeouts on saturation.||redis;bug|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
ce358636|pattern|commit-style|Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.||git;pattern|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0 ce358636|pattern|commit-style|Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.||git;pattern|2026-08-03||0||0.7|1|2026-08-03T09:12:00.000Z|0
8a7e25e7|knowledge|storage-format|Memory lives in .toon-memory/memory/data.toon as pipe-delimited rows.||storage;format|2026-07-29||0||0.7|1|2026-07-29T09:12:00.000Z|0 8a7e25e7|knowledge|storage-format|Memory lives in .toon-memory/memory/data.toon as pipe-delimited rows.||storage;format|2026-07-29||0||0.7|1|2026-07-29T09:12:00.000Z|0 # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded)
## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style
Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.
- tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03
## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool
Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation.
- tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03
## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs
Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.
- tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03
# toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded)
# toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded)
## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style ## pattern: commit-style
Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens. Conventional Commits (feat/fix/chore). Short imperative subject, scope in parens.
- tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03 - tags: git, pattern · date: 2026-08-03
## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool ## bug: redis-pool
Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation. Redis pool: cap at 10 connections to avoid socket timeouts on saturation.
- tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03 - tags: redis, bug · date: 2026-08-03
## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs ## decision: stack:nextjs
Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT. Payments: Stripe. UI: Next.js + Tailwind. Auth: JWT.
- tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03 - tags: stack, decision · date: 2026-08-03
# toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded) # toon-memory (auto-loaded)
toon-memory由 TOON 驱动
面向 AI 代理的连续性层
$npm install -g toon-memory
为什么代理会在会话之间丢失上下文?
AI 编程代理每次会话都从失忆开始
上下文每天重置
每次新会话,你的代理都会忘记昨天学到的决策、模式和 bug。你需要一遍又一遍地重新解释相同的上下文。
在历史中搜寻
没有记忆时,代理需要搜索 git 历史并重新读取文件来重建为什么某事以特定方式构建 — 消耗 token 和时间。
复制粘贴笔记
开发者在聊天之间手动粘贴上下文。这种方式脆弱、容易过时,而且永远无法传递到下一次自主运行中。
toon-memory 为你的代理提供持久的、可查询的记忆 — 让上下文在每个会话中自动存活。
认识 toon-memory
你编码工作流的连续性层
记忆存储事实,而连续性层保存你项目的工作方式 — 让每个会话都从上次结束的地方开始。
决策
每个选择背后的"为什么" — 框架、库、权衡。在重要时刻被召回,不再重新争论。
约定
你的团队认可的命名、结构和风格规则。无需再次告知即可遵守。
上下文
不存于任何单一文件中的架构、环境和运维知识。
共享理解
项目知识和团队决策可供每个代理和每次会话使用。
toon-memory 引入了连续性层的概念:一个轻量系统,在 AI 会话之间保存项目知识、决策和上下文 — 无需云服务或重型基础设施。
为什么开发者选择 toon-memory
私有、轻量、通用
让项目记忆可以放心保留的保障。
隐私优先
- 100% 本地 — 无云、无服务器、无遥测
- 可选 AES-256-GCM 加密
- 你拥有记忆文件,就像任何源文件
轻量
- 原生 TOON 格式 — 比 JSON 少 22% 的 token
- 零依赖,任何 Node.js 18+ 都可运行
- 确定性逻辑 — 无 LLM 调用、无 API 密钥
通用
- 适用于 15+ 个代理:Claude Code、Codex、Gemini CLI、Cursor、OpenCode 等
- 标准 MCP — 更换代理而不丢失上下文
- 每个团队成员共享的项目记忆
同一个项目。两次会话。
你的代理记住什么会改变结果。
基准测试
实测而非假设
在真实会话中测得的 token 与工具调用节省
更少令牌(自动加载)
更少工具调用
更少令牌(紧凑召回)
更少令牌(系统提示)
更少令牌(批量压缩)
TOON 格式专为 LLM 设计,而非人类
JSON 1097→TOON 850
使用 gpt-tokenizer(cl100k_base)在 16 条代表性记忆条目上测量,比较实际磁盘上的 TOON 格式与紧凑 JSON。可复现:npm run bench。
在 187 条真实条目冻结快照上的 LongMemEval 风格检索 — 42 条 gold queries
真实 data.toon 快照(187 条,2026-08-01),today 确定性、只读、无代码复刻;排除 2 条 priority 元条目。可复现:npm run bench:retrieval。
自动加载:OpenCode 插件仅注入与文件相关的记忆,而不是转储所有条目。完整会话:启动 → 调试 → 实现 → 审查 → 完成。可复现:npm run bench:full、npm run bench:primer、npm run bench:compress-all。
它是如何工作的?
从失忆到记忆的四个步骤
安装
一条命令。15+ 个代理零配置。
npm install -g toon-memory记忆
在工作时保存决策、模式和 bug — 支持自动标签推断和可选 TTL。
memory_remember({
category: "decision",
key: "use-zod",
content: "Use Zod for validation",
file: "src/types.ts"
})召回
你的代理按需查询记忆 — 无需重复解释,不浪费 token。
memory_recall({ query: "validation" })
// [decision] use-zod (a1b2c3d4)
// Use Zod for validation — src/types.ts上下文
一次调用为你的代理提供全部信息:项目、git、记忆、会话。减少 80% 的工具调用。
context_generate({})
// # Project Briefing (full)
// ## Project — toon-memory v4.3.0
// ## Git — branch: main, 3 commits
// ## Memory — 26 entries, 18 edges
// ## Sessions — 2 active记忆工具集,而非协议
你的代理记忆、召回和推理所需的一切 — 按用途分组,并提供直接读取上下文的资源和交互式图谱查看器。
memory_remembermemory_recallmemory_forgetmemory_statsmemory_diffmemory_suggestmemory_summarymemory_archivememory_checkpointmemory_visualizememory_pinmemory_unpinmemory_tagmemory_reflectmemory_promotememory_smart_recallmemory_capturedmemory_consolidatememory_graph_pathmemory_searchcontext_briefcontext_generatecontext_diffcontext_focuscontext_healthcontext_exportmemory_compressmemory_primermemory_sessionsmemory_merge_sessionsmemory_export_gistmemory_import_gistmemory_encryptmemory_decryptmemory_backup多代理
支持所有主流 AI 编程代理。OpenCode、VS Code、Claude、Cursor、Windsurf、Cline、Continue — 零配置。
TOON 格式
比 JSON 减少 22% 的 token(实测)。自定义编码专为 LLM 理解和 token 效率设计。
智能召回
基于图的召回按 BM25 相关性和图中心性重新排序(中心节点即使不包含查询词也会浮现)。按跳数衰减保持远距离上下文较低。Token 高效的 `compact` 模式返回数字索引、片段截断的结果。
智能记忆
从内置词汇表和项目依赖自动推断标签、质量评分、置信度评分、合并去重、相关条目建议、记忆 diff,以及可配置的临时上下文 TTL。
加密
AES-256-GCM 保护敏感数据。自动归档旧条目。Watch 模式每隔 N 分钟自动备份。
你的记忆,以图谱形式
将决策与规格、bug 和架构连接起来。召回返回正确的上下文 — 不仅仅是关键词匹配。
- 使用 `links` 或 `[[key]]` 引用连接条目 — 无需嵌入,无需 LLM
- `memory_recall({ mode: "graph" })` 展开关系感知的子图
memory_recall({ query: "riesgo", mode: "graph" })
[decision] risk-engine-priority (a1b2c3d4)
The engine prioritizes risk over speed.
File: spec.md:10 | Tags: risk;spec | Date: 2026-07-01
links: engine-archmemory_recall({ query: "riesgo", mode: "graph", compact: true })
[1] decision/risk-engine-priority
The engine prioritizes risk over speed.
tags: risk;spec · edges: ->2, ->3记忆图谱查看器
将你的记忆可视化成一个交互式力导向图。一目了然看到条目、连接、类别和访问模式。
- CLI 查看器:
npx toon-memory viewer启动 HTTP 服务器 - 内联 MCP Apps 查看器:调用
memory_visualize()直接在兼容 MCP Apps 的主机中渲染图 — 无需服务器 - 悬停节点查看包含内容预览和质量分数的 tooltips
- 点击选择并居中;双击打开详情
- 搜索过滤条目并以脉动光晕高亮匹配节点
- 路径查找器查找并高亮两个条目之间的最短连接
- 可调物理、深色/浅色主题、PNG/SVG 导出
记忆工具集
你的代理记忆、召回和推理所需的一切
核心记忆
memory_remember保存到记忆
存储决策、模式、bug、知识或 warning(负面"不要这样做"记忆,召回时加成) — 跨会话持久化,自动质量评分。
memory_recall搜索记忆
在读取文件之前查询知识图谱。质量加权结果。支持路径范围(path_scope)和预算控制(tiny/normal/deep)。explain: true 为每条结果追加原因行;budget_tokens 按估算 token 数限制输出。
memory_stats记忆统计
显示项目记忆的统计信息,包括质量分布、最常访问的条目以及命中率/重复率/废弃率指标。
memory_visualize打开图谱查看器
在兼容 MCP Apps 的主机中内联渲染交互式记忆图谱。力导向图、统计、时间线、详情面板。
搜索与智能
memory_smart_recall智能召回
统一搜索,在一次调用中结合 BM25 + 图中心性 + 质量评分 + 新鲜度。支持 explain: true(每条结果的原因)和 budget_tokens(输出上限)。
memory_consolidate合并去重
通过 mode 参数以确定性方式去重相同内容、合并近似重复(Jaccard >50%)、批量移除低质量条目或淘汰旧库版本条目(mode: "versions") — 无 LLM。
上下文简报
context_generate完整项目简报
一次调用的简报:项目结构 + git 状态 + 记忆 + 会话。替代 6 次手动调用。节省 93% token。
context_health健康审计
孤立链接、重复项、损坏的文件引用、过期 TTL、过时会话。评分 0–100。
压缩
memory_compressLLM 压缩
LLM 驱动的两步压缩:摘要 + 覆盖。如果可用则使用 Anthropic/OpenAI CLI。
memory_primer上下文引导
一次调用的上下文引导:主要记忆 + 分类 + 会话文件变化。会话开始时自动注入。
会话管理
memory_sessions会话
显示活跃的代理会话并检测软冲突。
memory_merge_sessions合并会话
合并文件的并行会话中的观察。去重并自动提升。
同步与安全
memory_encrypt启用加密
使用自动生成密钥的 AES-256-GCM 加密。
memory_backup备份记忆
创建带时间戳的记忆文件备份。自动修剪至最近 10 条。
memory-entriesmemory-statsmemory-summariesmemory-viewer (ui://viewer)支持 15+ 个 AI 编程代理
零配置 — toon-memory 自动检测并配置每个代理
常见问题
关于为你的代理提供记忆你需要知道的一切
什么是 toon-memory?
面向 AI 编程代理的持久记忆层,包含 35 个 MCP 工具。它以紧凑的 TOON 格式存储决策、模式、bug 和上下文,让你的代理在会话之间记住一切 — 每次会话减少 80% 的工具调用。
支持哪些代理?
OpenCode、VS Code、Claude Code、Cursor、Windsurf、Cline、Continue、Codex、Gemini、Zed、Antigravity、Aider、KiloCode、OpenClaw 和 Kiro — 通过 MCP 服务器零配置支持 15+ 个代理。
我的数据如何存储?
条目写入本地 TOON 文件(一种 token 高效的格式,比 JSON 小约 22%,实测)。你拥有该文件,可以像任何其他源文件一样提交、diff 或备份。
我的记忆是加密的吗?
是的。使用 memory_encrypt 工具启用加密,通过 AES-256-GCM 保护敏感条目。密钥自动生成并保持在本地。
它能离线工作吗?
完全可以。toon-memory 在本地运行,无需外部服务或账户。Watch 模式甚至可以按计划自动创建备份。
多个代理可以共享相同的记忆吗?
可以。因为记忆存储在项目中的普通文件中,为该项目配置的每个代理都读写相同的上下文。
如何备份我的记忆?
使用 watch 模式进行定时自动备份,或者直接将 TOON 文件提交到 git。旧条目在 30 天后自动归档以保持整洁。
它是免费和开源的吗?
是的。toon-memory 采用 MIT 许可证,免费使用。源代码在 GitHub 上,包发布在 npm 上。
它与代理内置记忆有什么不同?
内置记忆通常是临时的或特定于供应商的。toon-memory 提供一个可移植、可 diff、加密的记忆文件,你完全控制,跨代理和项目使用。
我可以设置临时上下文过期吗?
可以。在任何条目上设置 TTL(例如 ttl: "7d"),它会自动过期 — 非常适合冲刺计划、截止日期和时间敏感的笔记。
什么是智能召回?
memory_smart_recall 在一次调用中结合 BM25 关键词搜索、图中心性、质量评分和新鲜度衰减 — 无需手动编排的最佳排名策略。
质量评分是如何工作的?
每条条目自动获得质量评分 (0-1),基于标签覆盖率、链接丰富度、内容详细度、新鲜度和特定度。高质量条目在召回结果中首先出现。
如果我两次保存相同的键会怎样?
系统合并属性而非替换:标签和链接取并集,质量和置信度取最大值,日期更新。你的条目随时间变得更丰富。
什么是记忆压缩?
memory_compress 允许 LLM 将相关条目摘要为简洁的总结。memory_consolidate(mode: "low-quality") 可确定性地移除低质量条目(无标签、短内容)— 无需 LLM。两者都减少令牌数量。
可以在机器之间同步记忆吗?
可以。使用 memory_export_gist 将条目推送到 GitHub Gist,然后在另一台机器上使用 memory_import_gist。条目会自动合并(标签并集、最大置信度)。