A shared space where humans and agents work together, live.
Seance is a candlelit multi-pane terminal for Linux. Every pane is on the human’s screen. Agents (Claude, Codex, Grok, any CLI) and shells sit beside you — not hidden in a background job. They can see each other, ask you questions, propose commands for your approval, and leave notes on a scratchpad you both flip into. Visibility is the point.
Native app on GPUI. Sessions live in a long-lived daemon; the window is disposable.
License: MIT · Platform: Linux (Wayland / X11) · Status: 0.9.13
Release notes: CHANGELOG.md.
Most agent tooling optimizes for the agent alone. Seance optimizes for engagement in a shared space:
| human | agent |
|---|---|
| watches every pane live | runs in a real terminal on that screen |
| flips notes, steers, takes over a shell | drives siblings via seance ctl |
answers ask toasts; Enter/Esc on ghost commands |
|
prefers propose over silent risk |
|
| triages by status badges + stage strip | reports planning / working / needs-human |
| inspects pad drawer without flipping | opens file panes so edits appear live |
Attribution is first-class: actions are logged as human
/ agent:<pane>
/
cli
. The timeline answers “what happened while I was looking elsewhere?”
Any command is a pane. Default summon is a shell (so you can always take
the keyboard). Point --command
at whatever agent CLI you use.
Live multi-pane terminals— real PTYs, selection, scrollback; weighted tile grid with drag sashes (n≥2)** Workspaces**— keep circles of work apart; sidebar drag-reorder** Notes on the back of every pane**— shared markdown ($SEANCE_SCRATCHPAD
)Pad drawer— stage chip / ▤ shows task inject body + pad tail (live-refreshes)** Stage strip**— urgency-sorted roster chips (click focus+pad, double-click zoom)** File panes**— live markdown/text + history/diff when co-editing** Control plane**—seance ctl
so any pane (or external script) can spawn, send, wait, harvestOrchestrator A+—--agent
profiles, evidence-boundwait --status done
,send --file
, task envelopes,harvest
, event-driven wait, boot-clearHuman-in-the-loop—ask
,propose
, seize/release/drivePhone a pane— ☎ /ctl phone
opens a telegram topic and seeds astage card(workspace, roster, ctl how-to). No participant claim — you drive panes with normalseance ctl
on this host. Optional needs-human one-liners post to the topic when linked.Daemon architecture— upgrade binary without killing the circle (concurrent-upgrade gate)** Event bus**— sequenced, attributable events +seance ctl watch
Capabilities—policy open|propose_required|locked
- per-principal grants
./scripts/bootstrap-deps.sh # pinned gpui checkout — see docs/PLAYBOOK.md
cargo build --release # first build can take ~10 min
./target/release/seance
ln -sf "$(pwd)/target/release/seance" ~/.local/bin/seance # optional
Requirements: recent Rust, Vulkan-capable drivers, a monospace font
(default CaskaydiaMono Nerd Font Mono — change in src/term_font.rs
).
seance ctl skill # agent-facing protocol (⚡ arm / paste)
seance ctl doctor
seance ctl roster
seance ctl new --name w --agent claude --wait-ready
seance ctl send w --file /tmp/task.md
seance ctl wait w --status done --timeout 600 --cat
seance ctl harvest w1 w2 w3 --timeout 900
seance ctl phone w # telegram topic + stage card (no claim)
Multi-agent live test: ./scripts/agent-collab-test.sh
Thorough smoke: ./scripts/e2e-thorough.sh
Upgrade load test: ./scripts/upgrade-load-test.sh
(upgrades live daemon)
| key | action |
|---|---|
| ctrl+shift+n | new pane (shell by default) |
| ctrl+shift+w | banish (kill) active pane |
| ctrl+shift+s | flip notes ↔ face |
| ctrl+shift+p | pop pane to its own window |
| ctrl+shift+k | precanned prompt palette |
| ctrl+shift+j | fuzzy jump (pane / workspace) |
| ctrl+shift+z | focus-zoom active pane |
| ctrl+shift+f | last failed shell command |
| ctrl+pageup / pagedown | cycle workspaces |
| ctrl+shift+pageup / pagedown | cycle panes in this workspace |
| ctrl+shift+v | paste |
| ctrl+click / middle-click | open OSC-8 / URL |
| stage chip click | focus + pad drawer |
| stage chip double-click | zoom |
| ⚡ | arm agent (ctl skill orientation) |
| ☎ | phone pane (telegram stage card) |
| ▤ | pad drawer |
| 💬 | whisper — compose a steer into the pane |
| sash drag | resize 2-pane ratio or multi-pane weights |
| process | role |
|---|---|
seance daemon |
|
| owns PTYs, grids, state; Unix socket | |
seance (GUI) |
|
| shared space UI; reconnects safely | |
seance ctl … |
|
| JSON-lines client for agents, shells, scripts |
Do not pkill -x seance
to reload — that kills every session. Prefer
cargo build --release && seance upgrade
, or seance restart-gui
for UI-only.
| path | |
|---|---|
| state | ~/.local/share/seance/state.json |
| scratchpads | ~/.local/share/seance/scratch/<slug>.md |
| layout weights | ~/.local/share/seance/layout.json |
| events | ~/.local/share/seance/events.jsonl |
| socket | $XDG_RUNTIME_DIR/seance.sock |
Injected into every pane: SEANCE_SESSION
, SEANCE_WORKSPACE
,
SEANCE_SCRATCHPAD
, SEANCE_SOCKET
. Workspace scoping is automatic inside a
pane — agents only see their circle unless you pass --all
.
| doc | |
|---|---|
docs/DAEMON.mddocs/ORCHESTRATION.mddocs/SHELL-INTEGRATION.mddocs/PERF-TERMINAL.mdCLAUDE.mdonthis repoCanonical agent instructions: ** seance ctl skill**.
./scripts/bootstrap-deps.sh
cargo test
cargo build --release && seance upgrade
./scripts/e2e-thorough.sh
Pin discipline: gpui-component
rev-pinned; zed patched to deps/zed
at
1a246efd…
. Bump only as a pair — PLAYBOOK.
- OSC-133 shell-agnostic markers (bash hooks + cmdlog work today; OSC-8 open shipped) Full continuous session replay(grid recorder + browser player) — filed in vita working doc; not the retired timeline HTML export- GPU glyph atlas (CPU path is multi-pane smooth — explicit non-goal for now)
- worktree-backed agent rooms, best-of-N
MIT — see LICENSE.
Uses zed’s alacritty fork (Apache-2.0), GPUI, and gpui-component.