Guides

The in-map workspace

When a bubble needs a human you do not leave the map. The workspace opens in the same window, over the canvas.

Updated 2026-07-21

Opening it

Double-click a bubble, or press Enter with it selected. The canvas stays live behind the panel: other agents keep running and their bubbles keep updating.

Panes

streamthe agent’s hook events and output as they arrive
filesthe tree it is allowed to touch, scoped by isolation
editorsyntax highlighting, unsaved-state marker
diffstaged against the agent’s branch
terminalthe same shell the agent runs in

Answering a prompt

A permission prompt turns the bubble amber and puts the question at the top of the stream. Answer it in the workspace and the agent continues from where it stopped — no re-run, no lost context.

vibisual {{ verBadge }}
{{ t.eyebrow }}

{{ t.h1a }} {{ t.h1em }}

{{ t.nameLine }}

{{ t.sub }}

{{ stat1 }} {{ t.st1 }} {{ stat2 }} {{ t.st2 }}
{{ stat3 }} {{ t.st3 }}
{{ stat4 }} {{ t.st4 }}
{{ t.canvasHint }} vibisual · canvas
{{ b.count }} {{ b.label }} {{ b.badge }}
{{ l.text }}
{{ g.text }}
{{ t.bubDblHint }}

{{ t.canvasCaption }}

IDE → ADE → VDE

{{ t.vdeLead }}

IDE {{ t.vde1 }} VS Code, Cursor
ADE {{ t.vde2 }} Warp
VDE {{ t.vde3 }} Vibisual

{{ t.whatTitle }}

01

{{ t.f1t }}

{{ t.f1b }}

SessionStart → node created · orchestrator UserPromptSubmit → "split the checkout refactor" PreToolUse Task → edge → api-builder PreToolUse Edit → bubble · routes/checkout.ts PostToolUse Bash → 41 passed
02

{{ t.f2t }}

{{ t.f2b }}

node · test-runnerunsaved
modelclaude-sonnet-4.6 toolsBash, Read, Grep rulesnever edit src/** in-edgeapi-builder → test-runner
03

{{ t.f3t }}

{{ t.f3b }}

stream files diff terminal
routes/checkout.ts - const total = items.reduce(sum) + const total = priceWithTax(items) + if (!total) throw new BadRequest() 2 files changed · saved to the agent's branch
walkthrough {{ t.videoTitle }} {{ t.videoSub }}

{{ t.instTitle }}

{{ t.instLead }}

{{ t.instWin }}
{{ f.name }}

{{ t.instWinBody }}

Releases →
{{ t.instSrc }}
$ git clone https://github.com/Vibisual/vibisual.git $ cd vibisual && pnpm install $ node scripts/runapp.mjs # pnpm build:win

{{ t.instSrcBody }}

Contributing →
{{ t.statusLabel }}

{{ t.statusBody }}

{{ t.secLabel }}

{{ t.secBody }}

{{ t.ctaTitle }}

{{ t.ctaSub }}

{{ ui.blog }}

{{ ui.blogTitle }}

{{ ui.blogLead }}

{{ art.date }}{{ art.tag }}{{ art.read }}

{{ art.title }}

{{ art.excerpt }}

{{ pa.v }}

{{ art.author }}
{{ ui.docs }}/{{ doc.g }}/{{ doc.title }}

{{ doc.title }}

{{ doc.lead }}

{{ ui.updated }} {{ doc.updated }}

{{ s.h }}

{{ pa.v }}

{{ c.v }}
{{ r.k }} {{ r.v }}
note

{{ s.note }}

{{ pick.title }} {{ t.ideWindowTag }}
{{ pick.label }} {{ pick.typeLabel }}
{{ pick.agentTabName }}
{{ tb.name }}
{{ ac.under }} {{ ac.badge }}
{{ pick.rootName }}
{{ tr.name }}
{{ pick.selPath }}
{{ as.you }} {{ ideAsk }}

{{ pick.body }}

{{ as.activity }} {{ pick.toolRun }} {{ tn.v }}
Read {{ pick.readTarget }}
{{ as.output }}
{{ pr.k }}{{ pr.v }}

{{ nt.head }}

{{ nt.body }}

{{ pick.runWord }} {{ ideAsk }}
All Model {{ pick.localModel }}
{{ dn.v }}
{{ as.follow }}
> {{ as.ph }} {{ as.run }}
{{ as.readOnly }}
{{ term.note }} {{ term.fontSize }}
{{ tl.a }}{{ tl.b }}
{{ pick.stBadge }} {{ pick.stState }} {{ pick.stModel }} {{ pick.stCtx }} {{ pick.stTok }} {{ pick.stAc }} {{ pick.stSess }}
{{ brain.title }} {{ brain.project }} {{ brain.howTo }}
{{ brain.search }} {{ bty.v }}
{{ sp.title }} {{ sp.hint }} {{ sp.count }}
{{ brain.topicsLabel }}
{{ tp.v }} {{ tp.n }}
{{ brain.axesTitle }} {{ brain.turnOff }}
{{ ax.t }} {{ ax.h }}

{{ brain.keepsData }}

{{ brain.docTitle }}

{{ brain.docPath }}

{{ bc.ti }}

{{ bc.typeName }} {{ bc.alwaysLabel }} {{ bc.needsLabel }} {{ bc.curLabel }} {{ bc.ckey }} {{ bc.ago }} {{ bc.help }}

{{ bc.needsText }}

{{ bc.stillValid }} {{ bc.markStale }}

{{ bc.body }}

{{ bc.file }}
{{ bc.detail }}

{{ t.ideAnnoLead }}

{{ an.n }} {{ an.h }}

{{ an.b }}

{{ an.k }}
{{ t.ideNextTag }} {{ t.ideNextBody }}