Agent(...), run praisonai doctor --live to make sure your keys and dependencies are in order. The praisonai doctor command provides comprehensive health checks and diagnostics for your PraisonAI installation, configuration, and environment.
Quick Start
Full Setup Report
Runningpraisonai doctor with no subcommand runs the full multi-category setup report — the recommended first-run and troubleshooting path.
When the report contains warnings or failures,
praisonai doctor prints a numbered “Next steps:” section listing the recommended remediation for each issue. Hidden when no issues exist, and suppressed under --quiet.Requires text output — combine with --json in CI so machines get the structured report and humans get the guidance interactively.All existing subcommands (
env, mcp, runtime, etc.) are unchanged, and the --json full-report schema (version, results, summary) is unchanged. Existing CI scripts will not break.Subcommands
Global Flags
Exit Codes
Root Command
CI Mode
Full Setup Report
Runningpraisonai doctor without a subcommand runs a comprehensive report combining environment, config, tools, and provider checks for first-run and operator troubleshooting.
The “Next steps:” footer is only shown when there are warnings or failures, and is suppressed by
--quiet.doctor fix Auto-Remediation
praisonai doctor fix runs safe auto-remediation for common setup issues.
Phase-1 scope: migrate deprecated
cli_backend YAML configuration to the new models.default.runtime format.
Examples
Environment Checks
Optional Dependencies (deep mode)
--deep enables the optional_deps check, which probes eight optional packages on daemon threads and reports each as available, missing, broken, or slow. A broken package (installed but failing to import) surfaces as WARN with a remediation message; missing and slow packages do not fail the check.
See Optional Dependencies Check for the four-bucket table, per-package timeout formula, and CI gating examples.
Configuration Validation
Database Checks
MCP Server Checks
Skills Diagnostics
Performance Analysis
Self-Test
Runtime Preflight
Validate multi-agent team YAML for runtime compatibility beforeAgentTeam.start(). No LLM calls or API keys required. See Runtime Preflight for the capability matrix and check IDs.
Runtime Migration
Detect and migrate legacycli_backend fields to the new models.default.runtime format. See Runtime Config Migration for full details.
Auto-Remediation (doctor fix)
praisonai doctor fix runs safe auto-remediation for common setup issues — dry-run by default, no changes without --execute.
Phase-1 scope: migrating deprecated cli_backend YAML configuration. This does not yet fix all possible issues.
- Dry-run by default;
--executeapplies changes. - A
.bakbackup is created on--executeunless--no-backup. --file/-ftargets a specific YAML; otherwise searches cwd.--quiet/-qsuppresses non-essential output.
praisonai doctor fix and praisonai doctor runtime --fix share the same underlying migration logic (_run_fix_mode) but expose different flag shapes and backup formats:doctor fix—--dry-run/--executetoggle ·.bakbackup filedoctor runtime --fix—--fix+--execute·<stem>.backup.<YYYYMMDD_HHMMSS>.yamlbackup
doctor fix for new usage; runtime --fix remains supported.cli_backend→runtime mapping that fix currently automates.
Docker Checks
LLM Provider Checks
Memory Store Checks
Metadata Store Checks
CI Integration
Filtering Checks
Status Symbols
The text formatter automatically picks symbols that match your terminal encoding.Detection runs once when the formatter starts. UTF-8 terminals always
use the Unicode symbols. Anything else (Windows default consoles,
legacy
cp1252/cp437, etc.) automatically falls back to ASCII so
praisonai doctor never crashes with UnicodeEncodeError.--json for machine-readable output that does not depend on terminal encoding.
JSON Output Format
Optional Dependencies
praisonai doctor probes optional packages in parallel on daemon threads, one per package, with a per-package timeout.
Packages probed:
chromadb— Knowledge/RAG featurescrawl4ai— Web crawlingduckduckgo_search— Web searchpraisonaiagents— Core agentslitellm— LLM providersopenai— OpenAI provideranthropic— Anthropic providermem0— Memory features
When any package is
broken, the check reports WARN with the remediation message:
Reinstall the broken optional package(s): {names}
Daemon threads (rather than a ThreadPoolExecutor) are used deliberately: a pool’s worker threads are joined by its internal atexit handler at interpreter shutdown even after
shutdown(wait=False), so a truly hanging import would still stall CLI exit. Daemon threads are abandoned on exit, so a hanging import can never block the process from terminating.Check Categories
On a standalone
pip install praisonai-code install (no praisonai wrapper), several check families skip with the reason “Install full wrapper: pip install praisonai” instead of failing — so praisonai-code doctor returns exit 0 when core checks pass (PR #2851, fixes #2838).Skipped IDs on standalone:performance_praisonai_import(Performance)acp_module(Tools / ACP)praisonai_package_structure·console_script_execution(Packaging)- Existing family-level skips:
runtime,bots,gateway,serve,acp,config_wrapper
python_module_execution check does not skip — it retargets to python -m praisonai_code --version on standalone (and stays on python -m praisonai --version when the wrapper is installed).Install praisonai to run every check, or hide the skipped families with --skip runtime,bots,gateway,serve,acp,config_wrapper,performance_praisonai_import,acp_module,praisonai_package_structure,console_script_execution.Environment (env)
- Python version validation
- Package installation checks
- API key configuration
- OS and architecture info
- Virtual environment detection
- Binary availability (git, docker, npx)
- Optional dependencies deep probe (
--deep) — runs concurrently with a per-package timeout; slow imports are reported asslow/skippedinstead of blocking the full check.
praisonai doctor env --deep probes 8 optional packages in parallel with a per-package timeout (roughly timeout/4, minimum 1s, maximum 3s). Any package that stalls is reported as slow/skipped in the message and metadata.slow: true in JSON — the overall check still completes within the --timeout budget.Configuration (config)
- agents.yaml existence and syntax — the
framework:field is validated against the adapter registry, so any installed adapter (built-in or third-party entry-point plugin) passes the check - workflow.yaml validation
- .praison config directory
- .env file detection
Tools (tools)
- Tool registry access
- Web search tools
- File operation tools
- Code execution tools
- API key requirements
Database (db)
- Driver availability (PostgreSQL, SQLite, Redis, MongoDB)
- ChromaDB for RAG
- Connection testing (deep mode)
MCP (mcp)
- Configuration file validation
- npx availability
- Python MCP package
- Server configuration validation
- Server spawn testing (deep mode)
Observability (obs)
- Langfuse configuration
- LangSmith configuration
- AgentOps configuration
- PraisonAI telemetry
Skills (skills)
- Skills directory discovery
- SKILL.md validation
- PraisonAI skills module
- Capability requirements (active/degraded/unavailable counts, enforcement level)
Memory (memory)
- Memory directories
- JSON file integrity
- Session storage
- ChromaDB vector memory
Permissions (permissions)
- ~/.praison directory
- Project .praison directory
- Temp directory
- Current working directory
- Config directory
Network (network)
- DNS resolution (deep mode)
- HTTPS connectivity (deep mode)
- Proxy configuration
- SSL/TLS settings
- OpenAI base URL
Performance (performance)
- Package import times
- Slow import detection (deep mode)
- Loaded module count
performance_praisonai_import skips with reason “Install full wrapper: pip install praisonai” when pip install praisonai-code is used without the praisonai wrapper (PR #2851).
Packaging (packaging)
praisonai_package_structure— validates thepraisonaiwrapper’s__main__.pyentry pointconsole_script_execution— runspraisonai --versionpython_module_execution— runspython -m {praisonai|praisonai_code} --version(retargets on standalone)
praisonai_package_structure and console_script_execution skip with reason “Install full wrapper: pip install praisonai” when pip install praisonai-code is used without the praisonai wrapper (PR #2851). python_module_execution does not skip — it retargets to python -m praisonai_code --version on standalone.
Self-Test (selftest)
- Agent import
- Agent instantiation
- LLM configuration
- Mock/live chat testing
- Tools wiring
Runtime (runtime)
- Team YAML runtime compatibility (
--team) - Handoff and capability validation across agents
- Mixed-runtime warnings
- Legacy
cli_backendmigration (--fix,--execute) — also reachable via top-levelpraisonai doctor fix - Workflow YAML placeholder (
--workflow— returns SKIP)
pip install praisonai-code is used without the praisonai wrapper.
Serve & Endpoints (serve)
- Serve module availability
- Endpoints module availability
- Endpoints CLI handler
- Server connectivity (deep mode)
- Discovery endpoint (deep mode)
- A2U module availability
- Provider adapters availability
- FastAPI availability
- Uvicorn availability
pip install praisonai-code is used without the praisonai wrapper.
Bots (bots)
- Bot token environment variables (
bot_tokens) - Bot.yaml configuration file validation (
bot_config) † - Bot security configuration checks (
bot_security) † - Multi-channel token configuration validation (
multi_channel_tokens) † — MEDIUM - Gateway config validation (
gateway_config_validation) † — HIGH - Gateway security settings (
gateway_security) † — HIGH - Gateway config migration (
gateway_config_migration) † — MEDIUM - Gateway environment variables (
gateway_env_substitution) — MEDIUM
"Install full wrapper: pip install praisonai" when pip install praisonai-code is used without the praisonai wrapper.
† Skips when the optional
praisonai-bot package is missing. On CLI-only installs (pip install praisonai without the bot extra), these six checks report:bot_tokens and gateway_env_substitution still run — they don’t need the bot schema. See Installation Extras for the full list of optional extras.ACP
acp_module— ACP module import (praisonai.acp)- ACP server reachability
- ACP protocol handshake validation
- Agent Client Protocol configuration
pip install praisonai-code is used without the praisonai wrapper.
Multi-Channel Token Check Details
Themulti_channel_tokens check validates your multi-channel bot setup:
Category: BOTSSeverity: MEDIUM PASS Conditions:
- Each channel uses a unique environment variable
- Each environment variable resolves to a unique token value
- Follows
PLATFORM_<ROLE>_BOT_TOKENnaming convention
- Environment variable doesn’t follow naming convention
- Environment variable is unset but referenced in config
- Two channels point to the same environment variable
- Two environment variables resolve to the same token value
bot.yamlmissing → check is skipped
- “Each channel must have a unique bot token. Create separate bots in @BotFather and use unique environment variables.”
- “Consider following the naming convention PLATFORM_ROLE_BOT_TOKEN for clarity.”

