@hraness/wordcell 0.20.0 → 0.21.1

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.
Files changed (82) hide show
  1. package/README.md +119 -632
  2. package/assets/agent-skill.svg +1 -0
  3. package/dist/agent-context.js +1 -0
  4. package/dist/agent-guide-audit.js +1 -0
  5. package/dist/attachments.js +1 -0
  6. package/dist/authoring.js +1 -0
  7. package/dist/authority-4sp9d552.js +663 -0
  8. package/dist/benchmark.js +1 -0
  9. package/dist/capture.js +1 -0
  10. package/dist/cli.js +3781 -32
  11. package/dist/clip/acquire.js +1 -0
  12. package/dist/clip/args.js +1 -0
  13. package/dist/clip/bounded-byte-buffer.js +1 -0
  14. package/dist/clip/browser-profiles.js +1 -0
  15. package/dist/clip/bundle-reader.js +1 -0
  16. package/dist/clip/cli.js +1 -0
  17. package/dist/clip/cookies.js +1 -0
  18. package/dist/clip/doctor.js +1 -0
  19. package/dist/clip/jobs.js +1 -0
  20. package/dist/clip/network-proxy.js +1 -0
  21. package/dist/clip/network.js +1 -0
  22. package/dist/clip/persist.js +1 -0
  23. package/dist/clip/refresh.js +1 -0
  24. package/dist/clip/terminal.js +1 -0
  25. package/dist/evaluation-builder.js +13 -5
  26. package/dist/evaluation-kb.js +11 -4
  27. package/dist/evaluation.js +1 -0
  28. package/dist/git.js +1 -0
  29. package/dist/graph-authority.js +29 -0
  30. package/dist/graph-percolation.js +16 -0
  31. package/dist/graph.js +1 -0
  32. package/dist/index-0k2x4nn9.js +393 -0
  33. package/dist/{index-n05s3wsb.js → index-115b07ap.js} +156 -541
  34. package/dist/index-11621h23.js +160 -0
  35. package/dist/{index-tkpxp48t.js → index-51bap0mq.js} +2 -2
  36. package/dist/{index-8a08v6x8.js → index-59ssmqqm.js} +1 -1
  37. package/dist/index-bcfn9xah.js +472 -0
  38. package/dist/index-bgfzwt4h.js +51 -0
  39. package/dist/{index-bs0yf4pp.js → index-pbr6rv47.js} +2 -2
  40. package/dist/{index-m7et4rz4.js → index-vdw5yjfa.js} +61 -9
  41. package/dist/index-z1w83f81.js +4 -0
  42. package/dist/index.js +61 -34
  43. package/dist/navigation.js +1 -0
  44. package/dist/pdf.js +1 -0
  45. package/dist/percolate.js +1 -0
  46. package/dist/portfolio.js +11 -4
  47. package/dist/query.js +1 -0
  48. package/dist/repository-memory.js +1 -0
  49. package/dist/sdk.js +10 -3
  50. package/dist/search-rules.js +1 -0
  51. package/dist/search.js +1 -0
  52. package/dist/semantic.js +3 -1
  53. package/dist/source-inbox.js +1 -0
  54. package/dist/untrusted-content.js +1 -0
  55. package/dist/url-intelligence.js +1 -0
  56. package/dist/workflow.js +1 -0
  57. package/dist/workflows/decision-context.js +11 -4
  58. package/dist/workflows/explain-change.js +1 -0
  59. package/dist/workflows/index.js +11 -4
  60. package/dist/workflows/plan-radar.js +1 -0
  61. package/package.json +30 -7
  62. package/skills/wordcell/SKILL.md +2 -2
  63. package/skills/wordcell/references/percolate.md +4 -0
  64. package/skills/wordcell/references/query.md +6 -0
  65. package/src/cli-program.ts +45 -2
  66. package/src/graph-authority-model.ts +116 -0
  67. package/src/graph-authority.ts +219 -0
  68. package/src/graph-cache-filesystem.ts +4 -0
  69. package/src/graph-cli.ts +96 -0
  70. package/src/graph-facts.ts +206 -0
  71. package/src/graph-percolation.ts +39 -0
  72. package/src/graph-query.ts +122 -0
  73. package/src/index.ts +2 -0
  74. package/src/oh/authority.ts +193 -0
  75. package/src/oh/programs.ts +99 -0
  76. package/src/oh/schema.ts +40 -0
  77. package/src/oh/snapshot.ts +114 -0
  78. package/src/oh/validation.ts +61 -0
  79. package/src/sdk.ts +51 -6
  80. package/dist/index-sy0zety7.js +0 -3630
  81. package/dist/kb-alias.js +0 -55
  82. package/src/kb-alias.ts +0 -14
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <!-- hraness:wordcell-landing:start -->
2
2
  # Wordcell
3
3
 
4
- [![skills.sh](https://skills.sh/b/hraness/wordcell)](https://skills.sh/hraness/wordcell)
4
+ [![Agent Skill](https://raw.githubusercontent.com/hraness/wordcell/main/assets/agent-skill.svg)](https://github.com/hraness/wordcell/tree/main/skills/wordcell)
5
5
 
6
6
  A knowledge base for coding agents, built from Markdown, backlinks, semantic
7
7
  search, and Git context.
@@ -9,15 +9,50 @@ It turns sources, plans, and decisions into inspectable context that agents can
9
9
  recover across sessions without coupling application code to the knowledge
10
10
  system.
11
11
 
12
+ [Documentation](https://wordcell.io/docs) · [npm package](https://www.npmjs.com/package/@hraness/wordcell) · [Graph guide](https://github.com/hraness/wordcell/blob/main/docs/graph-authority.md) · [Changelog](https://github.com/hraness/wordcell/blob/main/CHANGELOG.md)
13
+
12
14
  ## Install
13
15
 
14
- Bun 1.3.14 or newer is required.
16
+ [Bun 1.3.14 or newer](https://bun.sh/docs/installation) and Git are required.
17
+ The CLI and TypeScript SDK run with Bun. Choose one installation source:
15
18
 
16
19
  ```sh
17
- bun add --global --ignore-scripts https://github.com/hraness/wordcell/releases/download/v0.20.0/hraness-wordcell-0.20.0.tgz
20
+ # Canonical, versioned GitHub archive
21
+ bun add --global --ignore-scripts https://github.com/hraness/wordcell/releases/download/v0.21.1/hraness-wordcell-0.21.1.tgz
18
22
  wordcell --help
19
23
  ```
20
24
 
25
+ The same release is mirrored to [npm](https://www.npmjs.com/package/@hraness/wordcell):
26
+
27
+ ```sh
28
+ npm install --global --ignore-scripts @hraness/wordcell@0.21.1
29
+ wordcell --help
30
+ ```
31
+
32
+ Bun must remain in `PATH` when npm installs the commands. Exact search and
33
+ Markdown graph commands need no account, service, or embedding model. Optional
34
+ semantic search, browser capture, and PDF tools have [additional prerequisites](https://github.com/hraness/wordcell/blob/main/docs/reference.md#review-lifecycle-scripts-before-enabling-optional-adapters).
35
+
36
+ ### Use with a coding agent
37
+
38
+ Install the single public Agent Skill into your choice of compatible agent,
39
+ including Claude Code, Codex, Cursor, or GitHub Copilot:
40
+
41
+ ```sh
42
+ bunx skills add hraness/wordcell#v0.21.1 --skill wordcell
43
+ ```
44
+
45
+ Then ask:
46
+
47
+ ```text
48
+ Use Wordcell to find the notes and plans about packages/parser in ./kb.
49
+ Open the sources behind the result and explain the recorded decision.
50
+ ```
51
+
52
+ The skill installs instructions, not a running service. It uses an existing
53
+ `wordcell` command and prepares the pinned runtime only when needed. Installing
54
+ it does not create a vault or modify your notes. [Read the skill](https://github.com/hraness/wordcell/blob/main/skills/wordcell/SKILL.md).
55
+
21
56
  ## Keep one decision available to the next session
22
57
 
23
58
  Suppose a parser must stop retrying after three attempts. Record that constraint
@@ -78,672 +113,124 @@ neither the vault nor a hosted knowledge service.
78
113
 
79
114
  <!-- hraness:wordcell-landing:end -->
80
115
 
81
- ## Links
116
+ ## What you can do
82
117
 
83
- [Install Wordcell from GitHub Releases](https://github.com/hraness/wordcell/releases) ·
84
- [Wordcell source on GitHub](https://github.com/hraness/wordcell) ·
85
- [Wordcell overview](https://wordcell.io)
86
-
87
- ## A knowledge base for your coding agents
88
-
89
- > Give coding agents durable, searchable memory beside the repository with plain Markdown, Git history, and replaceable local search.
90
-
91
- Coding agents lose useful context when a session ends. The next agent can search the code again, but it cannot recover a source that was never saved, a decision that stayed in chat, or the relationship between two notes that nobody recorded. Repeating that work costs time and produces inconsistent answers.
92
-
93
- Search alone cannot preserve agent memory. The system also needs a write path into inspectable files under version control: evidence can be captured, current understanding can be revised, plans can accumulate outcomes, and mandatory edit rules can move onto the instruction path. Search indexes, graph views, and embeddings used for meaning-based similarity should remain derived and replaceable.
94
-
95
- [hraness/wordcell](<https://wordcell.io>) implements that split as repository-adjacent Markdown and Git. Exact lookup, metadata filters, local search, explicit links, and Git provenance help an agent find and inspect the files without making application code depend on the knowledge system.
96
-
97
- ### The pattern converged across agent tools
118
+ | Task | Command | Evidence and effects |
119
+ | --- | --- | --- |
120
+ | Find a saved decision | `wordcell search "parser retries" --root kb --mode exact` | Reads current Markdown; no model or network request. |
121
+ | Recover context for code | `wordcell context packages/parser/src/index.ts --root kb --repo .` | Returns scoped notes, plans, and inherited `AGENTS.md` rules. |
122
+ | Inspect explicit connections | `wordcell backlinks notes/parser-contract --root kb` | Returns notes that link to the decision. |
123
+ | Search by meaning | `wordcell search "retry policy" --root kb --mode hybrid` | Adds optional local QMD keyword and vector retrieval; model setup is required. |
124
+ | Query with graph proofs | `wordcell graph query --program scope-route --scope packages/parser --root kb` | Returns bounded results tied to the source revision. Queries do not write a cache. |
125
+ | Capture a source | `wordcell clip https://example.com/article --output kb/articles` | Reads the selected URL and writes a Markdown bundle with a capture receipt. |
126
+ | Capture a PDF | `wordcell pdf /absolute/path/to/document.pdf --output kb/articles` | Preserves the original PDF and extracted evidence; Poppler is required. |
127
+ | Check the vault | `wordcell check --root kb` | Reports structural and attachment problems without editing files. |
98
128
 
99
- [Devin's 2024 release history](<https://docs.devin.ai/release-notes/2024>) records Knowledge that could be recalled across future sessions and Repo Knowledge produced by scanning repositories. Its [2025 release history](<https://docs.devin.ai/release-notes/2025>) records DeepWiki in April, codebase intelligence inside Devin in May, and a DeepWiki Model Context Protocol server later that month.
129
+ Use `--json` for structured output and `wordcell --help` for the complete command
130
+ surface. [Full command reference](https://github.com/hraness/wordcell/blob/main/docs/reference.md#command-surface).
100
131
 
101
- In April 2026, Andrej Karpathy published an [LLM Wiki proposal](<https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f>) with immutable raw sources, an agent-maintained interlinked Markdown wiki, and an instruction schema. Its operations are ingest, query, and lint, with QMD as an optional search layer when a simple index stops being enough. These systems converged on durable agent-readable knowledge. The sequence does not establish direct lineage between them or hraness/wordcell.
102
-
103
- ### Separate rules from explanations
104
-
105
- A repository needs two kinds of memory. Rules that must govern an edit belong in a scoped `AGENTS.md` file on the path to the code. Rationale, history, examples, evidence, plans, and neighboring decisions belong in a knowledge base that an agent pulls only when the task needs them. This keeps mandatory instructions short without throwing away the context behind them.
106
-
107
- A root guide carries repository-wide policy, and nested guides add constraints owned by a package or product. A nearby knowledge note can explain why a parser rejects a tempting shortcut, preserve the source behind the decision, and link the plan that introduced it. If the note and the applicable guide disagree, the guide controls the edit and the note needs repair.
108
-
109
- The result has two concrete parts: scoped instruction files govern edits, while an ordinary Markdown vault stores supporting context. Application code imports neither the vault nor its search indexes:
110
-
111
- **Repository rules beside durable knowledge**
132
+ ## How the files fit together
112
133
 
113
134
  ```text
114
135
  repository/
115
- ├── AGENTS.md # inherited root rules
136
+ ├── AGENTS.md # rules that govern edits
116
137
  ├── packages/parser/
117
- │ ├── AGENTS.md # scoped rules and checks
118
- │ └── src/
138
+ │ └── AGENTS.md # rules scoped to this code
119
139
  └── kb/
120
- ├── articles/<slug>/ # captured evidence and assets
121
- ├── notes/ # maintained explanations
122
- ├── plans/ # decisions and outcomes
123
- └── index.md # short authored front door
140
+ ├── index.md # authored or managed front door
141
+ ├── articles/ # captured sources and assets
142
+ ├── notes/ # maintained explanations
143
+ └── plans/ # decisions and outcomes
124
144
  ```
125
145
 
126
- ### Keep the implementation small and the files authoritative
127
-
128
- hraness/wordcell packages the pattern as a small file contract. A useful vault can begin with Markdown, Git, `index.md`, and standard file search. Source capture, metadata queries, repository-path context, QMD, typed relationships, graph traversal, and TypeScript sessions are layers to add when the simpler setup stops answering the repository's questions. Application code need not import Wordcell, and no hosted service or graph database owns its records.
129
-
130
- Captured sources preserve evidence, notes hold current explanations, and plans retain decisions and outcomes. YAML frontmatter adds queryable metadata without requiring one domain schema for every vault. A code-related record may declare a few exact repository-relative `repository_scopes` so an agent can recover it from the path it is about. The declaration stays in the record instead of a central project database, which lets parallel agents update unrelated memory without sharing a generated file.
131
-
132
- The Markdown files are authoritative. The catalog, QMD database, backlink view, path-context view, graph traversal, and bounded Git index are derived and replaceable. A vault can keep a managed catalog or an authored front door and render the complete inventory on demand. Deleting one of those views removes a way to retrieve knowledge, not the knowledge itself.
133
-
134
- ### Route current memory from the code path
135
-
136
- A broad semantic search over years of completed plans can rank a detailed historical record above the short explanation that owns the code today. `wordcell context packages/parser/src/index.ts --root kb --repo .` starts from a stronger signal: the path being changed. It returns the inherited guides that govern the edit, curated scope hubs, and bounded records whose declared scope is that path or one of its ancestors.
137
-
138
- The records stay grouped by role. Maintained notes, proposed through blocked plans, dated market research, and generated reports form current memory. Completed, superseded, and cancelled plans remain available in a separate historical group. Every result states the declaration that matched and whether the target currently exists. A plan can therefore describe a future path, while a retired path remains honest historical evidence instead of being silently rewritten after a rename.
139
-
140
- **Path context, exact scope filtering, and Git memory**
141
-
142
- ```shell
143
- wordcell context packages/parser/src/index.ts --root kb --repo .
144
- wordcell list --root kb --scope packages/parser --where type=plan --json
145
- wordcell history search packages/parser/src/index.ts --root kb --repo . --json
146
- ```
147
-
148
- ### Preserve evidence and plans as working records
149
-
150
- Durable reasoning needs inspectable evidence. `wordcell clip` can read a public URL,
151
- saved HTML, rendered page, a page already open in an authenticated browser, or
152
- an existing exact Archive.today snapshot after the direct routes fail. Archive
153
- fallback is read-only and always partial. The
154
- [capture documentation](docs/capture.md) defines the supported routes. A capture
155
- writes readable Markdown beside localized assets and `capture.json`, whose
156
- manifest records where the material came from, how it was extracted, what was
157
- saved, and any warnings. “Complete” describes the selected page surface, not
158
- every hidden branch or future version of the site.
159
-
160
- **Capture a web source or local PDF**
161
-
162
- ```shell
163
- wordcell clip "https://example.com/article" --output articles
164
- wordcell pdf "/absolute/path/to/document.pdf" --output articles
165
- ```
166
-
167
- The resulting bundle is evidence, not final interpretation. A maintained note can cite several captures, record disagreement, and change when later evidence warrants it. The sources stay available for audit. This prevents an agent from silently replacing what a page said with what it now believes the page meant.
168
-
169
- The `wordcell` Agent Skill routes vault planning requests to a focused durable-plan workflow. It creates a normal Markdown file under `kb/plans/` with an outcome, status, area, repository scopes, assumptions, dependencies, decisions, and verification method. The file grows during execution as agents record deviations, review findings, and reproducible evidence. Closeout adds a compact result and durable-memory disposition: each reusable conclusion links to the maintained note, guide, code contract, or runbook that now owns it, or says that no promotion was needed. Completed plans remain in Git as the history of the work. When a finding becomes a rule whose omission would make a future edit wrong, move that rule into the applicable `AGENTS.md` and retain the plan as its rationale.
170
-
171
- ### Search and connect with bounded signals
172
-
173
- An identifier, title, alias, path, tag, or quoted phrase should not depend on an embedding. Exact mode reads the live Markdown. The default hybrid mode combines those results with keyword and vector result orders from [QMD, a local search engine for Markdown](<https://github.com/tobi/qmd>), while keeping exact identity matches first. Graph context and Git provenance remain separate evidence, so neither silently changes the primary text rank.
174
-
175
- **Path context, exact and hybrid search, and direct history**
176
-
177
- ```shell
178
- wordcell context packages/parser/src/index.ts --root kb --repo .
179
- wordcell search "parser-v2" --root kb --mode exact
180
- wordcell search "why does the parser reject this input?" --root kb \
181
- --tag architecture --where status=active --json
182
- wordcell history "notes/parser-design" --root kb --repo . --json
183
- ```
184
-
185
- `--mode keyword` uses QMD's local full-text index without loading an embedding model. Hybrid and semantic modes use a pinned local embedding model. Wordcell reconciles every QMD hit with current Markdown before returning it, and applies metadata and tag filters to those live notes. Search modes remain explicit through `--mode exact`, `--mode keyword`, `--mode semantic`, and `--mode hybrid`.
186
-
187
- Retrieval is bounded. The high-level `wordcell search` and `KnowledgeBaseSession.search` surfaces return at most 100 primary results and request at most 500 candidates from each QMD retrieval lane. Selective filters can discard stale or ineligible rows from that window. When those discards prevent Wordcell from filling the requested eligible result set, Wordcell marks the QMD lane degraded and the overall result partial instead of presenting the bounded approximation as complete. Scores are local ranking signals, not probabilities, and cannot be compared across modes.
188
-
189
- Each note owns its outbound typed relationships in frontmatter. Wordcell derives backlinks, inverse edges, and bounded traversal at read time, so parallel agents do not contend on one generated fact file. `wordcell percolate <note>` reports recurring concepts and missing-link candidates with inspectable support but writes nothing. An agent reads the cited notes before creating a reusable concept or relationship. Semantic similarity never creates an edge automatically.
190
-
191
- Percolation Result V2 presents a missing relationship as an unordered pair of
192
- notes with a required predicate. It does not choose the source, direction, or a
193
- `related-to` fallback. Recommended authored predicates include `synthesizes`,
194
- `evidenced-by`, `informed-by`, `supersedes`, and `contradicts`; they are an
195
- advisory vocabulary, so a vault can use another canonical predicate when its
196
- prose and evidence define the claim. Wordcell never infers reciprocal, inverse,
197
- transitive, or similarity-derived relationships.
198
-
199
- Git provenance is opt-in. A search without `--history` performs no Git indexing. `--history` requests best-effort provenance, while `--require-history` rejects unavailable history or incomplete provenance for the selected notes. If one commit exceeds the 2,000-path detail limit, Wordcell retains its identity and vault-local note associations, marks its co-change detail incomplete, and continues through later commits. Best-effort search reports that requested lane as partial.
200
-
201
- Local attachment checks cover Markdown and Obsidian references to images, PDFs, and editable tldraw sources. They reject missing or escaping files while leaving external URLs alone. A source-inbox view separately lists recent captures that have no inbound disposition from maintained knowledge. It is an advisory, not an automatic backlink requirement: a saved source may intentionally remain a leaf.
202
-
203
- ### Measure retrieval on a frozen corpus
204
-
205
- The August 2, 2026 pilot froze one repository snapshot and 18 questions whose graded relevance judgments were written before the rankings were inspected. The evaluator scanned 156 Markdown records and projected 155 searchable notes into QMD after excluding the authored vault index and agent guides. Nine questions formed the development set, and nine were held out for the test. The test covered exact identity, conceptual recall, active plans, current decisions, code-path context, source evidence, historical rationale, stale-versus-current conflicts, and one no-answer case.
206
-
207
- At a cutoff of 10 results, exact search recorded `Recall@10` of 0.833333, `MRR@10` of 0.892857, and `nDCG@10` of 0.790377. Hybrid search recorded 0.833333, 0.937500, and 0.833884, respectively. Recall measures how much of the judged relevant set appeared; mean reciprocal rank rewards an earlier first relevant result; normalized discounted cumulative gain also accounts for graded relevance and position.
208
-
209
- Eight test questions had an answer. A 10,000-resample paired bootstrap, which repeatedly samples those same questions to estimate the stability of the difference, measured hybrid minus exact. The `Recall@10` difference was 0 with a 95% confidence interval of \[0, 0\]; the `MRR@10` difference was +0.044643 with \[0, 0.133929\]; and the `nDCG@10` difference was +0.043508 with \[-0.012752, 0.111832\]. Both retrievers returned a result for the one no-answer question instead of abstaining, so their no-answer accuracy was 0.
146
+ Markdown, YAML frontmatter, explicit wikilinks, and Git hold the record. Open
147
+ the same files in Obsidian, a text editor, or ordinary file-search tools.
148
+ Application code does not need to import Wordcell or its vault.
210
149
 
211
- The same mixed-cache, single-run test recorded p95 latencies of 44.345 milliseconds for exact, 62.834 for hybrid, 821.370 for keyword, and 41,000.524 for semantic retrieval. The semantic figure includes the first in-process model load. The run used [QMD 2.5.3 at Hraness compatibility commit aa993dc](<https://github.com/hraness/qmd/commit/aa993dceb3ef8cfb71d470554ca437570f5a2b3c>) and a locally verified EmbeddingGemma 300M Q8 model on Bun 1.3.14 and Node 24.3.0 under arm64 Darwin 25.5.0, with an Apple M4 Max, 16 logical CPUs, and 128 GiB of memory. Each p95 summarizes only nine queries with mixed cold and warm state, so these are local diagnostics, not speed claims. The corpus is too small to establish that hybrid is generally superior to exact search or to compare Wordcell with industry retrieval systems.
150
+ QMD supplies optional local search. Oh supplies a disposable graph projection;
151
+ only an explicit `wordcell graph rebuild --root kb` writes `.wordcell/oh.sqlite`.
152
+ Backlinks and typed relationships come from authored links. Percolation
153
+ suggests connections for review and does not add inferred edges to notes.
212
154
 
213
- Search finds candidates. Similarity does not establish that a passage is current, correct, or supported by its sources. The Markdown, cited captures, explicit relationships, and requested Git history supply the material a reader must inspect.
155
+ Graph proofs explain a supported derivation from a specific source revision.
156
+ They do not prove that a note is true or that a missing relationship cannot
157
+ exist. [Graph queries and proof limits](https://github.com/hraness/wordcell/blob/main/docs/graph-authority.md).
214
158
 
215
- ### Customize through an approved proposal
159
+ ## Build with the TypeScript SDK
216
160
 
217
- The Agent Skill routes setup and evolution requests before it prepares a
218
- runtime. It inspects the proposed location without mutation, interviews the
219
- user about the memory questions the Wordcell should answer, and presents exact read
220
- and write targets. Only the approved targets may be scaffolded. A changed path,
221
- repository, account, integration, or companion skill requires renewed
222
- approval.
223
-
224
- The standard router may be enough. A recurring ritual can instead receive a
225
- companion skill with explicit inputs, authority, durable outputs, idempotence,
226
- failure behavior, and verification. These skills are inert instructions. They
227
- do not create a plugin runtime, execute vault metadata, inherit ambient account
228
- access, or couple application code to the Wordcell. An exact repeat is a no-op;
229
- divergence, path escape, symbolic links, partial writes, and unapproved
230
- external surfaces stop the workflow.
231
-
232
- The repository's fake-capability suite exercises those transitions. It is a
233
- tested contract example, not proof that every agent or host integration
234
- complies.
235
-
236
- This workflow builds on Frank Chen's public notes about [designing a personal
237
- knowledge base with an
238
- agent](https://gist.github.com/fxchen/773397095d7a6bffda621e4237da0da9)
239
- and [extending it with
240
- skills](https://gist.github.com/fxchen/09cb410b22c9c5256d80243ee925b57e).
241
-
242
- Wordcell ships no `kb_role` metadata, lifecycle resolver or API, lifecycle CLI,
243
- compatibility diagnostic, or metadata migration. A frozen Phase 0 value gate
244
- must show that those surfaces improve deterministic agent decisions before they
245
- are introduced. Current and historical plan routing remains derived from
246
- existing type, path, and status conventions.
247
-
248
- ### Adopt the smallest useful split
249
-
250
- Start with a short inherited `AGENTS.md` path for rules whose omission would make an edit wrong. A small knowledge base may need only Markdown, Git, an index page, and ordinary file search. Add source capture when evidence keeps disappearing. Add repository scopes when agents need to recover current memory from code paths. Add metadata or hybrid search when file search stops answering the repository's questions. Add links and graph views only when the relationships themselves help people make decisions.
251
-
252
- Treat the knowledge base as repository-adjacent durable memory. Authored Markdown and Git are the record; catalogs, indexes, embeddings, and graph views are replaceable ways to find and inspect it. Checks can validate structure, captures can preserve a selected surface, and similarity can suggest candidates. None of those mechanisms proves that a source is trustworthy or an explanation is still true. People and agents must revise the knowledge as the repository changes.
253
-
254
- ## Installation reference
255
-
256
- [Bun](https://bun.sh/docs/installation) is the required runtime. GitHub Releases are the canonical distribution, and each release publishes the same archive to npm as `@hraness/wordcell`. The examples target the prepared `0.20.0` release and become available when its GitHub release is published. Existing `@hraness/kb` installs remain available during that transition. For signed artifact verification, see [the release procedure](docs/publishing.md#verify-a-published-release).
257
-
258
- ### Tell your coding agent to install it
259
-
260
- Copy this prompt into Codex, Claude Code, or another coding agent:
261
-
262
- ```text
263
- Install the `wordcell` Agent Skill from `hraness/wordcell#v0.20.0` with the standard skills
264
- CLI. Use the skill's runtime instructions to install the exact
265
- versioned GitHub release archive only when the command is missing. Verify it
266
- with `wordcell doctor` and `wordcell --help`, but do not initialize or modify a vault until
267
- I ask.
268
- ```
269
-
270
- Install the single public skill with either runner:
271
-
272
- ```sh
273
- npx skills add hraness/wordcell#v0.20.0
274
- bunx skills add hraness/wordcell#v0.20.0
275
- ```
276
-
277
- Both commands discover the same `wordcell` skill and install it into the selected
278
- agent runner. Skill installation is inert: it does not initialize a vault,
279
- refresh a catalog, or edit Markdown. When invoked, the skill uses an existing
280
- `wordcell` command or, when the command is missing, checks for Bun and installs the
281
- CLI from the immutable GitHub release archive.
282
-
283
- The public skills CLI reads `skills/wordcell/` from the repository. The immutable
284
- `0.20.0` packed release includes the same tree under
285
- `node_modules/@hraness/wordcell/skills/wordcell/`, and the package check verifies that the
286
- installed skill is byte-identical to the repository source.
287
-
288
- Install the two global commands with Bun:
289
-
290
- ```sh
291
- bun add --global --ignore-scripts https://github.com/hraness/wordcell/releases/download/v0.20.0/hraness-wordcell-0.20.0.tgz
292
- wordcell --help
293
- wordcell-evaluation-builder --help
294
- ```
295
-
296
- The same GitHub archive can be installed with npm:
297
-
298
- ```sh
299
- npm install --global --ignore-scripts https://github.com/hraness/wordcell/releases/download/v0.20.0/hraness-wordcell-0.20.0.tgz
300
- wordcell --help
301
- ```
302
-
303
- Both commands are Bun executables. Bun `1.3.14` or newer must remain in `PATH`
304
- even when npm performs the global installation. The conservative npm command
305
- above disables dependency lifecycle scripts. Optional native search and
306
- rendered-browser setup remain unavailable until the relevant scripts are
307
- reviewed and enabled; run `wordcell doctor` to inspect the resulting capabilities.
308
-
309
- For programmatic use, add the versioned GitHub archive to a Bun project:
310
-
311
- ```sh
312
- bun add --exact --ignore-scripts https://github.com/hraness/wordcell/releases/download/v0.20.0/hraness-wordcell-0.20.0.tgz
313
- ```
314
-
315
- The resulting dependency should remain exact:
316
-
317
- ```json
318
- {
319
- "dependencies": {
320
- "@hraness/wordcell": "https://github.com/hraness/wordcell/releases/download/v0.20.0/hraness-wordcell-0.20.0.tgz"
321
- }
322
- }
323
- ```
324
-
325
- Version 0.20.0 retains two public GitHub dependencies: `@hraness/oh` at
326
- immutable release `v0.2.0` for closure verification and `@tobilu/qmd` at commit
327
- `aa993dceb3ef8cfb71d470554ca437570f5a2b3c` for store-local model behavior.
328
- Installation also needs Git and public GitHub access while it resolves those
329
- dependencies. Browser-cookie capture uses the exact upstream registry release
330
- `@steipete/sweet-cookie` `0.4.3`, which includes the host-scope, isolation, and
331
- explicit Chromium Keychain fixes previously carried by the Hraness fork.
332
-
333
- ### Review lifecycle scripts before enabling optional adapters
334
-
335
- [Bun blocks dependency lifecycle scripts](https://bun.sh/docs/pm/lifecycle)
336
- unless the consumer trusts them. Run
337
- `bun pm untrusted` in the consuming project and inspect the exact resolved
338
- versions and scripts before allowing any of them. Do not use `bun pm trust
339
- --all` for this package's dependency graph.
340
-
341
- The pinned QMD Git dependency has a `prepare` script that installs development
342
- hooks only when its own `.git` directory exists; the packaged runtime does not
343
- need that script. Optional rendered capture uses `agent-browser`, whose
344
- postinstall downloads a platform-specific executable. QMD's native semantic
345
- and language-parser paths can report lifecycle scripts for `node-llama-cpp`,
346
- `tree-sitter-go`, `tree-sitter-javascript`, `tree-sitter-python`, and
347
- `tree-sitter-rust`. Trust only the packages required by the capability you have
348
- chosen, then reinstall and run `wordcell doctor` to verify that capability. npm runs
349
- dependency lifecycle scripts by default, so inspect the same packages before
350
- omitting `--ignore-scripts` from an npm installation.
351
-
352
- Wordcell can read explicitly selected signed-in browser state and perform
353
- bounded capture and network operations. Read the [security
354
- policy](SECURITY.md) before using authenticated capture.
355
-
356
- Contributors can install from a checkout instead:
161
+ Add the same immutable release to a Bun project:
357
162
 
358
163
  ```sh
359
- git clone https://github.com/hraness/wordcell.git
360
- cd wordcell
361
- bun install --frozen-lockfile
362
- bun link
363
- wordcell --help
164
+ bun add --exact --ignore-scripts https://github.com/hraness/wordcell/releases/download/v0.21.1/hraness-wordcell-0.21.1.tgz
364
165
  ```
365
166
 
366
- HTTP and Archive.today capture work with the installed JavaScript dependencies. Rendered capture additionally needs a local Chromium-compatible browser. [yt-dlp](https://github.com/yt-dlp/yt-dlp) adds YouTube metadata, thumbnails, and transcripts; full audio or video localization is opt-in and some formats also need [FFmpeg](https://ffmpeg.org). PDF ingestion uses the open-source Poppler tools `pdfinfo` and `pdftohtml`; [Tesseract](https://github.com/tesseract-ocr/tesseract) adds local OCR for scans and screenshots. URL metadata backfill requires Rust on macOS or Linux to build the immutable, fixed-network, memory-confined `metadata-search-engine-rs` helper included in the installed package. Run `wordcell url-metadata tool build` once, then use `wordcell url-metadata backfill` from any working directory.
367
-
368
- Structural commands and exact search read the current Markdown directly and
369
- need no service, model, or graph database. Wordcell pins
370
- [QMD](https://github.com/tobi/qmd) 2.5.3 for local keyword and vector search.
371
- `--mode keyword` uses its full-text index without an embedding model. Hybrid
372
- and semantic search use a revision-pinned compact local EmbeddingGemma model;
373
- the first index or vector query downloads about 300 MB. On macOS with Bun,
374
- install extension-capable Homebrew SQLite with `brew install sqlite` before
375
- using vector retrieval.
376
-
377
- `wordcell doctor` statically checks the pinned QMD, SQLite, sqlite-vec,
378
- node-llama-cpp, and matching native packages without importing native code or
379
- downloading the model. Exact and keyword search remain model-free. Wordcell also
380
- refuses an older adjacent `.snapshot` directory that lacks its ownership
381
- marker; inspect and remove only the explicitly named disposable directory,
382
- then retry so Wordcell never guesses that unrelated files are cache data.
383
-
384
- ## The kb vault format
385
-
386
- Wordcell is the product; `kb` is the vault format. The conventional vault
387
- directory is `kb/`, managed regions use the `<!-- kb:catalog:start -->` and
388
- `<!-- kb:context … -->` markers, the front-door frontmatter key is
389
- `kb_catalog`, portfolio identities use `kb://<owner>/<vault>/<document_id>`
390
- URIs, and the shell conventions in the skill and docs are `KB_ROOT` and
391
- `KB_REPO`. These names identify files that many repositories already commit,
392
- so they did not change with the product name. Every `wordcell` command reads
393
- and writes the same vaults that `kb` did.
394
-
395
- ## Start a vault
167
+ The SDK provides read-only vault sessions, metadata queries, search, graph
168
+ proofs, Git context, and composable workflows. A session owns one snapshot;
169
+ reopen it after Markdown changes. [SDK and workflow examples](https://github.com/hraness/wordcell/blob/main/docs/reference.md#graph-reference)
170
+ show the public imports and lifecycle.
396
171
 
397
- ```sh
398
- wordcell init my-kb
399
- cd my-kb
400
- wordcell clip https://example.com/article --output articles
401
- wordcell refresh --root .
402
- wordcell check --root .
403
- ```
172
+ ## Privacy and boundaries
404
173
 
405
- `wordcell init` creates an `index.md` front door plus `articles/`, `notes/`,
406
- `plans/`, `riffs/`, and optional repository-context `scopes/` boundaries. The
407
- generated Markdown remains ordinary Markdown: open it in Obsidian, edit it in a
408
- text editor, search it with standard tools, and version it with Git.
174
+ - Structural queries and exact search read local files. Optional semantic
175
+ search downloads its model on first use and runs locally.
176
+ - URL capture contacts the requested source. Signed-in capture uses only
177
+ explicitly selected browser state. Review the [security policy](https://github.com/hraness/wordcell/blob/main/SECURITY.md)
178
+ before using it with private sources.
179
+ - An agent that reads the vault follows its own provider and data-handling
180
+ settings. Keep private records out of public repositories and outputs.
181
+ - Git history is opt-in. Saved notes preserve recorded context; Wordcell does
182
+ not reconstruct unsaved conversations or silently record every agent action.
409
183
 
410
- When a vault lives at `kb/` inside a repository, inspect the instructions and
411
- mapped context for a repository path from the repository root:
184
+ ## Documentation
412
185
 
413
- ```sh
414
- wordcell agents identity packages/parser --json
415
- wordcell context packages/parser/src/index.ts --root kb --repo .
416
- wordcell agents check --root kb --repo .
417
- ```
418
-
419
- `wordcell agents identity` derives a canonical mapping without writing files.
420
- `wordcell context` lists inherited `AGENTS.md` files from the repository root toward
421
- the target, verified context hubs from the nearest scope back toward the root,
422
- and bounded repository-scoped memory. Maintained knowledge, active plans,
423
- dated research, reports, and terminal plans stay in separate groups. Every
424
- record states the exact authored scope that matched and whether it exists.
425
- Open only the useful summaries, then use `wordcell links`, `wordcell backlinks`, `wordcell list`,
426
- or `wordcell search` to expand the question deliberately.
427
-
428
- ## Command surface
429
-
430
- | Command | Purpose |
186
+ | Read next | Purpose |
431
187
  | --- | --- |
432
- | `wordcell init [directory]` | Create a new vault without merging into or overwriting an existing path; the default directory is `kb`. |
433
- | `wordcell clip <url\|current>` | Capture a source and write an article bundle. `current` reads an attached active tab without navigating it; `wordcell capture <url>` is the explicit URL form. |
434
- | `wordcell capture show\|verify\|diff <bundle>` | Inspect a stored capture as hostile content, verify its recorded document and optional asset hashes, or compare its exact Markdown bytes with a bounded Git ref. |
435
- | `wordcell inspect <url>` | Run acquisition and extraction without writing a bundle. |
436
- | `wordcell pdf <file-or-url> [--slug <slug>]` | Convert a local or public remote PDF into Markdown while retaining the original bytes, extracted images, OCR-derived text, URL provenance, and page provenance. |
437
- | `wordcell refresh --root <directory>` | Rebuild a managed catalog atomically and report graph findings. An authored-catalog vault remains unchanged. |
438
- | `wordcell check --root <directory>` | Verify catalog policy, graph integrity, and confined local image, PDF, and tldraw attachments without changing files. `--no-catalog` gates an edit lane without requiring the shared catalog refresh. |
439
- | `wordcell catalog --root <directory>` | Render an exhaustive disposable catalog without modifying an authored or managed front door. |
440
- | `wordcell graph --root <directory>` | Print the resolved contextual and typed graph, broken or ambiguous targets, orphans, and advisory mention candidates. |
441
- | `wordcell backlinks <note> --root <directory>` | Show incoming contextual links and typed relationships for a note resolved by path, title, or alias. |
442
- | `wordcell links <note> --root <directory>` | Traverse incoming, outgoing, or bidirectional contextual links and typed relationships with explicit depth and node limits. |
443
- | `wordcell note create <id> --title <title> --root <directory>` | Atomically create one confined Markdown note; use `--type concept` for a reusable concept. |
444
- | `wordcell relation add\|remove <source> <predicate> <target>` | Idempotently edit one source note's typed outbound relationship using an exact local note ID or canonical stable `kb://` URI. |
445
- | `wordcell relation list <note> --root <directory>` | List a note's authored outbound and derived inbound typed relationships. |
446
- | `wordcell percolate [note] --root <directory>` | Report evidence-backed recurring-concept and missing-relationship candidates without writing notes. |
447
- | `wordcell list --root <directory>` | Filter typed nested frontmatter, tags, and repeated exact `--scope` declarations; sort by metadata, title, path, or graph counts. `wordcell notes` is an alias. |
448
- | `wordcell index --root <directory>` | Build or incrementally refresh the optional local QMD embedding index. |
449
- | `wordcell search <query> --root <directory>` | Combine live exact matches with local QMD keyword and vector retrieval. Use `--mode exact\|keyword\|semantic\|hybrid`, metadata, tags, exact `--scope` filters, or bounded graph context. `--rules <file>` enables reviewed aliases; add `--priority` for explicit rule-based ordering. Omitted history performs no Git work; `--history` requests best-effort provenance and `--require-history` rejects unavailable or incomplete selected-note provenance. |
450
- | `wordcell portfolio search <query> --registry <file> --workspace <directory>` | Search only explicitly authorized vaults. Use `--shared` for public and organization entries or repeat `--vault owner/id` for a deliberate selection. The same `--rules <file>` and opt-in `--priority` apply within each selected vault before deterministic federation. |
451
- | `wordcell portfolio audit --registry <file> --workspace <directory>` | Audit selected vault identities, authority groups, graph references, attachments, exact duplicate content, catalogs, and Git availability without repairing or electing an authority. |
452
- | `wordcell history <note> --root <vault> --repo <repository>` | Return bounded direct provenance for one resolved note, including explicit oversized-commit limitations. |
453
- | `wordcell history search <query-or-path> --root <vault> --repo <repository>` | Search bounded commit subjects, note paths, and co-change paths without authoring links or repository scopes. |
454
- | `wordcell context <repository-path> --root <vault> --repo <repository>` | List inherited guides root to nearest, reciprocal hubs nearest to root, and grouped repository-scoped current and historical memory. Use `--kind auto\|file\|directory` to control path interpretation. |
455
- | `wordcell inbox --root <vault>` | List recent captures without a maintained-note disposition. This is advisory and never creates links or fails merely because a source is a leaf. |
456
- | `wordcell evaluate <manifest.json> --root <vault> --repo <repository>` | Verify an exact frozen Git/vault snapshot and run built-in exact, QMD, metadata, graph, path-context, and Git retrievers with raw evidence, latency, resource counters, metrics, and paired intervals. |
457
- | `wordcell-evaluation-builder --anchor-seal\|--build --config <file> --artifact-root <directory>` | Anchor or build a frozen evaluation corpus through the installed package boundary. |
458
- | `wordcell url-metadata tool build\|check` | Build or validate the pinned Rust metadata-search helper through the installed package boundary. |
459
- | `wordcell url-metadata backfill --root <vault>` | Add resumable `url-metadata.json` sidecars for saved external URLs through the pinned metadata search helper and optional read-only Archive.today discovery. |
460
- | `wordcell agents identity <repository-scope>` | Derive the normalized scope, canonical hub ID and path, owning guide path, and exact reciprocal marker without writing files. |
461
- | `wordcell agents check --root <vault> --repo <repository>` | Validate context identities, exact scopes, reciprocal markers, real guide paths, collisions, confinement, and guide shape. Unmapped guides remain valid. |
462
- | `wordcell agents audit --root <vault> --repo <repository>` | Run the same correctness gate, then report deterministic per-guide, section, inherited-chain, long-bullet, and exact-duplicate advisories. |
463
- | `wordcell doctor` | Report capture capabilities and statically inspect local QMD, SQLite, sqlite-vec, node-llama-cpp, and native search prerequisites without loading a model. |
464
- | `wordcell adapters` | Print the installed platform capability matrix. |
465
-
466
- Vault commands default to the current directory and `index.md`; use `--root` and `--index` to select alternatives. Commands that report structured data accept `--json`. Run `wordcell --help` for the complete top-level surface and `wordcell clip --help` for capture, authentication, evidence, and resource-bound options.
467
-
468
- ## Capture reference
469
-
470
- Use the current browser tab without navigating it:
188
+ | [Agent workflow](https://github.com/hraness/wordcell/blob/main/docs/agent-workflow.md) | Set up, query, maintain, and revise repository memory. |
189
+ | [Installation and command reference](https://github.com/hraness/wordcell/blob/main/docs/reference.md) | Exact interfaces, SDK imports, optional adapters, and troubleshooting prerequisites. |
190
+ | [Web capture](https://github.com/hraness/wordcell/blob/main/docs/capture.md) and [PDF capture](https://github.com/hraness/wordcell/blob/main/docs/pdf.md) | Save sources with provenance, assets, and explicit completeness limits. |
191
+ | [Graph guide](https://github.com/hraness/wordcell/blob/main/docs/graph-authority.md) | Named queries, proofs, revisions, resource limits, and cache recovery. |
192
+ | [Portfolio federation](https://github.com/hraness/wordcell/blob/main/docs/portfolio.md) | Search only selected, authorized vaults. |
193
+ | [Design](https://github.com/hraness/wordcell/blob/main/docs/design.md) and [memory rationale](https://github.com/hraness/wordcell/blob/main/docs/agent-memory.md) | File contracts, design choices, and evaluation context. |
194
+ | [Release verification](https://github.com/hraness/wordcell/blob/main/docs/publishing.md#verify-a-published-release) | Verify archive identity, signatures, and provenance. |
471
195
 
472
- ```sh
473
- wordcell clip current --browser-live --output articles
474
- wordcell clip current --cdp 9222 --output articles
475
- ```
196
+ ### Installation reference
476
197
 
477
- For `--browser-live`, first enable Chrome's local debugging connection at `chrome://inspect/#remote-debugging` (Chrome 144+). If Chrome was launched with an explicit loopback debugging port, pass that numeric port to `--cdp` instead.
198
+ [Alternative installs and optional capabilities](https://github.com/hraness/wordcell/blob/main/docs/reference.md#installation-reference).
478
199
 
479
- To open a URL with state from a path-backed Chromium profile, pass its path. The capture runs against a temporary copy, leaving the source profile unchanged. A named profile selects reusable agent-browser-managed state instead:
200
+ ### The kb vault format
480
201
 
481
- ```sh
482
- wordcell clip https://example.com/private --browser-profile <path> --output articles
483
- ```
484
-
485
- Each web capture writes readable Markdown, `capture.json`, localized assets, and optional evidence under `articles/<slug>/`. Unless media is disabled, YouTube captures add the title, description, duration, channel, thumbnail, and a locally extracted transcript when available; other video surfaces retain a poster or thumbnail instead of downloading the video by default. See [Capture web content](docs/capture.md) for scopes, saved files, browser modes, media, evidence, completeness states, and limits.
486
-
487
- Schema v4 manifests bind the exact saved Markdown path, byte count, and SHA-256
488
- digest. `wordcell capture verify articles/<slug>` checks that digest without executing
489
- the content. Add `--verify-assets` to check recorded assets. Source HTML remains
490
- omitted unless `wordcell capture show` receives `--include-source-html`.
491
-
492
- PDF capture uses the same bundle boundary:
493
-
494
- ```sh
495
- wordcell pdf "/absolute/path/to/document.pdf" --output articles
496
- wordcell pdf "https://example.com/document.pdf" --output articles
497
- ```
202
+ Existing `kb/`, `index.md`, `kb://` identifiers, and Markdown formats remain
203
+ compatible. [Vault format reference](https://github.com/hraness/wordcell/blob/main/docs/reference.md#the-kb-vault-format).
498
204
 
499
- The bundle includes byte-identical `source.pdf`, readable Markdown, `capture.json`, and content-addressed extracted images. A reviewed second pass also retains its hash-bound `annotations.json`. See [Capture PDF documents](docs/pdf.md) for heading inference, OCR, screenshot metadata, completeness, and review.
205
+ ### Command surface
500
206
 
501
- ## Graph reference
207
+ [Complete CLI reference](https://github.com/hraness/wordcell/blob/main/docs/reference.md#command-surface).
502
208
 
503
- Vault-root wikilinks such as
504
- `[[notes/context-engineering|context engineering]]` and source-owned typed
505
- frontmatter relationships are the graph's authored facts:
209
+ ### Capture reference
506
210
 
507
- ```yaml
508
- type: concept
509
- document_id: durable-agent-memory
510
- relations:
511
- supports:
512
- - notes/durable-agent-memory
513
- ```
211
+ [Capture commands and dependencies](https://github.com/hraness/wordcell/blob/main/docs/reference.md#capture-reference).
514
212
 
515
- Predicates use lower-kebab-case. Local targets use exact vault-root IDs without
516
- `.md`; cross-vault targets use canonical stable `kb://` URIs. `wordcell graph`, `wordcell backlinks`, `wordcell relation list`, and `wordcell links` derive
517
- inverse edges and bounded paths without injecting reciprocal or inferred facts into notes.
518
- `wordcell percolate` proposes reusable concepts and missing connections with explicit
519
- support; an agent reviews the cited prose before authoring anything. In its V2
520
- result, a missing relationship is an unordered endpoint pair with a required
521
- predicate, never an executable directed assertion or an automatic
522
- `related-to`. Common reviewed claims use `synthesizes`, `evidenced-by`,
523
- `informed-by`, `supersedes`, or `contradicts`; other canonical custom predicates
524
- remain valid when their meaning is supported.
525
-
526
- Within a portfolio, a note can target a stable cross-vault identity such as
527
- `kb://hraness/sleepyland/sound-wellness-expansion`. The target vault must be
528
- explicitly selected for `wordcell portfolio audit` to resolve it. Missing or invalid
529
- `document_id` values remain legacy path identities and never gain a stable URI
530
- by inference.
531
-
532
- These focused views are rebuilt from current Markdown. Wordcell never commits a graph
533
- database, generated fact file, or engine entity ID. Parallel agents therefore
534
- keep editing separate notes. Each lane can run `wordcell check --no-catalog`, and the
535
- integrator runs one final `wordcell refresh` for the only shared generated region in
536
- `index.md`. Use `wordcell graph --json` for a whole-vault structural question; when a
537
- question recurs, prefer adding a focused command with a bounded output contract
538
- over introducing a parallel query store.
539
-
540
- Frontmatter retains nested objects, arrays, finite numbers with safe integer precision, booleans, strings, and nulls. `wordcell list --where type=plan --tag ingestion --sort metadata.updated --order desc` answers exact questions from that authored data. Unquoted `true`, `false`, `null`, and numeric filter values are typed; keep the quotes inside the argument to match a string with the same spelling, for example `wordcell list --where 'external_id="9007199254740993"'`. Hybrid search fuses exact and QMD result orders, then joins each match back to live metadata. Graph neighbors and Git provenance are returned as separate evidence. Similarity never becomes a link automatically.
541
-
542
- Repository context preserves a stricter authority boundary. `AGENTS.md` remains
543
- the always-loaded, normative home for ownership, required commands,
544
- prohibitions, and edit gates. An optional `type: agent-context` note under
545
- `scopes/` holds rationale, history, examples, evidence, and links for one exact
546
- repository-relative directory. Its reciprocal
547
- `<!-- kb:context scopes/<id> -->` marker appears before the guide headings.
548
- A hub cannot override its guide or become the only home of a load-bearing
549
- editing rule. Moving the scoped directory changes its identity.
550
-
551
- Scope hubs are ordinary Markdown in the graph and optional QMD index;
552
- `AGENTS.md` files remain excluded. This workflow reads repository and vault
553
- files at development time. Applications do not need to import Wordcell or couple
554
- their runtime to the vault.
555
-
556
- The package exports its full programmatic surface from `@hraness/wordcell`. Open one
557
- read-only vault session through `@hraness/wordcell/sdk` to share a live Markdown scan
558
- across exact search, metadata queries, reads, navigation, hybrid search, and Git
559
- provenance. Compose finite parallel retrieval graphs with
560
- `@hraness/wordcell/workflow`. `@hraness/wordcell/workflows` includes editable
561
- `decision-context`, `explain-change`, and `plan-radar` compositions. Focused
562
- lower-level entry points include
563
- `@hraness/wordcell/search`, `@hraness/wordcell/git`,
564
- `@hraness/wordcell/agent-context`,
565
- `@hraness/wordcell/agent-guide-audit`, `@hraness/wordcell/attachments`,
566
- `@hraness/wordcell/authoring`, `@hraness/wordcell/evaluation`,
567
- `@hraness/wordcell/evaluation-kb`, and `@hraness/wordcell/evaluation-builder`. The builder
568
- entry point owns frozen-corpus authoring, evidence compilation, implementation
569
- commitments, seal validation, and the bounded v2 evaluation mechanics. A
570
- consumer keeps its corpus, build configuration, repository-specific retriever
571
- descriptors, and promotion expectations in its own repository. The installed
572
- `wordcell-evaluation-builder` binary exposes the same build lifecycle without a
573
- source checkout.
574
- Other focused entries include
575
- `@hraness/wordcell/graph`, `@hraness/wordcell/navigation`, `@hraness/wordcell/percolate`,
576
- `@hraness/wordcell/portfolio`, `@hraness/wordcell/query`, `@hraness/wordcell/repository-memory`,
577
- `@hraness/wordcell/search-rules`, `@hraness/wordcell/untrusted-content`,
578
- `@hraness/wordcell/source-inbox`, and `@hraness/wordcell/semantic`; web-capture orchestration and
579
- diagnostics from
580
- `@hraness/wordcell/capture`; metadata search, Archive.today discovery, sidecar parsing,
581
- and backfill composition from `@hraness/wordcell/url-intelligence`; PDF ingestion from `@hraness/wordcell/pdf`; and reusable
582
- disposable-profile helpers from `@hraness/wordcell/browser-profiles`. Embedders that
583
- need the CLI's lower-level ingestion machinery can use the explicit
584
- capture-primitive subpaths listed in `package.json`, including
585
- `@hraness/wordcell/clip/acquire`, `@hraness/wordcell/clip/args`, the DNS-pinned request and
586
- connection-pool boundary at `@hraness/wordcell/clip/network`, and the browser proxy at
587
- `@hraness/wordcell/clip/network-proxy`. Stored-bundle inspection, capture refresh
588
- diffs, and the explicit local job ledger are available from
589
- `@hraness/wordcell/clip/bundle-reader`, `@hraness/wordcell/clip/refresh`, and
590
- `@hraness/wordcell/clip/jobs`.
591
-
592
- ## Agent skills
593
-
594
- The repository ships one reusable `wordcell` Agent Skill under `skills/wordcell/`. Its
595
- intent router loads focused references only when a task needs them: querying
596
- repository context and agent memory, capturing URLs or PDFs, writing durable
597
- plans, promoting concepts and typed relationships, refreshing and checking a
598
- vault, or designing a setup through an interview and approved proposal. An
599
- approved setup may scaffold a bounded companion skill for a distinct recurring
600
- ritual. The package smoke test keeps future tagged packages byte-identical to
601
- that source tree.
213
+ ### Graph reference
602
214
 
603
- ```sh
604
- npx skills add hraness/wordcell#v0.20.0
605
- # or
606
- bunx skills add hraness/wordcell#v0.20.0
607
- ```
215
+ [Graph and SDK interfaces](https://github.com/hraness/wordcell/blob/main/docs/reference.md#graph-reference).
608
216
 
609
- The skill invokes the installed `wordcell` command without depending on a repository
610
- checkout. It routes setup and evolution before runtime preparation. For
611
- execution workflows, runtime setup installs the pinned CLI only when the
612
- command is missing, and it never initializes or mutates a vault as an
613
- installation side effect. The repository's phase-orchestration skill remains
614
- available to local repository agents but is marked internal, so public skill
615
- discovery omits it.
217
+ ### Agent skills
616
218
 
617
- See [Design](docs/design.md), [Portfolio federation](docs/portfolio.md), [Agent workflow](docs/agent-workflow.md), [PDF capture](docs/pdf.md), and [Contributing](CONTRIBUTING.md) for the durable contracts and development gate. hraness/wordcell is available under the [MIT License](LICENSE).
219
+ [Installation and runtime contract](https://github.com/hraness/wordcell/blob/main/docs/reference.md#agent-skills).
220
+ The same skill is included at `node_modules/@hraness/wordcell/skills/wordcell/`.
618
221
 
619
222
  ## Release notes
620
223
 
621
- ### Upgrade to v0.20.0
224
+ Version 0.21 adds Oh graph queries and proofs. The deprecated `kb` command was
225
+ removed at this boundary; use `wordcell`. Existing vaults need no migration.
226
+ [All release notes and upgrade instructions](https://github.com/hraness/wordcell/blob/main/CHANGELOG.md).
622
227
 
623
- Version 0.20.0 renames the product from KB to Wordcell. The package is
624
- `@hraness/wordcell`, the commands are `wordcell` and
625
- `wordcell-evaluation-builder`, the Agent Skill is `wordcell`, and the homepage
626
- moved from hraness.com to [wordcell.io](https://wordcell.io). The `kb` command
627
- stays as a deprecated alias that prints one notice; it is removed in 0.21.0.
628
- The vault format keeps its `kb` names, so existing vaults need no migration.
629
- The package is published as ordinary software with no npm content-policy
630
- declaration, and each tag Release now publishes the same archive bytes to npm
631
- automatically through OIDC trusted publishing. Versions through 0.19.6 remain
632
- available under `@hraness/kb`.
228
+ ## Contributing
633
229
 
634
- ### Upgrade to v0.19.6
635
-
636
- Version 0.19.6 adopts the upstream Sweet Cookie 0.4.3 registry package in place
637
- of the Hraness 0.4.4 fork. Upstream includes the cookie-scope, isolation, and
638
- explicit Chromium Keychain fixes. Capture retains host-only and Domain cookie
639
- scope, rejects partitioned or container state it cannot replay, and keeps
640
- explicit browser selection bound to its profile. The local cookie guards and
641
- synthetic provider regressions remain in place.
642
-
643
- ### Upgrade to v0.19.5
644
-
645
- This candidate corrects draft asset URL admission before the first canonical
646
- GitHub package release. GitHub may expose a temporary same-repository URL until
647
- the draft is published; published assets still require their exact versioned
648
- URLs and verified bytes. The failed `v0.19.4` draft is retained as release
649
- evidence and is not an installable release.
650
-
651
- GitHub Releases become the canonical installation source. Each release binds its packed archive to the reviewed source and signed GitHub build identity. npm remains an optional mirror and older installations keep working. The SDK and CLI interfaces do not change.
652
-
653
- ### Upgrade to v0.19.3
654
-
655
- Version 0.19.3 gives workflow execution and single-note publication complete
656
- Effect owners behind their existing Promise APIs. Native callbacks and writes
657
- remain owned until they settle. In particular, a failed directory sync now
658
- joins its admitted sibling before recovery releases the note lock. Workflow
659
- ordering, concurrency bounds, exact public errors, revision checks and
660
- no-clobber recovery remain compatible. Effect 3.22.1 is an exact runtime
661
- dependency; consumers do not need to create an Effect runtime or change calls.
662
-
663
- ### Upgrade to v0.19.2
664
-
665
- Version 0.19.2 recognizes npm 11.19's `signedAccessSignatureUrl` attestation
666
- wrapper field only when it is the currently evidenced empty string. Exact-key,
667
- signature, package, workflow, source, and provenance verification remain
668
- mandatory. Package runtime behavior is unchanged.
669
-
670
- ### Upgrade to v0.19.1
671
-
672
- Version 0.19.1 updates the pinned Hraness Sweet Cookie fork to v0.4.4. Cookie
673
- ingestion now rejects records marked `partitionKeyOpaque: true` even when
674
- `partitionKey` is missing or null. If every selected inline cookie has
675
- unsupported isolation provenance, Sweet Cookie returns no cookies instead of
676
- falling back to browser stores. Explicit `partitionKeyOpaque: false` remains
677
- replayable, while malformed marker values fail closed.
678
-
679
- ### Upgrade to v0.19.0
680
-
681
- Version 0.19.0 adds interview-first setup and evolution guidance, a bounded
682
- filesystem-only companion-skill scaffold contract, and Percolation Result V2.
683
- V2 requires an explicit predicate and leaves relationship ownership and
684
- direction to review. The release does not add lifecycle metadata, a resolver,
685
- a lifecycle CLI, inferred edges, or automatic account and network actions.
686
-
687
- ### Upgrade to v0.18.1
688
-
689
- Version 0.18.1 restructures the public README and hosted projection around one
690
- durable note, the exact recovery workflow, inspectable retrieval signals, and
691
- explicit authority boundaries. Runtime APIs and package behavior are
692
- unchanged.
693
-
694
- ### Upgrade to v0.18.0
695
-
696
- Version 0.18.0 adds a review-only adoption seam for exact dependency closures
697
- from an Oh working authority. Trusted host code creates a
698
- `createOhAdoptionPreparerV1` facade with the expected binding and head,
699
- destination, rights clearance, review route, and conflict policy. The narrow
700
- `prepare` call accepts only a capsule plus transformation and redaction
701
- disclosures, returns deeply immutable deterministic Markdown and manifest
702
- bytes with status `prepared`, and has no vault, Git, Oh-store, or promotion
703
- capability. Wordcell pins `@hraness/oh` v0.2.0 and delegates closure integrity to its
704
- official store verifier.
705
-
706
- ### Upgrade to v0.17.3
707
-
708
- Version 0.17.3 restructures the README around an inspectable first task,
709
- explicit operating boundaries, and a shorter path from installation to useful
710
- output. Runtime APIs and package behavior are unchanged.
711
-
712
- ### Upgrade to v0.17.2
713
-
714
- Version 0.17.2 improves package discovery through focused npm keywords, a more
715
- specific README opening, and direct links between npm, GitHub, and the project
716
- overview. Runtime APIs and package behavior are unchanged.
717
-
718
- ### Upgrade to v0.17.1
719
-
720
- Version 0.17.1 adds the public `@hraness/kb` npm installation path without
721
- changing the runtime API introduced in 0.17.0. Bun `1.3.14` or newer is now an
722
- explicit package requirement. Consumers should review the package's declared
723
- dual-use capture boundary and the lifecycle scripts used by optional browser
724
- and native search adapters before enabling those scripts.
725
-
726
- ### Upgrade to v0.17.0
727
-
728
- Version 0.17 adds selected portfolio federation, stable note identities,
729
- qualified external relations, search rules, capture inspection, and untrusted
730
- context packing. Consumers with typed fixtures or custom capture writers should
731
- make these migrations before upgrading:
732
-
733
- - Capture writers now emit manifest schema v4 and must provide the stored
734
- document `path`, exact UTF-8 `bytes`, and lowercase SHA-256 digest. The reader
735
- can inspect schema v1-v3, but verification reports their document integrity as
736
- unavailable instead of success.
737
- - `DecisionContextOutput.search` has been removed. Consume the bounded untrusted
738
- `context` projection and its `truncated` flag instead of transporting the raw
739
- search result into an agent prompt.
740
- - `VaultAnalysis` fixtures must include `externalAuthoredRelations`, even when
741
- the value is an empty array. This keeps qualified authored edges distinct
742
- from locally resolved graph edges.
743
- - `createNote` and `wordcell note create` now assign `document_id` to new ordinary
744
- notes. Preserve that ID across renames and update snapshots that intentionally
745
- assert the generated frontmatter.
746
-
747
- Existing Markdown is not rewritten automatically. Add IDs to maintained legacy
748
- notes only through reviewed edits, and keep every QMD, graph, portfolio, and
749
- audit projection disposable.
230
+ Run `bun run check` for source, architecture, package installation, types, and
231
+ native-helper validation. The site has its own `bun run check` under `site/`.
232
+ See [Contributing](https://github.com/hraness/wordcell/blob/main/CONTRIBUTING.md), [Security](https://github.com/hraness/wordcell/blob/main/SECURITY.md), and the [MIT License](https://github.com/hraness/wordcell/blob/main/LICENSE).
233
+
234
+ [Install Wordcell from GitHub Releases](https://github.com/hraness/wordcell/releases) ·
235
+ [Wordcell source on GitHub](https://github.com/hraness/wordcell) ·
236
+ [Wordcell overview](https://wordcell.io)