Repository navigation
dsh-statecore — auditable project memory: auto-ingest, auto-inject, five native tools, digest on the host model #2146
Replies: 3 comments
|
Update: Two new capabilities since the original post, both live-verified on 1. Compaction that doesn't forgetThe most common complaint about long agent sessions everywhere: after a compact, the model forgets what you told it. This release closes that loop through dsh's compaction seam — a plain
Here's the live transcript: Behind that screenshot, the compaction-demanded digest also ran for real — through the host's own 2. A "StateCore Memory" page in Web SettingsThe plugin now ships a browser half: pick a project scope, browse its grouped facts, open any fact's evidence chain ( Ecosystem note for other plugin authors: the client half is built with plain esbuild — no host-internal build presets needed. A Also in this release
dsh plugin --profile web add -w dsh-statecore # or update the pinned version in your profileRepo: https://github.com/yul761/dsh-statecore · npm: |
|
Update: The engine underneath this plugin just reached 1.0, and the plugin now depends on it:
Repo: https://github.com/yul761/dsh-statecore · npm: |


Uh oh!
There was an error while loading. Please reload this page.
dsh-statecore gives dsh sessions persistent, auditable project memory: every fact carries an evidence id and a version chain, and forgetting is a logged retirement, not a delete.
Repo: https://github.com/yul761/dsh-statecore (
dsh-plugintopic) · npm:dsh-statecore· Engine: StateCoreWhat it does
user/message/assistant/messageflows into per-project memory viactx.on('session/event'). No model cooperation needed; an MCP memory server can only be pull, a native plugin can also push.agent/pre-stepwaterfall folds a budgeted memory digest into context each session, mirroring the fold pattern@deepseek-ai/dsh-agent-instructionsuses forAGENTS.md. In the transcript it shows up as its ownContext injection · dsh-statecorerow next to dsh's first-party injectors.remember/recall/facts/why/forgetregistered throughdsh-toolswith honest JSONoutput.schema, so Code Mode canawait tools.why({factId})and get a structured evidence chain. Registration is an effect; dispose unregisters cleanly (HMR-safe, tested).ctx.llm. Whatever model you already pointed dsh at drives memory distillation; there is no second API key to configure.~/.statecorestore is served to any MCP client bystatecore-mcp. In my live test, a fact remembered inside a dsh web session was immediately visible from Claude Code'sfactstool, because both resolve the same project scope.Install
The package declares
"dsh": { "bundle": { "patch": "./statecore.cordis.yml" } }, so profile bundle reconciliation wires it up automatically — no manual--patchafter install.Verified live against
dsh@0.1.0-rc.6(web app, DeepSeek-V4-Flash): plugin row in--dump-config, both consumers active, all five tools callable by the model, and a second session receiving the first session's facts by injection alone.Two small rc.6 findings from real installs (feedback)
dsh plugin --profile <p> add <pkg>needs-wtoday: profiles ship apnpm-workspace.yaml, and pnpm refuses to add to a workspace root without it. Either passing-winternally or documenting it would smooth the first-plugin experience.postinstall(build-script approval), which bites any plugin whose deps generate code at install time (Prisma here). A note in the plugin-install docs — or surfacingpnpm approve-buildsin the CLI output — would help plugin authors.Both are documented with workarounds in the plugin README. Happy to file issues for either if useful.
I tried to build this the way dsh's own AGENTS.md asks its packages to be built — real-composition tests over actual
dsh-tools/dsh-session/dsh-agentregistries rather than mocks, HMR/disposal coverage, config with no hardcoded tunables, misconfig failing loud — because the harness's conventions are genuinely good and the best way to showcase a plugin system is to follow them. Feedback very welcome.All reactions