Skip to content

Add optional tools installation step#21

Merged
MrPointer merged 14 commits into
mainfrom
feature/optional-tools-installation
Feb 15, 2026
Merged

Add optional tools installation step#21
MrPointer merged 14 commits into
mainfrom
feature/optional-tools-installation

Conversation

@MrPointer
Copy link
Copy Markdown
Owner

Summary

  • Adds an optional "tools installation" step as the last phase of the installer, letting users interactively select and install daily-use CLI tools (fzf, bat, eza, ripgrep, fd, difftastic, sheldon)
  • Tools are defined in an embedded tools.yaml config with package mappings across apt/dnf/brew in packagemap.yaml
  • Interactive multi-select UI for tool selection; tools without valid mappings for the active package manager are pre-filtered out
  • New --install-tools flag for non-interactive auto-install of all available tools
  • New --tools-config persistent flag to override the embedded tools config
  • Tool installation failures log errors but never abort the overall install
  • Uses persistent progress logging with per-tool accomplishments for clean output

Other changes

  • Break writing-go-code skill into separate code and test skills
  • Add plan execution guardrails for model and team compliance
  • Improve documentation process in feature plans
  • Add memory to reviewer subagents
  • Update project documentation to reflect the new feature

Test plan

  • Unit tests for tools config loader (embedded + custom file + error cases)
  • Unit tests for tools installer (success, resolver failure, install failure, empty list, mixed results)
  • Unit tests for tool selector UI
  • All existing tests pass (task test)
  • Build succeeds (task build)
  • E2E tested in container: interactive tool selection and installation works on Linux
  • Verify --install-tools flag auto-installs all tools in non-interactive mode
  • Verify tools are skipped in non-interactive mode without --install-tools

Known limitations

  • UpdateProgress has no visual effect during tool installation due to a bug in the progress display (spinner title is set once at launch, never re-read). Each tool's completion shows via LogAccomplishment instead. Documented in progress library extraction scope.
  • Signal propagation (e.g. Ctrl+C) doesn't properly interrupt underlying package manager processes — this is a broader installer issue, not specific to tools installation.

MrPointer and others added 9 commits February 14, 2026 21:42
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The agents produced garbage even when loading the combined skill,
the test instructions were just burried too deep...
This would enhance the system with a bunch of tools I like to use,
with the ability to select them interactively when the installer
is interactive, or opt-in for all when it's not.
Instead of writing their output to files they should just feed it
back to the primary agent, which would then write it to files for them.

Also enforce Agent Teams for most non-super-trivial plans.
Instead of running a poor-quality skill post-completion to try
and update docs, which results in very lazy updates,
plan most of the doc changes upfront as they should be known
at planning time - Add it as the last sub-plan.
To combat component docs which may drift from the plan during impl,
the primary plan executioner would run a new specialized agent
to review component doc changes, feeding learnings to the primary agent
which would then update what's missing.
It should know exactly what counts as "TMI" that could've been
documented elsewhere.
This is due to a bug in the progress logger which will be properly
solved separately, when extracted to the `go-nesgress` library.
For now, we get around that by not nesting progress, logging everything
in a flat way.
@MrPointer MrPointer enabled auto-merge (squash) February 15, 2026 14:58
Select fzf, bat, and ripgrep when the tools multi-select prompt
appears. On apt/dnf systems (CI containers), only these plus fd
are available since sheldon/eza/difftastic are brew-only.
Thread the plain flag through all huh selector constructors so forms
use .WithAccessible(true) in non-interactive environments. This makes
huh render plain-text number-based prompts instead of TUI, allowing
the expect script to interact with tool/prerequisite/GPG selection.
The flag bypasses the interactive selector and auto-installs all tools.
Remove it so the expect script actually exercises the accessible mode
multi-select prompt.
The expect script now tests the full interactive flow including tool
selection, not just GPG setup.
The nested expect calls inside the handler caused the process to exit
before inner expects could fire. Use a step counter in the main loop
so each "Input a number" prompt is handled independently.
@MrPointer MrPointer merged commit 0d5e4c2 into main Feb 15, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant