Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Features

ASecurity

Add a `/ll:scope-epic` skill that takes a high-level theme/goal description and produces (1) an EPIC issue file scoped to the theme and (2) 3–8 child issue stubs pre-wired with `parent: EPIC-NNN`. This is the upstream creation step that `/ll:capture-issue --parent` assumes already happened.

6 stars
0 votes
0 copies
0 views
Added 10/6/2026
ai-agentspythongobashgitapidocumentation

Works with

cliapimcp

Security Analysis

A100/100

Pro scans all 21 files and shows the line behind each finding

Scanned 10/6/2026

$npx -y skills add BrennonTWilliams/little-loops --skill features --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Features?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Features
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/brennontwilliams-features-61a73cd1/badge)](https://www.skillsdirectory.com/skills/brennontwilliams-features-61a73cd1)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
P0-FEAT-3398-quality-regression-detection-with-model-attribution.md
---
id: FEAT-1857
type: FEAT
priority: P3
status: done
captured_at: '2026-06-01T17:35:32Z'
completed_at: '2026-06-01T22:00:44Z'
discovered_date: '2026-06-01'
discovered_by: capture-issue
relates_to:
- FEAT-1810
- FEAT-1737
parent: EPIC-1864
confidence_score: 100
outcome_confidence: 86
score_complexity: 18
score_test_coverage: 18
score_ambiguity: 25
score_change_surface: 25
---

# FEAT-1857: `/ll:scope-epic` — theme-to-EPIC decomposition skill

## Summary

Add a `/ll:scope-epic` skill that takes a high-level theme/goal description and produces (1) an EPIC issue file scoped to the theme and (2) 3–8 child issue stubs pre-wired with `parent: EPIC-NNN`. This is the upstream creation step that `/ll:capture-issue --parent` assumes already happened.

## Current Behavior

To start an EPIC-shaped initiative today the user must:

1. Manually compose an EPIC issue (or call `/ll:capture-issue "epic: ..."`).
2. Manually identify child scope.
3. Repeatedly call `/ll:capture-issue --parent EPIC-NNN ...` for each child.

There is no skill that decomposes a theme into the EPIC + skeleton children in one pass. `/ll:capture-issue` creates *one* issue at a time and `--parent` requires the EPIC to already exist.

## Expected Behavior

```
$ /ll:scope-epic "Harness Codex CLI as a full claude-p replacement"

[skill proposes]
EPIC-XXXX: Harness Codex CLI as a full claude-p replacement
  ├── FEAT-XXXX: Codex auth & session management
  ├── FEAT-XXXX: Model selection & defaulting
  ├── FEAT-XXXX: Streaming output adapter
  ├── FEAT-XXXX: Tool-use bridge
  └── ENH-XXXX: MCP server compatibility

Proceed? [y/n]
```

On confirm: writes all 6 files with wiring (`parent:` on children, `relates_to:` + `## Children` on the EPIC). User then runs `/ll:refine-issue` on each child as needed.

## Motivation

Theme-to-EPIC decomposition is currently the highest-friction step in starting any multi-issue initiative. Users either skip the EPIC and end up with orphan issues, or write the EPIC and skip the children (so `/ll:scan-codebase` discovers them as orphans later, requiring `/ll:link-epics` to wire them back in).

Capturing the decomposition once at the start — when the theme is freshest in the user's head — produces better-scoped children than discovering them piecewise weeks later.

## Proposed Solution

Skill flow:

1. **Accept theme** — natural-language description, optional file path to a goals doc.
2. **Decompose (LLM)** — propose EPIC summary + 3–8 child issues, each with type (FEAT/ENH/BUG), priority, and one-line summary. Hint that children should be **independently shippable** (mirror `/ll:issue-size-review`'s principle).
3. **Present plan** — table view with type, priority, summary. User can edit interactively (add/remove/reorder/retype) before committing.
4. **Allocate IDs** — sequential via `ll-issues next-id`.
5. **Write EPIC first** — full template, `## Children` section with all proposed children, `relates_to:` frontmatter populated.
6. **Write each child** — minimal template (mirror `--quick`), `parent: EPIC-NNN` frontmatter set.
7. **Stage all files**.
8. **Print next-step hint**: `/ll:refine-issue` on any child whose scope needs deepening.

**Boundary vs. FEAT-1810 (`goal-cluster`)**: `goal-cluster` *executes* a list of related goals through loops; `scope-epic` *creates* the issue files that represent those goals. They are upstream/downstream of each other and may share the decomposition LLM prompt.

### Codebase Research Findings

_Added by `/ll:refine-issue` — based on codebase analysis:_

- **No existing inline LLM→JSON precedent**: No current skill asks the model to emit a structured JSON decomposition list inline. The closest patterns are CLI tools emitting JSON (`ll-issues list --type EPIC --json`, `ll-issues fingerprint`) that skills then parse — but those are CLI-driven, not LLM-driven. The JSON schema for child proposals will be novel; document it explicitly in SKILL.md.
- **EPIC wiring is prose-level duplication, not a shared helper**: Both `capture-issue` Phase 4c and `link-epics` Step 6 (6a/6b/6c) implement the same 3-case `relates_to:` update and `## Children` append/create logic as LLM prompt instructions using `Edit`. There is no factored Python helper yet — FEAT-1857's Implementation Step 5 "factor Phase 4c into a shared helper" is an aspirational refactor, not a pre-existing function to call.
- **`assemble_issue_markdown()` is the right file-creation entry point**: `scripts/little_loops/issue_template.py:assemble_issue_markdown()` accepts `issue_type`, `variant`, `issue_id`, `title`, `frontmatter` dict, and `content` dict. Use `variant="full"` for the EPIC and `variant="minimal"` for stubs. Section defaults come from `templates/epic-sections.json` and `templates/feat-sections.json`.
- **`config-schema.json` has no `epics` key today**: The `epics.scope.*` config proposed in this issue will require creating a new top-level `epics` property in `config-schema.json`. Check neighboring objects (`issues`, `project`, `scan`) for the schema property-definition shape to replicate.
- **`## Children` bullet format is stable across 8+ live EPIC files**: `- **TYPE-NNN** — one-sentence title` (bold ID, em-dash, sentence). EPIC-1864 (the parent of this issue) is the canonical live example.

## Integration Map

### Files to Modify
- `skills/scope-epic/SKILL.md` (new) — main skill; phases mirror `skills/capture-issue/SKILL.md` structure
- `skills/scope-epic/templates.md` (new, optional) — EPIC and child stub templates (may inline in SKILL.md instead)
- `commands/help.md` — add `/ll:scope-epic` listing under Issue Discovery group
- `.claude/CLAUDE.md` — add `scope-epic`^ to Commands & Skills section under Issue Discovery
- `config-schema.json` — add `epics.scope.min_children` (default 3) and `epics.scope.max_children` (default 8) under `epics` object (object does not currently exist in schema)

_Wiring pass added by `/ll:wire-issue`:_
- `docs/reference/COMMANDS.md` — add `### /ll:scope-epic` section and `| scope-epic |` row in Quick Reference table (after `review-epic` row at ~line 936)
- `README.md` — bump skill count: "60 skills" → "61 skills" (~line 161)
- `CONTRIBUTING.md` — bump skill definition count: "32 skill definitions" → "33" (~line 123); add `scope-epic/` entry in skills tree (~line 147)
- `docs/ARCHITECTURE.md` — bump skill count: "32 skill definitions" → "33" (~line 114)
- `skills/scope-epic/agents/openai.yaml` (new) — Codex adaptation companion, auto-generated via `ll-adapt-skills-for-codex`

### Dependent Files (Callers/Importers)
- `skills/capture-issue/SKILL.md` — Phase 4c: Wire Parent EPIC: the canonical 3-case `relates_to:` update + `## Children` append/create logic; replicate this exactly
- `skills/link-epics/SKILL.md` — Step 6: Apply Assignments (6a/6b/6c/6d): same wiring operations applied retroactively; use as secondary implementation reference
- `skills/issue-size-review/SKILL.md` — Phase 4, step 2: independently-shippable definition (each child must produce its own PR with tests; no artifact-type splits)

### Similar Patterns
- `skills/capture-issue/SKILL.md` — Conversation Mode section: markdown table + `AskUserQuestion` multiSelect UI for presenting a list of proposals before writing files
- `skills/link-epics/SKILL.md` — Step 5: Proposal Flow > Interactive Mode: scored multiSelect table pattern; adapt for child-review step
- `skills/capture-issue/SKILL.md` — Phase 4: Execute Action: per-issue `ll-issues next-id` call made **immediately before each `Write`** — do NOT batch-allocate IDs upfront (see Duplicate-ID recovery callout in that section)
- `scripts/little_loops/cli/issues/next_id.py` — `cmd_next_id()` → `scripts/little_loops/issue_parser.py:get_next_issue_number()`: returns global max integer + 1 across all issue types/dirs, zero-padded to 3 digits (e.g., `"071"`)
- `scripts/little_loops/issue_template.py` — `assemble_issue_markdown()`: builds a well-formed issue file from type + variant + frontmatter dict + content overrides; use variant `"full"` for EPIC, `"minimal"` for children; `load_issue_sections()` loads per-type section definitions from `templates/`
- `scripts/little_loops/frontmatter.py` — `update_frontmatter()`: in-place frontmatter field updates used by `capture-issue` Phase 4c for `parent:` and `relates_to:`
- `scripts/little_loops/file_utils.py` — `atomic_write()`: safe write-to-temp-then-rename pattern; use for each issue file
- `.issues/epics/P2-EPIC-1864-epic-lifecycle-and-visibility-tooling.md` — `## Children` section: canonical bullet format `- **TYPE-NNN** — one-sentence title` (live example with 8 children)

### Tests
- `scripts/tests/test_scope_epic_skill.py` (new) — model after `scripts/tests/test_issue_size_review_skill.py:TestIssueSizeReviewSkillWriteBack` (slice by heading, assert on content) and `scripts/tests/test_audit_loop_run_skill.py:TestAssessLoopSkill` (existence checks):
  - Skill file exists: `skills/scope-epic/SKILL.md`
  - Required phases present: ID allocation, interactive review, EPIC write, child write, EPIC wiring
  - `Edit` listed in `allowed_tools` frontmatter (required for in-place EPIC wiring)
  - `AskUserQuestion` present in interactive review phase
  - Both `relates_to:` and `## Children` wiring referenced in file-write phase
  - `ll-issues next-id` referenced for ID allocation (not batch increment)
- Existing `scripts/tests/test_issues_cli.py:TestIssuesCLINextId` and `scripts/tests/test_issue_parser.py:TestGetNextIssueNumber` already cover ID allocation — no new ID tests needed unless a `--count N` flag is added

_Wiring pass added by `/ll:wire-issue`:_
- `scripts/tests/test_config_schema.py` — add `test_epics_scope_in_schema` guard method asserting `epics` top-level key exists with `scope.min_children` (integer, default 3) and `scope.max_children` (integer, default 8) sub-properties; follows existing pattern e.g. `test_commands_review_epic_in_schema` (line 98)
- `scripts/tests/test_feat1857_doc_wiring.py` (new) — following `scripts/tests/test_feat1856_doc_wiring.py` pattern: assert `/ll:scope-epic` in help.md command reference + quick table, `scope-epic` in `.claude/CLAUDE.md` Commands & Skills, `scope-epic` in `docs/reference/COMMANDS.md` section + Quick Reference row, `skills/scope-epic/agents/openai.yaml` exists
- `scripts/tests/test_issue_template.py` (optional) — `test_full_variant_with_epic` asserting EPIC `variant="full"` includes `## Children` section from `templates/epic-sections.json` common_sections

### Documentation
- `docs/guides/EPIC_GUIDE.md` (new) — end-to-end EPIC workflow: scope → refine → review → ship
- `commands/help.md` — add to Issue Discovery group

_Wiring pass added by `/ll:wire-issue`:_
- `docs/reference/COMMANDS.md` — add `### /ll:scope-epic` section describing arguments, phases, and exit behavior; add `| scope-epic |` to Quick Reference table (after `review-epic` row ~line 936)
- `README.md` — bump skill count: "60 skills" → "61 skills" (~line 161)
- `CONTRIBUTING.md` — bump "32 skill definitions" → "33" (~line 123); add `│   ├── scope-epic/` to skills tree (~line 147)
- `docs/ARCHITECTURE.md` — bump "32 skill definitions" / "32 composable skills" → "33" (~line 114)

### Configuration
- `config-schema.json` — `epics.scope.min_children` (integer, default 3): fewer proposals triggers "consider `/ll:capture-issue`" warning
- `config-schema.json` — `epics.scope.max_children` (integer, default 8): more proposals triggers "consider sub-EPIC decomposition" suggestion

## Implementation Steps

1. **Scaffold skill** — create `skills/scope-epic/SKILL.md`; structure phases to mirror `skills/capture-issue/SKILL.md`: flag parsing → theme extraction → LLM decomposition → interactive review → ID allocation + file writes → EPIC wiring → git staging. Add `Edit` and `Write` to `allowed_tools` frontmatter (required for in-place EPIC wiring via Phase 4c).
2. **Decomposition prompt** — ask the LLM to output a structured JSON array: `[{"type": "FEAT"|"ENH"|"BUG", "priority": "P2"|"P3", "summary": "...", "title": "..."}]`. No existing skill uses inline LLM→JSON; the closest structural reference is `skills/workflow-automation-proposer/SKILL.md`. Document the schema in SKILL.md. The child-sizing constraint comes from `skills/issue-size-review/SKILL.md` Phase 4 step 2: each child must be independently shippable (no artifact-type splits, no wiring-from-implementation splits).
3. **Interactive edit loop** — display a markdown table (columns: #, Type, Priority, Summary) then `AskUserQuestion` with `multiSelect: true` to select which children to keep. Adapt the UI pattern from `skills/capture-issue/SKILL.md` Conversation Mode (table + multiSelect) and `skills/link-epics/SKILL.md` Step 5: Proposal Flow > Interactive Mode (scored proposal table). Follow with a single-select confirm/edit/cancel question.
4. **ID allocation + file writes** — call `ll-issues next-id` once **immediately before writing each file** (not batched upfront — see Duplicate-ID recovery callout in `skills/capture-issue/SKILL.md` Phase 4). Use `scripts/little_loops/issue_template.py:assemble_issue_markdown()` with variant `"full"` and type `"EPIC"` for the EPIC file, variant `"minimal"` for each child. Use `scripts/little_loops/file_utils.py:atomic_write()` for each file write. Write EPIC first, then children in order.
5. **Wire EPIC ↔ children** — replicate Phase 4c from `skills/capture-issue/SKILL.md` for each child: (a) append child ID to EPIC `relates_to:` frontmatter using the 3-case logic (absent → insert; empty list → replace; populated → append) via `scripts/little_loops/frontmatter.py:update_frontmatter()`; (b) append `- **CHILD_ID** — [one-sentence summary]` bullet to EPIC `## Children` section (create section before `## Status` if absent) via `Edit`; (c) set `parent: EPIC-NNN` in each child's frontmatter. Reference `skills/link-epics/SKILL.md` Step 6 (6a/6b/6c) as a secondary guide.
6. **Git staging** — `git add` each written file (EPIC + all children) after all writes and wiring edits complete.
7. **Config schema** — add `epics.scope` object to `config-schema.json` with `min_children` (integer, default 3, minimum 1) and `max_children` (integer, default 8) properties. The `epics` key does not currently exist in the schema; check neighboring config objects (e.g., `issues`, `project`) for the correct property-definition shape to match.
8. **Tests** — create `scripts/tests/test_scope_epic_skill.py` following `scripts/tests/test_issue_size_review_skill.py:TestIssueSizeReviewSkillWriteBack` (read SKILL.md, slice by heading, assert content present) and `scripts/tests/test_audit_loop_run_skill.py:TestAssessLoopSkill` (file existence + key string checks). Assert: file exists, phases present, `Edit` in allowed_tools, `AskUserQuestion` in review phase, `relates_to:` and `## Children` both referenced, `ll-issues next-id` in ID step.
9. **Docs + help** — add `scope-epic`^ to `commands/help.md` Issue Discovery group; add entry to `.claude/CLAUDE.md` Commands & Skills > Issue Discovery section.

### Wiring Phase (added by `/ll:wire-issue`)

_These touchpoints were identified by wiring analysis and must be included in the implementation:_

10. **Doc reference wiring** — add `### /ll:scope-epic` section to `docs/reference/COMMANDS.md` with description, usage, flags, and trigger keywords; add `| scope-epic |` row to Quick Reference table after `review-epic` row (~line 936).
11. **Skill count bumps** — bump skill counts in `README.md` ("60 skills" → "61"), `CONTRIBUTING.md` ("32 skill definitions" → "33", plus add `│   ├── scope-epic/` to the skills tree at ~line 147), and `docs/ARCHITECTURE.md` ("32 composable skills" → "33"). These hardcoded counts are verified by `ll-verify-docs`; leaving them stale causes a CI mismatch.
12. **Config schema test** — add `test_epics_scope_in_schema` method to `scripts/tests/test_config_schema.py` asserting: `epics` exists in top-level properties, `scope` sub-object with `min_children` (integer, default 3) and `max_children` (integer, default 8). Follow pattern from `test_commands_review_epic_in_schema` (line 98).
13. **Doc wiring test** — create `scripts/tests/test_feat1857_doc_wiring.py` following `scripts/tests/test_feat1856_doc_wiring.py` pattern: assert `/ll:scope-epic` in help.md, `scope-epic` in CLAUDE.md, `scope-epic` in COMMANDS.md, `skills/scope-epic/agents/openai.yaml` exists (generated via `ll-adapt-skills-for-codex`).
14. **Codex adaptation** — run `ll-adapt-skills-for-codex --apply` after creating `skills/scope-epic/SKILL.md` to generate `skills/scope-epic/agents/openai.yaml`. The CI test `test_all_real_skills_have_openai_yaml` fails without this file.

## Impact

- **Priority**: P3 — Quality-of-life; not blocking but eliminates a multi-step manual flow.
- **Effort**: Medium — Reuses `capture-issue` writing + wiring; new LLM prompt + interactive UI.
- **Risk**: Low — Additive skill; no behavioral change to existing tools.
- **Breaking Change**: No

## Use Case

User opens little-loops with the goal "make our docs sweep automatic" and runs `/ll:scope-epic "Automatic docs sweep — detect drift, propose updates, verify links"`. Skill proposes EPIC-XXXX with 5 children (detection, proposal, verification, scheduling, reporting). User accepts. 6 issue files exist 30 seconds later, all wired. Today this would take 5+ manual `/ll:capture-issue` invocations and a separate EPIC creation step.

## Acceptance Criteria

- [ ] `/ll:scope-epic "<theme>"` proposes an EPIC + 3–8 children.
- [ ] User can edit/remove/retype proposed children before commit.
- [ ] On commit, EPIC file is written first with full `relates_to:` and `## Children` populated.
- [ ] Each child is written with `parent: EPIC-NNN` frontmatter.
- [ ] All files staged for git.
- [ ] Cancellation at the confirm step writes nothing.
- [ ] Theme that produces fewer than `min_children` proposals emits a warning ("this might be a single-issue task, consider `/ll:capture-issue`").
- [ ] Theme that produces more than `max_children` proposals suggests sub-EPIC decomposition.

## API/Interface

```bash
/ll:scope-epic "<theme description>"
/ll:scope-epic --from-doc thoughts/goals/feature-x.md
/ll:scope-epic "<theme>" --priority P2          # override default EPIC priority
```

No Python API.

## Related Key Documentation

_No documents linked. Run `/ll:normalize-issues` to discover and link relevant docs._

## Labels

`enhancement`, `epics`, `skill`, `decomposition`, `captured`

## Session Log
- `/ll:ready-issue` - 2026-06-01T21:46:03 - `9a66023e-f692-4d62-bacb-ee50c29a40b2.jsonl`
- `/ll:wire-issue` - 2026-06-01T23:30:00 - `540b3294-cbb3-4d48-9bcb-553455ab6996.jsonl`
- `/ll:refine-issue` - 2026-06-01T21:22:01 - `c0a7b6da-9f87-494e-bbbf-ba6d77bc6215.jsonl`
- `/ll:format-issue` - 2026-06-01T17:44:47 - `756a4b19-3f84-45ba-b4ff-aeb860ba5ecf.jsonl`
- `/ll:capture-issue` - 2026-06-01T17:35:32Z - `277dd3c5-ffef-46cb-bcc6-124409ce1225.jsonl`
- `/ll:confidence-check` - 2026-06-01T23:31:00Z - `4c5c971e-9282-4dbf-a93b-36e183431aca.jsonl`

---

## Status

**Open** | Created: 2026-06-01 | Priority: P3

Attribution

BrennonTWilliamsBrennonTWilliams
View sourceSee grades on GitHubMore from BrennonTWilliams →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Terse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".

1100021 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

698461 votes

Writing Skills

Create and manage Claude Code skills in HASH repository following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patterns, working with hooks, debugging skill activation, or implementing progressive disclosure. Covers skill structure, YAML frontmatter, trigger types (keywords, intent patterns), UserPromptSubmit hook, and the 500-line rule. Includes validation and debugging with SKILL_DEBUG. Examples include rust-error-stack, cargo-dep...

3931 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3421 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Amp, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Grok Build, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

741 votes
View all in ai-agents →