Repository navigation
Conversation
utilities/ is a Go module of in-container terminal tools built into the image and installed to /usr/local/bin. The first is `bootstrap`, a Bubble Tea v2 app that checks and walks through the setup an image cannot bake in: mise tool health, git identity (in-TUI huh form), GitHub CLI login and git credential helper (flags stale helper paths from the old image), Claude Code login, and optional Copilot, opencode, pi, Namespace and Azure logins. Interactive fixes run the tool's own login command via tea.ExecProcess and are re-checked. `bootstrap --check` (used automatically off-TTY and in postCreateCommand) prints the same report and exits 1 while required steps are outstanding. Patterns for future utilities: thin cmd/<tool> → internal/<tool>, shared internal/ui/theme (single home for the neon cyberpunk palette, glyphs, huh theme), internal/sh runner with a FakeRunner for tests, headless model tests. utilities/STYLEGUIDE.md and utilities/AGENTS.md (+CLAUDE.md) document the contract; a root AGENTS.md captures the repo-level rules learned so far. Build wiring: devcontainer.json build.context is now the repo root (with a .dockerignore allowlist) so the Dockerfile can COPY utilities/ and compile it with the mise-managed Go as node; binaries are installed system-wide. CI gains a Go job (gofmt, vet, test, build), Dependabot gets gomod for /utilities, and the verify script checks `bootstrap --version` via the shims and login shells. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AihTX41wWUjfBk3c2A9h2Z
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.
What
A new
utilities/Go module for in-container terminal tools, compiled into the image and installed to/usr/local/bin, plus the first tool:bootstrap.bootstrap
A Bubble Tea v2 TUI that checks and steps through the setup an image cannot bake in:
mise ls --missingemptymise installGIT_AUTHOR_*orgit config --global user.*gh auth statusgh auth login/usr/bin/ghfrom the old image)gh auth setup-gitclaude auth status --jsonclaude auth logincopilot login --device-code(unverifiable, recorded on clean exit)opencode auth listopencode auth loginpi auth check --provider … --jsonper configured providerpiwith a/loginnotensc auth check-loginnsc loginaz account showaz login --use-device-codeChecks run concurrently with timeouts; interactive fixes hand the terminal over via
tea.ExecProcessand are re-checked afterwards.bootstrap --checkprints the same report non-interactively (also chosen automatically off-TTY) and exits 1 while required steps are outstanding;postCreateCommandruns it so the report lands in the creation log.Screenshot (captured via tmux, colors stripped):
Patterns for the next utilities
cmd/<tool>/main.gois flags only →internal/<tool>.Run(Options) int.internal/ui/themeis the only place hex colors live (neon cyberpunk palette, glyph set, shared styles,theme.Huh()form theme).internal/shrunner interface +FakeRunner; every step has unit tests, and a headless model test drivesUpdate/Viewwithout a terminal.utilities/STYLEGUIDE.md(palette, glyphs, layout, behaviour, copy) andutilities/AGENTS.md(+CLAUDE.mdimport) are the contract for agents. A rootAGENTS.mdcaptures the repo-level lessons (feature-free image, mise, login-shell PATH, how to validate).Build wiring
devcontainer.jsonbuild.context→ repo root (envbuilder supports it) with a.dockerignoreallowlist; DockerfileCOPYpaths are now repo-relative. CI builds withdocker build -f .devcontainer/Dockerfile .../cmd/...with the mise-managed Go asnode(module cache in node-owned/go), then installs binaries to/usr/local/bin.gomodfor/utilities; verify script checksbootstrap --version.🤖 Generated with Claude Code
https://claude.ai/code/session_01AihTX41wWUjfBk3c2A9h2Z