Source of truth:
crates/core/src/session/mod.rscrates/cli/src/main.rs(session commands)crates/tui/src/export.rs
Session metadata (SessionMeta):
idtitlecreated_atupdated_atmessage_countprovidermodel
Persisted runtime shape:
sessionssession_messagessession_message_partsstructured_replay_eventsconversation_archives
Sessions are stored in:
~/.quavil/runtime/state.db
data_dir comes from Config::data_dir() and now resolves to ~/.quavil.
- non-ephemeral runs persist sessions
qvl exec --ephemeraldisables session persistence- title is derived from first user message (truncated to ~80 chars)
- replay and structured replay are both stored in SQLite, not JSONL side files
qvl sessions [query]
qvl session delete <id-or-title-fragment>
qvl session rename <id-or-title-fragment> "New title"
qvl export <id-or-title-fragment> [-o output.md]
qvl replay <id> [--filter <event-type>]
qvl --continue
qvl --session "<query>"Lookup behavior:
- query matches id prefix or title substring
- if multiple matches are found where a single target is required, command fails with candidate list
qvl export loads session thread and emits markdown via quavil_tui::export::export_thread_markdown.
Default output path:
- generated timestamped path when
-ois omitted
qvl replay prints stored event timeline for session id, with optional event-type filtering.
Core APIs:
save_sessionload_sessionlist_sessionsfind_sessionslatest_sessiondelete_sessionrename_session
- use
--ephemeralfor one-off CI automation where history is not needed - use
qvl sessions <query>to recover old work by title fragment - use export for review artifacts and issue reports