Skip to main content
The session command manages conversation sessions, allowing you to save, resume, and organize multi-turn interactions.

Quick Start

List conversation sessions example

Commands

Start a Session

Expected Output:

List Sessions

Expected Output:
The header line now includes an identity: tag showing which resolver was used (see Project Sessions → How It Works). Sessions that have not yet accumulated any usage show - in the Tokens and Cost columns.
Updated columns (praisonaiagents 1.6.85+): The table now shows ID | Name | Status | Events | Tokens | Cost | Updated. Tokens are formatted with thousands separators (e.g. 12,345); Cost is formatted as $0.0140. Sessions with no recorded usage show - for both.
JSON output — pass --json to get machine-readable output with usage data per session:
session list (no --project, no --all) merges the current project’s session store with the global default store — every session --continue/resume could see, in one list, deduped by session id (freshest updated_at wins when the same id lives in both stores). Use --all to include every project’s sessions, or --project <id> to restrict to one project’s store only. Cross-store merge landed with the fix for PraisonAI #2655.

What shows up

Without --all or --project, the default listing surfaces:
  • Sessions created by praisonai run (project store) ✅
  • Sessions created by chat, gateway, TUI, API, or a bare Agent(session_id=...) (global default store) ✅ new
  • Sub-agent / forked child sessions still appear here, but --continue skips them in favour of the last root session.
Passing --project <id> stays project-scoped only; --all widens to every project.

Token / Cost columns

The Tokens and Cost columns show cumulative totals across all runs for each session. Totals are persisted in session-store metadata under usage and updated automatically by praisonai run / direct prompts whenever --session is set or a default project session is active. A - is rendered when no usage has been recorded yet. JSON output (--json):
See Cost Tracking for how per-session totals accumulate across runs. List sessions across all projects:
List sessions for a specific project:

Resume a Session

session resume restores chat history, model, and agent name from a previous session. History is preserved by default via compact retention — older turns are summarised and archived rather than dropped. See Session Persistence — Retention Policies.
Expected Output:
The Usage: line shows cumulative tokens and cost accumulated across all previous prompts in this session. If no usage has been recorded yet, the line is omitted.

Resume and continue with a prompt

State is rehydrated, then the prompt runs through the shared praisonai run --session <id> path. The resume panel is suppressed when a prompt is provided — the run pipeline emits the only top-level output.

Show transcript only (legacy view)

Use --transcript to inspect a session without restoring state. The panel title shows “Session Transcript”.

Cross-store lookup

session resume finds a session whether it was created via praisonai run --continue (project store) or via the gateway/TUI (global store). See Storage Backends.
When you pass a continuation prompt, the resume panel is suppressed — the run pipeline emits the only top-level output. To inspect a session without continuing, use --transcript or omit the prompt.

Cost & Token Tracking

PraisonAI accumulates input/output/cached tokens and dollar cost on every session run, so you can see exactly what a conversation has spent.

Quick Start

1

Run with a session

After the answer, the CLI prints a one-line footer:
2

Check cumulative usage

3

Continue — totals keep accumulating

Totals continue from where you left off — they do not reset.

What gets persisted

Each session stores a usage object in its metadata:
After each prompt run with an active session, the CLI prints:
Format: "{input:,} in / {output:,} out · ${cost:.4f}" — locale-formatted integers, 4-decimal cost. The footer is suppressed in --json mode but usage is still persisted.

Resume behaviour

Totals are rehydrated on --continue / --session <id> and keep accumulating — they do not reset. The resume panel shows a usage summary line:

How it works

Reading usage programmatically

Notes

Any failure (pricing lookup, persistence error, missing collector) leaves the session untouched. Usage accounting never breaks a run.
When a run uses more than one model, each model’s tokens are priced individually with get_pricing(model_name).
Provider-reported cached reads are accumulated in cached_tokens but excluded from cost — the provider already discounts them.

Show Session Details

Expected Output:

Delete a Session

Expected Output:

Help

Expected Output:

Token and Cost Tracking

Every session accumulates cumulative token usage and cost across all prompts, visible in session list and the resume panel. After each run, a single-line footer is printed:
The middle dot is U+00B7 (·). The footer reflects cumulative totals since session start, not just the last prompt. It is silently suppressed in JSON mode (--json / --output json) — there is no --no-usage flag. When you resume a session, the cumulative totals are rehydrated so subsequent prompts keep accumulating:

Working with praisonai run

The same project-scoped store powers --continue and --session on praisonai run. As of PR #1963, every surface restores history from and saves to this store: As of the fix for issue #2700, the actions-mode row is fully honoured for --auto-save, --session, --continue, and --fork. If you hit a TypeError about auto_save on an older praisonai-code build, upgrade and retry — see the run.mdx troubleshooting section. As of PR #2277, --session <id> and --continue now persist model and agent_name into session metadata so a later session resume reproduces the same configuration deterministically. For advanced programmatic use, the rehydrate_session helper in praisonai.cli.session returns a RehydratedSession with session_id, chat_history, model, agent_name, metadata, and found fields — see the SDK reference for details.
See Run for complete session continuity documentation.

Using Sessions with Prompts

Continue a Conversation

Expected Output (third message):

Session with Other Features

Use Cases

Project-Based Conversations

Learning Sessions

Code Review Sessions

Auto-Save Sessions

Automatically save sessions after each agent run using the --auto-save flag:

Python API

History in Context

Load conversation history from previous sessions into the current context:

Python API

Workflow Checkpoints

Save and resume workflow execution at any step:

Checkpoint Storage

Project-Scoped Sessions

Sessions are automatically scoped to your current project. PraisonAI detects your project by finding the git repository root, or uses the current working directory as a fallback. Project identification:
  • Project ID: First 8 characters of SHA256 hash of project root path
  • Git detection: Uses git rev-parse --show-toplevel with 5-second timeout
  • Fallback: Current working directory if not in a git repository
Storage structure:

Session Storage

Sessions are stored in a project-scoped layout when using the default behavior:
With project-scoped sessions, your sessions are organized by project automatically. Legacy sessions remain accessible via the --all flag:

Storage Backend Options

Store sessions in different backends for production deployments:
See Storage Backends for more details.

Concurrent Sessions

Multiple praisonai processes can safely share the same session — the CLI store reloads, merges, and writes under an exclusive lock so no messages are lost when the TUI, --interactive mode, and praisonai "…" --session all touch the same file.

Merge Strategy

When two writers race, the session store merges their changes:

Lost-Update Prevention

praisonai session show and praisonai session resume always reflect the latest on-disk state — the in-process cache is invalidated automatically when another process writes (mtime-based check). This concurrent-save safety was added in PR #1854. For the equivalent feature in the SDK-level store, see Multi-Process Safety.
This applies to the default file-backed session store. The sqlite / redis:// backends in the Storage Backend Options table above handle concurrency via the database itself; the CLI does not add its own merge layer there.

Cross-Platform Support

The praisonai session commands work on Windows, macOS, and Linux — file locking is automatic and platform-appropriate.
If you see this warning: File locking unavailable on this platform (fcntl not available); concurrent writers may corrupt session files.This means you’re running on an environment without native file locking. Restrict to a single process, or migrate to a DB-backed storage backend (link to the sqlite / redis options in the Storage Backend Options table above).
On Windows, sessions are stored under %USERPROFILE%\.praison\sessions\{session_id}.json following the OS convention via Path.home(). Cross-platform locking was added in PR #1837. Concurrent multi-process writes (e.g. TUI + praisonai --interactive sharing the same session directory) are preserved without message loss as of PR #1885 and PR #1892. For the SDK-level session store with the same cross-platform guarantees, see Session Persistence. Example usage across platforms:

Best Practices

Use descriptive session names that reflect the project or task for easy identification.
Long sessions accumulate tokens. Consider starting fresh sessions for unrelated topics.

Naming

Use descriptive names like project-auth-feature

Organization

Create separate sessions for different projects

Cleanup

Delete old sessions to free up storage

Context

Start new sessions when changing topics significantly

Run Command

Session flags and usage footer for praisonai run

Session Persistence

SDK-level session management

Cost Tracking

Per-session persistence and /cost slash command

Project Sessions

Persisted usage shape and project scoping