Repository navigation
feat(machine-health): research new findings in the monthly run, in auto mode - #9670
Conversation
Get-ApprovalState reads only state/approvals.json. The one-time migration that turned checked TODO.md boxes into approvals is gone, with its -TodoPath parameter, so no TODO.md text can mint an approval. The schema still accepts an older file's migration block. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… path Invoke-MachineHealthCheck -Scheduled reads the previous latest.json before overwriting it and writes new_finding_keys, the unmuted FindingKeys under each check whose previous reading was not UNKNOWN or SKIPPED and did not hold them, plus discovery_path, <OutputBase>/reports/discovery-<runStamp>.md. The report names that file under "Newly discovered checks", and the decision page shows its file name from latest.json. Without -Scheduled neither field is written. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Get-ResearchCandidate.ps1 reads latest.json's new_finding_keys and prints at most -Max (default 5) candidates of kind startup, task, ext, listener, process (WARN or CRIT only) or detection, one per kind and title, worst first, with every other new key listed as not researched. The audit's research step that consumes it is not wired yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… new findings The Task Scheduler wrapper is now a static copy that starts `claude -p ... --permission-mode auto` with a 90-minute limit, so the scheduled audit can reach the web. The exact allow rules, the deny settings file and the roots written into the copy are gone; schedule removes a settings file an earlier build left behind. The Desktop route offers Auto only. Under --scheduled the audit uses its normal commands plus -Scheduled, and step 5 researches up to five new findings through /discovery:research into a notes file beside the report, grounding its TODO.md proposals with sources. A missing skill or a halted research call is recorded and the run continues. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… run Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On a console using code page 437, pwsh turned a title such as "Keeper(R) Password Manager" into "Keeperr", so the model and the research step saw the wrong text. The three audit scripts the skills run now set UTF-8 console output, and the monthly wrapper decodes claude's output as UTF-8 instead of the console code page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…WN check Unelevated, startup-items and network-listeners read UNKNOWN while still listing their items, so the severity rule gave them no baseline and new startup entries and listeners were never researched (seen in a live scheduled run). A previous entry now counts when it lists detail.items and is not SKIPPED; one with no items, such as a timed-out check, still adds nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
PR body contract — issue linkage This PR body conforms to the issue-linkage contract. Nothing to do. |
…s written The page header now reads "Notes <file>" and hides the label on runs with no notes file. The report names the notes file only when the state folder was writable, since research never runs after a state-location result. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
claude-security-review reviewed Security review, incremental scope (changes since 150124c): no security issues found. critical-findings: 0
No plugin manifest ( |
|
claude-review reviewed Incremental review of 5293803, covering
I read the diff and the surrounding helpers only. I did not run the Pester suite. The PR's verification claims are the author's and I did not confirm them. The PR has no closing issue. No plugin manifest changed, and no hold class applies. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 150124c895
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
claude-review holds this pull request for a person (cost) at The change raises agent spend. plugins/machine-health/skills/setup/templates/monthly-run.ps1 doubles the scheduled claude-lane: claude-review |
Reading detail.items through Get-SnapshotField turned an empty array into $null, so a check with nothing listed last run gave no baseline and its first finding was never new. Test the property itself. The setup text keeps the auto-mode decision and pointer without describing how auto mode works, and states the run has no tool list or deny rules of its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Summary
The monthly machine-health checkup now researches what is new on the machine, and the unattended run is simpler.
Fix
claude -p '/machine-health:audit on-demand --scheduled' --permission-mode auto --output-format jsonwith a 90-minute limit. The exact allow rules, the deny settings file (scheduled-settings.json) and the roots written into the copy are gone.scheduleremoves a settings file an earlier build left. The Desktop route offers Auto only, because research reads different pages each month and a Manual run would stall on prompts.-Scheduledorchestrator run, latest.json getsnew_finding_keys: keys absent from the previous run, per check. A check counts as a baseline when its previous entry listeddetail.itemsand was not SKIPPED. latest.json also getsdiscovery_path(discovery-<runStamp>.mdbeside the report), which the report and the decision page name.Get-ResearchCandidate.ps1picks up to 5 new startup entries, logon tasks, extensions, listeners, busy processes or Defender detections. Step 5 makes one/discovery:research breadth=lowcall over them, writes the notes file with sources, and grounds the TODO.md check proposals in that research. A missing discovery plugin or a halted research call is recorded, and the run continues.[x] restart-stopped-serviceline in TODO.md minted an approval, and the run now writes researched text there.Verification
plugins/machine-health/skills/audit/tests/windows): exit 0.[x]line minting no approval.claude -p --plugin-dir <worktree>in auto mode against a seeded previous latest.json.ok: true, 15.6 min,permission_denials: [].ok: true, 10.2 min, no denials; startup entries researched, "Keeper®" intact in the notes.detail.itemslist now counts as a baseline (Codex P2); the setup text keeps the auto-mode decision and pointer without describing auto mode (Codex P1).Related
No linked issue. This is Phase 12 of the machine-health PC-checkup plan, after #9067, #9226, #9243 and #9260.
Cost decision (owner, 2026-10-23): at most 5 findings plus 1 proposal pass per monthly run at
breadth=low, and a 90-minute wrapper limit.The plan was reviewed by a fresh-context plan reviewer and a devil's-advocate pass, and the owner approved it on 2026-10-23.
🤖 Generated with Claude Code