Skip to content

Releases: willa-code/visual-intent-layer

Visual Intent Layer 0.4.0

Choose a tag to compare

@willa-code willa-code released this 20 Sep 14:24

Two features and nine fixes since 0.3.2, plus the repository's first LICENSE file.

Features

The surface is grounded in what you pointed at. Rows and records now carry the words you selected, the rectangle you drew and the element you pointed at, and a name the surface wrote is marked as the surface's own. Resolutions are an append-only log with a derived view, so a later act supersedes without erasing, and a written draft keeps its slot while an empty one is still re-pointed — pointing somewhere else can no longer destroy writing. The rail speaks plain words while the record keeps the precise ones, and the composer is docked at the rail's foot so no part of the artifact hides behind the thing written about it.

Delivery speaks once, and judgement is invited by evidence. The headline, the Agent disclosure, the Pass header, the attention count and every row now derive from one account over the stored delivery facts. Approve is put forward only when the Adopted Revision is later than the one the note named and no target blocks it, and each row says which revision a verdict would concern. The overflow and theme are keyboard-operable menus, the drawer declares itself nonmodal and behaves as one, and first-use guidance names acts rather than implementation.

Fixes

  • The stacked rail stays reachable at 900 CSS pixels and below: a bounded 40/60 split keeps the artifact in view while the rail becomes one scroll path, and at 600 pixels tall or less the head and footer join that path.
  • A recovered target names the node it actually matched and withholds Approve when that name differs from the one pointed at, until it is re-pointed.
  • A target inside a same-origin frame that has not loaded is named unloaded rather than cross-origin.
  • A linked stylesheet's own relative assets are served from the stylesheet's directory, so decorations the human is asked to judge are not silently missing.
  • open_visual_review returns revisionScope, so an agent can tell a complete file-derived revision from a partial one.
  • A refused visual-intent open stops the service instead of serving forever after printing its reason.
  • An existing but unreadable session or Check-In record refuses the launch by name, keeps its bytes, and is never replaced with empty state.

Docs and packaging

  • The README is now a front door in the shape of the Playwright MCP README: purpose, key features, requirements, standard config, per-client details behind collapsibles, and update and uninstall guidance.
  • The repository ships the canonical Apache-2.0 LICENSE file that package.json and the README already declared.
  • The verification map, design references and the ground-in-code audit are reconciled with their evidence.

Visual Intent Layer 0.3.2

Choose a tag to compare

@willa-code willa-code released this 18 Sep 16:16

The published package now carries the front door and the manual.

The npm page is a front door, and the manual ships with it

The README was both the front door and the whole product manual — 337 lines, where
someone registering the server read four paragraphs of interaction design first. It
is now 109 lines: what the product is, the install line per Harness with the pi
entry written out in full, update, uninstall, and the by-hand command that separates
Node and npm from your Harness.

Everything else moved to docs/guide.md — the Review Surface, the Annotation model,
target resolution, Check-In, the four MCP tools, environment and data, the envelope
schema, develop and layout. It ships inside the package, so the README's link
resolves for someone reading the installed tarball, not only on GitHub.

Two claims were wrong, and one act was missing

  • @latest does not always mean the newest release: pi-mcp-adapter caches a
    resolved command for 24 hours, so the README now says what forces a fresh fetch.
  • Uninstalling was never documented. It is now — including the fact that it deletes
    none of your reviews: Annotations, sessions and attachments stay in
    ~/.visual-intent-layer/data until you remove that directory.

Repository

Conventional commits are enforced by a commit-msg hook and re-checked in CI. The
registry listing retries the window where npm has not yet served the released
version, which is what required a hand dispatch for 0.3.1.

v0.3.1 — a relation drag that survives the rail taking focus

Choose a tag to compare

@willa-code willa-code released this 18 Sep 14:09

What was wrong

A relation drag could be silently dropped. On a busy machine, the rail re-renders
the Annotation card shortly after you select a target, and that render moves focus
into the card's note field. The artifact frame lost focus, and the layer read that
as the operator leaving the gesture, so it cancelled the drag it had just shown a
sentence for. You saw "Member 1 should come after Member 2" and nothing was
recorded.

What changed

The drag now survives focus moving anywhere inside the page. It is cancelled only
when the page itself loses focus or goes hidden, which is when the gesture really
can no longer be delivered.

Three browser drives that raced their own setup are now deterministic, and a browser
test that fails on CI keeps a Playwright trace — DOM snapshots, network log and
screencast — so the next unexplained failure carries its own evidence.

No interface, envelope or CLI change. Nothing to migrate.

Full changelog: v0.3.0...v0.3.1

0.3.0

Choose a tag to compare

@willa-code willa-code released this 18 Sep 12:04

The Annotation is the unit of work

0.3.0 rebuilds the Review Surface around durable Annotations. A Builder-Reviewer
points at visible targets, writes a note on each, and sends them as one versioned
Visual Intent Envelope. Each Annotation carries its own identity, target evidence and
note, and each is verified on its own.

  • Relational Intent by direct manipulation. Shift builds a set of targets;
    dragging one already in the set states one relation — ordering, alignment, equal
    spacing, containment, shared property, comparative size — as one sentence before
    anything is recorded.
  • Passes and reversible verdicts. A Pass is the unit of review with its own state
    and outcome. A verdict can be changed in one act, which reopens the Pass it closed.
    Another Pass carries the open Annotations into a new Pass; Not Fixed is the
    single "no", and a send the agent has not collected can be taken back.
  • Reaching inside the artifact. Targets can be pointed at inside open shadow roots,
    nested shadow roots and same-origin frames, and a drawn Area encloses what it
    geometrically encloses across a boundary. Where the surface cannot look in it states
    the boundary with its true cause instead of reporting the target as gone.
  • Honest outcomes. Resolution reports Matched, Recovered, Ambiguous (with
    candidates, never auto-selected), a state no longer on screen, a boundary this
    surface cannot read, or Deleted — and separately whether a target was written before
    the revision now on screen.
  • Check-In. Steering and interruption are seen when the agent checks in between its
    own steps. There is no push channel and no wake mechanism.

Install changed: it is your agent's job now

The product ships a standard local MCP server and no installer. visual-intent setup, the Harness Registry and the bundled Skill are gone (ADR-0031): every agent
that can register an MCP server ships a registrar more current than our copy of its
format, and our copy was the most drift-prone code in the repository.

Register the server with your own agent's mechanism:

# Claude Code
claude mcp add visual-intent-layer -- npx -y --package visual-intent-layer@latest visual-intent-mcp
# Codex
codex mcp add visual-intent-layer -- npx -y --package visual-intent-layer@latest visual-intent-mcp
# opencode
opencode mcp add visual-intent-layer     # then give it npx and the arguments above

pi works through pi-mcp-adapter with the same entry in the project .mcp.json, and
any host that can launch a local stdio server works. Registry-aware clients can find
the server as io.github.willa-code/visual-intent-layer.

Install it on the machine where you look at the screen. The Review Surface opens a
browser there and binds a loopback port there.

The running server now reports its own version in every open_visual_review result, so
a report about odd behaviour can name the build.

Breaking changes

  • visual-intent setup is removed. Re-register with your own agent's MCP command.
    An existing registration from setup still works — it points at the same server —
    but this release no longer reads, writes or repairs any Harness configuration.
  • The bundled Skill is no longer published. Its four triggers now live in
    open_visual_review's description, which is the only trigger surface a tool call has.
  • Envelope 0.4 is current. 0.2 and 0.3 envelopes still load and are read as the
    current version; 0.1 is refused by the validator, and its schema is kept only as a
    historical record of the wire shape.

Smaller things

  • The published tarball drops from 209 files to 179: dev tooling, the Skill and the
    packaged MCP snippet no longer ship.
  • Every published version is now an official release; the pre-release channel is
    retired.
  • A browser that cannot be opened is reported rather than killing the server process.

Full Changelog: v0.2.1...v0.3.0

v0.3.0-next.3 — Check-In reads direction by position

Choose a tag to compare

@willa-code willa-code released this 17 Sep 13:00

What's Changed

  • Make CI green: hermetic detection tests, gallery render size, action majors by @willa-code in #1

New Contributors

Full Changelog: v0.3.0-next.2...v0.3.0-next.3

v0.3.0-next.2 — Review Surface refinement and the verification Lever

Choose a tag to compare

@willa-code willa-code released this 17 Sep 12:16

v0.3.0-next.1 — harness detection and the Annotation review surface

Choose a tag to compare

@willa-code willa-code released this 15 Sep 15:30

v0.3.0-next.0 — Pre-release channel + maintenance skill

Choose a tag to compare

@willa-code willa-code released this 15 Sep 11:09

Full Changelog: v0.2.1...v0.3.0-next.0

v0.2.1 — Fix packaged snippet version pin

Choose a tag to compare

@willa-code willa-code released this 15 Sep 10:32

Full Changelog: v0.2.0...v0.2.1

v0.2.0 — Multi-harness MCP setup

Choose a tag to compare

@willa-code willa-code released this 15 Sep 10:14

Full Changelog: v0.1.1...v0.2.0