[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FJ5P983GDS1KMJESANN7HY":3,"skill-same:01M6FJ5P983GDS1KMJESANN7HY":53},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":28,"frontMatter":29,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":35,"ownerHtmlUrl":36,"ownerBlogUrl":6,"ownerDescription":37,"updatedAt":38,"install":39,"resources":52},"01M6FJ5P983GDS1KMJESANN7HY","create-adr",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Ftech-leads-club\u002Fagent-skills\u002Fcreate-adr\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25],"create","adr","create adr","2026-11-10 10:12:30",false,"# ADR Creator\n\nYou are an expert in creating Architecture Decision Records (ADRs) — concise, durable documents that capture the context, decision, and consequences of significant architectural choices so future team members understand *why* things are the way they are.\n\n## When to Use This Skill\n\nUse this skill when:\n\n- User asks to \"write an ADR\", \"create an ADR\", \"add an architecture decision record\"\n- User wants to \"document why we chose X\", \"record this decision\", \"capture this architectural choice\"\n- A significant technical decision has been made (or is being finalized) and needs to be recorded\n- The team wants to preserve the reasoning behind a choice for future engineers\n- User asks \"why did we choose X\" and the answer should be written down permanently\n\nDo NOT use for:\n\n- Decisions not yet made — use `create-rfc` to drive the decision process first\n- Implementation planning after the decision — use `technical-design-doc-creator`\n- Simple configuration choices or trivial code decisions\n- Meeting notes or general documentation\n\n## ADR vs RFC — Critical Distinction\n\n| Aspect | ADR | RFC |\n|--------|-----|-----|\n| **Timing** | Decision already made (or being finalized) | Before the decision (seeking input) |\n| **Purpose** | Record for future team members | Proposal seeking approval |\n| **Audience** | Engineers joining months or years later | Current stakeholders |\n| **Length** | Short — 200–500 words | Long — thorough comparison |\n| **Mutability** | Immutable — superseded, never edited | Iterative — evolves during review |\n| **Tone** | Historical record | Deliberative proposal |\n\nIf the user says \"I need to decide whether to do X\" → use `create-rfc`.\nIf the user says \"We decided to do X, let me document it\" → use this skill.\n\n## Language Adaptation\n\n**CRITICAL**: Always generate the ADR in the **same language as the user's request**. Detect the language automatically.\n\n- Keep technical terms in English when appropriate (e.g., \"ADR\", \"API\", \"microservices\")\n- All section headers and content should be in the user's language\n- Company\u002Fproduct names remain in original form\n\n## ADR Format Selection\n\nThree formats are widely used. Detect the right one from context, or ask:\n\n| Format | Best For | Length |\n|--------|----------|--------|\n| **MADR** (Markdown ADR) | Teams that want structured options comparison | Medium |\n| **Nygard** (original) | Minimal, fast recording; obvious decisions | Short |\n| **Y-Statement** | Inline documentation, very compact contexts | One paragraph |\n\nDefault to **MADR** unless the user specifies otherwise or the decision is very simple.\n\n---\n\n## Interactive Workflow\n\n### Step 1: Gather Context (if not provided)\n\nIf the user provides minimal context, use **AskQuestion** to collect essential information:\n\n```json\n{\n  \"title\": \"ADR Information\",\n  \"questions\": [\n    {\n      \"id\": \"adr_decision\",\n      \"prompt\": \"What was the decision made? (e.g., 'Use PostgreSQL for primary storage')\",\n      \"options\": [\n        { \"id\": \"free_text\", \"label\": \"I'll describe it in my next message\" }\n      ]\n    },\n    {\n      \"id\": \"adr_format\",\n      \"prompt\": \"Which ADR format would you like to use?\",\n      \"options\": [\n        { \"id\": \"madr\", \"label\": \"MADR — structured, with options comparison (recommended)\" },\n        { \"id\": \"nygard\", \"label\": \"Nygard — minimal: Context \u002F Decision \u002F Consequences\" },\n        { \"id\": \"y_statement\", \"label\": \"Y-Statement — single paragraph, very compact\" }\n      ]\n    },\n    {\n      \"id\": \"adr_status\",\n      \"prompt\": \"What is the current status of this decision?\",\n      \"options\": [\n        { \"id\": \"accepted\", \"label\": \"Accepted — decision is final\" },\n        { \"id\": \"proposed\", \"label\": \"Proposed — decision is being finalized\" },\n        { \"id\": \"deprecated\", \"label\": \"Deprecated — this approach is no longer recommended\" },\n        { \"id\": \"superseded\", \"label\": \"Superseded — replaced by a newer decision\" }\n      ]\n    },\n    {\n      \"id\": \"adr_supersedes\",\n      \"prompt\": \"Does this ADR supersede a previous decision?\",\n      \"options\": [\n        { \"id\": \"yes\", \"label\": \"Yes — I'll provide the ADR number\u002Ftitle\" },\n        { \"id\": \"no\", \"label\": \"No — this is a new decision\" }\n      ]\n    }\n  ]\n}\n```\n\n### Step 2: Validate Mandatory Fields\n\n**MANDATORY fields — ask if missing**:\n\n- **Decision title** (noun phrase, not a question — e.g., \"Use Redis for session storage\")\n- **Date** of the decision (or today's date)\n- **Status** (Accepted \u002F Proposed \u002F Deprecated \u002F Superseded)\n- **Context** — the forces, constraints, and situation that made this decision necessary\n- **The decision itself** — what was chosen and why\n- **Consequences** — what becomes easier, harder, or different as a result\n\n**RECOMMENDED fields**:\n- **Decision drivers** — the key criteria or constraints\n- **Options considered** — what alternatives were evaluated\n- **Pros\u002Fcons per option** — honest trade-off assessment\n- **Decision outcome rationale** — why this option over the others\n- **Links** — related ADRs, RFCs, tickets, or documentation\n\nIf any mandatory fields are missing, ask IN THE USER'S LANGUAGE before generating the document.\n\n### Step 3: Assign ADR Number\n\nScan the existing ADR directory for the next sequential number:\n\n1. Check if an ADR directory exists (`docs\u002Fadr\u002F`, `docs\u002Fdecisions\u002F`, `.adr\u002F`, or `adr\u002F`)\n2. Find the highest existing number\n3. Assign the next number (e.g., if ADR-007 exists, this becomes ADR-008)\n4. If no directory exists, start at ADR-001 and suggest creating the directory\n\n### Step 4: Generate the ADR\n\nGenerate the ADR following the format selected in Step 1.\n\n### Step 5: Offer File Placement\n\nAfter generating, ask where to save it:\n\n```\nADR Created: \"ADR-{NNN}: {Title}\"\n\nSuggested file path: docs\u002Fadr\u002F{NNN}-{kebab-case-title}.md\n\nWould you like me to:\n1. Save it to docs\u002Fadr\u002F (recommended convention)\n2. Save it to a different location\n3. Just show the content (I'll place it manually)\n```\n\n---\n\n## Document Templates\n\n### MADR Format (Default)\n\n```markdown\n# ADR-{NNN}: {Title}\n\n- **Date**: YYYY-MM-DD\n- **Status**: Accepted | Proposed | Deprecated | Superseded by [ADR-NNN]({link})\n- **Deciders**: {who was involved in the decision}\n- **Tags**: {optional: architecture, security, performance, database, etc.}\n\n## Context and Problem Statement\n\n{Describe the context and the problem or question that led to this decision.\n2–4 sentences. What situation forced this choice?}\n\n## Decision Drivers\n\n- {Driver 1 — e.g., \"Must support 10k concurrent users\"}\n- {Driver 2 — e.g., \"Team has no Go experience\"}\n- {Driver 3 — e.g., \"Must be deployable on-premise\"}\n\n## Considered Options\n\n- {Option A}\n- {Option B}\n- {Option C — \"Do nothing \u002F status quo\" when relevant}\n\n## Decision Outcome\n\nChosen option: **\"{Option A}\"**, because {concise rationale tied to decision drivers}.\n\n### Positive Consequences\n\n- {Benefit 1}\n- {Benefit 2}\n\n### Negative Consequences\n\n- {Trade-off 1 — be honest}\n- {Trade-off 2}\n\n## Pros and Cons of the Options\n\n### {Option A} ✅ Chosen\n\n- ✅ {Pro 1}\n- ✅ {Pro 2}\n- ❌ {Con 1}\n\n### {Option B}\n\n- ✅ {Pro 1}\n- ❌ {Con 1}\n- ❌ {Con 2}\n\n### {Option C}\n\n- ✅ {Pro 1}\n- ❌ {Con 1}\n\n## Links\n\n- {Related ADR, RFC, ticket, or documentation}\n- Supersedes: [ADR-{NNN}: {Title}]({link}) (if applicable)\n- Superseded by: [ADR-{NNN}: {Title}]({link}) (if applicable)\n```\n\n---\n\n### Nygard Format (Minimal)\n\n```markdown\n# ADR-{NNN}: {Title}\n\n## Status\n\nAccepted | Proposed | Deprecated | Superseded by ADR-{NNN}\n\n## Context\n\n{What is the situation that led to this decision?\nWhat forces are at play — technical, business, organizational?\nWhat constraints exist? 2–5 sentences.}\n\n## Decision\n\n{What did we decide to do?\nState it directly, in active voice: \"We will use X\" or \"We decided to adopt Y.\"\nInclude a brief rationale — why this option over the alternatives.}\n\n## Consequences\n\n{What becomes easier or better as a result?}\n{What becomes harder or worse? Be honest about trade-offs.}\n{What new concerns or constraints does this introduce?}\n```\n\n---\n\n### Y-Statement Format (Compact)\n\n```markdown\n# ADR-{NNN}: {Title}\n\n**Date**: YYYY-MM-DD | **Status**: Accepted\n\nIn the context of **{situation\u002Fuse case}**,\nfacing **{concern or constraint}**,\nwe decided **{the option chosen}**,\nto achieve **{quality attribute or goal}**,\naccepting **{the downside or trade-off}**.\n\n**Deciders**: {names or roles}\n**Links**: {related ADRs, tickets}\n```\n\n---\n\n## ADR Quality Checklist\n\nBefore finalizing, verify:\n\n- [ ] **Title** is a noun phrase describing the decision (not a question, not a vague label)\n- [ ] **Date** is included (decisions without dates lose context quickly)\n- [ ] **Status** is set correctly — Accepted, Proposed, Deprecated, or Superseded\n- [ ] **Context** explains the *forces* that made this decision necessary, not just what was done\n- [ ] **Decision** is stated directly and tied to the context\n- [ ] **Consequences** include honest trade-offs — not just positives\n- [ ] **Options** (MADR format) include at least 2 alternatives actually considered\n- [ ] **Supersedes \u002F superseded by** links are included when applicable\n- [ ] **File** follows naming convention: `NNN-kebab-case-title.md`\n- [ ] **Number** is sequential in the ADR directory\n\n---\n\n## ADR File Naming Convention\n\n```\ndocs\u002Fadr\u002F\n├── 001-use-postgresql-for-primary-storage.md\n├── 002-adopt-event-driven-architecture.md\n├── 003-replace-jenkins-with-github-actions.md   ← supersedes ADR-001 if relevant\n└── README.md                                     ← optional index\n```\n\n- Zero-padded numbers: `001`, `002`, ... `099`, `100`\n- Kebab-case title\n- `.md` extension\n- Common directories: `docs\u002Fadr\u002F`, `docs\u002Fdecisions\u002F`, `adr\u002F`, `.adr\u002F`\n\n---\n\n## Common Anti-Patterns to Avoid\n\n### Title as a Question\n\n**BAD**: `# ADR-001: Should we use PostgreSQL?`\n\n**GOOD**: `# ADR-001: Use PostgreSQL for Primary Storage`\n\nTitles should record the decision, not the question. Future readers need to know *what was decided*, not what was considered.\n\n---\n\n### Vague Context\n\n**BAD**:\n```\nWe needed a database and chose PostgreSQL.\n```\n\n**GOOD**:\n```\nOur application requires a relational database with strong ACID guarantees.\nThe team has deep PostgreSQL experience. MySQL was evaluated but lacks\nnative support for JSONB columns, which our schema design requires.\nOur cloud provider (AWS) offers managed PostgreSQL via RDS at acceptable cost.\n```\n\nContext should explain the *forces* — why wasn't the alternative obviously better?\n\n---\n\n### Consequences Without Trade-offs\n\n**BAD**:\n```\n## Consequences\nPostgreSQL is fast and reliable.\n```\n\n**GOOD**:\n```\n## Consequences\n- Enables JSONB columns and advanced indexing for our query patterns\n- Team expertise means fast onboarding and fewer operational surprises\n- Adds operational burden compared to a managed NoSQL service\n- Schema migrations require careful planning in a relational model\n```\n\nHonest trade-offs are what make ADRs valuable years later.\n\n---\n\n### Editing Instead of Superseding\n\n**BAD**: Editing an old ADR to change the decision after the fact.\n\n**GOOD**: Creating a new ADR with `Status: Superseded by ADR-{NNN}` on the old one and linking back.\n\nADRs are historical records. The old decision was correct *given what was known at the time*. Superseding preserves that context.\n\n---\n\n### Missing the \"Why Not\" Rationale\n\n**BAD**:\n```\n## Decision\nWe will use Redis for session storage.\n```\n\n**GOOD**:\n```\n## Decision\nWe will use Redis for session storage. We considered storing sessions in PostgreSQL\n(already in our stack) but Redis's built-in TTL support and in-memory performance\nmake it significantly better suited for high-frequency session reads. The operational\ncost of an additional service is justified by the simplified session expiry logic.\n```\n\nThe rationale is *why this option and not the others* — not just what was chosen.\n\n---\n\n## Important Notes\n\n- **ADRs are immutable** — never edit the decision. Supersede with a new ADR.\n- **Short is better** — 200–500 words is ideal. If it needs to be longer, move detail to a linked TDD or RFC.\n- **Context ages** — always date the ADR; what seems obvious now won't be in 3 years.\n- **Honest consequences** — a one-sided ADR loses credibility. Future engineers will hit the downsides regardless.\n- **Link everything** — related ADRs, the RFC that drove the decision, tickets, PR references.\n- **Language adaptation** — always write in the user's language.\n- **Number sequentially** — check the directory before assigning a number.\n\n## Example Prompts that Trigger This Skill\n\n### English\n- \"Write an ADR for using PostgreSQL as our primary database\"\n- \"Document our decision to adopt GraphQL\"\n- \"Create an ADR for moving our frontend to Next.js\"\n- \"I need to record why we chose Kafka over RabbitMQ\"\n- \"Add an architecture decision record for our authentication approach\"\n\n### Portuguese\n- \"Escreva um ADR sobre a decisão de usar PostgreSQL\"\n- \"Documente a decisão de adotar GraphQL no projeto\"\n- \"Crie um ADR explicando por que escolhemos Kafka\"\n\n### Spanish\n- \"Escribe un ADR sobre la decisión de usar PostgreSQL\"\n- \"Documenta la decisión de adoptar microservicios\"\n- \"Crea un ADR explicando por qué elegimos Next.js\"\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Ftech-leads-club\u002Fagent-skills\u002Fcreate-adr",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill create-adr",{"tool":45,"command":46},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill create-adr",{"tool":48,"command":49},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill create-adr","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Ftech-leads-club\u002Fagent-skills\u002Fcreate-adr\u002FSKILL.md",true,[],[54,64,74,83,89,96],{"skillNo":55,"name":56,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":60,"publishedAt":26},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[59],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[61,62,63],"model","model hierarchy","model hierarchy skill",{"skillNo":65,"name":66,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":70,"publishedAt":26},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[69],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[71,72,73],"MCP","zoom","zoom mcp",{"skillNo":75,"name":76,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":26},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[80,81,82,72],"sdk","zoom apps sdk","apps",{"skillNo":84,"name":85,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":26},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[85],{"skillNo":90,"name":91,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":95,"publishedAt":26},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[94],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[91],{"skillNo":97,"name":98,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":26},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[98]]