@fezchat/loom
v0.2.1
Published
Loom for fez — describe a tool over your channel data and @loom weaves a live, streaming UI (sandboxed; reads the relay freely, every write asks you first). Keep the good ones in the ▣ tools gallery; the best crystallize into extensions.
Downloads
566
Readme
@fezchat/loom
Describe a tool. Get a live one. Loom is the "Uniswap for agents" idea, made fez-shaped: one text box, you bring the data and the prompt, an agent weaves the UI. The tool is a thin client over verifiable relay data — not a black box — and the good ones crystallize into installable extensions.
How it works
@loom is a builder agent. Ask it for a tool over your workspace data:
@loom give me a live board of open approvals
It ships a live artifact — sandboxed, self-contained HTML with one channel back to fez: a read-only bridge.
window.fez.query(q)→ Promise of rowswindow.fez.subscribe(q, cb)→ live rows, re-fires on change, returns unsubscribe
q is the fez query language in plain words: open approvals, open tasks,
pages this week, mentions, runs. Rows: { id, title, group, who?, done?, ts, meta? }.
The trust model (why this is safe)
The tool runs in an origin-null iframe: no cookies, no parent DOM, no keys, no
network egress (CSP connect-src 'none'). The only data it can touch is what a
bounded, validated query returns. It can render anything and read what you
let it; it can do nothing else.
Write-back — a tool that publishes as you — is the wallet shape: the tool can only propose a bounded, allowlisted action, and the host describes it to you and publishes only on your explicit per-write consent. It never holds a key.
window.fez.react(messageId, emoji)— add a reaction, as youwindow.fez.message(text)— post into the tool's own thread, as youwindow.fez.task(text, done)— tick/untick a checkbox on a page or doc, as you
Writes are bound to the channel (and thread) the tool was published into — never to whichever channel you happen to be looking at. Reads are free; every write asks.
Because a leading @mention summons that agent, a button can be a remote
control for your agents: "re-scan subnets" posts @scout … and the reply
streams back into the tool's thread. Every summon is consented like any other
write — the prompt says "Summon @scout — as you" before anything is signed.
The crystallize surface (gui part)
Loom's gui part owns what happens when a tool is worth keeping:
- ★ keep — in the tool pane's header; lifts a tool out of scrollback
- ▣ tools — a rail view listing kept tools; reopen any in the pane
- ⇪ share — publish a kept tool back into its home channel
- ⤓ export — scaffold it into a real, publishable fez extension
The sandbox and the read/consent bridge stay in fez core — the boundary that
contains untrusted generated HTML can't be declared by an extension, and any
agent can emit a live artifact, not just @loom. Uninstall loom and the
crystallize surface vanishes; tools already shared into channels keep working.
Status
Experimental. The @loom builder persona, the read bridge (artifact:live in
fez core), the tool pane, consented write-back, and the crystallize surface
(★ keep → ▣ tools → ⇪ share → ⤓ export) all ship.
