Repository navigation
Releases: equationalapplications/curated-thoughts-integrations
Release list
hermes v0.4.1
- Fixed:
scripts/install.shhonors a pre-setHERMES_HOMEinstead of
silently resetting it to~/.hermes. Profile-scoped installs
(HERMES_HOME=~/.hermes/profiles/ct-test bash install.sh) previously
overwrote the live default profile's plugin.
hermes v0.3.3
First release since 0.2.2. It includes all changes from 0.3.0 through 0.3.3 (0.3.0–0.3.2 were never published separately).
0.3.3 — 2026-10-06
- Fixed: the doctor's bundled-fallback spawn gate (issue #28). When a
caller's env overridesPATHbut that override fails to resolve the
sidecar, discovery used to fall back to the ambient install locations and
the probe then EXECUTED that ambient binary under the caller's env — on a
test machine, the real installed sidecar ran against the fixture brain
(the residual risk named in 0.3.1).run_checksnow detects that
combination (raw caller env has aPATHkey; discovery reports the
bundled source), warns onsidecar-binary, refuses to spawn
(sidecar-mcpWARN), and withholds the path from the import-preflight
engine lookup. A caller that overrides PATH deliberately and accepts the
ambient install being probed under its env can opt out with
CT_DOCTOR_ALLOW_BUNDLED=1in the env. Callers that do not override
PATH— including the real user with a bundled install and no PATH
entry — are unaffected.
Test-suite hardening in the same change: the mock sidecar fixture now has
an absolute shebang, the shared helpers put ONLY the mock dir on PATH, and
asetUpprecondition asserts discovery resolves the mock (realpath
check), so a broken fixture fails the suite instead of silently probing
the real binary.ct_envgainedSOURCE_PATH/SOURCE_BUNDLED/
SOURCE_NONEconstants; the issue #28 resolution rationale is at
docs/superpowers/open-questions/2026-10-06-issue28-bundled-fallback-resolution.md. - Hardened the gate against the /code-review r4 findings (4 applied):
the discriminator is nowenv.get("PATH") is not None(not"PATH" in env),
aligning with_merged_env's documented None=ambient semantics — a caller
that passesenv={"PATH": None}(per_merged_env, "caller did not
specify") no longer falsely trips the gate;bool(env)collapsed to
env is not Noneto match the gate's own view;find_sidecaris now
called with the raw caller env (its wrapper re-merges), removing one
redundant dict copy + filter pass per check; andcheck_version_compat
short-circuits to a single PASS line when gated so a third WARN cannot
dilute the actionable hint on a PATH-override defect. Pinned by three
new tests (PATH=None no-gate; gated version-compat stays PASS; caller-env
HERMES_CONFIGcannot override the import-time module constant).
0.3.2 — 2026-10-06
- Fixed: the doctor's env-reading checks (
check_brain_dir,
check_vault,check_embedding,check_import_preflight) read ambient
os.environeven when the caller passed anenv— a caller using the
merged env view got brain directories, embedding-key verdicts, and the
engine-manifest lookup resolved from a different environment than the
one it asked about (issue #29; follow-up to the #14 fix). Every
env-reading check now acceptsenvand resolves through the same merged
view, andrun_checksthreads its merged env into all of them.
Ambient-only callers (ct_doctor check) see no behavior change. - Changed: the MCP probe's clientInfo version is now derived from
plugin.yamlat call time instead of a hard-coded literal that had
drifted to 0.2.0; a missing manifest degrades to0.0.0-unknownrather
than crashing. Ambient-only reading ofHERMES_CONFIGin check 7 is now
documented as deliberate (the Hermes config is a property of the host
install, not of the probed environment). (GLM 5.3 independent review of
this PR, 2026-10-06 — all findings adjudicated, none Critical/Important.)
0.3.1 — 2026-10-06
- Fixed:
run_checksdiscovered the sidecar from the ambientos.environ
PATH even when callers passed anenvwhose PATH pointed elsewhere — so
on machines with a real installed sidecar, the real binary was probed (and
its startup migration ran) against whatever brain the caller's environment
pointed at, including test fixture brains (issue #14; the read-only and
self-test failures on sidecar-equipped machines). Discovery, brain-path
resolution, and the spawn now all use the same merged env view
(os.environoverlaid with the caller'senv, matching
subprocess.run(env=...)). Regression test: poison sidecar on the ambient
PATH must never run when an env PATH override is supplied. Residual risk
(bundled-path fallback reaching a real sidecar when the env-PATH mock is
absent) is tracked in issue #28.
0.3.0 — 2026-09-30
- New system-prompt section
curated-thoughts-wisdomthat recalls the wisdom
layer at session start and injects a short (max 2500 chars) digest of
relevant procedures and facts, alongside the existing health section. The
recall runs through the installedctCLI with a seed query widened by the
session's working directory; results are memoized per session id (LRU,
256 sessions) in thect_wisdommodule so re-renders within a session are
byte-identical and free. - Known v1 limitations: (1) a restored session — including an in-process
/branch, and/resumeafter the Hermes process restarted — receives its
persisted prompt bytes back without a recall and its new id starts with an
empty memo, so the first compression afterwards re-recalls and the block may
change; (2) legacy non-in-place compression rotates the session id, which
can trigger one extra recall after compaction; (3) live sessions beyond the
256-slot memo window evict each other and re-recall. - Graceful no-op: when Curated Thoughts is not installed or the brain is
unreachable, the section silently renders empty — no errors, no prompt
noise, sessions never block on it.
deepseek v0.3.0
New system-prompt section: wisdom auto-inclusion. Once per agent, the
plugin recalls the brain's wisdom layer via the standalone ct CLI
(ct recall --json --k 3) and renders a sanitized digest (max 2500 chars) as
a curated-thoughts-wisdom prompt section. Memoized per agent id, so host
re-renders at compression boundaries are byte-identical.
The section is a no-op when the ct binary is absent or not identifiable,
when the brain has no wiki wisdom, or when the backend times out. Failure
handling is budgeted: two recall attempts per agent (≥ 60 s apart), then the
agent's block stays absent for the process; a process-wide circuit breaker
(four consecutive failures → five-minute open, one half-open probe) bounds
the worst case.
Limitations (v1): (1) after a harness restart on a resumed session the
memo is cold — the first step re-recalls and the block may change bytes once;
(2) the same one-time cost applies if the first recall attempt fails
transiently and a later render succeeds; (3) memo eviction beyond 256 live
agents per process; (4) when the ct backend is down, a session stops trying
after two failed attempts (its block stays absent for the session's life in
that process); (5) while the backend is down, the harness may pause briefly
(seconds) on recall attempts, bounded per process by the retry budget +
circuit breaker. Set CT_WISDOM_DEBUG=1 to emit a per-render diagnostic line
on stderr.
opencode v0.1.0
Initial release. OpenCode plugin wires the Curated Thoughts MCP sidecar,
registers a bounded health snapshot in the system prompt (refreshed once per
session via the system transform), and ships three skills ported from Hermes
(curated-thoughts-usage, curated-thoughts-ops, curated-thoughts-sidecar).
Ships a ct_doctor.ts, a provenance pre-flight (ct_preflight.ts), and a
preview-first POSIX install.sh that stages the payload, loader file, skills,
and the mcp entry in opencode.json. Delivered as a GitHub release tarball
(opencode-v<version>); no npm publish.
deepseek v0.2.2
Fix empty-string fallback in brain-dir resolution. ?? operators in
cordis.patch.yml treated an empty HOME or USERPROFILE as a set value,
producing /.brain at the filesystem root. Both environment rows now use
?? with a literal ~ fallback so the sidecar refuses the path explicitly
rather than silently opening /.brain.
deepseek v0.2.1
Restore executable bits on shell scripts; fix empty HOME/USERPROFILE handling in
bundle patch and expandHome; update test to assert actual homedir() fallback.
deepseek v0.2.0
Fixed against DeepSeek Harness 0.1.5-rc.2 (container-verified end to end —
see the e2e harness below). 0.1.2 was never tagged or released because its
plugin could not load on current DSH at all; this release supersedes it, and
0.1.2's census change is included here. Minor bump: the install procedure
changed.
- Load failure fixed. The plugin used
ctx.plugin(string, ...), which
cordis rejects (invalid plugin ... received string), never declared the
injectservices (crash:cannot get property "systemPrompt" without inject), and passed a non-finite prompt-context order (crash:prompt context "undefined" order must be a finite number). The MCP client is now
mounted declaratively via a shipped bundle patch; the plugin declares
inject = ['systemPrompt', 'skills']; the prompt context is registered as
{ name, order: 130, text }. - Install rewritten. The old installer appended blocks to
$DSH_HOME/cordis.yml, which DSH never reads, and DSH ignores bare
- name:rows in patch files — so installing did nothing. The package now
shipscordis.patch.ymldeclared via package.jsondsh.bundle.patch, and
install.sh --profile <name>packs the package and installs it with
dsh plugin --profile <name> add <tarball>.--profileis required;
DSH composes per profile and has no global plugin list. - Doctor no longer crashes from the release tarball.
ct_preflight.ts
importedbetter-sqlite3statically; the tarball ships no node_modules, so
ct_doctor checkdied at import. It now loads lazily and degrades the
census check to WARN, mirroring the OpenCode integration. - The doctor's
dsh-registrationcheck now inspects profile installs.
It scanned$DSH_HOME/cordis.yml, which DSH never reads, and so failed
every correct install. It now reports which profiles have the package
installed — installation being what activates the bundle patch. - Brain path handling. The sidecar does not expand a leading
~
(verified: it treats~/.brainas a relative path and exits), so the MCP
row resolvesCURATED_BRAIN_DIRat composition time (ambient value wins,
else$HOME/.brain), and the plugin expands~itself before probing. - New e2e harness (
tests/e2e/): Docker-based, container-verified
against DSH 0.1.5-rc.2 (pinned intests/host/compatibility.json), sharing
its base image with the OpenCode harness.
hermes v0.2.2
import-preflightno longer counts soft-deletedllm_wiki_entriesrows as
live damage. The census is now scoped to rows withdeleted_at IS NULLwhen
that column exists, so retained issue-#186 corpses can no longer flip a
healthy brain to FAIL. Soft-deleted rows are reported separately in the
PASS/WARN detail as informational context. On brains with nodeleted_at
column the behavior is unchanged.
hermes v0.2.1
- Clarify the import pre-flight damage detection rule in the ops skill:
detection applies to non-NULLsource_refvalues only, which the
previous wording did not make explicit.
deepseek v0.1.1
Security: bump devDependencies to clear 9 Dependabot alerts in
integrations/deepseek/ (vitest 2.1.9 → 4.1.11, vite 5.4.21 → 6.4.3,
esbuild 0.21.5 → 0.25.0). No shipped-code behaviour changes — tests,
build, and typecheck all still pass. See PR #11 for the full advisory
mapping.