[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BYTYBMA8VCFRA06EBYEFXK":3,"skill-same:01M6BYTYBMA8VCFRA06EBYEFXK":66},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":24,"linkOnly":25,"markdownContent":26,"markdownBody":27,"frontMatter":28,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":34,"ownerHtmlUrl":35,"ownerBlogUrl":36,"ownerDescription":6,"updatedAt":37,"install":38,"resources":51},"01M6BYTYBMA8VCFRA06EBYEFXK","domain-modeling",null,"Build and sharpen a project's domain model. Use when the user wants to pin down domain terminology or a ubiquitous language, record an architectural decision, or when another skill needs to maintain the domain model.","zhangfisher\u002Fflextree","zhangfisher","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F2050579?v=4","01M6BYTKYV3J6JXPHJFFZM9D8W","01M6BYTM3TGSNVBRBJHJ3SKGCS",20,"MIT","https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fdomain-modeling\u002FSKILL.md",[],[18,19,20,21,22,23],"domain modeling","ubiquitous language","sharpen","pin","model","decision","2026-11-10 10:12:30",false,"---\nname: domain-modeling\ndescription: Build and sharpen a project's domain model. Use when the user wants to pin down domain terminology or a ubiquitous language, record an architectural decision, or when another skill needs to maintain the domain model.\n---\n\n# Domain Modeling\n\nActively build and sharpen the project's domain model as you design. This is the *active* discipline — challenging terms, inventing edge-case scenarios, and writing the glossary and decisions down the moment they crystallise. (Merely *reading* `CONTEXT.md` for vocabulary is not this skill — that's a one-line habit any skill can do. This skill is for when you're changing the model, not just consuming it.)\n\n## File structure\n\nMost repos have a single context:\n\n```\n\u002F\n├── CONTEXT.md\n├── docs\u002F\n│   └── adr\u002F\n│       ├── 0001-event-sourced-orders.md\n│       └── 0002-postgres-for-write-model.md\n└── src\u002F\n```\n\nIf a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives:\n\n```\n\u002F\n├── CONTEXT-MAP.md\n├── docs\u002F\n│   └── adr\u002F                          ← system-wide decisions\n├── src\u002F\n│   ├── ordering\u002F\n│   │   ├── CONTEXT.md\n│   │   └── docs\u002Fadr\u002F                 ← context-specific decisions\n│   └── billing\u002F\n│       ├── CONTEXT.md\n│       └── docs\u002Fadr\u002F\n```\n\nCreate files lazily — only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs\u002Fadr\u002F` exists, create it when the first ADR is needed.\n\n## During the session\n\n### Challenge against the glossary\n\nWhen the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. \"Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?\"\n\n### Sharpen fuzzy language\n\nWhen the user uses vague or overloaded terms, propose a precise canonical term. \"You're saying 'account' — do you mean the Customer or the User? Those are different things.\"\n\n### Discuss concrete scenarios\n\nWhen domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.\n\n### Cross-reference with code\n\nWhen the user states how something works, check whether the code agrees. If you find a contradiction, surface it: \"Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?\"\n\n### Update CONTEXT.md inline\n\nWhen a term is resolved, update `CONTEXT.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](.\u002FCONTEXT-FORMAT.md).\n\n`CONTEXT.md` should be totally devoid of implementation details. Do not treat `CONTEXT.md` as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else.\n\n### Offer ADRs sparingly\n\nOnly offer to create an ADR when all three are true:\n\n1. **Hard to reverse** — the cost of changing your mind later is meaningful\n2. **Surprising without context** — a future reader will wonder \"why did they do it this way?\"\n3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons\n\nIf any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](.\u002FADR-FORMAT.md).\n","# Domain Modeling\n\nActively build and sharpen the project's domain model as you design. This is the *active* discipline — challenging terms, inventing edge-case scenarios, and writing the glossary and decisions down the moment they crystallise. (Merely *reading* `CONTEXT.md` for vocabulary is not this skill — that's a one-line habit any skill can do. This skill is for when you're changing the model, not just consuming it.)\n\n## File structure\n\nMost repos have a single context:\n\n```\n\u002F\n├── CONTEXT.md\n├── docs\u002F\n│   └── adr\u002F\n│       ├── 0001-event-sourced-orders.md\n│       └── 0002-postgres-for-write-model.md\n└── src\u002F\n```\n\nIf a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives:\n\n```\n\u002F\n├── CONTEXT-MAP.md\n├── docs\u002F\n│   └── adr\u002F                          ← system-wide decisions\n├── src\u002F\n│   ├── ordering\u002F\n│   │   ├── CONTEXT.md\n│   │   └── docs\u002Fadr\u002F                 ← context-specific decisions\n│   └── billing\u002F\n│       ├── CONTEXT.md\n│       └── docs\u002Fadr\u002F\n```\n\nCreate files lazily — only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs\u002Fadr\u002F` exists, create it when the first ADR is needed.\n\n## During the session\n\n### Challenge against the glossary\n\nWhen the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. \"Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?\"\n\n### Sharpen fuzzy language\n\nWhen the user uses vague or overloaded terms, propose a precise canonical term. \"You're saying 'account' — do you mean the Customer or the User? Those are different things.\"\n\n### Discuss concrete scenarios\n\nWhen domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.\n\n### Cross-reference with code\n\nWhen the user states how something works, check whether the code agrees. If you find a contradiction, surface it: \"Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?\"\n\n### Update CONTEXT.md inline\n\nWhen a term is resolved, update `CONTEXT.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](.\u002FCONTEXT-FORMAT.md).\n\n`CONTEXT.md` should be totally devoid of implementation details. Do not treat `CONTEXT.md` as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else.\n\n### Offer ADRs sparingly\n\nOnly offer to create an ADR when all three are true:\n\n1. **Hard to reverse** — the cost of changing your mind later is meaningful\n2. **Surprising without context** — a future reader will wonder \"why did they do it this way?\"\n3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons\n\nIf any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](.\u002FADR-FORMAT.md).\n",{"name":5,"description":7},"master","b40266ddd7af1777658ddafdaeb57bebf8e300b6",".claude\u002Fskills\u002Fdomain-modeling",1,"https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree","https:\u002F\u002Fzhangfisher.github.io\u002Frepos#flextree","https:\u002F\u002Fgithub.com\u002Fzhangfisher","https:\u002F\u002Fzhangfisher.github.io\u002Frepos","2026-09-03 16:19:31",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add zhangfisher\u002Fflextree --skill domain-modeling",{"tool":44,"command":45},"bunx","bunx skills add zhangfisher\u002Fflextree --skill domain-modeling",{"tool":47,"command":48},"pnpm","pnpm dlx skills add zhangfisher\u002Fflextree --skill domain-modeling","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fdomain-modeling\u002FSKILL.md",true,[52,58,62],{"path":53,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":56,"sourceHtmlUrl":57},"ADR-FORMAT.md","REFERENCE","参考文档",2766,"https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fdomain-modeling\u002FADR-FORMAT.md",{"path":59,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":60,"sourceHtmlUrl":61},"agents\u002Fopenai.yaml",101,"https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fdomain-modeling\u002Fagents\u002Fopenai.yaml",{"path":63,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":64,"sourceHtmlUrl":65},"CONTEXT-FORMAT.md",2299,"https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fdomain-modeling\u002FCONTEXT-FORMAT.md",[67,73,87,95,100,105],{"skillNo":68,"name":69,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":24},"01M6BYV5WG2K4JSPGBHPKB1H18","intro","https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree\u002Fblob\u002Fmaster\u002Fdocs\u002Fintro\u002Fskill.md",[],[69],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":24},"01M6BYV46EAJQPD8ER91B741VR","grill-with-docs","A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.","https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fgrill-with-docs\u002FSKILL.md",[],[80,81,82,83,84,20,85,86],"docs","grill with docs","go","plan","design","adr","glossary",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":24},"01M6BYV2F30H2NYPDRJ6NQMX8P","grill-me","A relentless interview to sharpen a plan or design.","https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fgrill-me\u002FSKILL.md",[],[94,20,83,84],"grill me",{"skillNo":96,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":24},"01M6BYTW5DT86CV9DFCRJGS272","https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fgrill-with-docs\u002FSKILL.md",[],[81,80,20,86,85,83,82,84],{"skillNo":101,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":24},"01M6BYTTSBK9278APEDA4GKSMZ","https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fgrill-me\u002FSKILL.md",[],[94,20,83,84],{"skillNo":106,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":24},"01M6BYTP14NZN41SMDSE5CJBTG","https:\u002F\u002Fgithub.com\u002Fzhangfisher\u002Fflextree\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fdomain-modeling\u002FSKILL.md",[],[18,23,22,21,20,19]]