/linear-slice
SkillProductivityDecompose a plan into dependency-ordered Linear issues (tracer-bullet vertical slices) and release them into the autonomous dispatch pipeline.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the /linear-slice skill
What this skill tells your AI
The instructions your AI receives, as published by sliamh11/deus in .claude/skills/linear-slice/SKILL.md and read by ahel’s review.
Turn a plan or PRD into a set of thin, vertical, independently-shippable slices, each created as a Linear issue in dependency order, then released into Deus's autonomous dispatch pipeline.
This is the missing front-end to the Linear pipeline: the webhook gates (enrichment-gate →
bouncer-gate → dispatcher) describe how an issue flows through the board, but not how a good,
independently-grabbable issue gets created. This skill creates them.
Creating issues is a deliberate action with real side effects. Always preview and get explicit approval before creating anything.
How the pipeline works (the contract you must honor)
The board is Backlog → Todo → Ready for Agent → Agent Working → In Review → Done. Gates fire on
transitions into a state, never on issue creation:
- Backlog → Todo fires the enrichment gate, a mutating controller that writes the scope
block into the issue description itself (wrapped in
<!-- gate:enrichment-gate:start -->…<!-- gate:enrichment-gate:end -->). - Todo → Ready for Agent fires the bouncer gate, which validates that scope block.
- The dispatcher then picks up
Ready for Agentissues autonomously.
Consequences for this skill:
- Create issues in Backlog. A freshly created issue fires no gate, so it sits inert until moved.
- Never pre-write the enrichment scope block. It is gate-owned. Write a normal human
description; the enrichment gate generates the
## Scopeblock on the Backlog→Todo transition. - Never apply a
Scopedlabel. The dispatcher matchesScoped; applying it to a non-enriched issue would make the dispatcher pick up unscoped work. The gate manages that label. - Releasing = moving Backlog → Todo. That is how you start the pipeline on a slice.
Steps
1. Get the plan
Take the plan from one of, in priority order:
- An explicit argument (a file path, or pasted text).
- The current conversation (a plan just drafted/approved here).
- A parent Linear issue (
mcp__linear__linear_getIssueById) whose body is the plan to decompose.
If no plan is identifiable, ask the user for one. Do not invent scope.
2. Decompose into tracer-bullet vertical slices
Break the plan into the smallest set of vertical slices. Each slice must:
- Cut through every layer needed to be independently demoable (a thin end-to-end thread, not a horizontal layer like "all the types" or "the whole API").
- Deliver one tangible increment of value on its own.
- Put prefactoring first — if a slice needs a seam that doesn't exist yet, make the prefactor its own earlier slice.
Use codegraph before estimating blast-radius (a skill body inherits no exploration hook, so
this is on you): for each slice that touches existing code, run codegraph_impact /
codegraph_callers on the symbols it changes to size the real blast-radius and surface prefactor
opportunities. Do not guess from filenames. Fall back to search_code then grep only to confirm.
3. Build the dependency graph
Determine the Blocked by edges between slices (prefactors block the features that need them; a
shared scaffold blocks its consumers). Keep it a DAG. The unblocked (root) slices are the ones
that can start immediately.
4. Resolve Linear context
(If the plan came from a parent Linear issue in Step 1, you already used
mcp__linear__linear_getIssueById to read it.)
mcp__linear__linear_getTeams→ pick the team (single teamLIAin this workspace).mcp__linear__linear_getProjects→ confirm the target project with the user. Every issue must be assigned to a project — never leave an issue floating (orchestration rule).mcp__linear__linear_getWorkflowStates(withteamId) → resolve the Backlog and Todo state IDs. The call returns[{id, name, type, position, …}]. Match by exact.name("Backlog","Todo") — never by.type: there are twotype:"backlog"states ("Icebox" and "Backlog"), so a type match is ambiguous and can land issues in Icebox. Resolve IDs at runtime; never hardcode them.
5. Preview and get approval
Present, and then stop and wait for explicit approval:
- A slice table:
# | Title | One-line scope | Blocked by | Effort (trivial/small/medium/large). - The dependency graph (ASCII or mermaid).
- The target project, and which slices will be auto-released to Todo (the unblocked ones).
Do not create anything until the user approves. If they want changes, revise and re-preview.
6. Create the issues (on approval)
For each slice, mcp__linear__linear_createIssue:
-
teamId,projectId(mandatory),title=[Slice N] <concise name>. -
descriptionwritten with actual newlines, never\nescape sequences (MCP double-escapes them into literal\\n). Use these GENERAL sections (this is not a frontend skill — do not use design-to-dev's Wireframe/Design-Tokens/shadcn sections):## Overview What this slice delivers and why it is independently shippable. ## Acceptance criteria - Observable, checkable outcomes that mean this slice is done. ## Dependencies Blocked by: [Slice K] <name> (and the Linear relation below). "None" if a root slice. ## Definition of Done - Builds/tests pass; criteria met; reviewed. -
Land in Backlog (set
stateIdto the resolved Backlog id, or leave unset — Backlog is the default). Do not write the enrichment scope block. Do not add aScopedlabel. Omitpriorityandestimate— let the enrichment gate or the user set them; do not guess.
7. Link the dependencies
For each Blocked by edge, mcp__linear__linear_createIssueRelation (type blocks/blocked_by)
between the two created issue IDs, so the board reflects the DAG.
8. Release the unblocked slices
For each root (unblocked) slice, mcp__linear__linear_updateIssue to set stateId → the
resolved Todo id. This fires the enrichment gate and starts the autonomous pipeline. Leave
blocked slices in Backlog. Do not auto-release subsequent waves: tell the user which slices are
now blocked and on what, and let them re-approve (or manually release) each later wave. A blocked
slice advancing without fresh approval would push unreviewed work into the pipeline.
9. Cap handling — never silent-partial
If mcp__linear__linear_createIssue fails with exceeded the free issue limit (Linear free-plan
cap), STOP immediately. Report exactly which slices were created (with IDs) and which were not,
and which relations/releases did or didn't happen. Offer to archive old issues and resume, or to
resume later. Never leave a half-created graph unreported.
A gate or API failure is an error, not an approval — never proceed as if a failed step succeeded.
10. Summary
Report: created issue IDs + URLs, the dependency graph, and which slices were released to Todo (now in the pipeline) vs left in Backlog.
Notes
- Preview-first is mandatory; this skill mutates a shared system of record.
- A change to a slice's scope after creation must move that issue back per the orchestration rules (scope change → back to the relevant step so the gate re-evaluates).
- Companion to
/design-to-dev(which creates issues from design wireframes); this is the general-plan analog.
Signals
- GitHub stars
- 51
- Forks
- 4
- Last commit
- Sep 2026
ahel review
S4info
community integration — published by sliamh11, not linear
Automated review, not a security audit. Ruleset v1.
Advanced
- Catalog kind
- skill
- Gateway key
linear-slice- Source
- github.com/sliamh11/deus