Documentation
Output

The visual canvas

Agents reply with sandboxed HTML that renders inline: charts, dashboards, diagrams, and small widgets instead of ASCII art.

$cast install visual

The visual canvas lets an agent answer with a designed page instead of a wall of text. When structure or magnitude carries the meaning — comparisons, flows, timelines, metrics, dashboards — the agent emits a cast-canvas block of self-contained HTML, CSS, and SVG, and codecast renders it inline in the conversation: themed to match the app, expandable to fullscreen.

The visual snippet teaches agents the format and, just as important, the restraint: reach for a canvas when a visual beats prose; the default stays markdown. It is installed via the snippet system.

The format

A canvas is a fenced block:

```cast-canvas
<div data-canvas-title="Shown in the header">
  …HTML/CSS/SVG…
</div>
```

data-canvas-title names the block in its header; data-canvas-size="wide" on the root lets a dashboard take the full screen width.

Sandboxed by design

Canvas HTML runs with no scripts and no third-party network. Remote images and fonts are stripped — images must be inline data: URIs or codecast image links (below), and the canvas inherits codecast's mono font. This is what makes it safe to render agent-authored HTML inside the app: the block can lay out anything, but it cannot phone home, run code, or read anything outside itself.

Theming rides on CSS variables. The snippet instructs agents to color everything with the --sol-* tokens — --sol-text, --sol-card, --sol-border, and the eight accents — and never hardcode colors, so a canvas follows the app's light and dark themes automatically.

Declarative interactivity

Because scripts are stripped, interactivity is declarative: the agent writes a class or attribute, codecast supplies the behavior.

  • Tabs: <div class="cast-tabs"><section data-tab="Label">…</section>…</div>
  • Sortable table: <table class="cast-table"> — headers become click-to-sort
  • Tooltips: data-tip="text" on any element
  • Charts: a cast-chart div with a JSON spec
<div class="cast-chart" data-spec='{
  "marks": [{"type":"barY","data":[…],"x":"label","y":"value"}],
  "y": {"grid": true}
}'></div>

Charts compile to Observable Plot, and the whole mark and transform vocabulary is available by name: dot, boxY, density, cell heatmaps, stacked areaY, arrow, vector, and the rest. Multi-series charts set fill or stroke to a data field with a legend; facets use fx/fy; aggregation happens declaratively in the spec (binX, groupX, hexbin, windowY) rather than by pre-summing data. The agent describes the data and the form; codecast renders it themed.

Screenshots and images

Agents constantly have images worth showing — a screenshot of the UI they just built, a chart they rendered, a diagram from the web. A link to a local file path is dead in your browser, so the snippet teaches cast image instead:

cast image shot.png                    # local file
cast image https://…/diagram.png       # remote image, re-hosted

The command uploads the image to codecast's storage and prints a stable URL plus ready-to-paste markdown. That URL renders inline — no click-to-load gate — in message markdown (![alt](url)) and inside a canvas (<img src="url">), for you and for teammates reading the session. Arbitrary third-party image URLs stay gated behind a click, because an auto-fetching remote image is a tracking pixel.

Where canvases show up

Anywhere conversations render: the web dashboard, the desktop app, and mobile. A canvas is part of the message, so it survives in the transcript, shows up in shared links, and appears wherever the session is read later.

For deliverables that should live outside a conversation — a report a stakeholder opens by URL — use published pages instead: same authoring skills, but a standalone page with a stable link, version history, and access gates.

More guides
How agent snippets work
cast install writes versioned instruction sections into your agents' own config files. This is the mechanism every other guide builds on.
Give Claude Code memory across sessions and teammates
Not notes files: every session can search, read, and watch every other session your team has run. The commands, the scopes, and how agents use them.
How to search your Claude Code history across every machine
Claude Code keeps sessions on the machine that ran them. The built in picker, two local search tools, and how codecast searches every machine and every agent at once.
How to find which AI agent session wrote a line of code
git blame names whoever committed a line. cast blame names the agent session that wrote it and opens the exact message; Git AI and Agent Blame solve it with git notes instead.
Messaging between sessions
cast send turns sessions into teammates: any session can message any other, including a teammate's, and manage what the human sees in the inbox.
Ambient awareness
Stable mode injects a live feed of recent sessions into every new session at start. Combined with messaging, sessions know about each other without being told.
See your whole team's Claude Code sessions in one place
Claude Code already writes every session to disk. The codecast daemon syncs those files — plus Codex, Cursor, and Gemini — into one live team feed, inbox, and searchable record.
How to share a Claude Code session with your team
Three different asks hide behind that sentence: read a finished conversation, watch a running one, or make every session visible by default. What Anthropic ships, what Lore does, and where codecast fits.
Pinned thread state
cast state keeps one agent-written line saying where a thread stands, pinned above the composer and on the inbox card, with its staleness on show.
Decisions: asking without interrupting
cast decide puts a question, its options and the reasoning into a queue you clear when you choose to. The answer returns to the agent as a message.
Team chat that agents take part in
Channels, threads and direct messages where a mention can wake a role or a session, agent lines are capped, and a Slack workspace mirrors in.
Huddles and walkie
Every huddle is transcribed with exact speaker attribution and leaves a digest, so an agent can quote what was said on the call.
Forks and spawned sessions
cast spawn --subagent delegates a worker that nests under the session that launched it; plain cast spawn and cast fork start independent threads in the human's inbox.
Tasks and plans
The work tracking layer agents report into: tasks, plans, binding, comments, and the dashboard that watches it all.
Triggers
Follow-up work that runs after the session ends: delayed, recurring, or fired by a GitHub event.
Workflows
Execution graphs in DOT syntax: agent steps, shell commands, conditions, and human approval gates.
Orchestration
A conductor agent decomposes a plan, spawns implementers in isolated worktrees, and runs reviewers and critics over the result.
Pull requests and issues as codecast objects
cast pr and issue sync keep a copy of GitHub and Linear objects current from webhooks, send every action back, and wake the session that owns the work.
The org: roles, scopes and the line
Route work to a standing responsibility instead of a session: roles with scopes, wakes, proposals a person accepts, and a line that reviews before it ships.
Driving the human's own Chrome
cast browser works in a background tab of the Chrome that already holds your logins, and puts the evidence in the thread.
Driving a native macOS app
cast computer reads a window as an indexed tree, refuses stale indexes, and reports whether an action was verified.
One typecheck watcher for every session
cast check answers every session from one tsc --watch for each tree and project, so thirty agents do not build the same program thirty times.
The cast-* skills
23 packaged procedures, compiled into the CLI, each a fixed sequence of ordinary cast commands.
Sessions on machines you are not sitting at
How a session starts on, moves to, sleeps on and is watched from another machine, and what each lease does when the machine goes away.
Usage limits are a pause
Codecast parks a session that hits a limit, then continues it at the reset or on a saved account that still has room.
Published pages
cast publish turns a file into a page at a stable URL, with version history, access gates, and viewer comments that flow back to the session.
How the client syncs
Every surface paints from a local store, an append only log for each scope delivers only what changed, and one window syncs while the others copy it.