Skip to content

Packages

A Snippbot install is composed of a handful of Python packages plus a bundled React frontend. Most users only ever install snippbot (the daemon, which includes the CLI) and, optionally, snippbot-device on remote machines.

PackageInstalled asPurpose
Daemonpip install snippbotThe ASGI server, REST API, bundled web UI, and CLI entry point (snippbot).
Core library(dependency of the daemon)Shared business logic — agents, memory, scheduler, workflows, channels, dispatch, MCP, sandboxing.
Device agentpip install snippbot-device on remote machinesStandalone WebSocket client that exposes a remote machine’s local tools to a paired daemon.

Everything below describes the internals of those packages for developers who want to read or contribute to the source.

The daemon depends on the snippbot_core library, which contains the major subsystems:

ModuleResponsibility
config.pyEnvironment variable config with defaults
agents/Agent models, memory, configuration
executor/Task execution engine with DAG resolution
scheduler/Cron/interval job scheduler (engine, models, stores)
workflows/Workflow DAG builder, executor, template store
sub_agent/Sub-agent spawning, lifecycle, messaging, aggregation
tools/Built-in tool implementations (bash, browser, file, etc.)
tools/browser/Full browser automation suite (12+ modules)
sandbox/Container sandbox config and manager
mcp/MCP client, connection manager, catalog, OAuth2
hooks/Hook engine, executor, store, analytics
dispatch/Unified Intent Dispatcher — envelope types, 4-tier resolution pipeline, shadow controller, decision log, settings store
channel_store.pyMessaging platform credential/binding storage
skills_store.pyTool registry and MCP server persistence
event_bus.pyAsync publish/subscribe event bus (orthogonal to the Intent Dispatcher)
memory/Episodic, semantic, and graph memory layers

Python requirement: 3.11+

Key dependencies: anthropic, aiosqlite, httpx, pydantic, cryptography, playwright

The self-hosted daemon. Starts the HTTP API server and wires all core subsystems together.

ModuleResponsibility
server.pyMain Starlette ASGI app + uvicorn startup
api/routes.pyAll API route definitions (382+ KB)
api/chat.pyChat endpoint with SSE streaming
api/scheduler.pyScheduler REST routes
api/workflows.pyWorkflow REST routes
api/auth.pyAuth key management routes
api/dispatcher.pyIntent Dispatcher admin REST (/api/dispatcher/{decisions,health,settings,inject})
channel_adapter/Platform-specific webhook adapters
channel_adapter/adapters/slack, discord, telegram, whatsapp, teams, google_chat

Port: 18781 (API + static UI)

Key dependencies: starlette, uvicorn, aiosqlite

The command-line interface. Communicates with the daemon via HTTP.

ModuleResponsibility
main.pyClick CLI entry point
user_config.py~/.snippbot/config.toml read/write
commands/Individual CLI command implementations

Key dependencies: click, rich, httpx

The CLI ships in the same wheel as the daemon (pip install snippbot) — there is no separate install step.

The React frontend served by the daemon at /ui/.

DirectoryResponsibility
src/pages/Top-level pages (Chat, Projects, Agents, etc.)
src/components/Reusable UI components
src/stores/Zustand global state
src/api/React Query API hooks
src/styles/Tailwind config + Aurora theme

Built with: React 18, TypeScript, Vite, Tailwind CSS, React Query, Zustand

Bundle output: Embedded in the snippbot Python package at build time — users do not need Node.js to run Snippbot.

Dev port: 5173 (proxies API calls to 18781)

The lightweight device agent that runs on remote machines.

ModuleResponsibility
main.pyClick CLI entry point (snippbot-device)
agent.pyWebSocket client to daemon
tools.pyLocal tool implementations (bash, file, system_info)
config.py~/.snippbot-device/config.toml management
pair.pyPairing flow with daemon

Installed as: pip install snippbot-device on remote machines

Key dependencies: websockets, click, toml

snippbot (daemon + CLI)
└── snippbot_core (business logic)
├── anthropic SDK
├── aiosqlite
├── httpx
├── cryptography (Fernet)
├── playwright (browser)
└── [optional] chromadb (vector memory)
snippbot-device (standalone, on remote machines)
└── websockets, click, toml