Inspiration

Visual collaboration tools are blind to an agent. It has to guess pixel coordinates, click through menus, or hand back a wall of text that a human then rebuilds on the board by hand. We wanted the opposite: an agent that works with the board's real concepts (ideas, clusters, connections, decision matrices) while the person watches, edits and overrides every move on the same canvas.

We also wanted the board to belong to you. No accounts, no cloud lock-in. Every mural has its own URL, it lives on your own server, and you can close the tab today and pick up the same session with the same agents next week.

What it does

AI Mural is a self-hosted visual board where people and browser agents build, cluster and argue together through 27 WebMCP tools.

  • One live canvas for everyone. Ideas, questions, insights, actions, frames, connections and layers on an infinite canvas. UI clicks and agent tool calls go through the same action layer, so there is no hidden agent-only state. Humans can undo or redo anything an agent did.
  • Come back anytime. Every mural has a UUID and a URL like /?mural=<uuid>. Boards are written to the browser first and synchronized to SQLite on your server, so a session survives reloads.
  • Checkpoints and replay. The moderator saves editable timeline checkpoints at meaningful milestones. Anyone can step through the mural's history with Previous and Next controls without destroying the current state.
  • Share from the app. Publish a local mural and create or rotate private collaborator links from the Share dialog, so a board that started offline can become a shared session in one step.
  • Self-hosted in one command. A tiny Express + SQLite backend, a Dockerfile and a Compose file. No API keys, no external services, no analytics, no cookies.
  • Multiple agents with visible identity. Agents join a mural with named roles such as Explorer, Critic and Synthesizer, each with its own color. The agent that opens a session becomes its moderator and can mute or reactivate others through a private capability, never through a visible ID.
  • Focus leases so agents don't collide. Before editing, an agent claims a visible, expiring focus lease on the elements it is about to touch. Other agents and the human can see who is working where, and overlapping edits are prevented instead of merged after the fact.
  • Capability links instead of logins. A GPT can create a hosted mural, return a separate URL for the human, and issue one private URL per invited agent. The mural UUID routes a request but is not a credential.
  • Artifact Spec 1.0. Tables, cards, checklists and decision matrices are typed data with a published JSON Schema, not screenshots or opaque HTML. Agents read, create, update and reuse them across turns.
  • Decision Trace. An optional recording of user messages, agent contributions, replies, board actions and the final board, exportable as JSON, Markdown or CSV. It never captures hidden chain-of-thought.

The 27 WebMCP tools

Group Tools
Murals and access canvas_create_mural, canvas_rename_mural, canvas_join_session, canvas_invite_agents, canvas_redeem_agent_invite
Board canvas_get_board, canvas_add_element, canvas_add_elements, canvas_update_element, canvas_remove_elements, canvas_connect_elements, canvas_arrange_board, canvas_create_cluster, canvas_focus_elements, canvas_set_element_layer
Artifacts canvas_create_artifact, canvas_get_artifact_spec, canvas_update_artifact_records
Collaboration canvas_set_focus, canvas_add_checkpoint, canvas_start_recording, canvas_record_contribution, canvas_comment_element, canvas_moderate_participant, canvas_watch_mural, canvas_get_recording, canvas_finalize_recording

Try it with an agent

Open the live URL in ChatGPT's in-app browser, then ask:

We need to decide how to reduce food waste in our university cafeteria. Create a mural for it and invite three agents with different profiles: an Explorer that proposes at least 10 ideas, a Critic that challenges each one with risks and costs, and a Synthesizer that groups the survivors into Prevention, Redistribution and Composting and builds a decision matrix with the four strongest options. Save a checkpoint after each agent finishes. Send me the mural URL so I can follow along and add my own constraints.

How we built it

  • WebMCP: tools are registered with document.modelContext.registerTool, with a fallback to navigator.modelContext for earlier browser builds. The app stays fully usable when WebMCP is unavailable and shows setup guidance in the Agent panel.
  • Frontend: React 19, TypeScript, Vite and React Flow for the canvas.
  • Backend: Express 5, Drizzle ORM and better-sqlite3. The database initializes itself on first run.
  • Persistence: localStorage first, SQLite sync when the backend is reachable, BroadcastChannel between tabs on the same mural.
  • Security: capability tokens stored server-side only as SHA-256 hashes. Read and write tools are annotated so a client can tell them apart.
  • Deploy: Docker Compose behind an nginx reverse proxy, one-command rsync deploy.
npm install
npm run dev

Challenges we ran into

  • Routing without authorizing. A public mural UUID has to be enough to open a board, but not enough to write to it or to take over a moderator role. Separating owner, user and per-agent capabilities solved it without adding accounts.
  • Merging simultaneous edits. Two tabs and three agents can touch the same mural at once. Version stamps plus deletion tombstones were enough to merge changes instead of blindly replacing the board, without pulling in a full CRDT.
  • Keeping 27 tools understandable for a model. Narrow JSON Schemas, batch limits (30 elements per call, 12 fields and 100 records per artifact), stable element IDs and structured results worked far better than one giant "do anything" tool.
  • Agents talking over each other. Watch leases with a recommended polling interval, quiet periods and cooldowns keep agents from answering their own events. Expiring focus leases stop two agents from editing the same element at once.
  • Syncing without stomping on the human. Hosted sync used to interrupt a person mid-edit when an agent wrote to the same board. Live editing is now preserved across sync cycles.

Accomplishments that we're proud of

  • A board where a human and several agents can genuinely work at the same time, and the human never loses control.
  • A session you can leave and resume from any device by URL, with nothing but a SQLite file on your own server.
  • Structured artifacts that an agent can reuse in a later turn instead of re-reading a screenshot.
  • A replayable timeline: checkpoints let you scrub through how a decision was built, step by step.
  • An agentic and free alternative to softwares as Mural or Miro

What we learned

  • WebMCP works best when tools expose product concepts, not UI mechanics. "Add 12 ideas and cluster them" beats "click at x, y".
  • Read/write annotations and bounded inputs matter as much as the schema itself.
  • Capability URLs are a surprisingly good fit for agent collaboration: each agent gets exactly one link and nothing else to configure.

What's next for AI Mural

  • Live cursors and presence for human collaborators.
  • More artifact types and presentation options.
  • Agent-to-agent handoff patterns built on the watch lease.
  • A one-click self-host template.

Built With

Share this project:

Updates

Submission history