Repository navigation
feat(harness-ops): read claude plugin --json output in plugins sync-run.sh instead of scraping text #6757
Description
Context
sync-run.sh in the harness-ops plugins skill classifies what claude plugin install/update did by scraping human text ("updated from X to Y", "N userConfig option(s) not yet set") and carries its own recheck on output shape. Claude Code 2.1.268 added --json to install, uninstall, update, enable and disable (changelog item 2.1.268-007, range v2.1.265..v2.1.296). The documented envelope has command, outcome, message, plus pluginId, scope and failureCode when they apply; plugin list --json adds errorDetails and noteDetails.
Problem
Text scraping breaks when wording changes. But the docs do not document a version-change field or an unset-userConfig field, so the script cannot drop the scrape yet.
Evidence so far
Docs check on 2026-10-10 (plugins CLI reference, plugin JSON result and plugin list sections): the fields above; no old/new version and no unset-options field. No real --json output has been captured from an update or from an install with unset options (probed on Claude Code 2.1.296, 2026-10-10: not yet probed).
Open questions
- Does
plugin update --jsonexpose old and new versions anywhere (message only, or a field)? - Does an install with unset userConfig options surface them in
--json? - If only
messagecarries it, is scrapingmessageany better than scraping text?
Acceptance criteria
- Real
--jsonoutput captured from an update that changes a version and from an install with unset options, recorded in the issue or a test fixture. -
sync-run.shclassifies from--jsonfields where they exist, with the remaining scrape (if any) named and justified. - Existing sync tests pass against the new parsing.
References
- Changelog item 2.1.268-007, https://code.claude.com/docs/en/changelog
- Related issues: fix(harness-ops): plugins sync and converge cannot clear stale project-scope pins the CLI treats as current #6713, perf(harness-ops): plugins sync user sweep runs one serial CLI process per update (85s for 53 plugins) #6309, fix(harness-ops): plugins sync report accuracy, ask prompt chunking, and dead cache check #5941, fix(harness-ops): plugins sync misreports installs another writer moved mid-run #6054, fix(harness-ops): classify concurrent moves and fix the self-update note in plugins sync #6055
🤖 Generated with Claude Code
Activity
github-actions commentedon Oct 10, 2026
Proposed work class: work-class: scoped
Basis: automated intake triage; the lanes App applied this class.
Size: Small
Complexity: Medium
Uncertainty: Knowable
Flags: none
Blocked by: none
Understood: you want
sync-run.shin the harness-ops plugins skill to classify install and update results fromclaude plugin ... --jsonfields instead of scraping text. The docs show no old/new version field and no unset-userConfig field, so the scrape may have to stay in part.The three open questions can be settled by capturing real
--jsonoutput from an update that changes a version and from an install with unset options. Until that output exists, the scope of the parser change is not fixed. No likely duplicates found. #6713, #6309, #5941, #6054 and #6055 are already listed as related.Automated triage, applied by the lanes App.
kyle-sexton commentedon Oct 13, 2026
Owner batch-ratified this admission in an attended session on 2026-10-12: work-class: scoped. The basis is the evidence pre-pass's agent route, with no owner input needed and no trust surface touched.
github-actions commentedon Oct 25, 2026
The triage sweep dispatched intake triage for this issue (attempt 1 of 2).