{"id":"bf485320-7ced-4212-96ce-c6715518053e","shortId":"m9xCvw","kind":"skill","title":"ql-spec","tagline":"Part of the quantum-loop autonomous development pipeline (brainstorm \\u2192 spec \\u2192 plan \\u2192 execute \\u2192 review \\u2192 verify). Generate a structured Product Requirements Document (PRD) with user stories, acceptance criteria, and functional requirements. Use when you ha","description":"# Quantum-Loop: Spec\n\nYou are generating a formal Product Requirements Document (PRD). This document will be consumed by `/quantum-loop:plan` to produce machine-readable tasks for autonomous execution. Write for junior developers or AI agents -- be explicit, unambiguous, and verifiable.\n\n## Phase 0: Phase-skip check (Phase 18 / P2.4)\n\nBefore asking any clarifying question, check whether a prior `/ql-spec` run already converted the same design + brainstorm handoff into a PRD:\n\n```bash\nDESIGN=$(ls docs/plans/*-design.md 2>/dev/null | tail -1)\nBS_HANDOFF=\".handoffs/brainstorm.md\"\nARGS=()\n[[ -n \"$DESIGN\" ]]         && ARGS+=(\"$DESIGN\")\n[[ -f \"$BS_HANDOFF\" ]]     && ARGS+=(\"$BS_HANDOFF\")\n\nif bash lib/phase-skip.sh skip spec . \"${ARGS[@]}\"; then\n  echo \"[SKIP] spec is up-to-date — design + brainstorm handoff unchanged.\"\n  bash lib/handoff.sh read spec | jq '.'\n  exit 0\nfi\n```\n\nAfter saving the PRD and writing `.handoffs/spec.md`, record the fingerprint so the next identical invocation can skip:\n\n```bash\nPRD=$(ls -t tasks/prd-*.md | head -1)\nDESIGN_H=$(bash lib/phase-skip.sh hash \"$DESIGN\")\nBS_H=$(bash lib/phase-skip.sh hash \"$BS_HANDOFF\")\nFP=$(jq -cn --arg dp \"$DESIGN\" --arg dh \"$DESIGN_H\" --arg bp \"$BS_HANDOFF\" --arg bh \"$BS_H\" \\\n  '{artifacts: [{path: $dp, sha256: $dh}, {path: $bp, sha256: $bh}]}')\nbash lib/phase-skip.sh record spec \"$FP\" . >/dev/null\n```\n\n## Prerequisite: read prior-stage handoffs (Phase 15 / P2.3)\n\nBefore doing anything else, ingest every prior-stage handoff so decisions, rejected alternatives, and risks carry forward even across context compaction:\n\n```bash\nbash lib/handoff.sh all | jq '.'\nbash lib/handoff.sh read brainstorm | jq '.'\n```\n\nTreat `brainstorm.decided` as binding (already agreed — do not re-litigate), `brainstorm.rejected` as closed alternatives (do not re-propose them), `brainstorm.remaining` as the exact backlog your PRD MUST resolve, and `brainstorm.risks` as mandatory §Risks entries in the PRD.\n\n## Step 1: Gather Context\n\n1. Check for an approved design document in `docs/plans/`. If one exists, load it as primary context.\n2. Check for existing quantum.json to understand any in-progress features.\n3. Read project files (package.json, README, existing code structure) to understand the tech stack.\n4. Re-read `.handoffs/brainstorm.md`'s `remaining` list — it IS the starting backlog of clarifying questions.\n\n## Step 2: Ask Clarifying Questions\n\nAsk 5-8 clarifying questions. Format each with LETTERED OPTIONS so the user can respond with shorthand like \"1A, 2C, 3B, 4D, 5A\".\n\nFocus questions on areas where the design doc (if any) is ambiguous or incomplete:\n\n- **Problem/Goal:** What specific problem does this solve?\n- **Core Functionality:** What are the key user actions?\n- **Scope Boundaries:** What should it explicitly NOT do?\n- **Success Criteria:** How do we know it's done?\n- **Technical Constraints:** What must it integrate with?\n- **Data Requirements:** What data needs to be stored, fetched, or transformed?\n- **Error Scenarios:** What happens when things go wrong?\n- **Priority:** What is the MVP vs. nice-to-have?\n\n### Question Format\n\n```\n1. What is the primary goal of this feature?\n   A. Improve user onboarding experience\n   B. Increase task completion rate\n   C. Reduce support tickets for X\n   D. Other: [please specify]\n\n2. How should priority levels be structured?\n   A. Three levels (High / Medium / Low)\n   B. Four levels (Critical / High / Medium / Low)\n   C. Numeric (1-5 scale)\n   D. Custom labels defined by user\n```\n\n### Question Rules\n- Minimum 5 questions, maximum 8\n- Every question MUST have lettered options (A, B, C, D)\n- At least one question must probe NON-GOALS (what it should NOT do)\n- At least one question must probe ERROR SCENARIOS\n- Do NOT ask implementation questions (framework choice, library selection)\n- If a design doc exists, do NOT re-ask questions already answered there\n\n## Step 3: Generate the PRD\n\nBased on the user's answers, generate a PRD with ALL 9 sections below. No section may be omitted.\n\n### Section 1: Introduction/Overview\nBrief description (2-3 sentences) of the feature and the problem it solves.\n\n### Section 2: Goals\nSpecific, measurable objectives as a bullet list. Each goal should be verifiable.\n\n### Section 3: User Stories\n\nFormat:\n```markdown\n### US-001: [Title]\n**Description:** As a [user], I want [feature] so that [benefit].\n\n**Acceptance Criteria:**\n- [ ] Specific verifiable criterion 1\n- [ ] Specific verifiable criterion 2\n- [ ] Typecheck/lint passes\n- [ ] [UI stories only] Verify in browser\n```\n\n#### Story Sizing Rules\nEach story must be completable in ONE context window (one AI agent session). Rules of thumb:\n- If you cannot describe the change in 2-3 sentences, it's too big. Split it.\n- One story = one database change, OR one API endpoint, OR one UI component. Not all three.\n\n#### Right-sized stories (GOOD):\n- Add a database column and migration\n- Add a single API endpoint with validation\n- Create one UI component\n- Add filter logic to an existing query\n- Write integration test for an endpoint\n\n#### Too-large stories (BAD):\n- \"Build the entire priority system\" (multiple stories)\n- \"Add priority to tasks with UI and API\" (spans all layers)\n- \"Implement filtering, sorting, and searching\" (three features)\n\n### Section 4: Functional Requirements\nNumbered list with unambiguous requirements:\n```\nFR-1: The system shall store task priority as an enum ('high' | 'medium' | 'low').\nFR-2: The system shall default new tasks to 'medium' priority.\nFR-3: The API shall accept an optional 'priority' query parameter on GET /tasks.\n```\n\n### Section 5: Non-Goals (Out of Scope)\nExplicit list of what this feature will NOT include. This section is mandatory and must have at least 3 items.\n\n### Section 6: Design Considerations (Optional)\nUI/UX requirements, mockup references, existing component reuse.\n\n### Section 7: Technical Considerations (Optional)\nConstraints, dependencies, integration points, performance requirements.\n\n### Section 8: Success Metrics\nMeasurable outcomes (e.g., \"Reduce time to find high-priority tasks by 50%\").\n\n### Section 9: Open Questions\nRemaining areas needing clarification. If none, state \"None at this time.\"\n\n## Step 4: Save the PRD\n\nSave to: `tasks/prd-<feature-name>.md` (kebab-case filename).\n\nInform the user:\n> \"PRD saved to `tasks/prd-<feature-name>.md`. When you're ready to create the execution plan, run `/quantum-loop:plan`.\"\n\nDo NOT start implementing. Do NOT create quantum.json. That is `/quantum-loop:plan`'s job.\n\n## Acceptance Criteria Quality Standards\n\n### GOOD acceptance criteria (verifiable):\n- \"Add `status` column to tasks table with default 'pending'\"\n- \"Filter dropdown has options: All, Active, Completed\"\n- \"Clicking delete shows confirmation dialog before deleting\"\n- \"API returns 400 with message 'Invalid priority' for unknown values\"\n- \"Page loads in under 2 seconds with 1000 tasks\"\n\n### BAD acceptance criteria (vague -- FORBIDDEN):\n- \"Works correctly\"\n- \"User can do X easily\"\n- \"Good UX\"\n- \"Handles edge cases\"\n- \"Performs well\"\n- \"Is secure\"\n- \"Looks nice\"\n\nEvery criterion must answer: \"How would a machine verify this?\"\n\n## Anti-Rationalization Guards\n\n| Excuse | Reality |\n|--------|---------|\n| \"Fewer than 5 questions is enough\" | Shallow questions produce ambiguous specs. Ask at least 5. |\n| \"This story is slightly too big but it's fine\" | Too-big stories fail during autonomous execution. Split ruthlessly. |\n| \"The acceptance criteria are obvious\" | Obvious to you is ambiguous to an AI agent. Be explicit. |\n| \"Non-goals aren't needed for this feature\" | Unbounded scope is the root of scope creep. Always define boundaries. |\n| \"I'll skip the design considerations section\" | All 9 sections are mandatory. Mark optional sections as \"N/A\" if truly not applicable. |\n| \"These criteria are verifiable enough\" | If a machine can't test it, it's not verifiable. Rewrite. |\n\n## Pre-Save Checklist\n\nBefore saving the PRD, verify:\n- [ ] Asked at least 5 clarifying questions with lettered options\n- [ ] Incorporated user's answers into the PRD\n- [ ] Every user story fits in one context window\n- [ ] Every acceptance criterion is machine-verifiable\n- [ ] Every story includes \"Typecheck/lint passes\" criterion\n- [ ] UI stories include \"Verify in browser\" criterion\n- [ ] Functional requirements are numbered (FR-N) and unambiguous\n- [ ] Non-goals section has at least 3 items\n- [ ] Stories follow dependency order (data → backend → UI)\n- [ ] Saved to `tasks/prd-<feature-name>.md`\n\n### Lifecycle Checklist (mandatory for user-facing features)\n\nFor each item below, either address it in the PRD or mark it \"N/A\" with a justification. **Silent skipping is forbidden** — every item must have an explicit resolution.\n\n- [ ] **First-run behavior:** What happens the first time a user encounters this feature? (empty states, onboarding, defaults)\n- [ ] **Returning-user behavior:** What changes when the user comes back? (persisted state, updated data, version differences)\n- [ ] **Update behavior:** What happens when the feature is updated after initial deployment? (migrations, backward compatibility, data transformations)\n- [ ] **Error recovery:** What happens when things go wrong? (network failures, invalid data, partial state, retry logic)\n- [ ] **No-data/empty state:** What does the user see when there is no data to display? (empty lists, missing config, uninitialized state)\n- [ ] **Uninstall/disable:** What happens when the feature is removed or disabled? (cleanup, orphaned data, dependent features)\n\n## Exit: write stage handoff (Phase 15 / P2.3)\n\nBefore returning control, persist a stage handoff at `.handoffs/spec.md` so `/ql-plan`, `/ql-execute`, and downstream reviewers can read your decisions even across session compaction:\n\n```bash\nbash lib/handoff.sh write spec \"$(cat <<'JSON'\n{\n  \"decided\":   [\"<each AC that converges a prior brainstorm.remaining item>\", \"<scope-boundary picks>\"],\n  \"rejected\":  [\"<any alternative framing of an AC you considered and dropped, with reason>\"],\n  \"risks\":     [\"<each §Risks entry of the PRD>\"],\n  \"files\":     [\"tasks/prd-<feature>.md\"],\n  \"remaining\": [\"<any question you could not resolve — flag for /ql-plan>\"],\n  \"notes\":     \"<free-form: how this PRD re-grounds against userIntent, any re-negotiation logged>\"\n}\nJSON\n)\"\n```\n\nThe `decided` array MUST NOT contradict `brainstorm.decided`; any re-negotiation MUST also land as a new `quantum.json.userClarifications[]` entry so `/ql-intent-check` sees it as explicit.","tags":["spec","quantum","loop","andyzengmath","agent-skills","agentskills","claude-code","claude-code-plugin","claude-code-skill","skillsmp"],"capabilities":["skill","source-andyzengmath","skill-ql-spec","topic-agent-skills","topic-agentskills","topic-claude-code","topic-claude-code-plugin","topic-claude-code-skill","topic-skillsmp"],"categories":["quantum-loop"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/andyzengmath/quantum-loop/ql-spec","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add andyzengmath/quantum-loop","source_repo":"https://github.com/andyzengmath/quantum-loop","install_from":"skills.sh"}},"qualityScore":"0.461","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 22 github stars · SKILL.md body (10,512 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-24T07:02:01.764Z","embedding":null,"createdAt":"2026-04-18T23:04:47.882Z","updatedAt":"2026-04-24T07:02:01.764Z","lastSeenAt":"2026-04-24T07:02:01.764Z","tsv":"'-001':675 '-1':123,189,831 '-2':845 '-3':643,732,856 '-5':543 '-8':386 '/dev/null':121,235 '/empty':1386 '/ql-execute':1439 '/ql-intent-check':1530 '/ql-plan':1438,1491 '/ql-spec':103 '/quantum-loop':62,983,995 '/tasks':868 '0':86,163 '1':317,320,491,542,638,692 '1000':1047 '15':243,1426 '18':92 '1a':402 '2':120,337,380,520,642,654,696,731,1044 '2c':403 '3':349,614,669,895,1266 '3b':404 '4':363,822,953 '400':1032 '4d':405 '5':385,554,870,1090,1102,1209 '50':936 '5a':406 '6':898 '7':910 '8':557,921 '9':629,938,1167 'ac':1465 'accept':34,687,860,999,1004,1050,1124,1231 'across':264,1448 'action':435 'activ':1021 'add':761,767,778,803,1007 'address':1292 'agent':79,719,1136 'agre':282 'ai':78,718,1135 'alreadi':105,281,610 'also':1522 'altern':258,291,1461 'alway':1156 'ambigu':418,1097,1132 'answer':611,623,1075,1218 'anti':1083 'anti-ration':1082 'anyth':247 'api':747,770,810,858,1030 'applic':1179 'approv':324 'area':410,942 'aren':1142 'arg':127,130,135,143,206,209,213,217 'array':1512 'artifact':221 'ask':95,381,384,592,608,1099,1206 'autonom':10,71,1119 'b':505,533,565 'back':1343 'backend':1273 'backlog':302,375 'backward':1363 'bad':795,1049 'base':618 'bash':115,139,157,182,192,198,230,267,268,272,1451,1452 'behavior':1318,1336,1351 'benefit':686 'bh':218,229 'big':737,1108,1115 'bind':280 'boundari':437,1158 'bp':214,227 'brainstorm':13,110,154,275 'brainstorm.decided':278,1516 'brainstorm.rejected':288 'brainstorm.remaining':298 'brainstorm.risks':308 'brief':640 'browser':704,1248 'bs':124,133,136,196,201,215,219 'build':796 'bullet':661 'c':510,540,566 'cannot':726 'carri':261 'case':963,1065 'cat':1456 'chang':729,744,1338 'check':90,99,321,338 'checklist':1200,1280 'choic':596 'clarif':944 'clarifi':97,377,382,387,1210 'cleanup':1416 'click':1023 'close':290 'cn':205 'code':356 'column':764,1009 'come':1342 'compact':266,1450 'compat':1364 'complet':508,712,1022 'compon':752,777,907 'config':1403 'confirm':1026 'consid':1467 'consider':900,912,1164 'constraint':454,914 'consum':60 'context':265,319,336,715,1228 'contradict':1515 'control':1430 'convert':106 'core':428 'correct':1055 'could':1486 'creat':774,978,991 'creep':1155 'criteria':35,445,688,1000,1005,1051,1125,1181 'criterion':691,695,1073,1232,1242,1249 'critic':536 'custom':546 'd':516,545,567 'data':460,463,1272,1347,1365,1378,1385,1397,1418 'databas':743,763 'date':152 'decid':1458,1511 'decis':256,1446 'default':849,1014,1332 'defin':548,1157 'delet':1024,1029 'depend':915,1270,1419 'deploy':1361 'describ':727 'descript':641,677 'design':109,116,129,131,153,190,195,208,211,325,413,601,899,1163 'design.md':119 'develop':11,76 'dh':210,225 'dialog':1027 'differ':1349 'disabl':1415 'display':1399 'doc':414,602 'docs/plans':118,328 'document':29,54,57,326 'done':452 'downstream':1441 'dp':207,223 'drop':1469 'dropdown':1017 'e.g':926 'easili':1060 'echo':145 'edg':1064 'either':1291 'els':248 'empti':1329,1400 'encount':1326 'endpoint':748,771,790 'enough':1093,1184 'entir':798 'entri':312,1475,1528 'enum':840 'error':471,588,1367 'even':263,1447 'everi':250,558,1072,1222,1230,1237,1308 'exact':301 'excus':1086 'execut':19,72,980,1120 'exist':331,340,355,603,783,906 'exit':162,1421 'experi':504 'explicit':81,441,877,1138,1313,1534 'f':132 'face':1285 'fail':1117 'failur':1376 'featur':348,499,647,683,820,882,1147,1286,1328,1356,1411,1420 'fetch':468 'fewer':1088 'fi':164 'file':352,1479 'filenam':964 'filter':779,815,1016 'find':930 'fine':1112 'fingerprint':174 'first':1316,1322 'first-run':1315 'fit':1225 'flag':1489 'focus':407 'follow':1269 'forbidden':1053,1307 'form':1495 'formal':51 'format':389,490,672 'forward':262 'four':534 'fp':203,234 'fr':830,844,855,1255 'fr-n':1254 'frame':1462 'framework':595 'free':1494 'free-form':1493 'function':37,429,823,1250 'gather':318 'generat':24,49,615,624 'get':867 'go':477,1373 'goal':496,576,655,664,873,1141,1261 'good':760,1003,1061 'ground':1501 'guard':1085 'h':191,197,212,220 'ha':42 'handl':1063 'handoff':111,125,134,137,155,202,216,241,254,1424,1434 'handoffs/brainstorm.md':126,367 'handoffs/spec.md':171,1436 'happen':474,1320,1353,1370,1408 'hash':194,200 'head':188 'high':530,537,841,932 'high-prior':931 'ident':178 'implement':593,814,988 'improv':501 'in-progress':345 'includ':885,1239,1245 'incomplet':420 'incorpor':1215 'increas':506 'inform':965 'ingest':249 'initi':1360 'integr':458,786,916 'introduction/overview':639 'invalid':1035,1377 'invoc':179 'item':896,1267,1289,1309 'job':998 'jq':161,204,271,276 'json':1457,1509 'junior':75 'justif':1303 'kebab':962 'kebab-cas':961 'key':433 'know':449 'label':547 'land':1523 'larg':793 'layer':813 'least':569,583,894,1101,1208,1265 'letter':392,562,1213 'level':524,529,535 'lib/handoff.sh':158,269,273,1453 'lib/phase-skip.sh':140,193,199,231 'librari':597 'lifecycl':1279 'like':401 'list':370,662,826,878,1401 'litig':287 'll':1160 'load':332,1041 'log':1508 'logic':780,1382 'look':1070 'loop':9,45 'low':532,539,843 'ls':117,184 'machin':67,1079,1187,1235 'machine-read':66 'machine-verifi':1234 'mandatori':310,889,1170,1281 'mark':1171,1298 'markdown':673 'maximum':556 'may':634 'md':187,960,972,1278,1481 'measur':657,924 'medium':531,538,842,853 'messag':1034 'metric':923 'migrat':766,1362 'minimum':553 'miss':1402 'mockup':904 'multipl':801 'must':305,456,560,572,586,710,891,1074,1310,1513,1521 'mvp':483 'n':128,1256 'n/a':1175,1300 'need':464,943,1144 'negoti':1507,1520 'network':1375 'new':850,1526 'next':177 'nice':486,1071 'nice-to-hav':485 'no-data':1383 'non':575,872,1140,1260 'non-goal':574,871,1139,1259 'none':946,948 'note':1492 'number':825,1253 'numer':541 'object':658 'obvious':1127,1128 'omit':636 'onboard':503,1331 'one':330,570,584,714,717,740,742,746,750,775,1227 'open':939 'option':393,563,862,901,913,1019,1172,1214 'order':1271 'orphan':1417 'outcom':925 'p2.3':244,1427 'p2.4':93 'package.json':353 'page':1040 'paramet':865 'part':4 'partial':1379 'pass':698,1241 'path':222,226 'pend':1015 'perform':918,1066 'persist':1344,1431 'phase':85,88,91,242,1425 'phase-skip':87 'pipelin':12 'plan':17,63,981,984,996 'pleas':518 'point':917 'prd':30,55,114,168,183,304,315,617,626,956,968,1204,1221,1296,1478,1498 'pre':1198 'pre-sav':1197 'prerequisit':236 'primari':335,495 'prior':102,239,252 'prior-stag':238,251 'prioriti':479,523,799,804,837,854,863,933,1036 'probe':573,587 'problem':424,650 'problem/goal':421 'produc':65,1096 'product':27,52 'progress':347 'project':351 'propos':296 'ql':2 'ql-spec':1 'qualiti':1001 'quantum':8,44 'quantum-loop':7,43 'quantum.json':341,992 'quantum.json.userclarifications':1527 'queri':784,864 'question':98,378,383,388,408,489,551,555,559,571,585,594,609,940,1091,1095,1211,1484 'rate':509 'ration':1084 're':286,295,365,607,975,1500,1506,1519 're-ask':606 're-ground':1499 're-litig':285 're-negoti':1505,1518 're-propos':294 're-read':364 'read':159,237,274,350,366,1444 'readabl':68 'readi':976 'readm':354 'realiti':1087 'reason':1471 'record':172,232 'recoveri':1368 'reduc':511,927 'refer':905 'reject':257,1459 'remain':369,941,1482 'remov':1413 'requir':28,38,53,461,824,829,903,919,1251 'resolut':1314 'resolv':306,1488 'respond':398 'retri':1381 'return':1031,1334,1429 'returning-us':1333 'reus':908 'review':21,1442 'rewrit':1196 'right':757 'right-siz':756 'risk':260,311,1472,1474 'root':1152 'rule':552,707,721 'run':104,982,1317 'ruthless':1122 'save':166,954,957,969,1199,1202,1275 'scale':544 'scenario':472,589 'scope':436,876,1149,1154 'search':818 'second':1045 'section':630,633,637,653,668,821,869,887,897,909,920,937,1165,1168,1173,1262 'secur':1069 'see':1392,1531 'select':598 'sentenc':644,733 'session':720,1449 'sha256':224,228 'shall':834,848,859 'shallow':1094 'shorthand':400 'show':1025 'silent':1304 'singl':769 'size':706,758 'skill' 'skill-ql-spec' 'skip':89,141,146,181,1161,1305 'slight':1106 'solv':427,652 'sort':816 'source-andyzengmath' 'span':811 'spec':3,15,46,142,147,160,233,1098,1455 'specif':423,656,689,693 'specifi':519 'split':738,1121 'stack':362 'stage':240,253,1423,1433 'standard':1002 'start':374,987 'state':947,1330,1345,1380,1387,1405 'status':1008 'step':316,379,613,952 'store':467,835 'stori':33,671,700,705,709,741,759,794,802,1104,1116,1224,1238,1244,1268 'structur':26,357,526 'success':444,922 'support':512 'system':800,833,847 'tabl':1012 'tail':122 'task':69,507,806,836,851,934,1011,1048 'tasks/prd-':186,959,971,1277,1480 'tech':361 'technic':453,911 'test':787,1190 'thing':476,1372 'three':528,755,819 'thumb':723 'ticket':513 'time':928,951,1323 'titl':676 'too-big':1113 'too-larg':791 'topic-agent-skills' 'topic-agentskills' 'topic-claude-code' 'topic-claude-code-plugin' 'topic-claude-code-skill' 'topic-skillsmp' 'transform':470,1366 'treat':277 'truli':1177 'typecheck/lint':697,1240 'u2192':14,16,18,20,22 'ui':699,751,776,808,1243,1274 'ui/ux':902 'unambigu':82,828,1258 'unbound':1148 'unchang':156 'understand':343,359 'uniniti':1404 'uninstall/disable':1406 'unknown':1038 'up-to-d':149 'updat':1346,1350,1358 'us':674 'use':39 'user':32,396,434,502,550,621,670,680,967,1056,1216,1223,1284,1325,1335,1341,1391 'user-fac':1283 'userint':1503 'ux':1062 'vagu':1052 'valid':773 'valu':1039 'verifi':23,84,667,690,694,702,1006,1080,1183,1195,1205,1236,1246 'version':1348 'vs':484 'want':682 'well':1067 'whether':100 'window':716,1229 'work':1054 'would':1077 'write':73,170,785,1422,1454 'wrong':478,1374 'x':515,1059","prices":[{"id":"2794ab63-4521-4a03-a772-feb7da74342e","listingId":"bf485320-7ced-4212-96ce-c6715518053e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"andyzengmath","category":"quantum-loop","install_from":"skills.sh"},"createdAt":"2026-04-18T23:04:47.882Z"}],"sources":[{"listingId":"bf485320-7ced-4212-96ce-c6715518053e","source":"github","sourceId":"andyzengmath/quantum-loop/ql-spec","sourceUrl":"https://github.com/andyzengmath/quantum-loop/tree/master/skills/ql-spec","isPrimary":false,"firstSeenAt":"2026-04-18T23:04:47.882Z","lastSeenAt":"2026-04-24T07:02:01.764Z"}],"details":{"listingId":"bf485320-7ced-4212-96ce-c6715518053e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"andyzengmath","slug":"ql-spec","github":{"repo":"andyzengmath/quantum-loop","stars":22,"topics":["agent-skills","agentskills","claude-code","claude-code-plugin","claude-code-skill","skillsmp"],"license":"mit","html_url":"https://github.com/andyzengmath/quantum-loop","pushed_at":"2026-04-24T05:48:29Z","description":"Spec-driven autonomous development loop for Claude Code. Combines structured PRD generation, dependency DAG execution, two-stage review gates, and Iron Law verification.","skill_md_sha":"8fec06bfe4858a378727d579c3c71df77d415cce","skill_md_path":"skills/ql-spec/SKILL.md","default_branch":"master","skill_tree_url":"https://github.com/andyzengmath/quantum-loop/tree/master/skills/ql-spec"},"layout":"multi","source":"github","category":"quantum-loop","frontmatter":{"name":"ql-spec","description":"Part of the quantum-loop autonomous development pipeline (brainstorm \\u2192 spec \\u2192 plan \\u2192 execute \\u2192 review \\u2192 verify). Generate a structured Product Requirements Document (PRD) with user stories, acceptance criteria, and functional requirements. Use when you have an approved design and need formal requirements, or when starting from scratch. Triggers on: create spec, write prd, spec out, requirements for, ql-spec."},"skills_sh_url":"https://skills.sh/andyzengmath/quantum-loop/ql-spec"},"updatedAt":"2026-04-24T07:02:01.764Z"}}