Releases: Kashkovsky/threadnote
Release list
v1.6.2
Security hardening for shared memories and local update paths.
- Shared-memory sync now blocks inbound files that look like credentials before they are indexed, skips symlinks/non-regular files, strips personal provenance from shared notes, and refuses to overwrite/delete local memory that no longer matches the previous shared version.
- The scrubber now covers more common credential formats, including AWS session/secret keys, Google API/OAuth tokens, Stripe keys/webhook secrets, Slack/Discord tokens and webhooks, database URLs with credentials, and Basic auth values.
- MCP grep/glob/add_resource proxy tools now reject leading-dash arguments before forwarding to OpenViking.
threadnote updateandthreadnote versionno longer trust a customTHREADNOTE_NPM_REGISTRYunless--allow-untrusted-registryorTHREADNOTE_ALLOW_UNTRUSTED_NPM_REGISTRY=1is set.
1.6.1: reliable seed imports and OpenViking 0.4.7
This patch makes Threadnote seeding quieter and more reliable on current OpenViking installs.
threadnote seedno longer asks OpenViking to create a reason-linked memory for every imported repo document. That removes the repeatedOPENAI_API_KEYwarning for local users who only want to seed project guidance into OpenViking.threadnote seed --graphandthreadnote seed-skillsuse the same safer resource-import path, so generated dependency facts and skill catalogs avoid the same warning behavior.- Threadnote now pins OpenViking 0.4.7. After updating Threadnote, the post-update repair path upgrades older OpenViking installs and restarts the server when needed, picking up upstream storage, QueueFS, embedding queue, and MCP reliability fixes.
Typical update flow:
threadnote update
threadnote seedIf OpenViking was installed separately and is still older after updating Threadnote:
threadnote install --force1.6.0: worksets, trace handoffs, and dependency facts
Threadnote now carries more of the context agents need to resume work across related repos, reviews, and local sessions without turning your workspace into a managed job runner.
-
Handoffs can now point at the exact context a future agent should read. Use
--referencefor read-only memory links and--pr,--issue, or--cito record the review state that mattered when the handoff was written.threadnote handoff \ --task "continue the auth cleanup" \ --reference viking://user/denys/memories/durable/projects/app/auth.md \ --pr https://github.com/acme/app/pull/42 \ --ci "unit tests green, e2e pending"
-
Recall understands those
references:links and includes the referenced context one hop deep, so a concise handoff can still lead the next agent to the durable design note, investigation, or related branch state it depends on. -
Multi-repo worksets let you name groups of seeded projects and recall them together. Add a top-level
worksets:block to the seed manifest, then use it from the CLI or MCPrecall_contexttool.worksets: - name: platform description: app, API, and design-system repos projects: [web-app, api, design-system]
threadnote workset list threadnote workset show platform threadnote recall --workset platform "latest auth handoff" -
threadnote seed --graphcan generate a plain.graph.mdresource for each project frompackage.jsonandgo.mod. This gives recall lightweight dependency facts and[[project]]links without adding a separate graph UI or background service.threadnote seed --graph threadnote read viking://resources/repos/web-app/.graph.md -
Pre-compact handoffs can include a short, scrubbed trace summary from the current session: recent user intents, event count, and tools used. Credential-looking content drops the trace instead of writing it, and large transcripts are read from a bounded tail.
-
Technical hardening: explicit workset typos now fail before any recall search runs,
init-manifestpreserves existing worksets, generated graph cache filenames are sanitized, shared publishing strips personal provenance, and regex escaping now handles*correctly.
1.5.0: recall relevancy weighting + memory project/path consistency
Sharper recall ranking and a new memory data-consistency guardrail.
- Recall ranks exact (lexical) matches by term rarity and title match instead of raw count, so a query's common words no longer flood the top and a memory whose topic names the query leads its category; keyword-only hits are labelled as such and an all-keyword result set is flagged low-confidence. #49
- Agent-artifact review packs are no longer surfaced as memories in recall. #49
- New
doctorcheck flags any memory whose frontmatterprojectdisagrees with its storage path, and in-place shared updates keep the project from the path so the two can't drift. #50 - Typecheck migrated to the TypeScript 7 RC, plus dependency bumps (vitest, typescript-eslint, @types/node, globals, actions/checkout). #48
Also bumps the package version to 1.5.0.
1.4.5: self-heal rejected llama-cpp-python wheel installs
Threadnote now recovers automatically when uv rejects a prebuilt llama-cpp-python wheel with trailing data after the ZIP EOCD.
- Detects the
llama-cpp-pythonarchive extraction failure during OpenViking install. - Retries without the prebuilt wheel index instead of asking users to clear caches or rerun commands.
- Preserves macOS Metal source builds with
CMAKE_ARGS="-DGGML_METAL=on"and caps compile parallelism withCMAKE_BUILD_PARALLEL_LEVEL=2. - Keeps remaining install failures focused on the package-manager output.
v1.4.4
Pin OpenViking to 0.4.5 and remove Threadnote's temporary semantic-queue source patch.
- Upgrades the pinned OpenViking install target to 0.4.5, which includes the upstream queuefs fix for non-directory memory URIs.
- Removes the
repair-semantic-queuecommand and theov-semantic-poison-hotfix-2734post-update migration. - Updates troubleshooting docs to use
threadnote update/threadnote install --forcefor the OpenViking 0.4.5 fix path.
1.4.3: repair-semantic-queue recovery for the OV poison loop
Patch release: a recovery path for the OpenViking semantic-queue poison loop (#2734).
- New
threadnote repair-semantic-queue [--apply]patches the installed OpenViking to skip non-directory/missing memory URIs and restarts the server, so a stuck semantic message — a memory file enqueued for directory-level processing — drains on the next dequeue instead of re-enqueuing forever (the AGFS-persisted entry survives a restart otherwise). Idempotent, keeps a.threadnote-bak, and compile-checks the patched file before writing. threadnote updateoffers it as a post-update step (with the usual consent prompt).
Temporary bridge: it no-ops once the pinned OpenViking includes the upstream fix (volcengine/OpenViking#2735).
1.4.2: doctor recall-shape fix + MCP stale-version reconnect nudge
Patch release: OpenViking 0.4.4 diagnostics fixes.
doctorrecall-shape probe no longer false-warns on a healthy OpenViking 0.4.4.ov find/search --output jsonprints acmd: ...preamble before the JSON and nests the buckets under aresultenvelope; the probe now parses exactly like recall does instead of warning "search output is not JSON".- MCP server now nudges you to reconnect after a
threadnote update. The MCP server is a long-lived stdio process the client doesn't respawn mid-session, so an update silently left it running old code.recall_context/remember_context/healthresults now carry a one-line "reconnect (/mcp) to load the update" notice when a newer threadnote is installed on disk.
1.4.1: fix OpenViking 0.4.4 recall breakage and bound the reindex hang
Patch release fixing two OpenViking 0.4.4 interop regressions.
- Recall (and every
ovcall) broken on OpenViking 0.4.4. 0.4.x removed the--agent-idflag from everyovsubcommand and droppedagent_idas an HTTP identity input, so the 1.4.0 pin made everyovinvocation fail withUnexpected argument: --agent-id— recall included. Identity is now--account+--useronly. - AGFS memory-reindex hang bounded. A
context_type=memorysemantic queue entry pointed at a memory file fails OpenViking's_process_memory_directoryand re-enqueues forever, starving the queue;ov reindexhas no--timeout, so the post-write refresh and index repair could block for the full 10-minute command timeout. Both reindex waits are now bounded byreindexWaitTimeoutMs(default 120s, overrideTHREADNOTE_REINDEX_TIMEOUT_MS).
Anyone on 1.4.0 should upgrade — recall is broken there against OpenViking 0.4.4.
1.4.0: OpenViking 0.4.4 pin, version/drift hardening, opt-in seed watches
Pins OpenViking to 0.4.4 (from 0.3.24). The 0.3.x→0.4.x transition is compatible as-is: memories already write to viking://user/, --agent-id stays a supported transition shim, and the ov version / find/search JSON / auth surfaces are unchanged.
Hardening:
compareVersionsnow ignores+buildmetadata, parses core segments as leading integers, and ranks PEP 440 post/pre-releases, so a local0.4.4+localbuild is no longer misread as0.4.0and re-upgraded in a loop.doctorwarns when the installed OpenViking is older than the pin (install/doctordon't upgrade it — onlyrepair/updatedo) and probes that recall'smemories/resources/skillsJSON buckets are intact.- Dropped the unused
ov_searchpeerId/peer_idparams and de-duplicatedwithIdentity.
New:
- Opt-in
THREADNOTE_SEED_WATCH_INTERVAL=<minutes>lets OpenViking auto-refresh seeded repo docs betweenthreadnote seed/repairruns. Off by default; a watch attaches only to original, non-redaction-prone files, since an OpenViking-managed refresh re-ingests the file without Threadnote's per-import secret scan.