The Gemini CLI maintains conversation sessions per project. GeminiCliSdk provides functions to list, resume, and delete sessions.
Listing Sessions
{:ok, output} = GeminiCliSdk.list_sessions()
IO.puts(output)This runs gemini --list-sessions and returns the raw text output, which typically looks like:
Available sessions for this project (3):
1. Fix authentication bug (2 days ago) [abc123]
2. Add pagination (5 hours ago) [def456]
3. Refactor tests (10 minutes ago) [ghi789]Resuming a Session
Resume a previous session and continue the conversation with streaming events:
# Resume by session ID
GeminiCliSdk.resume_session("abc123")
|> Enum.each(fn event ->
case event do
%GeminiCliSdk.Types.MessageEvent{role: "assistant", content: text} ->
IO.write(text)
_ ->
:ok
end
end)Resume with a New Prompt
You can provide a follow-up prompt when resuming:
GeminiCliSdk.resume_session("abc123", %GeminiCliSdk.Options{}, "Now add error handling")
|> Enum.each(fn event ->
case event do
%GeminiCliSdk.Types.MessageEvent{role: "assistant", content: text} ->
IO.write(text)
_ ->
:ok
end
end)Resume with Options
opts = %GeminiCliSdk.Options{
model: GeminiCliSdk.Models.fast_model(),
timeout_ms: 120_000
}
GeminiCliSdk.resume_session("latest", opts, "Continue where we left off")
|> Enum.to_list()Deleting a Session
Delete a session by its index number or ID:
# Delete by index
{:ok, _} = GeminiCliSdk.delete_session("2")
# Delete by session ID
{:ok, _} = GeminiCliSdk.delete_session("abc123")Session Workflow Example
# 1. List available sessions
{:ok, sessions} = GeminiCliSdk.list_sessions()
IO.puts(sessions)
# 2. Resume the most recent session with a follow-up
GeminiCliSdk.resume_session("latest", %GeminiCliSdk.Options{}, "What were we working on?")
|> Enum.each(fn
%GeminiCliSdk.Types.MessageEvent{role: "assistant", content: text} ->
IO.write(text)
_ ->
:ok
end)
# 3. Clean up old sessions
{:ok, _} = GeminiCliSdk.delete_session("1")Typed Session Entries
Use GeminiCliSdk.list_session_entries/1 when you want a structured view of resumable Gemini CLI
sessions. That API turns the CLI’s human-facing session list into typed entries with stable
id, label, and index fields.
If you are integrating through a runtime-neutral layer, the equivalent orchestration-facing API is
GeminiCliSdk.Runtime.CLI.list_provider_sessions/1, which projects those entries into the common
session-history shape used across the stack.