Skip to content

feat\(session-flow\): rename show-options to /session-flow:recommend-skills with a frontmatter index of every skill - part 2 of 3 #11131

Description

@melodic-automation-lanes

Part 2 of 3 of #11122, split at intake (owner Q93). The done-when below is copied from #11122 as written.

Done when

  • The index script has a test that passes under scripts/run-test-file.sh, covering one installed, one disabled and one not-installed skill.

Activity

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

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Small
    Complexity: Low
    Uncertainty: Known
    Flags: none
    Blocked by: #11130

    Understood: this is part 2 of 3 of #11122. It asks for a test of the skill index script, run under scripts/run-test-file.sh. The test covers one installed, one disabled and one not-installed skill. The script itself is presumably built in part 1 (#11130), so this part waits on it. Parts 1 and 3 (#11130, #11132) are sibling splits, not duplicates.

    Automated triage, applied by the lanes App.

  3. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 30, 2026
  4. added
    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.
    on Oct 30, 2026
  5. melodic-automation-lanes commented on Oct 30, 2026

    @melodic-automation-lanes
    ContributorAuthor

    Not admitted to the issue lane yet: blocker #11130 is not closed by a listed human or a merge.

  6. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 30, 2026
  7. melodic-automation-lanes commented on Oct 30, 2026

    @melodic-automation-lanes
    ContributorAuthor

    The work-resolve-issue lane did not start this issue: it needs a person to make it clearer first.

    Reason: intent

    Why, in the run's own words:

    This part's only done-when item is a test for 'the index script', but that script does not exist on the default branch: plugins/session-flow/skills/recommend-skills/ holds only SKILL.md, context/ and evals/. Building it first means settling design questions that this issue, parent #11122 and the #7575 decision (D80, Q157, Q189, Q190) leave open. (1) Where does the script read not-installed skills from? #7575 says the script indexes 'installed, disabled, not installed' skills but names no source. One option is the marketplace checkouts that known_marketplaces.json lists (installLocation), as plugins/harness-ops/skills/inventory/scripts/inventory.py scan_disk does. A plugin whose source is a remote repository has no SKILL.md on disk there. (2) How does the script find installed skills? recommend-skills/context/candidate-ladder.md says rung 1 'is a reuse, not a reimplementation' of /harness-ops:inventory and 'Do not walk ~/.claude/plugins/cache directly'. A new session-flow script that reads the cache contradicts that, unless the issue says it replaces rung 1. Calling inventory.py instead needs the harness-ops plugin installed. (3) What counts as disabled? inventory.py reads only enabledPlugins in the user-scope settings.json. Do project and local scopes count, and does skillOverrides 'off' count? (4) Is building the script this part's work or part 3's, and where does it live (path, language, output shape)? Please answer (1) to (4), or record a decision, and this lane will build the script and its test.

    What the run says it did not do:

    • The index script and its test under scripts/run-test-file.sh were not written: the design questions in reason are open.

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41066876379

    To retry, answer the question in a comment whose first line is **Decision recorded.**, then remove needs-human and add agent-ready again.

  8. kyle-sexton commented on Oct 30, 2026

    @kyle-sexton
    Member

    Decision recorded.

    This answers the lane's open questions (comment 6524617518). Agents decided them on evidence under standing direction §1; none changes the intent of #7575's D80 / Q157. The owner may overturn D1's handling of remote-source plugins. Nobody else holds #11122 or #11131 (Automation Lanes confirmed). The index script belongs to this part: part 1 (#11130) only renamed the skill and is closed, and part 3 (#11132) runs after parts 1 and 2 and consumes the index (split comment 6513995976, order=1>3,2>3).

    • D1, where not-installed skills come from. For each marketplace in known_marketplaces.json, read the checkout's .claude-plugin/marketplace.json.
      • Local-path entries resolve against the checkout's installLocation and are indexed per skill from SKILL.md frontmatter.
      • Remote-source entries become one plugin-level row: name, the description from marketplace.json, and skill: null. No plugin is dropped. The agent reads a shortlisted plugin's SKILL.md files at shortlist time, as Q157 already has it do. The script makes no network fetch, because bulk-fetching thousands of remote repositories is a host and API-budget risk.
      • A plugin in the cache uses its cached copy, not the checkout copy.
    • D2, location. There is no second enumerator. Add a --skills-index mode to plugins/harness-ops/skills/inventory/scripts/inventory.py (Python, JSON to stdout) and document it in inventory's SKILL.md. recommend-skills reaches it only through /harness-ops:inventory, never by path: candidate-ladder.md says rung 1 "is a reuse, not a reimplementation" and forbids walking the plugin cache directly. Rungs 2-3 and their disclosure stay the fallback.
    • D3, disabled.
      • A plugin's state is its enabledPlugins value, with local > project > user precedence, skipping a scope that holds a non-Boolean value.
      • With no entry at any scope, the plugin follows the marketplace entry's defaultEnabled, then plugin.json's, then true (settings reference, enabledPlugins; plugin manifest reference, defaultEnabled).
      • Managed settings are not read, the caveat inventory already carries.
      • skillOverrides does not apply to plugin skills. A personal or project skill set to "off" is disabled.
    • D4, shape.
      • One record per skill, with these fields: plugin (plugin@marketplace, or user/project for config-scope skills), skill, name, description, when_to_use, state (enabled | disabled | not-installed) and source (cache | checkout | marketplace-manifest | config-scope).
      • --exclude disabled,not-installed filters by state, per Q189.
      • This part builds the script and its tests. The session-flow userConfig key for the exclude setting and the skill wiring belong to feat\(session-flow\): rename show-options to /session-flow:recommend-skills with a frontmatter index of every skill - part 3 of 3 #11132. So does the correction of candidate-ladder.md's "installed but absent from enabledPlugins = not enabled" (such a plugin follows defaultEnabled, D3).

    Done when

    • The index script has a test that passes under scripts/run-test-file.sh, covering one installed, one disabled and one not-installed skill.
    • That test, plugins/harness-ops/skills/inventory/scripts/test_skills_index.py, also covers:
      • a remote-source plugin yielding one plugin-level row
      • a plugin with no enabledPlugins entry following defaultEnabled
      • a local-scope value overriding user scope
      • --exclude dropping disabled and not-installed records
    • scripts/run-test-file.sh plugins/harness-ops/skills/inventory/scripts/test_inventory.py still passes.
    • bash plugins/skill-quality/scripts/check-skill.sh plugins/harness-ops/skills exits 0.
    • scripts/check-changelog-fragments.sh passes with a harness-ops fragment.
  9. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 30, 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

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.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