Files
pocketpaw/docs/api/configuration-reference.mdx
Rohit Kushwaha 6a6f91f2da feat(composio): v1 tool-provider integration (OSS-EE split layout)
Wires Composio — 200+ pre-built OAuth integrations (Gmail, Slack,
GitHub, Calendar, Drive, …) — into every supported chat backend.
Re-port of #1105 onto the post-split two-package layout.

Architecture (open-core safe):
- Feature module lives in pocketpaw-ee: ee/pocketpaw_ee/cloud/composio/.
- The OSS core never imports pocketpaw_ee — Composio is reached only
  through entry points:
    * claude_agent_sdk: an in-process MCP server via a new
      pocketpaw.mcp_servers provider (CloudComposioMcpProvider).
    * deep_agents / google_adk / openai_agents: native function tools
      via a new pocketpaw.composio_tools entry point, fetched per
      stream by tool_bridge.composio_tools_for().
- import-linter "OSS core may not import from EE" stays KEPT.

Behaviour:
- tool_bridge drops legacy gmail_*/calendar_*/drive_* tools when
  Composio is enabled, so the agent has one integration path per
  service.
- agent_service adds a runtime-identity rule + Composio auth/search
  prompt guidance, gated on composio_service.is_enabled().
- config.py gains composio_* settings; composio_api_key without
  composio_enterprise_id fails fast at Settings.load().

Deps: composio + 4 provider packages added to ee/pyproject.toml.

Supersedes #1105.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 07:15:13 +05:30

207 lines
13 KiB
Plaintext

---
title: Configuration Reference
description: "Complete reference of all PocketPaw configuration options: environment variables with POCKETPAW_ prefix, JSON config fields, channel tokens, API keys, tool profiles, and memory backend settings."
section: API Reference
ogType: article
keywords: ["configuration", "environment variables", "settings reference", "config options"]
tags: ["api", "configuration"]
---
# Configuration Reference
Complete reference of all configuration settings. All environment variables use the `POCKETPAW_` prefix.
## Core Settings
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `anthropic_api_key` | `POCKETPAW_ANTHROPIC_API_KEY` | string | — | Anthropic API key |
| `openai_api_key` | `POCKETPAW_OPENAI_API_KEY` | string | — | OpenAI API key |
| `agent_backend` | `POCKETPAW_AGENT_BACKEND` | enum | `claude_agent_sdk` | Agent backend (`claude_agent_sdk`, `openai_agents`, `google_adk`, `codex_cli`, `opencode`, `copilot_sdk`) |
| `claude_sdk_model` | `POCKETPAW_CLAUDE_SDK_MODEL` | string | `""` (auto) | Model override for Claude SDK (empty = let Claude Code decide) |
| `claude_sdk_max_turns` | `POCKETPAW_CLAUDE_SDK_MAX_TURNS` | integer | `25` | Max tool-use turns per query in Claude SDK |
| `smart_routing_enabled` | `POCKETPAW_SMART_ROUTING_ENABLED` | boolean | `false` | Smart model routing (disabled by default — conflicts with Claude Code) |
| `model_tier_simple` | `POCKETPAW_MODEL_TIER_SIMPLE` | string | `claude-haiku-4-5-20251001` | Model for simple tasks (when smart routing is on) |
| `model_tier_moderate` | `POCKETPAW_MODEL_TIER_MODERATE` | string | `claude-sonnet-4-5-20250929` | Model for moderate tasks (when smart routing is on) |
| `model_tier_complex` | `POCKETPAW_MODEL_TIER_COMPLEX` | string | `claude-opus-4-6` | Model for complex tasks (when smart routing is on) |
| `dashboard_host` | `POCKETPAW_DASHBOARD_HOST` | string | `0.0.0.0` | Dashboard bind address |
| `dashboard_port` | `POCKETPAW_DASHBOARD_PORT` | integer | `8000` | Dashboard port |
## LLM Provider
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `llm_provider` | `POCKETPAW_LLM_PROVIDER` | enum | `auto` | LLM provider (`auto`, `anthropic`, `openai`, `ollama`, `openai_compatible`, `openrouter`, `gemini`, `litellm`) |
| `ollama_host` | `POCKETPAW_OLLAMA_HOST` | string | `http://localhost:11434` | Ollama server URL |
| `ollama_model` | `POCKETPAW_OLLAMA_MODEL` | string | `llama3.2` | Ollama model name |
When `llm_provider` is `auto`, PocketPaw uses Anthropic if an API key is set, otherwise falls back to Ollama.
## OpenRouter
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `openrouter_api_key` | `POCKETPAW_OPENROUTER_API_KEY` | string | -- | OpenRouter API key (sk-or-v1-...) |
| `openrouter_model` | `POCKETPAW_OPENROUTER_MODEL` | string | `""` | Model slug (e.g., `anthropic/claude-sonnet-4-6`) |
## LiteLLM
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `litellm_api_base` | `POCKETPAW_LITELLM_API_BASE` | string | `http://localhost:4000` | LiteLLM proxy URL (leave empty for direct SDK mode) |
| `litellm_api_key` | `POCKETPAW_LITELLM_API_KEY` | string | -- | Proxy master key or target provider API key |
| `litellm_model` | `POCKETPAW_LITELLM_MODEL` | string | `""` | Model name (use LiteLLM-prefixed names in direct mode) |
| `litellm_max_tokens` | `POCKETPAW_LITELLM_MAX_TOKENS` | integer | `0` | Max output tokens (0 = provider default) |
## Tool Policy
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `tool_profile` | `POCKETPAW_TOOL_PROFILE` | enum | `full` | Tool profile (`minimal`, `coding`, `full`) |
| `tools_allow` | `POCKETPAW_TOOLS_ALLOW` | string[] | `[]` | Allowed tools (comma-separated list) |
| `tools_deny` | `POCKETPAW_TOOLS_DENY` | string[] | `[]` | Denied tools (comma-separated list) |
## Telegram
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `telegram_token` | `POCKETPAW_TELEGRAM_TOKEN` | string | — | Bot token |
| `allowed_telegram_ids` | `POCKETPAW_ALLOWED_TELEGRAM_IDS` | string[] | `[]` | Allowed user IDs (comma-separated) |
## Discord
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `discord_bot_token` | `POCKETPAW_DISCORD_BOT_TOKEN` | string | — | Bot token |
| `discord_allowed_guild_ids` | `POCKETPAW_DISCORD_ALLOWED_GUILD_IDS` | integer[] | `[]` | Allowed guilds (comma-separated IDs) |
| `discord_allowed_user_ids` | `POCKETPAW_DISCORD_ALLOWED_USER_IDS` | integer[] | `[]` | Allowed users (comma-separated IDs) |
## Slack
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `slack_bot_token` | `POCKETPAW_SLACK_BOT_TOKEN` | string | — | Bot token (xoxb-) |
| `slack_app_token` | `POCKETPAW_SLACK_APP_TOKEN` | string | — | App token (xapp-) |
| `slack_allowed_channel_ids` | `POCKETPAW_SLACK_ALLOWED_CHANNEL_IDS` | string[] | `[]` | Allowed channels (comma-separated IDs) |
## WhatsApp
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `whatsapp_mode` | `POCKETPAW_WHATSAPP_MODE` | enum | `""` (unset) | Mode (`personal`, `business`) |
| `whatsapp_access_token` | `POCKETPAW_WHATSAPP_ACCESS_TOKEN` | string | — | Business API token |
| `whatsapp_phone_number_id` | `POCKETPAW_WHATSAPP_PHONE_NUMBER_ID` | string | — | Phone number ID |
| `whatsapp_verify_token` | `POCKETPAW_WHATSAPP_VERIFY_TOKEN` | string | — | Webhook verify token |
| `whatsapp_allowed_phone_numbers` | `POCKETPAW_WHATSAPP_ALLOWED_PHONE_NUMBERS` | string[] | `[]` | Allowed numbers (comma-separated) |
| `whatsapp_neonize_db` | `POCKETPAW_WHATSAPP_NEONIZE_DB` | string | `~/.pocketpaw/neonize.db` | Neonize DB path |
## Signal
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `signal_api_url` | `POCKETPAW_SIGNAL_API_URL` | string | — | signal-cli REST API URL |
| `signal_phone_number` | `POCKETPAW_SIGNAL_PHONE_NUMBER` | string | — | Registered number |
| `signal_allowed_numbers` | `POCKETPAW_SIGNAL_ALLOWED_NUMBERS` | string[] | `[]` | Allowed numbers (comma-separated) |
## Matrix
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `matrix_homeserver` | `POCKETPAW_MATRIX_HOMESERVER` | string | — | Homeserver URL |
| `matrix_user_id` | `POCKETPAW_MATRIX_USER_ID` | string | — | Bot user ID |
| `matrix_access_token` | `POCKETPAW_MATRIX_ACCESS_TOKEN` | string | — | Auth token |
| `matrix_device_id` | `POCKETPAW_MATRIX_DEVICE_ID` | string | — | Device ID |
| `matrix_allowed_room_ids` | `POCKETPAW_MATRIX_ALLOWED_ROOM_IDS` | string[] | `[]` | Allowed rooms (comma-separated IDs) |
| `matrix_display_name` | `POCKETPAW_MATRIX_DISPLAY_NAME` | string | — | Display name |
## Microsoft Teams
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `teams_app_id` | `POCKETPAW_TEAMS_APP_ID` | string | — | Bot Framework App ID |
| `teams_app_password` | `POCKETPAW_TEAMS_APP_PASSWORD` | string | — | App password |
| `teams_tenant_id` | `POCKETPAW_TEAMS_TENANT_ID` | string | — | Azure tenant ID |
| `teams_allowed_team_ids` | `POCKETPAW_TEAMS_ALLOWED_TEAM_IDS` | string[] | `[]` | Allowed teams (comma-separated IDs) |
## Google Chat
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `gchat_project_id` | `POCKETPAW_GCHAT_PROJECT_ID` | string | — | GCP project ID |
| `gchat_service_account_key` | `POCKETPAW_GCHAT_SERVICE_ACCOUNT_KEY` | string | — | SA key path |
| `gchat_mode` | `POCKETPAW_GCHAT_MODE` | enum | `webhook` | Connection mode (`webhook`, `pubsub`) |
| `gchat_subscription` | `POCKETPAW_GCHAT_SUBSCRIPTION` | string | — | Pub/Sub subscription |
| `gchat_allowed_space_ids` | `POCKETPAW_GCHAT_ALLOWED_SPACE_IDS` | string[] | `[]` | Allowed spaces (comma-separated IDs) |
## Web Search
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `web_search_provider` | `POCKETPAW_WEB_SEARCH_PROVIDER` | enum | `tavily` | Search provider (`tavily`, `brave`) |
| `tavily_api_key` | `POCKETPAW_TAVILY_API_KEY` | string | — | Tavily API key |
| `brave_search_api_key` | `POCKETPAW_BRAVE_SEARCH_API_KEY` | string | — | Brave Search key |
## Image Generation
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `google_api_key` | `POCKETPAW_GOOGLE_API_KEY` | string | — | Google AI API key |
| `image_model` | `POCKETPAW_IMAGE_MODEL` | string | `gemini-2.0-flash` | Model |
## Voice & STT
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `tts_provider` | `POCKETPAW_TTS_PROVIDER` | enum | `openai` | TTS provider (`openai`, `elevenlabs`, `sarvam`) |
| `tts_voice` | `POCKETPAW_TTS_VOICE` | string | `alloy` | Voice ID |
| `elevenlabs_api_key` | `POCKETPAW_ELEVENLABS_API_KEY` | string | — | ElevenLabs key |
| `stt_model` | `POCKETPAW_STT_MODEL` | string | `whisper-1` | STT model |
## Google Integration
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `google_client_id` | `POCKETPAW_GOOGLE_CLIENT_ID` | string | — | OAuth client ID |
| `google_client_secret` | `POCKETPAW_GOOGLE_CLIENT_SECRET` | string | — | OAuth secret |
## Spotify
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `spotify_client_id` | `POCKETPAW_SPOTIFY_CLIENT_ID` | string | — | Spotify client ID |
| `spotify_client_secret` | `POCKETPAW_SPOTIFY_CLIENT_SECRET` | string | — | Spotify secret |
## Composio
Wires Composio into every supported chat backend (`claude_agent_sdk`, `openai_agents`, `google_adk`, `deep_agents`) so any agent can call 200+ pre-built OAuth integrations (Gmail, Slack, GitHub, Calendar, Drive, Linear, …). Each backend uses its official Composio provider package (`composio_claude_agent_sdk`, `composio_openai_agents`, `composio_google_adk`, `composio_langgraph`). Tools are fetched per-stream via `composio.create(user_id=…)` + `session.tools()` so every user gets their own tool surface bound to their own connected accounts.
Setup: set `composio_api_key` + `composio_enterprise_id` and you're done. No admin provisioning step.
The pocket specialist does NOT receive Composio — its tool surface stays narrow. When pocket UI needs Composio data, the parent agent fetches it first and passes it into the specialist brief.
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `composio_api_key` | `POCKETPAW_COMPOSIO_API_KEY` | string | — | Composio API key (enables Composio for all supported backends) |
| `composio_enterprise_id` | `POCKETPAW_COMPOSIO_ENTERPRISE_ID` | string | — | Namespace prefix for per-user `user_id` (format: `f"{enterprise_id}:{user_id}"`). Required when `composio_api_key` is set; prevents collisions across deployments sharing one Composio org. |
| `composio_toolkits` | `POCKETPAW_COMPOSIO_TOOLKITS` | list (CSV) | `[]` | Informational. Used by the Connectors panel + admin helpers; not a runtime allow-list. |
| `composio_base_url` | `POCKETPAW_COMPOSIO_BASE_URL` | string | — | Composio base URL. Unset = Composio cloud; set for self-hosted Composio runtime. |
| `composio_mcp_url_ttl_seconds` | `POCKETPAW_COMPOSIO_MCP_URL_TTL_SECONDS` | int | `3600` | In-process cache TTL for per-user Composio tool sets before re-fetching via `composio.create`. |
| `composio_connect_link_inline` | `POCKETPAW_COMPOSIO_CONNECT_LINK_INLINE` | boolean | `true` | When true, "needs auth" responses render as an inline Ripple button. Set false to fall back to raw URL text. |
## MCP
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `mcp_client_metadata_url` | `POCKETPAW_MCP_CLIENT_METADATA_URL` | string | — | CIMD URL for MCP OAuth (for servers without dynamic client registration) |
## Memory (Mem0)
| Setting | Env Variable | Type | Default | Description |
|---------|-------------|------|---------|-------------|
| `mem0_auto_learn` | `POCKETPAW_MEM0_AUTO_LEARN` | boolean | `false` | Enable auto-learn |
| `mem0_llm_provider` | `POCKETPAW_MEM0_LLM_PROVIDER` | enum | `anthropic` | LLM provider (`anthropic`, `openai`, `ollama`) |
| `mem0_llm_model` | `POCKETPAW_MEM0_LLM_MODEL` | string | `claude-haiku-4-5-20251001` | LLM model |
| `mem0_embedder_provider` | `POCKETPAW_MEM0_EMBEDDER_PROVIDER` | enum | `openai` | Embedder provider (`openai`, `ollama`, `huggingface`) |
| `mem0_embedder_model` | `POCKETPAW_MEM0_EMBEDDER_MODEL` | string | `text-embedding-3-small` | Embedder model |
| `mem0_vector_store` | `POCKETPAW_MEM0_VECTOR_STORE` | enum | `qdrant` | Vector store (`qdrant`, `chroma`) |