Package · @miadi/webweave 0.1.0

Webweave

Miadi Webweave is the terminal↔Simplenote bridge. Simplenote publishes no API, so the Python package drives a real Chrome over CDP and treats a note as if there were one — an address that follows you to every device, the cheapest shared surface between a human at a terminal, a human on a phone, and an agent. @miadi/webweave is the typed boundary in front of it, and it wraps exactly one verb.

packages/webweave/README.md · packages/webweave/src/session.ts
Facade@miadi/webweave 0.1.0 · TypeScript
Implementationmiadi-webweave 0.7.0 · PyPI 21:15 UTC
MCPmiadi-webweave-mcp 0.3.0 · 21:16 UTC
Branchfeat/webweave-ts-facade-252 · 438531ba
Proven1 verb · 8 unit tests · no browser
Before you look for it

It lives on a branch

Not on the default branch yet
packages/webweave lands in commit 438531ba on feat/webweave-ts-facade-252 — one commit ahead of origin/main, nothing behind it. Check that branch out before you expect the directory to exist on disk. The Python implementation carries no such caveat: it is published.
What it wraps

One verb: resolving the session

Webweave sessions are directory-based. The CLI finds the active one by looking for .miadi/webweave/session.json in the current directory, then walking up through the parents, then $HOME. Every surface needs that answer — is there a session here, and what is it? — before it can do anything else. This facade mirrors that rule in TypeScript, and defers to the CLI itself when asked for the verdict.

ExportPurpose
resolveSession(dir?)Walks up for .miadi/webweave/session.json; returns ResolvedSession | null
hasSession(dir?)The boolean form of the same walk
sessionInfo(opts?)Runs miadi-webweave session info; returns its verdict and the typed record
sessionSearchPath(dir?)The candidate paths, nearest first — for diagnostics
WebweaveSessionThe record as written by the Python package, snake_case preserved

Eight unit tests prove it end to end with no browser: nearest-session wins over a parent's, a missing session returns null exactly where the CLI exits 1, unknown keys survive the round trip, and a malformed session.json throws rather than quietly reporting “no session”. Field names stay snake_case because they are read verbatim from a file the Python package owns.

packages/webweave/test/session.test.mjs
Where it sits

The toolset, and its one dotted edge

Solid emerald is proven today. Dotted amber is deliberate absence — drawn, because a docs surface that shows only what works is not a transcription of reality.

Rendering diagram...
Deliberate absence

No read, no write — and why

Our records store a note address as a bare 32-hex id, or as simplenote://note/<id>. The Python side accepts neither: every call site either hardcodes https://app.simplenote.com/ or expects the /p/<token> publish form. A bare id reaches Chrome and fails with Cannot navigate to invalid URL; the obvious repair, https://app.simplenote.com/note/<id>, returns 404 against the live authenticated browser. The identifier we store is not an identifier the tool consumes, and the translation between them is a lookup nobody has written.

That resolution belongs in miadi_webweave, not here. The CLI and the 35 MCP tools consume the same lookup; repairing it inside a facade would fix one caller and leave every other one broken. A facade with one working verb is a package — a facade with five unproven ones is a promise.
The family

Weave packages name what they will not do

Webweave is not an island. Its neighbours share one habit: each declares a boundary as clearly as it declares a capability, so a caller knows where the package stops before it starts depending on it. Versions read from manifests on 2026-07-26.

@miadi/webweave0.1.0
Resolves the active webweave session for a directory — the primitive every surface needs before it touches a note.
The line it holds
No read, no write. Both wait on note-id resolution landing in Python.
@miadi/inquiry-weave0.6.1
Relates the three identities of one inquiry — artefact, GitHub issue, miadi-chronicle episode.
The line it holds
Never generates inquiry content. Vessels and relations only, enforced by an executable test.
@miadi/musical-composition-to-episode0.1.1
Reads legacy gmtermux composition folders and weaves them into chronicle episodes, on top of inquiry-weave.
The line it holds
Never rewrites a composition. It authors episode provenance and stops there.
miadi-webweave-mcp0.3.0
The MCP surface: 35 webweave_* tools over sessions, browser profiles, checkpoints, and note read/write.
The line it holds
Carries the same note-id defect — which is why the fix belongs upstream of it, not in a facade.
packages/{webweave,inquiry-weave,composition}/package.json
Where to look next

Three doors