How this skill is triggered — by the user, by Claude, or both
Slash command
/xl:create-ruleset-groupsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Read `input-sections.yaml` for phase headings and logical groupings, propose `ruleset_groups`, and write them to `guidance.yaml` after `skeleton:` and before `constraints:`. A "Ruleset Group" is synonymous with a "ruleset group".
Read input-sections.yaml for phase headings and logical groupings, propose ruleset_groups, and write them to guidance.yaml after skeleton: and before constraints:. A "Ruleset Group" is synonymous with a "ruleset group".
/create-ruleset-groups <domain>
Read ../../core/output-fencing.md now.
Run these checks before doing anything else:
Domain argument provided?
$DOMAINS_DIR/*/ as a numbered menu and prompt:
:::user_input
Available domains:
<domain>. Then continue.Domain folder exists?
guidance.yaml exists?
$DOMAINS_DIR/<domain>/specs/guidance.yamlinput-sections.yaml exists?
$DOMAINS_DIR/<domain>/specs/input-sections.yamlskeleton: key present in guidance.yaml?
After pre-flight, check whether the ruleset_groups: key already exists in guidance.yaml:
Present → UPDATE mode. Display the existing list and prompt: :::user_input ruleset_groups already defined:
[a]ccept / [r]eplace / [m]erge? :::
a → Exit without writing. Suggest next step:
:::next_step
Next: Run /create-ruleset-modules to detect ruleset module candidates.
:::r → Run the full process below (Steps 1–3): re-scan, re-propose, accept/edit, write.m → Run the full process below to generate a new proposal list, then merge new + existing (deduplicated by name; new descriptions win on conflict). Display the merged list for confirmation using the same format as Step 2, then write on acceptance.Absent → CREATE mode. Run the full process below (Steps 1–3).
Read $DOMAINS_DIR/<domain>/specs/input-sections.yaml. Do NOT read files under $DOMAINS_DIR/<domain>/input/ — input-sections.yaml is the sole source of phase heading signals.
Look for:
heading: values) that name a test phase or logical grouping (e.g., "Income Test", "Household Size Verification", "Categorical Eligibility")Convert detected headings to snake_case names and prepare a proposed list. Examples: "Income Test" → income_test, "Household Size Verification" → household_size_verification.
If no phase headings are found: propose a single catch-all stage derived from display_name in guidance.yaml (e.g., if display_name is "Determine Eligibility", propose eligibility), and note it can be refined later. Never leave ruleset_groups: empty.
In UPDATE mode with m (merge): after generating the new proposal list, combine it with the existing ruleset_groups: entries. Deduplicate by name — when the same stage name appears in both lists, keep the new description. Hold the merged list in memory for Step 2.
Display the proposed list (or merged list in UPDATE m mode) in exactly this format:
:::detail Proposed ruleset groups ────────────────────────────────────────────────
Do not prompt for user input. Proceed directly to Step 3.
ruleset_groups:Write the confirmed groups to $DOMAINS_DIR/<domain>/specs/guidance.yaml:
ruleset_groups: as a top-level key immediately after skeleton: and before constraints: — do not append to the end of the filegenerated_at to today's dateYAML format:
ruleset_groups:
- name: income_test
description: Income eligibility tests
- name: household_test
description: Household size and composition tests
Print: :::important $DOMAINS_DIR//specs/guidance.yaml [UPDATED] :::
Then suggest the next step: :::next_step Next: Run /create-ruleset-modules to detect ruleset module candidates. :::
$DOMAINS_DIR/<domain>/specs/guidance.yaml [UPDATED]
$DOMAINS_DIR/<domain>/input/ — input-sections.yaml is the sole source of phase heading signalsruleset_groups: is inserted after skeleton: and before constraints: in guidance.yaml, not at the end of the fileruleset_groups: contentname — when the same stage name appears in both existing and new lists, keep the new descriptionsnake_case — "Income Test" → income_test, "Household Size Verification" → household_size_verificationdisplay_name — never leave ruleset_groups: empty or omit the keyruleset_groups: before ruleset module detection reverses the monolith's Step 4 → Step 5 order. This is intentional: ruleset modules must stay within a single stage, so groups must be defined first.npx claudepluginhub navapbc/lockpicks-xlator-plugin --plugin xlCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.