{"id":"6362e802-fac7-4fb2-9f46-4e9bb3a712d9","shortId":"DHNyzC","kind":"skill","title":"expand-shell","tagline":"Expand a shell into a full implementation plan. Verifies Consumes against the current codebase, runs a fresh pattern survey, escalates open questions, and fills in concrete file references and verification. Use when the user asks to \"expand a shell\", \"expand shell\", \"fill in the ","description":"# Expand Shell\n\nExpand a shell into a full implementation plan. The shell's Context, Produces, Consumes, Covers, and high-level Implementation Steps are authoritative. Expansion adds a pattern survey, concrete references, and verification, writes the plan to `.turbo/plans/<shell-slug>.md`, and deletes the source shell once the plan is in place.\n\n## Task Tracking\n\nUse `TaskCreate` to create a task for each step:\n\n1. Load the shell and verify consumes\n2. Run `/survey-patterns` skill (shell-focused)\n3. Escalate the shell's open questions\n4. Write the plan\n5. Verify the plan against the shell\n6. Delete the shell\n\n## Step 1: Load the Shell and Verify Consumes\n\nDetermine which shell to expand:\n\n1. **Explicit path** — If a file path was passed, use it\n2. **Single candidate** — Glob `.turbo/shells/*.md` and filter to shells whose `depends_on` are all satisfied (see satisfaction check below). If exactly one match, use it\n3. **Multiple candidates** — If multiple matches, use `AskUserQuestion` to let the user choose\n4. **Nothing found** — If no shells exist in `.turbo/shells/`, say so and stop\n\nA `depends_on` entry is satisfied when `.turbo/plans/<dep-slug>.md` exists with `status: done` in its frontmatter.\n\nRead the shell file. Parse the YAML frontmatter:\n\n- **spec** (source spec path)\n- **depends_on** (list of shell slugs that must already be implemented)\n\nParse these body fields:\n\n- **Title** (from the `# Plan:` heading)\n- **Context** (the why)\n- **Produces** (artifacts this shell creates)\n- **Consumes** (dependencies this shell requires)\n- **Covers Spec Requirements** (the spec sections this shell implements)\n- **Implementation Steps (High-Level)** (named tasks without file paths)\n- **Open Questions** (decisions deferred to now)\n\nCompute the shell slug from the filename (basename without `.md`). The expanded plan will be written to `.turbo/plans/<shell-slug>.md`.\n\n**Verify Consumes are present in the current codebase.** For each Consumes entry:\n\n- If marked \"from existing codebase,\" grep or read relevant files to confirm the artifact still exists at the expected conceptual location\n- If the entry references a prior shell's Produces, verify that the corresponding plan at `.turbo/plans/<prior-slug>.md` has `status: done` AND that the artifact is actually present in the current codebase (the prior implementation may have diverged)\n\nIf any Consumes entry fails verification, escalate via `AskUserQuestion`:\n\n- **Adapt the shell** — open the shell for editing, adjust the shell's Consumes/Implementation Steps to match what actually exists, then re-verify\n- **Skip this shell** — leave the shell in place and stop. Tell the user to run `/pick-next-shell` again or resolve the prior work.\n- **Stop and investigate** — halt without edits so the user can debug\n\nDo not proceed to Step 2 until all Consumes verify cleanly.\n\n## Step 2: Run `/survey-patterns` Skill (Shell-Focused)\n\nRun the `/survey-patterns` skill with a task description built from the shell's structural content:\n\n```\n<shell title>\n\nContext: <shell Context>\nProduces: <shell Produces, as a bulleted list>\nImplementation steps: <shell Implementation Steps, numbered>\n```\n\nThis scopes the survey to the shell's concern area instead of a generic sweep. Keep the returned findings in conversation context for use in Step 4.\n\n## Step 3: Escalate the Shell's Open Questions\n\nFor each entry in the shell's `Open Questions` field, present it via `AskUserQuestion` and collect the answer. Frame each question with enough context from the shell for the user to decide.\n\nDo **not** escalate other questions. If you identify a new question while reading the codebase, note it as a risk in the drafted plan's Verification or Context Files sections.\n\nIf the shell's Open Questions field is empty or contains \"None,\" skip this step entirely and proceed to Step 4.\n\n## Step 4: Write the Plan\n\nExpand the shell into a full plan using:\n\n1. The shell's Context as the plan's Context (preserve verbatim or lightly edit)\n2. The shell's high-level Implementation Steps as the skeleton, concretizing each with `file_path:line_number` references, named functions, and specific symbols from the pattern survey\n3. A Pattern Survey section with the Step 2 findings\n4. A Verification section with specific test commands and expected observable results for this shell's work\n5. A Context Files section listing the files an implementer needs to read in full\n\nCreate `.turbo/plans/` if it does not exist. Write the plan to `.turbo/plans/<shell-slug>.md` using this structure:\n\n````markdown\n---\nstatus: draft\nspec: <spec path from original shell frontmatter>\n---\n\n# Plan: <Task Title>\n\n## Context\n\n<Shell Context, preserved verbatim or lightly edited.>\n\n## Pattern Survey\n\n<Insert the structured findings from `/survey-patterns`: Analogous Features, Reusable Utilities, Convention Anchors, Proposed Alignment. Use the same format the survey returned.>\n\n## Implementation Steps\n\n1. **<Step 1 title>**\n   - <Concrete action with `file_path:line_number` references>\n2. **<Step 2 title>**\n   - ...\n3. ...\n\n## Verification\n\n- <Specific test command, manual smoke check, or MCP tool invocation>\n- <Expected observable result>\n- <Edge cases to spot-check>\n\n## Context Files\n\n- `<path/to/file1>` — <why it matters>\n- `<path/to/file2>` — <why it matters>\n````\n\nThe plan carries `spec` forward as provenance. `depends_on` and the structural contract (Produces, Consumes, Covers) are locked in at expansion and do not need to persist on the plan.\n\nState the plan path before proceeding.\n\n### Content Rules for the Plan\n\n- **Implementation Steps**: Use concrete `file_path:line_number` references. Reference existing functions and utilities from the Pattern Survey instead of reinventing them. Each step describes a discrete unit of work that can be tracked independently during execution.\n- **Verification**: Describe how to know the change actually works. Prefer specific test commands, named test files, or named smoke checks over vague phrases like \"run the tests.\" If the change has no observable behavior, say so explicitly.\n- **Context Files**: Curate the minimum set needed to become productive. Do not dump every file touched — only the ones that anchor understanding.\n- **Scope**: Plan content describes what to build. Do not include task tracking, skill loading, test commands, or commit instructions — those are execution-wrapper concerns.\n\n## Step 5: Verify the Plan Against the Shell\n\nRe-read the shell at `.turbo/shells/<shell-slug>.md` and the drafted plan at `.turbo/plans/<shell-slug>.md`. Confirm the plan honors the shell's structural contract by checking each item below:\n\n- **Produces** — Every artifact listed in the shell's Produces is created by at least one Implementation Step in the plan.\n- **Consumes** — Every dependency listed in the shell's Consumes is referenced in the Implementation Steps, Context Files, or Pattern Survey.\n- **Covers** — Every spec requirement listed in the shell's Covers is addressed by the Implementation Steps.\n- **Context fidelity** — The plan's Context preserves the intent of the shell's Context (verbatim or lightly edited, not reinterpreted).\n- **Scope** — The plan does not add artifacts or responsibilities beyond the shell's Produces. Scope creep belongs in a new shell, not this plan.\n\nIf every item passes, proceed to Step 6. If any item fails, revise the plan to close the gap and re-verify before proceeding. Do not delete the shell while any check is failing.\n\n## Step 6: Delete the Shell\n\nDelete the source shell at `.turbo/shells/<shell-slug>.md`. The plan is now the authoritative artifact for this work.\n\nThen use the TaskList tool and proceed to any remaining task.\n\n## Rules\n\n- Never proceed past Step 1 if Consumes verification fails.\n- The shell's structural contract (Produces, Consumes, Covers) is authoritative. If the pattern survey reveals conflicts, note them in the plan's Context or Verification sections rather than altering the contract.\n- The plan file is the only output. Do not write code, scaffolding, or other project files.\n- Delete the source shell only after the plan file has been written successfully and Step 5 verification has passed. Never delete before.\n- Do not run `/review-plan` or any review skills here.\n- Do not embed task tracking, skill loading, or `/finalize` invocation in the plan file.","tags":["expand","shell","turbo","tobihagemann","agent-skills","claude-code","claude-skills","developer-tools","skills"],"capabilities":["skill","source-tobihagemann","skill-expand-shell","topic-agent-skills","topic-claude-code","topic-claude-skills","topic-developer-tools","topic-skills"],"categories":["turbo"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/tobihagemann/turbo/expand-shell","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add tobihagemann/turbo","source_repo":"https://github.com/tobihagemann/turbo","install_from":"skills.sh"}},"qualityScore":"0.590","qualityRationale":"deterministic score 0.59 from registry signals: · indexed on github topic:agent-skills · 280 github stars · SKILL.md body (8,349 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:54:09.312Z","embedding":null,"createdAt":"2026-04-18T22:03:42.916Z","updatedAt":"2026-04-22T00:54:09.312Z","lastSeenAt":"2026-04-22T00:54:09.312Z","tsv":"'/finalize':1270 '/pick-next-shell':444 '/review-plan':1256 '/survey-patterns':119,476,483,763 '1':110,147,159,641,781,1179 '2':117,170,467,474,656,693,790 '3':124,196,538,685,791 '4':131,209,536,627,629,695 '5':135,712,970,1246 '6':142,1113,1142 'action':783 'actual':385,423,892 'adapt':406 'add':74,1087 'address':1057 'adjust':414 'align':771 'alreadi':258 'alter':1212 'analog':764 'anchor':769,942 'answer':562 'area':519 'artifact':274,352,383,1008,1088,1159 'ask':38 'askuserquest':203,405,558 'authorit':72,1158,1193 'basenam':315 'becom':930 'behavior':918 'belong':1098 'beyond':1091 'bodi':263 'build':950 'built':489 'bullet':502 'candid':172,198 'carri':809 'chang':891,914 'check':188,798,904,1002,1138 'choos':208 'clean':472 'close':1122 'code':1225 'codebas':17,334,343,390,591 'collect':560 'command':702,795,897,959 'commit':961 'comput':308 'conceptu':358 'concern':518,968 'concret':29,78,668,782,851 'confirm':350,992 'conflict':1199 'consum':13,63,116,153,278,328,337,399,470,821,1026,1034,1181,1190 'consumes/implementation':418 'contain':617 'content':495,843,946 'context':61,270,496,531,568,604,645,650,714,748,750,803,922,1041,1062,1067,1075,1206 'contract':819,1000,1188,1214 'convent':768 'convers':530 'correspond':372 'cover':64,283,822,1046,1055,1191 'creat':104,277,727,1016 'creep':1097 'curat':924 'current':16,333,389 'debug':461 'decid':576 'decis':304 'defer':305 'delet':89,143,1133,1143,1146,1231,1251 'depend':181,223,250,279,814,1028 'describ':872,886,947 'descript':488 'determin':154 'discret':874 'diverg':396 'done':234,379 'draft':599,745,987 'dump':934 'edit':413,456,655,755,1079 'emb':1264 'empti':615 'enough':567 'entir':622 'entri':225,338,362,400,547 'escal':23,125,403,539,579 'everi':935,1007,1027,1047,1107 'exact':191 'execut':884,966 'execution-wrapp':965 'exist':215,231,342,354,424,733,858 'expand':2,4,40,43,48,50,158,319,633 'expand-shel':1 'expans':73,827 'expect':357,704 'explicit':160,921 'fail':401,1117,1140,1183 'featur':765 'fidel':1063 'field':264,554,613 'file':30,164,241,300,348,605,671,715,719,785,804,852,900,923,936,1042,1217,1230,1239,1275 'filenam':314 'fill':27,45 'filter':177 'find':528,694,761 'focus':123,480 'format':775 'forward':811 'found':211 'frame':563 'fresh':20 'frontmatt':237,245 'full':9,55,638,726 'function':677,859 'gap':1124 'generic':523 'glob':173 'grep':344 'halt':454 'head':269 'high':67,295,661 'high-level':66,294,660 'honor':995 'identifi':584 'implement':10,56,69,260,291,292,393,504,507,663,721,779,848,1021,1039,1060 'includ':953 'independ':882 'insert':758 'instead':520,866 'instruct':962 'intent':1070 'investig':453 'invoc':802,1271 'item':1004,1108,1116 'keep':525 'know':889 'least':1019 'leav':432 'let':205 'level':68,296,662 'light':654,754,1078 'like':908 'line':673,787,854 'list':252,503,717,1009,1029,1050 'load':111,148,957,1268 'locat':359 'lock':824 'manual':796 'mark':340 'markdown':743 'match':193,201,421 'may':394 'mcp':800 'md':87,175,230,317,326,376,739,984,991,1152 'minimum':926 'multipl':197,200 'must':257 'name':297,676,898,902 'need':722,831,928 'never':1175,1250 'new':586,1101 'none':618 'note':592,1200 'noth':210 'number':509,674,788,855 'observ':705,917 'one':192,940,1020 'open':24,129,302,409,543,552,611 'output':1221 'pars':242,261 'pass':167,1109,1249 'past':1177 'path':161,165,249,301,672,786,840,853 'path/to/file1':805 'path/to/file2':806 'pattern':21,76,683,687,756,864,1044,1196 'persist':833 'phrase':907 'place':98,436 'plan':11,57,84,95,134,138,268,320,373,600,632,639,648,736,747,808,836,839,847,945,973,988,994,1025,1065,1084,1105,1120,1154,1204,1216,1238,1274 'prefer':894 'present':330,386,555 'preserv':651,751,1068 'prior':365,392,449 'proceed':464,624,842,1110,1130,1169,1176 'produc':62,273,368,497,499,820,1006,1014,1095,1189 'product':931 'project':1229 'propos':770 'proven':813 'question':25,130,303,544,553,565,581,587,612 'rather':1210 're':427,978,1127 're-read':977 're-verifi':426,1126 'read':238,346,589,724,979 'refer':31,79,363,675,789,856,857 'referenc':1036 'reinterpret':1081 'reinvent':868 'relev':347 'remain':1172 'requir':282,285,1049 'resolv':447 'respons':1090 'result':706 'return':527,778 'reusabl':766 'reveal':1198 'review':1259 'revis':1118 'risk':596 'rule':844,1174 'run':18,118,443,475,481,909,1255 'satisfact':187 'satisfi':185,227 'say':218,919 'scaffold':1226 'scope':511,944,1082,1096 'section':288,606,689,698,716,1209 'see':186 'set':927 'shell':3,6,42,44,49,52,59,92,113,122,127,141,145,150,156,179,214,240,254,276,281,290,310,366,408,411,416,431,434,479,492,498,506,516,541,550,571,609,635,643,658,709,749,976,981,997,1012,1032,1053,1073,1093,1102,1135,1145,1149,1185,1234 'shell-focus':121,478 'singl':171 'skeleton':667 'skill':120,477,484,956,1260,1267 'skill-expand-shell' 'skip':429,619 'slug':255,311 'smoke':797,903 'sourc':91,247,1148,1233 'source-tobihagemann' 'spec':246,248,284,287,746,810,1048 'specif':679,700,793,895 'state':837 'status':233,378,744 'step':70,109,146,293,419,466,473,505,508,535,537,621,626,628,664,692,780,849,871,969,1022,1040,1061,1112,1141,1178,1245 'still':353 'stop':221,438,451 'structur':494,742,760,818,999,1187 'success':1243 'survey':22,77,513,684,688,757,777,865,1045,1197 'sweep':524 'symbol':680 'task':99,106,298,487,954,1173,1265 'taskcreat':102 'tasklist':1166 'tell':439 'test':701,794,896,899,911,958 'titl':265 'tool':801,1167 'topic-agent-skills' 'topic-claude-code' 'topic-claude-skills' 'topic-developer-tools' 'topic-skills' 'touch':937 'track':100,881,955,1266 'turbo/plans':86,229,325,375,728,738,990 'turbo/shells':174,217,983,1151 'understand':943 'unit':875 'use':34,101,168,194,202,533,640,740,772,850,1164 'user':37,207,441,459,574 'util':767,861 'vagu':906 'verbatim':652,752,1076 'verif':33,81,402,602,697,792,885,1182,1208,1247 'verifi':12,115,136,152,327,369,428,471,971,1128 'via':404,557 'whose':180 'without':299,316,455 'work':450,711,877,893,1162 'wrapper':967 'write':82,132,630,734,1224 'written':323,1242 'yaml':244","prices":[{"id":"b90a1386-941f-47ca-9fc5-f9d45d31f72b","listingId":"6362e802-fac7-4fb2-9f46-4e9bb3a712d9","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"tobihagemann","category":"turbo","install_from":"skills.sh"},"createdAt":"2026-04-18T22:03:42.916Z"}],"sources":[{"listingId":"6362e802-fac7-4fb2-9f46-4e9bb3a712d9","source":"github","sourceId":"tobihagemann/turbo/expand-shell","sourceUrl":"https://github.com/tobihagemann/turbo/tree/main/skills/expand-shell","isPrimary":false,"firstSeenAt":"2026-04-18T22:03:42.916Z","lastSeenAt":"2026-04-22T00:54:09.312Z"}],"details":{"listingId":"6362e802-fac7-4fb2-9f46-4e9bb3a712d9","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"tobihagemann","slug":"expand-shell","github":{"repo":"tobihagemann/turbo","stars":280,"topics":["agent-skills","claude-code","claude-skills","developer-tools","skills"],"license":"mit","html_url":"https://github.com/tobihagemann/turbo","pushed_at":"2026-04-21T12:22:12Z","description":"A composable dev process for Claude Code, packaged as modular skills.","skill_md_sha":"63aa4e7a77234df6b607ec12720aaa897288c5ad","skill_md_path":"skills/expand-shell/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/tobihagemann/turbo/tree/main/skills/expand-shell"},"layout":"multi","source":"github","category":"turbo","frontmatter":{"name":"expand-shell","description":"Expand a shell into a full implementation plan. Verifies Consumes against the current codebase, runs a fresh pattern survey, escalates open questions, and fills in concrete file references and verification. Use when the user asks to \"expand a shell\", \"expand shell\", \"fill in the shell\", \"expand the shell\", or \"concretize the shell\"."},"skills_sh_url":"https://skills.sh/tobihagemann/turbo/expand-shell"},"updatedAt":"2026-04-22T00:54:09.312Z"}}