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で見る