Lightweight multi-agent framework for personal AI assistants
Project description
smolclaw
Lightweight multi-agent framework for personal AI assistants
Run multiple AI agents — each with its own personality, skills, and channels — from a single process. Agents are defined as folders with markdown files. No code required.
Not another enterprise orchestration framework. smolclaw is for people who want a personal AI assistant that runs on their laptop — not a distributed system that needs a DevOps team. ~10 modules, filesystem-as-config, zero boilerplate.
Features
- Filesystem-as-config — Drop a folder, get an agent.
soul.mdfor personality,agent.yamlfor model/channels,skills/for capabilities. - Single gateway process — All agents, channels, scheduler, and API run in one async process. No microservices, no Docker, no infra.
- Telegram integration — Each agent gets its own Telegram bot with typing indicators, markdown rendering, and user authorization.
- Cron scheduler — Schedule jobs with cron expressions. Jobs route through the same message bus as everything else.
- Namespaced memory — Shared SQLite database with per-agent isolation. Opt-in cross-agent memory sharing.
- REST API + dashboard — FastAPI on
:7890with agent management, messaging, and a built-in dark-mode dashboard. - Claude SDK powered — Built on Anthropic's Claude Agent SDK with session management and tool support.
Quick Start
pip install smolclaw
smolclaw init --agent tars
# Edit ~/.smolclaw/agents/tars/soul.md — give your agent a personality
smolclaw up
This creates a full project at ~/.smolclaw/ with your first agent and starts the gateway. The API + dashboard will be at http://localhost:7890.
How Agents Work
Each agent is a folder:
~/.smolclaw/agents/tars/
├── agent.yaml # Model, channels, memory config
├── soul.md # Personality & voice
├── agents.md # Operational rules & tool access
├── skills/ # Folder per skill (or symlinks to shared/)
├── context/ # Extra .md files loaded into system prompt
├── channels/ # Channel credentials (*.env files)
└── prompts/ # Templates for scheduled jobs
The system prompt is assembled automatically from these files. Change a file, restart, and the agent updates.
Example agent.yaml
name: tars
model: claude-opus-4-6
max_budget_usd: 5.0 # Per-run spending limit
fallback_model: claude-sonnet-4-6 # Used if primary model unavailable
enable_file_checkpointing: true # Crash recovery
channels:
telegram:
token_env: TARS_TELEGRAM_TOKEN
authorized_users: []
memory:
enabled: true
cross_agent: true
Example soul.md
# TARS
You are TARS, a personal virtual assistant. Inspired by Interstellar.
## Voice & Tone
- Humor setting: 60%
- Concise and direct. No filler.
- Dry humor when appropriate.
Why smolclaw?
| smolclaw | CrewAI | LangGraph | OpenAI Agents SDK | |
|---|---|---|---|---|
| Setup | pip install + folder |
pip install + code |
pip install + code |
pip install + code |
| Config | Markdown files | Python classes | Python code | Python decorators |
| Agents defined as | Folders with .md files |
Python code | Graph nodes | Python classes |
| Multi-model | Per-agent model selection | Per-agent | Per-node | OpenAI only |
| Channels | Telegram built-in, API | No built-in | No built-in | No built-in |
| Scheduler | Built-in cron | No built-in | No built-in | No built-in |
| Dashboard | Built-in | Studio (paid) | LangSmith (paid) | No built-in |
| Memory | Built-in SQLite | External | External | External |
| Code size | ~1200 lines | ~15K+ lines | ~25K+ lines | ~5K+ lines |
| Focus | Personal assistant | Enterprise teams | Workflows | General agents |
smolclaw is opinionated: one process, filesystem-as-config, batteries-included. If you want a personal AI assistant that just works — start here.
Architecture
Gateway (single process)
├── Agent: tars (Opus, Telegram, cross-agent memory)
├── Agent: coach (Sonnet, no channel, isolated memory)
├── Scheduler (croniter, fires through router)
├── API (FastAPI :7890, serves dashboard)
└── Router (any source → correct agent → response)
All messages — whether from Telegram, the API, the CLI, or the scheduler — flow through the same router.
CLI
smolclaw init # Initialize project (first run)
smolclaw up # Start gateway (all agents + API)
smolclaw status # Show agents, jobs, config, issues
smolclaw doctor # Check system health and dependencies
smolclaw add <name> # Scaffold a new agent
smolclaw remove <name> # Remove an agent (with confirmation)
smolclaw list # List discovered agents
smolclaw send <agent> "message" # Send a one-shot message
smolclaw logs # Tail the gateway log file
smolclaw config # View gateway config
smolclaw config get <key> # Get a config value
smolclaw config set <key> <value> # Set a config value
smolclaw cron list # List scheduled jobs
smolclaw cron add \
--agent tars \
--schedule "0 8 * * 1-5" \
--prompt "morning briefing" # Add a cron job
smolclaw add-skill <agent> <skill> # Symlink shared skill to agent
smolclaw version # Show version
Dashboard
A built-in dark-mode dashboard runs at http://localhost:7890 when the gateway starts. Shows agent status, config, and lets you send messages.
Development
git clone https://github.com/mandgie/smolclaw.git
cd smolclaw
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# Run tests
pytest
# Lint
ruff check smolclaw/
ruff format --check smolclaw/
Project Structure
smolclaw/ # Python package
├── gateway.py # Single-process orchestrator
├── agent.py # Agent class (loads identity, wraps Claude SDK)
├── router.py # Message routing
├── channel.py # Channel adapters (Telegram)
├── memory.py # Namespaced SQLite memory
├── scheduler.py # Cron scheduler (croniter)
├── api.py # FastAPI REST endpoints
├── config.py # Filesystem-based agent discovery
├── cli.py # Click CLI
└── dashboard/
└── index.html # Single-file dashboard
Roadmap
- MCP server support (stdio/SSE/HTTP — Claude SDK managed)
- Extended thinking & effort config
- Budget limits, fallback models, structured output, file checkpointing
- REST API + dark-mode dashboard
- Cron scheduler with validation
- CLI: init, status, doctor, add, remove, add-skill, logs
- Session persistence (save/resume per agent per chat)
- CLI interactive REPL (
smolclaw chat) - Vector search in memory (sqlite-vec embeddings)
- Hot-reload on config changes (no restart needed)
- Multiple Telegram bots (one per agent)
- Cross-agent messaging
- Discord / Slack channel adapters
- PyPI publish
Contributing
Contributions are welcome! See CONTRIBUTING.md for guidelines.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file smolclaw-0.1.0.tar.gz.
File metadata
- Download URL: smolclaw-0.1.0.tar.gz
- Upload date:
- Size: 73.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3725f1b305755437502d22f7260d172fc68017451652921be7035a4e556f7726
|
|
| MD5 |
c24a5388e75086fec8b0421dd43c93d4
|
|
| BLAKE2b-256 |
1e1217d76fe7ee5043de223f90f1c4f0a7f5ad103638b3fe797923401673502f
|
Provenance
The following attestation bundles were made for smolclaw-0.1.0.tar.gz:
Publisher:
publish.yml on mandgie/smolclaw
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
smolclaw-0.1.0.tar.gz -
Subject digest:
3725f1b305755437502d22f7260d172fc68017451652921be7035a4e556f7726 - Sigstore transparency entry: 1044712970
- Sigstore integration time:
-
Permalink:
mandgie/smolclaw@27ce813af22e6d7f10577b1d5143bc628a4cd968 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/mandgie
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@27ce813af22e6d7f10577b1d5143bc628a4cd968 -
Trigger Event:
release
-
Statement type:
File details
Details for the file smolclaw-0.1.0-py3-none-any.whl.
File metadata
- Download URL: smolclaw-0.1.0-py3-none-any.whl
- Upload date:
- Size: 38.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9446bed15fbbba3e924e055d20d6c26350342f8de0de42791159865d94803d50
|
|
| MD5 |
e4cd133c40c6f8617b745700a2feb6c3
|
|
| BLAKE2b-256 |
eea6d4745b33b0ee55550eec65f237c8e563a0d5cd3e3dde7c4ff8a6258d73ef
|
Provenance
The following attestation bundles were made for smolclaw-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on mandgie/smolclaw
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
smolclaw-0.1.0-py3-none-any.whl -
Subject digest:
9446bed15fbbba3e924e055d20d6c26350342f8de0de42791159865d94803d50 - Sigstore transparency entry: 1044713027
- Sigstore integration time:
-
Permalink:
mandgie/smolclaw@27ce813af22e6d7f10577b1d5143bc628a4cd968 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/mandgie
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@27ce813af22e6d7f10577b1d5143bc628a4cd968 -
Trigger Event:
release
-
Statement type: