Commit graph

464 commits

Author SHA1 Message Date
da3f06f7da docs: rename 'fake-agent' → 'sample-agent' (matches colibri test rename)
Harness-neutral, lighter wording for the optional local test-double agent
(colibri-test-agent), matching the colibri-side fake→sample rename. Only the
two references that named it 'fake-agent' (build.cfg comment, AGENTS.md
staging note); the unrelated /tmp/fake-usb example path in FIRSTBOOT.md is a
different context and left as-is.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 18:20:55 +02:00
6275fee97e docs: harness-neutral cleanup + restore green markdown gate
Pi-era residue in current-tense docs/strings (CHANGELOG history left intact):
- ONBOARDING-SIMPLIFICATION: COLIBRI_AUTOSPAWN_PI -> COLIBRI_AUTOSPAWN; 'Pi
  agent' -> 'agent'.
- clawdie-join-hive.sh: user-facing 'Pi agent is live' / 'no Pi agent' ->
  harness-neutral (default agent is now zot).
- clawdie-live-seed.README.txt: COLIBRI_AUTOSPAWN_PI -> COLIBRI_AUTOSPAWN.
- stage-colibri-iso.sh provider.env.sample: the AUTOSPAWN_ARGS example showed
  '--mode json' (invalid for the zot default); note the default is
  harness-derived (zot -> rpc, pi -> --mode json).

Also restore the markdown format gate: 5 docs from the 0.12.0 work were
prettier-dirty, so ./scripts/check-format.sh was already failing on main (the
gate was red and unenforced — same pattern as the colibri build break).
prettier --write brings them to style; gate is green again. No prose changes
in those 5 — formatting only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 18:08:58 +02:00
29ff8bd3bd Merge pull request 'feature/0.12.0' (#123) from feature/0.12.0 into main
Reviewed-on: #123
2026-06-23 16:55:40 +02:00
d7f583cb8f docs: USB→mother MCP setup — step-by-step guide with real hosts
5 steps from nothing to working: SSH key + config → enable
external MCP → register mother server → install hw-probe →
restart daemon. Uses real hosts (osa.smilepowered.org at
100.72.229.63, USB as clawdie-usb) with l33t placeholder keys.
ASCII architecture diagram showing persistent SSH child process,
JSON-RPC over stdin/stdout, mother-side forced-command wrapper.

Includes: end-to-end test, future autospawn flow, and
troubleshooting table for all common failure modes.
2026-06-23 16:46:18 +02:00
4372f2125f docs: USB→mother MCP connection plan — 5 steps
USB can connect to mother right now with 0.11 daemon —
colibri_external_mcp_call_tool is already in the tools list.
Just needs: SSH key, external-mcp.json, COLIBRI_MCP_EXTERNAL_CALL=1,
hw-probe installed, and daemon restart.

Architecture: USB spawns 'ssh colibri@mother colibri-mcp' as
persistent child process, JSON-RPC over stdin/stdout. Mother-side
wrapper strips forced-command layer. One SSH connection for
daemon lifetime.

Missing: node_register MCP tool on mother (needs implementation),
auto-key from seed partition (planned for 0.12 ISO build).
2026-06-23 15:31:37 +02:00
11e016686e Merge pull request 'docs: security baseline — live USB boot checklist' (#122) from feature/0.12.0 into main
Reviewed-on: #122
2026-06-23 15:26:20 +02:00
180abbab39 docs: security baseline — live USB boot checklist
Cross-reference from OSA audit (2026-06-23): SSH hardening,
MCP socket, firewall, listening ports, service accounts,
external MCP servers. Each check has command + expected output.

OSA exceptions documented: password auth kept for dev access.
USB should be stricter — key-only SSH, no 0.0.0.0 bindings.

Skill saved: security-audit-clawdie (freebsd category)
2026-06-23 15:24:37 +02:00
3adf4f2af8 Merge pull request 'feature/0.12.0' (#121) from feature/0.12.0 into main
Reviewed-on: #121
2026-06-23 14:21:34 +02:00
f5b4326731 docs: GIS plan — 6 steps with diagrams + Blender render service
Each step has diagrams, input/output schemas, test cases.
Added Step 6: mother-blender-render — photorealistic 3D via
Blender on mother node. USB requests renders via MCP, same
pattern as build-colibri.sh. 1 GiB Blender stays on mother;
light nodes get PNGs back. ~30h total implementation estimate.
2026-06-23 14:16:28 +02:00
95deca5f1d docs: GIS integration plan — real property dome overlay
GURS WFS endpoints for parcel boundaries, address lookup, and
spatial data (CC BY 4.0, free). Google 3D Tiles for photorealistic
backgrounds (paid). Four-phase plan: address → parcel → dome
placement → site-specific BOM. All Slovenian data sources
documented with endpoint URLs and coordinate systems.
2026-06-23 14:06:25 +02:00
d769fe0387 docs: Blender vs geodesic-dome-mcp capability comparison
Records the decision to use a pure-Python geodesic dome tool
(6KB, numpy+Pillow) instead of Blender (1 GiB, 53 packages).
OSA registered as first node in mother_hive PostgreSQL with
real hardware profile: 12GB RAM, no GPU, geodesic_dome_mcp=true.

This document serves as a capability baseline — any node that
can run Python can generate dome wireframes and structural BOMs.
2026-06-23 13:48:59 +02:00
bcab969ef7 Merge pull request 'feature/0.12.0' (#120) from feature/0.12.0 into main
Reviewed-on: #120
2026-06-23 13:39:50 +02:00
e75bd57e0b xfce: 4K 6V geodesic dome farm wallpapers (AI-generated)
Two variants of a photorealistic 6V frequency geodesic dome
encapsulating an organic farm at golden hour. Generated via
OpenRouter (google/gemini-2.5-flash-image, upscaled to 3840x2160).

The existing clawdie-operator-bg remains as the default — these
are alternatives the operator can select.
2026-06-23 13:04:35 +02:00
71a61c1d1e xfce: geodesic 2V wallpaper — unified logo on desktop background
Replace the filled gradient triangle with the geodesic 2V logo:
outer triangle + inverted inner triangle at midpoints. Cyan
on dark gradient. SVG + 2560x1440 PNG render.
2026-06-23 12:49:14 +02:00
7cc4c57b1c xfce: geodesic 2V logo for Start button
Replace the filled gradient triangle with the unified geodesic
logo — outer triangle + inverted inner triangle at midpoints.
SVG + 48px + 64px PNG renders. Cyan on transparent, inherits
panel background.
2026-06-23 12:48:17 +02:00
d274b21cf7 feat: unified geodesic logo — inverted medial triangle
Replace the dot-in-triangle (docs) and plain △ (landing) with a
unified geodesic 2V subdivision logo. Both sites now use the same
geometric mark: a large triangle with an inverted inner triangle
whose vertices touch the midpoints of the outer sides.

Reflects geodesic dome design — Class I, Frequency 2 subdivision.
2026-06-23 12:42:12 +02:00
6df52c5278 fix: remove operator banner from production, fix lang switcher
- OperatorBanner is ISO-only (shows when hostname !== clawdie.si)
- Production site at clawdie.si should never show it
- Replace broken emoji flags (🇬🇧🇸🇮) with clean EN/SI text labels
2026-06-23 12:15:13 +02:00
2f2f7dcd3e docs: add Forgejo release tag link to ISO version badge
Footer now links to https://code.smilepowered.org/clawdie/clawdie-iso/releases/tag/v0.XX.0
when built with ASTRO_ISO_VERSION set.
2026-06-23 12:05:35 +02:00
fdd0d260d0 feat: version-aware docs built + staged on ISO
- Copy Astro landing page source into docs/website/ (20K, no node_modules)
- Add ISO version badge to LandingBody.astro (only shown when
  ASTRO_ISO_VERSION is set during build)
- Add build_and_stage_docs() to build.sh: builds the Astro site with
  the ISO version, stages output at /usr/local/share/clawdie-iso/docs/
- Skips gracefully when node/npm unavailable
- On the booted USB: open docs/index.html to see version-matched docs
2026-06-23 11:58:03 +02:00
6173e185ec docs(seed): document dual-purpose mother-mcp key for Forgejo + mother MCP
- Update ssh/config example to show mother-mcp key with both Host entries
  (mother MCP and code.smilepowered.org with IdentitiesOnly yes)
- Add dedicated mother-mcp section explaining the key serves two roles:
  1. MCP calls to mother (command=colibri-mcp,restrict)
  2. Git pull from Forgejo as a read-only deploy key
- Note that read-only is sufficient and limits blast radius
- Update START-HERE.txt to mention git pull works OOTB with seeded key
2026-06-23 11:36:10 +02:00
cc5ced46d4 refactor: rename COLIBRI_AUTOSPAWN_PI → COLIBRI_AUTOSPAWN
Harness-neutral naming (the "PI" was historical — zot is now default):
- COLIBRI_AUTOSPAWN_PI    → COLIBRI_AUTOSPAWN
- COLIBRI_PI_BINARY       → COLIBRI_AUTOSPAWN_BINARY
- COLIBRI_AUTOSPAWN_PI_ARGS → COLIBRI_AUTOSPAWN_ARGS

Default binary: zot (deepseek-v4-pro, ~25 providers, Telegram bot).
2026-06-23 11:13:47 +02:00
76f82565e3 feat: hermes-bsd source snapshot + zot harness + telegram token
- Stage hermes-bsd as shallow clone in /home/clawdie/ai/ (next to colibri/zot)
- Switch default harness from pi to zot (COLIBRI_PI_BINARY=zot)
- Add TELEGRAM_BOT_TOKEN placeholder to provider.env and sample
- Removes stale zot-rpc-driver blocker comment (colibri#143 resolved)
2026-06-23 11:07:54 +02:00
d41248e0e9 Merge pull request '0.12.0: hw-probe + model fixes + mother MCP infra' (#119) from feature/0.12.0 into main
Reviewed-on: #119
2026-06-23 10:53:08 +02:00
7300fec1e2 0.12.0: hw-probe + model fixes + mother MCP infra
Combined from three feature branches:
- feature/hw-probe-agent-bootstrap: JSON hardware probe (clawdie-hw-probe),
  remove desktop icon, update START-HERE.txt
- chore/0.12.0-model-fix-bump: deepseek-v4-pro model names, version 0.12.0
- feature/mother-mcp-infra: build-colibri.sh MCP tool, colibri-mcp-ssh wrapper
2026-06-23 10:49:38 +02:00
0a1ae19e6a Merge pull request 'chore: fix model names + bump version to 0.12.0' (#118) from chore/0.12.0-model-fix-bump into main
Reviewed-on: #118
2026-06-23 09:02:17 +02:00
555418f740 chore: fix model names + bump version to 0.12.0
- seed README: claude-opus-4-8 → deepseek-v4-pro (example harness.toml)
- provider.env.sample: DEEPSEEK_MODEL deepseek-chat → deepseek-v4-pro
- ISO_VERSION: 0.11.0 → 0.12.0
2026-06-23 08:50:29 +02:00
bbf154b571 Merge pull request 'docs: drop sudo from flash commands, append sync' (#117) from docs/canonical-flash-oneliner into main
Reviewed-on: #117
2026-06-23 07:16:39 +02:00
4bc9779512 Merge pull request 'feature/ublock-origin-preinstall' (#116) from feature/ublock-origin-preinstall into main
Reviewed-on: #116
2026-06-23 07:14:37 +02:00
4ee66eb45c build: lock networkmgr package after mdo repack
pkg lock prevents pkg upgrade from replacing the repacked
networkmgr (mdo-based) with upstream (sudo-dependent).
Run inside the chroot while devfs is still mounted.
2026-06-23 07:12:47 +02:00
380a589b11 xfce: reduce language widget scale to 50%, reorder panel tray
CPU graph now comes before the systray (NetworkManager + volumeicon),
followed by the keyboard layout switcher and clock. Language widget
display-scale reduced from 60 to 50 (was still too large).
2026-06-23 07:02:03 +02:00
3ef31687d9 build: pre-stage uBlock Origin + disable default-browser check on live ISO
Places uBlock Origin XPI in Firefox's distribution/extensions
directory during ISO build. Also sets DontCheckDefaultBrowser via
policies.json — Firefox is the only browser on the USB so the
popup is pointless.

Firefox auto-installs the extension on first launch with no
internet required on the booted USB.
2026-06-23 06:55:18 +02:00
bb5460427d docs: drop sudo from flash commands, append sync
All decompress-and-write one-liners now share the same form:
  xz -dc ...img.xz | of=/dev/sdX bs=4M status=progress conv=fsync && sync

- sudo removed (operator runs as root on USB stick)
- && sync appended to all image-write commands
- /dev/zero wipe commands unchanged
- build.sh echo updated to match
2026-06-23 06:41:58 +02:00
af83717524 Merge pull request 'feat(seed): outbound SSH client material for hands-free node→mother' (#115) from seed-ssh-client-material into main
Reviewed-on: #115
2026-06-22 20:26:07 +02:00
800658b47c docs: drop sudo from flash commands, append sync
All decompress-and-write one-liners now share the same form:
  xz -dc ...img.xz | of=/dev/sdX bs=4M status=progress conv=fsync && sync

- sudo removed (operator runs as root on USB stick)
- && sync appended to all image-write commands
- /dev/zero wipe commands unchanged
- build.sh echo updated to match
2026-06-22 20:24:25 +02:00
862af0583b feat(seed): outbound SSH client material for hands-free node->mother
The baked mother key (build/mother-ssh-key) puts a private key in the image,
which only works for a non-published personalized stick. The offline FAT32
seed is the correct home for per-node secrets.

Teach the importer to install outbound SSH client material from an agent's
ssh/ dir into the agent home:
  - config       -> ~/.ssh/config       (0600)
  - known_hosts* -> ~/.ssh/known_hosts* (0644, merged + de-duped)
  - <name>.pub   -> ~/.ssh/<name>.pub   (0644)
  - <name>       -> ~/.ssh/<name>        (0600, any other file = private key)
authorized_keys stays inbound-only via _seed_install_authorized_keys.

This closes the 'without manual key exchange' gap: known_hosts pins mother's
host key so the first node->mother connect does not prompt, and the private
client key rides on the offline seed instead of the base image — so the
published image stays secret-free. Supersedes the baked-key path (#112),
which can retire once this is validated on hardware.

Verified offline (CLAWDIE_SEED_TEST): correct perms (key 0600, pub/known_hosts
0644, config 0600, .ssh 0700) and idempotent known_hosts merge across re-runs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 09:55:56 +02:00
48418af783 Merge pull request 'build: fail-fast release gate for baked mother SSH key' (#114) from release-gate-mother-key into main
Reviewed-on: #114
2026-06-22 09:54:20 +02:00
80dcbfef2e build: fail-fast release gate for baked mother SSH key
The image-assembly guard (build/mother-ssh-key, #113) refuses to copy the
mother key into a release image, but only after a full build run. Add the
same check to check_release_gate so a BUILD_CHANNEL=release build with the
key present on the host aborts in seconds, not after fetch/build/assemble.

The assembly-time guard stays as defense in depth.

(BUILD_CHANNEL already defaults to dev in build.cfg:17, so no change needed
there.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 09:53:36 +02:00
72491ee3b8 Merge pull request 'build: refuse to bake mother SSH key into release images' (#113) from build/mother-ssh-key into main
Reviewed-on: #113
2026-06-22 09:49:14 +02:00
b489d147d4 build: refuse to bake mother SSH key into release images
The trigger copies osa-mother-2026 from the build host into any ISO
as long as the key file exists (which it does permanently on OSA).
A BUILD_CHANNEL=release build would embed the private key into a
publicly hosted image = mother compromise.

Add a fail-closed guard: release builds exit with an error before
copying the key. Dev builds (including personalized sticks) are
unaffected.
2026-06-22 09:42:00 +02:00
9f75767c63 Merge pull request 'build: pre-stage mother SSH key for USB→osa connectivity' (#112) from build/mother-ssh-key into main
Reviewed-on: #112
2026-06-22 09:32:42 +02:00
4addf6fa89 build: pre-stage mother SSH key for USB→osa connectivity
Copies /home/clawdie/.ssh/osa-mother-2026 (ed25519) from the build
host into the ISO at /home/clawdie/.ssh/osa-mother-2026 (0600).
Public key is in mother's authorized_keys. Lets the live USB node
SSH straight into the mother server without manual key exchange.

Skipped silently if the key file doesn't exist on the build host.
2026-06-22 09:30:15 +02:00
d39e47f1e5 Merge pull request 'feat(seed): zero-touch boot from a personalized seed (provider keys → provider.env)' (#110) from seed-zero-touch-provisioning into main
Reviewed-on: #110
2026-06-22 08:57:46 +02:00
ba2f09f290 feat(seed): route seeded provider keys to provider.env for zero-touch boot
The live seed importer merged the active agent's provider keys into the
operator ~/.env, but colibri_daemon reads /usr/local/etc/colibri/provider.env
(rc.conf colibri_daemon_provider_env). So a personalized seed carrying real
provider keys never reached the daemon and no agent auto-spawned.

Route the active agent's non-BW_* keys into provider.env (0600 root) in
addition to ~/.env. The importer runs as root BEFORE LOGIN and colibri_daemon
REQUIREs LOGIN, so the daemon starts after the keys land and auto-spawns the
agent on first boot — no Join Hive click, no Vaultwarden round-trip, no typing.

This makes a personalized seed the zero-touch onboarding primitive: the image
stays generic/publishable, the FAT32 seed is the (offline) personalization
layer. BW_* still route to vault-bootstrap.env for the vault-fetch path.

Docs: seed README, START-HERE, and ONBOARDING-SIMPLIFICATION updated to
describe the direct-keys path (supersedes the xdg-autostart plan).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 08:56:46 +02:00
343ba35536 Merge pull request 'docs: onboarding simplification + drop clawdie-ai source snapshot' (#109) from docs/onboarding-simplification into main 2026-06-22 08:09:54 +02:00
addf43056e docs: prettier-format ONBOARDING-SIMPLIFICATION
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 08:09:44 +02:00
143ff02f8f build: remove clawdie-ai source snapshot from ISO staging
clawdie-ai (TypeScript) is being phased out in favor of the colibri
(Rust) control plane. Remove its shallow git checkout from
/home/clawdie/ai/ on the ISO. The build manifest still records
clawdie-ai provenance; skills import and release gate checks are
unaffected — this only drops the source snapshot.

Also update the ai/README.txt to note the phase-out.
2026-06-22 08:05:26 +02:00
9a159b8593 docs: onboarding simplification — seed partition zero-touch vs zot extensions
Documents the proven end-to-end chain: seed importer (rc.d BEFORE LOGIN)
→ BW creds in provider.env → clawdie-vault-fetch → colibri_daemon restart.
The only remaining click is the 'Join Hive' desktop launcher; the seed
partition already reduces onboarding from 3 typed secrets to one
double-click. True zero-touch requires ~30 lines of shell (xdg autostart).

Also records the zot extensions verdict: onboarding panel rejected
(chicken-and-egg), guard deferred (zot is not OOTB runtime), MCP bridge
kept as the first extension worth building (gated on colibri#143).
2026-06-22 07:51:13 +02:00
7fd49363d2 Merge pull request 'prepare-0.11.0-publish-docs' (#108) from prepare-0.11.0-publish-docs into main
Reviewed-on: #108
2026-06-22 07:29:14 +02:00
ff36ef1800 Merge branch 'main' into prepare-0.11.0-publish-docs 2026-06-22 07:28:18 +02:00
babe68e461 Merge pull request 'build: pin zot v0.2.42 + sync release runbook to 0.11.0' (#105) from update-zot-pin-and-release-runbook into main
Reviewed-on: #105
2026-06-22 07:27:35 +02:00