# 🦞 NanoClaw → Clawdie on FreeBSD 15

Version tracking — from NanoClaw base to Clawdie with FreeBSD setup

Last updated: 06.03.2026 · ← Back to Clawdie PRD

## 📊 Base Version

Component | Version | Source
--- | --- | ---
NanoClaw | `main` branch | github.com/openclaw/nanoclaw
Base commit | Tracked in `.nanoclaw/state.json`

## 🔧 Applied Skills (Customizations)

Skills transform the base NanoClaw into Clawdie:

Skill | Status | Description
--- | --- | ---
`/add-telegram` | ✓ Applied | Telegram channel support
`/add-voice-transcription` | ✓ Applied | Whisper voice note transcription
`/add-gmail` | ✓ Applied | Gmail integration
`/add-slack` | ✓ Applied | Slack channel support
`/add-discord` | ✓ Applied | Discord channel support
`/add-telegram-swarm` | ✓ Applied | Agent swarm teams in Telegram
`/x-integration` | ✓ Applied | X (Twitter) posting/replying
`/convert-to-apple-container` | ✓ Applied | Apple Container runtime
`/qodo-pr-resolver` | ✓ Applied | AI-powered PR review
`/get-qodo-rules` | ✓ Applied | Load coding rules from Qodo

## 😈 FreeBSD 15 Setup

### System Requirements

Requirement | Value
--- | ---
OS | FreeBSD 15.0-RELEASE
Hostname | osa
Architecture | amd64 (x86_64)
Runtime | FreeBSD Jail (native)
Node.js | v24+ (via pkg or nvm)
Python | 3.12.12 + uv package manager
Filesystem | ZFS
User | clawdie

### Current ZFS Setup

    NAME                       USED  AVAIL  REFER  MOUNTPOINT
    zroot                     6.01G  89.4G   424K  none
    zroot/ROOT                5.83G  89.4G   424K  none
    zroot/ROOT/default        5.83G  89.4G  4.90G  /
    zroot/home                 152M  89.4G   156K  /home
    zroot/home/clawdie         152M  89.4G   152M  /home/clawdie
    zroot/tmp                 3.07M  89.4G  3.07M  /tmp
    zroot/var                 11.8M  89.4G   424K  /var

### Installation

#### 1. Create ZFS Dataset for Jail

    # Create jail dataset (using ZFS for snapshots and quotas)
    sudo zfs create -o mountpoint=/jails zroot/jails
    sudo zfs create zroot/jails/clawdie
    sudo zfs create zroot/jails/clawdie/home

    # Verify
    zfs list | grep clawdie

#### 2. Create Jail Configuration

    # Create jail configuration
    sudo vi /etc/jail.conf.d/clawdie.conf

Add:

    clawdie {
      host.hostname = "ai.clawdie.si";
      ip4.addr = 192.168.1.xxx;
      path = "/jails/clawdie";
      mount.fstab = "/etc/fstab.clawdie";
      mount.devfs;
      devfs_ruleset = 4;
      exec.start = "/bin/sh /etc/rc";
      exec.stop = "/bin/sh /etc/rc.shutdown";
    }

#### 3. Install FreeBSD Base

    # Download and extract base system
    cd /tmp
    fetch http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/15.0-RELEASE/base.txz
    sudo tar -xpf base.txz -C /jails/clawdie

#### 4. Configure Mount Points

    # Create fstab for jail mounts
    sudo vi /etc/fstab.clawdie

Add:

    /home/clawdie  /jails/clawdie/home/clawdie  nullfs  rw  0  0

#### 5. Start Jail and Install Dependencies

    # Enable jails at boot
    sudo sysrc jail_enable=YES

    # Start jail
    sudo service jail start clawdie

    # Verify jail is running
    jls

    # Install packages inside jail
    sudo pkg -j clawdie install node24 npm git python312 py312-uv

    # Enter jail
    sudo jexec clawdie /bin/sh

#### 6. Verify Python and Node.js

    # Inside jail - verify installations
    python --version
    # Python 3.12.12

    uv --version
    # uv 0.x.x

    node --version
    # v24.x.x

#### 7. Setup NanoClaw Inside Jail

    # Inside jail
    cd /home/clawdie
    git clone https://codeberg.org/clawdie/clawdie.git nanoclaw
    cd nanoclaw

    # Install dependencies (using uv for Python packages if needed)
    npm install
    npm run setup

### Known Limitations on FreeBSD

- Container Runtime: NanoClaw uses FreeBSD jails instead of Docker for native performance and security.
- Apple Container: Not available on FreeBSD (macOS only).
- Headless Browser: Playwright may need additional dependencies.

## ⚙️ Configuration Differences

Setting | NanoClaw Default | Clawdie Custom
--- | --- | ---
Main channel | WhatsApp | Telegram
Date format | `en-US` locale | `de-DE` locale (European)
Memory | Local files | Supabase (planned)
Identity | None | SOUL.md + IDENTITY.md
Operator console | Logs only | tmux glass-pane

## 📁 File Changes

### Modified from Base

File | Change
--- | ---
`src/index.ts` | Added channel routing for Telegram, Gmail, Slack, Discord
`src/config.ts` | Added channel configurations
`src/container-runtime.ts` | Apple Container support
`container/agent-runner/src/index.ts` | Voice transcription, Gmail tools
`AGENTS.md` | European date format, custom rules

### Added (Not in Base)

    src/channels/telegram.ts
    src/channels/gmail.ts
    src/channels/slack.ts
    src/channels/discord.ts
    skills-engine/
    .agent/skills/add-telegram/
    .agent/skills/add-gmail/
    .agent/skills/add-slack/
    .agent/skills/add-discord/
    .agent/skills/add-telegram-swarm/
    .agent/skills/add-voice-transcription/
    .agent/skills/x-integration/
    .agent/skills/convert-to-apple-container/
    .agent/skills/qodo-pr-resolver/
    .agent/skills/get-qodo-rules/

## 🔄 Update Process

    # Check for updates
    npm run update:preview

    # Apply updates (merges with skills)
    npm run update

The skills engine handles rebase automatically, preserving all customizations.

## 🔗 Links

- Clawdie PRD
- NanoClaw Upstream
- Clawdie Domain
- Discord