Skip to content

Releases: Kashkovsky/threadnote

1.4.3: repair-semantic-queue recovery for the OV poison loop

19 Jun 17:34

Choose a tag to compare

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 update offers 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

19 Jun 14:33

Choose a tag to compare

Patch release: OpenViking 0.4.4 diagnostics fixes.

  • doctor recall-shape probe no longer false-warns on a healthy OpenViking 0.4.4. ov find/search --output json prints a cmd: ... preamble before the JSON and nests the buckets under a result envelope; 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/health results 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

19 Jun 14:05

Choose a tag to compare

Patch release fixing two OpenViking 0.4.4 interop regressions.

  • Recall (and every ov call) broken on OpenViking 0.4.4. 0.4.x removed the --agent-id flag from every ov subcommand and dropped agent_id as an HTTP identity input, so the 1.4.0 pin made every ov invocation fail with Unexpected argument: --agent-id — recall included. Identity is now --account + --user only.
  • AGFS memory-reindex hang bounded. A context_type=memory semantic queue entry pointed at a memory file fails OpenViking's _process_memory_directory and re-enqueues forever, starving the queue; ov reindex has 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 by reindexWaitTimeoutMs (default 120s, override THREADNOTE_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

19 Jun 13:36

Choose a tag to compare

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:

  • compareVersions now ignores +build metadata, parses core segments as leading integers, and ranks PEP 440 post/pre-releases, so a local 0.4.4+local build is no longer misread as 0.4.0 and re-upgraded in a loop.
  • doctor warns when the installed OpenViking is older than the pin (install/doctor don't upgrade it — only repair/update do) and probes that recall's memories/resources/skills JSON buckets are intact.
  • Dropped the unused ov_search peerId/peer_id params and de-duplicated withIdentity.

New:

  • Opt-in THREADNOTE_SEED_WATCH_INTERVAL=<minutes> lets OpenViking auto-refresh seeded repo docs between threadnote seed/repair runs. 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.

1.3.3: memory-file reindex hang fix

19 Jun 12:46

Choose a tag to compare

Fix Threadnote memory writes so the defensive post-write refresh no longer asks OpenViking to run semantic directory reindexing on a .md memory file URI.

refreshMemoryIndex() now uses ov reindex --mode vectors_only for the written file, preserving leaf/detail recall vector freshness without creating failing semantic queue work.

Directory-level recall index repair still uses semantic_and_vectors on directory URIs.

1.3.2: dependency security updates

17 Jun 12:20

Choose a tag to compare

Patch release clearing all open npm audit findings (2 high, 2 moderate). Dependency-only — no runtime behavior change.

npm audit now reports 0 vulnerabilities.

Also bumps the package version to 1.3.2.

PRs: #32, #24, #25

1.3.1: PR share instructions

17 Jun 11:03

Choose a tag to compare

Patch release for PR #31: #31

Updates the injected agent guidance for PR/review creation so agents check configured Threadnote shares first, and requires explicit user confirmation before publishing a durable feature memory for reviewers, including team selection when multiple shares are configured.

Also bumps the package version to 1.3.1.

1.3.0: multi-file skills & packs, plus a guided onboarding tool

16 Jun 14:08

Choose a tag to compare

Two features since 1.2.0: skill sharing grows from a single SKILL.md to whole directories and multi-skill packs, and a new onboarding tool guides newcomers through Threadnote on request.

Multi-file skills. share publish-artifact / share_skill now carry the SKILL.md's whole directory — companion scripts, references, assets — under agent-artifacts/skills/<agent>/<name>/, recorded in a generated .threadnote-bundle.json. A lone SKILL.md publishes byte-for-byte as before. Every text member runs through the scrubber; binary members are blocked by default (--allow-binary to include) and byte-scanned for embedded credentials/paths.

Constellation packs. For skills whose shared code lives outside any single skill dir (repo-root scripts//lib/), a threadnote-bundle.json manifest declares the skills, shared include paths, deps, and path rewrites. share publish-bundle <manifest> / share_bundle writes agent-artifacts/packs/<agent>/<name>/{<name>.pack.md, <name>.pack.json, files/<verbatim tree>}; install materializes the whole tree under one root (~/.{codex,claude}/skills/threadnote-packs/<team>/<name>/) and expands a ${THREADNOTE_PACK_ROOT} token so hardcoded repo-root paths resolve. Packs install in a namespace disjoint from skills, so a pack and a same-named skill never collide.

Guided onboarding. A new threadnote_guide MCP tool: ask your agent "what can I do with Threadnote?" and it returns a setup-aware walkthrough (server health, configured share teams, seeded projects) for the agent to present and offer to run step by step. The walkthrough loads only when the tool is invoked — the only always-on cost is the tool's description.

Sharing safety. The scrubber covers every text member, the pack index, and the manifest; a residual machine-local /Users//home path blocks publish (other absolute paths warn). Install validates member paths against ../absolute traversal. Publish rolls back this run's writes on failure (restoring a replaced pack on --force); install swaps via backup-rename; per-member status folding refuses to clobber local edits without --force. Only .md is OpenViking-ingested for recall; the file tree is git-carried.

Also:

  • Pins the local Node version to 22.22.0 via .nvmrc.
  • Bumps the package version to 1.3.0.

PRs: #29, #30

1.2.0: smarter recall ranking with per-category reserve

15 Jun 11:14
330b7c3

Choose a tag to compare

Reworks recall ranking so the most relevant context leads, across both the CLI recall and the MCP recall_context — they now share one pipeline (buildRecallSections).

Exact-match ranking. Exact (lexical) grep matches used to print as an unranked sidecar after the semantic top-N, burying canonical docs that scored below the semantic threshold or sat in the compressed score band.

  • Semantic hits an exact term also matched are annotated (exact: <terms>).
  • Exact-match docs with no semantic hit are promoted into the ranked list (rendered exact:), categorized from their URI.
  • Ranking is category-first → exact-term count → semantic score. The sidecar now lists only matches not already shown.

Per-category reserve. selectShownHits reserves up to RECALL_CATEGORY_RESERVE (2) slots per category before filling the rest of the window by global rank, so a memory-heavy result no longer crowds seeded resources and skills out of view. Memories still lead and take every leftover slot; under a tight nodeLimit the reserve is best-effort by priority.

Also:

  • Memories rank ahead of resources ahead of skills; dedupeByContent collapses resource/skill hits with identical snippets (memories never collapsed), after exact-boost so an exact-matched twin survives.
  • Seeding ignores .claude/worktrees/ and .worktrees/.
  • MCP grep defaults uri to the caller's memories root instead of erroring when omitted.
  • Bumps the package version to 1.2.0.

PR: #28

1.1.6: recall ranks memories before resources and skills

15 Jun 09:59

Choose a tag to compare

Recall now orders results category-first instead of by raw score, so personal memories always lead and seeded resources/skills only follow. Previously a high-scoring seeded resource or skill could outrank actual memories in the merged list.

  • RecallHit carries a category (memories/resources/skills) taken from the authoritative ov search JSON bucket key, not the looser context_type string.
  • New RECALL_CATEGORY_ORDER is the single source of truth: mergeRecallHits sorts by category index first, then score descending within each category. A 0.50 memory now ranks above a 0.90 resource.
  • Both CLI threadnote recall and MCP recall_context flow through mergeRecallHits, so both inherit the ordering.
  • Bumps the package version to 1.1.6.

PR: #27