Some checks failed
CI / ci (pull_request) Has been cancelled
--- Build: FAIL | Tests: FAIL
4.4 KiB
4.4 KiB
Clawdie on FreeBSD
Native FreeBSD deployment with the Warden runtime on Bastille-managed jails.
Overview
Clawdie is a personal AI assistant for FreeBSD 15 with:
- Telegram as the active user channel
- PI (
@earendil-works/pi-coding-agent) as the active coding runtime - Warden as the project name for the isolated execution layer
- Bastille as the host-side jail manager
- ZFS for snapshots, quotas, and rollback points
Current Proven State
Validated on 08.mar.2026 by Sam & Codex:
controlplanethick VNET jail onwarden0- hostname
controlplane.clawdie.local - IP
10.0.0.100/24 dbthick VNET jail onwarden0- hostname
db.clawdie.local - IP
10.0.0.2/24 - PostgreSQL
18.1running insidedb - host
pfNAT for10.0.0.0/24 - host forwarding enabled
- Sanoid policies active for
dbandcontrolplane
Naming Model
- FreeBSD jail: isolation primitive
- Bastille: jail manager
- Warden runtime: Clawdie's isolated execution model built on top of jails
See docs/public/architecture/warden.md.
Canonical Network
- host bridge:
warden0 - host gateway:
10.0.0.1 - control-plane jail:
controlplane - control-plane hostname:
controlplane.clawdie.local - control-plane IP:
10.0.0.100 - database jail:
db - database hostname:
db.clawdie.local - database IP:
10.0.0.2 - worker range:
10.0.0.101+
Quick Start
git clone https://codeberg.org/Clawdie/Clawdie-AI.git /home/clawdie/clawdie-ai
cd /home/clawdie/clawdie-ai
pkg install node24 npm git python312 uv rsync
npm install
npm install -g @earendil-works/pi-coding-agent
# If setup.sh did not launch onboarding automatically:
npm run wizard
Then:
- Review
.env - Configure Telegram bot token and provider credentials
- Follow the Bastille and networking docs below
- Run
npm run build - Start the service with
./run-clawdie.sh
Host Prerequisites
The current FreeBSD deployment depends on:
- ZFS pool
zroot - Bastille configured with
bastille_zfs_enable="YES" - persistent host bridge
warden0 gateway_enable="YES"pfrules for Warden NAT and egress- dedicated Bastille resolver file instead of inherited Tailscale resolver state
Bastille and Jail Docs
- docs/public/architecture/bastille.md
- docs/public/architecture/jail-networking.md
- docs/public/architecture/freebsd-jail-implementation.md
- docs/internal/POSTGRES-MEMORY.md
- docs/public/operate/monitoring.md
Live Docs
https://domedog.pro/https://domedog.pro/tailscale-jails-on-freebsd.htmlhttps://domedog.pro/postgres-memory-plan.htmlhttps://domedog.pro/reduced-ai-bootstrap-plan.htmlhttps://domedog.pro/warden-network-troubleshooting.htmlhttps://domedog.pro/pf.conf.txthttps://domedog.pro/sanoid.conf.txt
Runtime Layers
controlplane
Role:
- main Clawdie control-plane jail
- Telegram intake
- scheduling
- Warden task dispatch
Profile:
freebsd-jailthickvnet- persistent
db
Role:
- PostgreSQL memory backend
- persistent service
Profile:
freebsd-jailthickvnet- persistent
Future Workers
worker= thin, shared, ephemeralnetworkedWorker= thin, VNET, ephemeralbrowserVm= future Linux VM executor for browser/GUI automation
Snapshot Policy
Manual milestone snapshots:
- human-named
- day-first
- month abbreviation
Examples:
@postgres18-ready-08.mar.2026@fresh-08.mar.2026
Automatic snapshots:
- handled by Sanoid
- keep Sanoid's internal
autosnap_...naming
Current automated Sanoid targets:
zroot/clawdie-runtime/jails/dbzroot/clawdie-runtime/jails/controlplane
Monitoring
Current operator checks:
npm run doctorlogs/clawdie.loglogs/clawdie.error.logzfs list -t snapshotsanoid --readonly --verbose --take-snapshots
Notes
- PostgreSQL currently runs successfully inside
db allow.sysvipc=1is required for PostgreSQLinitdb- VNET jail creation must include
-g 10.0.0.1 - Bastille should use a dedicated resolver file instead of inheriting host Tailscale DNS
pfmust include both NAT andwarden0pass rules for jailed egress
Attribution
FreeBSD Warden bring-up milestone validated on 08.mar.2026 by Sam & Codex.