threadnote 1.3.2 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -193,8 +193,8 @@ Use these only when MCP tools are not available:
193
193
  threadnote start
194
194
  threadnote recall --query "last handoff for this branch"
195
195
  threadnote recall --query "durable feature knowledge for this branch"
196
- threadnote read viking://agent/threadnote/memories/.abstract.md
197
- threadnote list viking://agent/threadnote/memories --all --recursive
196
+ threadnote read viking://user/example/memories/.abstract.md
197
+ threadnote list viking://user/example/memories --all --recursive
198
198
  threadnote remember --kind durable --project example --topic workflow --text "Durable engineering note..."
199
199
  threadnote remember --kind durable --project example --topic active-issue --text "Feature knowledge..."
200
200
  threadnote remember --replace viking://user/example/memories/durable/projects/example/workflow.md --text "Updated durable engineering note..."
package/docs/index.html CHANGED
@@ -4,18 +4,18 @@
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
6
6
  <meta name="color-scheme" content="dark" />
7
- <title>Threadnote shared local context for development agents</title>
7
+ <title>Threadnote - stop re-explaining context to coding agents</title>
8
8
  <meta
9
9
  name="description"
10
- content="Threadnote is a safe local workflow for using OpenViking as shared, agent-neutral context for development work across Codex, Claude, Cursor, and Copilot."
10
+ content="Threadnote gives Codex, Claude, Cursor, and Copilot one shared local memory for durable decisions, current handoffs, seeded repo docs, skills, and team knowledge."
11
11
  />
12
12
 
13
13
  <link rel="icon" type="image/svg+xml" href="threadnote-logo.svg" />
14
14
 
15
- <meta property="og:title" content="Threadnote shared local context for development agents" />
15
+ <meta property="og:title" content="Threadnote - shared local memory for coding agents" />
16
16
  <meta
17
17
  property="og:description"
18
- content="One shared memory for Codex, Claude, Cursor, and Copilot. Local-first, cross-session, cross-agent."
18
+ content="Stop re-explaining project context. Fresh agents recall the latest handoff, durable decisions, and team-shared knowledge."
19
19
  />
20
20
  <meta property="og:image" content="threadnote-logo.svg" />
21
21
  <meta property="og:type" content="website" />
@@ -757,7 +757,7 @@
757
757
  <a href="#hero" data-label="Intro"><span>Intro</span></a>
758
758
  <a href="#problem" data-label="Problem"><span>Problem</span></a>
759
759
  <a href="#meet" data-label="Meet threadnote"><span>Meet</span></a>
760
- <a href="#vs-instructions" data-label="vs CLAUDE.md / AGENTS.md"><span>vs instructions</span></a>
760
+ <a href="#vs-instructions" data-label="vs Markdown"><span>vs Markdown</span></a>
761
761
  <a href="#how" data-label="How it works"><span>How</span></a>
762
762
  <a href="#safety" data-label="Safety model"><span>Safety</span></a>
763
763
  <a href="#install" data-label="Install"><span>Install</span></a>
@@ -776,14 +776,14 @@
776
776
  <div class="slide-inner">
777
777
  <img class="hero-logo" src="threadnote-logo-inverted.svg" alt="" aria-hidden="true" />
778
778
  <h1 class="hero-title-gradient">
779
- Shared local context<br />for <em class="hero-accent">development agents</em>.
779
+ Stop re-explaining<br />context to <em class="hero-accent">coding agents</em>.
780
780
  </h1>
781
781
  <p class="lead">
782
- One memory layer Codex, Claude, Cursor, and Copilot all see. Durable feature knowledge, recent handoffs, and
783
- team-shared decisions recallable from any session, on any agent, in any worktree.
782
+ Threadnote gives Codex, Claude, Cursor, and Copilot one shared local memory for durable decisions, current
783
+ handoffs, seeded repo docs, reusable skills, and team knowledge.
784
784
  </p>
785
785
  <div class="cta-row">
786
- <span class="pill"><span id="version-tag">v0.6.1</span> · local-first · AGPL-3.0-or-later</span>
786
+ <span class="pill"><span id="version-tag">v1.3.2</span> · local-first · AGPL-3.0-or-later</span>
787
787
  </div>
788
788
  </div>
789
789
  <div class="scroll-cue">scroll ↓ &nbsp;·&nbsp; <span class="kbd">↓</span> / <span class="kbd">j</span></div>
@@ -801,6 +801,10 @@
801
801
  <ul class="flat reveal" style="margin-top: 2rem">
802
802
  <li><strong>Conversation history evaporates.</strong> Compaction summarizes; the nuance is lost.</li>
803
803
  <li><strong>Each agent has its own memory.</strong> Switching from Codex to Claude means starting over.</li>
804
+ <li>
805
+ <strong>Markdown notes are passive.</strong> The agent still has to know which note matters now, whether
806
+ it is stale, and where to write the next handoff.
807
+ </li>
804
808
  <li>
805
809
  <strong>CLAUDE.md/AGENTS.md is per-repo and static.</strong> It can't carry an in-flight feature's design
806
810
  decisions across sessions, much less across agents or repos.
@@ -839,10 +843,10 @@
839
843
  </div>
840
844
  <div class="card reveal">
841
845
  <span class="card-kicker">Cross-session</span>
842
- <h3>Survives compaction</h3>
846
+ <h3>More than compaction</h3>
843
847
  <p>
844
- After the context window fills up, the next turn recalls durable feature memories and the latest handoff
845
- instead of relying on the compressed summary alone.
848
+ Compaction summarizes a conversation. Threadnote stores explicit handoffs and durable memories the next
849
+ session can recall, inspect, update, archive, or share.
846
850
  </p>
847
851
  </div>
848
852
  <div class="card reveal">
@@ -863,30 +867,64 @@
863
867
  </p>
864
868
  </div>
865
869
  </div>
870
+
871
+ <div class="compare reveal" style="margin-top: 2rem">
872
+ <div class="compare-col">
873
+ <h3 class="warm">Before Threadnote</h3>
874
+ <ul class="flat">
875
+ <li>
876
+ <strong>Codex:</strong> asks what changed, rediscovers the test command, and trusts a compacted chat
877
+ summary to keep the important caveat.
878
+ </li>
879
+ <li>
880
+ <strong>Claude Code:</strong> resumes a long debugging thread with the story arc, but not the exact
881
+ blocker, command output, or decision that matters.
882
+ </li>
883
+ </ul>
884
+ </div>
885
+
886
+ <div class="compare-col">
887
+ <h3>With Threadnote</h3>
888
+ <ul class="flat">
889
+ <li>
890
+ <strong>Codex:</strong> recalls the branch handoff and durable feature memory before editing: files
891
+ touched, last failing check, design reason, next step.
892
+ </li>
893
+ <li>
894
+ <strong>Claude Code:</strong> snapshots concrete state before compaction and reads the same memory in
895
+ the next session instead of asking the user to reconstruct it.
896
+ </li>
897
+ </ul>
898
+ </div>
899
+ </div>
866
900
  </div>
867
901
  </section>
868
902
 
869
903
  <!-- 4. vs CLAUDE.md / AGENTS.md -->
870
904
  <section id="vs-instructions" class="slide">
871
905
  <div class="slide-inner">
872
- <span class="slide-eyebrow">03 · Why not just CLAUDE.md or AGENTS.md?</span>
873
- <h2>Use them. Threadnote is not a replacement.</h2>
906
+ <span class="slide-eyebrow">03 · Why not just Markdown files?</span>
907
+ <h2>Use Markdown. Threadnote makes it operational.</h2>
874
908
  <p class="lead">
875
- They are perfect for stable, canonical, version-controlled rules. They are wrong for living context what
876
- happened in the last session, which branch is mid-refactor, which on-call workaround actually shipped.
909
+ The source of truth is still plain files on disk. The difference is that agents can recall the right
910
+ pointer, tell durable knowledge from current handoff state, replace stale notes, and share only what you
911
+ explicitly publish.
877
912
  </p>
878
913
 
879
914
  <div class="compare">
880
915
  <div class="compare-col reveal">
881
- <h3 class="warm">CLAUDE.md · AGENTS.md · Cursor rules</h3>
916
+ <h3 class="warm">Raw .md files</h3>
882
917
  <ul class="flat">
883
- <li><strong>Where it lives:</strong> in the repo, versioned, shared via PR.</li>
918
+ <li><strong>Where it lives:</strong> repo docs, personal notes, chat snippets, ad hoc handoffs.</li>
884
919
  <li>
885
- <strong>Best for:</strong> coding standards, test commands, review rules, architecture invariants.
920
+ <strong>Best for:</strong> stable repo policy, reviewed architecture docs, human-written references.
886
921
  </li>
887
- <li><strong>Read pattern:</strong> loaded into every agent context window in this repo.</li>
888
- <li><strong>Edit cost:</strong> human writes; PR review; high friction (which is the point).</li>
889
- <li><strong>Lifecycle:</strong> long-lived. Stale entries hurt every session.</li>
922
+ <li><strong>Read pattern:</strong> humans decide what to paste or agents grep broad folders.</li>
923
+ <li>
924
+ <strong>Edit cost:</strong> no lifecycle; easy to make another note instead of updating the current
925
+ one.
926
+ </li>
927
+ <li><strong>Failure mode:</strong> stale context quietly looks as authoritative as current context.</li>
890
928
  </ul>
891
929
  </div>
892
930
 
@@ -898,21 +936,25 @@
898
936
  to a team git repo.
899
937
  </li>
900
938
  <li>
901
- <strong>Best for:</strong> feature knowledge, handoffs, branch state, prod-on-call findings, personal
902
- workflow facts.
939
+ <strong>Best for:</strong> feature knowledge, handoffs, branch state, prod-on-call findings, skills,
940
+ and personal workflow facts.
941
+ </li>
942
+ <li>
943
+ <strong>Read pattern:</strong> semantic recall returns scoped <code>viking://</code> URIs; only
944
+ relevant content enters the context window.
903
945
  </li>
904
946
  <li>
905
- <strong>Read pattern:</strong> recalled on demand; only the relevant URIs enter the context window.
947
+ <strong>Edit cost:</strong> agents write and replace one stable <code>project/topic</code>; humans
948
+ guide.
906
949
  </li>
907
- <li><strong>Edit cost:</strong> agents write; humans guide; low friction by design.</li>
908
950
  <li><strong>Lifecycle:</strong> durable / handoff / archived. Compact in place, never accrete.</li>
909
951
  </ul>
910
952
  </div>
911
953
  </div>
912
954
 
913
955
  <p class="muted" style="margin-top: 1.5rem">
914
- <strong style="color: var(--text)">The split:</strong> put repo policy in the .md files. Put feature
915
- history, in-flight task state, handoffs, and personal workflow facts in threadnote.
956
+ <strong style="color: var(--text)">The split:</strong> put canonical repo policy in checked-in docs. Put
957
+ living context, in-flight task state, handoffs, and personal workflow facts in Threadnote.
916
958
  </p>
917
959
  </div>
918
960
  </section>
@@ -1098,14 +1140,14 @@
1098
1140
  <div class="terminal-bar"><span></span><span></span><span></span></div>
1099
1141
  <pre><span class="cmd">$ curl -fsSL https://raw.githubusercontent.com/Kashkovsky/threadnote/main/scripts/install.sh | sh</span>
1100
1142
 
1101
- <span class="out">Installed threadnote@1.0.0</span>
1143
+ <span class="out">Installed threadnote@1.3.2</span>
1102
1144
  <span class="out">Already exists: ~/.local/bin/threadnote</span>
1103
1145
  <span class="out">OpenViking installs into Python; neither uv nor pipx is</span>
1104
1146
  <span class="out">on PATH so threadnote would fall back to `pip install</span>
1105
1147
  <span class="out">--user`, which fails on PEP 668 setups.</span>
1106
1148
  <span class="out">Install uv now? [Y/n] </span><span class="out-strong">Y</span>
1107
1149
  <span class="out">Installing uv via Homebrew…</span>
1108
- <span class="out-strong">OK openviking 0.3.24 ready · server healthy</span></pre>
1150
+ <span class="out-strong">OK openviking 0.4.4 ready · server healthy</span></pre>
1109
1151
  </div>
1110
1152
  <p class="muted" style="margin-top: 0.75rem; font-size: 0.9rem">
1111
1153
  Or manually: <code>npm install -g threadnote && threadnote install</code>. On a fresh macOS / modern
@@ -1485,6 +1527,19 @@ threadnote remember \
1485
1527
  </div>
1486
1528
  </div>
1487
1529
 
1530
+ <div class="vignette reveal">
1531
+ <div class="v-say">Isn't this just auto-compaction plus Markdown files?</div>
1532
+ <pre class="v-call">recall_context({query: "&lt;repo&gt; current handoff durable feature memory"})</pre>
1533
+ <pre class="v-response">
1534
+ → active handoff: status · tests · blockers · next step
1535
+ → durable memory: design decisions · API contracts · gotchas</pre
1536
+ >
1537
+ <div class="v-answer">
1538
+ Compaction compresses a conversation. Threadnote stores explicit records with lifecycle, stable URIs,
1539
+ scoped recall, replacement, archiving, and optional team publishing.
1540
+ </div>
1541
+ </div>
1542
+
1488
1543
  <div class="vignette reveal">
1489
1544
  <div class="v-say">Continue where we left off on this branch.</div>
1490
1545
  <pre class="v-call">recall_context({query: "&lt;branch&gt; latest handoff durable feature memory"})</pre>
@@ -1596,7 +1651,7 @@ threadnote doctor --dry-run</code></pre>
1596
1651
  </div>
1597
1652
 
1598
1653
  <p class="colophon">
1599
- threadnote · AGPL-3.0-or-later · built on OpenViking 0.3.24 · use <span class="kbd">↑</span>
1654
+ threadnote · AGPL-3.0-or-later · built on OpenViking 0.4.4 · use <span class="kbd">↑</span>
1600
1655
  <span class="kbd">↓</span> / <span class="kbd">j</span> <span class="kbd">k</span> to navigate
1601
1656
  </p>
1602
1657
  </div>
package/docs/migration.md CHANGED
@@ -108,6 +108,12 @@ paths.
108
108
  threadnote seed
109
109
  ```
110
110
 
111
+ Seeded docs refresh on the next `threadnote seed`/`repair`, which re-runs the
112
+ secret scan. To let OpenViking auto-refresh them between runs, opt in with
113
+ `THREADNOTE_SEED_WATCH_INTERVAL=<minutes> threadnote seed`. Watches attach
114
+ only to original, non-redaction-prone files, since an OpenViking-managed
115
+ refresh re-ingests the file without Threadnote's per-import secret scan.
116
+
111
117
  7. Inspect and seed shared skills:
112
118
 
113
119
  ```bash
package/manager/app.js CHANGED
@@ -7,7 +7,11 @@
7
7
  var __getProtoOf = Object.getPrototypeOf;
8
8
  var __hasOwnProp = Object.prototype.hasOwnProperty;
9
9
  var __commonJS = (cb, mod) => function __require() {
10
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
+ try {
11
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
12
+ } catch (e) {
13
+ throw mod = 0, e;
14
+ }
11
15
  };
12
16
  var __export = (target, all2) => {
13
17
  for (var name2 in all2)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "threadnote",
3
- "version": "1.3.2",
3
+ "version": "1.4.0",
4
4
  "type": "commonjs",
5
5
  "main": "dist/threadnote.cjs",
6
6
  "description": "Shared local context and handoffs for development agents",