Vibe sessions are runtime objects owned by Vibe, not just the current terminal. The goal is a tmux-like workflow: create sessions, send work to them, detach, and attach again later.
Common commands:
vibe new
vibe n
vibe sessions
vibe ls
vibe send <session-id> "prompt"
vibe attach <session-id>
vibe a <session-id>
Inside eval:
{:ok, session} = Vibe.Session.start(session_id: "work")
{:ok, snapshot, cursor} = Vibe.Session.attach(session)
Vibe.Session.dispatch(session, {:submit_prompt, %{text: "hello"}})
Vibe.Session.state(session)
Vibe.Session.list()
Vibe.Session.detach(session)Durable session data is stored in SQLite:
Vibe.Session.Store.list()
Vibe.Session.Store.ui_events("work")
Vibe.Session.Store.trajectory(session_id: "work")
Vibe.Session.search("sqlite migration", session_id: "work")Plain vibe opens the interactive TUI. Use vibe new when you explicitly want a fresh session, and vibe attach <id> when you want a specific existing session.
Interactive model controls:
Ctrl+P Cycle to the next model
Shift+Ctrl+P Cycle to the previous model
Ctrl+L Open the model selector
Shift+Tab Cycle effortEffort values are off, minimal, low, medium, high, and xhigh. The /model and /effort slash commands are aliases for the same session controls.