coding-agents
vectorize-io/hindsightHindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
MemoryLake for DeepSeek Harness (dsh): persistent, cross-session, cross-project, cross-device memory.
dsh ships no native memory capability, so this plugin is not a bridge to one — it IS the harness's memory layer. It contributes:
memory_search, memory_remember, memory_forget —
backed by the memorylake CLI (never by direct HTTP, never through a shell)./memorylake-init for the guided setup
wizard (CLI download with mandatory checksum verification, login, shared
config) and /memorylake-status for the end-to-end health check. The model
cannot trigger either.dsh plugin --profile web add @memorylake/dsh-plugin
dsh --profile web --dump-config # shows the "@memorylake/dsh-plugin" layer
dsh web
web is dsh's built-in Web UI profile (auto-initialized on first use); any
other profile name works the same way — the plugin composes with whatever
surface the profile mounts.
The package publishes with built lib/, so no build allowance is needed. A
github: install also works — a self-contained prepare script builds from
source — but pnpm ≥10 will ask you to allowlist the build; prefer the
registry install.
Identity and switches live in the shared ~/.memorylake/ tree, not in
this plugin:
~/.memorylake/credentials.toml — the CLI's login state~/.memorylake/harness/config.md — workspace, actor, and feature flags<repo>/.claude/memorylake.local.md — optional per-project override,
merged key by key over the global file (a one-line
sync_on_write: false override keeps the global workspace working)If the Claude Code or Codex integration already wrote these, a dsh session
picks them up with zero additional steps: status line, tools, recall — all
live. Config files are re-read on every call, so /memorylake-init finishing
mid-session takes effect on the very next message, no restart.
When nothing is configured, the plugin is completely silent: no network
requests, no prompt injection. Only an explicitly invoked memory tool answers,
and only to point at /memorylake-init.
config.md / memorylake.local.md frontmatter)| Key | Default | Meaning |
|---|---|---|
workspace | — | MemoryLake workspace id. The only required key; absent means the plugin stays silent |
actor | — | Actor id facts are attributed to; required for writes |
enabled | true | false switches the plugin off entirely |
sync_on_write | true | false makes memory read-only (the canonical per-project override) |
status_line | true | false suppresses the session status line |
Keys consumed by the other harnesses (remind_on_read, sync_deny,
projects, project_custom_id) are parsed and preserved but not consumed by
this plugin's v1.
Only operational tuning lives in the bundle's rows; override by id in your
profile's cordis.patch.yml (a patch replaces the row's whole config).
Row memorylake (@memorylake/dsh-plugin/service):
| Key | Default | Meaning |
|---|---|---|
binaryPath | — | Absolute path of the memorylake binary, overriding resolution (PATH, then ~/.memorylake/bin/memorylake) |
timeoutMs | 30000 | Hard deadline per CLI invocation |
killGraceMs | 2000 | SIGTERM→SIGKILL grace on timeout/cancel |
maxOutputBytes | 1000000 | In-memory cap per collected CLI stream |
Row memorylake-tools (@memorylake/dsh-plugin/tools):
| Key | Default | Meaning |
|---|---|---|
topKMax | 10 | Upper bound for the model's top_k |
statusTtlSeconds | 600 | Status-line refresh interval and cache TTL |
MEMORYLAKE_API_KEY is never forwarded — by design, and matching the CLI's
own "env vars alone are not a session" rule. Log in once with
memorylake auth login (the init skill walks through it).fact delete exits non-zero
when ids were not found). The plugin parses first and classifies second.notice in the tool value and a loud status line, instructing the model to
attribute empty results to the connection rather than to missing memory.--projects on search (without it the server returns zero document hits —
facts are unaffected, which is why v1 is facts-only).packages/memorylake/ capability seam.pnpm install
pnpm test # vitest: unit + integration + real-Loader composition
pnpm build # tsc → lib/
Tests run against a mock memorylake binary and an isolated data tree; no
network, no API key, and no touching your real ~/.memorylake.