Skip to main content
praisonai tools doctor uses the same ToolResolver source of truth as praisonai tools list — the counts and tool names you see are guaranteed to match what actually loads at agent run time.
# Run full diagnostics (human-readable output)
praisonai tools doctor

# Output diagnostics as JSON
praisonai tools doctor --json

# Example output (human-readable):
# ============================================================
# PraisonAI Tools Doctor
# ============================================================
#
# Core Packages:
#   ✓ praisonaiagents
#   ✓ praisonai-tools (optional)
#
# Built-in Tools (15):            ← resolver "builtin" bucket, sorted A-Z
#   • arxiv_search
#   • calculator
#   • internet_search
#   ... and 12 more
#
# praisonai-tools (8):            ← resolver "external" bucket, sorted A-Z
#   • csv_tool
#   • excel_tool
#   • pdf_tool
#   ... and 5 more
#
# Registered Tools (2):           ← resolver "registered" bucket (new)
#   • my_plugin_tool
#   • my_registered_fn
#
# Custom Tool Directories:
#   ✗ ~/.praison/tools
#   ✗ ~/.config/praison/tools
#
# ✓ No issues found
# ============================================================
Counts now match praisonai tools list. As of PR #2642, both commands read from ToolResolver.list_available_sources(). Previously the doctor and the list command walked different partial subsets of the tool chain, so their counts could disagree. They are now the same source of truth.A tool that resolves at run time is visible in both tools doctor and tools list. A tool that does not resolve is reported as missing in both.

Fallback mode

When ToolResolver cannot be imported (e.g. the praisonai wrapper package is not installed), the doctor falls back to a direct TOOL_MAPPINGS / praisonai_tools scan. In this mode:
  • Built-in and praisonai-tools counts are shown (unsorted, in dict-iteration order)
  • The Registered Tools section is not shown
  • The local bucket is not reflected
Install the praisonai wrapper package to get full resolver-backed output.