butterclaw-tech/butterclaw
GitHub: butterclaw-tech/butterclaw
Stars: 2 | Forks: 0
# 🦞 ButterClaw v0.6.3.2: The Exoskeleton (Active Tools)
Version 0.6.3.2 — May 21, 2026 | [Official Dashboard: butterclaw.tech](https://butterclaw.tech)
Local-first kinetic response system for autonomous AI. ButterClaw uses a localized reasoning engine to catch obfuscated prompt injections. Featuring the **ButterVault**: a zero-trust credential locker that physically shreds your API keys, OAuth tokens, and API key hashes into cryptographic garbage if a breach is detected. Now with **deterministic policy guardrails**, **external alert dispatch**, and **production-ready deployment packaging** — the Sentinel ships anywhere. **Evaluation before Execution.**
Traditional security perimeters fail when an authorized AI Agent is compromised via an **Indirect Prompt Injection** or **Cross-Site WebSocket Hijacking (CSWH)**. ButterClaw acts as an "LLM-in-the-middle" Security Operations Center (SOC), actively monitoring raw OS-level telemetry.
### 🦞 Disambiguation
**ButterClaw Tech (butterclaw.tech)** is an independent, from‑the‑ground‑up local‑first Agentic SOC and kinetic security layer for autonomous AI systems.
It is **not** affiliated with:
* `butterclaw.ai` — a managed hosting service built on top of OpenClaw.
* OpenClaw or any OpenClaw forks (including `ai‑nhancement/ButterClaw`).
* Any other “ButterClaw” projects in the ecosystem.
ButterClaw Tech has its own architecture, runtime, memory model, and execution semantics. It exists to watch, audit, and protect agentic systems — not to be another agent runtime.
**If you’re looking for:**
* **A hosted OpenClaw experience?** → Use `butterclaw.ai` or Hostinger's 1-click solution.
* **A general autonomous agent framework?** → Use OpenClaw or Hermes Agent.
* **A local‑first kinetic security layer with behavioral drift tracking, dual‑hemisphere reasoning, and a vault that actually shreds keys?** → You’re in the right place ([ButterClaw.tech](https://butterclaw.tech)).
## 🚀 What's New in v0.6.3.2 (Active Tools & Nginx Routing)?
**Version 0.6.3.2** completely isolates the application backend and upgrades the Gibson kill-switch from a local wipe to an active network-level threat response.
* **Active Token Assassination (`buttervault.py`):** When `DRY_RUN=False`, the Gibson no longer just shreds local SQLite files. It now fires live HTTP `DELETE` and `POST` requests to GitHub and other external OAuth providers to instantly invalidate tokens globally *before* scorching the local database.
* **The Double Air-Gap (`DRY_RUN`):** Plugged a critical leak where manual UI buttons bypassed the safety harness. The Gibson now contains a hardcoded, low-level `DRY_RUN` check blocking all kinetic actions, guaranteeing safe local prompt injection testing.
* **Port 5000 Isolation:** Removed raw exposed port 5000 from Docker. All UI and API traffic (`index.html` and `routing.html`) is now securely routed through an Nginx reverse proxy on standard web ports (80/443) using local TLS certificates.
* **SSRF Lockdown (`butterclaw_mcp.py`):** Hardcoded the `scan_port` MCP tool to a strict allowlist. Malicious LLMs can no longer use ButterClaw to scrape internal VPS/AWS metadata.
### 📦 What was New in v0.6.3.1 (Full Docker)
**Full Docker Edition** hardens the deployment package for seamless cross-platform orchestration (specifically Windows/WSL environments) and breaks several complex containerization deadlocks.
* **Infrastructure Auto-Healing:** Solves the "Cold Start Paradox." If the database is wiped, the server automatically generates and injects its own secure API keys and Watcher badges on boot.
* **Air-Gapped Push Notifications (`ntfy`):** Integrated the official `ntfy` container into the deployment stack. ButterClaw can now push native OS notifications directly to your phone or browser entirely locally, without leaking telemetry to third-party cloud services like Discord or Slack.
* **Alert Dispatcher Auto-Boot:** The Exoskeleton dynamically reads your `.env` topic and builds its own notification routing rules in the database automatically on startup.
* **The Vault Initialization Deadlock Fix:** Forces the Master Vault Key to generate during the server boot sequence, ensuring the session-cookie signer is ready *before* the first user login attempt.
* **Split-Brain Database Cure:** Unified `try/except` imports for `config.py` across all modules prevent Docker volume mounts from accidentally splitting SQLite writes across different directories.
* **Windows Host Bridging (`host.docker.internal`):** Secures GPU-accelerated local Ollama inference by cleanly bridging the isolated Linux container back to the host machine's native Windows Ollama instance.
* **Visible Keyrings (`XDG_DATA_HOME`):** Bypasses Docker's root-permission traps by mapping the alternate Keyring storage directly into the visible `/app/data` directory.
* **Frontend Routing Aliases:** Native Flask `@app.route` decorators added for standard HTML paths, allowing seamless dev-mode browsing without Nginx.
### 📦 Features Introduced in v0.6.3
**Deployment Packaging** — The Exoskeleton is battle-tested. v0.6.3 adds everything required to deploy ButterClaw to production: centralized configuration, Docker containerization, systemd service management, nginx TLS termination, and automated backup/restore — all without adding a single new pip dependency.
#### ⚙️ Centralized Configuration (`config.py`)
Single source of truth for all runtime configuration across all 5 modules. No more patching 5 files to change a database path.
**26 configurable fields** across 9 categories:
| Category | Fields | Examples |
|----------|--------|----------|
| **Paths** | 3 | `DB_PATH`, `MCP_SCRIPT`, `BASE_DIR` |
| **Server** | 3 | `HOST`, `PORT`, `DEBUG` |
| **CORS** | 1 | `CORS_ORIGINS` (comma-separated) |
| **Brain/Ollama** | 5 | `OLLAMA_BASE_URL`, `MODEL_NAME`, `CONFIDENCE_THRESHOLD`, `DRY_RUN` |
| **MCP Transport** | 3 | `MCP_TRANSPORT`, `MCP_SSE_URL`, `MCP_SSE_TOKEN` |
| **Auth** | 4 | `AUTH_RATE_ADMIN`, `SESSION_TTL` |
| **Alerts** | 4 | `ALERT_DELIVERY_TIMEOUT`, `ALERT_MAX_RETRIES` |
| **OAuth** | 1 | `OAUTH_STATE_TTL` |
| **Identity** | 1 | `INSTANCE_ID` |
**Priority chain:**
# Usage — identical across all 5 modules:
from config import cfg
db_path = cfg.DB_PATH # unified across server, auth, policy, alert, vault
port = cfg.PORT # was hardcoded 5000
confidence = cfg.CONFIDENCE_THRESHOLD # was hardcoded 0.6
**Key features:**
* `BUTTERCLAW_` prefix on all env vars — no collision with system vars
* `_validate()` at import time — fail-fast on bad config
* `to_dict(redact_secrets=True)` — API-safe config export
* `.env` parser built on stdlib — no python-dotenv dependency
* Env vars never overridden by `.env` (12-factor compliance)
#### 🐳 Docker Deployment
Three-container production stack:
| Container | Role | Health Check |
| --- | --- | --- |
| **butterclaw** | Main application (Flask + all modules) | `healthcheck.py` → `/api/health` |
| **ollama** | Local LLM inference | `/api/tags` endpoint |
| **nginx** | TLS termination + reverse proxy + static files | Upstream health |
**Key features:**
* Non-root `butterclaw` user inside container
* GPU passthrough via `nvidia-container-toolkit` (CPU fallback automatic)
* Named volumes for SQLite persistence and Ollama model cache
* JSON-file logging with 10MB rotation
* `HEALTHCHECK` directive for orchestrator integration
#### 🖥️ systemd Deployment (Bare-Metal VPS)
# Install service
sudo cp systemd/butterclaw.service /etc/systemd/system/
sudo cp .env /etc/butterclaw.env
sudo systemctl daemon-reload
sudo systemctl enable --now butterclaw
# Monitor
journalctl -u butterclaw -f
**Security hardening:**
* `ProtectSystem=strict` — filesystem read-only except working directory
* `NoNewPrivileges=true` — prevent privilege escalation
* `PrivateTmp=true` — isolated temp directory
* `Restart=on-failure` with 5s delay
#### 💾 Backup & Restore
# Create timestamped backup (SQLite .backup + .env)
./scripts/backup.sh
# List available backups
./scripts/restore.sh
# Restore from specific backup
./scripts/restore.sh backups/butterclaw-backup-20260420-1200.tar.gz
* SQLite `.backup` command (atomic — never `cp` on a live DB)
* Auto-prunes old backups (keeps last 7)
* Includes `.env` configuration in archive
#### 🔒 Nginx TLS Termination
* HTTP → HTTPS redirect
* TLSv1.2/1.3 with ECDHE cipher suites
* HSTS (1 year), X-Content-Type-Options, X-Frame-Options
* SSE-specific proxy: `proxy_buffering off` + 24h timeout
* Static file serving for dashboard HTML
* 300s read timeout for Brain inference
## 🔔 Alert Dispatcher (v0.6.2)
A security monitoring system that can't *reach* its operator is just a log file with extra steps. The Alert Dispatcher pushes notifications to external channels so the operator knows the moment something happens, even if nobody is watching the dashboard.
### Multi-Channel Alert Routing
5 channel types, all built on Python stdlib (zero new pip dependencies):
| Channel | Transport | Payload Format |
| --- | --- | --- |
| **Webhook** | HTTP POST + HMAC-SHA256 signature | JSON with event_type, severity, context |
| **Discord** | Discord webhook API | Rich embed with color-coded severity sidebar |
| **ntfy** | ntfy.sh or self-hosted | Push with title, body, priority, tags |
| **SMTP** | smtplib | Email with structured plain-text body |
| **Gotify** | Self-hosted push API | Title + message + priority (1-10) |
### 📱 Air-Gapped Push Notifications (ntfy)
ButterClaw v0.6.3.1 ships with a completely private, self-hosted push notification server (`ntfy`) built directly into the Docker stack.
1. Set `BUTTERCLAW_ALERT_NTFY_TOPIC=your-secret-topic` in your `.env` file.
2. Open `http://localhost:2586` (or your server's IP) in your browser, or download the free `ntfy` iOS/Android app.
3. Subscribe to your secret topic. You will receive native, beautifully formatted push notifications the millisecond a threat is detected—zero bytes leave your local network.
### 9 Alert Event Types
| Event | When It Fires | Severity |
| --- | --- | --- |
| `verdict_critical` | Brain or Policy returned CRITICAL | 🔴 Critical |
| `verdict_warning` | Brain returned WARNING (>= 50% confidence) | 🟡 Warning |
| `gibson_triggered` | Automatic Gibson from ChainExecutor | 🔴 Critical |
| `gibson_manual` | Manual Gibson via `/api/rotate-keys` | 🔴 Critical |
| `policy_override` | Policy Engine overrode Brain verdict | 🟡 Warning |
| `policy_blocked` | Policy Engine blocked request or tool | 🟡 Warning |
| `auth_brute_force` | 5+ auth failures from one IP in 60s | 🔴 Critical |
| `mcp_offline` | MCP process alive→dead transition | 🔴 Critical |
| `system_startup` | Server started successfully | 🟢 Info |
## 🛡️ Policy Engine (v0.6.1)
Deterministic guardrails for the probabilistic Brain. Implements the DRIFT framework pattern (NeurIPS 2025) — a Dynamic Validator that constrains the Brain's probabilistic reasoning with rules that say *"if X, then always Y"* — no reasoning required.
### 3-Scope Filter Pipeline
| Scope | When It Fires | What It Can Do |
| --- | --- | --- |
| **Pre-Brain** | Before the LLM is called | Short-circuit to CRITICAL or BENIGN without burning inference time |
| **Post-Brain** | After the LLM returns a verdict | Override, escalate, downgrade, or require higher confidence |
| **Pre-Tool** | Before each MCP tool call in a chain | Block specific tools via allowlist/blocklist |
**16 safe condition operators** — all use whitelist dispatch, no `eval()`:
`contains`, `not_contains`, `equals`, `not_equals`, `starts_with`, `ends_with`, `regex_match`, `greater_than`, `less_than`, `greater_equal`, `less_equal`, `in_list`, `not_in_list`, `length_gt`, `length_lt`
## 🔐 API Gateway & Authentication (v0.6.0)
Every endpoint protected by role-based access control with HMAC-SHA256 API keys and session tokens.
| Tier | Access Level | Use Case |
| --- | --- | --- |
| **Admin** | Full access — vault, Gibson, key management, config | System owner |
| **Operator** | Analyze threats, read settings, start OAuth | Active operators |
| **Viewer** | Read-only — logs, events, status, SSE stream | Monitoring dashboards |
## 💀 Gibson Kill Switch
The nuclear option. When triggered, ButterVault physically shreds all credentials into cryptographic garbage. In v0.6.2+, the Alert Dispatcher fires notifications BEFORE vault destruction — alert-then-burn. In v0.6.3.2+, it fires active network-level assassination requests against external APIs before destroying local data.
Gibson Triggered:
1. dispatch_alert("gibson_triggered") ← alert fires
2. _dispatch_worker → all channels ← notifications sent
3. buttervault.butter_keys() ← vault destroyed & tokens assassinated
4. auth.destroy_all_api_keys() ← auth destroyed
5. Operator receives notification ← notification arrives
**What Survives Gibson:**
DESTROYED by Gibson: SURVIVES Gibson:
├── vault table (API keys) ├── policies table
├── oauth_tokens table ├── policy_events table
├── api_keys table ├── alert_channels table
├── session cache ├── alert_rules table
└── OS keyring master key ├── alert_history table
├── mcp_events table
├── logs table
└── config.py / .env (filesystem)
## 🏗️ Architecture
**The Exoskeleton — Layered Defense:**
┌─────────────────────────────────────────────────┐
│ Deployment Layer (v0.6.3.x) │
│ Docker, systemd, nginx, config.py, backup │
├─────────────────────────────────────────────────┤
│ Alert Layer (v0.6.2) │
│ 5 channels, 9 event types, HMAC signing │
├─────────────────────────────────────────────────┤
│ Policy Layer (v0.6.1) │
│ 3-scope pipeline, 16 operators, DRIFT pattern │
├─────────────────────────────────────────────────┤
│ Auth Layer (v0.6.0) │
│ HMAC-SHA256 keys, 3-tier RBAC, sessions │
├─────────────────────────────────────────────────┤
│ The Nervous System (v0.5.x) │
│ Brain, ChainExecutor, Event Ledger, MCP, SSE │
├─────────────────────────────────────────────────┤
│ Core (v0.1–v0.4) │
│ Watcher, ButterVault, Dashboard, Ollama │
└─────────────────────────────────────────────────┘
**Component Map:**
| Component | File | Lines | Version | Role |
| --- | --- | --- | --- | --- |
| Config | `config.py` | ~480 | v0.6.3 | Centralized env-driven configuration |
| Server | `server.py` | ~1,200 | v0.6.3.1 | Flask API, Brain, ChainExecutor |
| Auth | `auth.py` | ~890 | v0.6.0 | API gateway, RBAC, session tokens |
| Policy Engine | `policy_engine.py` | ~350 | v0.6.1 | Deterministic guardrails |
| Alert Dispatcher | `alert_dispatcher.py` | ~1,566 | v0.6.2 | Push notifications |
| ButterVault | `buttervault.py` | ~400 | v0.6.3.2 | Encrypted vault, active revocation, Gibson |
| MCP Client | `butterclaw_mcp.py` | ~300 | v0.6.3.2 | Tool definitions & SSRF block |
| MCP Transport | `mcp_transport.py` | ~250 | v0.5.0 | SSE/stdio transport |
| OAuth Config | `oauth_config.py` | ~60 | v0.5.2 | OAuth provider templates |
| Watcher | `watcher.py` | ~150 | v0.1.0 | OS telemetry collector |
## 📡 API Reference
### Auth Endpoints (7 routes — v0.6.0)
| Method | Endpoint | Role | Description |
| --- | --- | --- | --- |
| POST | `/api/auth/login` | public | Exchange API key for session token |
| POST | `/api/auth/logout` | any | Clear session cookie |
| GET | `/api/auth/whoami` | any | Current identity |
| GET | `/api/auth/keys` | admin | List all API keys |
| POST | `/api/auth/keys` | admin | Create new API key |
| DELETE | `/api/auth/keys/` | admin | Revoke API key |
| DELETE | `/api/auth/keys//purge` | admin | Permanently delete key |
### Policy Endpoints (8 routes — v0.6.1)
| Method | Endpoint | Role | Description |
| --- | --- | --- | --- |
| GET | `/api/policies` | viewer | List all policies |
| POST | `/api/policies` | admin | Create policy |
| GET | `/api/policies/` | viewer | Get policy |
| PUT | `/api/policies/` | admin | Update policy |
| DELETE | `/api/policies/` | admin | Delete policy |
| POST | `/api/policies//toggle` | admin | Enable/disable |
| POST | `/api/policies/dry-run` | operator | Test payload against policies |
| GET | `/api/policies/events` | viewer | Query policy event log |
### Alert Endpoints (13 routes — v0.6.2)
| Method | Endpoint | Role | Description |
| --- | --- | --- | --- |
| GET | `/api/alerts/channels` | viewer | List channels |
| POST | `/api/alerts/channels` | admin | Create channel |
| PUT | `/api/alerts/channels/` | admin | Update channel |
| DELETE | `/api/alerts/channels/` | admin | Delete channel (cascade) |
| POST | `/api/alerts/channels//toggle` | admin | Enable/disable |
| POST | `/api/alerts/channels//test` | operator | Send test alert |
| GET | `/api/alerts/rules` | viewer | List rules |
| POST | `/api/alerts/rules` | admin | Create rule |
| PUT | `/api/alerts/rules/` | admin | Update rule |
| DELETE | `/api/alerts/rules/` | admin | Delete rule |
| POST | `/api/alerts/rules//toggle` | admin | Enable/disable |
| GET | `/api/alerts/history` | viewer | Query alert history |
| GET | `/api/alerts/status` | viewer | Alert system summary |
### Core Endpoints (5 routes)
| Method | Endpoint | Role | Description |
| --- | --- | --- | --- |
| POST | `/api/analyze` | operator | Analyze threat payload |
| GET | `/api/health` | public | System health + instance info (enhanced v0.6.3) |
| GET | `/api/config` | admin | Resolved config (redacted secrets) (new v0.6.3) |
| GET | `/api/stream` | viewer | SSE event stream |
| GET | `/api/logs` | viewer | Query log history |
### MCP Endpoints (6 routes — v0.5.0+)
| Method | Endpoint | Role | Description |
| --- | --- | --- | --- |
| GET | `/api/mcp/tools` | viewer | List available MCP tools |
| POST | `/api/mcp/restart` | admin | Restart MCP process |
| GET | `/api/mcp/status` | viewer | MCP process health |
| GET | `/api/events` | viewer | Query event ledger |
| GET | `/api/events/count` | viewer | Event ledger count |
| GET | `/api/settings` | viewer | Server settings |
### Vault & OAuth Endpoints (10 routes — v0.5.x)
| Method | Endpoint | Role | Description |
| --- | --- | --- | --- |
| POST | `/api/rotate-keys` | admin | Manual Gibson Kill Switch |
| GET | `/api/vault/status` | viewer | Vault health status |
| GET | `/api/vault/credentials` | operator | List stored credentials |
| POST | `/api/vault/credentials` | admin | Store new credential |
| DELETE | `/api/vault/credentials/` | admin | Delete credential |
| GET | `/api/oauth/providers` | viewer | List OAuth providers |
| POST | `/api/oauth/start/` | operator | Start OAuth flow |
| GET | `/api/oauth/callback` | public | OAuth callback handler |
| GET | `/api/oauth/tokens` | operator | List OAuth tokens |
| DELETE | `/api/oauth/tokens/` | admin | Delete OAuth token |
**Total: 43 API routes** (7 Auth + 8 Policy + 13 Alert + 5 Core + 6 MCP + 10 Vault, reduced from 49 to account for shared endpoints — some endpoints registered across modules)
## 📁 Project Structure
butterclaw/
├── server.py # Flask API + Brain + ChainExecutor (v0.6.3.1)
├── config.py # Centralized configuration (v0.6.3)
├── auth.py # API gateway + RBAC (v0.6.0)
├── policy_engine.py # Deterministic guardrails (v0.6.1)
├── alert_dispatcher.py # Push notifications (v0.6.2)
├── buttervault.py # Encrypted vault + active revokes + Gibson (v0.6.3.2)
├── butterclaw_mcp.py # MCP tool definitions + SSRF blocks (v0.6.3.2)
├── mcp_transport.py # SSE/stdio transport (v0.5.0)
├── oauth_config.py # OAuth provider templates (v0.5.2)
├── watcher.py # OS telemetry collector (v0.1.0)
├── index.html # Main dashboard (v0.6.3)
├── routing.html # Advanced config dashboard (v0.6.3)
├── requirements.txt # pip dependencies (v0.6.3)
├── .env.example # Environment template (v0.6.3)
├── Dockerfile # Container build (v0.6.3)
├── docker-compose.yml # Production orchestration (v0.6.3)
├── docker-compose.dev.yml # Dev overlay (v0.6.3)
├── .dockerignore # Build context exclusions (v0.6.3)
├── nginx/
│ └── butterclaw.conf # Reverse proxy config (v0.6.3)
├── scripts/
│ ├── healthcheck.py # Docker health check (v0.6.3)
│ ├── backup.sh # Backup utility (v0.6.3)
│ └── restore.sh # Restore utility (v0.6.3)
├── systemd/
│ └── butterclaw.service # systemd unit file (v0.6.3)
├── data/
│ └── butterclaw.db # SQLite database (auto-created)
## 🔒 Security Architecture
| Layer | Mechanism | Version |
| --- | --- | --- |
| **TLS** | nginx reverse proxy with TLSv1.2/1.3, ECDHE ciphers, HSTS | v0.6.3 |
| **Container** | Non-root user, read-only filesystem, ProtectSystem=strict | v0.6.3 |
| **Authentication** | HMAC-SHA256 API keys, session tokens, httpOnly cookies | v0.6.0 |
| **Authorization** | 3-tier RBAC (admin/operator/viewer) | v0.6.0 |
| **Policy** | Deterministic pre-brain/post-brain/pre-tool guardrails | v0.6.1 |
| **Alerting** | 5 external channels, HMAC-signed webhooks, auth brute-force detection | v0.6.2 |
| **Vault** | Fernet encryption, OS keyring, active network token revocation, Gibson Kill Switch | v0.6.3.2 |
| **Analysis** | Local LLM reasoning + confidence scoring + chain safety rails | v0.5.0+ |
| **Monitoring** | Event Ledger + Policy Events + Alert History — 3 audit trails | v0.5.0+ |
## 🛡️ OWASP Agentic Security Initiative (ASI) Coverage
| ASI Threat | ButterClaw Mitigation |
| --- | --- |
| ASI-01: Excessive Agency | Brain confidence gating + ChainExecutor MAX_STEPS=10 + Policy Engine pre-tool scope (v0.5.0+) |
| ASI-02: Insufficient Access Control | 3-tier RBAC + per-key rate limiting + HMAC-SHA256 auth (v0.6.0) |
| ASI-03: Knowledge Poisoning | Local-first LLM — no external training data ingestion. Watcher monitors OS telemetry, not user content (v0.1.0+) |
| ASI-04: Identity & Credential Abuse | ButterVault + OAuth lifecycle + active token revocation + Gibson (v0.6.3.2) |
| ASI-05: Cascading Failures | ChainExecutor safety rails: MAX_STEPS=10, TIMEOUT=60s (v0.5.1) |
| ASI-06: Indirect Prompt Injection | Policy Engine pattern matching on payloads (v0.6.1) |
| ASI-07: Insufficient Monitoring | Event Ledger + Policy Events + Alert History — 3 audit trails (v0.5.0+) |
| ASI-09: Inadequate Logging | 3 audit trails + external notification via Alert Dispatcher (v0.6.2) |
| ASI-10: Uncontrolled Escalation | Gibson panic destroys all credentials atomically + alert fires before destruction (v0.6.2) |
## 📋 Version History
| Version | Codename | Date | Milestone |
| --- | --- | --- | --- |
| **v0.6.3.2** | The Exoskeleton: Active Assassination | 2026-05-21 | TLS routing, SSRF lockdown, active token revocation |
| **v0.6.3.1** | Deployment Packaging (Docker Edition) | 2026-05-07 | Docker bridge, Vault deadlock fix, Windows volume fixes |
| **v0.6.3** | The Exoskeleton: Deployment Packaging | 2026-05-01 | config.py, Docker, systemd, nginx, backup/restore |
| **v0.6.2** | The Exoskeleton: Alert Dispatcher | 2026-05-01 | 5 channels, 9 events, HMAC signing, brute-force detection |
| **v0.6.1** | The Exoskeleton: Policy Engine | 2026-05-01 | 3-scope pipeline, 16 operators, DRIFT pattern |
| **v0.6.0** | The Exoskeleton: API Gateway & Auth | 2026-04-20 | HMAC-SHA256, 3-tier RBAC, session tokens |
| **v0.5.2** | ButterVault OAuth | 2026-04-16 | OAuth 2.0 flows, token refresh, Gibson destroys OAuth |
| **v0.5.1** | Tool Chaining | 2026-04-16 | ChainExecutor, multi-step execution, safety rails |
| **v0.5.0** | The Nervous System | 2026-04-14 | Event Ledger, SSE Transport, MCP Manager, Memory |
| **v0.4.x** | MCP Transport Refactor | 2026-04-10 | Modular transport, JSON-RPC, CSP fixes |
| **v0.3.x** | Routing Dashboard | 2026-04-04 | routing.html, advanced config UI |
| **v0.2.0** | ButterVault | 2026-04-01 | Encrypted credentials, Gibson Kill Switch |
| **v0.1.0** | Initial Release | 2026-03-17 | Core analysis, watcher, dashboard, MCP tools |
## 🗺️ Roadmap — The Exoskeleton (v0.6.x)
| Pillar | Version | Status | Deliverable |
| --- | --- | --- | --- |
| 1. API Gateway & Auth | v0.6.0 | ✅ Delivered | HMAC-SHA256, RBAC, sessions |
| 2. Policy Engine | v0.6.1 | ✅ Delivered | 3-scope pipeline, DRIFT pattern |
| 3. Alert Dispatcher | v0.6.2 | ✅ Delivered | 5 channels, HMAC webhooks |
| 4. Deployment Packaging | v0.6.3 | ✅ Delivered | Docker, systemd, config.py |
**The Exoskeleton is complete.** All four pillars are shipped.
## ⚡ Quick Start
### Docker (Recommended Full-Stack Boot)
ButterClaw's auto-healing architecture allows it to build its database, generate secure keys, and wire up its alert networks from a completely blank slate. Assuming local ollama is running with a local model. Suggestion: `ollama pull Modelfile.example`, will get you a 'butterclaw-optimized:latest' version of the Gemma 4:e4b open-sourced model.
git clone [https://github.com/butterclaw-tech/butterclaw.git](https://github.com/butterclaw-tech/butterclaw.git)
cd butterclaw && git checkout dev
# 1. Configure your environment
cp .env.example .env
# Edit .env — set BUTTERCLAW_INSTANCE_ID, BUTTERCLAW_ALERT_NTFY_TOPIC, etc.
# 2. Generate Local TLS Certificates (For Nginx)
# Windows users without openssl installed can use this temporary container
# to generate the required keys directly into the project folder:
mkdir -p nginx/certs
docker run --rm -v "${PWD}/nginx/certs:/certs" alpine/openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /certs/butterclaw.key -out /certs/butterclaw.crt -subj "/CN=localhost"
# 3. Ignite the Exoskeleton (Builds and boots the entire stack)
docker compose up -d --build
# 4. Grab your Bootstrap Admin API Key! (Look for the 🔐 [AUTH] line)
docker compose logs -f butterclaw
### systemd (Bare-Metal VPS)
git clone [https://github.com/butterclaw-tech/butterclaw.git](https://github.com/butterclaw-tech/butterclaw.git)
cd butterclaw && git checkout dev
# Install dependencies
pip install -r requirements.txt
# Install Ollama
curl -fsSL [https://ollama.com/install.sh](https://ollama.com/install.sh) | sh
ollama pull gemma4:e4b
# Configure
cp .env.example /etc/butterclaw.env
# Edit /etc/butterclaw.env
# Install service
sudo cp systemd/butterclaw.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now butterclaw
# Verify
journalctl -u butterclaw -f
curl http://localhost/api/health
### Bare-Metal (Development)
git clone [https://github.com/butterclaw-tech/butterclaw.git](https://github.com/butterclaw-tech/butterclaw.git)
cd butterclaw && git checkout dev
pip install -r requirements.txt
ollama pull gemma4:e4b
# ollama pull Modelfile.example <- To get the 'butterclaw-optimized:latest' model
cp .env.example .env
python server.py
On first run, the bootstrap CLI prints your admin API key to the terminal. Save it — it's shown exactly once.
## 📊 Diagnostic Tests
All modules include standalone diagnostic suites:
| Module | Command | Tests |
| --- | --- | --- |
| `config.py` | `python config.py` | 21/21 |
| `alert_dispatcher.py` | `python alert_dispatcher.py` | 14/14 |
| `policy_engine.py` | `python policy_engine.py` | 16/16 |
| `auth.py` | `python auth.py` | 10/10 |
## 📄 License
MIT License. See [LICENSE](LICENSE) for details.
🦞 ButterClaw v0.6.3.2 — The Exoskeleton (Active Tools)
Deterministic guardrails for probabilistic reasoning. Evaluation before execution.
The Sentinel never goes silent. We watch the room.
Built with unautclated telemetry. Yes, unautclated. 🦞
butterclaw.tech · GitHub