[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M77MN1MZVAEVZ95FQAYKSA1B":3,"skill-same:01M77MN1MZVAEVZ95FQAYKSA1B":65},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":6,"ownerHtmlUrl":34,"ownerBlogUrl":35,"ownerDescription":36,"updatedAt":37,"install":38,"resources":50},"01M77MN1MZVAEVZ95FQAYKSA1B","recommend-skills",null,"Ranked menu of every installed skill that fits this moment (Now, Next, Skipped upstream, Later, Spotlight), hiding nothing; a free-text question gets one skill and an example prompt. Use when: 'what are my options', 'which skill fits here', 'what am I forgetting'. One next stage: \u002Fsession-flow:workflow.","melodic-software\u002Fclaude-code-plugins","melodic-software","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F58273638?v=4","01M77JVQTXNGKCE4MDFY2BC936","Melodic Software","01M77JVQVN9QDWKAH6W03ANP76",30,"MIT","https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsession-flow\u002Fskills\u002Frecommend-skills\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\ndescription: \"Ranked menu of every installed skill that fits this moment (Now, Next, Skipped upstream, Later, Spotlight), hiding nothing; a free-text question gets one skill and an example prompt. Use when: 'what are my options', 'which skill fits here', 'what am I forgetting'. One next stage: \u002Fsession-flow:workflow.\"\nargument-hint: \"[topic-slug|question]\"\nuser-invocable: true\ndisable-model-invocation: false\nmetadata:\n  workflow-stage: anytime\n  summary: Lay out the skills that fit this moment as a ranked, nothing-hidden menu\n---\n\n**Arguments.** `[topic-slug|question]`. e.g. \u002Fsession-flow:recommend-skills, \u002Fsession-flow:recommend-skills my-topic, \u002Fsession-flow:recommend-skills which skill finds why the build is slow?\n\n# Recommend skills\n\n**The human decides.** This skill's judgment goes into *rank* and *annotations*. It never goes into\n*presence*.\n\n## The two rules\n\n1. **Never omit a candidate's name.** Not because a step looks already done, not because it looks\n   unnecessary, not to keep the output short. A skill the evidence says already ran is ranked\n   normally and annotated `(ran this session)`. The one exception is the operator's own exclude\n   setting (below): the states it names are dropped, and the output says which.\n2. **Never invent a candidate.** Every name rendered must come from the resolved catalog. A thin\n   source yields a short menu, never one filled with plausible-sounding names: a menu that routes\n   to something that does not exist is worse than a short menu.\n\n### Omit irrelevant, never unnecessary\n\nThe output size turns on this test:\n\n- **Irrelevant → omit.** The skill's *domain* does not apply to this session at all: songwriting\n  skills in a code session, Kindle tooling in a research session. No reasonable operator would\n  consider it.\n- **Unnecessary → keep, annotate.** The skill's domain applies and the operator *could* reasonably\n  run it; the model merely believes they need not. That belief is an annotation.\n\nWhen unsure which side a candidate falls on, it is unnecessary. Keep it.\n\n## Question mode\n\nA question that asks which skill fits a task it states, as the argument (an argument holding a\nspace is never a topic slug) or as the request that invoked this skill, gets one answer in place\nof the menu: one skill from the resolved catalog below (rule 2 holds), the arguments to pass it,\nand one example prompt with one labeled line each for Goal, Pass\u002Ffail check, Proof wanted, Known\nfacts and Constraints. The prompt names no method and no guessed cause, which are the skill's to\nfind. A request for the options themselves (\"what are my options\", \"what next\", \"show me my\noptions\"), or one that states no task, gets the menu, which rule 1 governs. When no catalog skill\nfits, say so and render the menu.\n\n## Resolve the candidate set\n\nTwo separate needs, resolved separately. Detail, formats, and failure behavior:\n[`context\u002Fcandidate-ladder.md`](context\u002Fcandidate-ladder.md).\n\n**Names. Completeness is a correctness property.** The in-context skill listing is *not* an\nacceptable sole source: what it carries is set by an upstream budget, and our premise is that\nthe skills an operator has forgotten are the ones it serves worst (pointer record and live\nsections:\n[candidate-ladder § Why the in-context listing cannot be the sole source](context\u002Fcandidate-ladder.md#why-the-in-context-listing-cannot-be-the-sole-source)).\nLadder:\n\n1. The skills index from `\u002Fharness-ops:inventory`, if that plugin is enabled: invoke it via the\n   Skill tool, asking for its Skills index (`--skills-index`) on stdout, with `--exclude` only\n   when the exclude setting below names states. It\n   prints one JSON record per skill from its frontmatter, `enabled`, `disabled` and\n   `not-installed` alike; reuse it rather than walking the plugin cache (when checking the cache's\n   location and layout, fetch\n   [Find plugins on disk](https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fplugins\u002Floading#find-plugins-on-disk)\n   live). **Read its output from stdout, never pass `--out` into the\n   consuming project**: this skill writes nothing but its Spotlight ledger. A `disabled` record is\n   named with a `(disabled)` annotation and a `not-installed` one with `(not installed)`, never\n   listed as runnable and never silently dropped. **Done when** the returned set contains at least\n   one `enabled` skill absent from the in-context listing, proving it reached past the listing's\n   blind spot;\n   if it returns nothing usable, fall to rung 2.\n2. An operator-supplied catalog file, when the consuming project provides one. **Done when** a\n   declared catalog path resolves and parses; if the project declares none, fall to rung 3.\n3. The in-context listing. Last resort. **Done when** the pool is built *and* the output carries\n   the truncation disclosure; a pool from this rung without that line is an incomplete result, not\n   a finished one.\n\n**Descriptions and stage metadata. Enrichment, not completeness.** The index rows carry each\nskill's `description` and `when_to_use`; otherwise use whatever descriptions the listing still\ncarries; otherwise absent.\n\n**Shortlist, then read.** Assign buckets from each index row's `description` and `when_to_use`,\nand shortlist the tier-1 candidates (at most five per bucket). Then read the shortlisted SKILL.md\nfiles where a path is readable: `plugins\u002F\u003Cplugin>\u002Fskills\u002F\u003Cskill>\u002FSKILL.md` in a marketplace\ncheckout, or `.claude\u002Fskills\u002F\u003Cskill>\u002FSKILL.md` for a personal or project skill. Their\n`metadata.workflow-stage` refines the shortlist's buckets and what each would add here; where no\nfile is readable, the index row stands in. Read no SKILL.md beyond the shortlist: the rest render\nby name.\n\n**Exclude setting.** `recommend_skills_exclude` = `${user_config.recommend_skills_exclude}`. A\nvalue still reading `${user_config.…}`, empty, or `none` is the default: exclude nothing and pass\nno `--exclude`. Otherwise it is a comma-separated subset of `disabled` and `not-installed`; pass it\nas the index's `--exclude`, and say once near the top which states it dropped. An unknown state is an error to\nreport, never a guess.\n\n**Absent enrichment means tier 2, never omission.** A skill with no available description cannot be\npromoted to tier 1 (which needs one). It still appears by name in tier 2. The output shape absorbs\na thin catalog without breaking rule 1.\n\n**Disclose a degraded pool.** When the pool came from rung 3, or enrichment was unavailable, say so\nin the output. Presenting a truncated pool as complete is the green-with-hidden-findings failure\n`docs\u002Fcontracts\u002Fliveness-assertion\u002F` (in the consuming marketplace) forbids.\n\n## Read the trajectory\n\n**Durable state is the primary signal; the conversation is secondary.** A long session is when the\noperator most needs this skill and when the conversation is least reliable: compaction drops the\nearly turns and need not keep every skill this session loaded.\n\n- **Pointer**: [Extend Claude with skills § Skill content lifecycle](https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fskills#skill-content-lifecycle),\n  for which skills compaction re-attaches.\n\n**Do not build a probe.** `\u002Fsession-flow:orient` already reads branch and git state, handoff\nsave-points, workflow checklists, running-retro ledgers, open PRs, and work-items, a superset of\nwhat this skill needs, in this plugin. Invoke it, or consume its briefing if it already ran this\nsession.\n\n**Slug selection** for artifact-grounded reads: an explicit topic-slug argument wins (a question\nargument is not one); else the\nmost-recently-modified topic slice; else the branch-derived slug. Resolve every path from the\nmemory root (default `.work\u002F`), which is configurable, so never hardcode it.\n\n**When the memory root is unreadable or empty. Say so; do not infer.** In a worktree, a sibling\nlane, or a fresh clone the memory slice is invisible, so *every* upstream artifact reads \"absent\".\nInferring from that would announce that the operator skipped every upstream stage, which is the\nopposite of the truth. Report `cannot ground upstream stages here` and leave the bucket empty with\nthat reason.\n\n## The five buckets\n\nFull derivation rules and rendering: [`context\u002Fbuckets.md`](context\u002Fbuckets.md).\n\n| Bucket | Holds | Tiers |\n|---|---|---|\n| **Now** | Fits the current moment | 1 + 2 |\n| **Next** | Two or three steps ahead on the trajectory | 1 + 2 |\n| **Skipped upstream** | Stages upstream of the detected position **whose output artifact is absent on disk**. Artifact-grounded, never inferred from conversation | 1 + 2 |\n| **Later** | Everything else in-domain: relevant to this project but beyond the Next horizon | **2 only** |\n| **Spotlight** | Exactly three, ordered least-recently-surfaced | 1 only |\n\n**`Later` is the catch-all that makes rule 1 true.** Without it, a skill that is in-domain but\ndownstream, testing and review skills early in a session, fits no bucket and would have to be\ndropped, silently breaking the never-omit rule. It renders **tier 2 only**: bare names with a count,\nroughly one wrapped line. Anything genuinely out-of-domain is still omitted\nunder the irrelevant test above; `Later` catches relevance, not everything.\n\n`Skipped upstream` is deliberately artifact-grounded: \"everything upstream\" is definitionally the\nwhole early catalog and carries no information. Verify a\nstage from its artifact, not from conversation vibes.\n\n`Spotlight` rotates so ranking alone does not re-show the same five skills forever. It reads and writes one small ledger of what it last surfaced. Path and record shape are\nfixed in [`context\u002Fbuckets.md`](context\u002Fbuckets.md) so two sessions cannot pick different ones and\nlose the rotation. It is deliberately **not** in `${CLAUDE_PLUGIN_DATA}`: a fixed filename there\nwould be one file per *machine*, and a spotlight shown in one repository would suppress it in\nanother (why: \"Verification record: plugin data dir\" under\n`${CLAUDE_PLUGIN_ROOT}\u002Freference\u002Fstructure.md#full-path-write-procedure`).\n\n## Render two tiers\n\nPer bucket:\n\n- **Tier 1. At most five, ranked.** Each carries: the invocation name, one line of what it would add\n  *to this conversation* (never its generic description), and when you would skip it. Annotations\n  ride here.\n- **Tier 2. Everything else in that bucket, by bare invocation name, with an explicit count.**\n  `Also live now (23): \u002Fa:b, \u002Fc:d, …`\n\n**Budget: the shape is the cap.** Five ranked options per bucket at three lines each, plus one\nwrapped tier-2 line per bucket, is the whole output. Never render every option in full.\n\nOne word expands any tier-2 roster to full treatment (`expand now`, `spotlight all`). That is\nprogressive disclosure, not filtering: nothing was withheld, only deferred a keystroke.\n\n## Boundaries. Four neighbors, four different jobs\n\n- **`\u002Fsession-flow:workflow`** answers *which stage comes next* and routes to **exactly one** owner,\n  by its own mandate never presenting both and leaving the operator to disambiguate. That rule\n  governs **stage** routing. This skill owns **option surfacing**, the whole set, ranked, for a\n  human to pick from. Reach for `workflow` when you want a decision; reach here when you want the\n  menu, or, in question mode, the skill for a task you state.\n- **`\u002Fsession-flow:orient`** reports *where you stand* and deliberately prescribes nothing. This\n  skill consumes that position rather than restating it.\n- **`\u002Fdiscipline:use-your-skills`** corrects the **model's** drift, a skill it should have fired and\n  did not. This addresses the **human's** awareness. Different subject entirely.\n- **The handoff document's \"Suggested skills\" section** already recommends fully-qualified skills tied to\n  remaining work. That is a durable artifact written for a cold reader resuming later; this is a live\n  ephemeral menu for the operator right now.\n\n## What this skill does NOT do\n\n- **Does not decide.** It ranks and annotates, and question mode names one fit. Picking is the\n  operator's.\n- **Does not filter by merit.** \"Already done\" and \"unnecessary\" never remove an option. See the two\n  rules. A design that ranks-then-truncates reintroduces the same gatekeeping through the cutoff.\n- **Does not build its own durable-state probe.** It routes to `\u002Fsession-flow:orient`, invoked via the Skill tool.\n- **Does not execute what you pick.** Presentation only; invoking the choice is a separate act.\n- **Does not enable or install anything.** No `\u002Fplugin` or `claude plugin` install or enable\n  command, and no edit to `enabledPlugins` or `skillOverrides`, even when the best fit is a\n  `(disabled)` or `(not installed)` skill or the operator asks. Name the skill and the command the\n  operator would run; running it is theirs.\n- **Asks at most one question.** When the trajectory reads too thin to rank, ask the one question\n  whose answer would most change the ranking, then render. After the answer, or with no answer,\n  render the menu; never ask a second.\n- **Does not enumerate a catalog in its own body.** The candidate set is resolved at runtime; an\n  embedded inventory would be a permanent token cost that rots as the fleet changes.\n\n## Next\n\n\u002Fsession-flow:workflow\n\nA menu has no single successor; the workflow router picks the one next stage.\n\n## Gotchas\n\n- A skill turned off via `skillOverrides` can still appear in a catalog but cannot run.\n  Recommending it hands the operator a dead option. Annotate it if the override is visible.\n  - **Pointer**: [Extend Claude with skills § Override skill visibility from settings](https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fskills#override-skill-visibility-from-settings)\n- Most built-in commands are not `Skill`-invocable. They can be *named* as options (`\u002Fcompact`,\n  `\u002Fclear`) but not invoked on the operator's behalf; say which is which (pointer record:\n  [continuation § Autonomy: two tiers, each explicitly licensed](..\u002Fworkflow\u002Fcontext\u002Fcontinuation.md#autonomy-two-tiers-each-explicitly-licensed)).\n- An empty bucket is a real result and says so, with its reason. Silence reads as an oversight.\n","**Arguments.** `[topic-slug|question]`. e.g. \u002Fsession-flow:recommend-skills, \u002Fsession-flow:recommend-skills my-topic, \u002Fsession-flow:recommend-skills which skill finds why the build is slow?\n\n# Recommend skills\n\n**The human decides.** This skill's judgment goes into *rank* and *annotations*. It never goes into\n*presence*.\n\n## The two rules\n\n1. **Never omit a candidate's name.** Not because a step looks already done, not because it looks\n   unnecessary, not to keep the output short. A skill the evidence says already ran is ranked\n   normally and annotated `(ran this session)`. The one exception is the operator's own exclude\n   setting (below): the states it names are dropped, and the output says which.\n2. **Never invent a candidate.** Every name rendered must come from the resolved catalog. A thin\n   source yields a short menu, never one filled with plausible-sounding names: a menu that routes\n   to something that does not exist is worse than a short menu.\n\n### Omit irrelevant, never unnecessary\n\nThe output size turns on this test:\n\n- **Irrelevant → omit.** The skill's *domain* does not apply to this session at all: songwriting\n  skills in a code session, Kindle tooling in a research session. No reasonable operator would\n  consider it.\n- **Unnecessary → keep, annotate.** The skill's domain applies and the operator *could* reasonably\n  run it; the model merely believes they need not. That belief is an annotation.\n\nWhen unsure which side a candidate falls on, it is unnecessary. Keep it.\n\n## Question mode\n\nA question that asks which skill fits a task it states, as the argument (an argument holding a\nspace is never a topic slug) or as the request that invoked this skill, gets one answer in place\nof the menu: one skill from the resolved catalog below (rule 2 holds), the arguments to pass it,\nand one example prompt with one labeled line each for Goal, Pass\u002Ffail check, Proof wanted, Known\nfacts and Constraints. The prompt names no method and no guessed cause, which are the skill's to\nfind. A request for the options themselves (\"what are my options\", \"what next\", \"show me my\noptions\"), or one that states no task, gets the menu, which rule 1 governs. When no catalog skill\nfits, say so and render the menu.\n\n## Resolve the candidate set\n\nTwo separate needs, resolved separately. Detail, formats, and failure behavior:\n[`context\u002Fcandidate-ladder.md`](context\u002Fcandidate-ladder.md).\n\n**Names. Completeness is a correctness property.** The in-context skill listing is *not* an\nacceptable sole source: what it carries is set by an upstream budget, and our premise is that\nthe skills an operator has forgotten are the ones it serves worst (pointer record and live\nsections:\n[candidate-ladder § Why the in-context listing cannot be the sole source](context\u002Fcandidate-ladder.md#why-the-in-context-listing-cannot-be-the-sole-source)).\nLadder:\n\n1. The skills index from `\u002Fharness-ops:inventory`, if that plugin is enabled: invoke it via the\n   Skill tool, asking for its Skills index (`--skills-index`) on stdout, with `--exclude` only\n   when the exclude setting below names states. It\n   prints one JSON record per skill from its frontmatter, `enabled`, `disabled` and\n   `not-installed` alike; reuse it rather than walking the plugin cache (when checking the cache's\n   location and layout, fetch\n   [Find plugins on disk](https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fplugins\u002Floading#find-plugins-on-disk)\n   live). **Read its output from stdout, never pass `--out` into the\n   consuming project**: this skill writes nothing but its Spotlight ledger. A `disabled` record is\n   named with a `(disabled)` annotation and a `not-installed` one with `(not installed)`, never\n   listed as runnable and never silently dropped. **Done when** the returned set contains at least\n   one `enabled` skill absent from the in-context listing, proving it reached past the listing's\n   blind spot;\n   if it returns nothing usable, fall to rung 2.\n2. An operator-supplied catalog file, when the consuming project provides one. **Done when** a\n   declared catalog path resolves and parses; if the project declares none, fall to rung 3.\n3. The in-context listing. Last resort. **Done when** the pool is built *and* the output carries\n   the truncation disclosure; a pool from this rung without that line is an incomplete result, not\n   a finished one.\n\n**Descriptions and stage metadata. Enrichment, not completeness.** The index rows carry each\nskill's `description` and `when_to_use`; otherwise use whatever descriptions the listing still\ncarries; otherwise absent.\n\n**Shortlist, then read.** Assign buckets from each index row's `description` and `when_to_use`,\nand shortlist the tier-1 candidates (at most five per bucket). Then read the shortlisted SKILL.md\nfiles where a path is readable: `plugins\u002F\u003Cplugin>\u002Fskills\u002F\u003Cskill>\u002FSKILL.md` in a marketplace\ncheckout, or `.claude\u002Fskills\u002F\u003Cskill>\u002FSKILL.md` for a personal or project skill. Their\n`metadata.workflow-stage` refines the shortlist's buckets and what each would add here; where no\nfile is readable, the index row stands in. Read no SKILL.md beyond the shortlist: the rest render\nby name.\n\n**Exclude setting.** `recommend_skills_exclude` = `${user_config.recommend_skills_exclude}`. A\nvalue still reading `${user_config.…}`, empty, or `none` is the default: exclude nothing and pass\nno `--exclude`. Otherwise it is a comma-separated subset of `disabled` and `not-installed`; pass it\nas the index's `--exclude`, and say once near the top which states it dropped. An unknown state is an error to\nreport, never a guess.\n\n**Absent enrichment means tier 2, never omission.** A skill with no available description cannot be\npromoted to tier 1 (which needs one). It still appears by name in tier 2. The output shape absorbs\na thin catalog without breaking rule 1.\n\n**Disclose a degraded pool.** When the pool came from rung 3, or enrichment was unavailable, say so\nin the output. Presenting a truncated pool as complete is the green-with-hidden-findings failure\n`docs\u002Fcontracts\u002Fliveness-assertion\u002F` (in the consuming marketplace) forbids.\n\n## Read the trajectory\n\n**Durable state is the primary signal; the conversation is secondary.** A long session is when the\noperator most needs this skill and when the conversation is least reliable: compaction drops the\nearly turns and need not keep every skill this session loaded.\n\n- **Pointer**: [Extend Claude with skills § Skill content lifecycle](https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fskills#skill-content-lifecycle),\n  for which skills compaction re-attaches.\n\n**Do not build a probe.** `\u002Fsession-flow:orient` already reads branch and git state, handoff\nsave-points, workflow checklists, running-retro ledgers, open PRs, and work-items, a superset of\nwhat this skill needs, in this plugin. Invoke it, or consume its briefing if it already ran this\nsession.\n\n**Slug selection** for artifact-grounded reads: an explicit topic-slug argument wins (a question\nargument is not one); else the\nmost-recently-modified topic slice; else the branch-derived slug. Resolve every path from the\nmemory root (default `.work\u002F`), which is configurable, so never hardcode it.\n\n**When the memory root is unreadable or empty. Say so; do not infer.** In a worktree, a sibling\nlane, or a fresh clone the memory slice is invisible, so *every* upstream artifact reads \"absent\".\nInferring from that would announce that the operator skipped every upstream stage, which is the\nopposite of the truth. Report `cannot ground upstream stages here` and leave the bucket empty with\nthat reason.\n\n## The five buckets\n\nFull derivation rules and rendering: [`context\u002Fbuckets.md`](context\u002Fbuckets.md).\n\n| Bucket | Holds | Tiers |\n|---|---|---|\n| **Now** | Fits the current moment | 1 + 2 |\n| **Next** | Two or three steps ahead on the trajectory | 1 + 2 |\n| **Skipped upstream** | Stages upstream of the detected position **whose output artifact is absent on disk**. Artifact-grounded, never inferred from conversation | 1 + 2 |\n| **Later** | Everything else in-domain: relevant to this project but beyond the Next horizon | **2 only** |\n| **Spotlight** | Exactly three, ordered least-recently-surfaced | 1 only |\n\n**`Later` is the catch-all that makes rule 1 true.** Without it, a skill that is in-domain but\ndownstream, testing and review skills early in a session, fits no bucket and would have to be\ndropped, silently breaking the never-omit rule. It renders **tier 2 only**: bare names with a count,\nroughly one wrapped line. Anything genuinely out-of-domain is still omitted\nunder the irrelevant test above; `Later` catches relevance, not everything.\n\n`Skipped upstream` is deliberately artifact-grounded: \"everything upstream\" is definitionally the\nwhole early catalog and carries no information. Verify a\nstage from its artifact, not from conversation vibes.\n\n`Spotlight` rotates so ranking alone does not re-show the same five skills forever. It reads and writes one small ledger of what it last surfaced. Path and record shape are\nfixed in [`context\u002Fbuckets.md`](context\u002Fbuckets.md) so two sessions cannot pick different ones and\nlose the rotation. It is deliberately **not** in `${CLAUDE_PLUGIN_DATA}`: a fixed filename there\nwould be one file per *machine*, and a spotlight shown in one repository would suppress it in\nanother (why: \"Verification record: plugin data dir\" under\n`${CLAUDE_PLUGIN_ROOT}\u002Freference\u002Fstructure.md#full-path-write-procedure`).\n\n## Render two tiers\n\nPer bucket:\n\n- **Tier 1. At most five, ranked.** Each carries: the invocation name, one line of what it would add\n  *to this conversation* (never its generic description), and when you would skip it. Annotations\n  ride here.\n- **Tier 2. Everything else in that bucket, by bare invocation name, with an explicit count.**\n  `Also live now (23): \u002Fa:b, \u002Fc:d, …`\n\n**Budget: the shape is the cap.** Five ranked options per bucket at three lines each, plus one\nwrapped tier-2 line per bucket, is the whole output. Never render every option in full.\n\nOne word expands any tier-2 roster to full treatment (`expand now`, `spotlight all`). That is\nprogressive disclosure, not filtering: nothing was withheld, only deferred a keystroke.\n\n## Boundaries. Four neighbors, four different jobs\n\n- **`\u002Fsession-flow:workflow`** answers *which stage comes next* and routes to **exactly one** owner,\n  by its own mandate never presenting both and leaving the operator to disambiguate. That rule\n  governs **stage** routing. This skill owns **option surfacing**, the whole set, ranked, for a\n  human to pick from. Reach for `workflow` when you want a decision; reach here when you want the\n  menu, or, in question mode, the skill for a task you state.\n- **`\u002Fsession-flow:orient`** reports *where you stand* and deliberately prescribes nothing. This\n  skill consumes that position rather than restating it.\n- **`\u002Fdiscipline:use-your-skills`** corrects the **model's** drift, a skill it should have fired and\n  did not. This addresses the **human's** awareness. Different subject entirely.\n- **The handoff document's \"Suggested skills\" section** already recommends fully-qualified skills tied to\n  remaining work. That is a durable artifact written for a cold reader resuming later; this is a live\n  ephemeral menu for the operator right now.\n\n## What this skill does NOT do\n\n- **Does not decide.** It ranks and annotates, and question mode names one fit. Picking is the\n  operator's.\n- **Does not filter by merit.** \"Already done\" and \"unnecessary\" never remove an option. See the two\n  rules. A design that ranks-then-truncates reintroduces the same gatekeeping through the cutoff.\n- **Does not build its own durable-state probe.** It routes to `\u002Fsession-flow:orient`, invoked via the Skill tool.\n- **Does not execute what you pick.** Presentation only; invoking the choice is a separate act.\n- **Does not enable or install anything.** No `\u002Fplugin` or `claude plugin` install or enable\n  command, and no edit to `enabledPlugins` or `skillOverrides`, even when the best fit is a\n  `(disabled)` or `(not installed)` skill or the operator asks. Name the skill and the command the\n  operator would run; running it is theirs.\n- **Asks at most one question.** When the trajectory reads too thin to rank, ask the one question\n  whose answer would most change the ranking, then render. After the answer, or with no answer,\n  render the menu; never ask a second.\n- **Does not enumerate a catalog in its own body.** The candidate set is resolved at runtime; an\n  embedded inventory would be a permanent token cost that rots as the fleet changes.\n\n## Next\n\n\u002Fsession-flow:workflow\n\nA menu has no single successor; the workflow router picks the one next stage.\n\n## Gotchas\n\n- A skill turned off via `skillOverrides` can still appear in a catalog but cannot run.\n  Recommending it hands the operator a dead option. Annotate it if the override is visible.\n  - **Pointer**: [Extend Claude with skills § Override skill visibility from settings](https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fskills#override-skill-visibility-from-settings)\n- Most built-in commands are not `Skill`-invocable. They can be *named* as options (`\u002Fcompact`,\n  `\u002Fclear`) but not invoked on the operator's behalf; say which is which (pointer record:\n  [continuation § Autonomy: two tiers, each explicitly licensed](..\u002Fworkflow\u002Fcontext\u002Fcontinuation.md#autonomy-two-tiers-each-explicitly-licensed)).\n- An empty bucket is a real result and says so, with its reason. Silence reads as an oversight.\n",{"metadata":24,"description":7,"argument-hint":27,"user-invocable":28,"disable-model-invocation":20},{"summary":25,"workflow-stage":26},"Lay out the skills that fit this moment as a ranked, nothing-hidden menu","anytime","[topic-slug|question]",true,"main","d0e68c3f36b92a1d6381f0ba0060d7a0b8b886c5","plugins\u002Fsession-flow\u002Fskills\u002Frecommend-skills",7,"https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins","https:\u002F\u002Fgithub.com\u002Fmelodic-software","https:\u002F\u002Fmelodicsoftware.com","Independent software studio building developer tools, automation, and application services, with roots in music.","2026-11-15 05:15:06",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":28},[40,43,46],{"tool":41,"command":42},"npx","npx skills add melodic-software\u002Fclaude-code-plugins --skill recommend-skills",{"tool":44,"command":45},"bunx","bunx skills add melodic-software\u002Fclaude-code-plugins --skill recommend-skills",{"tool":47,"command":48},"pnpm","pnpm dlx skills add melodic-software\u002Fclaude-code-plugins --skill recommend-skills","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsession-flow\u002Fskills\u002Frecommend-skills\u002FSKILL.md",[51,57,61],{"path":52,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":55,"sourceHtmlUrl":56},"context\u002Fbuckets.md","REFERENCE","参考文档",7736,"https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsession-flow\u002Fskills\u002Frecommend-skills\u002Fcontext\u002Fbuckets.md",{"path":58,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":59,"sourceHtmlUrl":60},"context\u002Fcandidate-ladder.md",7224,"https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsession-flow\u002Fskills\u002Frecommend-skills\u002Fcontext\u002Fcandidate-ladder.md",{"path":62,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":63,"sourceHtmlUrl":64},"evals\u002Fevals.json",12318,"https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsession-flow\u002Fskills\u002Frecommend-skills\u002Fevals\u002Fevals.json",[66,73,80,87,92,99],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":19},"01M7DYYDG31B9YX7N9MB9QW2GW","track","Backlog reads through the bound tracker: search open and closed items, view one item with its comments and state history. Use when another skill searches or reads tracker items.","https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fsession-flow\u002Fevals\u002Frecall-still-reports-reopened-bug\u002Fwork-items-stub\u002Fskills\u002Ftrack\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M7DYXVBAVG3NV30PA7GKW9Q6","reviewer-media","Reviewer media for one pull request: decides whether it needs a narrated walkthrough, builds the storyboard from \u002Freview:explain-change's digest, has \u002Fexplainer-video:produce render it and hands the manifest to \u002Fsource-control:pull-request media. Use when asked for 'reviewer media', 'a walkthrough video for this PR', 'a produced video of this change', or when pull-request ready or monitor hands a PR over.","https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Freview\u002Fskills\u002Freviewer-media\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":19},"01M7DYRZ5YD44AMYH26YR25GZ8","route","Model and effort per agent role (orchestrator, worker, verifier, retrieval) for a multi-agent run, resolved through the bundled defaults and the user, team and personal override config layers into fenced JSON with single-agent and fan-out variants and the layer behind each value. Use when asked 'which model for the subagents', 'route the roles' or 'model routing', or before a skill passes a role's model on a spawn.","https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fdiscovery\u002Fevals\u002Fex-model-pin-without-override\u002Fmulti-agent-stub\u002Fskills\u002Froute\u002FSKILL.md",[],[],{"skillNo":88,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":19},"01M7DYRTVT4FWTGDJY0HCCFJMZ","https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fdiscovery\u002Fevals\u002Fex-model-override-from-route\u002Fmulti-agent-stub\u002Fskills\u002Froute\u002FSKILL.md",[],[],{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":19},"01M7DYNZC8PNW3T27V2ADKECKJ","principles","Module-design vocabulary for architecture findings, and the checks built on it. Use when: 'what is a deep module', 'what is a seam', 'deep vs shallow module', 'what is the deletion test', 'leverage and locality', 'module design vocabulary', 'which word do we use for X in architecture findings'. Scanning a codebase for friction is \u002Farchitecture:improve.","https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Farchitecture\u002Fskills\u002Fprinciples\u002FSKILL.md",[],[],{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":19},"01M7DYNMCZNEWBFHV9KTSS6H60","write","Structured five-field bug report (title, steps to reproduce, expected vs actual, justified severity, suggested fix location) from an informal description, read-only. Use when the user names a defect they observed, or asks for one written up ('report a bug', 'file a bug', 'write this up as a bug').","https:\u002F\u002Fgithub.com\u002Fmelodic-software\u002Fclaude-code-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Farchitecture\u002Fevals\u002Fdeepening-defect-goes-to-bugs-write\u002Fbugs-stub\u002Fskills\u002Fwrite\u002FSKILL.md",[],[]]