ReferenceCLI

vx forum

Open a local HTML artifact for visual review and collect the user's feedback

Open a local HTML artifact for visual review and collect the user's feedback.

Usage:
  vx forum <html-file> [--no-open] [--reopen] [--port <n>]
  vx forum poll <html-file> [--reply <text> | --reply-file <path|->] [--timeout <duration>]
  vx forum poll --all [--reply-to <html-file> (--reply <text> | --reply-file <path|->)] [--timeout <duration>]
  vx forum inbox [--ack <uid>...]
  vx forum reply <html-file> (--reply <text> | --reply-file <path|->)
  vx forum end <html-file>
  vx forum stop

forum <html-file> opens (or resumes) the review session for that file and
returns right away, printing the session URL and the next step; one local
server per user keeps running in the background on 127.0.0.1 and stops
itself when nothing is connected. The artifact gets window.forum.queuePrompt
and window.forum.sendQueuedPrompts, and the user can chat, queue messages and
send them to the agent from the browser. A Mermaid diagram authored as
<div class="mermaid">...</div> becomes an editable whiteboard. Sessions are
identified by the file's absolute path.

  --no-open   do not open the browser
  --reopen    reopen a session the user ended from the browser (only when the
              user asked for further review)
  --port      port to bind if the server is not already running

forum poll blocks until the user sends feedback, ends the session, or leaves
the browser disconnected past a grace period (status browser_disconnected;
the session stays resumable). Delivered feedback is consumed. --reply shows
the agent's markdown answer in the browser's conversation panel before it
waits again; --reply-file reads it from a file (- is stdin). --timeout
returns status timeout if nothing arrives in time. Run it again after each
response. See the forum skill for the exact output format.

forum poll --all listens to every open session at once, so one poll covers
several review windows. Each call delivers the feedback of one session (the
one waiting longest) and names it in the output (session and file);
other_sessions_pending says how many more are waiting, and the next call
delivers them. A session that ends while it waits is reported once as ended,
and no_sessions means nothing is open. Sessions opened while it waits join it.
--reply-to names the session a --reply answers, since the poll itself has no
file.

Delivery is confirmed, not assumed: a poll leases its prompts and the command
acknowledges them once its output was written. If a poll dies before that,
running poll again delivers the same prompts again, marked redelivered, so
nothing is lost; skip any uid you already applied.

forum <html-file> run inside a vexillum project also records that project as
the session's owner and makes sure the forum listener is running. The
listener is a small background process (no model, nothing it can decide)
that holds the poll for you: every prompt the user sends is written to the
project's durable inbox, the Stop hook wakes the commander with a "forum
session <file>: N new messages" line, and the browser shows the round as
relayed (with the time since, and a note when no commander session is known)
until a real answer, an artifact change or the user's Stop waiting. A session
opened outside any project has no commander to wake: the listener leaves it
alone, and forum poll works for it as before. The listener exits by itself
when no session is open or every review window is gone.

forum inbox prints the unread prompts of this project (run it from the
project) in the poll's output format, bounded in size, attachments by path
only. It does not mark anything read: forum inbox --ack <uid>... confirms the
uids you handled (the ones printed), and an unconfirmed prompt is shown again.
forum reply posts the agent's markdown answer (--reply, or --reply-file; - is
stdin) to the review panel and answers the round without blocking, so a
commander that does not poll can answer. When the artifact file has not changed
since the user's last send, it warns on stderr: the reply should summarize an
artifact edit, not replace it.

forum end ends the session as the agent (a plain forum <html-file> reopens
it later). forum stop shuts the background listener and server down.