Metadata-Version: 2.4
Name: pocketpaw
Version: 0.4.3
Summary: The AI agent that runs on your laptop, not a datacenter. OpenClaw alternative with one-command install.
Project-URL: Homepage, https://github.com/pocketpaw/pocketpaw
Project-URL: Repository, https://github.com/pocketpaw/pocketpaw
Project-URL: Issues, https://github.com/pocketpaw/pocketpaw/issues
Project-URL: Documentation, https://github.com/pocketpaw/pocketpaw#readme
Project-URL: Twitter, https://twitter.com/PocketPawAI
Author-email: PocketPaw Team <hello@pocketpaw.ai>
License-Expression: MIT
License-File: LICENSE
Keywords: agent,ai,anthropic,assistant,automation,browser,llm,local-first,ollama,openai,privacy,self-hosted,telegram
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: OS Independent
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Home Automation
Classifier: Topic :: Internet :: WWW/HTTP :: Browsers
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: anthropic>=0.45.0
Requires-Dist: apscheduler>=3.10.0
Requires-Dist: claude-agent-sdk>=0.1.30
Requires-Dist: cryptography>=42.0
Requires-Dist: fastapi>=0.115.0
Requires-Dist: httpx>=0.26.0
Requires-Dist: jinja2>=3.1.0
Requires-Dist: openai>=1.60.0
Requires-Dist: pillow>=10.0.0
Requires-Dist: pydantic-settings>=2.1.0
Requires-Dist: pydantic>=2.10.0
Requires-Dist: python-dateutil>=2.8.0
Requires-Dist: python-multipart>=0.0.22
Requires-Dist: qrcode[pil]>=7.4
Requires-Dist: rich>=13.0.0
Requires-Dist: uvicorn[standard]>=0.31.1
Provides-Extra: all
Requires-Dist: botbuilder-core>=4.16.0; extra == 'all'
Requires-Dist: botbuilder-integration-aiohttp>=4.16.0; extra == 'all'
Requires-Dist: discord-py>=2.3.0; extra == 'all'
Requires-Dist: elevenlabs>=1.0.0; extra == 'all'
Requires-Dist: github-copilot-sdk>=0.1.0; extra == 'all'
Requires-Dist: google-adk>=1.0.0; extra == 'all'
Requires-Dist: google-api-python-client>=2.100.0; extra == 'all'
Requires-Dist: google-auth>=2.25.0; extra == 'all'
Requires-Dist: google-genai>=1.0.0; extra == 'all'
Requires-Dist: html2text>=2020.1.16; extra == 'all'
Requires-Dist: matrix-nio>=0.24.0; extra == 'all'
Requires-Dist: mcp>=1.0.0; extra == 'all'
Requires-Dist: mem0ai>=0.1.115; extra == 'all'
Requires-Dist: neonize>=0.3.0; extra == 'all'
Requires-Dist: ollama>=0.6.1; extra == 'all'
Requires-Dist: openai-agents>=0.2.0; extra == 'all'
Requires-Dist: playwright>=1.50.0; extra == 'all'
Requires-Dist: psutil>=5.9.0; extra == 'all'
Requires-Dist: pyautogui>=0.9.54; extra == 'all'
Requires-Dist: pytesseract>=0.3.10; extra == 'all'
Requires-Dist: python-telegram-bot>=21.0; extra == 'all'
Requires-Dist: sarvamai>=0.1.25; extra == 'all'
Requires-Dist: slack-bolt>=1.20.0; extra == 'all'
Provides-Extra: all-backends
Requires-Dist: github-copilot-sdk>=0.1.0; extra == 'all-backends'
Requires-Dist: google-adk>=1.0.0; extra == 'all-backends'
Requires-Dist: openai-agents>=0.2.0; extra == 'all-backends'
Provides-Extra: all-channels
Requires-Dist: botbuilder-core>=4.16.0; extra == 'all-channels'
Requires-Dist: botbuilder-integration-aiohttp>=4.16.0; extra == 'all-channels'
Requires-Dist: discord-py>=2.3.0; extra == 'all-channels'
Requires-Dist: google-api-python-client>=2.100.0; extra == 'all-channels'
Requires-Dist: google-auth>=2.25.0; extra == 'all-channels'
Requires-Dist: matrix-nio>=0.24.0; extra == 'all-channels'
Requires-Dist: neonize>=0.3.0; extra == 'all-channels'
Requires-Dist: python-telegram-bot>=21.0; extra == 'all-channels'
Requires-Dist: slack-bolt>=1.20.0; extra == 'all-channels'
Provides-Extra: all-tools
Requires-Dist: elevenlabs>=1.0.0; extra == 'all-tools'
Requires-Dist: google-genai>=1.0.0; extra == 'all-tools'
Requires-Dist: html2text>=2020.1.16; extra == 'all-tools'
Requires-Dist: mcp>=1.0.0; extra == 'all-tools'
Requires-Dist: mem0ai>=0.1.115; extra == 'all-tools'
Requires-Dist: ollama>=0.6.1; extra == 'all-tools'
Requires-Dist: playwright>=1.50.0; extra == 'all-tools'
Requires-Dist: psutil>=5.9.0; extra == 'all-tools'
Requires-Dist: pyautogui>=0.9.54; extra == 'all-tools'
Requires-Dist: pytesseract>=0.3.10; extra == 'all-tools'
Requires-Dist: sarvamai>=0.1.25; extra == 'all-tools'
Provides-Extra: browser
Requires-Dist: playwright>=1.50.0; extra == 'browser'
Provides-Extra: channels
Requires-Dist: discord-py>=2.3.0; extra == 'channels'
Requires-Dist: python-telegram-bot>=21.0; extra == 'channels'
Requires-Dist: slack-bolt>=1.20.0; extra == 'channels'
Provides-Extra: copilot-sdk
Requires-Dist: github-copilot-sdk>=0.1.0; extra == 'copilot-sdk'
Provides-Extra: dashboard
Provides-Extra: desktop
Requires-Dist: psutil>=5.9.0; extra == 'desktop'
Requires-Dist: pyautogui>=0.9.54; extra == 'desktop'
Provides-Extra: dev
Requires-Dist: botbuilder-core>=4.16.0; extra == 'dev'
Requires-Dist: botbuilder-integration-aiohttp>=4.16.0; extra == 'dev'
Requires-Dist: discord-py>=2.3.0; extra == 'dev'
Requires-Dist: elevenlabs>=1.0.0; extra == 'dev'
Requires-Dist: github-copilot-sdk>=0.1.0; extra == 'dev'
Requires-Dist: google-adk>=1.0.0; extra == 'dev'
Requires-Dist: google-api-python-client>=2.100.0; extra == 'dev'
Requires-Dist: google-auth>=2.25.0; extra == 'dev'
Requires-Dist: google-genai>=1.0.0; extra == 'dev'
Requires-Dist: html2text>=2020.1.16; extra == 'dev'
Requires-Dist: matrix-nio>=0.24.0; extra == 'dev'
Requires-Dist: mcp>=1.0.0; extra == 'dev'
Requires-Dist: mem0ai>=0.1.115; extra == 'dev'
Requires-Dist: mypy>=1.8.0; extra == 'dev'
Requires-Dist: neonize>=0.3.0; extra == 'dev'
Requires-Dist: ollama>=0.6.1; extra == 'dev'
Requires-Dist: openai-agents>=0.2.0; extra == 'dev'
Requires-Dist: playwright>=1.50.0; extra == 'dev'
Requires-Dist: psutil>=5.9.0; extra == 'dev'
Requires-Dist: pyautogui>=0.9.54; extra == 'dev'
Requires-Dist: pytesseract>=0.3.10; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest-playwright>=0.4.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: python-telegram-bot>=21.0; extra == 'dev'
Requires-Dist: ruff>=0.4.0; extra == 'dev'
Requires-Dist: sarvamai>=0.1.25; extra == 'dev'
Requires-Dist: slack-bolt>=1.20.0; extra == 'dev'
Provides-Extra: discord
Requires-Dist: discord-py>=2.3.0; extra == 'discord'
Provides-Extra: extract
Requires-Dist: html2text>=2020.1.16; extra == 'extract'
Provides-Extra: gchat
Requires-Dist: google-api-python-client>=2.100.0; extra == 'gchat'
Requires-Dist: google-auth>=2.25.0; extra == 'gchat'
Provides-Extra: google-adk
Requires-Dist: google-adk>=1.0.0; extra == 'google-adk'
Provides-Extra: image
Requires-Dist: google-genai>=1.0.0; extra == 'image'
Provides-Extra: matrix
Requires-Dist: matrix-nio>=0.24.0; extra == 'matrix'
Provides-Extra: mcp
Requires-Dist: mcp>=1.0.0; extra == 'mcp'
Provides-Extra: memory
Requires-Dist: mem0ai>=0.1.115; extra == 'memory'
Requires-Dist: ollama>=0.6.1; extra == 'memory'
Provides-Extra: ocr
Requires-Dist: pytesseract>=0.3.10; extra == 'ocr'
Provides-Extra: openai-agents
Requires-Dist: openai-agents>=0.2.0; extra == 'openai-agents'
Provides-Extra: recommended
Requires-Dist: mem0ai>=0.1.115; extra == 'recommended'
Requires-Dist: ollama>=0.6.1; extra == 'recommended'
Requires-Dist: playwright>=1.50.0; extra == 'recommended'
Requires-Dist: psutil>=5.9.0; extra == 'recommended'
Requires-Dist: pyautogui>=0.9.54; extra == 'recommended'
Provides-Extra: sarvam
Requires-Dist: sarvamai>=0.1.25; extra == 'sarvam'
Provides-Extra: slack
Requires-Dist: slack-bolt>=1.20.0; extra == 'slack'
Provides-Extra: teams
Requires-Dist: botbuilder-core>=4.16.0; extra == 'teams'
Requires-Dist: botbuilder-integration-aiohttp>=4.16.0; extra == 'teams'
Provides-Extra: telegram
Requires-Dist: python-telegram-bot>=21.0; extra == 'telegram'
Provides-Extra: voice
Requires-Dist: elevenlabs>=1.0.0; extra == 'voice'
Provides-Extra: whatsapp-personal
Requires-Dist: neonize>=0.3.0; extra == 'whatsapp-personal'
Description-Content-Type: text/markdown

<p align="center">
  <img src="paw.png" alt="PocketPaw" width="100">
</p>

<h1 align="center">PocketPaw</h1>

<p align="center">
  <strong>Your AI agent. Modular. Secure. Everywhere.</strong>
</p>

<p align="center">
  <a href="https://pypi.org/project/pocketpaw/"><img src="https://img.shields.io/pypi/v/pocketpaw.svg" alt="PyPI version"></a>
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
  <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.11+-blue.svg" alt="Python 3.11+"></a>
  <a href="https://pypi.org/project/pocketpaw/"><img src="https://img.shields.io/pypi/dm/pocketpaw.svg" alt="Downloads"></a>
  <a href="https://github.com/pocketpaw/pocketpaw/stargazers"><img src="https://img.shields.io/github/stars/pocketpaw/pocketpaw?style=social" alt="GitHub Stars"></a>
</p>

<p align="center">
  <a href="https://github.com/pocketpaw/pocketpaw/releases/latest/download/PocketPaw-macOS-arm64.dmg"><img src="https://img.shields.io/badge/macOS-Download_.dmg-000000?style=for-the-badge&logo=apple&logoColor=white" alt="Download for macOS"></a>
  &nbsp;
  <a href="https://github.com/pocketpaw/pocketpaw/releases/latest/download/PocketPaw-Setup.exe"><img src="https://img.shields.io/badge/Windows-Download_.exe-0078D4?style=for-the-badge&logo=windows&logoColor=white" alt="Download for Windows"></a>
</p>

<p align="center">
  Self-hosted, multi-agent AI platform. Web dashboard + <strong>Discord</strong>, <strong>Slack</strong>, <strong>WhatsApp</strong>, <strong>Telegram</strong>, and more.<br>
  No subscription. No cloud lock-in. Just you and your Paw.
</p>

> **Beta:** This project is under active development. Expect breaking changes between versions.

<p align="center">
  <video src="https://github.com/user-attachments/assets/a15bb8c7-6897-40d2-8111-aa905fe3fdfe" width="700" controls></video>
</p>

---

## Quick Start

### Desktop App

Download the native app — includes auto-updates, system tray, and launches on startup.

| Platform | Download |
| --- | --- |
| **macOS** (Apple Silicon) | [PocketPaw-macOS-arm64.dmg](https://github.com/pocketpaw/pocketpaw/releases/latest/download/PocketPaw-macOS-arm64.dmg) |
| **Windows** | [PocketPaw-Setup.exe](https://github.com/pocketpaw/pocketpaw/releases/latest/download/PocketPaw-Setup.exe) |

### Install via Terminal

<details open>
<summary>macOS / Linux</summary>

```bash
pip install pocketpaw && pocketpaw
```

Or use the install script:

```bash
curl -fsSL https://pocketpaw.xyz/install.sh | sh
```

</details>

<details>
<summary>Windows (PowerShell)</summary>

```powershell
powershell -NoExit -Command "iwr -useb https://pocketpaw.xyz/install.ps1 | iex"
```

Or install manually with pip:

```powershell
pip install pocketpaw
pocketpaw
```

> **Note:** Some features (browser automation, shell tools) work best under WSL2. Native Windows support covers the web dashboard and all LLM chat features.

</details>

<details>
<summary>Other methods</summary>

```bash
pipx install pocketpaw && pocketpaw    # Isolated install
uvx pocketpaw                           # Run without installing

# From source
git clone https://github.com/pocketpaw/pocketpaw.git
cd pocketpaw && uv run pocketpaw
```

</details>

<details>
<summary>Docker</summary>

```bash
git clone https://github.com/pocketpaw/pocketpaw.git && cd pocketpaw
cp .env.example .env
docker compose up -d
```

Dashboard at `http://localhost:8888`. Get the access token:

```bash
docker exec pocketpaw cat /home/pocketpaw/.pocketpaw/access_token
```

Optional profiles: `--profile ollama` (local LLMs), `--profile qdrant` (vector memory).

</details>

**That's it.** The web dashboard opens automatically at `http://localhost:8888`. Connect Discord, Slack, WhatsApp, or Telegram and control your agent from anywhere.

---

## Features

| | |
| --- | --- |
| **9+ Channels** | Web Dashboard, Discord, Slack, WhatsApp, Telegram, Signal, Matrix, Teams, Google Chat |
| **6 Agent Backends** | Claude Agent SDK, OpenAI Agents, Google ADK, Codex CLI, OpenCode, Copilot SDK |
| **50+ Tools** | Browser, web search, image gen, voice/TTS/STT, OCR, research, delegation, skills |
| **Integrations** | Gmail, Calendar, Google Drive & Docs, Spotify, Reddit, MCP servers |
| **Memory** | Long-term facts, session history, smart compaction, Mem0 semantic search |
| **Security** | Guardian AI, injection scanner, tool policy, plan mode, audit log, self-audit daemon |
| **Local-First** | Runs on your machine. Ollama for fully offline operation. macOS / Windows / Linux. |

### Examples

```
You:  "Every Sunday evening, remind me which recycling bins to put out"
Paw:  Done. I'll check the recycling calendar and message you every Sunday at 6pm.

You:  "Find that memory leak, the app crashes after 2 hours"
Paw:  Found it. The WebSocket handler never closes connections. Here's the fix.

You:  "I need a competitor analysis report for our product launch"
Paw:  3 agents working on it. I'll ping you when it's ready.
```

---

## Architecture

<p align="center">
  <img src="docs/public/pocketpaw-system-architecture.webp" alt="PocketPaw System Architecture" width="800">
</p>

**Event-driven message bus** — all channels publish to a unified bus, consumed by the AgentLoop, which routes to one of 6 backends via a registry-based router. All backends implement the `AgentBackend` protocol and yield standardized `AgentEvent` objects.

### Agent Backends

| Backend | Key | Providers | MCP |
| --- | --- | --- | :---: |
| **Claude Agent SDK** (Default) | `claude_agent_sdk` | Anthropic, Ollama | Yes |
| **OpenAI Agents SDK** | `openai_agents` | OpenAI, Ollama | No |
| **Google ADK** | `google_adk` | Google (Gemini) | Yes |
| **Codex CLI** | `codex_cli` | OpenAI | Yes |
| **OpenCode** | `opencode` | External server | No |
| **Copilot SDK** | `copilot_sdk` | Copilot, OpenAI, Azure, Anthropic | No |

### Security

<p align="center">
  <img src="docs/public/pocketpaw-security-stack.webp" alt="PocketPaw 7-Layer Security Stack" width="500">
</p>

Guardian AI safety checks, injection scanner, tool policy engine (profiles + allow/deny), plan mode approval, audit CLI (`--security-audit`), self-audit daemon, and append-only audit log. [Learn more](https://docs.pocketpaw.xyz/security).

<details>
<summary>Detailed security architecture</summary>
<br>
<p align="center">
  <img src="docs/public/pocketpaw-security-architecture.webp" alt="PocketPaw Security Architecture (Defense-in-Depth)" width="800">
</p>
</details>

---

## Configuration

Config at `~/.pocketpaw/config.json`, or use `POCKETPAW_`-prefixed env vars, or the dashboard Settings panel. API keys are encrypted at rest.

```bash
export POCKETPAW_ANTHROPIC_API_KEY="sk-ant-..."   # Required for Claude SDK backend
export POCKETPAW_AGENT_BACKEND="claude_agent_sdk"  # or openai_agents, google_adk, etc.
```

> **Note:** An Anthropic API key from [console.anthropic.com](https://console.anthropic.com/api-keys) is required for the Claude SDK backend. OAuth tokens from Claude Free/Pro/Max plans are [not permitted](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use) for third-party use. For free local inference, use Ollama instead.

See the [full configuration reference](https://docs.pocketpaw.xyz/getting-started/configuration) for all settings.

---

## Development

```bash
git clone https://github.com/pocketpaw/pocketpaw.git && cd pocketpaw
uv sync --dev               # Install with dev deps
uv run pocketpaw --dev      # Dashboard with auto-reload
uv run pytest               # Run tests (2000+)
uv run ruff check . && uv run ruff format .  # Lint & format
```

<details>
<summary>Optional extras</summary>

```bash
pip install pocketpaw[openai-agents]       # OpenAI Agents backend
pip install pocketpaw[google-adk]          # Google ADK backend
pip install pocketpaw[discord]             # Discord
pip install pocketpaw[slack]               # Slack
pip install pocketpaw[memory]              # Mem0 semantic memory
pip install pocketpaw[all]                 # Everything
```

</details>

---

## Documentation

Full docs at **[docs.pocketpaw.xyz](https://docs.pocketpaw.xyz)** — getting started, backends, channels, tools, integrations, security, memory, API reference (50+ endpoints).

---

## Star History

<a href="https://star-history.com/#pocketpaw/pocketpaw&Date">
 <picture>
   <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=pocketpaw/pocketpaw&type=Date&theme=dark" />
   <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=pocketpaw/pocketpaw&type=Date" />
   <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=pocketpaw/pocketpaw&type=Date" />
 </picture>
</a>

## Contributors

<a href="https://github.com/pocketpaw/pocketpaw/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=pocketpaw/pocketpaw" alt="Contributors" />
</a>

---

## Join the Pack

- Twitter: [@PocketPawAI](https://twitter.com/PocketPaw89242)
- Discord: Coming Soon
- Email: pocketpawai@gmail.com

PRs welcome. Come build with us.

## License

MIT &copy; PocketPaw Team

<p align="center">
  <img src="paw.png" alt="PocketPaw" width="40">
  <br>
  <strong>Made with love for humans who want AI on their own terms</strong>
</p>
