# Fireclaw Multi-agent system powered by Firecracker microVMs. Each AI agent runs in its own hardware-isolated VM, connects to IRC, and responds via local LLMs. ## What it does **Command runner:** Execute arbitrary commands in ephemeral microVMs with KVM isolation. ``` $ fireclaw run "uname -a" Linux 172.16.0.200 5.10.225 #1 SMP x86_64 Linux ``` **Multi-agent system:** Spawn AI agents as long-running VMs. Each agent connects to IRC, responds via Ollama, has tool access, and remembers across restarts. ``` # In IRC (#control): !invoke worker Agent "worker" started: worker [qwen2.5:7b] (172.16.0.2) # In IRC (#agents): worker: what's your uptime? System has been up for 3 minutes with load average 0.00. # Private message: /msg worker hello Hey! How can I help? # Hot-reload model: !model worker phi4-mini [reloaded: model=phi4-mini] ``` ## Architecture ``` grogbox host ├── fireclaw overseer systemd service, IRC bot in #control ├── Ollama 0.0.0.0:11434, 5 models available └── nyx.fireclaw.local ngircd IRC server (FireclawNet) Firecracker VMs (fcbr0 bridge, 172.16.0.0/24) ├── worker (172.16.0.2) general assistant in #agents ├── coder (172.16.0.3) code-focused agent in #agents └── research (172.16.0.4) research agent in #agents ``` Each agent VM: - Runs a Python IRC bot (stdlib only, zero deps) - Connects to nyx.fireclaw.local at 172.16.0.1:6667 - Calls Ollama at 172.16.0.1:11434 for LLM responses - Has tool access — shell commands + podman containers - Has persistent workspace at `/workspace` (survives restarts) - Has persistent memory — saves/loads facts across restarts - Accepts `/invite` to join any channel - Responds to DMs without mention - Runs as unprivileged `agent` user - Is fully isolated from the host and other agents ## Requirements - Linux with KVM (`/dev/kvm`) - Firecracker v1.15+ at `/usr/local/bin/firecracker` - `sudo` access (for tap devices, rootfs mounting) - Node.js 20+ - Ollama (for LLM responses) - ngircd (for IRC) ## Quick start ```bash cd ~/projects/fireclaw npm install npm run build sudo npm link # One-time setup fireclaw setup fireclaw snapshot create # Start the overseer (or use systemd) sudo systemctl start fireclaw-overseer # Connect to IRC and start spawning agents # irssi -c localhost -n human # /join #control # !invoke worker # /join #agents # worker: hello! ``` ## IRC Channel Layout | Channel | Purpose | |---|---| | `#control` | Overseer commands only (!invoke, !destroy, !list, etc.) | | `#agents` | Common room — all agents join here | | `/msg ` | Private DM with an agent (no mention needed) | | `/invite #room` | Pull an agent into any channel | ## CLI Reference ``` fireclaw run [options] "" Run a command in an ephemeral microVM -t, --timeout Command timeout (default: 60) -v, --verbose Show boot/cleanup progress --no-snapshot Force cold boot fireclaw overseer [options] Start the overseer daemon --server IRC server (default: localhost) --port IRC port (default: 6667) --nick Bot nickname (default: overseer) --channel Control channel (default: #control) fireclaw agent start