visual-brief
visual-brief turns structured session reports into self-contained local HTML
briefings. One loopback-only daemon serves every active run and a dashboard for
finding sessions that need an answer.
Use it for substantial implementation results, investigations, reviews, and design reports. Routine status messages and trivial fixes do not need a visual brief.
Install
uv tool install visual-brief
Create a Run
visual-brief new --label "Review parser changes" --port 8765
visual-brief serve --port 8765
Before long implementation work, send the human a short visible acknowledgment. Then publish the completed report to the page.
Publish a Briefing
Normal reports use one direct object:
visual-brief publish --file report.json
The object has exactly id, timestamp, headline, summary, and lanes:
{
"id": "parser-verification",
"timestamp": "2026-08-04T12:00:00Z",
"headline": "The parser now rejects truncated policies",
"summary": "Focused comparisons pass, while one wider limit remains.",
"lanes": [
{
"id": "verified-behavior",
"name": "Verified behavior",
"items": [
{
"id": "truncated-policy",
"glance": "Truncated policies now return a syntax failure.",
"explanation": "The result agrees with the reference parser.",
"trust": "verified-by-me"
}
]
}
]
}
Choose one to six lanes. Their names and content should fit the report. A briefing may describe new work, current behavior, limitations, decisions, evidence, or next actions. A dedicated recent-changes section is optional.
The CLI appends the object to updates. The last record is the prominently
displayed latest briefing. After the next publish, that same stable-id record
moves into the quieter earlier-briefing ledger. Its conversations, folds,
drafts, and pending state remain intact.
There is no separate normal current-state object and no separate changes
object. The retired current_state plus changes envelope is rejected.
Content Shape
Each lane has id, name, and items. Each item has id, glance,
explanation, and trust. Items may also carry forensics, tables, and up
to three suggestions.
Use plain prose for the briefing headline and summary. Put detailed evidence under the claim it supports. The allowed trust values are:
verified-by-mereported-by-agentunverifiedknown-limitation
Do not include questions in a publish payload. Conversations are tool-owned.
The briefing root, every lane, and every item are chat-addressable.
Conversation Workflow
visual-brief fold
visual-brief answer <thread-id> --text "..."
visual-brief lint
fold copies queued human text and timestamps into the document. answer
appends an agent turn. A substantial request from the page should receive a
short acknowledgment before the long work begins, followed by the completed
answer or briefing.
The page updates in place when a publish arrives. It does not reload for a normal live publish, so open drafts and reader state survive.
Legacy Migration
Legacy documents continue to render. On the first direct publish, a legacy
current_state becomes one ordinary archived briefing and is removed. Its
root, lane, and item conversations move to archived anchor paths. Persistent
aliases also preserve queued messages submitted from an old open page.
Migration and the new publish form one atomic write. Malformed payloads, duplicate ids, validation failures, render failures, and write failures leave the run unchanged.
Other Commands
visual-brief add-update --file update.json # compatibility imports only
visual-brief render <run-id> # render hand-edited content
visual-brief list # runs and unanswered counts
Runs live below $VISUAL_BRIEF_HOME, which defaults to
~/.claude/visual-brief/runs/. The dashboard is available at
http://localhost:8765/.
The renderer and server use only the Python standard library. The shipped page is a committed SolidJS bundle. Build it with:
make visual-brief-frontend
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file visual_brief-0.1.1.tar.gz.
File metadata
- Download URL: visual_brief-0.1.1.tar.gz
- Upload date:
- Size: 452.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.5.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aaed42756f9a7b50effcae65e87d689bee24c716457c191acfcedb51c79b8d3b
|
|
| MD5 |
395de5f020e8a47a5c3911dfc7298b02
|
|
| BLAKE2b-256 |
730454ba4c43f238dc16bbfa90b393f6625406febde3a1531c48c35f9bf67afb
|
File details
Details for the file visual_brief-0.1.1-py3-none-any.whl.
File metadata
- Download URL: visual_brief-0.1.1-py3-none-any.whl
- Upload date:
- Size: 204.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.5.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68e652bbec3d00170d0b16d2899e76a613fb48411a3d10b7b6469757d066ff69
|
|
| MD5 |
e7fa6214f717eb8e03e3a505e3588ee8
|
|
| BLAKE2b-256 |
7b028197b678f7cb1f3587b3f9119beba06cd13831850eb3084e84b438a18cbd
|