Skip to main content

priv/docs/sessions.md

# Sessions

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:

```bash
vibe new
vibe n
vibe sessions
vibe ls
vibe send <session-id> "prompt"
vibe attach <session-id>
vibe a <session-id>
```

Inside eval:

```elixir
{: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:

```elixir
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:

```text
Ctrl+P        Cycle to the next model
Shift+Ctrl+P  Cycle to the previous model
Ctrl+L        Open the model selector
Shift+Tab     Cycle effort
```

Effort values are `off`, `minimal`, `low`, `medium`, `high`, and `xhigh`. The `/model` and `/effort` slash commands are aliases for the same session controls.