Codex restructured docs on 5 Apr (cc37d2c) into public/ and internal/
subdirectories. This commit completes the alignment work by updating all
references across skills, agents, and generated files.
Changes:
Skills Documentation:
- docs-deployment/SKILL.md: Update doc paths (docs/INSTALL.md → docs/public/install/install.md)
- docs-deployment/INTEGRATION.md: Update example paths for new structure
- agent-setup/SKILL.md: Update references
- ansible-freebsd/SKILL.md: Update references
Agents & Conventions:
- AGENTS.md: Add tmux "testing" window guideline for long-running commands
- AGENTS.md: Update doc path references (INSTALL.md → install.md lowercase)
- README-CLAWDIE.md: Update doc paths
- CROWDIN.md: Update structure references
Build System:
- setup/cms.ts: Improve frontmatter generation (skip files with existing h1)
- scripts/memory/embed-docs.py: Adjust for new structure
- docs-deployment/DOCUMENTATION-POLICY.md: Update guidelines
HTML/Web Output:
- html/: Version bumps, link fixes, manifest updated
- Reflect new public/ structure in rendered docs
Validation:
- All skills reference docs correctly
- Install/setup docs now at docs/public/install/
- Docs build and serve correctly (verified 6 Apr)
- 603 tests passing (from Codex's build)
Co-Authored-By: Codex (Agent) <codex@clawdie.si>
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
---
Build: pass | Tests: pass — Tests 603 passed (603)
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 (
@mariozechner/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 py312-uv rsync
npm install
npm install -g @mariozechner/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.