Skip to content

feat(harness-ops): read claude plugin --json output in plugins sync-run.sh instead of scraping text #6757

Description

@kyle-sexton

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

  1. Does plugin update --json expose old and new versions anywhere (message only, or a field)?
  2. Does an install with unset userConfig options surface them in --json?
  3. If only message carries it, is scraping message any better than scraping text?

Acceptance criteria

  • Real --json output 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.sh classifies from --json fields where they exist, with the remaining scrape (if any) named and justified.
  • Existing sync tests pass against the new parsing.

References

🤖 Generated with Claude Code

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 10, 2026
  2. github-actions commented on Oct 10, 2026

    @github-actions
    Contributor

    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.sh in the harness-ops plugins skill to classify install and update results from claude plugin ... --json fields 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 --json output 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.

  3. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 10, 2026
  4. removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 12, 2026
  5. kyle-sexton commented on Oct 13, 2026

    @kyle-sexton
    MemberAuthor

    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.

  6. added
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    priority: lowNice-to-have, cosmetic, or speculative; opportunistic.
    and removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 13, 2026
  7. github-actions commented on Oct 25, 2026

    @github-actions
    Contributor

    The triage sweep dispatched intake triage for this issue (attempt 1 of 2).

  8. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    admission-deferredReady for the issue lane; work-unblock admits it when queued work is under the queued cap
    on Oct 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    admission-deferredReady for the issue lane; work-unblock admits it when queued work is under the queued cappriority: lowNice-to-have, cosmetic, or speculative; opportunistic.status: readyTriaged, unblocked, and fully specified; eligible to pick up.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Fields

    No fields configured for Feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions