visual-intent-layer
Officialby willa-code
README.md
# Visual Intent Layer
Point at what you see and say what should change. The agent changes exactly that,
and you verify by hand. It reviews a browser-rendered artifact — a saved or
generated HTML document, or a local web app running on this machine; a mobile
build, a native window, a design file and a PDF are outside it by decision rather
than omission.
## Install
Requires Node 20+. No Rust toolchain, no hosted account.
The product is a standard local MCP server. You register it with your own agent's
MCP mechanism — there is no install command of ours to run, and nothing of yours
that we write.
| Harness | What to run |
| ----------- | -------------------------------------------------------------------------------------------------------- |
| 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 when it asks |
| pi | the entry below, with `pi-mcp-adapter` installed, or the adapter's `/mcp setup` panel |
| any other | any host that can launch a local stdio server: command `npx`, arguments `-y --package visual-intent-layer@latest visual-intent-mcp` |
Registry-aware clients can also find the server as
`io.github.willa-code/visual-intent-layer` in the official MCP Registry, which lists
where to get it rather than hosting it.
**Install it on the machine where you look at the screen.** The Review Surface
launches a browser on the machine running the server and binds a loopback port
there. A server in a container, on a remote host, or inside a cloud agent has
nothing to show you.
Registering takes effect when your agent next starts, so restart it.
### The pi entry
pi itself ships no MCP; `pi-mcp-adapter` provides it. Add this to the project's
`.mcp.json` — merge it into `mcpServers` if the file already has one, rather than
replacing the file:
```json
{
"mcpServers": {
"visual-intent-layer": {
"command": "npx",
"args": ["-y", "--package", "visual-intent-layer@latest", "visual-intent-mcp"]
}
}
}
```
A project `.mcp.json` applies to that project only. `.pi/mcp.json` is the Pi-only
project override, and `~/.config/mcp/mcp.json` applies to every project. Install
the package globally (`npm install -g visual-intent-layer`) and the entry's
`command` becomes `visual-intent` with `args` `["mcp"]`.
### Update
`@latest` is resolved when npx fetches the package, so there is nothing to update
by hand — unless your Harness caches the resolved command and keeps serving it:
`pi-mcp-adapter` caches for 24 hours, reading the cache from disk, so a restart
does not renew it. Delete `~/.pi/agent/mcp-npx-cache.json` to force a fresh
fetch. `npm view visual-intent-layer version` says what is current.
To hold a version still, replace `@latest` with an exact version in the entry. A
global install updates with `npm install -g visual-intent-layer@latest`.
### Uninstall
Remove the entry you added, with the mechanism you added it: `codex mcp remove
visual-intent-layer` in Codex, `claude mcp remove visual-intent-layer` in Claude
Code, and by deleting the entry from your Harness's own MCP config everywhere
else. A global install comes out with `npm uninstall -g visual-intent-layer`.
Uninstalling deletes none of your reviews: Annotations, sessions and attachments
stay in `~/.visual-intent-layer/data` until you remove that directory.
`docs/guide.md` names the file for the Harnesses that keep one.
### If the tools do not appear
Run the entry's command by hand first. It separates Node and npm from the Harness:
```sh
npx -y --package visual-intent-layer@latest visual-intent-mcp
```
It prints `visual-intent review service on http://127.0.0.1:<port>` to stderr and
then holds the connection open for an agent; `Ctrl-C` ends it. If that works, your
agent's own MCP panel is where the reason is: it names the server and reports why
it failed to start. The product cannot tell you — it writes no configuration and
reads none.
The server runs without an agent too:
```sh
npx -y --package visual-intent-layer@latest visual-intent open --html ./checkout.html
```
## Documentation
[`docs/guide.md`](docs/guide.md) is the product manual: the Review Surface, the
Annotation model, target resolution, Check-In, the four MCP tools, environment and
data, the envelope schema, develop and layout. `SECURITY.md` holds the threat
model, supported versions and the disclosure process. `docs/adr/` records why the
product behaves as it does, and `docs/pi-validation.md` is the live-pi checklist,
awaiting a human run.
## License
Apache-2.0. The complete local loop is permissively open.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues