@hraness/wordcell 0.21.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.
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.21.0/hraness-wordcell-0.21.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,686 +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.
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. |
96
128
 
97
- ### The pattern converged across agent tools
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).
98
131
 
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.
100
-
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
124
- ```
125
-
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.
210
-
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.
212
-
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.
214
-
215
- ### Customize through an approved proposal
216
-
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.21.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.21.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.21.0
274
- bunx skills add hraness/wordcell#v0.21.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.21.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.21.0/hraness-wordcell-0.21.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.21.0/hraness-wordcell-0.21.0.tgz
300
- wordcell --help
140
+ ├── index.md # authored or managed front door
141
+ ├── articles/ # captured sources and assets
142
+ ├── notes/ # maintained explanations
143
+ └── plans/ # decisions and outcomes
301
144
  ```
302
145
 
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.
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.
308
149
 
309
- For programmatic use, add the versioned GitHub archive to a Bun project:
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.
310
154
 
311
- ```sh
312
- bun add --exact --ignore-scripts https://github.com/hraness/wordcell/releases/download/v0.21.0/hraness-wordcell-0.21.0.tgz
313
- ```
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).
314
158
 
315
- The resulting dependency should remain exact:
159
+ ## Build with the TypeScript SDK
316
160
 
317
- ```json
318
- {
319
- "dependencies": {
320
- "@hraness/wordcell": "https://github.com/hraness/wordcell/releases/download/v0.21.0/hraness-wordcell-0.21.0.tgz"
321
- }
322
- }
323
- ```
324
-
325
- Version 0.21.0 retains two public GitHub dependencies: `@hraness/oh` at
326
- immutable release archive `v0.4.3` for graph projection and 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
- ```
404
-
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.
409
-
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:
412
-
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
- ```
172
+ ## Privacy and boundaries
418
173
 
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.
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.
427
183
 
428
- ## Command surface
184
+ ## Documentation
429
185
 
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 query --program <name> --root <directory>` | Query a bounded, proof-bearing Oh projection; see [the graph guide](docs/graph-authority.md). |
441
- | `wordcell graph rebuild\|verify --root <directory>` | Rebuild or verify the disposable local graph cache without editing Markdown. |
442
- | `wordcell graph --root <directory>` | Print the resolved contextual and typed graph, broken or ambiguous targets, orphans, and advisory mention candidates. |
443
- | `wordcell backlinks <note> --root <directory>` | Show incoming contextual links and typed relationships for a note resolved by path, title, or alias. |
444
- | `wordcell links <note> --root <directory>` | Traverse incoming, outgoing, or bidirectional contextual links and typed relationships with explicit depth and node limits. |
445
- | `wordcell note create <id> --title <title> --root <directory>` | Atomically create one confined Markdown note; use `--type concept` for a reusable concept. |
446
- | `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. |
447
- | `wordcell relation list <note> --root <directory>` | List a note's authored outbound and derived inbound typed relationships. |
448
- | `wordcell percolate [note] --root <directory>` | Report evidence-backed recurring-concept and missing-relationship candidates without writing notes. |
449
- | `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. |
450
- | `wordcell index --root <directory>` | Build or incrementally refresh the optional local QMD embedding index. |
451
- | `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. |
452
- | `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. |
453
- | `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. |
454
- | `wordcell history <note> --root <vault> --repo <repository>` | Return bounded direct provenance for one resolved note, including explicit oversized-commit limitations. |
455
- | `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. |
456
- | `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. |
457
- | `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. |
458
- | `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. |
459
- | `wordcell-evaluation-builder --anchor-seal\|--build --config <file> --artifact-root <directory>` | Anchor or build a frozen evaluation corpus through the installed package boundary. |
460
- | `wordcell url-metadata tool build\|check` | Build or validate the pinned Rust metadata-search helper through the installed package boundary. |
461
- | `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. |
462
- | `wordcell agents identity <repository-scope>` | Derive the normalized scope, canonical hub ID and path, owning guide path, and exact reciprocal marker without writing files. |
463
- | `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. |
464
- | `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. |
465
- | `wordcell doctor` | Report capture capabilities and statically inspect local QMD, SQLite, sqlite-vec, node-llama-cpp, and native search prerequisites without loading a model. |
466
- | `wordcell adapters` | Print the installed platform capability matrix. |
467
-
468
- 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.
469
-
470
- ## Capture reference
471
-
472
- 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. |
473
195
 
474
- ```sh
475
- wordcell clip current --browser-live --output articles
476
- wordcell clip current --cdp 9222 --output articles
477
- ```
478
-
479
- 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.
480
-
481
- 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:
482
-
483
- ```sh
484
- wordcell clip https://example.com/private --browser-profile <path> --output articles
485
- ```
196
+ ### Installation reference
486
197
 
487
- 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.
198
+ [Alternative installs and optional capabilities](https://github.com/hraness/wordcell/blob/main/docs/reference.md#installation-reference).
488
199
 
489
- Schema v4 manifests bind the exact saved Markdown path, byte count, and SHA-256
490
- digest. `wordcell capture verify articles/<slug>` checks that digest without executing
491
- the content. Add `--verify-assets` to check recorded assets. Source HTML remains
492
- omitted unless `wordcell capture show` receives `--include-source-html`.
200
+ ### The kb vault format
493
201
 
494
- PDF capture uses the same bundle boundary:
495
-
496
- ```sh
497
- wordcell pdf "/absolute/path/to/document.pdf" --output articles
498
- wordcell pdf "https://example.com/document.pdf" --output articles
499
- ```
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).
500
204
 
501
- 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
502
206
 
503
- ## Graph reference
207
+ [Complete CLI reference](https://github.com/hraness/wordcell/blob/main/docs/reference.md#command-surface).
504
208
 
505
- Vault-root wikilinks such as
506
- `[[notes/context-engineering|context engineering]]` and source-owned typed
507
- frontmatter relationships are the graph's authored facts:
209
+ ### Capture reference
508
210
 
509
- ```yaml
510
- type: concept
511
- document_id: durable-agent-memory
512
- relations:
513
- supports:
514
- - notes/durable-agent-memory
515
- ```
211
+ [Capture commands and dependencies](https://github.com/hraness/wordcell/blob/main/docs/reference.md#capture-reference).
516
212
 
517
- Predicates use lower-kebab-case. Local targets use exact vault-root IDs without
518
- `.md`; cross-vault targets use canonical stable `kb://` URIs. `wordcell graph`, `wordcell backlinks`, `wordcell relation list`, and `wordcell links` derive
519
- inverse edges and bounded paths without injecting reciprocal or inferred facts into notes.
520
- `wordcell percolate` proposes reusable concepts and missing connections with explicit
521
- support; an agent reviews the cited prose before authoring anything. In its V2
522
- result, a missing relationship is an unordered endpoint pair with a required
523
- predicate, never an executable directed assertion or an automatic
524
- `related-to`. Common reviewed claims use `synthesizes`, `evidenced-by`,
525
- `informed-by`, `supersedes`, or `contradicts`; other canonical custom predicates
526
- remain valid when their meaning is supported.
527
-
528
- Within a portfolio, a note can target a stable cross-vault identity such as
529
- `kb://hraness/sleepyland/sound-wellness-expansion`. The target vault must be
530
- explicitly selected for `wordcell portfolio audit` to resolve it. Missing or invalid
531
- `document_id` values remain legacy path identities and never gain a stable URI
532
- by inference.
533
-
534
- These focused views are rebuilt from current Markdown. Wordcell never commits a graph
535
- database, generated fact file, or engine entity ID. Parallel agents therefore
536
- keep editing separate notes. Each lane can run `wordcell check --no-catalog`, and the
537
- integrator runs one final `wordcell refresh` for the only shared generated region in
538
- `index.md`. Use `wordcell graph --json` for a whole-vault structural question; when a
539
- question recurs, prefer adding a focused command with a bounded output contract
540
- over introducing a parallel query store.
541
-
542
- 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.
543
-
544
- Repository context preserves a stricter authority boundary. `AGENTS.md` remains
545
- the always-loaded, normative home for ownership, required commands,
546
- prohibitions, and edit gates. An optional `type: agent-context` note under
547
- `scopes/` holds rationale, history, examples, evidence, and links for one exact
548
- repository-relative directory. Its reciprocal
549
- `<!-- kb:context scopes/<id> -->` marker appears before the guide headings.
550
- A hub cannot override its guide or become the only home of a load-bearing
551
- editing rule. Moving the scoped directory changes its identity.
552
-
553
- Scope hubs are ordinary Markdown in the graph and optional QMD index;
554
- `AGENTS.md` files remain excluded. This workflow reads repository and vault
555
- files at development time. Applications do not need to import Wordcell or couple
556
- their runtime to the vault.
557
-
558
- The package exports its full programmatic surface from `@hraness/wordcell`. Open one
559
- read-only vault session through `@hraness/wordcell/sdk` to share a live Markdown scan
560
- across exact search, metadata queries, reads, navigation, hybrid search, and Git
561
- provenance. Compose finite parallel retrieval graphs with
562
- `@hraness/wordcell/workflow`. `@hraness/wordcell/workflows` includes editable
563
- `decision-context`, `explain-change`, and `plan-radar` compositions. Focused
564
- lower-level entry points include
565
- `@hraness/wordcell/search`, `@hraness/wordcell/git`,
566
- `@hraness/wordcell/agent-context`,
567
- `@hraness/wordcell/agent-guide-audit`, `@hraness/wordcell/attachments`,
568
- `@hraness/wordcell/authoring`, `@hraness/wordcell/evaluation`,
569
- `@hraness/wordcell/evaluation-kb`, and `@hraness/wordcell/evaluation-builder`. The builder
570
- entry point owns frozen-corpus authoring, evidence compilation, implementation
571
- commitments, seal validation, and the bounded v2 evaluation mechanics. A
572
- consumer keeps its corpus, build configuration, repository-specific retriever
573
- descriptors, and promotion expectations in its own repository. The installed
574
- `wordcell-evaluation-builder` binary exposes the same build lifecycle without a
575
- source checkout.
576
- Other focused entries include
577
- `@hraness/wordcell/graph-authority`, `@hraness/wordcell/graph-percolation`, `@hraness/wordcell/graph`, `@hraness/wordcell/navigation`, `@hraness/wordcell/percolate`,
578
- `@hraness/wordcell/portfolio`, `@hraness/wordcell/query`, `@hraness/wordcell/repository-memory`,
579
- `@hraness/wordcell/search-rules`, `@hraness/wordcell/untrusted-content`,
580
- `@hraness/wordcell/source-inbox`, and `@hraness/wordcell/semantic`; web-capture orchestration and
581
- diagnostics from
582
- `@hraness/wordcell/capture`; metadata search, Archive.today discovery, sidecar parsing,
583
- and backfill composition from `@hraness/wordcell/url-intelligence`; PDF ingestion from `@hraness/wordcell/pdf`; and reusable
584
- disposable-profile helpers from `@hraness/wordcell/browser-profiles`. Embedders that
585
- need the CLI's lower-level ingestion machinery can use the explicit
586
- capture-primitive subpaths listed in `package.json`, including
587
- `@hraness/wordcell/clip/acquire`, `@hraness/wordcell/clip/args`, the DNS-pinned request and
588
- connection-pool boundary at `@hraness/wordcell/clip/network`, and the browser proxy at
589
- `@hraness/wordcell/clip/network-proxy`. Stored-bundle inspection, capture refresh
590
- diffs, and the explicit local job ledger are available from
591
- `@hraness/wordcell/clip/bundle-reader`, `@hraness/wordcell/clip/refresh`, and
592
- `@hraness/wordcell/clip/jobs`.
593
-
594
- ## Agent skills
595
-
596
- The repository ships one reusable `wordcell` Agent Skill under `skills/wordcell/`. Its
597
- intent router loads focused references only when a task needs them: querying
598
- repository context and agent memory, capturing URLs or PDFs, writing durable
599
- plans, promoting concepts and typed relationships, refreshing and checking a
600
- vault, or designing a setup through an interview and approved proposal. An
601
- approved setup may scaffold a bounded companion skill for a distinct recurring
602
- ritual. The package smoke test keeps future tagged packages byte-identical to
603
- that source tree.
213
+ ### Graph reference
604
214
 
605
- ```sh
606
- npx skills add hraness/wordcell#v0.21.0
607
- # or
608
- bunx skills add hraness/wordcell#v0.21.0
609
- ```
215
+ [Graph and SDK interfaces](https://github.com/hraness/wordcell/blob/main/docs/reference.md#graph-reference).
610
216
 
611
- The skill invokes the installed `wordcell` command without depending on a repository
612
- checkout. It routes setup and evolution before runtime preparation. For
613
- execution workflows, runtime setup installs the pinned CLI only when the
614
- command is missing, and it never initializes or mutates a vault as an
615
- installation side effect. The repository's phase-orchestration skill remains
616
- available to local repository agents but is marked internal, so public skill
617
- discovery omits it.
217
+ ### Agent skills
618
218
 
619
- 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/`.
620
221
 
621
222
  ## Release notes
622
223
 
623
- ### Upgrade to v0.21.0
624
-
625
- Version 0.21.0 adds a rebuildable Oh graph, named positive-rule queries with
626
- source proofs, read-only cache verification, and opt-in percolation proofs.
627
- See [the graph guide](docs/graph-authority.md) for commands, resource limits,
628
- revision identity, and cache recovery. Existing graph reports, percolation V2,
629
- search ranking, vault formats and `kb://` identifiers stay compatible.
630
-
631
- The deprecated `kb` command alias is removed as announced in 0.20.0. Update
632
- scripts to invoke `wordcell`; existing pinned 0.20.x installations retain the
633
- alias. No Markdown or document-ID migration is required.
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).
634
227
 
635
- ### Upgrade to v0.20.0
228
+ ## Contributing
636
229
 
637
- Version 0.20.0 renames the product from KB to Wordcell. The package is
638
- `@hraness/wordcell`, the commands are `wordcell` and
639
- `wordcell-evaluation-builder`, the Agent Skill is `wordcell`, and the homepage
640
- moved from hraness.com to [wordcell.io](https://wordcell.io). The `kb` command
641
- stays as a deprecated alias that prints one notice; it is removed in 0.21.0.
642
- The vault format keeps its `kb` names, so existing vaults need no migration.
643
- The package is published as ordinary software with no npm content-policy
644
- declaration, and each tag Release now publishes the same archive bytes to npm
645
- automatically through OIDC trusted publishing. Versions through 0.19.6 remain
646
- available under `@hraness/kb`.
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).
647
233
 
648
- ### Upgrade to v0.19.6
649
-
650
- Version 0.19.6 adopts the upstream Sweet Cookie 0.4.3 registry package in place
651
- of the Hraness 0.4.4 fork. Upstream includes the cookie-scope, isolation, and
652
- explicit Chromium Keychain fixes. Capture retains host-only and Domain cookie
653
- scope, rejects partitioned or container state it cannot replay, and keeps
654
- explicit browser selection bound to its profile. The local cookie guards and
655
- synthetic provider regressions remain in place.
656
-
657
- ### Upgrade to v0.19.5
658
-
659
- This candidate corrects draft asset URL admission before the first canonical
660
- GitHub package release. GitHub may expose a temporary same-repository URL until
661
- the draft is published; published assets still require their exact versioned
662
- URLs and verified bytes. The failed `v0.19.4` draft is retained as release
663
- evidence and is not an installable release.
664
-
665
- 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.
666
-
667
- ### Upgrade to v0.19.3
668
-
669
- Version 0.19.3 gives workflow execution and single-note publication complete
670
- Effect owners behind their existing Promise APIs. Native callbacks and writes
671
- remain owned until they settle. In particular, a failed directory sync now
672
- joins its admitted sibling before recovery releases the note lock. Workflow
673
- ordering, concurrency bounds, exact public errors, revision checks and
674
- no-clobber recovery remain compatible. Effect 3.22.1 is an exact runtime
675
- dependency; consumers do not need to create an Effect runtime or change calls.
676
-
677
- ### Upgrade to v0.19.2
678
-
679
- Version 0.19.2 recognizes npm 11.19's `signedAccessSignatureUrl` attestation
680
- wrapper field only when it is the currently evidenced empty string. Exact-key,
681
- signature, package, workflow, source, and provenance verification remain
682
- mandatory. Package runtime behavior is unchanged.
683
-
684
- ### Upgrade to v0.19.1
685
-
686
- Version 0.19.1 updates the pinned Hraness Sweet Cookie fork to v0.4.4. Cookie
687
- ingestion now rejects records marked `partitionKeyOpaque: true` even when
688
- `partitionKey` is missing or null. If every selected inline cookie has
689
- unsupported isolation provenance, Sweet Cookie returns no cookies instead of
690
- falling back to browser stores. Explicit `partitionKeyOpaque: false` remains
691
- replayable, while malformed marker values fail closed.
692
-
693
- ### Upgrade to v0.19.0
694
-
695
- Version 0.19.0 adds interview-first setup and evolution guidance, a bounded
696
- filesystem-only companion-skill scaffold contract, and Percolation Result V2.
697
- V2 requires an explicit predicate and leaves relationship ownership and
698
- direction to review. The release does not add lifecycle metadata, a resolver,
699
- a lifecycle CLI, inferred edges, or automatic account and network actions.
700
-
701
- ### Upgrade to v0.18.1
702
-
703
- Version 0.18.1 restructures the public README and hosted projection around one
704
- durable note, the exact recovery workflow, inspectable retrieval signals, and
705
- explicit authority boundaries. Runtime APIs and package behavior are
706
- unchanged.
707
-
708
- ### Upgrade to v0.18.0
709
-
710
- Version 0.18.0 adds a review-only adoption seam for exact dependency closures
711
- from an Oh working authority. Trusted host code creates a
712
- `createOhAdoptionPreparerV1` facade with the expected binding and head,
713
- destination, rights clearance, review route, and conflict policy. The narrow
714
- `prepare` call accepts only a capsule plus transformation and redaction
715
- disclosures, returns deeply immutable deterministic Markdown and manifest
716
- bytes with status `prepared`, and has no vault, Git, Oh-store, or promotion
717
- capability. Wordcell pins `@hraness/oh` v0.2.0 and delegates closure integrity to its
718
- official store verifier.
719
-
720
- ### Upgrade to v0.17.3
721
-
722
- Version 0.17.3 restructures the README around an inspectable first task,
723
- explicit operating boundaries, and a shorter path from installation to useful
724
- output. Runtime APIs and package behavior are unchanged.
725
-
726
- ### Upgrade to v0.17.2
727
-
728
- Version 0.17.2 improves package discovery through focused npm keywords, a more
729
- specific README opening, and direct links between npm, GitHub, and the project
730
- overview. Runtime APIs and package behavior are unchanged.
731
-
732
- ### Upgrade to v0.17.1
733
-
734
- Version 0.17.1 adds the public `@hraness/kb` npm installation path without
735
- changing the runtime API introduced in 0.17.0. Bun `1.3.14` or newer is now an
736
- explicit package requirement. Consumers should review the package's declared
737
- dual-use capture boundary and the lifecycle scripts used by optional browser
738
- and native search adapters before enabling those scripts.
739
-
740
- ### Upgrade to v0.17.0
741
-
742
- Version 0.17 adds selected portfolio federation, stable note identities,
743
- qualified external relations, search rules, capture inspection, and untrusted
744
- context packing. Consumers with typed fixtures or custom capture writers should
745
- make these migrations before upgrading:
746
-
747
- - Capture writers now emit manifest schema v4 and must provide the stored
748
- document `path`, exact UTF-8 `bytes`, and lowercase SHA-256 digest. The reader
749
- can inspect schema v1-v3, but verification reports their document integrity as
750
- unavailable instead of success.
751
- - `DecisionContextOutput.search` has been removed. Consume the bounded untrusted
752
- `context` projection and its `truncated` flag instead of transporting the raw
753
- search result into an agent prompt.
754
- - `VaultAnalysis` fixtures must include `externalAuthoredRelations`, even when
755
- the value is an empty array. This keeps qualified authored edges distinct
756
- from locally resolved graph edges.
757
- - `createNote` and `wordcell note create` now assign `document_id` to new ordinary
758
- notes. Preserve that ID across renames and update snapshots that intentionally
759
- assert the generated frontmatter.
760
-
761
- Existing Markdown is not rewritten automatically. Add IDs to maintained legacy
762
- notes only through reviewed edits, and keep every QMD, graph, portfolio, and
763
- audit projection disposable.
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)
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="124" height="20" role="img" aria-label="Agent Skill: install"><title>Agent Skill: install</title><rect width="124" height="20" rx="3" fill="#334155"/><path d="M74 0h47a3 3 0 0 1 3 3v14a3 3 0 0 1-3 3H74z" fill="#2563eb"/><g fill="#fff" text-anchor="middle" font-family="Verdana,DejaVu Sans,sans-serif" font-size="11"><text x="37" y="14">Agent Skill</text><text x="99" y="14">install</text></g></svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hraness/wordcell",
3
- "version": "0.21.0",
3
+ "version": "0.21.1",
4
4
  "description": "A knowledge base for coding agents, built from Markdown, backlinks, semantic search, and Git context.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -79,7 +79,11 @@
79
79
  "backlinks",
80
80
  "knowledge-graph",
81
81
  "semantic-search",
82
- "local-first"
82
+ "local-first",
83
+ "agent-skills",
84
+ "claude-code",
85
+ "codex",
86
+ "typescript-sdk"
83
87
  ],
84
88
  "exports": {
85
89
  ".": {
@@ -396,7 +400,8 @@
396
400
  "src/oh/programs.ts",
397
401
  "src/oh/schema.ts",
398
402
  "src/oh/snapshot.ts",
399
- "src/oh/validation.ts"
403
+ "src/oh/validation.ts",
404
+ "assets/agent-skill.svg"
400
405
  ],
401
406
  "scripts": {
402
407
  "kb:refresh": "bunx --bun github:hraness/kb#v0.15.1 refresh --root kb",
@@ -55,7 +55,7 @@ missing:
55
55
  ```sh
56
56
  command -v wordcell >/dev/null 2>&1 || {
57
57
  command -v bun >/dev/null 2>&1 || exit 1
58
- bun add --global --ignore-scripts https://github.com/hraness/wordcell/releases/download/v0.21.0/hraness-wordcell-0.21.0.tgz
58
+ bun add --global --ignore-scripts https://github.com/hraness/wordcell/releases/download/v0.21.1/hraness-wordcell-0.21.1.tgz
59
59
  }
60
60
  wordcell --help
61
61
  ```