2026-06-20 10:56:43 +02:00
---
name: iso-visuals
description: Out-of-box visual experience for Clawdie ISO — panel health indicator, identity wallpaper, and one-click Join Hive launcher. Integrates into Xfce desktop on first boot.
triggers:
- "iso visuals"
- "out of box experience"
- "desktop wallpaper"
- "panel indicator"
- "join hive launcher"
- "first boot appearance"
- "clawdie desktop"
---
# ISO Visuals — Out-of-Box Desktop Experience
Three improvements that replace the "boot to a terminal" feeling with a calm,
2026-06-20 12:05:08 +02:00
informative desktop: a panel health indicator helper, a machine-identity wallpaper
helper, and a one-click Join Hive launcher.
2026-06-20 10:56:43 +02:00
2026-06-20 12:05:08 +02:00
Keep this skill honest: scripts can be staged before every script is wired into
the default panel/session. Do not claim default-panel or first-login behavior until
it is proven in the live ISO or by mounted-image plus runtime checks.
2026-06-20 10:56:43 +02:00
2026-06-20 12:05:08 +02:00
## 1. Panel Health Indicator Helper
Shows Colibri daemon status as Xfce genmon markup. When wired into a Generic Monitor
panel item, it displays a green/red dot with agent count and started-task count;
clicking opens a terminal with full `colibri status` output.
2026-06-20 10:56:43 +02:00
**Script:** `scripts/colibri-panel-indicator.sh`
2026-06-20 12:05:08 +02:00
**ISO staging:**
2026-06-20 10:56:43 +02:00
```bash
2026-06-20 12:05:08 +02:00
install -m 755 scripts/colibri-panel-indicator.sh \
"${LIVE_ROOT}/usr/local/bin/colibri-panel-indicator"
```
**Optional runtime/manual panel wiring:**
2026-06-20 10:56:43 +02:00
2026-06-20 12:05:08 +02:00
```bash
# Requires xfce4-genmon-plugin. Add manually from Panel → Add New Items → Generic Monitor,
# or wire into seeded panel XML only after that plugin is in the ISO package list.
2026-06-20 10:56:43 +02:00
xfconf-query -c xfce4-panel -p /plugins/plugin-20 -n -t string -s genmon
xfconf-query -c xfce4-panel -p /plugins/plugin-20/command -n -t string -s /usr/local/bin/colibri-panel-indicator
```
2026-06-20 12:05:08 +02:00
The indicator uses `<txt>` /`<tool>` /`<txtclick>` genmon markup. It depends on
2026-06-20 12:16:02 +02:00
`nc` and `python3` ; warns with `⚠ missing deps` if either is absent instead of
failing silently. Socket-down and no-response states are distinct, each with
actionable tooltip text.
2026-06-20 10:56:43 +02:00
2026-06-20 12:05:08 +02:00
## 2. Identity Wallpaper Helper
2026-06-20 10:56:43 +02:00
2026-06-20 12:05:08 +02:00
Generates a desktop background with machine identity overlaid: hostname,
Tailscale IP when available, Colibri socket/port status, and FreeBSD release.
2026-06-20 10:56:43 +02:00
**Script:** `scripts/clawdie-wallpaper-gen.sh`
2026-06-20 12:05:08 +02:00
**ISO staging:**
2026-06-20 10:56:43 +02:00
```bash
2026-06-20 12:05:08 +02:00
install -m 755 scripts/clawdie-wallpaper-gen.sh \
"${LIVE_ROOT}/usr/local/bin/clawdie-wallpaper-gen"
```
**Preferred base wallpaper:**
```text
/usr/local/share/clawdie-iso/wallpapers/clawdie-operator-bg.png
```
The helper falls back to the stock XFCE background, then to a generated dark solid
2026-06-20 12:10:35 +02:00
background under project-local `tmp/` when a checkout is available. On the live USB,
where there is usually no project root, it uses an app-owned cache directory such as
`$XDG_CACHE_HOME/clawdie` or `$HOME/.cache/clawdie` . It should not try to create
files under `/usr/local/share` at runtime unless explicitly requested by the operator.
2026-06-20 10:56:43 +02:00
2026-06-20 12:26:20 +02:00
**Optional runtime/session wiring:** the helper prints the output path it chose on
stdout (human note goes to stderr), so callers capture it rather than guessing a
path. XFCE keys backdrops by connector name (`monitorHDMI-1` , `monitoreDP-1` , …),
not a fixed `monitor0` , so set every `*/last-image` property:
2026-06-20 10:56:43 +02:00
2026-06-20 12:05:08 +02:00
```bash
2026-06-20 12:26:20 +02:00
WP=$(/usr/local/bin/clawdie-wallpaper-gen)
for p in $(xfconf-query -c xfce4-desktop -l | grep '/last-image$'); do
xfconf-query -c xfce4-desktop -p "$p" -s "$WP"
done
2026-06-20 10:56:43 +02:00
```
2026-06-20 12:05:08 +02:00
Requires ImageMagick (`ImageMagick7` in the ISO package list; `magick` or
`convert` command accepted). Tailscale is optional; absence should produce
`tailscale offline` , not an error.
2026-06-20 10:56:43 +02:00
**Format:**
2026-06-20 12:05:08 +02:00
```text
2026-06-20 10:56:43 +02:00
┌────────────────────────────────────┐
│ │
│ Clawdie OS │
│ │
│ hostname osa │
2026-06-21 20:12:45 +02:00
│ tailscale ${OSA_TS_IP} │
2026-06-20 12:05:08 +02:00
│ colibri socket 9190 │
2026-06-20 10:56:43 +02:00
│ jail 15.0-RELEASE-p4 │
│ │
└────────────────────────────────────┘
```
## 3. Join Hive Launcher
2026-06-20 12:05:08 +02:00
Desktop icon that runs agent registration in a visible terminal: check daemon →
check Vaultwarden bootstrap fields without printing secrets → detect capabilities →
register → pause for operator review.
2026-06-20 10:56:43 +02:00
**Script:** `scripts/clawdie-join-hive.sh`
2026-06-20 12:05:08 +02:00
2026-06-20 10:56:43 +02:00
**Desktop entry:** `scripts/clawdie-join-hive.desktop`
2026-06-20 12:05:08 +02:00
**ISO staging:**
2026-06-20 10:56:43 +02:00
```bash
2026-06-20 12:05:08 +02:00
install -m 755 scripts/clawdie-join-hive.sh \
"${LIVE_ROOT}/usr/local/bin/clawdie-join-hive"
install -m 644 scripts/clawdie-join-hive.desktop \
"${LIVE_ROOT}/usr/local/share/applications/Clawdie Join Hive.desktop"
install -m 644 scripts/clawdie-join-hive.desktop \
"${LIVE_ROOT}/home/clawdie/Desktop/Join Hive.desktop"
2026-06-20 10:56:43 +02:00
```
2026-06-20 12:05:08 +02:00
The desktop entry must call the installed binary path, without a `.sh` suffix:
```ini
Exec=xfce4-terminal --title "Join Hive" --geometry=80x24 --command "/usr/local/bin/clawdie-join-hive"
```
The launcher runs in `xfce4-terminal` with geometry 80x24 and pauses on
"Press Enter" so the operator reads the result before the window closes.
**Idempotency expectations:**
2026-06-20 10:56:43 +02:00
2026-06-20 12:05:08 +02:00
- safe to double-click multiple times;
- treats already-registered / `UNIQUE constraint` agent-name responses as an
idempotent success;
- does not fail just because `/usr/local/etc/colibri/provider.env` is mode `0600` ;
- uses `mdo -u root` for privileged checks/start where available;
2026-06-20 12:26:20 +02:00
- on success, generates the identity wallpaper at the generator's chosen path (no
host-global `/tmp` ) and applies it across all monitors as visual confirmation;
2026-06-20 12:05:08 +02:00
- never prints Vaultwarden credentials or provider keys.
2026-06-20 10:56:43 +02:00
2026-06-20 12:05:08 +02:00
## Build integration (`clawdie-iso` `build.sh`)
2026-06-20 10:56:43 +02:00
2026-06-20 12:05:08 +02:00
Current staging pattern:
2026-06-20 10:56:43 +02:00
```bash
install -m 755 scripts/colibri-panel-indicator.sh "${LIVE_ROOT}/usr/local/bin/colibri-panel-indicator"
install -m 755 scripts/clawdie-wallpaper-gen.sh "${LIVE_ROOT}/usr/local/bin/clawdie-wallpaper-gen"
install -m 755 scripts/clawdie-join-hive.sh "${LIVE_ROOT}/usr/local/bin/clawdie-join-hive"
2026-06-20 12:05:08 +02:00
install -m 644 scripts/clawdie-join-hive.desktop "${LIVE_ROOT}/usr/local/share/applications/Clawdie Join Hive.desktop"
install -m 644 scripts/clawdie-join-hive.desktop "${LIVE_ROOT}/home/clawdie/Desktop/Join Hive.desktop"
2026-06-20 10:56:43 +02:00
```
2026-06-20 12:05:08 +02:00
Add/keep `ImageMagick7` in the ISO package list for the wallpaper generator.
2026-06-20 10:56:43 +02:00
## Verification
After booting the ISO:
2026-06-20 12:05:08 +02:00
1. **Mounted-image:** `/usr/local/bin/clawdie-join-hive` ,
`/usr/local/bin/clawdie-wallpaper-gen` , and `/usr/local/bin/colibri-panel-indicator`
exist and are executable.
2. **Desktop launcher:** `Join Hive.desktop` exists; its `Exec=` points to
`/usr/local/bin/clawdie-join-hive` with no `.sh` suffix.
3. **Join Hive:** double-click opens a terminal, starts/checks `colibri_daemon` ,
reports provider.env status without exposing secrets, registers or reports
already registered, then waits for Enter.
4. **Wallpaper helper:** running `/usr/local/bin/clawdie-wallpaper-gen` writes an
2026-06-20 12:10:35 +02:00
image under project-local `tmp/` when run from a checkout, or an app-owned live
2026-06-20 12:26:20 +02:00
cache directory when no project root exists, using the Clawdie wallpaper as base,
and prints that path on stdout (the human `Wallpaper: …` note goes to stderr).
2026-06-20 12:05:08 +02:00
5. **Panel indicator helper:** running `/usr/local/bin/colibri-panel-indicator`
prints genmon XML. Only claim panel visibility after genmon is packaged and
wired into the seeded panel or configured manually.