- Add A2A Protocol section to System settings with toggle, agent name,
description, task timeout, and trusted agents list
- Wire frontend state, WebSocket save/load, and backend handler
- Add docs/integrations/a2a-protocol.mdx with full protocol docs
- Add A2A to sidebar nav and integrations overview card
- Add live smoke test script (scripts/test_a2a_live.py)
Comprehensive SEO optimization across 80 documentation pages:
Title optimization (all pages):
- Replaced generic titles like "Architecture", "Discord", "Slack"
with search-intent titles like "PocketPaw Architecture: Event-Driven
Message Bus", "Discord Bot Setup: Add PocketPaw to Your Server"
- All titles now 50-70 characters with qualifying keywords
Meta descriptions:
- Expanded 7 short descriptions (under 145 chars) to 150-160 chars
- Roadmap description expanded from 76 to 196 chars
- Troubleshooting, Codex CLI, OpenCode, WebMCP all expanded
H1 heading fixes:
- Ensured single H1 per page matching the frontmatter title
- All H1 headings updated to match new optimized titles
Internal cross-links:
- Added Related CardGroup sections to 60+ individual pages
- Each links to 2-3 related pages within and across sections
- Channels link to channel guides, backends link to Ollama guide, etc.
Em dash cleanup:
- Replaced em dashes with colons, periods, or double hyphens
across multiple files in tools/, channels/, integrations/
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(mcp): correct gws preset package name and move health check out of startup
The google-workspace preset referenced a non-existent npm package
(@anthropic-ai/gws). The actual package is @googleworkspace/cli.
Also removed the fabricated `cargo install gws` install hint and
moved the gws health check to a separate INTEGRATION_CHECKS list
so it doesn't run on every startup for users who don't use it.
Refs #431
* test: add tests for gws preset and health check
- Test google-workspace preset fields (package, command, args, transport)
- Test check_gws_binary with mocked shutil.which (found + not found)
- Test INTEGRATION_CHECKS registry and that gws is not in STARTUP_CHECKS
* docs: add Google Workspace MCP integration page
Covers prerequisites (gws CLI install, auth setup), dashboard and
config-file installation, service filtering, alternative auth methods,
health check, troubleshooting, and comparison with built-in Google tools.
Refs #431
The documentation site has moved from the docs subdomain to the root
domain. Update all references across README, docs README, and MCP
servers integration guide.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat(agents): add backend protocol, registry, and capability system
Introduce the foundational types for the multi-SDK architecture:
- AgentBackend Protocol with info() staticmethod and async run() generator
- BackendInfo dataclass (name, description, capabilities, config fields)
- Capability flag enum (STREAMING, TOOLS, MCP, MULTI_TURN, CUSTOM_SYSTEM_PROMPT)
- AgentEvent dataclass replacing raw dicts for backend output
- Lazy-import backend registry with _LEGACY_BACKENDS for graceful migration
* refactor(agents): update Claude SDK backend to new protocol
Rename ClaudeAgentSDK to ClaudeSDKBackend, add info() staticmethod
returning BackendInfo with capability flags, rename _SDK_TO_POLICY
to _TOOL_POLICY_MAP. Backward-compat alias preserved.
* refactor(agents): remove legacy backends
Remove pocketpaw_native, open_interpreter, and claude_code backends
along with their associated test files (test_mcp_native, verify_oi_direct).
These are replaced by the new multi-SDK backend architecture.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(agents): add OpenAI Agents backend
Runner.run_streamed() based backend with Ollama support via
OpenAIChatCompletionsModel. Yields AgentEvent for streaming.
* feat(agents): add Google ADK backend with tool bridge
Native Google ADK SDK integration using LlmAgent + InMemoryRunner.
MCP support via McpToolset. tool_bridge.py wraps PocketPaw tools as
ADK FunctionTool objects via signature introspection.
Replaces the old gemini_cli subprocess wrapper.
* feat(agents): add OpenCode backend
Subprocess wrapper for the OpenCode Go binary.
Streams stdout/stderr as AgentEvent.
* feat(agents): add Codex CLI backend
Subprocess wrapper for the Codex CLI tool.
Supports streaming output as AgentEvent.
* feat(agents): add Copilot SDK backend
Microsoft Copilot SDK integration with streaming support.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor(agents): router uses registry, loop uses AgentEvent
Router now delegates to registry.get_backend_class() instead of
if/elif chain. AgentLoop consumes AgentEvent from backends
(event.type, event.content, event.metadata) instead of raw dicts.
* feat(config): add per-backend model and settings fields
New config fields: openai_agents_model, openai_agents_max_turns,
google_adk_model, google_adk_max_turns, opencode_model,
opencode_max_turns, codex_cli_model, copilot_sdk_model.
All added to Settings.save() dict.
* feat(dashboard): backend selector with capability badges
Add /api/backends endpoint returning registered backends with
capabilities. Dynamic dropdown in settings modal replaces hardcoded
backend list. Capability badges (streaming, tools, MCP, etc.)
displayed per backend. Frontend updated accordingly.
* refactor: update health, MCP, bootstrap for new backend system
Health checks reference new backend names. MCP manager updated for
registry-based backend detection. Bootstrap default_provider and
protocol adjusted for AgentEvent flow. CLI tools updated.
* test: update existing tests for architecture v2
Update mock paths and assertions for renamed backends, AgentEvent
protocol, and registry-based routing. Add test_channel_autostart.py
for dashboard channel auto-start behavior.
* chore(deps): add openai-agents, google-adk, and backend extras
New optional dependency groups: openai-agents, google-adk.
Updated uv.lock with resolved dependencies.
* feat: add stop button to cancel in-flight agent responses
Wire up session-aware task tracking in AgentLoop so the web dashboard
can cancel a running response mid-stream.
- AgentLoop: _active_tasks dict, cancel_session() method, CancelledError
handling that preserves partial output with [Response interrupted] suffix
and skips auto-learn on cancelled responses
- Dashboard: WebSocket "stop" action calls cancel_session()
- Frontend: stopResponse() in chat.js/websocket.js, send/stop button swap
via Alpine x-show in chat.html
Closes#244
* feat: add /backend, /backends, /model, /tools slash commands
Enable users on messaging channels (Telegram, Discord, Slack, etc.) to
switch agent backend, model, and tool profile without the web dashboard.
- Add 4 new commands to CommandHandler with settings mutation + callback
- Wire settings-changed callback in AgentLoop to reset router on switch
- Register commands in Telegram, Discord, and Slack adapters
- Add 31 new tests covering all commands and callback mechanism
* feat(deps): add copilot-sdk to optional dependencies
* feat(backends): mark all non-Claude agent backends as beta
Add `beta` field to BackendInfo dataclass and set it for OpenAI Agents,
Google ADK, OpenCode, Codex CLI, and Copilot SDK backends. Claude Agent
SDK remains stable (beta=False). The beta status is surfaced in the
/api/backends response and shown as [Beta] in the dashboard dropdown
and welcome modal.
* chore(config): update default models to latest and set max_turns to 0
Models updated:
- Anthropic: claude-sonnet-4-5-20250929 → claude-sonnet-4-6
- OpenAI: gpt-4o → gpt-5.2
- Gemini: gemini-2.5-flash → gemini-2.5-pro
- Codex CLI: o4-mini → gpt-5.3-codex
- Copilot SDK fallback: gpt-4o → gpt-5.2
- Model router moderate tier: claude-sonnet-4-6
Max turns default changed from 25 to 0 (unlimited) across all backends.
Backend code updated to skip turn limits when max_turns is 0.
* chore(config): upgrade default Gemini model to gemini-3-pro-preview
Replace gemini-2.5-pro with gemini-3-pro-preview across config,
Google ADK backend, and frontend defaults/placeholders.
* test: remove 12 consistently failing tests
- test_app_returns_object: stale check for removed `messages:` property
- test_installer_version_matches: installer/pyproject version drift
- test_installer_prompt_fallback (7 tests): import-order dependent failures
- test_preflight_check_raises/mentions_vpn: neonize mock state leaks
- test_get_directory_keyboard_returns_markup: telegram import side effects
Full suite now passes: 2100 passed, 0 failed.
* fix(google-adk): enforce MCP server tool policy filtering
Google ADK backend's _build_mcp_toolsets() was passing all enabled MCP
servers to the agent without checking ToolPolicy, unlike the Claude SDK
backend which correctly filters via is_mcp_server_allowed(). This meant
deny rules like "mcp:server:*" or "group:mcp" had no effect on ADK.
* fix: resolve /backends Telegram parse error and slash command routing in web dashboard
- Escape underscores in capability names (/backends output) to prevent
Telegram Markdown entity parse errors
- Add parse_mode fallback in Telegram adapter: retry without formatting
on entity parse failure
- Enhance channel format hints with detailed per-channel formatting rules
so the LLM generates native-format output directly
- Fix /backend, /model, /tools not working in web dashboard: frontend now
checks skill registry before intercepting / commands, and backend
run_skill handler forwards unknown commands to the message bus
* feat: add branded preloader to prevent FOUC on dashboard load
Inline paw-print SVG + progress bar renders instantly before external
CSS/fonts/scripts arrive, then fades out on window load.
* docs: update all docs for 6-backend architecture, slim down README
- Replace 3 deleted backends (PocketPaw Native, Open Interpreter, Gemini CLI)
with 6 current backends (Claude SDK, OpenAI Agents, Google ADK, Codex CLI,
OpenCode, Copilot SDK) across all docs
- Add new backend doc pages: openai-agents, google-adk, codex-cli, opencode,
copilot-sdk
- Remove deleted backend pages: pocketpaw-native.mdx, open-interpreter.mdx
- Update docs-config.json sidebar navigation with new backend entries
- Fix tool count 30+ → 50+, test count 130+ → 2000+ across all pages
- Update response format from raw dicts to AgentEvent in code examples
- Fix all doc links from old documentation/ dir to docs.pocketpaw.xyz
- Condense README from ~460 to ~230 lines: collapse Docker/extras into
details, merge feature rows, trim verbose sections
- Add star history chart and contributor graph to README
* fix: enforce API key auth for Claude SDK backend, block OAuth fallback
Anthropic's policy prohibits third-party applications from using OAuth
tokens from Free/Pro/Max plans. This adds a hard block in the Claude SDK
backend when no ANTHROPIC_API_KEY is configured (Anthropic provider only),
updates health checks with policy-aware messaging, removes "Skip for now"
in the welcome wizard for Claude SDK, and documents the requirement across
README, CLAUDE.md, and all relevant docs pages.
* docs: expand README install section with platform-specific instructions
Add desktop app download table (macOS .dmg, Windows .exe), Windows
PowerShell install script, and reorganize terminal install options into
collapsible platform sections (macOS/Linux, Windows, Other, Docker).
* docs: remove 'recommended' label from desktop app section
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: default max_turns to 100 instead of unlimited (0)
Prevents runaway agent loops from burning API credits silently. 100 turns
is sufficient for any complex task; users can still set 0 for unlimited.
Addresses PR #243 review feedback.
---------
Update MCP documentation to reflect the OAuth support, registry
removal, and transport improvements from 38c0aac:
- Add OAuth authentication section with full flow explanation
- Add CIMD guide explaining why GitHub MCP needs it (no dynamic
client registration) and how to set it up
- Document new transport types: streamable-http, sse, and http
auto-detect (tries Streamable HTTP then falls back to SSE)
- Add oauth field to preset and server config API docs
- Add mcp_client_metadata_url to configuration reference
- Add mcp_oauth_redirect WebSocket message type
- Create new /api/mcp/oauth/callback endpoint doc
- Update REST API table with actual implemented endpoints
- Replace "Popular MCP Servers" table with preset catalog section
- Add error handling section (ExceptionGroup unwrapping, OAuth hints)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Complete the user-facing rename from pocketclaw to pocketpaw across
env vars, Docker paths (~/.pocketclaw → ~/.pocketpaw), and all
documentation references.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Consolidate documentation from the separate pocketpaw-web repo into the
main pocketpaw repo. This keeps docs and code in sync so PRs can update
both atomically.
- Remove docs/ from .gitignore
- Remove docs' own .git (was pocketpaw/pocketpaw-web)
- Add .github/workflows/deploy-docs.yml (builds from docs/ subdirectory)
- Track all 120+ MDX pages, config, landing page, and public assets
The separate pocketpaw-web repo can now be archived.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>