[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M72TD9DA29DXRJZGPTV6D18Z":3,"skill-same:01M72TD9DA29DXRJZGPTV6D18Z":103},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":26,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":29,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M72TD9DA29DXRJZGPTV6D18Z","ywc-project-scaffold",null,"(ywc) Use when designing a new project's directory structure or architecture skeleton before files are generated. Triggers: \"project structure\", \"scaffold a new project\", \"folder layout\", \"프로젝트 구조\", \"디렉토리 구조\", \"プロジェクト構成\", \"フォルダ構成\", or reviewing this skill's `references\u002F\u003Clanguage>.md`. Do not use for generic documentation review, existing repo changes, file generation (use ywc-code-gen), task creation (use ywc-task-generator), or onboarding (use ywc-onboard-repo).","yongwoon\u002Fywc-agent-toolkit","yongwoon","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9317029?v=4","01M72SZSF6VKANKG5QTMV4V95S","01M72SZSG8HHC3W2CV5P7EJ5AH",8,"MIT","https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002FSKILL.md",[],[],"2026-11-10 22:39:42",false,"---\nname: ywc-project-scaffold\ndescription: >-\n  (ywc) Use when designing a new project's directory structure or architecture\n  skeleton before files are generated. Triggers: \"project structure\", \"scaffold\n  a new project\", \"folder layout\", \"프로젝트 구조\", \"디렉토리 구조\", \"プロジェクト構成\",\n  \"フォルダ構成\", or reviewing this skill's `references\u002F\u003Clanguage>.md`. Do not\n  use for generic documentation review, existing repo changes, file generation\n  (use ywc-code-gen), task creation (use ywc-task-generator), or onboarding\n  (use ywc-onboard-repo).\n---\n\n# Project Scaffold - Directory Structure Generator\n\n**Announce at start:** \"I'm using the ywc-project-scaffold skill to design a directory structure tailored to the chosen tech stack.\"\n\nGenerate well-organized project directory structures in Markdown, tailored to specific tech stacks, architecture patterns, and project requirements.\n\n## Rationalization Defense\n\nWhen tempted to skip a step, check this table first:\n\n| Excuse | Reality |\n|---|---|\n| \"Tech stack not specified, assume Node + TypeScript\" | Always ask for language + framework + scale. Wrong-stack scaffolds are useless. |\n| \"Architecture pattern is implicit\" | Make it explicit (layered \u002F hexagonal \u002F clean \u002F DDD \u002F etc.). The choice cascades through every directory. |\n| \"Skip the rationale per directory, just emit the tree\" | Each non-obvious directory needs a one-line purpose. Trees without rationale invite misuse. |\n| \"Generate actual files instead of a Markdown plan\" | This skill is for plan only. File generation belongs to ywc-code-gen. |\n| \"Project scale guessed at 'medium', do not ask\" | Scale (small \u002F medium \u002F large \u002F monorepo) changes the structure significantly. Always ask. |\n| \"Add every conceivable directory for completeness\" | Over-scaffolding creates empty noise. Include only directories with a current purpose. |\n| \"Run a Trend Check for every scaffold\" | Trend Check is conditional: run it only for large or explicitly contested architecture requests. |\n| \"Refresh a shared reference in place\" | Reference refresh is proposal-first. Show an additive diff and wait for explicit approval before editing the skill-owned reference. |\n| \"The scaffold can fill in quality-gate commands from the stack\" | A Quality Gate Contract is opt-in. Seed advisory metadata only when the user explicitly requests it; use only caller-provided ownership, thresholds, command IDs\u002Fdigests, and evidence paths. Never invent executable commands, digests, or project files. |\n\n**Violating the letter of these rules is violating the spirit.** A scaffold that does not match the user's actual stack becomes immediate technical debt.\n\n## Triggers\n\n- New project initialization with a specific tech stack\n- Directory structure design for language + framework + protocol combinations\n- Planning a not-yet-created folder layout before implementation begins\n- \"Create a project structure with this stack\", \"scaffold a FastAPI project\"\n\n## Usage\n\n```text\nywc-project-scaffold [description]\n```\n\n**Examples:**\n```text\nywc-project-scaffold FastAPI + GraphQL + Clean Architecture, medium scale\nywc-project-scaffold Rails API with gRPC, large scale e-commerce\nywc-project-scaffold NestJS + WebSocket + DDD, small scale chat app\nywc-project-scaffold Go microservice with gRPC and event-driven\n```\n\n## Input Analysis\n\nIdentify the following elements from user input. Ask a focused clarification when language, framework, or scale is missing; use defaults only for protocol and domain when the user does not care.\n\n| Element | Example | Default |\n|---------|---------|---------|\n| **Language** | Python, Ruby, Go, Rust, JavaScript, TypeScript | Required |\n| **Framework** | FastAPI, Rails, NestJS, Next.js, Astro, Gin, Echo | Recommended by language |\n| **Architecture** | Clean Architecture, Hexagonal, DDD, MVC, Layered | Follows Framework conventions |\n| **Protocol** | REST API, GraphQL, gRPC, WebSocket, Message Queue | REST API |\n| **Scale** | small, medium, large | medium |\n| **Domain** | e-commerce, SaaS, chat, CMS, etc. | General-purpose |\n\n### Scale Criteria\n\n- **Small**: Single service, small team (1-3 members), rapid MVP\n- **Medium**: Modularized service, mid-size team (3-8 members), typical production\n- **Large**: Multi-module\u002FMonorepo consideration, large team (8+ members), enterprise-grade\n\n### End-user UI mobile-first policy\n\nWhen scaffolding a new end-user UI that will include layout or style work, note\nthe shared [mobile-first UI policy](..\u002Freferences\u002Fmobile-first-ui.md): author\nthe narrowest-viewport base styles first, then expand with `min-width`\nbreakpoints. An otherwise in-scope PC\u002Ftablet-only UI must record its explicit\nexception. This does not apply to admin\u002Finternal tools, non-UI work, or\nunchanged legacy desktop-first CSS, which do not require a retrofit.\n\n## Modes\n\n### `reference-refresh`\n\nUse this separate mode only when the user asks to review, refresh, or audit one\nor more of this skill's own `references\u002F\u003Clanguage>.md` files. Do not route generic\ndocumentation review here. Identify each target path and infer its language from\nthe filename. If no target can be resolved, return `NEEDS_CONTEXT`.\n\n1. Read the current target reference and use any supplied repository or official\n   documentation evidence directly. If no real-world evidence is supplied,\n   delegate a focused `ywc-tech-research --depth 25` check. Use a language-only\n   topic when the framework is unknown; include the framework only when it is\n   known.\n2. Compare the evidence with the current reference. Exclude rephrasing and\n   patterns already documented. Keep existing alternatives and valid variants.\n3. Produce an additive proposal: a sibling variant or entries in an existing\n   conventions\u002Fkey-points section. Display the proposed diff and return it in\n   `Mode: reference-refresh`.\n4. Stop after the proposal for the current turn and wait for explicit user\n   approval. Only a later approved turn may edit these skill-owned reference\n   files, followed by Markdown lint and structural validation.\n\nThis is the only write exception to the normal project boundary, and it applies\nonly to this skill's own references after approval. It never edits the user's\ntarget project, silently rewrites a reference, removes a valid variant, or\ncreates project files.\n\n## Behavioral Flow\n\n### 1. Analyze - Parse and Confirm Input\n\nExtract the above elements from user input. If there are ambiguous parts, briefly confirm with the user.\n\n### 2. Load References - Load Relevant References\n\nRead language-specific Reference files and refer to the structure matching the given Framework and Architecture.\nIf the Protocol is not REST, also refer to `references\u002Fprotocols.md`.\n\n- Python\u002FFastAPI → `references\u002Fpython.md`\n- Ruby\u002FRails → `references\u002Fruby.md`\n- JavaScript\u002FTypeScript (Next.js, NestJS, Astro) → `references\u002Fjavascript.md`\n- Go (Gin, Echo, standard) → `references\u002Fgo.md`\n- Rust (Actix Web, Axum, standard) → `references\u002Frust.md`\n- Protocol related → `references\u002Fprotocols.md`\n\n**Fallback (no matching reference)**: if the requested language or framework has no matching reference file above, proceed using general project-structure principles and confirm the stack assumptions with the user before generating.\n\n**Compound condition handling**: Combine multiple References. For example, for \"FastAPI + GraphQL\", refer to both `python.md` and `protocols.md` to generate an integrated structure.\n\n### 2.5 Trend Check - Conditional Current-Practice Comparison\n\nAfter loading the relevant references and before finalizing the tree, run a\nfocused Trend Check when either the requested scale is `large` or the user\nexplicitly questions or contests the requested\u002Fselected architecture. Delegate\nthe topic (for example, `\u003Clanguage>\u002F\u003Cframework> project structure conventions`)\nto `ywc-tech-research --depth 25`.\n\n- If the findings confirm the loaded baseline, continue without extra prose.\n- If they show a material delta, retain the loaded baseline and add a clearly\n  labelled `Extras` callout describing the delta and its source.\n- If research is unavailable or inconclusive, retain the baseline and report\n  `DONE_WITH_CONCERNS` with the evidence gap; do not invent a trend.\n\nNever silently substitute research findings into the tree or edit a reference.\nExplicitly skip this branch for uncontested small and medium requests.\n\n### 3. Generate - Create Directory Structure\n\nGenerate Markdown in the following format:\n\n```markdown\n# [Project Name] Directory Structure\n\n> **Stack**: [Language] + [Framework] + [Protocol]\n> **Architecture**: [Pattern]\n> **Scale**: [small\u002Fmedium\u002Flarge]\n\n## Directory Structure\n\n\\```\nproject-root\u002F\n├── src\u002F                          # Application source code\n│   ├── domain\u002F                   # Domain layer - business logic\n│   │   ├── models\u002F               # Domain entities and value objects\n│   │   └── services\u002F             # Domain services (pure business rules)\n│   ├── application\u002F              # Application layer - use cases\n│   │   ├── commands\u002F             # Write operations (CQRS)\n│   │   └── queries\u002F             # Read operations\n│   ...\n\\```\n\n## Key Directory Descriptions\n\n### `src\u002Fdomain\u002F`\nThe domain layer is the core of business logic. It contains only pure business\nrules without any Framework or external dependencies.\n\n**Reason for this structure**: In [Architecture Pattern], the domain is ...\n\n### `src\u002Finfrastructure\u002F`\n...\n```\n\n### Optional Quality Gate Contract seed\n\nOnly when the user explicitly requests quality gates, add a clearly labelled\nadvisory seed to the scaffold report. It is metadata for a later task-generator\nhandoff, not an executable packet or a project-file instruction. Include only\ncaller-provided exact ownership paths\u002Fsymbols, thresholds, immutable command\nIDs\u002Fdigests, and bounded sanitized evidence paths; ask for or return\n`NEEDS_CONTEXT` when any required field is missing. Never infer a command from\nthe selected language\u002Fframework and never create a project file.\n\nEvery normal scaffold report must include a Quality Gate Contract line. When the\nuser does not request a quality gate, its value must be exactly\n`N\u002FA — no quality gate contract`; omit the conditional metadata, and preserve\nthe normal scaffold output and handoff. A reference-refresh proposal remains\nthe only mode that does not produce a normal scaffold report.\n\n### 4. Explain - Describe the Structure\n\nExplain the following for each major Directory:\n\n- **Role**: The responsibility this Directory handles\n- **Reason for this structure**: Why it is organized this way according to the Architecture Pattern or Framework conventions\n- **Example files included**: 1-2 representative files\n- **Dependency direction**: Which Layer it references and which Layer references it (when an Architecture Pattern is applied)\n\n### 5. Extras - Additional Guidance (if needed)\n\nProvide useful additional information based on the project domain or scale:\n\n- Explanation of key configuration files (e.g., `pyproject.toml`, `Gemfile`, `go.mod`)\n- Framework-specific convention notes\n- Structural changes to consider when scaling up\n\n### 6. Architecture Invariants Seed (codex only, `new-project-plan` mode)\n\n**Conditional**: this step applies only to `new-project-plan` mode. Skip entirely for `reference-refresh` mode.\n\nAfter delivering the tree and key directory descriptions (steps 3–4), offer an optional draft of an Architecture Invariants manifest from the proposed layer structure. This captures recommended boundary rules for the new project — layer dependencies, forbidden edges, and enforcement policy — as advisory metadata that may later be committed to the project's own `architecture-invariants.json`.\n\nOffer the following command (do not run it automatically):\n\n```\nywc-architecture-invariants --mode draft --proposal \u003Cpath> --output \u003Cpath> --approve-write\n```\n\n- `--proposal \u003Cpath>`: path to the proposed scaffold tree (e.g., the markdown document or in-memory structure; clarify with the user if ambiguous)\n- `--output \u003Cpath>`: where the draft manifest will be written (e.g., `architecture-invariants.json` at the project root)\n- `--approve-write`: request that the manifest be persisted; always require explicit user approval before executing this flag\n\n**Important guarantees**:\n- The generated manifest is **never written to disk without explicit user approval** — the offer is informational only.\n- The manifest declares `enforcement: advisory` always — it will never block CI or task execution if the project chooses to adopt it; enforcement upgrades (if any) belong to the adopting project's own gate setup.\n- This step is **skipped entirely** (no manifest offered, no command shown) when the proposed structure yields no forbidden edges — no manifest is needed for a structure with zero dependency violations.\n\nWhen a user accepts the offer, they may run the shown command in their own shell or ask for help executing it outside this skill. The manifest becomes an input to their own downstream Quality Gate setup.\n\n## Output Rules\n\n- Use `├──`, `└──`, `│` characters for tree format\n- Add inline comments (`# description`) next to each Directory\u002FFile\n- If the description is long, separate it into a dedicated section below\n- Avoid unnecessarily deep nesting (4+ levels); show detail only when necessary\n- Prioritize official language\u002FFramework conventions when they exist (e.g., Rails `app\u002F`, Go `cmd\u002F`)\n- Do not generate Docker, CI\u002FCD, Kubernetes, or Deployment-related Directories (`Dockerfile`, `docker-compose`, `.github\u002F`, `deployments\u002F`, `k8s\u002F`, etc.). Focus only on Application Source Code structure\n- In `reference-refresh` mode, return the additive proposal and displayed diff\n  with `Mode: reference-refresh`; the approval stop is terminal for the current\n  turn and is not a completed edit.\n\n## Boundaries\n\n**Will:**\n- Generate Directory structures optimized for language + Framework + Protocol + Architecture combinations\n- Explain the role and rationale behind each Directory\n- Reflect structural differences based on Scale\n- Support compound conditions (e.g., FastAPI + GraphQL + DDD)\n- Carry an explicitly requested advisory Quality Gate Contract seed as bounded metadata only\n\n**Will Not:**\n- Generate actual Code file contents (only provides structure)\n- Generate Boilerplate Code (use `ywc-code-gen` for implementation)\n- Configure Docker, CI\u002FCD, or Monorepo setup (provide guidance upon separate request)\n- Silently apply Trend Check findings, edit references without approval, remove\n  existing reference variants, or route generic documentation review\n- Invent quality-gate commands, command IDs\u002Fdigests, thresholds, ownership, or evidence paths\n- Create project files or treat a scaffold seed as a complete executable contract\n\n## Output Format\n\nReturn the scaffold recommendation as a structured report:\n\n```text\nStatus: \u003CDONE | DONE_WITH_CONCERNS | BLOCKED | NEEDS_CONTEXT | AWAITING_APPROVAL>\nMode: \u003Cscaffold | reference-refresh>\nScaffold: \u003Ctree or named structure>\nRationale: \u003Clanguage \u002F framework \u002F architecture decisions>\nBoundaries: \u003Cwhat is intentionally excluded>\nValidation: \u003Cchecks against requested stack and constraints>\nQuality Gate Contract: N\u002FA — no quality gate contract | \u003Cexplicitly requested advisory seed>\nNext action: \u003Cimplementation handoff | approval required | \"none\">\n```\n\n`reference-refresh` returns `Status: AWAITING_APPROVAL` and `Next action: approval required` after step 3's proposal — never `DONE` before the user has approved the edit.\n\n## Common Mistakes\n\n- Running Trend Check for every request instead of only for large or explicitly\n  contested architecture decisions.\n- Treating current-practice research as permission to rewrite the loaded\n  baseline or silently alter the generated tree.\n- Editing a shared reference during `reference-refresh` before the user approves\n  the additive proposal and displayed diff.\n\n## Validation\n\nBefore finalizing, verify that the scaffold matches the requested language, framework, protocol, architecture, and scale; contains no generated code or deployment assets; avoids unnecessary depth; and explains each major directory's role and dependency direction.\nFor `reference-refresh`, also verify that targets are skill-owned, the proposal\nis additive, existing valid variants remain intact, and the current turn stops\nafter displaying the diff until explicit approval.\n","# Project Scaffold - Directory Structure Generator\n\n**Announce at start:** \"I'm using the ywc-project-scaffold skill to design a directory structure tailored to the chosen tech stack.\"\n\nGenerate well-organized project directory structures in Markdown, tailored to specific tech stacks, architecture patterns, and project requirements.\n\n## Rationalization Defense\n\nWhen tempted to skip a step, check this table first:\n\n| Excuse | Reality |\n|---|---|\n| \"Tech stack not specified, assume Node + TypeScript\" | Always ask for language + framework + scale. Wrong-stack scaffolds are useless. |\n| \"Architecture pattern is implicit\" | Make it explicit (layered \u002F hexagonal \u002F clean \u002F DDD \u002F etc.). The choice cascades through every directory. |\n| \"Skip the rationale per directory, just emit the tree\" | Each non-obvious directory needs a one-line purpose. Trees without rationale invite misuse. |\n| \"Generate actual files instead of a Markdown plan\" | This skill is for plan only. File generation belongs to ywc-code-gen. |\n| \"Project scale guessed at 'medium', do not ask\" | Scale (small \u002F medium \u002F large \u002F monorepo) changes the structure significantly. Always ask. |\n| \"Add every conceivable directory for completeness\" | Over-scaffolding creates empty noise. Include only directories with a current purpose. |\n| \"Run a Trend Check for every scaffold\" | Trend Check is conditional: run it only for large or explicitly contested architecture requests. |\n| \"Refresh a shared reference in place\" | Reference refresh is proposal-first. Show an additive diff and wait for explicit approval before editing the skill-owned reference. |\n| \"The scaffold can fill in quality-gate commands from the stack\" | A Quality Gate Contract is opt-in. Seed advisory metadata only when the user explicitly requests it; use only caller-provided ownership, thresholds, command IDs\u002Fdigests, and evidence paths. Never invent executable commands, digests, or project files. |\n\n**Violating the letter of these rules is violating the spirit.** A scaffold that does not match the user's actual stack becomes immediate technical debt.\n\n## Triggers\n\n- New project initialization with a specific tech stack\n- Directory structure design for language + framework + protocol combinations\n- Planning a not-yet-created folder layout before implementation begins\n- \"Create a project structure with this stack\", \"scaffold a FastAPI project\"\n\n## Usage\n\n```text\nywc-project-scaffold [description]\n```\n\n**Examples:**\n```text\nywc-project-scaffold FastAPI + GraphQL + Clean Architecture, medium scale\nywc-project-scaffold Rails API with gRPC, large scale e-commerce\nywc-project-scaffold NestJS + WebSocket + DDD, small scale chat app\nywc-project-scaffold Go microservice with gRPC and event-driven\n```\n\n## Input Analysis\n\nIdentify the following elements from user input. Ask a focused clarification when language, framework, or scale is missing; use defaults only for protocol and domain when the user does not care.\n\n| Element | Example | Default |\n|---------|---------|---------|\n| **Language** | Python, Ruby, Go, Rust, JavaScript, TypeScript | Required |\n| **Framework** | FastAPI, Rails, NestJS, Next.js, Astro, Gin, Echo | Recommended by language |\n| **Architecture** | Clean Architecture, Hexagonal, DDD, MVC, Layered | Follows Framework conventions |\n| **Protocol** | REST API, GraphQL, gRPC, WebSocket, Message Queue | REST API |\n| **Scale** | small, medium, large | medium |\n| **Domain** | e-commerce, SaaS, chat, CMS, etc. | General-purpose |\n\n### Scale Criteria\n\n- **Small**: Single service, small team (1-3 members), rapid MVP\n- **Medium**: Modularized service, mid-size team (3-8 members), typical production\n- **Large**: Multi-module\u002FMonorepo consideration, large team (8+ members), enterprise-grade\n\n### End-user UI mobile-first policy\n\nWhen scaffolding a new end-user UI that will include layout or style work, note\nthe shared [mobile-first UI policy](..\u002Freferences\u002Fmobile-first-ui.md): author\nthe narrowest-viewport base styles first, then expand with `min-width`\nbreakpoints. An otherwise in-scope PC\u002Ftablet-only UI must record its explicit\nexception. This does not apply to admin\u002Finternal tools, non-UI work, or\nunchanged legacy desktop-first CSS, which do not require a retrofit.\n\n## Modes\n\n### `reference-refresh`\n\nUse this separate mode only when the user asks to review, refresh, or audit one\nor more of this skill's own `references\u002F\u003Clanguage>.md` files. Do not route generic\ndocumentation review here. Identify each target path and infer its language from\nthe filename. If no target can be resolved, return `NEEDS_CONTEXT`.\n\n1. Read the current target reference and use any supplied repository or official\n   documentation evidence directly. If no real-world evidence is supplied,\n   delegate a focused `ywc-tech-research --depth 25` check. Use a language-only\n   topic when the framework is unknown; include the framework only when it is\n   known.\n2. Compare the evidence with the current reference. Exclude rephrasing and\n   patterns already documented. Keep existing alternatives and valid variants.\n3. Produce an additive proposal: a sibling variant or entries in an existing\n   conventions\u002Fkey-points section. Display the proposed diff and return it in\n   `Mode: reference-refresh`.\n4. Stop after the proposal for the current turn and wait for explicit user\n   approval. Only a later approved turn may edit these skill-owned reference\n   files, followed by Markdown lint and structural validation.\n\nThis is the only write exception to the normal project boundary, and it applies\nonly to this skill's own references after approval. It never edits the user's\ntarget project, silently rewrites a reference, removes a valid variant, or\ncreates project files.\n\n## Behavioral Flow\n\n### 1. Analyze - Parse and Confirm Input\n\nExtract the above elements from user input. If there are ambiguous parts, briefly confirm with the user.\n\n### 2. Load References - Load Relevant References\n\nRead language-specific Reference files and refer to the structure matching the given Framework and Architecture.\nIf the Protocol is not REST, also refer to `references\u002Fprotocols.md`.\n\n- Python\u002FFastAPI → `references\u002Fpython.md`\n- Ruby\u002FRails → `references\u002Fruby.md`\n- JavaScript\u002FTypeScript (Next.js, NestJS, Astro) → `references\u002Fjavascript.md`\n- Go (Gin, Echo, standard) → `references\u002Fgo.md`\n- Rust (Actix Web, Axum, standard) → `references\u002Frust.md`\n- Protocol related → `references\u002Fprotocols.md`\n\n**Fallback (no matching reference)**: if the requested language or framework has no matching reference file above, proceed using general project-structure principles and confirm the stack assumptions with the user before generating.\n\n**Compound condition handling**: Combine multiple References. For example, for \"FastAPI + GraphQL\", refer to both `python.md` and `protocols.md` to generate an integrated structure.\n\n### 2.5 Trend Check - Conditional Current-Practice Comparison\n\nAfter loading the relevant references and before finalizing the tree, run a\nfocused Trend Check when either the requested scale is `large` or the user\nexplicitly questions or contests the requested\u002Fselected architecture. Delegate\nthe topic (for example, `\u003Clanguage>\u002F\u003Cframework> project structure conventions`)\nto `ywc-tech-research --depth 25`.\n\n- If the findings confirm the loaded baseline, continue without extra prose.\n- If they show a material delta, retain the loaded baseline and add a clearly\n  labelled `Extras` callout describing the delta and its source.\n- If research is unavailable or inconclusive, retain the baseline and report\n  `DONE_WITH_CONCERNS` with the evidence gap; do not invent a trend.\n\nNever silently substitute research findings into the tree or edit a reference.\nExplicitly skip this branch for uncontested small and medium requests.\n\n### 3. Generate - Create Directory Structure\n\nGenerate Markdown in the following format:\n\n```markdown\n# [Project Name] Directory Structure\n\n> **Stack**: [Language] + [Framework] + [Protocol]\n> **Architecture**: [Pattern]\n> **Scale**: [small\u002Fmedium\u002Flarge]\n\n## Directory Structure\n\n\\```\nproject-root\u002F\n├── src\u002F                          # Application source code\n│   ├── domain\u002F                   # Domain layer - business logic\n│   │   ├── models\u002F               # Domain entities and value objects\n│   │   └── services\u002F             # Domain services (pure business rules)\n│   ├── application\u002F              # Application layer - use cases\n│   │   ├── commands\u002F             # Write operations (CQRS)\n│   │   └── queries\u002F             # Read operations\n│   ...\n\\```\n\n## Key Directory Descriptions\n\n### `src\u002Fdomain\u002F`\nThe domain layer is the core of business logic. It contains only pure business\nrules without any Framework or external dependencies.\n\n**Reason for this structure**: In [Architecture Pattern], the domain is ...\n\n### `src\u002Finfrastructure\u002F`\n...\n```\n\n### Optional Quality Gate Contract seed\n\nOnly when the user explicitly requests quality gates, add a clearly labelled\nadvisory seed to the scaffold report. It is metadata for a later task-generator\nhandoff, not an executable packet or a project-file instruction. Include only\ncaller-provided exact ownership paths\u002Fsymbols, thresholds, immutable command\nIDs\u002Fdigests, and bounded sanitized evidence paths; ask for or return\n`NEEDS_CONTEXT` when any required field is missing. Never infer a command from\nthe selected language\u002Fframework and never create a project file.\n\nEvery normal scaffold report must include a Quality Gate Contract line. When the\nuser does not request a quality gate, its value must be exactly\n`N\u002FA — no quality gate contract`; omit the conditional metadata, and preserve\nthe normal scaffold output and handoff. A reference-refresh proposal remains\nthe only mode that does not produce a normal scaffold report.\n\n### 4. Explain - Describe the Structure\n\nExplain the following for each major Directory:\n\n- **Role**: The responsibility this Directory handles\n- **Reason for this structure**: Why it is organized this way according to the Architecture Pattern or Framework conventions\n- **Example files included**: 1-2 representative files\n- **Dependency direction**: Which Layer it references and which Layer references it (when an Architecture Pattern is applied)\n\n### 5. Extras - Additional Guidance (if needed)\n\nProvide useful additional information based on the project domain or scale:\n\n- Explanation of key configuration files (e.g., `pyproject.toml`, `Gemfile`, `go.mod`)\n- Framework-specific convention notes\n- Structural changes to consider when scaling up\n\n### 6. Architecture Invariants Seed (codex only, `new-project-plan` mode)\n\n**Conditional**: this step applies only to `new-project-plan` mode. Skip entirely for `reference-refresh` mode.\n\nAfter delivering the tree and key directory descriptions (steps 3–4), offer an optional draft of an Architecture Invariants manifest from the proposed layer structure. This captures recommended boundary rules for the new project — layer dependencies, forbidden edges, and enforcement policy — as advisory metadata that may later be committed to the project's own `architecture-invariants.json`.\n\nOffer the following command (do not run it automatically):\n\n```\nywc-architecture-invariants --mode draft --proposal \u003Cpath> --output \u003Cpath> --approve-write\n```\n\n- `--proposal \u003Cpath>`: path to the proposed scaffold tree (e.g., the markdown document or in-memory structure; clarify with the user if ambiguous)\n- `--output \u003Cpath>`: where the draft manifest will be written (e.g., `architecture-invariants.json` at the project root)\n- `--approve-write`: request that the manifest be persisted; always require explicit user approval before executing this flag\n\n**Important guarantees**:\n- The generated manifest is **never written to disk without explicit user approval** — the offer is informational only.\n- The manifest declares `enforcement: advisory` always — it will never block CI or task execution if the project chooses to adopt it; enforcement upgrades (if any) belong to the adopting project's own gate setup.\n- This step is **skipped entirely** (no manifest offered, no command shown) when the proposed structure yields no forbidden edges — no manifest is needed for a structure with zero dependency violations.\n\nWhen a user accepts the offer, they may run the shown command in their own shell or ask for help executing it outside this skill. The manifest becomes an input to their own downstream Quality Gate setup.\n\n## Output Rules\n\n- Use `├──`, `└──`, `│` characters for tree format\n- Add inline comments (`# description`) next to each Directory\u002FFile\n- If the description is long, separate it into a dedicated section below\n- Avoid unnecessarily deep nesting (4+ levels); show detail only when necessary\n- Prioritize official language\u002FFramework conventions when they exist (e.g., Rails `app\u002F`, Go `cmd\u002F`)\n- Do not generate Docker, CI\u002FCD, Kubernetes, or Deployment-related Directories (`Dockerfile`, `docker-compose`, `.github\u002F`, `deployments\u002F`, `k8s\u002F`, etc.). Focus only on Application Source Code structure\n- In `reference-refresh` mode, return the additive proposal and displayed diff\n  with `Mode: reference-refresh`; the approval stop is terminal for the current\n  turn and is not a completed edit.\n\n## Boundaries\n\n**Will:**\n- Generate Directory structures optimized for language + Framework + Protocol + Architecture combinations\n- Explain the role and rationale behind each Directory\n- Reflect structural differences based on Scale\n- Support compound conditions (e.g., FastAPI + GraphQL + DDD)\n- Carry an explicitly requested advisory Quality Gate Contract seed as bounded metadata only\n\n**Will Not:**\n- Generate actual Code file contents (only provides structure)\n- Generate Boilerplate Code (use `ywc-code-gen` for implementation)\n- Configure Docker, CI\u002FCD, or Monorepo setup (provide guidance upon separate request)\n- Silently apply Trend Check findings, edit references without approval, remove\n  existing reference variants, or route generic documentation review\n- Invent quality-gate commands, command IDs\u002Fdigests, thresholds, ownership, or evidence paths\n- Create project files or treat a scaffold seed as a complete executable contract\n\n## Output Format\n\nReturn the scaffold recommendation as a structured report:\n\n```text\nStatus: \u003CDONE | DONE_WITH_CONCERNS | BLOCKED | NEEDS_CONTEXT | AWAITING_APPROVAL>\nMode: \u003Cscaffold | reference-refresh>\nScaffold: \u003Ctree or named structure>\nRationale: \u003Clanguage \u002F framework \u002F architecture decisions>\nBoundaries: \u003Cwhat is intentionally excluded>\nValidation: \u003Cchecks against requested stack and constraints>\nQuality Gate Contract: N\u002FA — no quality gate contract | \u003Cexplicitly requested advisory seed>\nNext action: \u003Cimplementation handoff | approval required | \"none\">\n```\n\n`reference-refresh` returns `Status: AWAITING_APPROVAL` and `Next action: approval required` after step 3's proposal — never `DONE` before the user has approved the edit.\n\n## Common Mistakes\n\n- Running Trend Check for every request instead of only for large or explicitly\n  contested architecture decisions.\n- Treating current-practice research as permission to rewrite the loaded\n  baseline or silently alter the generated tree.\n- Editing a shared reference during `reference-refresh` before the user approves\n  the additive proposal and displayed diff.\n\n## Validation\n\nBefore finalizing, verify that the scaffold matches the requested language, framework, protocol, architecture, and scale; contains no generated code or deployment assets; avoids unnecessary depth; and explains each major directory's role and dependency direction.\nFor `reference-refresh`, also verify that targets are skill-owned, the proposal\nis additive, existing valid variants remain intact, and the current turn stops\nafter displaying the diff until explicit approval.\n",{"name":5,"description":7},"main","7e8ac872e53df8c89d75663e031626281a2a2f5c","codex\u002Fskills\u002Fywc-project-scaffold",1,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit","https:\u002F\u002Fgithub.com\u002Fyongwoon","https:\u002F\u002Fwww.webhani.com","2026-11-08 17:14:59",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add yongwoon\u002Fywc-agent-toolkit --skill ywc-project-scaffold",{"tool":37,"command":38},"bunx","bunx skills add yongwoon\u002Fywc-agent-toolkit --skill ywc-project-scaffold",{"tool":40,"command":41},"pnpm","pnpm dlx skills add yongwoon\u002Fywc-agent-toolkit --skill ywc-project-scaffold","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002FSKILL.md",true,[45,51,55,59,63,67,71,75,79,83,87,91,95,99],{"path":46,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":49,"sourceHtmlUrl":50},"agents\u002Fopenai.yaml","REFERENCE","参考文档",242,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002Fagents\u002Fopenai.yaml",{"path":52,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":53,"sourceHtmlUrl":54},"evals\u002Fevals.json",3364,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002Fevals\u002Fevals.json",{"path":56,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":57,"sourceHtmlUrl":58},"README.en.md",1148,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002FREADME.en.md",{"path":60,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":61,"sourceHtmlUrl":62},"README.es.md",1454,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002FREADME.es.md",{"path":64,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":65,"sourceHtmlUrl":66},"README.ja.md",1152,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002FREADME.ja.md",{"path":68,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":69,"sourceHtmlUrl":70},"README.ko.md",1127,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002FREADME.ko.md",{"path":72,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":73,"sourceHtmlUrl":74},"README.md",5661,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002FREADME.md",{"path":76,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":77,"sourceHtmlUrl":78},"README.zh.md",1213,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002FREADME.zh.md",{"path":80,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Fgo.md",14400,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002Freferences\u002Fgo.md",{"path":84,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Fjavascript.md",21228,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002Freferences\u002Fjavascript.md",{"path":88,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Fprotocols.md",12358,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002Freferences\u002Fprotocols.md",{"path":92,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Fpython.md",11574,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002Freferences\u002Fpython.md",{"path":96,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Fruby.md",7352,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002Freferences\u002Fruby.md",{"path":100,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":101,"sourceHtmlUrl":102},"references\u002Frust.md",11926,"https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fcodex\u002Fskills\u002Fywc-project-scaffold\u002Freferences\u002Frust.md",[104,110,116,123,130,137],{"skillNo":105,"name":106,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":18},"01M72TQ84GTCPCV2VJ778V17TW","missing-frontmatter","https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fcodex-description-limit\u002Fmissing-frontmatter\u002FSKILL.md",[],[],{"skillNo":111,"name":112,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":18},"01M72TQ6M4BFWE7P9EPW0GZDCM","malformed-frontmatter","https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fcodex-description-limit\u002Fmalformed-frontmatter\u002FSKILL.md",[],[],{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":18},"01M72TQ3ESGKXZ4QRWGTX92BKJ","fixture-501-fail","(ywc) Use when aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Do not use for x.","https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fcodex-description-limit\u002F501-fail\u002FSKILL.md",[],[],{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":18},"01M72TQ0HJ8H3R37J9WPWGKJZR","fixture-500-pass","(ywc) Use when aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Do not use for x.","https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Fcodex-description-limit\u002F500-pass\u002FSKILL.md",[],[],{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":18},"01M72TPWNCC7NEYD0D9N12KSQS","ywc-worktrees","(ywc) Use when creating, auditing, pruning, or resolving git worktrees for isolated task workspaces, whether delegated from an executor or used standalone. Triggers: \"worktree 생성\", \"worktree audit\", \"worktree 정리\", \"worktree prune\", \"ywc-worktrees\", \"create worktree\". Do not use for branch creation\u002Fdeletion alone, PR creation (use ywc-create-pr), CI or merge delivery (use ywc-finish-branch), task orchestration (use ywc-sequential-executor or ywc-parallel-executor), or non-git isolation.","https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Fywc-agent-toolkit\u002Fskills\u002Fywc-worktrees\u002FSKILL.md",[],[],{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":18},"01M72TPRNR3E6QWB91GM98ABBV","ywc-wayfinder","(ywc) Use when a large or uncertain change needs multi-session discovery with a deterministic local map and exactly one active ticket before planning or implementation. Triggers: \"wayfinder\", \"길찾기\", \"discovery map\", \"multi-session discovery\", \"탐색 ticket\", \"経路整理\", \"探索マップ\", \"ywc-wayfinder\". Do not use for ordinary planning (use ywc-plan), idea clarification (use ywc-brainstorm), direct implementation, or tracker\u002Fdatabase writes outside the local Markdown map.","https:\u002F\u002Fgithub.com\u002Fyongwoon\u002Fywc-agent-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Fywc-agent-toolkit\u002Fskills\u002Fywc-wayfinder\u002FSKILL.md",[],[]]