From 73be65c210cb57ef34f76aad7e4c9cedf1da68e3 Mon Sep 17 00:00:00 2001 From: charly Date: Thu, 8 Oct 2026 22:33:04 +0200 Subject: [PATCH 1/4] fix(docs)!: drop the retired openclaw references and the headings they emptied The recipe pages referenced openclaw entities the OpenClaw family cutover deleted (opencharly/opencharly#431): list lines naming the openclaw-full metalayer, and Related links to the four retired pages. Removing the only line under a heading left 23 headings with nothing beneath them, so those headings are removed too. This is a clean PR from scratch: the previous thread reached the auto-close threshold while its findings were being fixed. Agent: openclaw-family Assisted-by: DSH DeepSeek deepseek-v4.1-flash (documentation reviewed) --- src/content/docs/recipes/coder/arch-coder.md | 1 - src/content/docs/recipes/coder/charly-arch.md | 1 - src/content/docs/recipes/coder/codex.md | 4 ---- src/content/docs/recipes/coder/fedora-coder.md | 1 - src/content/docs/recipes/coder/gemini.md | 4 ---- src/content/docs/recipes/coder/gh.md | 1 - src/content/docs/recipes/coder/oracle.md | 5 ----- src/content/docs/recipes/distros/charly-fedora.md | 1 - src/content/docs/recipes/distros/container-nesting.md | 1 - src/content/docs/recipes/distros/githubrunner.md | 1 - src/content/docs/recipes/hermes/playwright-layer.md | 5 ----- src/content/docs/recipes/infrastructure/sqlite.md | 5 ----- src/content/docs/recipes/infrastructure/tmux-layer.md | 4 ---- src/content/docs/recipes/infrastructure/virtualization.md | 1 - src/content/docs/recipes/ollama/ollama.md | 1 - src/content/docs/recipes/openclaw/clawhub.md | 5 ----- src/content/docs/recipes/openclaw/openclaw-desktop.md | 2 -- src/content/docs/recipes/openclaw/openclaw-full-ml-layer.md | 1 - src/content/docs/recipes/openclaw/openclaw-full.md | 1 - src/content/docs/recipes/openclaw/openclaw-layer.md | 1 - src/content/docs/recipes/openclaw/openclaw.md | 4 ---- src/content/docs/recipes/selkies/camsnap.md | 5 ----- src/content/docs/recipes/selkies/ffmpeg.md | 1 - src/content/docs/recipes/selkies/selkies-labwc-nvidia.md | 1 - src/content/docs/recipes/selkies/selkies-labwc.md | 1 - src/content/docs/recipes/selkies/wacli.md | 5 ----- src/content/docs/recipes/tools/blogwatcher.md | 5 ----- src/content/docs/recipes/tools/gifgrep.md | 5 ----- src/content/docs/recipes/tools/gogcli.md | 5 ----- src/content/docs/recipes/tools/goplaces.md | 5 ----- src/content/docs/recipes/tools/himalaya.md | 5 ----- src/content/docs/recipes/tools/mcporter.md | 5 ----- src/content/docs/recipes/tools/nano-pdf.md | 5 ----- src/content/docs/recipes/tools/ordercli.md | 5 ----- src/content/docs/recipes/tools/ripgrep.md | 5 ----- src/content/docs/recipes/tools/sag.md | 4 ---- src/content/docs/recipes/tools/songsee.md | 5 ----- src/content/docs/recipes/tools/summarize.md | 5 ----- src/content/docs/recipes/tools/xurl.md | 5 ----- src/content/docs/recipes/vm/vm.md | 1 - 40 files changed, 128 deletions(-) diff --git a/src/content/docs/recipes/coder/arch-coder.md b/src/content/docs/recipes/coder/arch-coder.md index c9166cfd..9be8f8ff 100644 --- a/src/content/docs/recipes/coder/arch-coder.md +++ b/src/content/docs/recipes/coder/arch-coder.md @@ -162,7 +162,6 @@ Conflicts with [`/charly-coder:fedora-coder`](/recipes/coder/fedora-coder/) / [` - [`/charly-coder:debian-coder`](/recipes/coder/debian-coder/) — deb-family sibling on Debian 13. - [`/charly-coder:ubuntu-coder`](/recipes/coder/ubuntu-coder/) — deb-family sibling on Ubuntu 24.04 (adopt mode). - [`/charly-coder:charly-arch`](/recipes/coder/charly-arch/) — slimmer Arch alternative with just the charly toolchain (no AI CLIs or DevOps tooling). -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — adds a browser-streamed Wayland desktop (plus the openclaw gateway, AI CLIs, and a CPU ollama) with the same rootless charly toolchain. ## Related layers diff --git a/src/content/docs/recipes/coder/charly-arch.md b/src/content/docs/recipes/coder/charly-arch.md index ac39e4ce..5f0eead8 100644 --- a/src/content/docs/recipes/coder/charly-arch.md +++ b/src/content/docs/recipes/coder/charly-arch.md @@ -199,7 +199,6 @@ packages and scripts per distro. - [`/charly-distros:arch`](/recipes/distros/arch/) — parent base image - [`/charly-distros:charly-fedora`](/recipes/distros/charly-fedora/) — Fedora counterpart, same candies, same rootless posture - [`/charly-coder:fedora-coder`](/recipes/coder/fedora-coder/) — kitchen-sink dev sibling (adds coding CLIs + DevOps) -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — streaming-desktop counterpart (charly toolchain + browser-accessible Wayland); shares the rootless-first posture - [`/charly-distros:githubrunner`](/recipes/distros/githubrunner/) — self-hosted GitHub Actions runner; same uid=1000 posture ## Related Commands diff --git a/src/content/docs/recipes/coder/codex.md b/src/content/docs/recipes/coder/codex.md index 87ea6ebf..212d3a52 100644 --- a/src/content/docs/recipes/coder/codex.md +++ b/src/content/docs/recipes/coder/codex.md @@ -26,10 +26,6 @@ my-box: candy: [codex] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:nodejs`](/recipes/coder/nodejs/) — Required Node.js runtime parent dependency - [`/charly-coder:claude-code`](/recipes/coder/claude-code/) — Sibling AI coding agent CLI bundled in same metalayers diff --git a/src/content/docs/recipes/coder/fedora-coder.md b/src/content/docs/recipes/coder/fedora-coder.md index 2407559a..84fad94b 100644 --- a/src/content/docs/recipes/coder/fedora-coder.md +++ b/src/content/docs/recipes/coder/fedora-coder.md @@ -251,7 +251,6 @@ All four produce the same daily-dev surface (sshd on 2222, charly-mcp on 18765, ## Related Boxes -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — sibling rootless-first power-user box; same security posture + container-nesting, but adds the streaming desktop. Prefer when you want browser-accessible GUI + dev tools. - [`/charly-distros:charly-fedora`](/recipes/distros/charly-fedora/) — minimal charly toolchain (no coding CLIs, no DevOps), also uid=1000 with sudo. - [`/charly-coder:charly-arch`](/recipes/coder/charly-arch/) — Arch Linux counterpart of charly-fedora. - [`/charly-distros:githubrunner`](/recipes/distros/githubrunner/) — self-hosted GitHub Actions runner; same uid=1000 posture. diff --git a/src/content/docs/recipes/coder/gemini.md b/src/content/docs/recipes/coder/gemini.md index 35df2ab0..1e026987 100644 --- a/src/content/docs/recipes/coder/gemini.md +++ b/src/content/docs/recipes/coder/gemini.md @@ -26,10 +26,6 @@ my-box: candy: [gemini] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:nodejs`](/recipes/coder/nodejs/) — required runtime dependency - [`/charly-coder:claude-code`](/recipes/coder/claude-code/) — sibling AI CLI in openclaw-full and hermes-full diff --git a/src/content/docs/recipes/coder/gh.md b/src/content/docs/recipes/coder/gh.md index 9a50e524..7f5009de 100644 --- a/src/content/docs/recipes/coder/gh.md +++ b/src/content/docs/recipes/coder/gh.md @@ -82,7 +82,6 @@ my-box: ## Used In Boxes - [`/charly-coder:charly-arch`](/recipes/coder/charly-arch/), [`/charly-distros:charly-fedora`](/recipes/distros/charly-fedora/), [`/charly-coder:fedora-coder`](/recipes/coder/fedora-coder/) — power-user boxes that compose gh explicitly -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — streaming-desktop sibling - Any box composing `hermes-full` ## Related Candies diff --git a/src/content/docs/recipes/coder/oracle.md b/src/content/docs/recipes/coder/oracle.md index bd67c8b7..a17b6663 100644 --- a/src/content/docs/recipes/coder/oracle.md +++ b/src/content/docs/recipes/coder/oracle.md @@ -26,13 +26,8 @@ my-box: candy: [oracle] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:nodejs`](/recipes/coder/nodejs/) -- runtime dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) -- parent metalayer that bundles oracle ## Related Commands - [`/charly-automation:openclaw-deploy`](/recipes/automation/openclaw-deploy/) -- gateway/skill configuration diff --git a/src/content/docs/recipes/distros/charly-fedora.md b/src/content/docs/recipes/distros/charly-fedora.md index 687f973e..3abb9d9c 100644 --- a/src/content/docs/recipes/distros/charly-fedora.md +++ b/src/content/docs/recipes/distros/charly-fedora.md @@ -168,7 +168,6 @@ and scripts per distro. - [`/charly-distros:fedora`](/recipes/distros/fedora/) — parent base image - [`/charly-coder:charly-arch`](/recipes/coder/charly-arch/) — Arch counterpart, same layers, same rootless posture - [`/charly-coder:fedora-coder`](/recipes/coder/fedora-coder/) — kitchen-sink dev sibling (adds coding CLIs + DevOps) -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — streaming-desktop counterpart (charly toolchain + browser-accessible Wayland); shares the rootless-first posture - [`/charly-distros:githubrunner`](/recipes/distros/githubrunner/) — self-hosted GitHub Actions runner; same uid=1000 posture ## Related Commands diff --git a/src/content/docs/recipes/distros/container-nesting.md b/src/content/docs/recipes/distros/container-nesting.md index 375f54ee..798fe051 100644 --- a/src/content/docs/recipes/distros/container-nesting.md +++ b/src/content/docs/recipes/distros/container-nesting.md @@ -379,7 +379,6 @@ this order: ## Used In Boxes -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — rootless path; box-level adds nothing - [`/charly-distros:charly-fedora`](/recipes/distros/charly-fedora/) — root path; box-level adds `cap_add:[ALL] + security_opt:[label=disable, seccomp=unconfined]` - [`/charly-coder:charly-arch`](/recipes/coder/charly-arch/) — same root path as charly-fedora - [`/charly-distros:githubrunner`](/recipes/distros/githubrunner/) — same root path; doesn't compose the full charly toolchain but keeps nested podman for CI workloads diff --git a/src/content/docs/recipes/distros/githubrunner.md b/src/content/docs/recipes/distros/githubrunner.md index a4811a9f..c806d3a9 100644 --- a/src/content/docs/recipes/distros/githubrunner.md +++ b/src/content/docs/recipes/distros/githubrunner.md @@ -124,7 +124,6 @@ charly remove githubrunner -e RUNNER_TOKEN= ## Related Boxes - [`/charly-distros:cachyos`](/recipes/distros/cachyos/) — the CachyOS base (parent, via the `cachyos` namespace) -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — same rootless container-nesting posture (uid 1000, no caps) - [`/charly-distros:charly-fedora`](/recipes/distros/charly-fedora/), [`/charly-coder:charly-arch`](/recipes/coder/charly-arch/) — the charly-toolchain siblings (root path, box-level full-hammer security) ## Related Commands diff --git a/src/content/docs/recipes/hermes/playwright-layer.md b/src/content/docs/recipes/hermes/playwright-layer.md index 8aab0317..fad6cd5b 100644 --- a/src/content/docs/recipes/hermes/playwright-layer.md +++ b/src/content/docs/recipes/hermes/playwright-layer.md @@ -27,13 +27,8 @@ my-box: - '@github.com/opencharly/layer-playwright' ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:nodejs`](/recipes/coder/nodejs/) -- runtime dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) -- parent metalayer that bundles playwright - [`/charly-selkies:chrome`](/recipes/selkies/chrome/) -- browser commonly driven by playwright ## Related Commands diff --git a/src/content/docs/recipes/infrastructure/sqlite.md b/src/content/docs/recipes/infrastructure/sqlite.md index 8784be5b..e9b72af4 100644 --- a/src/content/docs/recipes/infrastructure/sqlite.md +++ b/src/content/docs/recipes/infrastructure/sqlite.md @@ -31,13 +31,8 @@ my-box: - sqlite ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:dev-tools`](/recipes/coder/dev-tools/) -- common dev CLI bundle that pairs with sqlite -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) -- parent metalayer that bundles sqlite ## Related Commands - [`/charly-core:shell`](/recipes/core/shell/) -- run sqlite3 inside the container diff --git a/src/content/docs/recipes/infrastructure/tmux-layer.md b/src/content/docs/recipes/infrastructure/tmux-layer.md index dd44870b..cac466bf 100644 --- a/src/content/docs/recipes/infrastructure/tmux-layer.md +++ b/src/content/docs/recipes/infrastructure/tmux-layer.md @@ -31,10 +31,6 @@ my-box: - '@github.com/opencharly/layer-tmux' ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Skills - [`/charly-automation:tmux`](/recipes/automation/tmux/) — Typed persistent terminals, safe input, snapshots, transcripts, and agent runtimes diff --git a/src/content/docs/recipes/infrastructure/virtualization.md b/src/content/docs/recipes/infrastructure/virtualization.md index 2b1b1eca..8142aa42 100644 --- a/src/content/docs/recipes/infrastructure/virtualization.md +++ b/src/content/docs/recipes/infrastructure/virtualization.md @@ -253,7 +253,6 @@ Drops on deb: `gvisor-tap-vsock`, `podman-machine` (not packaged; VM-mode networ ## Used In Boxes -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — rootless VM host inside a streaming desktop - [`/charly-distros:charly-fedora`](/recipes/distros/charly-fedora/) — root VM host (same daemons, uid 0) - [`/charly-coder:charly-arch`](/recipes/coder/charly-arch/) — Arch counterpart - [`/charly-coder:debian-coder`](/recipes/coder/debian-coder/), [`/charly-coder:ubuntu-coder`](/recipes/coder/ubuntu-coder/) — deb-based consumers (via the `charly` candy) diff --git a/src/content/docs/recipes/ollama/ollama.md b/src/content/docs/recipes/ollama/ollama.md index 85981ad1..56d8f8a2 100644 --- a/src/content/docs/recipes/ollama/ollama.md +++ b/src/content/docs/recipes/ollama/ollama.md @@ -177,7 +177,6 @@ composition. - [`/charly-distros:nvidia`](/recipes/distros/nvidia/) — the GPU base family - [`/charly-distros:cachyos`](/recipes/distros/cachyos/) — the CachyOS image family, which carries its own ollama boxes -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — a desktop image that serves a local ollama - [`/charly-jupyter:jupyter-ml-notebook`](/recipes/jupyter/jupyter-ml-notebook/) — receives `OLLAMA_HOST` via env_provide when ollama is deployed - [`/charly-openwebui:openwebui`](/recipes/openwebui/openwebui/) — receives `OLLAMA_HOST` via env_provide, auto-configures as `OLLAMA_BASE_URL` diff --git a/src/content/docs/recipes/openclaw/clawhub.md b/src/content/docs/recipes/openclaw/clawhub.md index 26a1dcd8..3955dfbe 100644 --- a/src/content/docs/recipes/openclaw/clawhub.md +++ b/src/content/docs/recipes/openclaw/clawhub.md @@ -27,13 +27,8 @@ my-box: - clawhub ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:nodejs`](/recipes/coder/nodejs/) — Required Node.js runtime parent dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — Metalayer bundling clawhub with codex/gemini/claude-code - [`/charly-openclaw:openclaw`](/recipes/openclaw/openclaw/) — OpenClaw gateway service that consumes installed skills ## Related Commands diff --git a/src/content/docs/recipes/openclaw/openclaw-desktop.md b/src/content/docs/recipes/openclaw/openclaw-desktop.md index 48e34720..c03b0f93 100644 --- a/src/content/docs/recipes/openclaw/openclaw-desktop.md +++ b/src/content/docs/recipes/openclaw/openclaw-desktop.md @@ -221,7 +221,6 @@ ollama API, chrome-devtools-mcp port). The R10 bed is ## Key Candies - [`/charly-selkies:selkies-desktop-layer`](/recipes/selkies/selkies-desktop-layer/) — the streaming desktop metalayer -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — gateway + the OpenClaw tools (claude-code/codex/gemini) - [`/charly-ollama:ollama`](/recipes/ollama/ollama/) — CPU/GPU-agnostic Ollama candy (GPU is box-level) - [`/charly-tools:charly`](/recipes/tools/charly/) — the full toolchain: charly binary + virtualization + gocryptfs + socat - [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/) — rootless nested podman recipe (RCA for `unmask=/proc/*`) @@ -230,7 +229,6 @@ ollama API, chrome-devtools-mcp port). The R10 bed is ## Related Boxes -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — the headless gateway + tools WITHOUT the desktop / ollama / charly toolchain. - [`/charly-openclaw:openclaw`](/recipes/openclaw/openclaw/) — minimal gateway only. - [`/charly-selkies:selkies-labwc`](/recipes/selkies/selkies-labwc/) — the CPU streaming desktop WITHOUT openclaw / ollama / charly toolchain. - [`/charly-selkies:selkies-labwc-nvidia`](/recipes/selkies/selkies-labwc-nvidia/) — GPU streaming desktop (base nvidia), no openclaw/ollama/charly toolchain. diff --git a/src/content/docs/recipes/openclaw/openclaw-full-ml-layer.md b/src/content/docs/recipes/openclaw/openclaw-full-ml-layer.md index 895ffc82..aa0f7bba 100644 --- a/src/content/docs/recipes/openclaw/openclaw-full-ml-layer.md +++ b/src/content/docs/recipes/openclaw/openclaw-full-ml-layer.md @@ -39,7 +39,6 @@ openclaw-full-ml-box: ## Related Candies -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) -- base composition with all OpenClaw tools - [`/charly-tools:whisper`](/recipes/tools/whisper/) -- speech-to-text component - [`/charly-tools:sherpa-onnx`](/recipes/tools/sherpa-onnx/) -- offline TTS component diff --git a/src/content/docs/recipes/openclaw/openclaw-full.md b/src/content/docs/recipes/openclaw/openclaw-full.md index d9a9a67d..c5c8554a 100644 --- a/src/content/docs/recipes/openclaw/openclaw-full.md +++ b/src/content/docs/recipes/openclaw/openclaw-full.md @@ -45,7 +45,6 @@ charly start openclaw-full ## Key Candies -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — Metalayer composition (all tools) - [`/charly-openclaw:openclaw`](/recipes/openclaw/openclaw/) — AI gateway service ## Related Boxes diff --git a/src/content/docs/recipes/openclaw/openclaw-layer.md b/src/content/docs/recipes/openclaw/openclaw-layer.md index bb65b7a3..f81f8ce9 100644 --- a/src/content/docs/recipes/openclaw/openclaw-layer.md +++ b/src/content/docs/recipes/openclaw/openclaw-layer.md @@ -44,7 +44,6 @@ openclaw config # uses the alias ## Used In Boxes - [`/charly-openclaw:openclaw`](/recipes/openclaw/openclaw/) -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) ## Port Relay diff --git a/src/content/docs/recipes/openclaw/openclaw.md b/src/content/docs/recipes/openclaw/openclaw.md index 02e2ea58..b4cc71cd 100644 --- a/src/content/docs/recipes/openclaw/openclaw.md +++ b/src/content/docs/recipes/openclaw/openclaw.md @@ -48,10 +48,6 @@ charly start openclaw - [`/charly-openclaw:openclaw`](/recipes/openclaw/openclaw/) — gateway npm package, supervisord service, data volume -## Related Boxes - -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — maximal variant (gateway + browser + all tools) - ## Verification After `charly start`: diff --git a/src/content/docs/recipes/selkies/camsnap.md b/src/content/docs/recipes/selkies/camsnap.md index f726d311..64c3b82d 100644 --- a/src/content/docs/recipes/selkies/camsnap.md +++ b/src/content/docs/recipes/selkies/camsnap.md @@ -33,13 +33,8 @@ my-box: candy: [camsnap] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) — Required Go runtime parent dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — Metalayer that bundles camsnap with other agent CLIs ## Related Commands - [`/charly-build:build`](/recipes/build/build/) — Builds the candy (Go install via a `command:` run step) diff --git a/src/content/docs/recipes/selkies/ffmpeg.md b/src/content/docs/recipes/selkies/ffmpeg.md index 5578f270..d9dd7ccf 100644 --- a/src/content/docs/recipes/selkies/ffmpeg.md +++ b/src/content/docs/recipes/selkies/ffmpeg.md @@ -37,7 +37,6 @@ All candies that need ffmpeg should declare it as a dependency rather than indep ## Used In Boxes -- `openclaw-full` (via `openclaw-full` metalayer) - `hermes` (via `hermes` candy `require: ffmpeg`) - `hermes-playwright` (via `hermes` candy `require: ffmpeg`) - `immich` (via `immich` candy `require: ffmpeg`) diff --git a/src/content/docs/recipes/selkies/selkies-labwc-nvidia.md b/src/content/docs/recipes/selkies/selkies-labwc-nvidia.md index 87b122a9..84651c5f 100644 --- a/src/content/docs/recipes/selkies/selkies-labwc-nvidia.md +++ b/src/content/docs/recipes/selkies/selkies-labwc-nvidia.md @@ -106,7 +106,6 @@ encoding (zero CPU overhead). - [`/charly-selkies:selkies-desktop-layer`](/recipes/selkies/selkies-desktop-layer/) — the labwc desktop metalayer this box is the GPU build of - `selkies-labwc` (in this same `opencharly/distro-cachyos` submodule) — the CPU-encoding labwc sibling - `selkies-kde-nvidia` — the KDE-Plasma GPU sibling (same `cachyos.nvidia` base + CUDA arch-builder) -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — the CachyOS/CPU all-in-one: this streaming desktop stack + the openclaw-full gateway + AI CLIs + a CPU ollama + the full charly toolchain (charly + container-nesting + golang + gh). Use it if you want to build boxes / start nested pods / launch VMs from inside the browser-accessible desktop. - [`/charly-distros:cachyos`](/recipes/distros/cachyos/) — the CachyOS base image family (owns this box's submodule) ## Related Commands diff --git a/src/content/docs/recipes/selkies/selkies-labwc.md b/src/content/docs/recipes/selkies/selkies-labwc.md index 4b98e865..d13e9015 100644 --- a/src/content/docs/recipes/selkies/selkies-labwc.md +++ b/src/content/docs/recipes/selkies/selkies-labwc.md @@ -367,7 +367,6 @@ diagnostic recipe that found the leak. ## Related Boxes - [`/charly-selkies:selkies-labwc-nvidia`](/recipes/selkies/selkies-labwc-nvidia/) — the GPU sibling of this CPU box: the same `selkies-desktop` metalayer on the CachyOS GPU base (`cachyos.nvidia`, `build: [pac, aur]`) with `builder.pixi: arch.cuda-arch-builder` for real NVENC, in the `opencharly/distro-cachyos` submodule. See [`/charly-distros:cachyos`](/recipes/distros/cachyos/). -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — all-in-one CachyOS variant: this streaming desktop fused with the openclaw-full gateway + AI CLIs, a CPU ollama, and the full charly toolchain (build boxes, run nested pods, launch rootless libvirt VMs from inside the streaming desktop). Uses [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/)'s `unmask=/proc/*` posture — no `--privileged`, still uid 1000. - [`/charly-selkies:sway-browser-vnc`](/recipes/selkies/sway-browser-vnc/) — VNC-based alternative using Sway compositor instead of Selkies/labwc streaming ## Verification diff --git a/src/content/docs/recipes/selkies/wacli.md b/src/content/docs/recipes/selkies/wacli.md index 0f8bfdfe..c8b271d7 100644 --- a/src/content/docs/recipes/selkies/wacli.md +++ b/src/content/docs/recipes/selkies/wacli.md @@ -33,13 +33,8 @@ my-box: candy: [wacli] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) — Go toolchain dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — metalayer that bundles wacli - [`/charly-hermes:hermes`](/recipes/hermes/hermes/) — companion messaging stack with WhatsApp bridge ## Related Commands diff --git a/src/content/docs/recipes/tools/blogwatcher.md b/src/content/docs/recipes/tools/blogwatcher.md index ae1f5752..1ef8dd75 100644 --- a/src/content/docs/recipes/tools/blogwatcher.md +++ b/src/content/docs/recipes/tools/blogwatcher.md @@ -33,13 +33,8 @@ my-box: candy: [blogwatcher] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) — Required Go runtime parent dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — Metalayer that bundles blogwatcher with other AI/agent CLIs ## Related Commands - [`/charly-build:build`](/recipes/build/build/) — Builds the candy (Go install via a `run:` step) diff --git a/src/content/docs/recipes/tools/gifgrep.md b/src/content/docs/recipes/tools/gifgrep.md index a80d56e1..fa7707c7 100644 --- a/src/content/docs/recipes/tools/gifgrep.md +++ b/src/content/docs/recipes/tools/gifgrep.md @@ -33,13 +33,8 @@ my-box: candy: [gifgrep] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) — required Go toolchain dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — metalayer that includes gifgrep - [`/charly-tools:goplaces`](/recipes/tools/goplaces/) — sibling Go-based CLI in openclaw-full ## Related Commands diff --git a/src/content/docs/recipes/tools/gogcli.md b/src/content/docs/recipes/tools/gogcli.md index 2114fb51..b9dd8bb6 100644 --- a/src/content/docs/recipes/tools/gogcli.md +++ b/src/content/docs/recipes/tools/gogcli.md @@ -33,13 +33,8 @@ my-box: candy: [gogcli] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) — required Go toolchain dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — metalayer that includes gogcli - [`/charly-tools:goplaces`](/recipes/tools/goplaces/) — sibling Google API CLI in openclaw-full ## Related Commands diff --git a/src/content/docs/recipes/tools/goplaces.md b/src/content/docs/recipes/tools/goplaces.md index 2e3ce737..0e075e88 100644 --- a/src/content/docs/recipes/tools/goplaces.md +++ b/src/content/docs/recipes/tools/goplaces.md @@ -33,13 +33,8 @@ my-box: candy: [goplaces] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) — required Go toolchain dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — metalayer that includes goplaces - [`/charly-tools:gogcli`](/recipes/tools/gogcli/) — sibling Google API CLI in openclaw-full ## Related Commands diff --git a/src/content/docs/recipes/tools/himalaya.md b/src/content/docs/recipes/tools/himalaya.md index 3b236459..d10eaf50 100644 --- a/src/content/docs/recipes/tools/himalaya.md +++ b/src/content/docs/recipes/tools/himalaya.md @@ -26,13 +26,8 @@ my-box: candy: [himalaya] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:rust`](/recipes/coder/rust/) — required Rust toolchain dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — metalayer that includes himalaya - [`/charly-infrastructure:gnupg`](/recipes/infrastructure/gnupg/) — pairs with himalaya for PGP-encrypted email ## Related Commands diff --git a/src/content/docs/recipes/tools/mcporter.md b/src/content/docs/recipes/tools/mcporter.md index 669c9c10..c84ae839 100644 --- a/src/content/docs/recipes/tools/mcporter.md +++ b/src/content/docs/recipes/tools/mcporter.md @@ -26,13 +26,8 @@ my-box: candy: [mcporter] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:nodejs`](/recipes/coder/nodejs/) — required runtime dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — metalayer that includes mcporter - [`/charly-coder:claude-code`](/recipes/coder/claude-code/) — sibling AI CLI commonly paired with MCP tools ## Related Commands diff --git a/src/content/docs/recipes/tools/nano-pdf.md b/src/content/docs/recipes/tools/nano-pdf.md index aa3ae2b3..499e2ffc 100644 --- a/src/content/docs/recipes/tools/nano-pdf.md +++ b/src/content/docs/recipes/tools/nano-pdf.md @@ -26,13 +26,8 @@ my-box: candy: [nano-pdf] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-languages:python`](/recipes/languages/python/) — required Python runtime dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — metalayer that includes nano-pdf - [`/charly-coder:uv`](/recipes/coder/uv/) — sibling Python tooling in openclaw-full ## Related Commands diff --git a/src/content/docs/recipes/tools/ordercli.md b/src/content/docs/recipes/tools/ordercli.md index 0d485767..77439e24 100644 --- a/src/content/docs/recipes/tools/ordercli.md +++ b/src/content/docs/recipes/tools/ordercli.md @@ -33,13 +33,8 @@ my-box: candy: [ordercli] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) -- build/runtime dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) -- parent metalayer that bundles ordercli ## Related Commands - [`/charly-core:shell`](/recipes/core/shell/) -- run ordercli inside the container diff --git a/src/content/docs/recipes/tools/ripgrep.md b/src/content/docs/recipes/tools/ripgrep.md index 08958e5e..8b261f7e 100644 --- a/src/content/docs/recipes/tools/ripgrep.md +++ b/src/content/docs/recipes/tools/ripgrep.md @@ -30,13 +30,8 @@ my-box: candy: [ripgrep] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:dev-tools`](/recipes/coder/dev-tools/) -- bundles ripgrep alongside other CLI utilities -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) -- parent metalayer that bundles ripgrep ## Related Commands - [`/charly-core:shell`](/recipes/core/shell/) -- run rg interactively inside the container diff --git a/src/content/docs/recipes/tools/sag.md b/src/content/docs/recipes/tools/sag.md index da4e89d2..6ba6a574 100644 --- a/src/content/docs/recipes/tools/sag.md +++ b/src/content/docs/recipes/tools/sag.md @@ -37,10 +37,6 @@ my-box: candy: [sag] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) -- build/runtime dependency - [`/charly-tools:sherpa-onnx`](/recipes/tools/sherpa-onnx/) -- offline TTS sibling diff --git a/src/content/docs/recipes/tools/songsee.md b/src/content/docs/recipes/tools/songsee.md index e7e4f176..c8ece9bf 100644 --- a/src/content/docs/recipes/tools/songsee.md +++ b/src/content/docs/recipes/tools/songsee.md @@ -33,13 +33,8 @@ my-box: candy: [songsee] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) -- build/runtime dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) -- parent metalayer that bundles songsee ## Related Commands - [`/charly-core:shell`](/recipes/core/shell/) -- run songsee CLI inside the container diff --git a/src/content/docs/recipes/tools/summarize.md b/src/content/docs/recipes/tools/summarize.md index a1783c7d..9f7b906d 100644 --- a/src/content/docs/recipes/tools/summarize.md +++ b/src/content/docs/recipes/tools/summarize.md @@ -26,13 +26,8 @@ my-box: candy: [summarize] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:nodejs`](/recipes/coder/nodejs/) — runtime dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — metalayer that bundles summarize - [`/charly-tools:whisper`](/recipes/tools/whisper/) — speech-to-text companion in the `openclaw-full-ml` candy ## Related Commands diff --git a/src/content/docs/recipes/tools/xurl.md b/src/content/docs/recipes/tools/xurl.md index cff2506c..1c07be0e 100644 --- a/src/content/docs/recipes/tools/xurl.md +++ b/src/content/docs/recipes/tools/xurl.md @@ -26,13 +26,8 @@ my-box: candy: [xurl] ``` -## Used In Boxes - -- `openclaw-full` (via `openclaw-full` metalayer) - ## Related Candies - [`/charly-coder:nodejs`](/recipes/coder/nodejs/) — runtime dependency -- [`/charly-openclaw:openclaw-full`](/recipes/openclaw/openclaw-full/) — metalayer that bundles xurl - [`/charly-hermes:hermes`](/recipes/hermes/hermes/) — companion social/messaging agent ## Related Commands diff --git a/src/content/docs/recipes/vm/vm.md b/src/content/docs/recipes/vm/vm.md index 4d725cc8..1a222030 100644 --- a/src/content/docs/recipes/vm/vm.md +++ b/src/content/docs/recipes/vm/vm.md @@ -697,7 +697,6 @@ Expected. The agent needs a `virtio-serial` channel that charly's QEMU backend d - [`/charly-build:pull`](/recipes/build/pull/) — fetch container images into local storage (prereq for bootc VM builds) - [`/charly-build:build`](/recipes/build/build/) — building container images before VM disk builds - [`/charly-image:layer`](/recipes/image/layer/) — `libvirt.snippets:` field in charly.yml -- [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) — two-level nested-virtualization proof - [`/charly-distros:cloud-init`](/recipes/distros/cloud-init/) — guest-side cloud-init package (complements host-side seed ISO rendering) - [`/charly-distros:qemu-guest-agent`](/recipes/distros/qemu-guest-agent/) — virtio-serial channel From 783bf90df93ca16ad0c3ac524f0c8d597ab08ccb Mon Sep 17 00:00:00 2001 From: charly Date: Fri, 9 Oct 2026 01:02:02 +0200 Subject: [PATCH 2/4] fix(docs)!: sweep the surviving prose references to the retired metalayers Earlier revisions removed the Related-Candies links naming the retired openclaw-full / openclaw-full-ml metalayers but left, in the same blocks, prose naming the same entities two lines away: "sibling Google API CLI in openclaw-full" (goplaces, gogcli), "sibling AI CLI in openclaw-full and hermes-full" (gemini, twice), and "speech-to-text companion in the openclaw-full-ml candy" (summarize). A dangling reference to a deleted entity is an outdated claim, so they are swept here. hermes-full is LIVE and is kept wherever it appeared; only the retired names go. Found by charly/pr-validator on opencharly/docs#155 as R5/B10. Agent: openclaw-family Assisted-by: DSH DeepSeek deepseek-v4.1-flash (documentation reviewed) --- src/content/docs/recipes/coder/gemini.md | 4 ++-- src/content/docs/recipes/tools/gogcli.md | 2 +- src/content/docs/recipes/tools/goplaces.md | 2 +- src/content/docs/recipes/tools/summarize.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/docs/recipes/coder/gemini.md b/src/content/docs/recipes/coder/gemini.md index 1e026987..3c1b080a 100644 --- a/src/content/docs/recipes/coder/gemini.md +++ b/src/content/docs/recipes/coder/gemini.md @@ -28,8 +28,8 @@ my-box: ## Related Candies - [`/charly-coder:nodejs`](/recipes/coder/nodejs/) — required runtime dependency -- [`/charly-coder:claude-code`](/recipes/coder/claude-code/) — sibling AI CLI in openclaw-full and hermes-full -- [`/charly-coder:codex`](/recipes/coder/codex/) — sibling AI CLI in openclaw-full and hermes-full +- [`/charly-coder:claude-code`](/recipes/coder/claude-code/) — sibling AI CLI in hermes-full +- [`/charly-coder:codex`](/recipes/coder/codex/) — sibling AI CLI in hermes-full ## Related Commands - [`/charly-build:secrets`](/recipes/build/secrets/) — provision Gemini API credentials for the CLI diff --git a/src/content/docs/recipes/tools/gogcli.md b/src/content/docs/recipes/tools/gogcli.md index b9dd8bb6..be5e57f4 100644 --- a/src/content/docs/recipes/tools/gogcli.md +++ b/src/content/docs/recipes/tools/gogcli.md @@ -35,7 +35,7 @@ my-box: ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) — required Go toolchain dependency -- [`/charly-tools:goplaces`](/recipes/tools/goplaces/) — sibling Google API CLI in openclaw-full +- [`/charly-tools:goplaces`](/recipes/tools/goplaces/) — sibling Google API CLI ## Related Commands - [`/charly-build:secrets`](/recipes/build/secrets/) — provision Google OAuth credentials for gogcli diff --git a/src/content/docs/recipes/tools/goplaces.md b/src/content/docs/recipes/tools/goplaces.md index 0e075e88..b72a752b 100644 --- a/src/content/docs/recipes/tools/goplaces.md +++ b/src/content/docs/recipes/tools/goplaces.md @@ -35,7 +35,7 @@ my-box: ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) — required Go toolchain dependency -- [`/charly-tools:gogcli`](/recipes/tools/gogcli/) — sibling Google API CLI in openclaw-full +- [`/charly-tools:gogcli`](/recipes/tools/gogcli/) — sibling Google API CLI ## Related Commands - [`/charly-build:secrets`](/recipes/build/secrets/) — provision Google Places API key for the CLI diff --git a/src/content/docs/recipes/tools/summarize.md b/src/content/docs/recipes/tools/summarize.md index 9f7b906d..68e84ae0 100644 --- a/src/content/docs/recipes/tools/summarize.md +++ b/src/content/docs/recipes/tools/summarize.md @@ -28,7 +28,7 @@ my-box: ## Related Candies - [`/charly-coder:nodejs`](/recipes/coder/nodejs/) — runtime dependency -- [`/charly-tools:whisper`](/recipes/tools/whisper/) — speech-to-text companion in the `openclaw-full-ml` candy +- [`/charly-tools:whisper`](/recipes/tools/whisper/) — speech-to-text companion ## Related Commands - [`/charly-core:shell`](/recipes/core/shell/) — run summarize CLI inside the container From f37b9954b41f0174b464d6341a20b43693469ff3 Mon Sep 17 00:00:00 2001 From: charly Date: Fri, 9 Oct 2026 01:37:40 +0200 Subject: [PATCH 3/4] fix(docs)!: complete the retired-OpenClaw sweep across every changed page The sweep was still incomplete. Three whole pages for the retired entities survived (recipes/openclaw/openclaw-desktop.md, openclaw-full.md, openclaw-full-ml-layer.md) and are deleted, since the family that replaced them is the only live home. Surviving references in ten further pages are removed or de-named: sibling links, Related-Candies clauses, a worked example, a session-URI contrast, a snippet, and the container-nesting example and verification commands, which now use the same neutral placeholders as the owning repo. Found by charly/pr-validator on opencharly/docs#155 as R5/B10: the same dangling references this PR claimed to remove survived in the exact blocks it edited, in gifgrep.md and nano-pdf.md, and a re-grep of every changed file found eleven more files of the same class. Agent: openclaw-family Assisted-by: DSH DeepSeek deepseek-v4.1-flash (documentation reviewed) --- src/content/docs/recipes/coder/charly-arch.md | 9 +- .../docs/recipes/coder/fedora-coder.md | 8 +- .../docs/recipes/distros/charly-fedora.md | 3 +- .../docs/recipes/distros/container-nesting.md | 16 +- .../docs/recipes/distros/githubrunner.md | 2 +- .../recipes/infrastructure/virtualization.md | 6 +- src/content/docs/recipes/ollama/ollama.md | 2 +- .../docs/recipes/openclaw/openclaw-desktop.md | 253 ------------------ .../openclaw/openclaw-full-ml-layer.md | 60 ----- .../docs/recipes/openclaw/openclaw-full.md | 61 ----- src/content/docs/recipes/tools/gifgrep.md | 2 +- src/content/docs/recipes/tools/nano-pdf.md | 2 +- src/content/docs/recipes/vm/vm.md | 3 +- 13 files changed, 24 insertions(+), 403 deletions(-) delete mode 100644 src/content/docs/recipes/openclaw/openclaw-desktop.md delete mode 100644 src/content/docs/recipes/openclaw/openclaw-full-ml-layer.md delete mode 100644 src/content/docs/recipes/openclaw/openclaw-full.md diff --git a/src/content/docs/recipes/coder/charly-arch.md b/src/content/docs/recipes/coder/charly-arch.md index 5f0eead8..290095d2 100644 --- a/src/content/docs/recipes/coder/charly-arch.md +++ b/src/content/docs/recipes/coder/charly-arch.md @@ -59,9 +59,9 @@ Resolved OCI security label: | `devices` | `[/dev/fuse, /dev/net/tun]` (from [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/)) | | `privileged` | `false` | -See [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) for the sibling rootless-first -box that proves this posture works under streaming-desktop + -nested-VM load, and [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/) for the kernel +See [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/) for the kernel +`mount_too_revealing()` RCA, and `fedora-coder` for a sibling rootless-first box. +[`/charly-distros:container-nesting`](/recipes/distros/container-nesting/) for the kernel `mount_too_revealing()` RCA. ### Network + port publishing @@ -73,8 +73,7 @@ mappings to work with. (That leg also handles host-networked containers via `HostConfig.NetworkMode` detection — `ContainerInspection.IsHostNetworked()` in `sdk/kit/checkvars.go` — so the bridge isn't strictly required — but it remains the portable default.) If host-port 2222 is already taken by -another running box (canonical conflict: [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) -or any `selkies-desktop-*` variant), remap at config time: +another running box (canonical conflict: any `selkies-desktop-*` variant), remap at config time: `charly config charly-arch -p 2223:2222`. ### MCP gateway (charly-mcp) diff --git a/src/content/docs/recipes/coder/fedora-coder.md b/src/content/docs/recipes/coder/fedora-coder.md index 84fad94b..cfc06ba8 100644 --- a/src/content/docs/recipes/coder/fedora-coder.md +++ b/src/content/docs/recipes/coder/fedora-coder.md @@ -11,8 +11,7 @@ description: "Kitchen-sink development box: coding + AI-coding CLIs + DevOps too The everyday-development counterpart to [`/charly-distros:charly-fedora`](/recipes/distros/charly-fedora/): all the coding + AI + DevOps tooling a developer needs in one box, no desktop, -no streaming. Distinct from `openclaw-desktop` (which adds the -browser-streamed Wayland desktop) — `fedora-coder` is headless and +no streaming. `fedora-coder` is headless and meant to be accessed via `ssh -p 2222` or `charly shell`. > **Location:** lives in the **`opencharly/distro-fedora`** repo (git submodule at @@ -85,8 +84,7 @@ normal `-p host:container` remapping (e.g. running `arch-coder` alongside No `uid:` / `gid:` / `user:` / `security:` override — inherits `1000/1000/user` from `defaults` and the candy-level security from -[`/charly-distros:container-nesting`](/recipes/distros/container-nesting/). Rootless-first by design (shares this -posture with [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/)). +[`/charly-distros:container-nesting`](/recipes/distros/container-nesting/). Rootless-first by design. ## Resolved security posture (OCI label) @@ -272,7 +270,7 @@ All four produce the same daily-dev surface (sshd on 2222, charly-mcp on 18765, - Building, deploying, or troubleshooting the `fedora-coder` box. - Picking the right power-user base image for a coding/dev workload (this - vs. `charly-fedora` vs. `charly-arch` vs. `openclaw-desktop`). + vs. `charly-fedora` vs. `charly-arch`). - Understanding the rootless-first architectural pattern shared by the four power-user boxes (kernel RCA belongs in [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/); the composition that proves it works diff --git a/src/content/docs/recipes/distros/charly-fedora.md b/src/content/docs/recipes/distros/charly-fedora.md index 3abb9d9c..69138008 100644 --- a/src/content/docs/recipes/distros/charly-fedora.md +++ b/src/content/docs/recipes/distros/charly-fedora.md @@ -57,8 +57,7 @@ Resolved OCI security label: | `devices` | `[/dev/fuse, /dev/net/tun]` (from [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/)) | | `privileged` | `false` | -See [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) (streaming-desktop sibling) and -[`/charly-coder:fedora-coder`](/recipes/coder/fedora-coder/) (kitchen-sink dev sibling) for other boxes +See [`/charly-coder:fedora-coder`](/recipes/coder/fedora-coder/) (kitchen-sink dev sibling) for another box sharing this posture, and [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/) for the kernel `mount_too_revealing()` RCA. diff --git a/src/content/docs/recipes/distros/container-nesting.md b/src/content/docs/recipes/distros/container-nesting.md index 798fe051..e23881ef 100644 --- a/src/content/docs/recipes/distros/container-nesting.md +++ b/src/content/docs/recipes/distros/container-nesting.md @@ -303,7 +303,7 @@ The resolved OCI label then unions to `cap_add:[ALL] + security_opt:[unmask=/proc/*, label=disable, seccomp=unconfined]`, which matches their historical posture. -Rootless boxes like [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) don't add a +A rootless box that composes this candy adds no box-level `security:` block, so the resolved posture stays at `security_opt:[unmask=/proc/*]` only — zero capability escalation. @@ -315,11 +315,11 @@ box-level `security:` block, so the resolved posture stays at ```yaml # charly.yml -openclaw-desktop: +my-rootless-box: base: cachyos.cachyos candy: - selkies-desktop - - openclaw-full + - my-openclaw-layer - ollama - charly - container-nesting # donates unmask + devices + config + env @@ -353,16 +353,16 @@ Both paths work; they just resolve to different OCI security labels. ## Verification ```bash -# Rootless posture on openclaw-desktop -charly box inspect openclaw-desktop | jq '.HostConfig? // .Config.Labels."ai.opencharly.security"' +# Rootless posture on the box +charly box inspect my-rootless-box | jq '.HostConfig? // .Config.Labels."ai.opencharly.security"' # → cap_add:[], security_opt:[unmask=/proc/*], devices:[/dev/fuse,/dev/net/tun] # Nested podman smoke (inside the running container) -charly shell openclaw-desktop -c 'podman run --rm quay.io/libpod/alpine:latest true' +charly shell my-rootless-box -c 'podman run --rm quay.io/libpod/alpine:latest true' # → exit 0, NO "mount proc to proc: Operation not permitted" # Diagnostic: inspect the OCI spec generated for a nested container -charly shell openclaw-desktop -c ' +charly shell my-rootless-box -c ' podman create --name t quay.io/libpod/alpine:latest /bin/true >/dev/null sf=$(find ~/.local/share/containers -name config.json -path "*/userdata/*" | head -1) jq ".linux.maskedPaths" "$sf"' @@ -403,7 +403,7 @@ this order: - Authoring or debugging any candy/box that needs nested podman, buildah, or skopeo. - Chasing `mount_too_revealing` / `mount proc to proc: Operation not permitted` errors — this is the authoritative RCA. - Choosing between `--privileged`, `cap_add: ALL`, and `unmask=/proc/*` — this skill documents why the surgical `unmask` fix is the minimum-privilege path and the others are hammers. -- Evaluating the security posture of [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/), [`/charly-distros:charly-fedora`](/recipes/distros/charly-fedora/), [`/charly-coder:charly-arch`](/recipes/coder/charly-arch/), or [`/charly-distros:githubrunner`](/recipes/distros/githubrunner/). +- Evaluating the security posture of [`/charly-distros:charly-fedora`](/recipes/distros/charly-fedora/), [`/charly-coder:charly-arch`](/recipes/coder/charly-arch/), or [`/charly-distros:githubrunner`](/recipes/distros/githubrunner/). ## Related diff --git a/src/content/docs/recipes/distros/githubrunner.md b/src/content/docs/recipes/distros/githubrunner.md index c806d3a9..d538c5f7 100644 --- a/src/content/docs/recipes/distros/githubrunner.md +++ b/src/content/docs/recipes/distros/githubrunner.md @@ -10,7 +10,7 @@ description: "Self-hosted GitHub Actions runner on CachyOS, fully rootless — r # githubrunner Self-hosted GitHub Actions runner on **CachyOS**, fully rootless. Shares the -rootless nested-container posture with [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) (uid=1000, +rootless nested-container posture (uid=1000, no caps, `unmask=/proc/*` via [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/)). ## Box Properties diff --git a/src/content/docs/recipes/infrastructure/virtualization.md b/src/content/docs/recipes/infrastructure/virtualization.md index 8142aa42..85c62bb5 100644 --- a/src/content/docs/recipes/infrastructure/virtualization.md +++ b/src/content/docs/recipes/infrastructure/virtualization.md @@ -158,7 +158,7 @@ Two deliberate choices: - **No `user=` directive.** The supervisord programs inherit the parent supervisord's uid. On `charly-fedora`/`charly-arch`/`githubrunner`, supervisord runs as uid 0 → daemons run as uid 0 → - `qemu:///session` targets root's session. On `openclaw-desktop`, + `qemu:///session` targets root's session. On a box whose supervisord supervisord runs as uid 1000 → daemons run as uid 1000 → `qemu:///session` targets user's session. Both work because the session URI keys off `$XDG_RUNTIME_DIR` rather than a fixed socket @@ -184,7 +184,7 @@ This candy makes that URI actually work inside a container at uid gets KVM acceleration. - `virsh -c qemu:///session domcapabilities` reports `kvm` once the daemons are running — verified - on `openclaw-desktop` at uid 1000. + on a rootless box at uid 1000. ## Tests baked into the candy @@ -224,7 +224,7 @@ See [`/charly-check:check`](/recipes/check/check/) "`package:` + `package_map:` ```yaml # charly.yml — rootless nested VM image -openclaw-desktop: +my-rootless-vm-box: candy: - ... - charly # the full toolchain — pulls virtualization diff --git a/src/content/docs/recipes/ollama/ollama.md b/src/content/docs/recipes/ollama/ollama.md index 56d8f8a2..20d8678b 100644 --- a/src/content/docs/recipes/ollama/ollama.md +++ b/src/content/docs/recipes/ollama/ollama.md @@ -79,7 +79,7 @@ and Volumes.) such list through the Arch-only rule above, which is the part that does not move. - A consumer that composes neither pays for neither ON A PACKAGED DISTRO — - e.g. [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) (cachyos base, no GPU candy). On a + e.g. a CachyOS base with no GPU candy. On a tarball distro it still carries the bundled CUDA backend. ## Ports diff --git a/src/content/docs/recipes/openclaw/openclaw-desktop.md b/src/content/docs/recipes/openclaw/openclaw-desktop.md deleted file mode 100644 index c03b0f93..00000000 --- a/src/content/docs/recipes/openclaw/openclaw-desktop.md +++ /dev/null @@ -1,253 +0,0 @@ ---- -title: "openclaw-desktop" -description: "Use when working with the openclaw-desktop box — the all-in-one CachyOS power box that fuses the selkies streaming desktop, the openclaw-full gateway + AI CLIs (claude-code/codex/gemini), a CPU ollama, and the full nested charly toolchain (build boxes / run nested rootless pods / launch rootless libvirt VMs from a terminal inside the browser-accessible desktop)." ---- - - - -*Recipe card from the `charly-openclaw` plugin (Images — the deployable catalog).* - -# openclaw-desktop - -The all-in-one workstation box: a browser-accessible Wayland **streaming -desktop** that also runs the **OpenClaw gateway + its full tool/skill stack**, -a **CPU Ollama** inference server, and the **complete `charly` toolchain** — all as -uid 1000 `user` with no `--privileged` and no added capabilities. Open -`https://localhost:3000`, get a labwc desktop with Chrome, and from a terminal -inside it you can `charly box build`, run nested rootless pods, launch rootless -libvirt VMs, drive the OpenClaw gateway on :18789, and hit a local Ollama on -:11434. - -## Definition - -```yaml -openclaw-desktop: - base: cachyos.cachyos # Arch-derived, pacman/AUR, x86_64_v3 (via the `cachyos` import namespace) - build: [pac, aur] # required — selkies' chrome (AUR google-chrome) + wl-tools (AUR wlrctl) - candy: - - agent-forwarding - - selkies-desktop # full streaming desktop stack - - openclaw-full # gateway + the OpenClaw tools incl. claude-code/codex/gemini - - ollama # CPU ollama (GPU-agnostic layer) - - charly # the full toolchain: charly binary + virtualization + gocryptfs + socat - - container-nesting # nested rootless podman/buildah/skopeo - - '@github.com/opencharly/layer-golang' - - gh - - '@github.com/opencharly/pod-dbus' - - charly - port: - - "3000:3000" # Selkies web UI (Traefik HTTPS) - - "9222:9222" # Chrome DevTools Protocol (cdp-proxy) - - "9224:9224" # chrome-devtools-mcp (Streamable HTTP) - - "2222:2222" # sshd-wrapper - - "18789:18789" # OpenClaw gateway - - "11434:11434" # Ollama API - platform: [linux/amd64] -``` - -No `uid:`/`gid:`/`user:`/`network:` override — inherits `1000/1000/user` and the -default `charly` bridge network. Rootless is the whole design. - -## Base — CachyOS, CPU - -`base: cachyos.cachyos` ([`/charly-distros:cachyos`](/recipes/distros/cachyos/), reached via the `cachyos` import -namespace) is the Arch-derived `x86_64_v3` base. The -box is **CPU-only** — there is no `nvidia`/`cuda` candy. Ollama auto-detects -the absence of a GPU and runs CPU inference; selkies streams via the CPU x264 -encoder. `build: [pac, aur]` is mandatory (not inherited): selkies' `chrome` -candy compiles `google-chrome` from AUR and `wl-tools` builds `wlrctl`; -inheriting cachyos's bare `[pac]` would gate out the AUR builder and silently -drop the browser. The `aur → arch-builder` builder map comes from the cachyos -base. - -## Resolved security posture (OCI label) - -| Field | Value | -|---|---| -| `cap_add` | **(empty)** | -| `security_opt` | `[unmask=/proc/*]` (from [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/)) | -| `devices` | `[/dev/fuse, /dev/net/tun]` (from [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/)) | -| `shm_size` | `1g` (from [`/charly-selkies:chrome`](/recipes/selkies/chrome/)) | -| `memory_max` | `6g` (from [`/charly-selkies:chrome`](/recipes/selkies/chrome/)) | -| `privileged` | `false` | -| Network | default charly bridge (NOT host) | -| UID / user | `1000 / user` | - -**No `--privileged`. No `cap_add: ALL`. No `seccomp=unconfined`. No -`label=disable`.** The only security relaxation is `unmask=/proc/*` — surgical, -documented in [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/) with the full kernel-level RCA. - -## The four fused stacks - -| Stack | Candies | What it gives you | -|---|---|---| -| Streaming desktop | `selkies-desktop` (chrome, chrome-cdp, labwc, waybar, pipewire, swaync, pavucontrol, wl-tools, selkies, sshd, …) | labwc Wayland desktop streamed over HTTPS:3000; Chrome + CDP:9222 + chrome-devtools-mcp:9224; sshd:2222 | -| OpenClaw + tools | `openclaw-full` (openclaw gateway + claude-code, codex, gemini + more tools) | AI gateway on :18789; `claude` CLI at `/usr/local/bin/claude`, `codex` / `gemini` CLIs at `${HOME}/.npm-global/bin/`; playwright now drives the desktop's real Chrome (synergy) | -| LLM inference | `ollama` | CPU Ollama API on :11434; `ollama` host alias; `models` volume at `~/.ollama` | -| Nested charly toolchain | `charly` + `container-nesting` + `golang` + `gh` | `charly box build`, nested rootless podman/buildah/skopeo, rootless libvirt VMs, gocryptfs encrypted volumes, socat relays | - -**Browser synergy:** `openclaw-full` ships `playwright` but deliberately omits a -system browser (it's normally headless). Fusing it with `selkies-desktop`'s -`chrome` + `chrome-cdp` stack gives playwright a real browser + CDP on :9222 — -a pure enhancement, no conflict. - -## Ports - -| Port | Service | -|---|---| -| 3000 | Selkies web UI (Traefik HTTPS, self-signed) | -| 9222 | Chrome DevTools Protocol (via `cdp-proxy`) | -| 9224 | `chrome-devtools-mcp` (Streamable HTTP) | -| 2222 | `sshd-wrapper` (supervisord-managed) | -| 18789 | OpenClaw gateway + Control UI | -| 11434 | Ollama API | - -All six are distinct — no collisions. For multi-instance deployments alongside a -running selkies/openclaw instance holding these host ports, remap via -`charly config openclaw-desktop -p 3010:3000 -p 9232:9222 -p 9242:9224 -p 2232:2222 -p 18790:18789 -p 11444:11434`. - -## Quick Start - -```bash -charly box build openclaw-desktop -charly config openclaw-desktop -charly start openclaw-desktop -# Desktop: https://localhost:3000 (accept the self-signed cert) -# Gateway: http://localhost:18789 -# Ollama: curl http://localhost:11434/api/tags -charly shell openclaw-desktop -c "ollama pull llama3" -``` - -## Nested rootless podman — how it works here - -See [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/) for the full kernel-level RCA. The short -version: podman's rootless outer container injects `linux.maskedPaths`; the -kernel's `mount_too_revealing()` then refuses any fresh `/proc` mount from the -inner container. `unmask=/proc/*` tells podman not to emit those masks on the -outer, so the inner `/proc` mount has nothing to mismatch with. Verified: - -```bash -charly shell openclaw-desktop -c 'podman run --rm quay.io/libpod/alpine:latest /bin/true' -# zero extra caps, uid 1000 -``` - -## Nested rootless VMs — how it works here - -See [`/charly-infrastructure:virtualization`](/recipes/infrastructure/virtualization/). `virtqemud --timeout 0` + -`virtnetworkd --timeout 0` run as supervisord programs at uid 1000; libvirt -`qemu:///session` keys off `$XDG_RUNTIME_DIR` and needs no CAP_SYS_ADMIN — only -`/dev/kvm` passthrough. - -```bash -charly shell openclaw-desktop -c 'virsh -c qemu:///session list --all' -``` - -### Two-level nested-virtualization (end-to-end `charly vm` run-through) - -The full `charly vm build/create/ssh/stop/destroy` lifecycle completes inside the -rootless pod, two levels of KVM nesting deep: - -1. Host (rootless podman, uid 1000) runs `charly-openclaw-desktop`. -2. Inside it, `charly vm build --transport containers-storage` - auto-falls back to `engine.rootful=machine` (no host `sudo` in reach), which - spawns a podman-machine VM (nested VM #1) via KVM passthrough and runs - `bootc install to-disk`. -3. `charly vm create -i smoke --ssh-key generate` boots the produced - qcow2 as a QEMU user-net VM (nested VM #2). -4. `charly vm ssh -i smoke -- uname -a` returns the guest kernel. -5. `charly vm destroy --disk` cleans up. - -No `--privileged`, no `cap_add`, no seccomp relaxations beyond the baked -`[unmask=/proc/*]`. Only `/dev/kvm` passthrough. - -### Cross-storage loading for private bootc images - -The podman-machine in step 2 has its own rootful storage, separate from the -outer container's nested rootless store. Load a private bootc image via the host: - -```bash -# on host -podman save -o /tmp/bootc.tar ghcr.io//:latest -charly cp openclaw-desktop /tmp/bootc.tar :/tmp/bootc.tar -# inside the pod -podman load -i /tmp/bootc.tar # nested rootless store -podman --connection charly-root load -i /tmp/bootc.tar # podman-machine rootful store -charly vm build --transport containers-storage -``` - -### Docker Hub rate-limit note - -For nested test harnesses, prefer `quay.io/libpod/alpine:latest` (unmetered) -over `docker.io/library/alpine` — the baked `nested-podman-run` check already -uses this mirror. - -## What works from inside the desktop - -Every `charly` verb family runs as uid 1000 inside the container sandbox: -`charly box build/generate/validate/merge/inspect/list/pull`, -`charly check box/live/wl/libvirt` (cdp/vnc/mcp/record/kube/adb/appium/spice/dbus are declarative out-of-process verbs), -`charly config/deploy/start/stop/update/remove/shell/cmd/service/status/logs`, -`charly vm list/create/start/stop/ssh/destroy` (rootless libvirt session), -`charly doctor/secrets/settings/alias`. The `charly` candy bakes only the binary — for -build-mode verbs that read `charly.yml`, mount or `charly cp` the project in. - -## Volumes - -- `chrome-data` → `~/.chrome-debug` (Chrome profile, from the chrome candy) -- `selkies-config` → `~/.config/selkies` -- `models` → `~/.ollama` (Ollama model storage) - -## Verification - -```bash -charly status openclaw-desktop # all services RUNNING -curl -k https://localhost:3000 # selkies HTTPS 200 -curl -s http://localhost:18789 # openclaw gateway -curl -s http://localhost:11434/api/tags # ollama API -charly shell openclaw-desktop -c 'podman run --rm quay.io/libpod/alpine:latest /bin/true' -``` - -A desktop screenshot is captured by a `wl: screenshot` step, run with -`charly check live openclaw-desktop --filter wl`. - -The baked box-level `check:` carries the nested-rootless posture checks (subuid -two-ranges, `newuidmap` cap, `policy.json`, containers.conf `userns=host`, -`_CONTAINERS_USERNS_CONFIGURED` + `BUILDAH_ISOLATION` env), the deploy-scope -nested-toolchain checks (nested `podman run`, `virsh` session list, in-container -`charly version`/`charly doctor`), and the three fused services' liveness (gateway, -ollama API, chrome-devtools-mcp port). The R10 bed is -`check-openclaw-desktop-pod` (`charly check run check-openclaw-desktop-pod`). - -## Key Candies - -- [`/charly-selkies:selkies-desktop-layer`](/recipes/selkies/selkies-desktop-layer/) — the streaming desktop metalayer -- [`/charly-ollama:ollama`](/recipes/ollama/ollama/) — CPU/GPU-agnostic Ollama candy (GPU is box-level) -- [`/charly-tools:charly`](/recipes/tools/charly/) — the full toolchain: charly binary + virtualization + gocryptfs + socat -- [`/charly-distros:container-nesting`](/recipes/distros/container-nesting/) — rootless nested podman recipe (RCA for `unmask=/proc/*`) -- [`/charly-infrastructure:virtualization`](/recipes/infrastructure/virtualization/) — supervisord-managed virtqemud/virtnetworkd -- [`/charly-distros:agent-forwarding`](/recipes/distros/agent-forwarding/) — GPG/SSH/direnv agent sockets - -## Related Boxes - -- [`/charly-openclaw:openclaw`](/recipes/openclaw/openclaw/) — minimal gateway only. -- [`/charly-selkies:selkies-labwc`](/recipes/selkies/selkies-labwc/) — the CPU streaming desktop WITHOUT openclaw / ollama / charly toolchain. -- [`/charly-selkies:selkies-labwc-nvidia`](/recipes/selkies/selkies-labwc-nvidia/) — GPU streaming desktop (base nvidia), no openclaw/ollama/charly toolchain. -- [`/charly-distros:charly-fedora`](/recipes/distros/charly-fedora/) / [`/charly-coder:charly-arch`](/recipes/coder/charly-arch/) — root-mode charly toolchain WITHOUT a streaming desktop. - -## When to Use This Skill - -**MUST be invoked** when the task involves: - -- Building, deploying, or troubleshooting the `openclaw-desktop` box. -- Running `charly` verbs (image build, nested pods, rootless VMs) from inside a - streaming desktop. -- The OpenClaw gateway, AI CLIs, or a CPU Ollama running alongside a Wayland - streaming desktop in one box. -- The non-`--privileged` rootless-in-rootless nesting path on a CachyOS desktop. - -## Related - -- [`/charly-image:image`](/recipes/image/image/) — image family umbrella (`candy:` image entries with `base:`/`from:`, build/validate/inspect/list) -- [`/charly-check:check`](/recipes/check/check/) — declarative testing + the `check-openclaw-desktop-pod` R10 bed -- [`/charly-check:cdp`](/recipes/check/cdp/), [`/charly-check:wl`](/recipes/check/wl/) — desktop automation on this box -- [`/charly-core:charly-config`](/recipes/core/charly-config/) — deploy setup (tunnel, port remapping, multi-instance, encrypted volumes) diff --git a/src/content/docs/recipes/openclaw/openclaw-full-ml-layer.md b/src/content/docs/recipes/openclaw/openclaw-full-ml-layer.md deleted file mode 100644 index aa0f7bba..00000000 --- a/src/content/docs/recipes/openclaw/openclaw-full-ml-layer.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "openclaw-full-ml-layer" -description: "OpenClaw full + ML tools (whisper, sherpa-onnx-tts, CUDA)." ---- - - - -*Recipe card from the `charly-openclaw` plugin (Images — the deployable catalog).* - -# openclaw-full-ml -- OpenClaw full + ML tools - -## Candy Properties - -| Property | Value | -|----------|-------| -| Install files | `charly.yml` (metalayer, layers only) | -| Depends | none (composes other candies) | - -## Composed Candies - -This metalayer extends `openclaw-full` with ML capabilities: - -- `openclaw-full` -- all OpenClaw tools -- `whisper` -- OpenAI Whisper speech-to-text (requires CUDA) -- `sherpa-onnx` -- Offline text-to-speech - -## Usage - -```yaml -# box charly.yml — composition is an inline candy: list in the body -openclaw-full-ml-box: - candy: - base: nvidia - candy: - - openclaw-full-ml -``` - -## Used In Boxes - - -## Related Candies -- [`/charly-tools:whisper`](/recipes/tools/whisper/) -- speech-to-text component -- [`/charly-tools:sherpa-onnx`](/recipes/tools/sherpa-onnx/) -- offline TTS component - -## Related Commands -- [`/charly-automation:openclaw-deploy`](/recipes/automation/openclaw-deploy/) -- gateway configuration and channel setup -- [`/charly-build:build`](/recipes/build/build/) -- build boxes composing this metalayer - -## When to Use This Skill - -Use when the user asks about: -- OpenClaw with ML/AI capabilities -- Speech-to-text and text-to-speech in OpenClaw -- CUDA-accelerated OpenClaw deployment -- The `openclaw-full-ml` candy - -## Related - -- [`/charly-image:layer`](/recipes/image/layer/) — candy authoring reference (`charly.yml` schema, plan steps, service declarations) -- [`/charly-check:check`](/recipes/check/check/) — declarative testing (`check:` block, `charly check box`, `charly check live`) diff --git a/src/content/docs/recipes/openclaw/openclaw-full.md b/src/content/docs/recipes/openclaw/openclaw-full.md deleted file mode 100644 index c5c8554a..00000000 --- a/src/content/docs/recipes/openclaw/openclaw-full.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: "openclaw-full" -description: "Headless OpenClaw with all tool candies." ---- - - - -*Recipe card from the `charly-openclaw` plugin (Images — the deployable catalog).* - -# openclaw-full - -Headless OpenClaw box with maximal tool/skill coverage. No desktop, no VNC. - -## Box Properties - -| Property | Value | -|----------|-------| -| Base | cachyos | -| Candies | agent-forwarding, openclaw-full | -| Platforms | linux/amd64 | -| Ports | 18789 (gateway) | -| Registry | ghcr.io/opencharly | - -## Full Candy Stack - -1. `cachyos` (external base, Arch-derived — pacman/AUR) -2. `openclaw-full` metalayer (no system browser): - - `openclaw` — AI gateway - - `claude-code` — Claude Code CLI - - the tool candies (codex, gemini, clawhub, mcporter, oracle, xurl, summarize, playwright, blogwatcher, gifgrep, wacli, goplaces, songsee, sag, camsnap, gogcli, ordercli, himalaya, uv, nano-pdf, gh, tmux, ffmpeg, ripgrep, sqlite) - -## Ports - -| Port | Service | Protocol | -|------|---------|----------| -| 18789 | OpenClaw gateway | HTTP | - -## Quick Start - -```bash -charly box build openclaw-full -charly config openclaw-full -charly start openclaw-full -``` - -## Key Candies - -- [`/charly-openclaw:openclaw`](/recipes/openclaw/openclaw/) — AI gateway service - -## Related Boxes - -- [`/charly-openclaw:openclaw`](/recipes/openclaw/openclaw/) — minimal (gateway only) - -## When to Use This Skill - -**MUST be invoked** when the task involves the openclaw-full box or the headless maximal OpenClaw deployment. - -## Related - -- [`/charly-image:image`](/recipes/image/image/) — image family umbrella (`candy:` image entries — those carrying `base:`/`from:` — in `charly.yml`, build/validate/inspect/list) -- [`/charly-build:build`](/recipes/build/build/) — the embedded build vocabulary (distros, builders, init-systems) diff --git a/src/content/docs/recipes/tools/gifgrep.md b/src/content/docs/recipes/tools/gifgrep.md index fa7707c7..2d3455c7 100644 --- a/src/content/docs/recipes/tools/gifgrep.md +++ b/src/content/docs/recipes/tools/gifgrep.md @@ -35,7 +35,7 @@ my-box: ## Related Candies - [`/charly-coder:golang`](/recipes/coder/golang/) — required Go toolchain dependency -- [`/charly-tools:goplaces`](/recipes/tools/goplaces/) — sibling Go-based CLI in openclaw-full +- [`/charly-tools:goplaces`](/recipes/tools/goplaces/) — sibling Go-based CLI ## Related Commands - [`/charly-build:build`](/recipes/build/build/) — compiles gifgrep via the Go builder during image build diff --git a/src/content/docs/recipes/tools/nano-pdf.md b/src/content/docs/recipes/tools/nano-pdf.md index 499e2ffc..9df62843 100644 --- a/src/content/docs/recipes/tools/nano-pdf.md +++ b/src/content/docs/recipes/tools/nano-pdf.md @@ -28,7 +28,7 @@ my-box: ## Related Candies - [`/charly-languages:python`](/recipes/languages/python/) — required Python runtime dependency -- [`/charly-coder:uv`](/recipes/coder/uv/) — sibling Python tooling in openclaw-full +- [`/charly-coder:uv`](/recipes/coder/uv/) — sibling Python tooling ## Related Commands - [`/charly-build:build`](/recipes/build/build/) — installs nano-pdf via the pixi builder during image build diff --git a/src/content/docs/recipes/vm/vm.md b/src/content/docs/recipes/vm/vm.md index 1a222030..1c28ab4e 100644 --- a/src/content/docs/recipes/vm/vm.md +++ b/src/content/docs/recipes/vm/vm.md @@ -620,8 +620,7 @@ rm /tmp/bootc.tar charly vm build --transport containers-storage ``` -`--transport containers-storage` forces `bootc install` to pull from the machine's local store. Worked example: [`/charly-openclaw:openclaw-desktop`](/recipes/openclaw/openclaw-desktop/) "Two-level nested-virtualization proof". - +`--transport containers-storage` forces `bootc install` to pull from the machine's local store. ### `charly vm destroy` — the DEPLOY name keys the domain (`--domain`) and missing targets are strict The libvirt domain is keyed by the **DEPLOY name** — `charly-` (strip a From e02286b2fdd4de19fda55db0178e78eaa6a514e4 Mon Sep 17 00:00:00 2001 From: charly Date: Fri, 9 Oct 2026 01:44:26 +0200 Subject: [PATCH 4/4] fix(docs)!: consolidate the whole retired-OpenClaw docs sweep into one change The docs sweep had been split across four PRs touching overlapping files with two different approaches. This change is the single, complete one: every hand-authored page is de-named or sweeps the retired references, and every page that existed only for a retired entity - the four recipes/openclaw pages and the eight generated reference/candy pages - is deleted, together with their index entries. The substitution approach used elsewhere is dropped: the family box is headless, so describing it as the desktop box was false. Agent: openclaw-family Assisted-by: DSH DeepSeek deepseek-v4.1-flash (documentation reviewed) --- src/content/docs/recipes/index.md | 6 +- .../recipes/openclaw/openclaw-full-layer.md | 87 ------------------- .../charly-openclaw.md | 24 ----- .../charly-openclaw.md | 24 ----- .../openclaw-full.md | 46 ---------- .../openclaw-full.md | 46 ---------- .../openclaw-full.md | 46 ---------- .../openclaw.md | 38 -------- .../openclaw.md | 38 -------- .../openclaw.md | 40 --------- 10 files changed, 1 insertion(+), 394 deletions(-) delete mode 100644 src/content/docs/recipes/openclaw/openclaw-full-layer.md delete mode 100644 src/content/docs/reference/candy/github-com-opencharly-layer-charly-openclaw-v2026-239-1640/charly-openclaw.md delete mode 100644 src/content/docs/reference/candy/github-com-opencharly-layer-charly-openclaw-v2026-243-0950/charly-openclaw.md delete mode 100644 src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-238-2103/openclaw-full.md delete mode 100644 src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-240-0119/openclaw-full.md delete mode 100644 src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-247-0718/openclaw-full.md delete mode 100644 src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-237-558/openclaw.md delete mode 100644 src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-239-1639/openclaw.md delete mode 100644 src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-246-2119/openclaw.md diff --git a/src/content/docs/recipes/index.md b/src/content/docs/recipes/index.md index 28eed272..2e4a10b8 100644 --- a/src/content/docs/recipes/index.md +++ b/src/content/docs/recipes/index.md @@ -400,14 +400,10 @@ Self-contained skills for running the ollama LLM-server image. ### charly-openclaw -Self-contained skills for the openclaw image family (CachyOS base): the headless openclaw gateway and the maximal non-browser openclaw-full. +Self-contained skills for the openclaw image family (CachyOS base): the headless openclaw gateway and its gateway layer. - [clawhub](/recipes/openclaw/clawhub/) - [openclaw](/recipes/openclaw/openclaw/) -- [openclaw-desktop](/recipes/openclaw/openclaw-desktop/) -- [openclaw-full](/recipes/openclaw/openclaw-full/) -- [openclaw-full-layer](/recipes/openclaw/openclaw-full-layer/) -- [openclaw-full-ml-layer](/recipes/openclaw/openclaw-full-ml-layer/) - [openclaw-layer](/recipes/openclaw/openclaw-layer/) ### charly-openwebui diff --git a/src/content/docs/recipes/openclaw/openclaw-full-layer.md b/src/content/docs/recipes/openclaw/openclaw-full-layer.md deleted file mode 100644 index e3716f06..00000000 --- a/src/content/docs/recipes/openclaw/openclaw-full-layer.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: "openclaw-full-layer" -description: "Maximal OpenClaw deployment (gateway + browser + all feasible tools/skills)." ---- - - - -*Recipe card from the `charly-openclaw` plugin (Images — the deployable catalog).* - -# openclaw-full -- Maximal OpenClaw deployment - -## Candy Properties - -| Property | Value | -|----------|-------| -| Install files | `charly.yml` (metalayer, layers only) | -| Depends | none (composes other candies) | - -## Composed Candies - -This metalayer includes the following candies: - -- `openclaw` -- AI gateway -- `chrome` -- Google Chrome browser -- `claude-code` -- Claude Code CLI -- `codex` -- OpenAI Codex CLI -- `gemini` -- Google Gemini CLI -- `clawhub` -- ClawHub skill registry CLI -- `mcporter` -- MCP server CLI -- `oracle` -- Prompt bundling CLI -- `xurl` -- X/Twitter API CLI -- `summarize` -- URL/transcript extractor -- `playwright` -- Browser automation -- `blogwatcher` -- Blog/RSS feed monitor -- `gifgrep` -- GIF search and download -- `wacli` -- WhatsApp CLI -- `goplaces` -- Google Places API CLI -- `songsee` -- Audio spectrogram -- `sag` -- ElevenLabs TTS CLI -- `camsnap` -- Camera snapshot CLI -- `gogcli` -- Google Workspace CLI -- `ordercli` -- Food delivery order CLI -- `himalaya` -- Email CLI -- `uv` -- Python package manager -- `nano-pdf` -- PDF editing CLI -- `gh` -- GitHub CLI -- `tmux` -- Terminal multiplexer -- `ffmpeg` -- FFmpeg multimedia -- `ripgrep` -- Fast text search -- `sqlite` -- SQLite database CLI - -## Usage - -```yaml -# box charly.yml — composition is an inline candy: list in the body -openclaw-full-box: - candy: - base: fedora - candy: - - openclaw-full -``` - -## Used In Boxes - -- `openclaw-full` - -## Related Candies -- [`/charly-openclaw:openclaw`](/recipes/openclaw/openclaw/) — base gateway layer included in this metalayer -- [`/charly-selkies:sway-desktop-vnc`](/recipes/selkies/sway-desktop-vnc/) — desktop candy paired in sway-browser boxes - -## Related Commands -- [`/charly-automation:openclaw-deploy`](/recipes/automation/openclaw-deploy/) — gateway configuration, model auth, and channel setup -- [`/charly-build:build`](/recipes/build/build/) — builds the metalayer composition into a box -- [`/charly-core:charly-config`](/recipes/core/charly-config/) — sets up secrets and quadlets for openclaw-full boxes - -## When to Use This Skill - -Use when the user asks about: -- Full OpenClaw deployment with all tools -- The `openclaw-full` metalayer composition -- Which tools are included in the maximal OpenClaw box -- The `openclaw-full` candy - -## Related - -- [`/charly-image:layer`](/recipes/image/layer/) — candy authoring reference (`charly.yml` schema, plan steps, service declarations) -- [`/charly-check:check`](/recipes/check/check/) — declarative testing (`check:` block, `charly check box`, `charly check live`) diff --git a/src/content/docs/reference/candy/github-com-opencharly-layer-charly-openclaw-v2026-239-1640/charly-openclaw.md b/src/content/docs/reference/candy/github-com-opencharly-layer-charly-openclaw-v2026-239-1640/charly-openclaw.md deleted file mode 100644 index 355aa1bc..00000000 --- a/src/content/docs/reference/candy/github-com-opencharly-layer-charly-openclaw-v2026-239-1640/charly-openclaw.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "charly-openclaw" -description: "Metadata concept candy owning the charly-openclaw skills whose names have no namesake candy (openclaw agent images)." ---- - - - -| | | -|---|---| -| **Version** | `2026.218.1200` | -| **Repo** | `box/github.com/opencharly/layer-charly-openclaw:v2026.239.1640` | - -Metadata concept candy owning the charly-openclaw skills whose names have no namesake candy (openclaw agent images). Owns its family's `skill:` kind entities (sibling nodes in this file) — the -the plugins→candies migration; candy/plugin-marketplace regenerates the marketplace -corpus (the standalone opencharly/marketplace repo) from them. - -## Acceptance plan - -This candy's `plan:` — the runnable spec `charly check` executes against a live deployment. `check:` steps are idempotent probes; `run:` steps change state. - -| Intent | Step | -|---|---| -| `run` | this documentation-only candy ships no install content (it carries the family's skill/hook/marketplace entities); validate-satisfying no-op | -| `check` | the openclaw concept candy's skill entities are present and generated into the marketplace's openclaw/skills | diff --git a/src/content/docs/reference/candy/github-com-opencharly-layer-charly-openclaw-v2026-243-0950/charly-openclaw.md b/src/content/docs/reference/candy/github-com-opencharly-layer-charly-openclaw-v2026-243-0950/charly-openclaw.md deleted file mode 100644 index 54005682..00000000 --- a/src/content/docs/reference/candy/github-com-opencharly-layer-charly-openclaw-v2026-243-0950/charly-openclaw.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "charly-openclaw" -description: "Metadata concept candy owning the charly-openclaw skills whose names have no namesake candy (openclaw agent images)." ---- - - - -| | | -|---|---| -| **Version** | `2026.243.0909` | -| **Repo** | `box/github.com/opencharly/layer-charly-openclaw:v2026.243.0950` | - -Metadata concept candy owning the charly-openclaw skills whose names have no namesake candy (openclaw agent images). Owns its family's `skill:` kind entities (sibling nodes in this file) — the -the plugins→candies migration; candy/plugin-marketplace regenerates the marketplace -corpus (the standalone opencharly/marketplace repo) from them. - -## Acceptance plan - -This candy's `plan:` — the runnable spec `charly check` executes against a live deployment. `check:` steps are idempotent probes; `run:` steps change state. - -| Intent | Step | -|---|---| -| `run` | this documentation-only candy ships no install content (it carries the family's skill/hook/marketplace entities); validate-satisfying no-op | -| `check` | the openclaw concept candy's skill entities are present and generated into the marketplace's openclaw/skills | diff --git a/src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-238-2103/openclaw-full.md b/src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-238-2103/openclaw-full.md deleted file mode 100644 index 254c8b8f..00000000 --- a/src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-238-2103/openclaw-full.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "openclaw-full" -description: "Maximal headless OpenClaw deployment — gateway plus all feasible CLI tools/skills, no system Chrome/CDP openclaw-full is a pure meta-composition candy: it installs nothing of its own and instead composes a large set of candies — the openclaw gateway, the claude-code CLI, and the tool candies (codex, gemini, clawhub, mcporter, oracle, xurl, summarize, playwright, ripgrep, sqlite, tmux, ffmpeg, gh, uv, himalaya, …)." ---- - - - -| | | -|---|---| -| **Version** | `2026.200.1600` | -| **Repo** | `box/github.com/opencharly/layer-openclaw-full:v2026.238.2103` | - -Maximal headless OpenClaw deployment — gateway plus all feasible CLI tools/skills, no system Chrome/CDP -openclaw-full is a pure meta-composition candy: it installs nothing of -its own and instead composes a large set of candies — the openclaw gateway, the -claude-code CLI, and the tool candies (codex, gemini, clawhub, mcporter, -oracle, xurl, summarize, playwright, ripgrep, sqlite, tmux, ffmpeg, gh, -uv, himalaya, …). The observable effect of the composition is that every -composed tool's key artifact lands in ONE image: the openclaw / mcporter -binaries under ~/.npm-global/bin, the claude binary under /usr/local/bin -(native installer, relocated at build time so it survives the deploy-time -home-volume mount), uv under /usr/local/bin, and rg / sqlite3 / tmux / -ffmpeg / gh under /usr/bin. The scenarios and check -block assert that cross-section — they FAIL if any composed candy is -dropped from the metalayer. The gateway's own port reachability is -already checked by the composed openclaw candy and rides along. - -## Acceptance plan - -This candy's `plan:` — the runnable spec `charly check` executes against a live deployment. `check:` steps are idempotent probes; `run:` steps change state. - -| Intent | Step | -|---|---| -| `check` | the claude-code CLI is composed into the image under the native install location | -| `check` | claude --version exits cleanly and prints the Claude Code banner | -| `check` | the mcporter MCP CLI is composed into the image | -| `check` | ripgrep's rg binary is present from the composed ripgrep candy | -| `check` | the sqlite3 shell is present from the composed sqlite candy | -| `check` | tmux is present from the composed tmux candy | -| `check` | ffmpeg is present from the composed ffmpeg candy | -| `check` | the GitHub CLI gh is present from the composed gh candy | -| `check` | the uv Python package manager is composed into the image at /usr/local/bin/uv | -| `agent-check` | the running OpenClaw gateway exposes the bundled CLI tools to agent requests without relying on a system browser | -| `check` | package=ripgrep | -| `check` | file=/usr/bin/git | -| `check` | file=/usr/local/bin/uvx | diff --git a/src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-240-0119/openclaw-full.md b/src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-240-0119/openclaw-full.md deleted file mode 100644 index 97a0e02c..00000000 --- a/src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-240-0119/openclaw-full.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "openclaw-full" -description: "Maximal headless OpenClaw deployment — gateway plus all feasible CLI tools/skills, no system Chrome/CDP openclaw-full is a pure meta-composition candy: it installs nothing of its own and instead composes a large set of candies — the openclaw gateway, the claude-code CLI, and the tool candies (codex, gemini, clawhub, mcporter, oracle, xurl, summarize, playwright, ripgrep, sqlite, tmux, ffmpeg, gh, uv, himalaya, …)." ---- - - - -| | | -|---|---| -| **Version** | `2026.200.1600` | -| **Repo** | `box/github.com/opencharly/layer-openclaw-full:v2026.240.0119` | - -Maximal headless OpenClaw deployment — gateway plus all feasible CLI tools/skills, no system Chrome/CDP -openclaw-full is a pure meta-composition candy: it installs nothing of -its own and instead composes a large set of candies — the openclaw gateway, the -claude-code CLI, and the tool candies (codex, gemini, clawhub, mcporter, -oracle, xurl, summarize, playwright, ripgrep, sqlite, tmux, ffmpeg, gh, -uv, himalaya, …). The observable effect of the composition is that every -composed tool's key artifact lands in ONE image: the openclaw / mcporter -binaries under ~/.npm-global/bin, the claude binary under /usr/local/bin -(native installer, relocated at build time so it survives the deploy-time -home-volume mount), uv under /usr/local/bin, and rg / sqlite3 / tmux / -ffmpeg / gh under /usr/bin. The scenarios and check -block assert that cross-section — they FAIL if any composed candy is -dropped from the metalayer. The gateway's own port reachability is -already checked by the composed openclaw candy and rides along. - -## Acceptance plan - -This candy's `plan:` — the runnable spec `charly check` executes against a live deployment. `check:` steps are idempotent probes; `run:` steps change state. - -| Intent | Step | -|---|---| -| `check` | the claude-code CLI is composed into the image under the native install location | -| `check` | claude --version exits cleanly and prints the Claude Code banner | -| `check` | the mcporter MCP CLI is composed into the image | -| `check` | ripgrep's rg binary is present from the composed ripgrep candy | -| `check` | the sqlite3 shell is present from the composed sqlite candy | -| `check` | tmux is present from the composed tmux candy | -| `check` | ffmpeg is present from the composed ffmpeg candy | -| `check` | the GitHub CLI gh is present from the composed gh candy | -| `check` | the uv Python package manager is composed into the image at /usr/local/bin/uv | -| `agent-check` | the running OpenClaw gateway exposes the bundled CLI tools to agent requests without relying on a system browser | -| `check` | package=ripgrep | -| `check` | file=/usr/bin/git | -| `check` | file=/usr/local/bin/uvx | diff --git a/src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-247-0718/openclaw-full.md b/src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-247-0718/openclaw-full.md deleted file mode 100644 index 981b8a76..00000000 --- a/src/content/docs/reference/candy/github-com-opencharly-layer-openclaw-full-v2026-247-0718/openclaw-full.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "openclaw-full" -description: "Maximal headless OpenClaw deployment (OpenClaw 2.0 gateway, npm openclaw@2026.8.x) — gateway plus all feasible CLI tools/skills, no system Chrome/CDP openclaw-full is a pure meta-composition candy: it installs nothing of its own and instead composes a large set of candies — the openclaw gateway, the claude-code CLI, and the tool candies (codex, gemini, clawhub, mcporter, oracle, xurl, summarize, playwright, ripgrep, sqlite, tmux, ffmpeg, gh, uv, himalaya, …)." ---- - - - -| | | -|---|---| -| **Version** | `2026.246.0300` | -| **Repo** | `box/github.com/opencharly/layer-openclaw-full:v2026.247.0718` | - -Maximal headless OpenClaw deployment (OpenClaw 2.0 gateway, npm openclaw@2026.8.x) — gateway plus all feasible CLI tools/skills, no system Chrome/CDP -openclaw-full is a pure meta-composition candy: it installs nothing of -its own and instead composes a large set of candies — the openclaw gateway, the -claude-code CLI, and the tool candies (codex, gemini, clawhub, mcporter, -oracle, xurl, summarize, playwright, ripgrep, sqlite, tmux, ffmpeg, gh, -uv, himalaya, …). The observable effect of the composition is that every -composed tool's key artifact lands in ONE image: the openclaw / mcporter -binaries under ~/.npm-global/bin, the claude binary under /usr/local/bin -(native installer, relocated at build time so it survives the deploy-time -home-volume mount), uv under /usr/local/bin, and rg / sqlite3 / tmux / -ffmpeg / gh under /usr/bin. The scenarios and check -block assert that cross-section — they FAIL if any composed candy is -dropped from the metalayer. The gateway's own port reachability is -already checked by the composed openclaw candy and rides along. - -## Acceptance plan - -This candy's `plan:` — the runnable spec `charly check` executes against a live deployment. `check:` steps are idempotent probes; `run:` steps change state. - -| Intent | Step | -|---|---| -| `check` | the claude-code CLI is composed into the image under the native install location | -| `check` | claude --version exits cleanly and prints the Claude Code banner | -| `check` | the mcporter MCP CLI is composed into the image | -| `check` | ripgrep's rg binary is present from the composed ripgrep candy | -| `check` | the sqlite3 shell is present from the composed sqlite candy | -| `check` | tmux is present from the composed tmux candy | -| `check` | ffmpeg is present from the composed ffmpeg candy | -| `check` | the GitHub CLI gh is present from the composed gh candy | -| `check` | the uv Python package manager is composed into the image at /usr/local/bin/uv | -| `agent-check` | the running OpenClaw gateway exposes the bundled CLI tools to agent requests without relying on a system browser | -| `check` | package=ripgrep | -| `check` | file=/usr/bin/git | -| `check` | file=/usr/local/bin/uvx | diff --git a/src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-237-558/openclaw.md b/src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-237-558/openclaw.md deleted file mode 100644 index 245acc26..00000000 --- a/src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-237-558/openclaw.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: "openclaw" -description: "Headless OpenClaw AI gateway service on port 18789 Installs the openclaw npm package globally (package.json -> npm install -g) so the gateway binary lands at ~/.npm-global/bin/openclaw, then runs it as the supervised `openclaw` service (`openclaw gateway --port 18789 --allow-unconfigured --bind loopback` — loopback bind needs no auth and matches the socat relay; unconfigured lets the headless gateway start before any operator setup)." ---- - - - -| | | -|---|---| -| **Version** | `2026.200.0158` | -| **Repo** | `box/github.com/opencharly/pod-openclaw:v2026.237.558` | - -Headless OpenClaw AI gateway service on port 18789 -Installs the openclaw npm package globally (package.json -> -npm install -g) so the gateway binary lands at -~/.npm-global/bin/openclaw, then runs it as the supervised -`openclaw` service (`openclaw gateway --port 18789 ---allow-unconfigured --bind loopback` — loopback bind needs no -auth and matches the socat relay; unconfigured lets the headless -gateway start before any operator setup). socat -relays the loopback-bound gateway onto the container interface -and a `data` volume persists ~/.openclaw. Binary presence, the -supervised service, and the reachable port are all verifiable. - -## Services - -- `openclaw` - -## Acceptance plan - -This candy's `plan:` — the runnable spec `charly check` executes against a live deployment. `check:` steps are idempotent probes; `run:` steps change state. - -| Intent | Step | -|---|---| -| `check` | the openclaw gateway binary is installed into the npm global bin | -| `check` | the openclaw gateway reports the exact security-patched package version | -| `check` | the openclaw gateway runs as a supervised service | -| `check` | the running gateway accepts a TCP connection on its published port 18789 | diff --git a/src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-239-1639/openclaw.md b/src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-239-1639/openclaw.md deleted file mode 100644 index 703e371a..00000000 --- a/src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-239-1639/openclaw.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: "openclaw" -description: "Headless OpenClaw AI gateway service on port 18789 Installs the openclaw npm package globally (package.json -> npm install -g) so the gateway binary lands at ~/.npm-global/bin/openclaw, then runs it as the supervised `openclaw` service (`openclaw gateway --port 18789 --allow-unconfigured --bind loopback` — loopback bind needs no auth and matches the socat relay; unconfigured lets the headless gateway start before any operator setup)." ---- - - - -| | | -|---|---| -| **Version** | `2026.200.0158` | -| **Repo** | `box/github.com/opencharly/pod-openclaw:v2026.239.1639` | - -Headless OpenClaw AI gateway service on port 18789 -Installs the openclaw npm package globally (package.json -> -npm install -g) so the gateway binary lands at -~/.npm-global/bin/openclaw, then runs it as the supervised -`openclaw` service (`openclaw gateway --port 18789 ---allow-unconfigured --bind loopback` — loopback bind needs no -auth and matches the socat relay; unconfigured lets the headless -gateway start before any operator setup). socat -relays the loopback-bound gateway onto the container interface -and a `data` volume persists ~/.openclaw. Binary presence, the -supervised service, and the reachable port are all verifiable. - -## Services - -- `openclaw` - -## Acceptance plan - -This candy's `plan:` — the runnable spec `charly check` executes against a live deployment. `check:` steps are idempotent probes; `run:` steps change state. - -| Intent | Step | -|---|---| -| `check` | the openclaw gateway binary is installed into the npm global bin | -| `check` | the openclaw gateway reports the exact security-patched package version | -| `check` | the openclaw gateway runs as a supervised service | -| `check` | the running gateway accepts a TCP connection on its published port 18789 | diff --git a/src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-246-2119/openclaw.md b/src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-246-2119/openclaw.md deleted file mode 100644 index f8d39ee2..00000000 --- a/src/content/docs/reference/candy/github-com-opencharly-pod-openclaw-v2026-246-2119/openclaw.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "openclaw" -description: "Headless OpenClaw AI gateway service on port 18789 (OpenClaw 2.0, npm openclaw@2026.9.1 — the current latest stable)." ---- - - - -| | | -|---|---| -| **Version** | `2026.246.0300` | -| **Repo** | `box/github.com/opencharly/pod-openclaw:v2026.246.2119` | - -Headless OpenClaw AI gateway service on port 18789 (OpenClaw 2.0, -npm openclaw@2026.9.1 — the current latest stable). Installs the openclaw npm package globally -(package.json -> npm install -g) so the gateway binary lands at -~/.npm-global/bin/openclaw, then runs it as the supervised -`openclaw` service (`openclaw gateway --port 18789 ---allow-unconfigured --bind loopback` — loopback bind needs no -auth and matches the socat relay; unconfigured lets the headless -gateway start before any operator setup). socat -relays the loopback-bound gateway onto the container interface -and a `data` volume persists ~/.openclaw. Binary presence, the -supervised service, the reachable port, and the gateway's own -/healthz liveness endpoint are all verifiable. - -## Services - -- `openclaw` - -## Acceptance plan - -This candy's `plan:` — the runnable spec `charly check` executes against a live deployment. `check:` steps are idempotent probes; `run:` steps change state. - -| Intent | Step | -|---|---| -| `check` | the openclaw gateway binary is installed into the npm global bin | -| `check` | the openclaw gateway reports the exact security-patched package version | -| `check` | the running gateway's /healthz liveness endpoint responds 200 (OpenClaw 2.0 container probe) | -| `check` | the openclaw gateway runs as a supervised service | -| `check` | the running gateway accepts a TCP connection on its published port 18789 |