LifeLab · lens syntax

{lens} — one artifact, two faces

The lens is text in the block; chips are how that text renders when your cursor is elsewhere. Same dual-mode trick CodeMirror already plays with ![[: cursor outside the span → widget; cursor inside → raw characters. Chips aren't a second system that could drift from the syntax — every chip click is a macro that edits the text, so grep, sync, MCP, and copy-paste all see one truth.

anatomy — the mapping is the lesson

mcp page · referenced todo× when:-3w..Jun 21 → now× sort:updated× ⋎ +

▲ rendered (cursor elsewhere) · each chip ↔ one token below · ▼ source (cursor inside)

![[mcp]]{todo when:-3w.. sort:updated}

Grammar = the completable set, nothing more: bare closed words (todo · done · -task), self-delimiting :tags:, keyed only where two fields collide (when: remind:) or rare (sort: group: render:). Space = AND, - = NOT — web-search folk syntax.

1RENDERED

Cursor elsewhere — the lens wears chips

Your real ![[mcp]] face (river + LINKED), lens applied. Chips sit on the region header: hover shows the ×, the date chip carries its resolved range, the ghost ⋎ + adds. Sections report shown of total — filtering never pretends blocks don't exist.

2026-07-12

[all] · [page] 2 · :project/lifelab: 4 · :mcp: 3

*planning sunday
[-] mcp page · referenced todo× when:-3w..Jun 21 → now× ⋎ + 4 of 9 ×
page2 of 3
*TODO expose query_open over mcp:mcp: Jul 8
*TODO auth handshake for remote vaults Jun 30
+ Add to mcpborn matching: TODO applied
linked2 of 6
journal/2026-07-09[open page]
*TODO write mcp tool for lens summon:mcp: Jul 9
journal/2026-06-24[open page]
*TODO test block writes from claude:mcp: Jun 24

5 hidden by lens — “MCP test” (done May 15) among them · clear chips to show

njournal/2026-07-12 lens on · 4 of 9 shown
hover a chip → ×. click chip body → its menu. click ⋎ + → add a term. all of it edits the text.
2SOURCE

Cursor inside — raw text, same completion engine as everywhere

Click into the header (or on it) and the widget de-renders to the line as it lives in the block. The {…} span completes exactly like the picker and the funnel — one grammar, one engine. The region below keeps previewing live per keystroke; you are never editing blind.

2026-07-12

[all] · [page] 2 · :project/lifelab: 4 · :mcp: 3

14 ![[mcp]]{todo when:-3w}

cursor inside {…} — widget de-rendered to source · esc or click out to re-render

when: · completingcounts within current region
-3w.. Jun 21 → now 4 of 9
-3w..-1w Jun 21 – Jul 5 2
this-week Jul 6 – Jul 12 2
2026-06 whole month, anchored 3
tab acceptspace next term} close lens -- accepted as ..
[-] mcp previewing todo when:-3w.. · 4 of 9
*TODO expose query_open over mcp:mcp: Jul 8
*TODO write mcp tool for lens summon:mcp: Jul 9
ijournal/2026-07-12 : 14 editing lens · preview live
one grammar, three homes:picker, funnel, and this line share the completion engine.
3CHIPS = MACROS OVER TEXT

Every click is a text edit you could have typed

Top: × on the todo chip literally deletes five characters — shown as the diff it is. Bottom: clicking the date chip's body opens its swap menu (resolved ranges, counts), and the last row of every chip menu is edit as text — the bridge is advertised, not hidden. Nothing a chip does is unavailable to a keyboard or an MCP agent.

a · × on a chip = character deletion

[-] mcp todo× when:-3w..× 4 of 9
![[mcp]]{todo when:-3w..} click ×
+ ![[mcp]]{when:-3w..} result · 7 of 9

undo is text undo — Mod+Z restores the five characters

b · chip body = swap menu · last row is always the bridge

[-] mcp todo× when:-3w..×
swap when:-3w..current: Jun 21 → now
this-weekJul 6 – 12 · 2
-3w..Jun 21 → now · 4
-3w..-1wJun 21 – Jul 5 · 2
next-2wJul 13 – 26 · 1
remove term= click ×
edit as text…

Why both faces earn their keep:

chips → recognition, visibility of state, safe one-tap edits (mobile);

text → composability, copy-paste sharing, grep, agents, speed past ~3 terms;

and because chips are text edits, there is no builder-vs-code cliff to fall off — the Dataview failure, closed.

njournal/2026-07-12 chip ops → text ops
copy the line, share the lens:![[mcp]]{todo when:-3w..} paste anywhere — a lens is one line of text

The invariant: chips and syntax are projections of one string in one block. Chip clicks are macros over character edits (undo = text undo); the completion engine is shared by picker, funnel, and raw {…} editing; and if a term can't be completed it isn't grammar. Stored lenses stay free: the line is the lens — copy it, transclude the block that holds it, or shelve it on a lens/ page when it earns a name.