Skip to main content

tree-generator

Use when turning an approved domain_map.yaml and skill_spec.md into a full-library skill tree or explicitly auditing its structure and dependencies. For agreed batches and source-driven guidance updates, use generate-skill instead.

소스 정보

저장소
TanStack/intent
최근 소스 활동
2026년 10월 4일 21:38
감지된 SKILL.md 언어
영어
스타
341
포크
25

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
3 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
tree-generator
description
Use when turning an approved domain_map.yaml and skill_spec.md into a full-library skill tree or explicitly auditing its structure and dependencies. For agreed batches and source-driven guidance updates, use generate-skill instead.
metadata
{"purpose":"Generate, update, and version a complete skill tree (collection of SKILL.md files) for any JavaScript or TypeScript library. Produces core skills (framework-agnostic) and framework skills (React, Solid, Vue bindings) with dependency linking. Activate when producing skill files from a domain map or explicitly designing or auditing a full-library skill set. Takes domain_map.yaml and skill_spec.md from domain-discovery as primary inputs.\n","version":"3.0","category":"meta-tooling","input_artifacts":"skills/_artifacts/domain_map.yaml; skills/_artifacts/skill_spec.md","output_artifacts":"skills/_artifacts/skill_tree.yaml","skills":"domain-discovery"}
# Skill Tree Generator You produce and maintain a tree of SKILL.md files for a library. Every file you create is read directly by AI coding agents across Claude, Codex, Gemini, Cursor, Copilot, and open-source models. Your output must be portable, concise, and grounded in actual library behavior. ### Skill types Every skill has a `metadata.type` field in its frontmatter. Valid types: | Type | Purpose | Example | | ------------- | ---------------------------------------------------------- | ------------------------- | | `core` | Framework-agnostic concepts, configuration, patterns | `db-core` | | `sub-skill` | A focused sub-topic within a core or framework skill | `db-core/live-queries` | | `framework` | Framework-specific bindings, hooks, components | `react-db` | | `lifecycle` | Cross-cutting developer journey (getting started, go-live) | `electric-quickstart` | | `composition` | Integration between two or more libraries | `electric-drizzle` | | `security` | Audit checklist or security validation | `electric-security-check` | Agents discover skills via `npm exec --no -- intent list` and read them directly from `node_modules`. Framework skills declare a `requires` dependency on their core skill so agents load them in the right order. There are two workflows. Detect which applies. **Workflow A — Generate:** Build a complete skill tree from a domain map. **Workflow B — Update:** Review identified changes against existing guidance. Before writing any skill, apply the [shared writing rules](../generate-skill/SKILL.md#writing-rules). --- ## Workflow A — Generate skill tree ### Prerequisites You need one of: - `skills/_artifacts/domain_map.yaml` and `skills/_artifacts/skill_spec.md` from domain-discovery - Raw library documentation and source code (run a compressed domain discovery first) If starting from raw docs without a domain map, run a compressed discovery. This produces lower-fidelity output than the full domain-discovery skill — prefer running that when time permits. 1. Build a concept inventory (every export, config key, constraint, warning) 2. Group into capability domains using work-oriented names (let library complexity drive the count — 2–3 for focused libraries, more for large frameworks) 3. Identify independently useful developer tasks; combine overlapping guidance and justify each independent loading condition 4. Extract the failure modes supported by the sources for each task 5. Proceed to Step 1 below ### Scaffold flow output If the maintainer uses a custom skills root, replace `skills/` in the paths below with their chosen directory. Focused batches use the format below through generate-skill’s [planning record procedure](../generate-skill/references/planning-records.md), extending the existing tree with the batch. Reading this format does not start full-library discovery. For the full-library scaffold workflow, produce a single artifact before writing any SKILL.md files: - `skills/_artifacts/skill_tree.yaml` This file enumerates every skill that must be generated in the next step. Do not write SKILL.md files yet unless explicitly asked. Use this format: ```yaml # skills/_artifacts/skill_tree.yaml library: name: '[package-name]' version: '[version]' repository: '[repo URL]' description: '[one line]' generated_from: domain_map: 'skills/_artifacts/domain_map.yaml' skill_spec: 'skills/_artifacts/skill_spec.md' generated_at: '[ISO date]' skills: - name: '[task-focused skill name]' slug: '[kebab-case]' type: 'core | sub-skill | framework | lifecycle | composition | security' domain: '[domain slug]' path: 'skills/[path]/SKILL.md' package: '[package directory, e.g. packages/client]' # monorepo only — which package this skill belongs to description: 'Use when [concrete developer tasks or conditions] with [library/framework]. [Adjacent-task boundary, when needed.]' purpose: '[Descriptive explanation; emitted as metadata.purpose in SKILL.md.]' requires: - '[other skill slugs]' # omit if none sources: - '[Owner/repo]:docs/[path].md' - '[Owner/repo]:src/[path].ts' subsystems: - '[adapter/backend name]' # omit if none references: - 'references/[file].md' # omit if none ``` **Monorepo layout:** For monorepos, each skill's `path` is relative to its package directory (e.g. `packages/client/skills/core/SKILL.md`). Set the `package` field so generate-skill knows where to write the file. The domain map artifacts stay at the repo root. ### Minimal library fast path If tasks stand alone, there are no framework adapter packages, and a shared overview would add no necessary guidance, skip the core overview + sub-skill registry pattern. Instead: - Use **flat structure** — each skill gets its own `skills/[skill-name]/SKILL.md` - **No router skill** — the intent CLI `list` command is sufficient for discovery - **No core overview skill** — go directly to individual skill files - Each skill is type `core` (not `sub-skill`) and stands alone without a parent registry - Skip Step 2 (core overview) and Step 3 (sub-skills) — go directly to writing individual skills as standalone core skills using Step 3's body format This avoids unnecessary scaffolding for focused libraries where the overhead of a hierarchical skill tree exceeds the navigation benefit. ### Step 1 — Plan the file tree From the domain map, each entry in the `skills` list becomes a SKILL.md file. The `type` field on each skill (`core`, `framework`, `lifecycle`, `composition`) determines where it goes. Determine the file tree: **Core vs framework decision:** | Content | Goes in... | | ---------------------------------------------- | ---------- | | Mental models, concepts, lifecycle | Core | | Configuration options and their effects | Core | | Type system, generics, inference | Core | | Common mistakes that apply to all frameworks | Core | | Hooks (`useX`, `createX`) | Framework | | Components (`<Link>`, `<Outlet>`) | Framework | | Provider setup and wiring | Framework | | SSR/hydration patterns specific to a framework | Framework | | Framework-specific gotchas | Framework | If a library has no framework adapters, produce only core skills. **Framework-integration domain decomposition:** If the domain map from domain-discovery contains a single "Framework Integration" domain and the library has separate framework adapter packages, decompose it into per-framework skills co-located with each adapter package. Do not produce a single monolithic framework-integration skill that covers React, Vue, Solid, etc. in one file. **Adapter-heavy domains:** When a domain covers multiple backends or adapters with distinct config interfaces (e.g. 5 sync adapters, 3 database drivers), keep one SKILL.md for the shared patterns but produce one reference file per adapter with its specific config, setup, and gotchas. The SKILL.md covers what's common; each `references/[adapter].md` covers what's unique. **Flat vs nested structure:** Choose the structure that matches how the domain map's skills are shaped. Use **nested** (`[lib]-core/[domain]/SKILL.md`) when: - Developer tasks cluster cleanly into conceptual domains - The library has a clear core + framework adapter split - Skills build on each other in a layered way Use **flat** (`skills/[skill-name]/SKILL.md`) when: - Developer tasks are task-focused and don't nest into domains - The domain discovery process recommended task-focused skills - Skills map 1:1 to distinct developer intents with minimal overlap Both are valid. The domain map's `type` field and structure will signal which fits. When in doubt, prefer flat — it's simpler and each skill is independently discoverable. **Nested structure:** ``` skills/ ├── [lib]-core/ # Core skill for the library │ ├── SKILL.md # Core overview + sub-skill registry │ ├── [domain-1]/ │ │ └── SKILL.md # Core sub-skill │ ├── [domain-2]/ │ │ └── SKILL.md │ └── references/ # Optional overflow content │ └── options.md ├── react-[lib]/ # React framework skill │ ├── SKILL.md # React overview + sub-skill registry │ ├── [domain-1]/ │ │ └── SKILL.md # React-specific sub-skill │ └── references/ ├── solid-[lib]/ # Solid framework skill (if applicable) │ └── SKILL.md ├── vue-[lib]/ # Vue framework skill (if applicable) │ └── SKILL.md ``` **Flat structure:** ``` skills/ ├── [lib]-shapes/ # Task-focused skill │ ├── SKILL.md │ └── references/ │ └── shape-options.md ├── [lib]-auth/ # Another task skill │ └── SKILL.md ├── [lib]-proxy/ │ └── SKILL.md ├── [lib]-quickstart/ # Lifecycle skill │ └── SKILL.md ├── [lib]-go-live/ # Lifecycle skill │ └── SKILL.md ├── [lib]-drizzle/ # Composition skill │ └── SKILL.md ``` **Router skill:** Add a router only when its decision guidance helps agents choose between tasks that `intent list` and the skills' descriptions cannot adequately distinguish. Skill count alone does not justify a router. **Source repository layout for npm distribution:** Skills must ship with their respective packages so they're available in `node_modules` after install. In a monorepo, co-locate skills with the package they document: ``` packages/ ├── [lib]/ # Core package │ ├── src/ │ ├── skills/ # Core skills live here │ │ ├── [lib]-core/ │ │ │ ├── SKILL.md │ │ │ └── [domain]/SKILL.md │ │ └── compositions/ # Composition skills with co-used libs │ └── package.json # Add "skills" to files array ├── react-[lib]/ # React adapter package │ ├── src/ │ ├── skills/ # React framework skills live here │ │ └── react-[lib]/ │ │ └── SKILL.md │ └── package.json # Add "skills" to files array ``` Publishing configuration is separate from authoring. When the maintainer requests it, `npm exec --no -- intent edit-package-json` prepares the package; review its resulting diff. ### Steps 2–7 — Write skills When writing skill files (after the scaffold plan is approved), read [the skill-writing procedures and templates](references/write-skills.md). Follow the applicable steps in order: core overview, core sub-skills, framework skills, tension notes, composition skills, and checklist skills. The reference owns each type's frontmatter, body, dependency rules, failure-mode handling, and reference-file criteria. For the minimal-library fast path, use Step 3's body format for standalone core skills. For scaffold-only requests, stop after `skill_tree.yaml`. ### Step 8 — Validate the complete tree Run every check before outputting. Fix any failures before proceeding. | Check | Rule | | ------------------------------------------------- | ------------------------------------------------------------------------------------------- | | Every skill from domain_map has a SKILL.md | No orphaned skills | | Core/framework split is clean | No framework hooks in core skills | | Every framework skill has `requires` | Links to its core skill | | Framework skill opens with dependency note | "builds on [core]" prose line | | Every skill under 500 lines | Move excess to references/ | | Every code block has real imports | Exact package name, correct adapter | | No concept explanations | No "TypeScript is...", no "React hooks are..." | | No marketing prose | First body line is heading or dependency note | | Every code block is complete | Works without modification when pasted | | Common Mistakes cover real failures | Preserve silent failures and necessary error handling | | Common Mistakes are library-specific | Not generic TS/React mistakes | | Common Mistakes are sourced | Every mistake traceable to doc or source | | Core skills reference framework skills | "For React usage, see..." | | Framework skills don't repeat core content | Only framework-specific | | Composition skills don't repeat individual skills | Only the seam | | `name` matches parent directory | `name: search-params` → `router-core/search-params/SKILL.md` | | `sources` filled in sub-skills | At least one repo:path per sub-skill | | Cross-skill failures in all relevant files | Every affected entry point routes to the authoritative failure guidance | | Tensions noted in affected skills | Each tension has notes in all involved domain skills | | Framework domains decomposed per-package | No single skill covering multiple framework adapters | | Adapter-heavy domains have references | Conditional adapter details have precise reading pointers | | Dense API surfaces in references | Conditional API details are referenced by task relevance | | Checklist skills use audit body | Security/go-live skills use checklist template, not Setup → Core Patterns → Common Mistakes | --- ## Workflow B — Update existing skills When a library version, changelog, migration guide, or accuracy report requires updating existing skills, read [the update workflow](references/update-skills.md). Use the focused procedure it points to for each affected task; keep existing artifact decisions unless the evidence requires a correction. Apply the constraints below to every updated file. ## Constraints — verify for every file | Check | Rule | | ------------------------------------------- | ----------------------------------------------------------------------------------- | | Under 500 lines per SKILL.md | Use relevant references while retaining necessary guidance | | Real imports in every code block | Exact package, correct adapter | | No external concept explanations | No "TypeScript is...", no "React hooks are..." — library-specific concepts are fine | | No marketing prose | First body line is heading, code, or dependency note | | Complete code blocks | Every block works without modification | | Common Mistakes cover real failures | Preserve silent failures and necessary error handling | | Common Mistakes are library-specific | Not generic TS/React mistakes | | Common Mistakes are sourced | Traceable to doc or source | | Core skills are framework-agnostic | No hooks, no components, no providers | | Framework skills have `requires` | Lists core dependency | | Framework skills open with dependency note | First prose line references core | | Composition skills require all dependencies | Lists all core + framework skills | | `name` matches parent directory | `name: search-params` → `router-core/search-params/SKILL.md` | | `library_version` in every frontmatter | Which version the skill targets | | Cross-skill failures accessible | Each listed skill points to the authoritative failure guidance | | Tensions cross-referenced | Tension notes in each involved skill point to the other | | Skills ship with packages | `"skills"` in package.json `files` array | | Checklist skills use audit template | Security/go-live skills use checklist body, not standard body | --- ## Cross-model compatibility Output is consumed by all major AI coding agents. To ensure consistency: - Markdown with YAML frontmatter — universally parsed - No XML tags in generated skill content - Code blocks use triple backticks with language annotation - Section boundaries use ## headers - Descriptions state distinct loading conditions - Examples show concrete values, never placeholders - Positive instructions ("Use X") over negative ("Don't use Y") - Critical info at start or end of sections (not buried in middle) - Each SKILL.md is self-contained except for declared `requires` --- ## Output order When generating a complete skill tree: 1. Core overview SKILL.md — entry point for the library 2. Core sub-skills in domain order 3. Framework overview SKILL.md for each framework 4. Framework sub-skills 5. Composition skills (if applicable) 6. Security skills (if applicable) 7. references/ files for any skill that needs them 8. CHANGELOG.md entry When updating: Return the evidence, focused diffs or justified no-ops, validation results, and unresolved uncertainty required by generate-skill. ---
GitHub에서 보기