Skip to main content
PraisonAI uses two directories to organize data: a global directory in your home folder and a project-local directory in your working directory. All paths resolve through a single paths module and honor the PRAISONAI_HOME environment variable.

Directory Layout

Global — ~/.praisonai/

User-level configuration and state. Applies across all projects.
PathPurposeHelper
(root)Data rootget_data_dir()
sessions/Global sessionsget_sessions_dir()
skills/User skillsget_skills_dir()
plugins/User-installed pluginsget_plugins_dir()
mcp/MCP configget_mcp_dir()
mcp-auth.jsonMCP auth tokensget_mcp_auth_path()
docs/Documentation dataget_docs_dir()
rules/Guardrail rulesget_rules_dir()
permissions/Permission dataget_permissions_dir()
storage/Generic storageget_storage_dir()
storage.dbDefault SQLite DBget_storage_path()
schedules/Scheduler stateget_schedules_dir()
checkpoints/Checkpoint dataget_checkpoints_dir()
snapshots/Autonomy snapshotsget_snapshots_dir()
learn/Learning storesget_learn_dir()
cache/Disposable cacheget_cache_dir()
memory/Short/long-term DBsget_memory_dir()
workflows/Workflow dataget_workflows_dir()
summaries/RAG summariesget_summaries_dir()
prp/PRP outputget_prp_dir()
runs/Run artifactsget_runs_dir()

Project-Local — ./.praisonai/

Per-project data in your working directory. Add .praisonai/ to .gitignore.
PathPurposeHelper
(root)Project data rootget_project_data_dir()
sessions/Conversation sessionsget_project_sessions_dir()
knowledge/Knowledge base vectorsget_project_knowledge_dir()
summaries/RAG summariesget_project_summaries_dir()
prp/Context engineering outputget_project_prp_dir()

Customizing Storage Location

PRAISONAI_HOME Environment Variable

Override the global directory location:
# Redirect all global paths
export PRAISONAI_HOME=/custom/path
ScenarioSetting
DockerENV PRAISONAI_HOME=/app/data
Team shared configexport PRAISONAI_HOME=/shared/team/config
CI/CDPRAISONAI_HOME=/tmp/praisonai
Project-local paths (./.praisonai/) are always relative to the current working directory and are not affected by PRAISONAI_HOME.

Legacy Migration

If ~/.praison/ exists but ~/.praisonai/ doesn’t, PraisonAI uses the legacy path with a deprecation warning:
DeprecationWarning: Using legacy data directory ~/.praison/.
Run 'praisonai migrate-data' to migrate to ~/.praisonai/.

Python API

All paths resolve through the paths module:
from praisonaiagents.paths import (
    # Global paths — ~/.praisonai/
    get_data_dir,           # ~/.praisonai/
    get_rules_dir,          # ~/.praisonai/rules/
    get_schedules_dir,      # ~/.praisonai/schedules/
    get_snapshots_dir,      # ~/.praisonai/snapshots/
    get_storage_dir,        # ~/.praisonai/storage/
    get_storage_path,       # ~/.praisonai/storage.db
    get_memory_dir,         # ~/.praisonai/memory/
    get_mcp_auth_path,      # ~/.praisonai/mcp-auth.json
    get_plugins_dir,        # ~/.praisonai/plugins/
    get_cache_dir,          # ~/.praisonai/cache/
    
    # Project-local paths — ./.praisonai/
    get_project_data_dir,       # ./.praisonai/
    get_project_sessions_dir,   # ./.praisonai/sessions/
    get_project_knowledge_dir,  # ./.praisonai/knowledge/
    get_project_summaries_dir,  # ./.praisonai/summaries/
    get_project_prp_dir,        # ./.praisonai/prp/
    
    # Utilities
    ensure_dir,             # Create dir if missing
    get_all_paths,          # Dict of all path names → Path objects
)
If you’re building a plugin or extension, always use these helpers instead of hardcoding paths. They respect PRAISONAI_HOME and ensure consistent directory creation.

CLI

# Show all resolved paths with Rich table output
praisonai paths show

# Machine-readable output
praisonai paths show --json
Example output:
Global:  /Users/you/.praisonai/
Project: /Users/you/my-app/.praisonai/
Env:     PRAISONAI_HOME (not set)

Common Patterns

~/my-project/
├── main.py
└── .praisonai/          ← project data
    ├── sessions/
    └── knowledge/

~/.praisonai/            ← global config
├── config.yaml
└── mcp-auth.json