Repository navigation
devspace: Initialize runners for cgwalters-bot sessions with pinned agent CLIs - #5
Merged
Merged
Conversation
cgwalters-bot
force-pushed
the
bot-homegit-agents
branch
3 times, most recently
from
September 23, 2026 01:52
9403fc0 to
9a151ca
Compare
The runner is moving to hosting cgwalters-bot agent sessions, so it should carry the bot's identity, skills and agent configuration rather than the human's personal dotfiles. The bot's fork of homegit is where those live. Runners execute homegit code (its install scripts and everything it puts on PATH), so the checkout is pinned to a specific commit rather than following main; Renovate proposes bumps and each one gets reviewed here. Existing checkouts are moved to the pinned commit too, fetching it if needed. The same safety checks apply: an existing path is only reused if it is a checkout rooted exactly there with the expected origin. The Actions runner runs with umask 000 and homegit's rsync does not preserve permissions, so the recipe sets umask 022 and drops group and world write from anything it installed, plus the top-level dotfiles in $HOME; otherwise ~/.bashrc, the scripts on PATH, and even the runner image's own ~/.bash_profile end up world-writable. Generated-by: AI
Prep for pinning the runner's agent CLIs and homegit in files that Renovate keeps current, using the shared bootc-dev managers. Note this enables Renovate for the whole repository, so Cargo dependencies and pinned actions get update PRs as well. npm updates wait three days after publication: the agent CLIs release very frequently and run with the bot's credentials, so a short delay gives time for broken or compromised releases to be caught and pulled before we pick them up. Generated-by: AI
The bot's sessions drive one of these two agent CLIs, so they should be ready on the runner rather than installed by hand each time. Pinning exact versions in npm.txt keeps runs reproducible, and using the same annotated format as bootc-dev/infra lets the shared Renovate manager propose bumps. The initial pins are the Claude Code stable dist-tag and the newest opencode release older than the three-day release-age delay. The step runs after checkout since npm.txt lives in the repository. RHEL 10 ships Node.js 22, which satisfies the Claude Code engines requirement (>=22); opencode declares none. The global prefix bin directory is not on sudo's secure_path, so the check invokes the tools by absolute path as the runner user. Generated-by: AI
cgwalters-bot
force-pushed
the
bot-homegit-agents
branch
from
September 23, 2026 12:32
9a151ca to
442a6c3
Compare
cgwalters
approved these changes
Sep 24, 2026
cgwalters
marked this pull request as ready for review
September 24, 2026 00:49
cgwalters-bot
referenced
this pull request
in cgwalters-forge/cgwalters-devspace-sandbox
Sep 24, 2026
The pin is 29 commits behind homegit main, which moved a lot right after #5 merged. The skills a devspace session would follow now assume the cgwalters-forge fork-PR review loop, bot-notify and bot-watch, none of which the old pin has, so an agent started from it would work the board by outdated rules. Renovate did detect the update, but the shared bootc-dev config only lets it open PRs on Sundays; this saves waiting out the schedule. No install script changed in this range, only bin/ tools and skills. Generated-by: AI
5 of 9 tasks
cgwalters-bot
referenced
this pull request
in cgwalters-forge/cgwalters-devspace-sandbox
Sep 25, 2026
The pin is 29 commits behind homegit main, which moved a lot right after #5 merged. The skills a devspace session would follow now assume the cgwalters-forge fork-PR review loop, bot-notify and bot-watch, none of which the old pin has, so an agent started from it would work the board by outdated rules. Renovate did detect the update, but the shared bootc-dev config only lets it open PRs on Sundays; this saves waiting out the schedule. No install script changed in this range, only bin/ tools and skills. Generated-by: AI Signed-off-by: Colin Walters <walters@verbum.org>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The devspace runner is moving to hosting cgwalters-bot agent sessions, so it should come up with the bot's environment rather than the human's.
just initnow clones cgwalters-bot/homegit to$HOME/src/github/cgwalters-bot/homegit(same toplevel/origin safety checks as before), checks out a pinned commit (homegit_revin the Justfile, currently7f322ad47024), fetching it into an existing checkout if needed, and runsmake install. Runners execute homegit code, so it's pinned and bumps come as reviewed Renovate PRs via the shared git-refs Justfile manager. Interactive users on the runner get the bot's git identity from its.gitconfig.umask 022and drops group/world write from what it installed and from the top-level dotfiles in$HOME(the runner image ships~/.bash_profileand~/.bash_logoutas 666).npm.txt:opencode-ai@1.18.31(newest release older than three days) and@anthropic-ai/claude-code@2.1.267(thestabledist-tag). The file uses the same annotated format as bootc-dev/infra'sdevenv/npm.txt.renovate.jsonextends the shared bootc-dev config and adds a three-dayminimumReleaseAgefor npm. This enables Renovate repo-wide, so Cargo dependencies and pinned actions get update PRs too, assuming the Renovate app is enabled here.Tested locally:
cargo fmt --check, clippy with-D warnings,cargo test(15 pass, and each commit passes on its own), and actionlint.just initwas run under umask 000 in a throwawayHOMEagainst the real fork: a fresh clone, a checkout left at an older commit, and one missing the pinned commit all end up on the pinned rev with nothing world-writable, and a mismatched origin is refused. The workflow step was run verbatim in a UBI 10 container with arunneruser. The shared Renovate regexes matchednpm.txt(including the scoped package) and the Justfile.Out of scope: agent credentials and inference via praxis. Relates to #4 (and cgwalters-bot/praxis-credential-broker#1).
This PR is AI-generated at the human's request and has not yet been reviewed by the human; please review it as such before merging.
Tested on a real runner
Dispatched this branch at
9a151ca(run 35808095996, 4 cores): every setup step succeeded, and over SSH asrunner:7f322ad47024a7b003c31c5ec662106a8b5e08fc;~/.bashrc,~/.bash_profile,~/.bash_logoutand~/.gitconfigare 644,~/.configand~/.local/binare 755, andfind ~ -perm -o+wfinds nothing (an earlier run without the top-level fix still had the image's.bash_profile/.bash_logoutat 666);bash -lc trueprints nothing (no tput noise);opencode --version→ 1.18.31,claude --version→ 2.1.267 (Claude Code), both from/usr/local/binon the SSH login PATH.An earlier run (35805439383, pin
6021d58) also confirmed the bot's git identity and the skills under~/.claude/skills.Generated-by: https://github.com/cgwalters/#llms