diff --git a/.gitignore b/.gitignore index 93b2302..f85fc50 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -# Personal, installer-regenerated BMad Method config — not team-shared -_bmad/config.user.toml # Python __pycache__/ diff --git a/_bmad/_config/bmad-help.csv b/_bmad/_config/bmad-help.csv deleted file mode 100644 index 97074c5..0000000 --- a/_bmad/_config/bmad-help.csv +++ /dev/null @@ -1,45 +0,0 @@ -module,skill,display-name,menu-code,description,action,args,phase,preceded-by,followed-by,required,output-location,outputs -BMad Method,_meta,,,,,,,,,false,https://docs.bmad-method.org/llms.txt, -BMad Method,bmad-investigate,Investigate,IN,Forensic case investigation calibrated to the input. Evidence-graded analysis with hypothesis tracking. Produces a structured case file.,,4-implementation,,,false,implementation_artifacts,investigation report, -BMad Method,bmad-brainstorming,Brainstorm Project,BP,Expert guided facilitation through a single or multiple techniques.,,,1-analysis,,,false,planning_artifacts,brainstorming session -BMad Method,bmad-market-research,Market Research,MR,Market analysis competitive landscape customer needs and trends.,,,1-analysis,,,false,planning_artifacts|project-knowledge,research documents -BMad Method,bmad-domain-research,Domain Research,DR,Industry domain deep dive subject matter expertise and terminology.,,,1-analysis,,,false,planning_artifacts|project_knowledge,research documents -BMad Method,bmad-technical-research,Technical Research,TR,Technical feasibility architecture options and implementation approaches.,,,1-analysis,,,false,planning_artifacts|project_knowledge,research documents -BMad Method,bmad-product-brief,Create Brief,CB,An expert guided experience to nail down your product idea in a brief. a gentler approach than PRFAQ when you are already sure of your concept and nothing will sway you.,,-A,1-analysis,,,false,planning_artifacts,product brief -BMad Method,bmad-prfaq,PRFAQ Challenge,WB,Working Backwards guided experience to forge and stress-test your product concept to ensure you have a great product that users will love and need through the PRFAQ gauntlet to determine feasibility and alignment with user needs. alternative to product brief.,,-H,1-analysis,,,false,planning_artifacts,prfaq document -BMad Method,bmad-prd,Create Edit and Review PRD,PRD,"Facilitated PRD workflow — create a new PRD via coached discovery, update an existing one against a change signal, or validate a finished PRD against a checklist with an HTML findings report.",,,2-planning,bmad-product-brief,,true,planning_artifacts,prd -BMad Method,bmad-ux,Create UX,CU,"Guidance through realizing the plan for your UX, strongly recommended if a UI is a primary piece of the proposed project.",,,2-planning,bmad-prd,,false,planning_artifacts,ux design -BMad Method,bmad-architecture,Architecture,CA,Offer once requirements exist (a PRD or spec; plus UX if present) and the user is ready to move from what to how. Also offer any time independently-built parts risk diverging. Produces the architecture spine: the invariants that keep features epics and stories consistent. Comes before epics and stories and scales from a quick spine to a full architecture (brownfield: ratifies the existing codebase).,,,3-solutioning,,,true,planning_artifacts,architecture -BMad Method,bmad-create-epics-and-stories,Create Epics and Stories,CE,,,,3-solutioning,bmad-architecture,,true,planning_artifacts,epics and stories -BMad Method,bmad-check-implementation-readiness,Check Implementation Readiness,IR,Ensure PRD UX Architecture and Epics Stories are aligned.,,,3-solutioning,bmad-create-epics-and-stories,,true,planning_artifacts,readiness report -BMad Method,bmad-sprint-planning,Sprint Planning,SP,Kicks off implementation by producing a plan the implementation agents will follow in sequence for every story.,,,4-implementation,,,true,implementation_artifacts,sprint status -BMad Method,bmad-sprint-status,Sprint Status,SS,Anytime: Summarize sprint status and route to next workflow.,,,4-implementation,bmad-sprint-planning,,false,, -BMad Method,bmad-create-story,Create Story,CS,Story cycle start: Prepare first found story in the sprint plan that is next or a specific epic/story designation.,create,,4-implementation,bmad-sprint-planning,bmad-create-story:validate,true,implementation_artifacts,story -BMad Method,bmad-create-story,Validate Story,VS,Validates story readiness and completeness before development work begins.,validate,,4-implementation,bmad-create-story:create,bmad-dev-story,false,implementation_artifacts,story validation report -BMad Method,bmad-dev-story,Dev Story,DS,Story cycle: Execute story implementation tasks and tests then CR then back to DS if fixes needed.,,,4-implementation,bmad-create-story:validate,,true,, -BMad Method,bmad-code-review,Code Review,CR,Story cycle: If issues back to DS if approved then next CS or ER if epic complete.,,,4-implementation,bmad-dev-story,,false,, -BMad Method,bmad-checkpoint-preview,Checkpoint,CK,Guided walkthrough of a change from purpose and context into details. Use for human review of commits branches or PRs.,,,4-implementation,,,false,, -BMad Method,bmad-qa-generate-e2e-tests,QA Automation Test,QA,Generate automated API and E2E tests for implemented code. NOT for code review or story validation — use CR for that.,,,4-implementation,bmad-dev-story,,false,implementation_artifacts,test suite -BMad Method,bmad-retrospective,Retrospective,ER,Optional at epic end: Review completed work lessons learned and next epic or if major issues consider CC.,,,4-implementation,bmad-code-review,,false,implementation_artifacts,retrospective -BMad Method,bmad-document-project,Document Project,DP,Analyze an existing project to produce useful documentation.,,,anytime,,,false,project-knowledge,* -BMad Method,bmad-generate-project-context,Generate Project Context,GPC,Scan existing codebase to generate a lean LLM-optimized project-context.md. Essential for brownfield projects.,,,anytime,,,false,output_folder,project context -BMad Method,bmad-quick-dev,Quick Dev,QQ,Unified intent-in code-out workflow: clarify plan implement review and present.,,,anytime,,,false,implementation_artifacts,spec and project implementation -BMad Method,bmad-correct-course,Correct Course,CC,Navigate significant changes. May recommend start over update PRD redo architecture sprint planning or correct epics and stories.,,,anytime,,,false,planning_artifacts,change proposal -BMad Method,bmad-agent-tech-writer,Write Document,WD,"Describe in detail what you want, and the agent will follow documentation best practices. Multi-turn conversation with subprocess for research/review.",write,,anytime,,,false,project-knowledge,document -BMad Method,bmad-agent-tech-writer,Update Standards,US,Update agent memory documentation-standards.md with your specific preferences if you discover missing document conventions.,update-standards,,anytime,,,false,_bmad/_memory/tech-writer-sidecar,standards -BMad Method,bmad-agent-tech-writer,Mermaid Generate,MG,Create a Mermaid diagram based on user description. Will suggest diagram types if not specified.,mermaid,,anytime,,,false,planning_artifacts,mermaid diagram -BMad Method,bmad-agent-tech-writer,Validate Document,VD,Review the specified document against documentation standards and best practices. Returns specific actionable improvement suggestions organized by priority.,validate,[path],anytime,,,false,planning_artifacts,validation report -BMad Method,bmad-agent-tech-writer,Explain Concept,EC,Create clear technical explanations with examples and diagrams for complex concepts.,explain,[topic],anytime,,,false,project_knowledge,explanation -Core,_meta,,,,,,,,,false,https://docs.bmad-method.org/llms.txt, -Core,bmad-brainstorming,Brainstorming,BSP,Use early in ideation or when stuck generating ideas.,,,anytime,,,false,{output_folder}/brainstorming,brainstorming session -Core,bmad-party-mode,Party Mode,PM,Orchestrate multi-agent discussions when you need multiple perspectives or want agents to collaborate.,,,anytime,,,false,, -Core,bmad-help,BMad Help,BH,,,,anytime,,,false,, -Core,bmad-index-docs,Index Docs,ID,Use when LLM needs to understand available docs without loading everything.,,,anytime,,,false,, -Core,bmad-shard-doc,Shard Document,SD,Use when doc becomes too large (>500 lines) to manage effectively.,,[path],anytime,,,false,, -Core,bmad-editorial-review-prose,Editorial Review - Prose,EP,Use after drafting to polish written content.,,[path],anytime,,,false,report located with target document,three-column markdown table with suggested fixes -Core,bmad-editorial-review-structure,Editorial Review - Structure,ES,Use when doc produced from multiple subprocesses or needs structural improvement.,,[path],anytime,,,false,report located with target document, -Core,bmad-review-adversarial-general,Adversarial Review,AR,"Use for quality assurance or before finalizing deliverables. Code Review in other modules runs this automatically, but also useful for document reviews.",,[path],anytime,,,false,, -Core,bmad-review-edge-case-hunter,Edge Case Hunter Review,ECH,Use alongside adversarial review for orthogonal coverage — method-driven not attitude-driven.,,[path],anytime,,,false,, -Core,bmad-spec,Spec,SP,"Use to distill any intent input (brief, PRD, transcript, brain dump, design folder, mixed multi-source) into a succinct, no-fluff SPEC.md contract + companions that downstream work derives from. Locks the WHAT before the HOW. Works for software, game design, research, editorial, policy, business, anything intent-bearing. Validation mode also available.",,[path],anytime,,,false,{output_folder}/specs/spec-{slug},SPEC.md + companion files -Core,bmad-customize,BMad Customize,BC,"Use when you want to change how an agent or workflow behaves — add persistent facts, swap templates, insert activation hooks, or customize menus. Scans what's customizable, picks the right scope (agent vs workflow), writes the override to _bmad/custom/, and verifies the merge. No TOML hand-authoring required.",,,anytime,,,false,{project-root}/_bmad/custom,TOML override files -Core,bmad-forge-idea,Forge Idea,FI,"Use to pressure-test and harden an idea — software, business, creative, research, or life — until it proves out, hardens into something buildable, or dies cheaply. Persona-driven interrogation; optional handoff to bmad-spec or bmad-quick-dev.",,,anytime,,,false,{output_folder}/forge,refined-idea brief (optional) \ No newline at end of file diff --git a/_bmad/_config/files-manifest.csv b/_bmad/_config/files-manifest.csv deleted file mode 100644 index e46f49b..0000000 --- a/_bmad/_config/files-manifest.csv +++ /dev/null @@ -1,240 +0,0 @@ -type,name,module,path,hash -"yaml","manifest","_config","_config/manifest.yaml","add31b4f68bf72651dd1bfc316ab3adbcd160b915ec2e70e4ce562a35640c6ec" -"csv","documentation-requirements","bmm","bmm/1-analysis/bmad-document-project/documentation-requirements.csv","d1253b99e88250f2130516b56027ed706e643bfec3d99316727a4c6ec65c6c1d" -"csv","module-help","bmm","bmm/module-help.csv","f89582557a7d85d8877c4c1b8ff037881fb5b8a05b7b46ec869e0a166a4d5f4b" -"html","validation-report-template","bmm","bmm/2-plan-workflows/bmad-prd/assets/validation-report-template.html","a80becdd8205d2d7c18738855830b096172a496b96b5ca8a0820ec55c9bb8bf9" -"html","validation-report-template","bmm","bmm/2-plan-workflows/bmad-ux/assets/validation-report-template.html","8656945636fabe96624f8ef8fce931b073b5aecbe42d490584c1d5c7f31e1353" -"json","bmad-manifest","bmm","bmm/1-analysis/bmad-prfaq/bmad-manifest.json","7908cab6f0cd66f1f3427b4cc659975b4737bdc44f789b23c6a895fcd084c4bc" -"json","project-scan-report-schema","bmm","bmm/1-analysis/bmad-document-project/templates/project-scan-report-schema.json","8466965321f1db22f5013869636199f67e0113706283c285a7ffbbf5efeea321" -"md","artifact-analyzer","bmm","bmm/1-analysis/bmad-prfaq/agents/artifact-analyzer.md","7bdc44830f8d593346ec0ee15e36e1e431432fcc6c38b70bb861999315c9cfa4" -"md","brief-template","bmm","bmm/1-analysis/bmad-product-brief/assets/brief-template.md","bb28edf75d023067551c8d417b19b8803324e7acfb2ad0c80f882e9134f4c1f1" -"md","case-file-template","bmm","bmm/4-implementation/bmad-investigate/references/case-file-template.md","9dccb41f3f3fc796b42411966e51b32c4231aaceb4b6bb1880a16225a990002e" -"md","checklist","bmm","bmm/1-analysis/bmad-document-project/checklist.md","581b0b034c25de17ac3678db2dbafedaeb113de37ddf15a4df6584cf2324a7d7" -"md","checklist","bmm","bmm/4-implementation/bmad-correct-course/checklist.md","3e082b95def90ccb876e3101ce0bbaf797a0f03a9471e1347361897f27977327" -"md","checklist","bmm","bmm/4-implementation/bmad-create-story/checklist.md","b94e28e774c3be0288f04ea163424bece4ddead5cd3f3680d1603ed07383323a" -"md","checklist","bmm","bmm/4-implementation/bmad-dev-story/checklist.md","630b68c6824a8785003a65553c1f335222b17be93b1bd80524c23b38bde1d8af" -"md","checklist","bmm","bmm/4-implementation/bmad-qa-generate-e2e-tests/checklist.md","b58f810aeb1040c2f6758c88aa133afce72f8cc178d3d97ff0fbaa3d943057dc" -"md","checklist","bmm","bmm/4-implementation/bmad-sprint-planning/checklist.md","11b0b1ff20657b8e7d1f3377a88f102446112f617f5d0e91ab1595a977714a97" -"md","color-themes","bmm","bmm/2-plan-workflows/bmad-ux/assets/color-themes.md","48fac7943e8584ccf7dd1bcdfdfd4513366a086a3a84965b6b302ccf6607c171" -"md","compile-epic-context","bmm","bmm/4-implementation/bmad-quick-dev/compile-epic-context.md","5cfda02f252941e415b80c57b4528f46226b3cbf456ad45d78fcb5a7ef4816e2" -"md","creative-tools","bmm","bmm/2-plan-workflows/bmad-ux/references/creative-tools.md","349b6b5e8353c2fa1efe7caa49cca50577900f55f32005ccd6f7b43e4daec558" -"md","customer-faq","bmm","bmm/1-analysis/bmad-prfaq/references/customer-faq.md","96f8565197649c58908a1d61b6cd805fd01f57da7945ba889c18d087ad597aeb" -"md","deep-dive-instructions","bmm","bmm/1-analysis/bmad-document-project/workflows/deep-dive-instructions.md","a79e24b93a25ab456062916a9dad7b6a16dc43ac0b4b555700d3c3751cff0d25" -"md","deep-dive-template","bmm","bmm/1-analysis/bmad-document-project/templates/deep-dive-template.md","6198aa731d87d6a318b5b8d180fc29b9aa53ff0966e02391c17333818e94ffe9" -"md","deep-dive-workflow","bmm","bmm/1-analysis/bmad-document-project/workflows/deep-dive-workflow.md","a64d98dfa3b771df2853c4fa19a4e9c90d131e409e13b4c6f5e494d6ac715125" -"md","design-directions","bmm","bmm/2-plan-workflows/bmad-ux/assets/design-directions.md","eab73b948da76a27abc908e1e7d6b124e8ff0362e6dd1990f7e60b9541cbcb98" -"md","design-example-editorial","bmm","bmm/2-plan-workflows/bmad-ux/assets/design-example-editorial.md","a659166845b1a4ed3f9aef942c5935537a97382b10303684fbb78ed86265870e" -"md","design-example-mobile","bmm","bmm/2-plan-workflows/bmad-ux/assets/design-example-mobile.md","a93fb9f114f2e83af0c961c0d7909b3859fc80bcd713715517cd639a53a0372a" -"md","design-example-shadcn","bmm","bmm/2-plan-workflows/bmad-ux/assets/design-example-shadcn.md","25e0dfb2bb21483973a8f0a6ed650288b3dc2ae5ed02aa0f091bb9b6b0b39fc0" -"md","design-md-spec","bmm","bmm/2-plan-workflows/bmad-ux/references/design-md-spec.md","d04d5f663607aba3f3181e818ae33856e6caf5e560dcb16fa64ed80b7cf3d590" -"md","discover-inputs","bmm","bmm/4-implementation/bmad-create-story/discover-inputs.md","dfedba6a8ea05c9a91c6d202c4b29ee3ea793d8ef77575034787ae0fef280507" -"md","epics-template","bmm","bmm/3-solutioning/bmad-create-epics-and-stories/templates/epics-template.md","a804f740155156d89661fa04e7a4264a8f712c4dc227c44fd8ae804a9b0f6b72" -"md","excalidraw-wireframe","bmm","bmm/2-plan-workflows/bmad-ux/assets/excalidraw-wireframe.md","660bbcdebff50cd044a3752eda43f3cb303aca4b0f521b55a270da93b89ddb18" -"md","experience-example-mobile","bmm","bmm/2-plan-workflows/bmad-ux/assets/experience-example-mobile.md","f8cd54c92193cd8c34a472df9c212ac7330976f6a115b729721dcb60034dc4f0" -"md","experience-example-shadcn","bmm","bmm/2-plan-workflows/bmad-ux/assets/experience-example-shadcn.md","d6ca16e87b768e8b41f352c02ee08af21d7cdac04ca21e6ae1556864b4d27590" -"md","explain-concept","bmm","bmm/1-analysis/bmad-agent-tech-writer/explain-concept.md","6ea82dbe4e41d4bb8880cbaa62d936e40cef18f8c038be73ae6e09c462abafc9" -"md","full-scan-instructions","bmm","bmm/1-analysis/bmad-document-project/workflows/full-scan-instructions.md","2235945df2ae261265187447ce593238e132a026a9b88d3507a1f1d6808a0263" -"md","full-scan-workflow","bmm","bmm/1-analysis/bmad-document-project/workflows/full-scan-workflow.md","3bff88a392c16602bd44730f32483505e73e65e46e82768809c13a0a5f55608b" -"md","generate-trail","bmm","bmm/4-implementation/bmad-checkpoint-preview/generate-trail.md","4a5936d86fbe5a85285b4535097b1e2edda8849da35586f4b588a982d7224459" -"md","headless","bmm","bmm/2-plan-workflows/bmad-prd/references/headless.md","4dad58ebee63933a53179016513ff94d143ce9f68e226489d390e2c36bf1d848" -"md","headless","bmm","bmm/2-plan-workflows/bmad-ux/references/headless.md","8da7e23d269b1644f45b5104a243a6a27fd8d075aebb95d9b7752f0d143f0f5d" -"md","headless","bmm","bmm/3-solutioning/bmad-architecture/references/headless.md","4db2708f335c94cb024b5eba022b1e3d88b1ec61c94c4716626d9b89684f5833" -"md","headless-schemas","bmm","bmm/2-plan-workflows/bmad-prd/assets/headless-schemas.md","8d3621333a72400512bd62511bc4c73fc745711505e1f852c697ff8c5fa2de93" -"md","headless-schemas","bmm","bmm/2-plan-workflows/bmad-ux/assets/headless-schemas.md","e3a773dde85286f1a6f6dd8b26fc17e09ccea96f6257dfe7fb436353cd79242d" -"md","index-template","bmm","bmm/1-analysis/bmad-document-project/templates/index-template.md","42c8a14f53088e4fda82f26a3fe41dc8a89d4bcb7a9659dd696136378b64ee90" -"md","instructions","bmm","bmm/1-analysis/bmad-document-project/instructions.md","9f4bc3a46559ffd44289b0d61a0f8f26f829783aa1c0e2a09dfa807fa93eb12f" -"md","internal-faq","bmm","bmm/1-analysis/bmad-prfaq/references/internal-faq.md","26eb83f844cda1ed8efb50f4703d61713ada8a64bd27eb387f759f858b5748de" -"md","key-screens","bmm","bmm/2-plan-workflows/bmad-ux/assets/key-screens.md","ff1c5060673dd595edd61e76806bae876264ec6895c2eaadf8a6190785bf5f7b" -"md","mermaid-gen","bmm","bmm/1-analysis/bmad-agent-tech-writer/mermaid-gen.md","1d83fcc5fa842bc31ecd9fd7e45fbf013fabcadf0022d3391fff5b53b48e4b5d" -"md","prd-template","bmm","bmm/2-plan-workflows/bmad-prd/assets/prd-template.md","41e77bd5c4ee81c3f383b55d6f515147afc9c4bd1a3317ddf55a9282deae495c" -"md","prd-validation-checklist","bmm","bmm/2-plan-workflows/bmad-prd/assets/prd-validation-checklist.md","41d9f09064772a92ec908d970618e47ba63dc86b5c5a1a21d5a2c676d3ba8e3f" -"md","press-release","bmm","bmm/1-analysis/bmad-prfaq/references/press-release.md","c406adb0e2d2cc326cbc45d0174f89d014523448ad82bc272293999d22aec596" -"md","prfaq-template","bmm","bmm/1-analysis/bmad-prfaq/assets/prfaq-template.md","b27e6964f0437ab4e78c8c0ffbe5052c28e3b3ef2fc811726cbb394d5a5c7559" -"md","project-context-template","bmm","bmm/3-solutioning/bmad-generate-project-context/project-context-template.md","54e351394ceceb0ac4b5b8135bb6295cf2c37f739c7fd11bb895ca16d79824a5" -"md","project-overview-template","bmm","bmm/1-analysis/bmad-document-project/templates/project-overview-template.md","a7c7325b75a5a678dca391b9b69b1e3409cfbe6da95e70443ed3ace164e287b2" -"md","readiness-report-template","bmm","bmm/3-solutioning/bmad-check-implementation-readiness/templates/readiness-report-template.md","0da97ab1e38818e642f36dc0ef24d2dae69fc6e0be59924dc2dbf44329738ff6" -"md","research.template","bmm","bmm/1-analysis/research/bmad-domain-research/research.template.md","507bb6729476246b1ca2fca4693986d286a33af5529b6cd5cb1b0bb5ea9926ce" -"md","research.template","bmm","bmm/1-analysis/research/bmad-market-research/research.template.md","507bb6729476246b1ca2fca4693986d286a33af5529b6cd5cb1b0bb5ea9926ce" -"md","research.template","bmm","bmm/1-analysis/research/bmad-technical-research/research.template.md","507bb6729476246b1ca2fca4693986d286a33af5529b6cd5cb1b0bb5ea9926ce" -"md","reviewer-gate","bmm","bmm/3-solutioning/bmad-architecture/references/reviewer-gate.md","d32e32a3c1d59b5612b947004f3f6fef1117a13ce9f1ffa428d616e0b5d4db69" -"md","SKILL","bmm","bmm/1-analysis/bmad-agent-analyst/SKILL.md","fca38a404e79508ebc39235d0162bcb475b02407a913e3e5bd8c5526b2b261a6" -"md","SKILL","bmm","bmm/1-analysis/bmad-agent-tech-writer/SKILL.md","7544242ff68d0ddfd466274f40ae9f3b0ea06ee5f5f938f68f953e19b3598cd7" -"md","SKILL","bmm","bmm/1-analysis/bmad-document-project/SKILL.md","806d73f66a8f3f3e7b3cbd3b9a87ad4d8b9aabd3ff91f37c96edef36a17aa2b3" -"md","SKILL","bmm","bmm/1-analysis/bmad-prfaq/SKILL.md","353da1cc8837e880c7f41b636a1bd38086c56a91d59798b13f5d6168f0021de4" -"md","SKILL","bmm","bmm/1-analysis/bmad-product-brief/SKILL.md","0d569d109cd61a8056374d1f3f3980188407983772544ab81f4ff6b18e798508" -"md","SKILL","bmm","bmm/1-analysis/research/bmad-domain-research/SKILL.md","2308f7e21f78d7f2ed43d560dbcdbfa2af236d6a81988495f28baf0e81a03206" -"md","SKILL","bmm","bmm/1-analysis/research/bmad-market-research/SKILL.md","13f2c2148061dc6688c4c9d81b5e5b98fbfe4d7294eba0daa0cac5b17f7a0593" -"md","SKILL","bmm","bmm/1-analysis/research/bmad-technical-research/SKILL.md","290c5aec88886a623f620e59e43090d11791b0fade357bae2b9de9ae510d3159" -"md","SKILL","bmm","bmm/2-plan-workflows/bmad-agent-pm/SKILL.md","e2ebea0bf6ee158fcb9e62731a185983f2ac59f664940f4f4320cf10e1bbdf92" -"md","SKILL","bmm","bmm/2-plan-workflows/bmad-agent-ux-designer/SKILL.md","d780ae59b9fb7e3a94c5ffe4ec75f90942d4a9a3944af4b36c2d279fdd7801db" -"md","SKILL","bmm","bmm/2-plan-workflows/bmad-create-prd/SKILL.md","143c5c2d85734021db343ff3dbf143e804eddbf9fb519fb824b70f1a9154767d" -"md","SKILL","bmm","bmm/2-plan-workflows/bmad-edit-prd/SKILL.md","31ecfe3c16513d994e44e648a7f2d4f4a6ccf297ca6c1826aa68ef7b053e7ff2" -"md","SKILL","bmm","bmm/2-plan-workflows/bmad-prd/SKILL.md","85f0a3ea5fee06fcaef5ff34d6b194b265fe0d31ffd7610a9c9a0134bf0b21ce" -"md","SKILL","bmm","bmm/2-plan-workflows/bmad-ux/SKILL.md","250d2794f2b8e316bb1ba4666f0728970afd8a5d2707ac1cceac6c21e63730b6" -"md","SKILL","bmm","bmm/2-plan-workflows/bmad-validate-prd/SKILL.md","931439b8c84bc454d0596a1ad35d6583c1926c941f2928c54b31aea702c24b53" -"md","SKILL","bmm","bmm/3-solutioning/bmad-agent-architect/SKILL.md","82bbf22ff3a4571741c9339ae6b7c35676a6e26a3237ceca487abe85369e91a0" -"md","SKILL","bmm","bmm/3-solutioning/bmad-architecture/SKILL.md","a56c7a0abc45e1dba719ae5e66b7169a1098b403e7fd69b30c19f16c12cddc6a" -"md","SKILL","bmm","bmm/3-solutioning/bmad-check-implementation-readiness/SKILL.md","a7e12eae2bdb5a95cc0534e6d5bf58e7ce4b947327a494d475ef98e67f03718a" -"md","SKILL","bmm","bmm/3-solutioning/bmad-create-architecture/SKILL.md","4b1673582dc8e0957b559cece14f048c0c995874b79ad255f033b36b2b789eb0" -"md","SKILL","bmm","bmm/3-solutioning/bmad-create-epics-and-stories/SKILL.md","4ec9ec255c2c0e97ae912342ae1445318e672aa1c2a9e412806b7d7ef7d5a6a7" -"md","SKILL","bmm","bmm/3-solutioning/bmad-generate-project-context/SKILL.md","f25e05d8c3923f331f96a73e6ba8bb8b055b5ca2aa548402a3b633141b8dea21" -"md","SKILL","bmm","bmm/4-implementation/bmad-agent-dev/SKILL.md","54ab6d9d60d7ed7e84d6510cf325734b66feb1b419131436672559584b4bf508" -"md","SKILL","bmm","bmm/4-implementation/bmad-checkpoint-preview/SKILL.md","34613078dbea9c55e45df016399328d8360579fd381301a5de78bb52c3597591" -"md","SKILL","bmm","bmm/4-implementation/bmad-code-review/SKILL.md","6fc1ba315657526ea2ca8a3e114a6dda23930b17790170afc28800fe28561d68" -"md","SKILL","bmm","bmm/4-implementation/bmad-correct-course/SKILL.md","5064ef2e7aedfb094bef912d5e4d6680318a1904d9bcdc7875d3dc16bb253ea4" -"md","SKILL","bmm","bmm/4-implementation/bmad-create-story/SKILL.md","692ab872ebaa197931d849a8d01fa28e86a9b3ee2f4acf79318bb3797a91e9aa" -"md","SKILL","bmm","bmm/4-implementation/bmad-dev-story/SKILL.md","f12801307b157f04d2bde7da104e1ebde3f2898bd3a60326da928d5b9fc793ac" -"md","SKILL","bmm","bmm/4-implementation/bmad-investigate/SKILL.md","c544661dd73d01728c8de8c96622d16b8e8ffe423352f04b2093d5d4b6a0274a" -"md","SKILL","bmm","bmm/4-implementation/bmad-qa-generate-e2e-tests/SKILL.md","9e78729569b2dc8e24e5f8eb016a851c4efd5c1920e2c91e0e3175fc6899d98d" -"md","SKILL","bmm","bmm/4-implementation/bmad-quick-dev/SKILL.md","0d3137f4928b2fa5bf51171d63c22e2b39230befa9cdd707da4b1d21167c06ee" -"md","SKILL","bmm","bmm/4-implementation/bmad-retrospective/SKILL.md","af09b92e4928bbc9e01382497e733ecc9312bf8c1ad680e4f4cc0c4a0ea34253" -"md","SKILL","bmm","bmm/4-implementation/bmad-sprint-planning/SKILL.md","aa828c5ceeb2aa875da324e358844700802c6ad8cb11a97cfb955f37209231de" -"md","SKILL","bmm","bmm/4-implementation/bmad-sprint-status/SKILL.md","a0dcb85d89cbbc6f20651412cf07ccc97f72f605915f03ee70208cc91fb705e9" -"md","source-tree-template","bmm","bmm/1-analysis/bmad-document-project/templates/source-tree-template.md","109bc335ebb22f932b37c24cdc777a351264191825444a4d147c9b82a1e2ad7a" -"md","spec-template","bmm","bmm/4-implementation/bmad-quick-dev/spec-template.md","3ee15d5a63cf5eeee74149c590668fc61d0e44023eac12988a1ca2a9438a9d39" -"md","spine-template","bmm","bmm/3-solutioning/bmad-architecture/assets/spine-template.md","ef4ff795624eb5439fae54a06edb389feb5a0cf79cb01ae007af51109335d198" -"md","step-01-clarify-and-route","bmm","bmm/4-implementation/bmad-quick-dev/step-01-clarify-and-route.md","b5eb9f0cecf2a462885b8e7b4c21abbaec1e95c8abbd76bc410d9090fd8379f0" -"md","step-01-discover","bmm","bmm/3-solutioning/bmad-generate-project-context/steps/step-01-discover.md","8b2c8c7375f8a3c28411250675a28c0d0a9174e6c4e67b3d53619888439c4613" -"md","step-01-document-discovery","bmm","bmm/3-solutioning/bmad-check-implementation-readiness/steps/step-01-document-discovery.md","c763b512d55906122433cb65c1bcd5b5b283e45eacdc07281c8ec7596b6b3980" -"md","step-01-gather-context","bmm","bmm/4-implementation/bmad-code-review/steps/step-01-gather-context.md","d0ee7558605e9d48b5b6f15d9b535542eb6d922613f529bb520326eacade4171" -"md","step-01-init","bmm","bmm/1-analysis/research/bmad-domain-research/domain-steps/step-01-init.md","efee243f13ef54401ded88f501967b8bc767460cec5561b2107fc03fe7b7eab1" -"md","step-01-init","bmm","bmm/1-analysis/research/bmad-market-research/steps/step-01-init.md","64d5501aea0c0005db23a0a4d9ee84cf4e9239f553c994ecc6b1356917967ccc" -"md","step-01-init","bmm","bmm/1-analysis/research/bmad-technical-research/technical-steps/step-01-init.md","c9a1627ecd26227e944375eb691e7ee6bc9f5db29a428a5d53e5d6aef8bb9697" -"md","step-01-orientation","bmm","bmm/4-implementation/bmad-checkpoint-preview/step-01-orientation.md","d9e3b949c36d49a025f3535773af2b51888fe4ce616b6d6d69683a122716b1d2" -"md","step-01-validate-prerequisites","bmm","bmm/3-solutioning/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md","7181608c1ee4e55c084c6627d68fc55a8a0b6917e489f8ac77531a0530428a30" -"md","step-02-customer-behavior","bmm","bmm/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md","bac4de244049f90d1f2eb95e2cc9389cc84966d9538077fef1ec9c35e4533849" -"md","step-02-design-epics","bmm","bmm/3-solutioning/bmad-create-epics-and-stories/steps/step-02-design-epics.md","7c66987808c1f84e853fe54b7aff26d209196d450b5644704110f124a15179bc" -"md","step-02-domain-analysis","bmm","bmm/1-analysis/research/bmad-domain-research/domain-steps/step-02-domain-analysis.md","385a288d9bbb0adf050bcce4da4dad198a9151822f9766900404636f2b0c7f9d" -"md","step-02-generate","bmm","bmm/3-solutioning/bmad-generate-project-context/steps/step-02-generate.md","b1f063edae66a74026b67a79a245cec7ee85438bafcacfc70dcf6006b495e060" -"md","step-02-plan","bmm","bmm/4-implementation/bmad-quick-dev/step-02-plan.md","72f4df415adceaaf554166983559e058c6a019d783d0f87cf42c401db3c5f52c" -"md","step-02-prd-analysis","bmm","bmm/3-solutioning/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md","38be2bf4b924c0b5b395b57d68f685d790ade7b1a6c10993d3c550675f87d954" -"md","step-02-review","bmm","bmm/4-implementation/bmad-code-review/steps/step-02-review.md","76964dcafe06a3fdf0e9f8eacffdc4071fee1a8d18a85561d7e31cde9dad1b65" -"md","step-02-technical-overview","bmm","bmm/1-analysis/research/bmad-technical-research/technical-steps/step-02-technical-overview.md","9c7582241038b16280cddce86f2943216541275daf0a935dcab78f362904b305" -"md","step-02-walkthrough","bmm","bmm/4-implementation/bmad-checkpoint-preview/step-02-walkthrough.md","66cf893f8f968ee81034e9ccd8c20415692c3a8c23a9a143c2245fe6c800acdc" -"md","step-03-competitive-landscape","bmm","bmm/1-analysis/research/bmad-domain-research/domain-steps/step-03-competitive-landscape.md","f10aa088ba00c59491507f6519fb314139f8be6807958bb5fd1b66bff2267749" -"md","step-03-complete","bmm","bmm/3-solutioning/bmad-generate-project-context/steps/step-03-complete.md","e61463db76a8fa060411aa24127aee936d646b97564e9e2a883494ea50e68464" -"md","step-03-create-stories","bmm","bmm/3-solutioning/bmad-create-epics-and-stories/steps/step-03-create-stories.md","c5b787a82e4e49ed9cd9c028321ee1689f32b8cd69d89eea609b37cd3d481afc" -"md","step-03-customer-pain-points","bmm","bmm/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md","5b2418ccaaa89291c593efed0311b3895faad1e9181800d382da823a8eb1312a" -"md","step-03-detail-pass","bmm","bmm/4-implementation/bmad-checkpoint-preview/step-03-detail-pass.md","d48163b9f305f15af57729a8443142e47beb6c3e977554afe12b39ee49cb9fc0" -"md","step-03-epic-coverage-validation","bmm","bmm/3-solutioning/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md","7b187f03a47cba0325fcfd10240410db9c59d93768342fc2dd3de2a01ec23356" -"md","step-03-implement","bmm","bmm/4-implementation/bmad-quick-dev/step-03-implement.md","4d848865eafe5eeba7d83529c766bd410a9cc20a05de1d6a764954c7275b4749" -"md","step-03-integration-patterns","bmm","bmm/1-analysis/research/bmad-technical-research/technical-steps/step-03-integration-patterns.md","005d517a2f962e2172e26b23d10d5e6684c7736c0d3982e27b2e72d905814ad9" -"md","step-03-triage","bmm","bmm/4-implementation/bmad-code-review/steps/step-03-triage.md","91eaa27f6a167702ead00da9e93565c9bff79dce92c02eccbca61b1d1ed39a80" -"md","step-04-architectural-patterns","bmm","bmm/1-analysis/research/bmad-technical-research/technical-steps/step-04-architectural-patterns.md","4636f23e9c585a7a0c90437a660609d913f16362c3557fc2e71d408d6b9f46ce" -"md","step-04-customer-decisions","bmm","bmm/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md","f0bc25f2179b7490e7a6704159a32fc9e83ab616022355ed53acfe8e2f7059d5" -"md","step-04-final-validation","bmm","bmm/3-solutioning/bmad-create-epics-and-stories/steps/step-04-final-validation.md","6b83fcf177c24c6b43c2eb0df2efc1430cb0f357b3ab20ee8a5c5483c3fee079" -"md","step-04-present","bmm","bmm/4-implementation/bmad-code-review/steps/step-04-present.md","eee5687e9d7da9a0aeffd78180b8289fca804fc2d59896db5f65a8dd476e4869" -"md","step-04-regulatory-focus","bmm","bmm/1-analysis/research/bmad-domain-research/domain-steps/step-04-regulatory-focus.md","d22035529efe91993e698b4ebf297bf2e7593eb41d185a661c357a8afc08977b" -"md","step-04-review","bmm","bmm/4-implementation/bmad-quick-dev/step-04-review.md","26232182ec23636d8b8c305d1af51055c3e6be4c42858a82b63118ca3be357de" -"md","step-04-testing","bmm","bmm/4-implementation/bmad-checkpoint-preview/step-04-testing.md","28a56e868968ea2d18add0df8c4bccced0f94b698e218df3d45ddac072ce369c" -"md","step-04-ux-alignment","bmm","bmm/3-solutioning/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md","f71e5f0d77615e885ae40fdee6b04c1dd6e472c871f87b515fe869cb5f6966fb" -"md","step-05-competitive-analysis","bmm","bmm/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md","17532051ad232cfc859f09ac3b44f9f4d542eb24cff8d07317126ccdff0d225a" -"md","step-05-epic-quality-review","bmm","bmm/3-solutioning/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md","d8a84e57f4e3a321734b5b5d093458ceb1e338744f18954c5a204f5ce3576185" -"md","step-05-implementation-research","bmm","bmm/1-analysis/research/bmad-technical-research/technical-steps/step-05-implementation-research.md","e2b8a2c79bcebadc85f3823145980fa47d7e7be8d1c112f686c6223c8c138608" -"md","step-05-present","bmm","bmm/4-implementation/bmad-quick-dev/step-05-present.md","ea49ce8703d4946ec54a59ff428d52ad64ab2649f49c43230bec1f3d09e85b55" -"md","step-05-technical-trends","bmm","bmm/1-analysis/research/bmad-domain-research/domain-steps/step-05-technical-trends.md","fd6c577010171679f630805eb76e09daf823c2b9770eb716986d01f351ce1fb4" -"md","step-05-wrapup","bmm","bmm/4-implementation/bmad-checkpoint-preview/step-05-wrapup.md","c2d4dbc17fed4f8ecbfcb09a2f9c77f0d4562bd27397270e2c27ba37cf4fe073" -"md","step-06-final-assessment","bmm","bmm/3-solutioning/bmad-check-implementation-readiness/steps/step-06-final-assessment.md","1b9c8c2a21950f85e052e05309bfcb3bfe38157ba6fca402ccf37444e7f1cee3" -"md","step-06-research-completion","bmm","bmm/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md","4f5d3158a8462656d6959d29544ed5c92cb925641e2205e47af05c124fcd7666" -"md","step-06-research-synthesis","bmm","bmm/1-analysis/research/bmad-domain-research/domain-steps/step-06-research-synthesis.md","805f2cb7005a4fb0c4da52ea38d45de863f3e840e0f2de1456c414831cdbdf59" -"md","step-06-research-synthesis","bmm","bmm/1-analysis/research/bmad-technical-research/technical-steps/step-06-research-synthesis.md","64d9303ef0c9ce839dc3b2d72e94e3e5b4673e82dc7fc9f1571bd0b03b3a43a7" -"md","step-oneshot","bmm","bmm/4-implementation/bmad-quick-dev/step-oneshot.md","d68648848bb8277f5b762c3528c2aa42122268037b97d252a8f4faf4edb2830e" -"md","sync-sprint-status","bmm","bmm/4-implementation/bmad-quick-dev/sync-sprint-status.md","c0f2fdb940984206a4b7aa2467fbcb7c4811f648634e43a488593974e9efff5e" -"md","template","bmm","bmm/4-implementation/bmad-create-story/template.md","29ba697368d77e88e88d0e7ac78caf7a78785a7dcfc291082aa96a62948afb67" -"md","validate","bmm","bmm/2-plan-workflows/bmad-prd/references/validate.md","71f28774e85c673a5c48af607af541e6a08e10076a2d46d0763885fafc74f201" -"md","validate","bmm","bmm/2-plan-workflows/bmad-ux/references/validate.md","336d5be5ca860dc6948606b68b5a14fed593d41508ad83e123879bd466c984db" -"md","validate-doc","bmm","bmm/1-analysis/bmad-agent-tech-writer/validate-doc.md","3b8d25f60be191716266726393f2d44b77262301b785a801631083b610d6acc5" -"md","verdict","bmm","bmm/1-analysis/bmad-prfaq/references/verdict.md","1a1cbc34090114d3a2b928456edec1563b73d84fea66c58e98780bf680f172ec" -"md","web-researcher","bmm","bmm/1-analysis/bmad-prfaq/agents/web-researcher.md","6e9127bb9bd3e4b15c701e4ced9eef328769262cd34eadc221bebe954c1f3aef" -"md","write-document","bmm","bmm/1-analysis/bmad-agent-tech-writer/write-document.md","c0ddfd981f765b82cba0921dad331cd1fa32bacdeea1f02320edfd60a0ae7e6f" -"py","lint_spine","bmm","bmm/3-solutioning/bmad-architecture/scripts/lint_spine.py","040e0f1c13d31e6a21c518df943d1d7de7b75d8d98a07603b0983f3f3fb500db" -"py","test_lint_spine","bmm","bmm/3-solutioning/bmad-architecture/scripts/tests/test_lint_spine.py","e86bb9a62c5cca74ddc89c843386f2b992610fcc1792d40e03bc9cd445b77681" -"toml","customize","bmm","bmm/1-analysis/bmad-agent-analyst/customize.toml","7191f4a60ada7dbabe083699b2461f35778af7688924dc6ce05911cf1ffc9054" -"toml","customize","bmm","bmm/1-analysis/bmad-agent-tech-writer/customize.toml","bb828f2d26a136870099226f07c61297ce88ddd335823b7549592932bbe14a2e" -"toml","customize","bmm","bmm/1-analysis/bmad-document-project/customize.toml","3bbb5044fafdd865a5fe0863df116a479f30de7fb95c9cf4213f0b87ba1ba924" -"toml","customize","bmm","bmm/1-analysis/bmad-prfaq/customize.toml","8994f925bab65bd310e5ab38781286b6137f3e0c9e89f3ab8a2f480eb05e0de5" -"toml","customize","bmm","bmm/1-analysis/bmad-product-brief/customize.toml","cdd7b417de5b280ab5bd3af65f69654b05980b5efb48077563827c16391f42d6" -"toml","customize","bmm","bmm/1-analysis/research/bmad-domain-research/customize.toml","462ef14dc1e1f6d145fdfe25e315168fd1fa278ea5f87fe0fa86689234daec2f" -"toml","customize","bmm","bmm/1-analysis/research/bmad-market-research/customize.toml","f47af9158893dd3f7ab81ac03cb07d8c76342eead61ec7c9a8a463066b7db9af" -"toml","customize","bmm","bmm/1-analysis/research/bmad-technical-research/customize.toml","7f567fddb04674f817398addbc06e6d1620883d89dcc7ac643c5a56eef5ac337" -"toml","customize","bmm","bmm/2-plan-workflows/bmad-agent-pm/customize.toml","afc2250de25241ac3577c9827e1ee62d8c7a1913de8eb23aadfffb0aadbadc37" -"toml","customize","bmm","bmm/2-plan-workflows/bmad-agent-ux-designer/customize.toml","3df7da44945f9df34dbb3a64de086c756e6c298e73078e388e8f9a4f57cbf7ab" -"toml","customize","bmm","bmm/2-plan-workflows/bmad-create-prd/customize.toml","0c990af4c0a755402abbef893850bd542744a8b6f36c0587c9f3fb6dab6bf5e7" -"toml","customize","bmm","bmm/2-plan-workflows/bmad-edit-prd/customize.toml","35cc2dfb3eda73a0ae4dc987cac58867b25c43ce5c5a1bf552e215826ede6c22" -"toml","customize","bmm","bmm/2-plan-workflows/bmad-prd/customize.toml","5da1c87df2022c3e31f2c8e343dbead23356fbc5f5e9169eccd3102577ba295f" -"toml","customize","bmm","bmm/2-plan-workflows/bmad-ux/customize.toml","c6f94676004a24eed7ff1d546d5b7e7b3889b84d9bab6bbb56bc297d6eabaeb8" -"toml","customize","bmm","bmm/2-plan-workflows/bmad-validate-prd/customize.toml","bfb3c8af5b81b2cdb9bb84f844f1b0dafc40d8c283effa6ad48db966b9446cef" -"toml","customize","bmm","bmm/3-solutioning/bmad-agent-architect/customize.toml","d9763009d7c20246119c24bcea5eacebd21ad60c22ab191b74c9a5fb6e5f57ad" -"toml","customize","bmm","bmm/3-solutioning/bmad-architecture/customize.toml","137b418e1bb940411a6e77460a7c74af66a6ad732edcc7c7363746995b89e65d" -"toml","customize","bmm","bmm/3-solutioning/bmad-check-implementation-readiness/customize.toml","571d81087b7a6d914cf7c2f21aa26354eac385bb2f5cfeabc591892cbb98d036" -"toml","customize","bmm","bmm/3-solutioning/bmad-create-architecture/customize.toml","618be49b0286f18dfb4b6bac3d96bf1cf062994fa5278cd327be9898e651b43c" -"toml","customize","bmm","bmm/3-solutioning/bmad-create-epics-and-stories/customize.toml","da9e43605bc6aec83173050b5d37ede6aebfa9a17c5959a5029681d73e744ba3" -"toml","customize","bmm","bmm/3-solutioning/bmad-generate-project-context/customize.toml","00b6e893b93a1be7c04408f1824dad72c2c43ee02ba29210725e34394bf8225e" -"toml","customize","bmm","bmm/4-implementation/bmad-agent-dev/customize.toml","b56c0af68e2234dc57d9ebe765049ebd9df9e24909d0d9b2b4b12ddefe5291a7" -"toml","customize","bmm","bmm/4-implementation/bmad-checkpoint-preview/customize.toml","1a1e0c3a8914adda3cec925eed51287e067c7f84120de64a8df53348e7b77de5" -"toml","customize","bmm","bmm/4-implementation/bmad-code-review/customize.toml","94ad662fdf3fda372c6e24b2cbda629d0b2aa851097d02afb5905c768b1a1cde" -"toml","customize","bmm","bmm/4-implementation/bmad-correct-course/customize.toml","78095d25afb5b2d4844956f61e9ac640a62d0245174fab9406e9c289f33fd84b" -"toml","customize","bmm","bmm/4-implementation/bmad-create-story/customize.toml","1204f6de064436922f2813069778eb4eaa5f1f945aa8ea5a5ffb87897a2ba8fe" -"toml","customize","bmm","bmm/4-implementation/bmad-dev-story/customize.toml","592fa7948c4614609a59b152518f518d35e0178d6aa7c22e169d78157fd9f5aa" -"toml","customize","bmm","bmm/4-implementation/bmad-investigate/customize.toml","7ec009a4a0a9b476de98de99938f58e319dc6f410b9176910c9ed725e80519e1" -"toml","customize","bmm","bmm/4-implementation/bmad-qa-generate-e2e-tests/customize.toml","04a99926b2d79318b927434c7344dc666f143026ed99c7fcc0d6e3d68263ae66" -"toml","customize","bmm","bmm/4-implementation/bmad-quick-dev/customize.toml","5ba463713de51762eb381be787cbd657932333b808be370d851fc3e40f139e2f" -"toml","customize","bmm","bmm/4-implementation/bmad-retrospective/customize.toml","4ad7e7e7154b480eac7592d0ecc18680b9567471812e9687550be10d547fa7ff" -"toml","customize","bmm","bmm/4-implementation/bmad-sprint-planning/customize.toml","f7bde2f792e8604f26122ee792c5493e270710296044b07680db7d90e886caf3" -"toml","customize","bmm","bmm/4-implementation/bmad-sprint-status/customize.toml","96261fd227befaa4685b0a5091d3e85299d4ae8e4404176b42f5ef2e2fb501bd" -"yaml","config","bmm","bmm/config.yaml","cfb00c3c1769cc870c761c39d4d3b005d3cc2a9cbd83848da873369d462485b9" -"yaml","sprint-status-template","bmm","bmm/4-implementation/bmad-sprint-planning/sprint-status-template.yaml","317b65e5fc0844a96b99ea923a1672e8b1f354269a8fd305691be32976a86614" -"toml","config","config.toml","config.toml","b1aa1bbc5a99715ef6f314b97e27a607b852d884b3528bf1a10d1b429f81c8b4" -"toml","config.user","config.user.toml","config.user.toml","0c51802d5bdbdfca2147efc59f1d88f4cb68f44424aa8d28ca1332abf44c9532" -"csv","brain-methods","core","core/bmad-brainstorming/assets/brain-methods.csv","fff112eabca1a9cb8b190f8314bc47678becc5782a2372e11c83daa0e33b6dfd" -"csv","method-matrix","core","core/bmad-brainstorming/analysis/method-matrix.csv","d6c47ab85b9a134d34c35f9c715c553d6c410015f6cf4d107e6870fff6220c64" -"csv","methods","core","core/bmad-advanced-elicitation/methods.csv","168ffcedd12bf987b087773b12c783126bb7ba64018b54752b89ee67c16dfa84" -"csv","module-help","core","core/module-help.csv","e801caeb1bf6484277867067c60be3c2aeec39beaa75254e64ddf8ce8f3b617d" -"html","brain-selector","core","core/bmad-brainstorming/assets/brain-selector.html","798f27c743b853424aa00d4e41af5c3b515b7a329d6806b5d0a5ebe15e0fbf4e" -"json","brain-icons","core","core/bmad-brainstorming/assets/brain-icons.json","a101c56e89f1d0f9e4131dfdfc19e10c746e3a61c3f92537d04a6f4897b7d331" -"md","catalog-analysis","core","core/bmad-brainstorming/analysis/catalog-analysis.md","d4e742da964674549c7f0c64db82c4e1938f8521e5cf0034c103fd08022e515c" -"md","converge","core","core/bmad-brainstorming/references/converge.md","1528c32ddc64f8061fec663306f7208d2fd4d4a90e660552b8138bda7e452dc0" -"md","create-party","core","core/bmad-party-mode/references/create-party.md","2f810332c36c17d14eb55717aed48f3020acf0713bb9f932479be9fbc3856e9e" -"md","finalize","core","core/bmad-brainstorming/references/finalize.md","b6074e7fb4d86ffcf899abc50b9049b4a1f6fe550917f4be7a1c7a888477e07e" -"md","headless","core","core/bmad-brainstorming/references/headless.md","b8ea5951199cff7e4813e06aef35683ca0658230fa015e358cacc466b1138a42" -"md","headless-schemas","core","core/bmad-spec/assets/headless-schemas.md","83afb3614716db2347d83586a67b9c524492dd50db5282436ccb35c99fb5f08a" -"md","in-chat-techniques","core","core/bmad-brainstorming/references/in-chat-techniques.md","18239464e3e4f00ea9063d015d26d6b0a696b72e7e3c5be92352da6db9a3f244" -"md","mode-agent-team","core","core/bmad-party-mode/references/mode-agent-team.md","d22e047f58469aaeaeb762c4b3efcc4d3b9b8513fd79a622060a1375274f1317" -"md","mode-auto","core","core/bmad-party-mode/references/mode-auto.md","a37fd24f76dfcde385890d5c5947bb6f40ca44bea86c805d267b6ae3aab39f70" -"md","mode-autonomous","core","core/bmad-brainstorming/references/mode-autonomous.md","79fba5391ef293cebdbbdc765c7edeb3ccf60c04317fef964a4ea64d6b13f260" -"md","mode-facilitator","core","core/bmad-brainstorming/references/mode-facilitator.md","1b908498d285d190859aed00c3ba5b399d7f6aa8e94d54e95456d15cd6fe6073" -"md","mode-partner","core","core/bmad-brainstorming/references/mode-partner.md","caa0ed378c116def4de382f4e5a95173c6ae6cc5464f1792e7d8196360f79c8a" -"md","mode-subagent","core","core/bmad-party-mode/references/mode-subagent.md","8755423143560ecc2f1d565b423929c10f9610046f761969914a94c137f39ec8" -"md","party-memory","core","core/bmad-party-mode/references/party-memory.md","800b4b4b920bb881a7b32aaabca8559a98273799b2476d83a23e290e301fb315" -"md","resume","core","core/bmad-brainstorming/references/resume.md","0f79535d72eefe6c55bd5ae47fe4753de8d27235cf129f10b2c596a124c26526" -"md","SKILL","core","core/bmad-advanced-elicitation/SKILL.md","705cc827cab892855d07dcc926f5c9f749c3abab33e915d6ac1574aec174896b" -"md","SKILL","core","core/bmad-brainstorming/SKILL.md","399ddc752fc786b501ba07fb4b4b038b3d2bb076d36496b6384ef85cf922dd59" -"md","SKILL","core","core/bmad-customize/SKILL.md","6461073f9322f5f2ec64477d6ae5e79c601e36e3160e492fef4bc2d928d4a9a8" -"md","SKILL","core","core/bmad-editorial-review-prose/SKILL.md","b3687fe80567378627bc2a0c5034ae8d65dfeedcf2b6c90da077f4feca462d0c" -"md","SKILL","core","core/bmad-editorial-review-structure/SKILL.md","164444359d74f695a84faf7ea558d0eef39c75561e6b26669f97a165c6f75538" -"md","SKILL","core","core/bmad-forge-idea/SKILL.md","4bfb4f70bd0b587f3c6cf90e673296a86e7866e31c4321374643021bc83741d2" -"md","SKILL","core","core/bmad-help/SKILL.md","a766c6bd76bcfc4a49a683417440d39978a2e10bb5618dfd469fff03f96b4b4d" -"md","SKILL","core","core/bmad-index-docs/SKILL.md","a855d7060414e73ca4fe8e1a3e1cc4d0f2ce394846e52340bdf5a1317e0d234a" -"md","SKILL","core","core/bmad-party-mode/SKILL.md","4c1f3593a28699ad084e9fa724bb4f57b24bb03be2961c7efff5ce763381a41a" -"md","SKILL","core","core/bmad-review-adversarial-general/SKILL.md","7bffc39e6dba4d9123648c5d4d79e17c3c5b1efbd927c3fe0026c2dbb8d99cff" -"md","SKILL","core","core/bmad-review-edge-case-hunter/SKILL.md","f49ed9976f46b4cefa1fc8b4f0a495f16089905e6a7bbf4ce73b8f05c9ae3ee6" -"md","SKILL","core","core/bmad-shard-doc/SKILL.md","3a1538536514725fd4f31aded280ee56b9645fc61d114fd94aacb3ac52304e52" -"md","SKILL","core","core/bmad-spec/SKILL.md","a2baaf6b6bf000403a3b309b3dae48d328ece922e726541924585afbaf131b16" -"md","spec-template","core","core/bmad-spec/assets/spec-template.md","94ef029b842dfa7f296dab4ccf830f0b813af9995bf8bbdcdfc0783a60ee5ffe" -"py","brain","core","core/bmad-brainstorming/scripts/brain.py","b84770d5d55fa17bd99a2ab9076130874dfb7f8cd9b4283cd6413df097bc72b6" -"py","list_customizable_skills","core","core/bmad-customize/scripts/list_customizable_skills.py","8787f542930b927789e7fdf12bc5a67ff08e19865903a5ad05ff2cc8fc426b66" -"py","resolve_party","core","core/bmad-party-mode/scripts/resolve_party.py","663a1ffa8406564c2a08f210f144b08d323596b105b755ae795ca725384e32ac" -"py","resolve_personas","core","core/bmad-forge-idea/scripts/resolve_personas.py","3da694c23e5fb29fe25963e2ea0509e1dd6d8c9f70ac54b00d98044052fd1c6e" -"py","test_brain","core","core/bmad-brainstorming/scripts/tests/test_brain.py","5f150395d5aa95526eb1ded5b7a8bd624a577dd25ff060ac082db3cbb5cc0f77" -"py","test_list_customizable_skills","core","core/bmad-customize/scripts/tests/test_list_customizable_skills.py","24c3d384b3b5d490b7335c17866bfe0425af253ce669c32382fa88feb705934d" -"py","test_resolve_personas","core","core/bmad-forge-idea/scripts/tests/test_resolve_personas.py","1c4fa4b1d68bfbd10e4b38cad3c8286dad62345cebd08fe94a6862351b02855e" -"py","test-resolve_party","core","core/bmad-party-mode/scripts/tests/test-resolve_party.py","bb53fe03ec3013ed96c0fb399c1948f28bcf55cb2d7727fe0189343fcaa667d5" -"toml","customize","core","core/bmad-brainstorming/customize.toml","21fcbc60c78db99ca0424da192ba0942dce2189f350f77838e4d3ecd501edd1c" -"toml","customize","core","core/bmad-forge-idea/customize.toml","ef5fadd1df3550cae00b1b442606bf84d187bfd55397563f143e1057430df45c" -"toml","customize","core","core/bmad-party-mode/customize.toml","68ccf9d25fb65fbd0254866fcd5e21ea8db5712d1fd4609e17cec86aba6f22cf" -"toml","customize","core","core/bmad-spec/customize.toml","b0181ba5d4038feb779a7a082a265df753220f868b66b5adb0fb2ed18401c763" -"yaml","config","core","core/config.yaml","cf444e465bffab65f29b22331c5844f58a47d40c0b96e27c04a1227df3ad105a" -"file",".gitignore","custom","custom/.gitignore","973b03a33f142c22cf9b65be285bebadd85790b6b55be04637d2f8c716f58fab" -"py","memlog","scripts","scripts/memlog.py","3b00f82ca33dc4227f715123b939514ee35c4f9c71150c894c3d8185df1b48df" -"py","resolve_config","scripts","scripts/resolve_config.py","f41149160898aea80a12861d149b10dc6b2d2b69d7d97eb65cad01f368adac03" -"py","resolve_customization","scripts","scripts/resolve_customization.py","23fb9040b08c7eb975aeabc4245ef50e158516f5082eebc9ae41700641338498" diff --git a/_bmad/_config/manifest.yaml b/_bmad/_config/manifest.yaml deleted file mode 100644 index 581a415..0000000 --- a/_bmad/_config/manifest.yaml +++ /dev/null @@ -1,21 +0,0 @@ -installation: - version: 6.9.0 - installDate: 2026-06-30T08:02:19.555Z - lastUpdated: 2026-06-30T08:02:19.555Z -modules: - - name: core - version: 6.9.0 - installDate: 2026-06-30T08:02:18.934Z - lastUpdated: 2026-06-30T08:02:19.554Z - source: built-in - npmPackage: null - repoUrl: null - - name: bmm - version: 6.9.0 - installDate: 2026-06-30T08:02:19.118Z - lastUpdated: 2026-06-30T08:02:19.555Z - source: built-in - npmPackage: null - repoUrl: null -ides: - - claude-code diff --git a/_bmad/_config/skill-manifest.csv b/_bmad/_config/skill-manifest.csv deleted file mode 100644 index 7fb2a26..0000000 --- a/_bmad/_config/skill-manifest.csv +++ /dev/null @@ -1,47 +0,0 @@ -canonicalId,name,description,module,path -"bmad-advanced-elicitation","bmad-advanced-elicitation","Push the LLM to reconsider, refine, and improve its recent output. Use when user asks for deeper critique or mentions a known deeper critique method, e.g. socratic, first principles, pre-mortem, red team.","core","_bmad/core/bmad-advanced-elicitation/SKILL.md" -"bmad-brainstorming","bmad-brainstorming","Facilitate a brainstorming session using diverse creative techniques. Use when the user says 'help me brainstorm' or 'help me ideate'.","core","_bmad/core/bmad-brainstorming/SKILL.md" -"bmad-customize","bmad-customize","Authors and updates customization overrides for installed BMad skills. Use when the user says 'customize bmad', 'override a skill', 'change agent behavior', or 'customize a workflow'.","core","_bmad/core/bmad-customize/SKILL.md" -"bmad-editorial-review-prose","bmad-editorial-review-prose","Clinical copy-editor that reviews text for communication issues. Use when user says review for prose or improve the prose","core","_bmad/core/bmad-editorial-review-prose/SKILL.md" -"bmad-editorial-review-structure","bmad-editorial-review-structure","Structural editor that proposes cuts, reorganization, and simplification while preserving comprehension. Use when user requests structural review or editorial review of structure","core","_bmad/core/bmad-editorial-review-structure/SKILL.md" -"bmad-forge-idea","bmad-forge-idea","Pressure-test an idea through persona-driven interrogation until it hardens, proves out, or dies cheaply. Use when the user says 'forge an idea', 'pressure-test this idea', 'stress-test my thinking', or 'harden this idea'.","core","_bmad/core/bmad-forge-idea/SKILL.md" -"bmad-help","bmad-help","Analyzes current state and user query to answer BMad questions or recommend the next skill(s) to use. Use when user asks for help, bmad help, what to do next, or what to start with in BMad.","core","_bmad/core/bmad-help/SKILL.md" -"bmad-index-docs","bmad-index-docs","Generates or updates an index.md to reference all docs in the folder. Use if user requests to create or update an index of all files in a specific folder","core","_bmad/core/bmad-index-docs/SKILL.md" -"bmad-party-mode","bmad-party-mode","Orchestrates lively group discussions between installed BMAD agents or custom personas, and helps author custom parties. Use when the user requests party mode, a roundtable, or multiple agent perspectives — or wants to create/configure a party, define personas, or build an AI focus-group panel.","core","_bmad/core/bmad-party-mode/SKILL.md" -"bmad-review-adversarial-general","bmad-review-adversarial-general","Perform a Cynical Review and produce a findings report. Use when the user requests a critical review of something","core","_bmad/core/bmad-review-adversarial-general/SKILL.md" -"bmad-review-edge-case-hunter","bmad-review-edge-case-hunter","Walk every branching path and boundary condition in content, report only unhandled edge cases. Orthogonal to adversarial review - method-driven not attitude-driven. Use when you need exhaustive edge-case analysis of code, specs, or diffs.","core","_bmad/core/bmad-review-edge-case-hunter/SKILL.md" -"bmad-shard-doc","bmad-shard-doc","Splits large markdown documents into smaller, organized files based on level 2 (default) sections. Use if the user says perform shard document","core","_bmad/core/bmad-shard-doc/SKILL.md" -"bmad-spec","bmad-spec","Distill any intent input into the SPEC kernel + companions — the canonical, preservation-validated machine contract for downstream work. Use when the user says ""create a spec"", ""distill this into a spec"", ""validate this spec"", or ""update the spec"".","core","_bmad/core/bmad-spec/SKILL.md" -"bmad-agent-analyst","bmad-agent-analyst","Strategic business analyst and requirements expert. Use when the user asks to talk to Mary or requests the business analyst.","bmm","_bmad/bmm/1-analysis/bmad-agent-analyst/SKILL.md" -"bmad-agent-tech-writer","bmad-agent-tech-writer","Technical documentation specialist and knowledge curator. Use when the user asks to talk to Paige or requests the tech writer.","bmm","_bmad/bmm/1-analysis/bmad-agent-tech-writer/SKILL.md" -"bmad-document-project","bmad-document-project","Document brownfield projects for AI context. Use when the user says ""document this project"" or ""generate project docs""","bmm","_bmad/bmm/1-analysis/bmad-document-project/SKILL.md" -"bmad-prfaq","bmad-prfaq","Working Backwards PRFAQ challenge that stress-tests a product concept customer-first. Use when the user requests to 'create a PRFAQ', 'work backwards', or 'run the PRFAQ challenge'.","bmm","_bmad/bmm/1-analysis/bmad-prfaq/SKILL.md" -"bmad-product-brief","bmad-product-brief","Create, update, or validate a product brief. Use when the user wants help producing, editing, or validating a brief.","bmm","_bmad/bmm/1-analysis/bmad-product-brief/SKILL.md" -"bmad-domain-research","bmad-domain-research","Conduct domain and industry research. Use when the user says wants to do domain research for a topic or industry","bmm","_bmad/bmm/1-analysis/research/bmad-domain-research/SKILL.md" -"bmad-market-research","bmad-market-research","Conduct market research on competition and customers. Use when the user says they need market research","bmm","_bmad/bmm/1-analysis/research/bmad-market-research/SKILL.md" -"bmad-technical-research","bmad-technical-research","Conduct technical research on technologies and architecture. Use when the user says they would like to do or produce a technical research report","bmm","_bmad/bmm/1-analysis/research/bmad-technical-research/SKILL.md" -"bmad-agent-pm","bmad-agent-pm","Product manager for PRD creation and requirements discovery. Use when the user asks to talk to John or requests the product manager.","bmm","_bmad/bmm/2-plan-workflows/bmad-agent-pm/SKILL.md" -"bmad-agent-ux-designer","bmad-agent-ux-designer","UX designer and UI specialist. Use when the user asks to talk to Sally or requests the UX designer.","bmm","_bmad/bmm/2-plan-workflows/bmad-agent-ux-designer/SKILL.md" -"bmad-create-prd","bmad-create-prd","DEPRECATED — consolidated into bmad-prd create intent - this skill will be removed in v7 in favor of `bmad-prd`.","bmm","_bmad/bmm/2-plan-workflows/bmad-create-prd/SKILL.md" -"bmad-edit-prd","bmad-edit-prd","DEPRECATED — consolidated into bmad-prd update intent - this skill will be removed in v7 in favor of `bmad-prd`.","bmm","_bmad/bmm/2-plan-workflows/bmad-edit-prd/SKILL.md" -"bmad-prd","bmad-prd","Create, update, or validate a PRD. Use when the user wants help producing, editing, or validating a PRD.","bmm","_bmad/bmm/2-plan-workflows/bmad-prd/SKILL.md" -"bmad-ux","bmad-ux","Plan UX patterns and design specifications. Use when the user says ""lets create UX design"" or ""create UX specifications"" or ""help me plan the UX""","bmm","_bmad/bmm/2-plan-workflows/bmad-ux/SKILL.md" -"bmad-validate-prd","bmad-validate-prd","DEPRECATED — consolidated into bmad-prd validate intent - this skill will be removed in v7 in favor of `bmad-prd`.","bmm","_bmad/bmm/2-plan-workflows/bmad-validate-prd/SKILL.md" -"bmad-agent-architect","bmad-agent-architect","System architect and technical design leader. Use when the user asks to talk to Winston or requests the architect.","bmm","_bmad/bmm/3-solutioning/bmad-agent-architect/SKILL.md" -"bmad-architecture","bmad-architecture","Produce the architecture: a lean spine of invariants that keeps everything built from it consistent, projected into whatever format the work needs. Use when the user says ""create the architecture"", ""create technical architecture"", ""architecture spine"", or ""create a solution design"".","bmm","_bmad/bmm/3-solutioning/bmad-architecture/SKILL.md" -"bmad-check-implementation-readiness","bmad-check-implementation-readiness","Validate PRD, UX, Architecture and Epics specs are complete. Use when the user says ""check implementation readiness"".","bmm","_bmad/bmm/3-solutioning/bmad-check-implementation-readiness/SKILL.md" -"bmad-create-architecture","bmad-create-architecture","DEPRECATED — consolidated into bmad-architecture create intent - this skill will be removed in v7 in favor of `bmad-architecture`.","bmm","_bmad/bmm/3-solutioning/bmad-create-architecture/SKILL.md" -"bmad-create-epics-and-stories","bmad-create-epics-and-stories","Break requirements into epics and user stories. Use when the user says ""create the epics and stories list""","bmm","_bmad/bmm/3-solutioning/bmad-create-epics-and-stories/SKILL.md" -"bmad-generate-project-context","bmad-generate-project-context","Create project-context.md with AI rules. Use when the user says ""generate project context"" or ""create project context""","bmm","_bmad/bmm/3-solutioning/bmad-generate-project-context/SKILL.md" -"bmad-agent-dev","bmad-agent-dev","Senior software engineer for story execution and code implementation. Use when the user asks to talk to Amelia or requests the developer agent.","bmm","_bmad/bmm/4-implementation/bmad-agent-dev/SKILL.md" -"bmad-checkpoint-preview","bmad-checkpoint-preview","LLM-assisted human-in-the-loop review. Make sense of a change, focus attention where it matters, test. Use when the user says ""checkpoint"", ""human review"", or ""walk me through this change"".","bmm","_bmad/bmm/4-implementation/bmad-checkpoint-preview/SKILL.md" -"bmad-code-review","bmad-code-review","Review code changes adversarially using parallel review layers (Blind Hunter, Edge Case Hunter, Acceptance Auditor) with structured triage into actionable categories. Use when the user says ""run code review"" or ""review this code""","bmm","_bmad/bmm/4-implementation/bmad-code-review/SKILL.md" -"bmad-correct-course","bmad-correct-course","Manage significant changes during sprint execution. Use when the user says ""correct course"" or ""propose sprint change""","bmm","_bmad/bmm/4-implementation/bmad-correct-course/SKILL.md" -"bmad-create-story","bmad-create-story","Creates a dedicated story file with all the context the agent will need to implement it later. Use when the user says ""create the next story"" or ""create story [story identifier]""","bmm","_bmad/bmm/4-implementation/bmad-create-story/SKILL.md" -"bmad-dev-story","bmad-dev-story","Execute story implementation following a context filled story spec file. Use when the user says ""dev this story [story file]"" or ""implement the next story in the sprint plan""","bmm","_bmad/bmm/4-implementation/bmad-dev-story/SKILL.md" -"bmad-investigate","bmad-investigate","Forensic case investigation with evidence-graded findings, calibrated to the input. Use when the user asks to investigate a bug, trace what caused an incident, walk through unfamiliar code, or build a mental model of a code area before working on it.","bmm","_bmad/bmm/4-implementation/bmad-investigate/SKILL.md" -"bmad-qa-generate-e2e-tests","bmad-qa-generate-e2e-tests","Generate end to end automated tests for existing features. Use when the user says ""create qa automated tests for [feature]""","bmm","_bmad/bmm/4-implementation/bmad-qa-generate-e2e-tests/SKILL.md" -"bmad-quick-dev","bmad-quick-dev","Implements any user intent, requirement, story, bug fix or change request by producing clean working code artifacts that follow the project's existing architecture, patterns and conventions. Use when the user wants to build, fix, tweak, refactor, add or modify any code, component or feature.","bmm","_bmad/bmm/4-implementation/bmad-quick-dev/SKILL.md" -"bmad-retrospective","bmad-retrospective","Post-epic review to extract lessons and assess success. Use when the user says ""run a retrospective"" or ""lets retro the epic [epic]""","bmm","_bmad/bmm/4-implementation/bmad-retrospective/SKILL.md" -"bmad-sprint-planning","bmad-sprint-planning","Generate sprint status tracking from epics. Use when the user says ""run sprint planning"" or ""generate sprint plan""","bmm","_bmad/bmm/4-implementation/bmad-sprint-planning/SKILL.md" -"bmad-sprint-status","bmad-sprint-status","Summarize sprint status and surface risks. Use when the user says ""check sprint status"" or ""show sprint status""","bmm","_bmad/bmm/4-implementation/bmad-sprint-status/SKILL.md" diff --git a/_bmad/bmm/config.yaml b/_bmad/bmm/config.yaml deleted file mode 100644 index 9899404..0000000 --- a/_bmad/bmm/config.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# BMM Module Configuration -# Generated by BMAD installer -# Version: 6.9.0 -# Date: 2026-06-30T08:02:19.132Z - -user_skill_level: intermediate -planning_artifacts: "{project-root}/_bmad-output/planning-artifacts" -implementation_artifacts: "{project-root}/_bmad-output/implementation-artifacts" -project_knowledge: "{project-root}/docs" - -# Core Configuration Values -user_name: Tomoy -project_name: QuantScenarioBench -communication_language: English -document_output_language: English -output_folder: _bmad-output diff --git a/_bmad/bmm/module-help.csv b/_bmad/bmm/module-help.csv deleted file mode 100644 index d0f1749..0000000 --- a/_bmad/bmm/module-help.csv +++ /dev/null @@ -1,32 +0,0 @@ -module,skill,display-name,menu-code,description,action,args,phase,preceded-by,followed-by,required,output-location,outputs -BMad Method,_meta,,,,,,,,,false,https://docs.bmad-method.org/llms.txt, -BMad Method,bmad-document-project,Document Project,DP,Analyze an existing project to produce useful documentation.,,,anytime,,,false,project-knowledge,* -BMad Method,bmad-generate-project-context,Generate Project Context,GPC,Scan existing codebase to generate a lean LLM-optimized project-context.md. Essential for brownfield projects.,,,anytime,,,false,output_folder,project context -BMad Method,bmad-quick-dev,Quick Dev,QQ,Unified intent-in code-out workflow: clarify plan implement review and present.,,,anytime,,,false,implementation_artifacts,spec and project implementation -BMad Method,bmad-correct-course,Correct Course,CC,Navigate significant changes. May recommend start over update PRD redo architecture sprint planning or correct epics and stories.,,,anytime,,,false,planning_artifacts,change proposal -BMad Method,bmad-agent-tech-writer,Write Document,WD,"Describe in detail what you want, and the agent will follow documentation best practices. Multi-turn conversation with subprocess for research/review.",write,,anytime,,,false,project-knowledge,document -BMad Method,bmad-agent-tech-writer,Update Standards,US,Update agent memory documentation-standards.md with your specific preferences if you discover missing document conventions.,update-standards,,anytime,,,false,_bmad/_memory/tech-writer-sidecar,standards -BMad Method,bmad-agent-tech-writer,Mermaid Generate,MG,Create a Mermaid diagram based on user description. Will suggest diagram types if not specified.,mermaid,,anytime,,,false,planning_artifacts,mermaid diagram -BMad Method,bmad-agent-tech-writer,Validate Document,VD,Review the specified document against documentation standards and best practices. Returns specific actionable improvement suggestions organized by priority.,validate,[path],anytime,,,false,planning_artifacts,validation report -BMad Method,bmad-agent-tech-writer,Explain Concept,EC,Create clear technical explanations with examples and diagrams for complex concepts.,explain,[topic],anytime,,,false,project_knowledge,explanation -BMad Method,bmad-brainstorming,Brainstorm Project,BP,Expert guided facilitation through a single or multiple techniques.,,,1-analysis,,,false,planning_artifacts,brainstorming session -BMad Method,bmad-market-research,Market Research,MR,Market analysis competitive landscape customer needs and trends.,,,1-analysis,,,false,planning_artifacts|project-knowledge,research documents -BMad Method,bmad-domain-research,Domain Research,DR,Industry domain deep dive subject matter expertise and terminology.,,,1-analysis,,,false,planning_artifacts|project_knowledge,research documents -BMad Method,bmad-technical-research,Technical Research,TR,Technical feasibility architecture options and implementation approaches.,,,1-analysis,,,false,planning_artifacts|project_knowledge,research documents -BMad Method,bmad-product-brief,Create Brief,CB,An expert guided experience to nail down your product idea in a brief. a gentler approach than PRFAQ when you are already sure of your concept and nothing will sway you.,,-A,1-analysis,,,false,planning_artifacts,product brief -BMad Method,bmad-prfaq,PRFAQ Challenge,WB,Working Backwards guided experience to forge and stress-test your product concept to ensure you have a great product that users will love and need through the PRFAQ gauntlet to determine feasibility and alignment with user needs. alternative to product brief.,,-H,1-analysis,,,false,planning_artifacts,prfaq document -BMad Method,bmad-prd,Create Edit and Review PRD,PRD,"Facilitated PRD workflow — create a new PRD via coached discovery, update an existing one against a change signal, or validate a finished PRD against a checklist with an HTML findings report.",,,2-planning,bmad-product-brief,,true,planning_artifacts,prd -BMad Method,bmad-ux,Create UX,CU,"Guidance through realizing the plan for your UX, strongly recommended if a UI is a primary piece of the proposed project.",,,2-planning,bmad-prd,,false,planning_artifacts,ux design -BMad Method,bmad-architecture,Architecture,CA,Offer once requirements exist (a PRD or spec; plus UX if present) and the user is ready to move from what to how. Also offer any time independently-built parts risk diverging. Produces the architecture spine: the invariants that keep features epics and stories consistent. Comes before epics and stories and scales from a quick spine to a full architecture (brownfield: ratifies the existing codebase).,,,3-solutioning,,,true,planning_artifacts,architecture -BMad Method,bmad-create-epics-and-stories,Create Epics and Stories,CE,,,,3-solutioning,bmad-architecture,,true,planning_artifacts,epics and stories -BMad Method,bmad-check-implementation-readiness,Check Implementation Readiness,IR,Ensure PRD UX Architecture and Epics Stories are aligned.,,,3-solutioning,bmad-create-epics-and-stories,,true,planning_artifacts,readiness report -BMad Method,bmad-sprint-planning,Sprint Planning,SP,Kicks off implementation by producing a plan the implementation agents will follow in sequence for every story.,,,4-implementation,,,true,implementation_artifacts,sprint status -BMad Method,bmad-sprint-status,Sprint Status,SS,Anytime: Summarize sprint status and route to next workflow.,,,4-implementation,bmad-sprint-planning,,false,, -BMad Method,bmad-create-story,Create Story,CS,Story cycle start: Prepare first found story in the sprint plan that is next or a specific epic/story designation.,create,,4-implementation,bmad-sprint-planning,bmad-create-story:validate,true,implementation_artifacts,story -BMad Method,bmad-create-story,Validate Story,VS,Validates story readiness and completeness before development work begins.,validate,,4-implementation,bmad-create-story:create,bmad-dev-story,false,implementation_artifacts,story validation report -BMad Method,bmad-dev-story,Dev Story,DS,Story cycle: Execute story implementation tasks and tests then CR then back to DS if fixes needed.,,,4-implementation,bmad-create-story:validate,,true,, -BMad Method,bmad-code-review,Code Review,CR,Story cycle: If issues back to DS if approved then next CS or ER if epic complete.,,,4-implementation,bmad-dev-story,,false,, -BMad Method,bmad-checkpoint-preview,Checkpoint,CK,Guided walkthrough of a change from purpose and context into details. Use for human review of commits branches or PRs.,,,4-implementation,,,false,, -BMad Method,bmad-qa-generate-e2e-tests,QA Automation Test,QA,Generate automated API and E2E tests for implemented code. NOT for code review or story validation — use CR for that.,,,4-implementation,bmad-dev-story,,false,implementation_artifacts,test suite -BMad Method,bmad-retrospective,Retrospective,ER,Optional at epic end: Review completed work lessons learned and next epic or if major issues consider CC.,,,4-implementation,bmad-code-review,,false,implementation_artifacts,retrospective -BMad Method,bmad-investigate,Investigate,IN,Forensic case investigation calibrated to the input. Evidence-graded analysis with hypothesis tracking. Produces a structured case file.,,4-implementation,,,false,implementation_artifacts,investigation report diff --git a/_bmad/config.toml b/_bmad/config.toml deleted file mode 100644 index a45fea0..0000000 --- a/_bmad/config.toml +++ /dev/null @@ -1,69 +0,0 @@ -# ───────────────────────────────────────────────────────────────── -# Installer-managed. Regenerated on every install — treat as read-only. -# -# Direct edits to this file will be overwritten on the next install. -# To change an install answer durably, re-run the installer (your prior -# answers are remembered as defaults). To pin a value regardless of -# install answers, or to add custom agents / override descriptors, use: -# _bmad/custom/config.toml (team, committed) -# _bmad/custom/config.user.toml (personal, gitignored) -# Those files are never touched by the installer. -# ───────────────────────────────────────────────────────────────── - -[core] -project_name = "QuantScenarioBench" -document_output_language = "English" -output_folder = "_bmad-output" - -[modules.bmm] -planning_artifacts = "{project-root}/_bmad-output/planning-artifacts" -implementation_artifacts = "{project-root}/_bmad-output/implementation-artifacts" -project_knowledge = "{project-root}/docs" - -[agents.bmad-agent-analyst] -module = "bmm" -team = "software-development" -name = "Mary" -title = "Business Analyst" -icon = "📊" -description = "Channels Porter's strategic rigor and Minto's Pyramid Principle, grounds every finding in verifiable evidence, represents every stakeholder voice. Speaks like a treasure hunter narrating the find: thrilled by every clue, precise once the pattern emerges." - -[agents.bmad-agent-tech-writer] -module = "bmm" -team = "software-development" -name = "Paige" -title = "Technical Writer" -icon = "📚" -description = "Master of CommonMark, DITA, and OpenAPI; turns complex concepts into accessible structured docs, favors diagrams over walls of text, every word earning its place. Speaks like the patient teacher you wish you'd had, using analogies that make complex things feel simple." - -[agents.bmad-agent-pm] -module = "bmm" -team = "software-development" -name = "John" -title = "Product Manager" -icon = "📋" -description = "Drives Jobs-to-be-Done over template filling, user value first, technical feasibility is a constraint not the driver. Speaks like a detective interrogating a cold case: short questions, sharper follow-ups, every 'why?' tightening the net." - -[agents.bmad-agent-ux-designer] -module = "bmm" -team = "software-development" -name = "Sally" -title = "UX Designer" -icon = "🎨" -description = "Balances empathy with edge-case rigor, starts simple and evolves through feedback, every decision serves a genuine user need. Speaks like a filmmaker pitching the scene before the code exists, painting user stories that make you feel the problem." - -[agents.bmad-agent-architect] -module = "bmm" -team = "software-development" -name = "Winston" -title = "System Architect" -icon = "🏗️" -description = "Favors boring technology for stability, developer productivity as architecture, ties every decision to business value. Speaks like a seasoned engineer at the whiteboard: measured, always laying out trade-offs rather than verdicts." - -[agents.bmad-agent-dev] -module = "bmm" -team = "software-development" -name = "Amelia" -title = "Senior Software Engineer" -icon = "💻" -description = "Test-first discipline (red, green, refactor), 100% pass before review, no fluff all precision. Speaks like a terminal prompt: exact file paths, AC IDs, and commit-message brevity — every statement citable." diff --git a/_bmad/core/config.yaml b/_bmad/core/config.yaml deleted file mode 100644 index ac402e5..0000000 --- a/_bmad/core/config.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# CORE Module Configuration -# Generated by BMAD installer -# Version: 6.9.0 -# Date: 2026-06-30T08:02:19.133Z - -user_name: Tomoy -project_name: QuantScenarioBench -communication_language: English -document_output_language: English -output_folder: _bmad-output diff --git a/_bmad/core/module-help.csv b/_bmad/core/module-help.csv deleted file mode 100644 index 22b026e..0000000 --- a/_bmad/core/module-help.csv +++ /dev/null @@ -1,14 +0,0 @@ -module,skill,display-name,menu-code,description,action,args,phase,preceded-by,followed-by,required,output-location,outputs -Core,_meta,,,,,,,,,false,https://docs.bmad-method.org/llms.txt, -Core,bmad-brainstorming,Brainstorming,BSP,Use early in ideation or when stuck generating ideas.,,,anytime,,,false,{output_folder}/brainstorming,brainstorming session -Core,bmad-party-mode,Party Mode,PM,Orchestrate multi-agent discussions when you need multiple perspectives or want agents to collaborate.,,,anytime,,,false,, -Core,bmad-help,BMad Help,BH,,,,anytime,,,false,, -Core,bmad-index-docs,Index Docs,ID,Use when LLM needs to understand available docs without loading everything.,,,anytime,,,false,, -Core,bmad-shard-doc,Shard Document,SD,Use when doc becomes too large (>500 lines) to manage effectively.,,[path],anytime,,,false,, -Core,bmad-editorial-review-prose,Editorial Review - Prose,EP,Use after drafting to polish written content.,,[path],anytime,,,false,report located with target document,three-column markdown table with suggested fixes -Core,bmad-editorial-review-structure,Editorial Review - Structure,ES,Use when doc produced from multiple subprocesses or needs structural improvement.,,[path],anytime,,,false,report located with target document, -Core,bmad-review-adversarial-general,Adversarial Review,AR,"Use for quality assurance or before finalizing deliverables. Code Review in other modules runs this automatically, but also useful for document reviews.",,[path],anytime,,,false,, -Core,bmad-review-edge-case-hunter,Edge Case Hunter Review,ECH,Use alongside adversarial review for orthogonal coverage — method-driven not attitude-driven.,,[path],anytime,,,false,, -Core,bmad-spec,Spec,SP,"Use to distill any intent input (brief, PRD, transcript, brain dump, design folder, mixed multi-source) into a succinct, no-fluff SPEC.md contract + companions that downstream work derives from. Locks the WHAT before the HOW. Works for software, game design, research, editorial, policy, business, anything intent-bearing. Validation mode also available.",,[path],anytime,,,false,{output_folder}/specs/spec-{slug},SPEC.md + companion files -Core,bmad-customize,BMad Customize,BC,"Use when you want to change how an agent or workflow behaves — add persistent facts, swap templates, insert activation hooks, or customize menus. Scans what's customizable, picks the right scope (agent vs workflow), writes the override to _bmad/custom/, and verifies the merge. No TOML hand-authoring required.",,,anytime,,,false,{project-root}/_bmad/custom,TOML override files -Core,bmad-forge-idea,Forge Idea,FI,"Use to pressure-test and harden an idea — software, business, creative, research, or life — until it proves out, hardens into something buildable, or dies cheaply. Persona-driven interrogation; optional handoff to bmad-spec or bmad-quick-dev.",,,anytime,,,false,{output_folder}/forge,refined-idea brief (optional) diff --git a/_bmad/custom/.gitignore b/_bmad/custom/.gitignore deleted file mode 100644 index 42d7bc6..0000000 --- a/_bmad/custom/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.user.toml diff --git a/_bmad/custom/config.toml b/_bmad/custom/config.toml deleted file mode 100644 index 4c3a857..0000000 --- a/_bmad/custom/config.toml +++ /dev/null @@ -1,7 +0,0 @@ -# Team / enterprise overrides for _bmad/config.toml. -# Committed to the repo — applies to every developer on the project. -# Tables deep-merge over base config; keyed entries merge by key. -# Example: override an agent descriptor, or add a new agent. -# -# [agents.bmad-agent-pm] -# description = "Prefers short, bulleted PRDs over narrative drafts." diff --git a/_bmad/scripts/memlog.py b/_bmad/scripts/memlog.py deleted file mode 100644 index e7f1f24..0000000 --- a/_bmad/scripts/memlog.py +++ /dev/null @@ -1,224 +0,0 @@ -#!/usr/bin/env python3 -# /// script -# requires-python = ">=3.8" -# /// -"""memlog — an append-only memory log: LLM-optimal working memory for a skill. - -A memlog is the dense, chronological record of everything that mattered in a piece of -work — every item the user generated or accepted — kept minimal like human memory: only -what's important, never bloated. It persists ACROSS sessions, so a fresh session can -load it and continue. It is NOT a deliverable; downstream artifacts (a brief, a PRD, a -deck, a report) are *derived* from it on demand. The host skill supplies the vocabulary -by how it calls `append` — the tool stays neutral. - -It is a FLAT log: there are no sections or grouping. Every entry is one line, recorded -at the END in the order it happened. The chronology itself is the structure — an event -like "started technique X" is just another entry, same as an idea or an insight. - -Three invariants make it trustworthy: - - 1. Append-only, chronological. Entries land at the end, in the order they happen. - Nothing is ever inserted backward, reordered, edited, or removed. There is no - edit or delete subcommand by design; history is never rewritten. - 2. Write-only / blind. Every command is an atomic, context-free write and echoes the - new state as one line of JSON, so the caller never re-reads the file mid-session. - The one time the file is read is on resume — and the caller reads it itself, not - via this script. - 3. No lifecycle status. A memory log has no "complete" flag. Whether the work is done, - blocked, or paused is itself a fact that happened, so it is recorded as an entry - (e.g. `append --type event --text "session complete"`), never as frontmatter the - log would have to mutate. The chronology stays the single source of truth, and a - resume learns the state by reading the last entries — the same way it learns - everything else. - -Atomicity: every write goes to a temp file, is flushed and fsync'd, then atomically -renamed over the target, so a crash never leaves a half-written entry. - -The file shape (.memlog.md): - - --- - topic: Onboarding flow for a budgeting app - goal: lift week-1 retention - updated: 2026-06-07T14:22 - --- - - - (note) user picked techniques: SCAMPER, then Six Thinking Hats - - (technique) started SCAMPER - - (idea) skip the signup wall: let people try with sample data first - - (idea) auto-import one bank account so the first screen shows real numbers - - (question) is open-banking consent too heavy for step one? - - (insight) the "scary numbers" risk and the "real numbers" idea are one lever: show real data, pre-categorized - - (direction) optimize for the anxious first-timer, not the power user - - (decision) lead with one pre-categorized account; defer multi-account import - - (event) session complete - -Each entry may carry an optional `--type` — what KIND it is (idea, insight, question, -decision, direction, assumption, gap, note, event, …) — and an optional `--by` naming -who it came from (e.g. `user`, `coach`), for sessions where authorship matters. Both -render into one short inline tag: `(idea)`, `(idea by user)`, `(by coach)`. Omit them -for a plain note. The host skill names the vocabulary; the script does not enforce one. - -Commands: - init (--workspace DIR | --path FILE) [--field k=v ...] create the memlog (errors if it exists) - append (--workspace DIR | --path FILE) --text STR [--type T] [--by W] append one entry at the end - set (--workspace DIR | --path FILE) --key K --value V set/replace a descriptive frontmatter field - -Addressing: `--workspace` is the run folder, and the memlog is always {workspace}/.memlog.md. -`--path` points straight at the memlog file instead, for callers that already hold the path. -""" -from __future__ import annotations # keep type-hint syntax lazy so the script runs on 3.8+ - -import argparse -import json -import os -import sys -from datetime import datetime -from pathlib import Path - -MEMLOG = ".memlog.md" - - -def now() -> str: - return datetime.now().strftime("%Y-%m-%dT%H:%M") - - -def resolve(args) -> Path: - """The memlog file, from either addressing mode: {workspace}/.memlog.md or an explicit --path.""" - return Path(args.path) if args.path else Path(args.workspace) / MEMLOG - - -def split(text: str) -> tuple[dict, str]: - """Return (frontmatter dict in source order, body str). Frontmatter is plain key: value. - - The closing fence is the first line that is *exactly* `---`, so a `---` inside a - field value (topic/goal are free user text) never truncates the frontmatter. - """ - lines = text.splitlines() - if not lines or lines[0] != "---": - raise ValueError(".memlog.md has no frontmatter") - end = next((i for i in range(1, len(lines)) if lines[i] == "---"), None) - if end is None: - raise ValueError(".memlog.md frontmatter is not terminated") - meta: dict[str, str] = {} - for line in lines[1:end]: - if ":" in line: - k, v = line.split(":", 1) - meta[k.strip()] = v.strip() - return meta, "\n".join(lines[end + 1:]).lstrip("\n") - - -def render(meta: dict, body: str) -> str: - # Neutralize newlines in values so a multi-line field can't break the fence on re-read. - fm = "\n".join(f"{k}: {' '.join(str(v).splitlines())}" for k, v in meta.items()) - return "---\n" + fm + "\n---\n\n" + body.rstrip("\n") + "\n" - - -def touch(meta: dict) -> None: - """Stamp `updated` and keep it last so the field order stays predictable.""" - meta.pop("updated", None) - meta["updated"] = now() - - -def write_atomic(path: Path, text: str) -> None: - """Temp + flush + fsync + atomic rename, so a crash never half-writes an entry.""" - tmp = path.with_suffix(path.suffix + ".tmp") - with open(tmp, "w", encoding="utf-8") as f: - f.write(text) - f.flush() - os.fsync(f.fileno()) - os.replace(tmp, path) - - -def entry_count(body: str) -> int: - return sum(1 for ln in body.splitlines() if ln.startswith("- ")) - - -def ack(path: Path, body: str) -> None: - """Echo new state so the caller never re-reads the file to know where it stands.""" - print(json.dumps({ - "ok": True, - "memlog": str(path), - "entries": entry_count(body), - })) - - -def cmd_init(args) -> int: - path = resolve(args) - if path.exists(): - print(f"error: {path} already exists; use append/set to update it", file=sys.stderr) - return 2 - path.parent.mkdir(parents=True, exist_ok=True) - meta: dict[str, str] = {} - for pair in args.field or []: - if "=" not in pair: - print(f"error: --field expects key=value, got {pair!r}", file=sys.stderr) - return 2 - k, v = pair.split("=", 1) - meta[k.strip()] = v.strip() - touch(meta) - write_atomic(path, render(meta, "")) - ack(path, "") - return 0 - - -def cmd_append(args) -> int: - path = resolve(args) - meta, body = split(path.read_text(encoding="utf-8")) - text = " ".join(args.text.split()) # collapse newlines/runs → one-line entry, no prose bloat - label = args.type or "" - if args.by: - label = f"{label} by {args.by}".strip() # attribution: "(idea by user)" / "(by coach)" - tag = f"({label}) " if label else "" - entry = f"- {tag}{text}" - body = (body.rstrip("\n") + "\n" + entry) if body.strip() else entry # always at the end - touch(meta) - write_atomic(path, render(meta, body)) - ack(path, body) - return 0 - - -def cmd_set(args) -> int: - path = resolve(args) - meta, body = split(path.read_text(encoding="utf-8")) - meta[args.key] = args.value - touch(meta) - write_atomic(path, render(meta, body)) - ack(path, body) - return 0 - - -def add_target(sp) -> None: - """Every command addresses the memlog the same way: a run folder or an explicit path.""" - g = sp.add_mutually_exclusive_group(required=True) - g.add_argument("--workspace", help="run folder; the memlog is {workspace}/.memlog.md") - g.add_argument("--path", help="explicit memlog file path (alternative to --workspace)") - - -def main(argv: list[str] | None = None) -> int: - p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) - sub = p.add_subparsers(dest="cmd", required=True) - - pi = sub.add_parser("init", help="create the memlog") - add_target(pi) - pi.add_argument("--field", action="append", metavar="KEY=VALUE", help="frontmatter field (repeatable)") - pi.set_defaults(func=cmd_init) - - pa = sub.add_parser("append", help="append one entry at the end") - add_target(pa) - pa.add_argument("--text", required=True) - pa.add_argument("--type", help="entry kind, rendered as an inline tag") - pa.add_argument("--by", help="who the entry came from (e.g. user, coach); rendered into the tag") - pa.set_defaults(func=cmd_append) - - pset = sub.add_parser("set", help="set a descriptive frontmatter field") - add_target(pset) - pset.add_argument("--key", required=True) - pset.add_argument("--value", required=True) - pset.set_defaults(func=cmd_set) - - args = p.parse_args(argv) - return args.func(args) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/_bmad/scripts/resolve_config.py b/_bmad/scripts/resolve_config.py deleted file mode 100644 index fd762e7..0000000 --- a/_bmad/scripts/resolve_config.py +++ /dev/null @@ -1,178 +0,0 @@ -#!/usr/bin/env python3 -""" -Resolve BMad's central config using four-layer TOML merge. - -Reads from four layers (highest priority last): - 1. {project-root}/_bmad/config.toml (installer-owned team) - 2. {project-root}/_bmad/config.user.toml (installer-owned user) - 3. {project-root}/_bmad/custom/config.toml (human-authored team, committed) - 4. {project-root}/_bmad/custom/config.user.toml (human-authored user, gitignored) - -Outputs merged JSON to stdout. Errors go to stderr. - -Uses only the Python stdlib (`tomllib`) — no third-party dependencies. -BMad is standardizing on `uv run` to invoke scripts (uv provisions a suitable -interpreter for you); a plain `python3` on PATH still works during the -transition. Either runner needs Python 3.11+ for `tomllib`. - - uv run resolve_config.py --project-root /abs/path/to/project - uv run resolve_config.py --project-root ... --key core - uv run resolve_config.py --project-root ... --key agents - -Merge rules (same as resolve_customization.py): - - Scalars: override wins - - Tables: deep merge - - Arrays of tables where every item shares `code` or `id`: merge by that key - - All other arrays: append -""" - -import argparse -import json -import sys -from pathlib import Path - -try: - import tomllib -except ImportError: - sys.stderr.write( - "error: Python 3.11+ is required (stdlib `tomllib` not found).\n" - ) - sys.exit(3) - - -_MISSING = object() -_KEYED_MERGE_FIELDS = ("code", "id") - - -def load_toml(file_path: Path, required: bool = False) -> dict: - if not file_path.exists(): - if required: - sys.stderr.write(f"error: required config file not found: {file_path}\n") - sys.exit(1) - return {} - try: - with file_path.open("rb") as f: - parsed = tomllib.load(f) - if not isinstance(parsed, dict): - return {} - return parsed - except tomllib.TOMLDecodeError as error: - level = "error" if required else "warning" - sys.stderr.write(f"{level}: failed to parse {file_path}: {error}\n") - if required: - sys.exit(1) - return {} - except OSError as error: - level = "error" if required else "warning" - sys.stderr.write(f"{level}: failed to read {file_path}: {error}\n") - if required: - sys.exit(1) - return {} - - -def _detect_keyed_merge_field(items): - if not items or not all(isinstance(item, dict) for item in items): - return None - for candidate in _KEYED_MERGE_FIELDS: - if all(item.get(candidate) is not None for item in items): - return candidate - return None - - -def _merge_by_key(base, override, key_name): - result = [] - index_by_key = {} - for item in base: - if not isinstance(item, dict): - continue - if item.get(key_name) is not None: - index_by_key[item[key_name]] = len(result) - result.append(dict(item)) - for item in override: - if not isinstance(item, dict): - result.append(item) - continue - key = item.get(key_name) - if key is not None and key in index_by_key: - result[index_by_key[key]] = dict(item) - else: - if key is not None: - index_by_key[key] = len(result) - result.append(dict(item)) - return result - - -def _merge_arrays(base, override): - base_arr = base if isinstance(base, list) else [] - override_arr = override if isinstance(override, list) else [] - keyed_field = _detect_keyed_merge_field(base_arr + override_arr) - if keyed_field: - return _merge_by_key(base_arr, override_arr, keyed_field) - return base_arr + override_arr - - -def deep_merge(base, override): - if isinstance(base, dict) and isinstance(override, dict): - result = dict(base) - for key, over_val in override.items(): - if key in result: - result[key] = deep_merge(result[key], over_val) - else: - result[key] = over_val - return result - if isinstance(base, list) and isinstance(override, list): - return _merge_arrays(base, override) - return override - - -def extract_key(data, dotted_key: str): - parts = dotted_key.split(".") - current = data - for part in parts: - if isinstance(current, dict) and part in current: - current = current[part] - else: - return _MISSING - return current - - -def main(): - parser = argparse.ArgumentParser( - description="Resolve BMad central config using four-layer TOML merge.", - ) - parser.add_argument( - "--project-root", "-p", required=True, - help="Absolute path to the project root (contains _bmad/)", - ) - parser.add_argument( - "--key", "-k", action="append", default=[], - help="Dotted field path to resolve (repeatable). Omit for full dump.", - ) - args = parser.parse_args() - - project_root = Path(args.project_root).resolve() - bmad_dir = project_root / "_bmad" - - base_team = load_toml(bmad_dir / "config.toml", required=True) - base_user = load_toml(bmad_dir / "config.user.toml") - custom_team = load_toml(bmad_dir / "custom" / "config.toml") - custom_user = load_toml(bmad_dir / "custom" / "config.user.toml") - - merged = deep_merge(base_team, base_user) - merged = deep_merge(merged, custom_team) - merged = deep_merge(merged, custom_user) - - if args.key: - output = {} - for key in args.key: - value = extract_key(merged, key) - if value is not _MISSING: - output[key] = value - else: - output = merged - - sys.stdout.write(json.dumps(output, indent=2, ensure_ascii=False) + "\n") - - -if __name__ == "__main__": - main() diff --git a/_bmad/scripts/resolve_customization.py b/_bmad/scripts/resolve_customization.py deleted file mode 100644 index 5e7430c..0000000 --- a/_bmad/scripts/resolve_customization.py +++ /dev/null @@ -1,240 +0,0 @@ -#!/usr/bin/env python3 -""" -Resolve customization for a BMad skill using three-layer TOML merge. - -Reads customization from three layers (highest priority first): - 1. {project-root}/_bmad/custom/{name}.user.toml (personal, gitignored) - 2. {project-root}/_bmad/custom/{name}.toml (team/org, committed) - 3. {skill-root}/customize.toml (skill defaults) - -Skill name is derived from the basename of the skill directory. - -Outputs merged JSON to stdout. Errors go to stderr. - -Uses only the Python stdlib (`tomllib`) — no third-party dependencies. -BMad is standardizing on `uv run` to invoke scripts (uv provisions a suitable -interpreter for you); a plain `python3` on PATH still works during the -transition. Either runner needs Python 3.11+ for `tomllib`. - - uv run resolve_customization.py --skill /abs/path/to/skill-dir - uv run resolve_customization.py --skill ... --key agent - uv run resolve_customization.py --skill ... --key agent.menu - -Merge rules (purely structural — no field-name special-casing): - - Scalars (string, int, bool, float): override wins - - Tables: deep merge (recursively apply these rules) - - Arrays of tables where every item shares the *same* identifier - field (every item has `code`, or every item has `id`): - merge by that key (matching keys replace, new keys append) - - All other arrays — including arrays where only some items have - `code` or `id`, or where items mix the two keys: - append (base items followed by override items) - -No removal mechanism — overrides cannot delete base items. To suppress -a default, fork the skill or override the item by code with a no-op -description/prompt. -""" - -import argparse -import json -import sys -from pathlib import Path - -try: - import tomllib -except ImportError: - sys.stderr.write( - "error: Python 3.11+ is required (stdlib `tomllib` not found).\n" - "Install a newer Python or run the resolution manually per the\n" - "fallback instructions in the skill's SKILL.md.\n" - ) - sys.exit(3) - - -_MISSING = object() -_KEYED_MERGE_FIELDS = ("code", "id") - - -def find_project_root(start: Path): - current = start.resolve() - while True: - if (current / "_bmad").exists() or (current / ".git").exists(): - return current - parent = current.parent - if parent == current: - return None - current = parent - - -def load_toml(file_path: Path, required: bool = False) -> dict: - if not file_path.exists(): - if required: - sys.stderr.write(f"error: required customization file not found: {file_path}\n") - sys.exit(1) - return {} - try: - with file_path.open("rb") as f: - parsed = tomllib.load(f) - if not isinstance(parsed, dict): - if required: - sys.stderr.write(f"error: {file_path} did not parse to a table\n") - sys.exit(1) - return {} - return parsed - except tomllib.TOMLDecodeError as error: - level = "error" if required else "warning" - sys.stderr.write(f"{level}: failed to parse {file_path}: {error}\n") - if required: - sys.exit(1) - return {} - except OSError as error: - level = "error" if required else "warning" - sys.stderr.write(f"{level}: failed to read {file_path}: {error}\n") - if required: - sys.exit(1) - return {} - - -def _detect_keyed_merge_field(items): - """Return 'code' or 'id' if every table item carries that *same* field. - - All items must share the same identifier (all `code`, or all `id`). - Mixed arrays — where some items use `code` and others use `id` — - return None and fall through to append semantics. This is intentional: - mixing identifier keys within one array is a schema smell, and - append-fallback is safer than guessing which key should merge. - """ - if not items or not all(isinstance(item, dict) for item in items): - return None - for candidate in _KEYED_MERGE_FIELDS: - if all(item.get(candidate) is not None for item in items): - return candidate - return None - - -def _merge_by_key(base, override, key_name): - result = [] - index_by_key = {} - - for item in base: - if not isinstance(item, dict): - continue - if item.get(key_name) is not None: - index_by_key[item[key_name]] = len(result) - result.append(dict(item)) - - for item in override: - if not isinstance(item, dict): - result.append(item) - continue - key = item.get(key_name) - if key is not None and key in index_by_key: - result[index_by_key[key]] = dict(item) - else: - if key is not None: - index_by_key[key] = len(result) - result.append(dict(item)) - - return result - - -def _merge_arrays(base, override): - """Shape-aware array merge. Base + override combined tables may opt into - keyed merge if every item has `code` or `id`. Otherwise: append.""" - base_arr = base if isinstance(base, list) else [] - override_arr = override if isinstance(override, list) else [] - keyed_field = _detect_keyed_merge_field(base_arr + override_arr) - if keyed_field: - return _merge_by_key(base_arr, override_arr, keyed_field) - return base_arr + override_arr - - -def deep_merge(base, override): - """Recursively merge override into base using structural rules. - - Table + table: deep merge - - Array + array: shape-aware (keyed merge if all items have code/id, else append) - - Anything else: override wins - """ - if isinstance(base, dict) and isinstance(override, dict): - result = dict(base) - for key, over_val in override.items(): - if key in result: - result[key] = deep_merge(result[key], over_val) - else: - result[key] = over_val - return result - if isinstance(base, list) and isinstance(override, list): - return _merge_arrays(base, override) - return override - - -def extract_key(data, dotted_key: str): - parts = dotted_key.split(".") - current = data - for part in parts: - if isinstance(current, dict) and part in current: - current = current[part] - else: - return _MISSING - return current - - -def write_json_stdout(output): - """Write JSON as UTF-8 so Windows cp1252 stdout can carry emoji icons.""" - reconfigure = getattr(sys.stdout, "reconfigure", None) - if reconfigure is not None: - reconfigure(encoding="utf-8") - sys.stdout.write(json.dumps(output, indent=2, ensure_ascii=False) + "\n") - - -def main(): - parser = argparse.ArgumentParser( - description="Resolve customization for a BMad skill using three-layer TOML merge.", - add_help=True, - ) - parser.add_argument( - "--skill", "-s", required=True, - help="Absolute path to the skill directory (must contain customize.toml)", - ) - parser.add_argument( - "--key", "-k", action="append", default=[], - help="Dotted field path to resolve (repeatable). Omit for full dump.", - ) - args = parser.parse_args() - - skill_dir = Path(args.skill).resolve() - skill_name = skill_dir.name - defaults_path = skill_dir / "customize.toml" - - defaults = load_toml(defaults_path, required=True) - - # Prefer the project that contains this skill. Only fall back to cwd if - # the skill isn't inside a recognizable project tree (unusual but possible - # for standalone skills invoked directly). Using cwd first is unsafe when - # an ancestor of cwd happens to have a stray _bmad/ from another project. - project_root = find_project_root(skill_dir) or find_project_root(Path.cwd()) - - team = {} - user = {} - if project_root: - custom_dir = project_root / "_bmad" / "custom" - team = load_toml(custom_dir / f"{skill_name}.toml") - user = load_toml(custom_dir / f"{skill_name}.user.toml") - - merged = deep_merge(defaults, team) - merged = deep_merge(merged, user) - - if args.key: - output = {} - for key in args.key: - value = extract_key(merged, key) - if value is not _MISSING: - output[key] = value - else: - output = merged - - write_json_stdout(output) - - -if __name__ == "__main__": - main()