Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,60 @@ All notable changes to Buzznode are documented here, following

## [Unreleased]

## [0.5.0] - 2026-07-30

### Changed

- Update the Buzz headless tools to `0.5.2` from upstream commit `3e48f1b`.
- Re-cut the desktop-base release. 0.4.0 moved Buzznode onto
`launcher-image-base-desktop` but was never built and run end to end; this is
the first version verified by booting the image and confirming the setup
wizard opens over the Buzz wallpaper.

## [0.4.0] - 2026-07-29

### Changed

- Build on the published Launcher desktop base
(`ghcr.io/pdparchitect/launcher-image-base-desktop`) instead of assembling
Ubuntu, Node, KasmVNC, Openbox, and the browser here. The Dockerfile keeps
only what is actually Buzznode: the headless Buzz tools and the coding-agent
runtimes.
- **Breaking.** The desktop account is the base's `agent`, homed at
`/home/agent`. Volume targets move from `/home/buzznode/...` to
`/home/agent/...`; an existing node must remount its volumes at the new paths
or be re-enrolled from a fresh set. The Launcher catalog manifest is updated.
- **Breaking.** `BUZZNODE_RESOLUTION` and `BUZZNODE_VNC_STATS` are replaced by
the base's `DESKTOP_RESOLUTION` and `DESKTOP_VNC_STATS`. Every other
`BUZZNODE_*` variable is unchanged.
- Declare ports the way the other Launcher products do: the desktop's `6901` is
inherited from the base rather than redeclared, and this image adds no
`EXPOSE` or `HEALTHCHECK` of its own.
- The agent harness log moves from `/var/log/buzznode` to the base's
`/var/log/launcher-desktop`.
- Product files are installed through `overlay/`, which is copied over the
base's defaults, rather than through per-file `COPY` instructions. The
entrypoint is the base's: the setup wizard and the node greeting are both
reached through `desktop-welcome`, and the harness starts from
`/etc/desktop/session.d/10-buzznode-harness`.

### Removed

- The Openbox, Cortile, KasmVNC, GTK-theme, and browser-wrapper sources, along
with `init.sh`. All of them are the desktop base's now. What remains is the
Buzz wallpaper, favicon, landing page, accent colours, root menu, and the
panel entry that opens `buzznode status`.

### Fixed

- The wallpaper is a full-canvas SVG pattern rather than a 37px tile. The base
applies wallpapers with `feh --bg-fill`, which would have scaled the old tile
into a single enormous dot. It also carries no XML comment: the imlib2 loader
feh uses rejects any SVG containing one, and the desktop then comes up with no
wallpaper at all. `make check` guards both.

- Refresh the Launcher catalogue screenshot from the rebuilt desktop.

## [0.3.0] - 2026-07-28

### Changed
Expand Down
379 changes: 90 additions & 289 deletions Dockerfile

Large diffs are not rendered by default.

46 changes: 26 additions & 20 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ NATIVE_ARCH := $(shell uname -m | sed \
-e 's/^aarch64$$/arm64/')
PLATFORM ?= linux/$(NATIVE_ARCH)
TARGETARCH ?= $(word 2,$(subst /, ,$(PLATFORM)))
BUZZ_VERSION ?= 0.5.0
BUZZ_DEB_SHA256 ?= 9674cf098eca88333e8d895ec9d0a5c56c796fbc358fe1087b645890b8e2faca
BUZZ_SOURCE_SHA ?= 4a977c588a540be38bd8ddb268cd24437bac8165
BUZZ_VERSION ?= 0.5.2
BUZZ_DEB_SHA256 ?= 3f022bc31ed579e045946e6acab8483639bcb94e62c1e70f67b97b22f8f879c5
BUZZ_SOURCE_SHA ?= 3e48f1b2365d326ee1c9582448d86a99b44ecd5d
DESKTOP_IMAGE ?= ghcr.io/pdparchitect/launcher-image-base-desktop:0.1.0
CODEX_VERSION ?= 0.145.0
CLAUDE_CODE_VERSION ?= 2.1.220
CODEX_ACP_VERSION ?= 1.1.7
Expand Down Expand Up @@ -59,13 +60,20 @@ help:
@echo " BUZZ_NETWORK=buzz-local VNC_STATS=true"

check:
bash -n init.sh openbox/autostart shell/agent-runtime-login shell/buzznode \
shell/buzznode-panel-status shell/chromium shell/welcome \
bash -n \
overlay/etc/desktop/session.d/10-buzznode-harness \
overlay/etc/desktop/startup.d/05-agent-runtime-trust \
overlay/usr/local/bin/agent-runtime-login \
overlay/usr/local/bin/buzznode \
overlay/usr/local/bin/buzznode-greeting \
overlay/usr/local/bin/desktop-panel-status \
overlay/usr/local/bin/desktop-welcome \
tests/test-agent-runtime-login.sh tests/test-buzznode.sh \
tests/test-desktop-theme.sh tests/smoke-container.sh
bash tests/test-agent-runtime-login.sh
bash tests/test-buzznode.sh
bash tests/test-desktop-theme.sh
@grep -q "^ARG DESKTOP_IMAGE=$(DESKTOP_IMAGE)$$" Dockerfile
@grep -q "^ARG BUZZ_VERSION=$(BUZZ_VERSION)$$" Dockerfile
@grep -q "^ARG BUZZ_DEB_SHA256=$(BUZZ_DEB_SHA256)$$" Dockerfile
@grep -q "^ARG BUZZ_SOURCE_SHA=$(BUZZ_SOURCE_SHA)$$" Dockerfile
Expand All @@ -76,20 +84,18 @@ check:
@grep -q "^ARG GOOSE_VERSION=$(GOOSE_VERSION)$$" Dockerfile
@grep -q "^ARG GOOSE_AMD64_SHA256=$(GOOSE_AMD64_SHA256)$$" Dockerfile
@grep -q "^ARG GOOSE_ARM64_SHA256=$(GOOSE_ARM64_SHA256)$$" Dockerfile
@grep -q 'window.handle.width: 0' openbox/theme/themerc
@grep -q 'window.client.padding.width: 6' openbox/theme/themerc
@grep -q 'window.client.padding.height: 6' openbox/theme/themerc
@grep -q 'cd /workspace' shell/bashrc
@grep -q 'BUZZNODE_CODEX_SANDBOX_MODE' init.sh
@grep -q 'RUN kasm-patch "Buzznode"' Dockerfile
@grep -q 'cd /workspace' overlay/etc/bash.bashrc.d/buzznode-prompt.sh
@grep -q 'BUZZNODE_CODEX_SANDBOX_MODE' overlay/etc/desktop/startup.d/05-agent-runtime-trust
@grep -q 'BUZZNODE_CODEX_SANDBOX_MODE' README.md
@grep -q '\[ -n "$${PS1:-}" \]' shell/bashrc
@grep -q '<action name="Resize" />' openbox/rc.xml
@grep -q '\[ -n "$${PS1:-}" \]' overlay/etc/bash.bashrc.d/buzznode-prompt.sh
@echo "Buzznode metadata, setup CLI, and shell syntax are valid."

build:
$(DOCKER) build \
--platform "$(PLATFORM)" \
--build-arg "TARGETARCH=$(TARGETARCH)" \
--build-arg "DESKTOP_IMAGE=$(DESKTOP_IMAGE)" \
--build-arg "BUZZ_VERSION=$(BUZZ_VERSION)" \
--build-arg "BUZZ_DEB_SHA256=$(BUZZ_DEB_SHA256)" \
--build-arg "BUZZ_SOURCE_SHA=$(BUZZ_SOURCE_SHA)" \
Expand Down Expand Up @@ -128,14 +134,14 @@ run: network
$(NETWORK_ARG) \
--publish "$(BIND_ADDRESS):$(PORT):6901" \
$(RELAY_ENV) \
--env "BUZZNODE_RESOLUTION=$(RESOLUTION)" \
--env "BUZZNODE_VNC_STATS=$(VNC_STATS)" \
--env "DESKTOP_RESOLUTION=$(RESOLUTION)" \
--env "DESKTOP_VNC_STATS=$(VNC_STATS)" \
--volume "$(VOLUME_PREFIX)-workspace:/workspace" \
--volume "$(VOLUME_PREFIX)-config:/home/buzznode/.config" \
--volume "$(VOLUME_PREFIX)-data:/home/buzznode/.local/share" \
--volume "$(VOLUME_PREFIX)-nest:/home/buzznode/.buzz" \
--volume "$(VOLUME_PREFIX)-codex:/home/buzznode/.codex" \
--volume "$(VOLUME_PREFIX)-claude:/home/buzznode/.claude" \
--volume "$(VOLUME_PREFIX)-config:/home/agent/.config" \
--volume "$(VOLUME_PREFIX)-data:/home/agent/.local/share" \
--volume "$(VOLUME_PREFIX)-nest:/home/agent/.buzz" \
--volume "$(VOLUME_PREFIX)-codex:/home/agent/.codex" \
--volume "$(VOLUME_PREFIX)-claude:/home/agent/.claude" \
"$(IMAGE)"; \
fi
@$(MAKE) --no-print-directory url
Expand Down Expand Up @@ -185,7 +191,7 @@ logs:

vnc-log:
$(DOCKER) exec "$(CONTAINER)" \
bash -c 'tail --lines=200 --follow /home/buzznode/.vnc/*:1.log'
bash -c 'tail --lines=200 --follow /home/agent/.vnc/*:1.log'

status:
@$(DOCKER) ps --all \
Expand Down
43 changes: 37 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,11 +141,11 @@ docker run --detach \
--shm-size 1g \
--publish 127.0.0.1:6904:6901 \
--volume buzznode-workspace:/workspace \
--volume buzznode-config:/home/buzznode/.config \
--volume buzznode-data:/home/buzznode/.local/share \
--volume buzznode-nest:/home/buzznode/.buzz \
--volume buzznode-codex:/home/buzznode/.codex \
--volume buzznode-claude:/home/buzznode/.claude \
--volume buzznode-config:/home/agent/.config \
--volume buzznode-data:/home/agent/.local/share \
--volume buzznode-nest:/home/agent/.buzz \
--volume buzznode-codex:/home/agent/.codex \
--volume buzznode-claude:/home/agent/.claude \
ghcr.io/pdparchitect/buzznode:latest
```

Expand Down Expand Up @@ -317,6 +317,37 @@ desktop browser, or API-key authentication. Claude Code supports Claude
subscription, Anthropic Console, long-lived setup-token, or organization SSO
flows.

## Relationship to the Launcher desktop base

Buzznode is a product image on top of
`ghcr.io/pdparchitect/launcher-image-base-desktop`, the same substrate the
other Launcher desktops use. The base supplies Ubuntu, Node, KasmVNC, Openbox,
Cortile, tint2, kitty, the browser, the GTK theme, the `agent` account, and the
entrypoint. This repository supplies only the node.

That split is what the source layout reflects:

| Path | What it is |
| -------------------------------- | ----------------------------------------------- |
| `Dockerfile` | The headless Buzz tools and the agent runtimes |
| `overlay/` | Files copied over the base's defaults |
| `overlay/usr/local/bin/buzznode` | The node CLI |
| `overlay/etc/desktop/session.d/` | Programs the session runs once it has a display |

Two consequences are worth knowing:

- The desktop user is `agent`, homed at `/home/agent`, and the agent harness
log lives in `/var/log/launcher-desktop`.
- Desktop-level settings use the base's names — `DESKTOP_RESOLUTION`,
`DESKTOP_VNC_STATS`, `DESKTOP_TITLE`. Node-level settings keep their
`BUZZNODE_*` and `BUZZ_*` names.

To build against a different base, override `DESKTOP_IMAGE`:

```bash
make up DESKTOP_IMAGE=ghcr.io/pdparchitect/launcher-image-base-desktop:0.2.0
```

## Build locally

From this directory:
Expand All @@ -343,7 +374,7 @@ The Makefile selects `linux/amd64` or `linux/arm64` from the host by default.

| Component | Version |
| ------------------- | --------- |
| Buzz headless tools | `0.5.0` |
| Buzz headless tools | `0.5.2` |
| Codex | `0.145.0` |
| Claude Code | `2.1.220` |
| Goose | `1.44.0` |
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.3.0
0.5.0
139 changes: 0 additions & 139 deletions cortile/cortile-config.toml

This file was deleted.

Loading