Visitar URL original
Add a One-Step Agent Setup for Hosts, a Single Menu Line, and the update-host Skill by ptr727 · Pull Request #4087 · ptr727/ProjectTemplate · GitHub
Skip to content

Add a One-Step Agent Setup for Hosts, a Single Menu Line, and the update-host Skill - #4087

Merged
ptr727 merged 5 commits into
developfrom
feature/one-step-host-agent-update
Nov 12, 2026
Merged

ptr727 merged 5 commits into
developfrom
feature/one-step-host-agent-update

Conversation

@ptr727

@ptr727 ptr727 commented Nov 12, 2026

Copy link
Copy Markdown
Owner

Summary

One action now brings a host fully current for every coding agent, and one menu line runs it. The maintainer asked for this because three separate installers (skills, safety kit, instruction files) were confusing.

  • bootstrap.sh --agent-setup / bootstrap.ps1 -AgentSetup runs four steps in order. It upgrades the coding-agent CLIs already installed, installs the fleet skills, and installs the Claude Code safety kit. It then writes the host-wide rule blocks the kit renders into ~/.claude/CLAUDE.md into Codex's and opencode's global AGENTS.md, for each agent present.
  • --agent-status / -AgentStatus reports all four read-only, and the default --report now calls it.
  • --host and --dev end with the agent setup, so a stood-up host gets the safety kit. The kit's stamp names the resolved commit when installed from a bootstrap tree, which fixes items 2 and 3 of bootstrap.sh --dev Installs No Claude Code or Agent-Safety Kit, and the Kit's Stamp Reads hub unknown #2553. Item 1 (installing the Claude Code CLI itself) is out of scope.
  • menu.sh and menu.ps1 replace their four separate skills and agent-tool report/update items with "Report agent setup" and "Update agent setup". The item that installs named agent tools stays.
  • New --from-tree PATH / -FromTree lets the menu run the setup or status against a tree it already holds rather than downloading another.
  • New update-host skill runs the setup then the status from any session. It hands the maintainer one self-contained command when the executor refuses the run.
  • New host-setup/agent-safety/global_rules.py renders the Codex and opencode files. It reuses the kit's renderer and writers. Each file carries a note that no hook enforces the rules in that agent yet. Hooks for Codex and opencode stay on Add safety hooks for opencode and codex #781.

Refs #2553

Verification

  • Test suites, each OK: tests/test_bootstrap.py (178, PowerShell cases run under Linux pwsh), tests/test_global_rules.py (37), tests/test_skills_install.py (92), tests/test_install_agents.py (24), tests/test_build_dist.py (102), tests/test_cli_usage.py (16), host-setup/agent-safety/claude/test_install.py (206).
  • scripts/build_dist.py --check is current. ruff format and check, and mypy, are clean.
  • docker_lint.py passes shellcheck, shfmt, PSScriptAnalyzer and markdownlint. The prose gate is clean over the diff.
  • Dry and real runs of global_rules.py went against scratch CODEX_HOME/XDG_CONFIG_HOME. A bootstrap.sh --agent-setup --dry-run ran against the worktree.
  • Not run on native Windows. bootstrap.ps1 needs tar.exe, so only its lifted functions ran under Linux pwsh. A PowerShell parser check confirms the skill's Windows commands parse and carry no inner double quotes.

Local Review

Three recorded local-strict-review passes ran. The first raised 13 findings: 12 were fixed in 568728b and one was declined, the per-agent presence check. The two wrapper checks test for Claude Code, a different agent from the ones global_rules.py checks. They are per-platform copies under host-setup/README.md's deliberate-duplication rule. The second pass left one open finding: the Windows command quoting under Windows PowerShell 5.1. f099df2 fixed it, and the third pass found nothing.

The change adds code comments, so it carries the comments label.

🤖 Generated with Claude Code

ptr727 and others added 3 commits November 11, 2026 18:20
A host's coding agents needed four separate commands to bring current: the agent tool upgrade, the fleet skills, the Claude Code safety kit, and the host-wide rules. Hosts were routinely current on some and stale on the rest, and Codex and opencode received no rules at all.

bootstrap.sh and bootstrap.ps1 gain --agent-setup and --agent-status (-AgentSetup, -AgentStatus). The setup runs the four steps in order and the status reports each, naming every step that is not current. --host and --dev now end with the same setup. This fixes the kit not installing under --dev and the kit stamp reading "hub unknown" from a tarball tree (items 2 and 3 of #2553).

The loader keeps its single entry point into the tree, so the kit and the rules each get a thin tool in host-setup/linux and host-setup/windows. A new global_rules.py writes the kit's rendered rules to Codex's and opencode's global files, reusing the kit installer's render and write helpers. The kit installer records AGENT_SAFETY_SOURCE_COMMIT for a tree git cannot answer for.

Both menus replace their separate skills and agent-tool report and update items with "Report agent setup" and "Update agent setup". A new --from-tree option runs the setup from a hub checkout in place, which keeps the menu's checkout behavior. A new update-host skill runs the setup from any session.

Refs #2553

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A local review of the agent setup commit raised 13 findings. This applies the rulings on them.

The rules writer imports the kit installer only once Codex or opencode is present, so a host with neither runs it on any python3 and a stand-up no longer fails on an interpreter below 3.11. The wrappers accept any Python 3. The docs state each step's actual floor. Each file written for Codex or opencode carries a note under the header saying no hook enforces the rules in that agent yet, without editing the block text. Claude's own render is unchanged.

The status runs every step for real under --dry-run, and the kit wrapper's report no longer prints a dry-run line. The default report calls the same agent status as --agent-status instead of carrying its own blocks. The menu's report reads the tree it already holds rather than downloading a second one.

bootstrap.ps1 refuses -FromTree with no action, as bootstrap.sh does. Both loaders drop the git read of the given tree and the absolute-path requirement. The kit installer resolves an archive commit with the same precedence and .bootstrap-commit handling as scripts/skills_install.py. The duplicate global_rules.ps1 launcher is deleted. The update-host skill hands over one self-contained line per command.

Refs #2553

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Windows PowerShell 5.1 does not escape a double quote inside an argument it passes to a
program, so the inner "\bootstrap.ps1" broke the outer -Command string and neither the
setup nor the status line ran. Join-Path needs no quoting at all.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ptr727 ptr727 added the comments Permits the comment lines the pull request adds or edits, which the prose gate otherwise refuses label Nov 12, 2026
Copilot AI lite review requested due to automatic review settings November 12, 2026 02:42
@ptr727

ptr727 commented Nov 12, 2026

Copy link
Copy Markdown
Owner Author

A recorded local strict-review pass covers head f099df236a31cc18c974224bdbd7494c7efbdfc8, the content this pull request carries at that commit against develop, and it recorded 0 findings.

@coderabbitai

coderabbitai Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

Explain Change →

Caution

Review failed

The pull request is closed.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Active findings remain, including moderate and P1 issues affecting commit-marker validation and potentially misleading complete-setup status reporting.

8 open issues
What changed in this PR

This PR centralizes host coding-agent maintenance into one cross-platform setup and status flow. It adds shared global rules for Codex and opencode while preserving the existing Claude Code safety kit.

Changes:

  • Adds --agent-setup, --agent-status, and --from-tree to both bootstrap loaders.
  • Adds platform wrappers, shared agent-safety rule rendering, archive commit stamping, and expanded tests.
  • Replaces separate menu entries with unified setup actions and adds the update-host skill.
File Description
tests/​test_global_rules.py Tests global rule detection, rendering, backup handling, reporting, dry runs, and interrupts.
tests/​test_cli_usage.py Registers the new scripts for CLI usage coverage.
tests/​test_bootstrap.py Tests setup ordering, status reporting, tree reuse, commit propagation, and menu dispatch.
README.md Documents the unified host agent setup workflow.
host-setup/​windows/​README.md Documents the Windows safety-kit and global-rules wrappers.
host-setup/​windows/​install-safety-kit.ps1 Drives the Claude Code safety-kit installer on Windows.
host-setup/​windows/​install-global-rules.ps1 Runs the global-rules writer on Windows.
host-setup/​README.md Documents setup actions, status actions, tree handling, and host tooling architecture.
host-setup/​menu.sh Replaces separate agent tasks with consolidated setup and status entries.
host-setup/​menu.ps1 Adds the equivalent consolidated Windows menu entries and dispatch.
host-setup/​linux/​README.md Documents the Linux safety-kit and global-rules wrappers.
host-setup/​linux/​install-safety-kit.sh Drives the Claude Code safety-kit installer on Linux.
host-setup/​linux/​install-global-rules.sh Runs the global-rules writer on Linux.
host-setup/​bootstrap.sh Adds unified setup, status, commit propagation, and in-place tree execution on Linux.
host-setup/​bootstrap.ps1 Adds the corresponding Windows bootstrap actions and tree execution.
host-setup/​agent-safety/​README.md Describes global rules for agents without hooks.
host-setup/​agent-safety/​opencode/​README.md Documents opencode global rule loading and hook limitations.
host-setup/​agent-safety/​global_rules.py Renders and writes shared global rules for Codex and opencode.
host-setup/​agent-safety/​codex/​README.md Documents Codex global rule loading and hook limitations.
host-setup/​agent-safety/​claude/​test_install.py Tests archive-source commit stamping and reporting.
host-setup/​agent-safety/​claude/​README.md Documents archive commit provenance in safety-kit stamps.
host-setup/​agent-safety/​claude/​install.py Adds archive commit provenance and reusable custom rendering support.
docs/​host-setup.md Defines the agent setup contract and refresh procedure.
docs/​fleet-map.md Updates the bootstrap lifecycle description.
AGENTS.md Registers the new update-host skill in fleet guidance.
.github/​skills/​update-host/​SKILL.md Adds the GitHub distribution of the update-host skill.
.github/​skills/​check-this-repo/​SKILL.md Updates repository-check guidance to reference unified host setup.
.claude-plugin/​fleet-skills/​skills/​update-host/​SKILL.md Adds the Claude plugin distribution of the update-host skill.
.claude-plugin/​fleet-skills/​skills/​check-this-repo/​SKILL.md Updates the Claude plugin repository-check guidance.
.claude-plugin/​fleet-skills/​.source-digests/​update-host Records the generated update-host skill digest.
.claude-plugin/​fleet-skills/​.source-digests/​check-this-repo Records the updated repository-check skill digest.
.claude-plugin/​fleet-skills/​.claude-plugin/​plugin.json Registers update-host in the Claude plugin manifest.
.agents/​skills/​update-host/​SKILL.md Adds the canonical update-host skill source.
.agents/​skills/​check-this-repo/​SKILL.md Updates the canonical repository-check guidance.

Review effort: Lite

Comment thread host-setup/bootstrap.ps1 Resolved
Comment thread host-setup/bootstrap.sh Resolved
Comment thread .agents/skills/update-host/SKILL.md Resolved
Comment thread docs/fleet-map.md Resolved
Comment thread host-setup/README.md Resolved
Comment thread host-setup/README.md Resolved
Comment thread host-setup/agent-safety/global_rules.py Resolved
The text-mode Popen in the interrupt test named no encoding, which the tooling encoding gate flags.

A malformed .bootstrap-commit marker now falls through to the commit-less archive record instead of being stamped as a commit. The agent status says "Not checked" for the agent tools step it skips as root or elevated, rather than claiming every step reports current. The Codex and opencode note and the update-host skill state the missing-hook gap directly instead of citing an issue number. Three doc sentences are reworded: the fleet-map bootstrap entry, the --from-tree register-versus-report distinction, and a stale count of actions that keep a tree.

Refs #2553

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@ptr727

ptr727 commented Nov 12, 2026

Copy link
Copy Markdown
Owner Author

A recorded local strict-review pass covers head 1fa5598e78f039dba366be07cad0945aaebca01e, the content this pull request carries at that commit against develop, and it recorded 0 findings.

@codecov

codecov Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 28.74251% with 119 lines in your changes missing coverage. Please review.
✅ Project coverage is 76.85%. Comparing base (9c995c6) to head (be88139).

Files with missing lines Patch % Lines
host-setup/agent-safety/global_rules.py 29.71% 97 Missing ⚠️
host-setup/agent-safety/claude/install.py 24.13% 22 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #4087      +/-   ##
===========================================
- Coverage    82.29%   76.85%   -5.45%     
===========================================
  Files           38       40       +2     
  Lines        12955    14070    +1115     
===========================================
+ Hits         10661    10813     +152     
- Misses        2294     3257     +963     
Flag Coverage Δ
python-3.13 76.85% <28.74%> (-5.45%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Windows CI failed three presence tests. Path.home() reads USERPROFILE there rather than
HOME, and a command on PATH is found only through a PATHEXT extension, so the tests now
set both the way that platform reads them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ptr727

ptr727 commented Nov 12, 2026

Copy link
Copy Markdown
Owner Author

A recorded local strict-review pass covers head be88139452cd3c7a76bd060c970f8eb2693197c9, the content this pull request carries at that commit against develop, and it recorded 0 findings.

@ptr727

ptr727 commented Nov 12, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@ptr727

ptr727 commented Nov 12, 2026

Copy link
Copy Markdown
Owner Author

/review

@coderabbitai

coderabbitai Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Action not completed

Pull request is closed.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@ptr727
ptr727 merged commit a342470 into develop Nov 12, 2026
12 of 13 checks passed
@ptr727
ptr727 deleted the feature/one-step-host-agent-update branch November 12, 2026 03:28
ptr727 added a commit that referenced this pull request Nov 12, 2026
)

## Summary

Answers the verdict on promotion PR #4088's latest Copilot round. That
verdict said the change left documentation describing the previous
bootstrap flow. It also corrects an earlier decline on #4088, which
wrongly said the fleet map's G1 entry was already current.

- `docs/fleet-map.md` G1 resolution: host mode ends with the agent
setup, the report reads the agent status, and the loaders hand the kit
its source commit. Its decision now names the agent setup's
Python-driven steps as the recorded exceptions.
- The cold-start flowchart draws the agent setup's real order:
agent-tools upgrade, skills, safety kit, then Codex and opencode rules.
It ends with installing a coding agent and re-running the setup before
the first session, because the setup's agent steps act only on agents
already installed.
- `README.md` no longer says a fresh machine finishes with the
guardrails in place.
- `host-setup/linux/README.md` and the `install-skills` headers no
longer say the bootstrap runs the skills step last.

## Open Findings

The local edit budget was spent, so both were fixed in this pull
request's review loop, in b55e871 and 62977f6. install-skills is the
one wrapper reaching outside host-setup/, and the kit headers say they
reach outside their platform directory. The cold-start text names the
Claude Code plugin registration beside the kit and the rules. A recorded
local pass over 62977f6 found nothing open.

- `host-setup/linux/install-skills.sh:4`,
`host-setup/windows/install-skills.ps1:2`, and the `install-safety-kit`
headers (`introduced`). "Like install-safety-kit and
install-global-rules, it reaches outside host-setup/" is false, because
those wrappers drive files under `host-setup/agent-safety/`. The
`install-safety-kit` headers carry the mirror claim from #4087.
- `README.md:202`, `docs/fleet-map.md:94` (`introduced`). With no
`claude` CLI, the skills installer skips the Claude Code plugin
registration as well. So that registration also waits for the re-run,
beside the kit and the host-wide rules.

🤖 Generated with [Claude Code](https://claude.com/claude-code)


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

* **Documentation**
* Clarified that agent setup installs skills for supported coding agents
and that safety-kit and global-rule steps apply only to agents already
installed.
* Updated setup guidance to explain when to install an agent and rerun
setup.
* Revised the setup flow and descriptions of verification, PATH
handling, and installer dependencies.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
ptr727 added a commit that referenced this pull request Nov 12, 2026
…kill (#4088)

## Summary

Promotes one change and its review follow-ups from `develop` to `main`.

- #4087: one action brings a host fully current for every coding agent,
and both host menus run it from a single line.
- `bootstrap.sh --agent-setup` / `bootstrap.ps1 -AgentSetup` runs four
steps in order. It upgrades the coding-agent CLIs already installed,
installs the fleet skills, and installs the Claude Code safety kit. It
then writes the host-wide rule blocks into Codex's and opencode's global
`AGENTS.md`, for each agent present.
- `--agent-status` reports all four read-only, and `--host` and `--dev`
now end with the agent setup.
  - A new `update-host` skill runs the setup from any session.
- The kit's stamp names the resolved commit when installed from a
bootstrap tree, which fixes items 2 and 3 of #2553. Item 1 of #2553,
installing the Claude Code CLI itself, stays open. Hooks for Codex and
opencode stay on #781.

- #4089: answers CodeRabbit's review of this promotion. The Windows
skill commands run the loader only after its download succeeds. The
status summary reports the agent-tools inventory as listed, failed or
not checked rather than current. `bootstrap.ps1` restores the
source-commit variables after a run, and `--agent-status --from-tree` no
longer needs curl, tar or flock. The rules wrappers prefer Python 3.11+.
Two findings were declined with evidence on their threads.

- #4090: the host-setup README's tree-lifetime paragraph no longer
counts the tree-keeping actions, and scopes itself to a run that fetches
its tree.
- #4091: the fleet map's G1 entry and cold-start flowchart describe the
agent setup. The README and the flowchart say the Claude Code plugin
registration, the safety kit and the host-wide rules act only on agents
already installed. So a fresh machine re-runs the agent setup after
installing a coding agent, before its first session. The
`install-skills` and `install-safety-kit` headers state where each
wrapper reaches.

- #4092: answers this promotion's attested local review. The Codex and
opencode rules files carry a digest of the rules written below their
header and note. A hand edit there now reads EDITED and is backed up
before the next rewrite. A non-blank Codex `AGENTS.override.md` makes
the status report SHADOWED and not current, and the setup never touches
it. Two findings from that review were declined with evidence: sharing
the skills installer's commit lookup, and the Python-less report.

- #4093: the Codex host-safety README says a non-blank
`AGENTS.override.md` keeps the host-wide rules from reaching Codex, and
takes their place as its instruction layer.

## Not Verified

- Native Windows end to end, a `verification` gap. Native Windows CI ran
the unit suite, including the new `global_rules.py` tests, and passed.
`bootstrap.ps1 -AgentSetup` / `-AgentStatus`, the Windows wrappers, tar
extraction and the user-profile writes have not run on a real Windows
host. Their PowerShell logic was exercised only through the
lifted-function tests under `pwsh`.

Refs #2553

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comments Permits the comment lines the pull request adds or edits, which the prose gate otherwise refuses

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants