Metadata-Version: 2.4
Name: exoclaw-nanobot
Version: 0.32.0
Summary: Full-stack exoclaw bundle — config, provider registry, and one-line wiring
Requires-Python: >=3.11
Requires-Dist: exoclaw-channel-cli
Requires-Dist: exoclaw-channel-heartbeat
Requires-Dist: exoclaw-conversation>=0.24.0
Requires-Dist: exoclaw-executor-dbos>=0.15.1
Requires-Dist: exoclaw-loop-detection
Requires-Dist: exoclaw-provider-litellm>=0.7.0
Requires-Dist: exoclaw-subagent>=0.14.0
Requires-Dist: exoclaw-tools-cron>=0.5.0
Requires-Dist: exoclaw-tools-mcp
Requires-Dist: exoclaw-tools-message
Requires-Dist: exoclaw-tools-web>=0.1.0
Requires-Dist: exoclaw-tools-workspace>=0.5.0
Requires-Dist: exoclaw-turn-budget>=0.2.0
Requires-Dist: exoclaw>=0.26.0
Requires-Dist: pydantic-settings>=2.0
Requires-Dist: pydantic>=2.0
Requires-Dist: structlog>=25.0.0
Provides-Extra: all-channels
Requires-Dist: exoclaw-channel-discord; extra == 'all-channels'
Requires-Dist: exoclaw-channel-email; extra == 'all-channels'
Requires-Dist: exoclaw-channel-matrix; extra == 'all-channels'
Requires-Dist: exoclaw-channel-slack; extra == 'all-channels'
Requires-Dist: exoclaw-channel-telegram; extra == 'all-channels'
Requires-Dist: exoclaw-channel-whatsapp; extra == 'all-channels'
Provides-Extra: discord
Requires-Dist: exoclaw-channel-discord; extra == 'discord'
Provides-Extra: email
Requires-Dist: exoclaw-channel-email; extra == 'email'
Provides-Extra: matrix
Requires-Dist: exoclaw-channel-matrix; extra == 'matrix'
Provides-Extra: slack
Requires-Dist: exoclaw-channel-slack; extra == 'slack'
Provides-Extra: telegram
Requires-Dist: exoclaw-channel-telegram; extra == 'telegram'
Provides-Extra: whatsapp
Requires-Dist: exoclaw-channel-whatsapp; extra == 'whatsapp'
Description-Content-Type: text/markdown

# exoclaw-nanobot

Full-stack exoclaw bundle — wires provider, conversation, all workspace/cron/message/spawn/MCP tools, subagent manager, CLI channel, and heartbeat into a single ready-to-run agent.

## Install

```
pip install exoclaw-nanobot
```

## CLI

```
exoclaw-nanobot
```

Reads config from `~/.nanobot/config.json` (or `NANOBOT_*` env vars). Drops into an interactive REPL.

## Programmatic usage

```python
import asyncio
from exoclaw_nanobot.app import create, ExoclawNanobot

async def main() -> None:
    bot: ExoclawNanobot = await create()
    await bot.run()

asyncio.run(main())
```

`create()` accepts an optional pre-built `Config` or `config_path`. It returns an `ExoclawNanobot` whose `run()` method starts the cron service, heartbeat, agent loop, and CLI REPL, and tears everything down cleanly on exit.

## Adding channels (Slack, Telegram, Discord, Email, Matrix, WhatsApp)

Each channel lives in its own package — install only what you need:

```
pip install 'exoclaw-nanobot[slack]'
pip install 'exoclaw-nanobot[slack,telegram,discord]'
pip install 'exoclaw-nanobot[all-channels]'
```

Then enable each channel in your config:

```json
{
  "channels": {
    "slack": {
      "enabled": true,
      "botToken": "xoxb-...",
      "appToken": "xapp-...",
      "allowFrom": ["U01ABC..."]
    },
    "telegram": {
      "enabled": true,
      "token": "123456:abcdef...",
      "allowFrom": ["123456789"]
    }
  }
}
```

`create()` reads `config.channels.<name>` for each section, instantiates the matching channel class, and starts it alongside the CLI. If a channel is `enabled: true` but its package isn't installed, startup fails with a clear pointer to the right `pip install` command.

Per-channel config fields live in `exoclaw_nanobot.config.schema` — `SlackConfig`, `TelegramConfig`, `DiscordConfig`, `EmailConfig`, `MatrixConfig`, `WhatsAppConfig`.
