Skip to main content

Overview

The Tools Doctor command diagnoses tool availability, checks dependencies, and reports issues with your PraisonAI tools setup.

Python API

from praisonai.templates import ToolsDoctor

# Create doctor instance
doctor = ToolsDoctor()

# Run full diagnostics
result = doctor.diagnose()

# Check results
print(f"praisonai-tools installed: {result['praisonai_tools_installed']}")
print(f"Built-in tools: {len(result['builtin_tools'])}")
print(f"Issues found: {len(result['issues'])}")

# Get JSON output
json_output = doctor.diagnose_json()

# Get human-readable output
human_output = doctor.diagnose_human()
print(human_output)

Diagnostic Results

The diagnose() method returns a dictionary with:
KeyTypeDescription
praisonai_tools_installedboolWhether praisonai-tools package is installed
praisonaiagents_installedboolWhether praisonaiagents is installed
builtin_toolslistList of available built-in tool names
praisonai_tools_availablelistTools from praisonai-tools package
custom_tools_dirslistStatus of custom tool directories
tool_dependenciesdictOptional dependencies for known tools
issueslistDetected issues with severity and hints

Custom Tool Directories

The doctor checks these default directories for custom tools:
  • ~/.praison/tools (primary)
  • ~/.config/praison/tools (XDG-friendly)
# Check with additional custom directories
doctor = ToolsDoctor(custom_dirs=["./my-tools", "~/shared-tools"])
result = doctor.diagnose()

for dir_info in result["custom_tools_dirs"]:
    status = "✓" if dir_info["exists"] else "✗"
    print(f"{status} {dir_info['path']} ({dir_info['tool_count']} tools)")

Tool Dependencies

The doctor checks optional dependencies for known tools:
result = doctor.diagnose()

for tool, deps in result["tool_dependencies"].items():
    missing = [d["name"] for d in deps if not d["available"]]
    if missing:
        print(f"Tool '{tool}' missing: {', '.join(missing)}")

Issue Severity Levels

SeverityDescription
errorCritical issue preventing tool usage
warningNon-critical issue that may affect functionality
infoInformational message about optional features