Skip to main content
Drive external AI CLIs from a PraisonAI agent — Claude Code is the flagship integration.
The user asks in chat; the agent invokes Claude Code or another external CLI through the integration tool.

Quick Start

1

Attach Claude Code as an agent tool

2

One-shot call via the integration API

3

Continue a previous Claude Code session

4

Stream events live

5

Per-call output format


How It Works

The integration builds CLI arguments dynamically per call, with no instance state mutated during execution.

Stateless Session Management

reset_session() is a deprecated no-op as of PraisonAI PR #1466. Remove it from your code. Session continuation is now explicit via continue_session=True.
Because state is no longer shared on the instance, a single ClaudeCodeIntegration is safe to call concurrently from multiple tasks / threads.
Before (stateful):
After (stateless):

CLI: Manager Delegation (Default)

PraisonAI CLI offers two execution modes for external agents, providing flexibility between automated reasoning and direct execution. Usage Examples:

Configuration Options


Registry

The ExternalAgentRegistry manages all available CLI integrations with a thread-safe registry pattern with lazy module-level default. You can construct your own ExternalAgentRegistry() for test isolation or multi-tenant runs:
As of PraisonAI PR #1849, ExternalAgentRegistry.create() raises ValueError for unknown integrations (parent registry contract). Use try_create() for the previous “return None on failure” behaviour. The module-level helper create_integration(name, **kwargs) already calls try_create() under the hood and still returns None on failure — no migration needed for code that uses it.
The existing helpers get_registry(), register_integration(), create_integration(), and get_available_integrations() are still exported and still work — they now delegate to get_default_registry(). Backward-compat code does not need to change.

Invalidating the availability cache

BaseCLIIntegration caches the result of shutil.which(cli_command) for each CLI. If a CLI is installed/uninstalled mid-run (e.g. in tests, or after a setup step), invalidate the cache:
The cache is thread-safe; invalidation is also thread-safe.

Prerequisites

The claude CLI must be available on PATH or the Claude Code SDK must be installed if use_sdk=True. The integration performs a cached, thread-safe shutil.which(...) check via is_available().

Decision Flow


Best Practices

Don’t rely on instance state for session continuation. Always be explicit about when you want to continue a previous session.
Do not mutate the integration.output_format attribute between calls. Use the per-call parameter or set it once during initialization.
The reset_session() method is now a no-op. Remove these calls from your code as they serve no purpose.
A single ClaudeCodeIntegration instance can be shared across concurrent tasks safely since no instance state is mutated during calls.

Using from PraisonAI UI

You can also enable external CLI integrations directly from the PraisonAI user interface without writing code. All PraisonAI UI entry points include toggles for external agents when the corresponding CLIs are installed. See External Agents in UI for complete documentation.

Persistence & Concurrency

Learn about thread-safe persistence features

Agent Tools

Using integrations as agent tools