- setup/db.ts: new setup step that auto-creates the ${AGENT_NAME}-db jail,
installs PostgreSQL 17 + pgvector, configures pg_hba trust for the vnet
subnet, creates roles/databases, applies pgvector/pgcrypto extensions and
the hybrid-search schema; fully idempotent
- setup/index.ts: register 'db' step
- src/memory-lifecycle.ts: initMemoryPool() now throws on failure instead of
returning false; removes graceful degradation path
- src/index.ts: treat memory DB unavailability as fatal (logger.fatal +
process.exit(1)) with actionable hint to run --step db
- src/memory-pg.ts: import MEMORY_DB_URL from config.ts (fixes wrong default
IP .2 → .3 and removes hardcoded clawdie_brain/ai_brain names)
- src/config.ts: export SUBNET_BASE so setup/db.ts can import it
- README.md: db is required, not optional; added --step db to quick start
- docs/POSTGRES-MEMORY.md: remove install-time questions, document mandatory
status, fix jail name (${AGENT_NAME}-db) and IP (${SUBNET_BASE}.3),
document split-brain table with both databases
- html/docs-clawdie-si/docs/split-brain.html: rename Brain A → Agent System
Skills, Brain B → User/Agent Memory; add mandatory info-box; update flow
- html/docs-clawdie-si/docs/install.html: add PostgreSQL db jail to prereqs,
add --step db and --step skills-memory to quick start
- html/docs-clawdie-si/index.html: rename all remaining Brain A/B references
to Agent System Skills / User/Agent Memory
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Introduces a Watchdog that sits above GroupQueue and provides dynamic
resource control:
- Run modes: auto / slow / fast / permanent — each with preset
concurrency limits, idle timeouts, poll intervals, and memory
thresholds
- Memory throttle: reads vm.stats.vm.v_free_count via sysctl (fallback
to os.freemem) and drops max concurrency to 1 when free RAM falls
below mode threshold
- IPC socket at /tmp/<agent>-watchdog.sock — operator can query status
or switch mode without restarting the service
- GroupQueue.setMaxConcurrent() / getActiveCount() / getQueuedCount()
for runtime limit control
- Idle timeout and poll interval read dynamically from watchdog; -1 in
permanent mode suppresses idle-kill entirely
- WATCHDOG_MODE env var sets initial mode (default: auto)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
jail-runner.test.ts: add ASSISTANT_LOCALE, DISPLAY_LOCALE, SETUP_LOCALE,
SYSTEM_LOCALE, TIMEZONE to config.js mock (new env vars forwarded to jail)
jail-config.test.ts: derive subnet base from AGENT_GATEWAY_IP instead of
hardcoding 10.0.0 — .env uses a different subnet on this host
locale-profile.ts: fix normalizeSystemLocale replacing UTF-8 hyphen with
underscore — only replace hyphens in the base locale (before the dot),
preserve the encoding suffix as-is
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- add-stripe: Stripe tools (balance, customers, invoices, payment links,
refunds, subscriptions) registered in ipc-mcp-stdio via STRIPE_SECRET_KEY
- add-protonmail: send_email tool via ProtonMail SMTP submission token,
registered in ipc-mcp-stdio via PROTONMAIL_SMTP_USER + PROTONMAIL_SMTP_TOKEN
- Both secrets forwarded to jail via encrypted stdin (jail-runner.ts)
- jail/agent-runner: nodemailer + stripe deps added; dynamic import pattern
so tools are inert when env vars are absent
- Docs: update stripe-agents.html to reflect actual skill, add protonmail.html,
update docs/index.html with new cards and quick reference
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- src/config.ts: read AGENT_SUBNET_BASE first, WARDEN_SUBNET_BASE as
backward-compat fallback; add AGENT_SUBNET_BASE to envConfig read list
- src/memory-pg.ts: same AGENT_SUBNET_BASE → WARDEN_SUBNET_BASE fallback
- src/jail-runner.ts: JAIL_NAME default changed from 'controlplane' to
'{AGENT_NAME}-worker' — matches the jail created by setup/jails step;
import AGENT_NAME from config
- src/jail-runner.test.ts: add AGENT_NAME to config mock
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- src/jail-config.ts: full rewrite — drop WARDEN_*/controlplane, introduce
AGENT_BRIDGE_NAME=clawdie0, AGENT_JAIL_PROFILES, AGENT_SUBNET_*, AGENT_GATEWAY_IP,
getWorkerBastillePlan(), getDefaultJailConfigForProfile(); all jail names
derive from process.env.AGENT_NAME (default: clawdie)
- src/jail-config.test.ts: rewrite tests to match new AGENT_* API
- setup/jails.ts: new step replacing jail.ts; creates {AGENT_NAME}-worker jail
via Bastille using shared clawdie0 bridge
- setup/jail.ts: deleted (replaced by jails.ts)
- setup/index.ts: replace 'jail' step with 'jails', add 'pi-config',
remove 'network'/'setup-wizard'/'telegram-auth' steps
- setup/platform.ts: add isDesktop() and hasBrowser()
- setup/platform.test.ts: add tests for new functions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
These tests validate the jail environment and should only run
when executed inside the controlplane jail. On the host, they
are now properly skipped using describe.skipIf(!inJail).
Rename clawdie-freebsd skill to agent-setup, add AGENT_NAME as
single source of truth in config.ts, split database config into
skills DB + memory DB, and add working Astro Starlight example
for CMS integration testing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace /tmp with project-relative tmp/ directory
- Add CLAWDIE_TMP_DIR env var with project-relative default
- Add TMP_DIR, TMP_TESTS_DIR, TMP_IPC_DIR, TMP_SKILLS_DIR to config.ts
- Update all test files to use TMP_TESTS_DIR
- Update shell scripts to use project-relative tmp/skills/
- Update agent-runner IPC cleanup to use /workspace/ipc/input.json
- Update Ansible playbooks to use env vars with fallbacks
- Add CMS resource limits
- Add jail-resource-limits.yaml playbook
- Add setup-wizard.ts (FreeBSD bsdinstall-style TUI)
- Add network.ts bootstrap step
- Remove hardcoded public gateway IP
Replace all hardcoded IPs (192.168.100.x) and domains (clawdie.si)
with configurable placeholders. Real values now live exclusively in
.env (gitignored).
Network: code defaults to 10.0.0.x, configurable via WARDEN_SUBNET_BASE,
WARDEN_GATEWAY, WARDEN_CONTROL_PLANE_IP env vars in jail-config.ts.
Domain: code defaults to clawdie.local, configurable via CLAWDIE_DOMAIN
env var. Subdomain scheme: controlplane/db/cms/gui.{domain}.
Also includes PGVector Phase 0 prep:
- Created ai_brain database with pgvector extensions
- Added pg + @types/pg npm packages
- Added CLAWDIE_DB_URL to .env
- Renamed db from 'clawdie' to 'ai_brain' across Ansible and docs
- Resolved embedding model: OpenRouter text-embedding-3-large at 1536d
- Added docs/pgvector-install-log.md
Renamed ai.clawdie.si → controlplane.{domain} (more descriptive).
Renamed vm.clawdie.si → gui.{domain}.
76 files updated across source, tests, skills, docs, Ansible, and scripts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>