Skip to main content

ix-docs

Generate narrative-first, importance-weighted documentation for a repo, system, or subsystem with a selective reference layer. Use --full for deeper module/class/method coverage.

Jump to install

Source facts

Repository
ix-infrastructure/ix-cursor-plugin
Last source activity
April 24, 2026 at 21:13
Detected SKILL.md language
English
Stars
1
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
ix-docs
description
Generate narrative-first, importance-weighted documentation for a repo, system, or subsystem with a selective reference layer. Use --full for deeper module/class/method coverage.
argument-hint
<target> [--full] [--style narrative|reference|hybrid] [--split] [--single-doc] [--out <path>] [--save [path]]
## Goal Produce documentation that helps a new engineer understand the system quickly and gives an LLM strong architectural context without drowning it in low-value detail. Write like real engineering documentation for a framework or subsystem: - teach the system - explain how it works - show where the important parts live - surface risks and fragile boundaries - point the reader to the next files or symbols to inspect Never write a raw report dump. --- ## Core model Every `ix-docs` run produces **two layers**: 1. **Narrative layer** (always first) — human-readable explanation, onboarding-focused, architecture, flow, usage, risks, navigation guidance 2. **Reference layer** (always present, but selective) — compressed summaries of important modules, classes, and services; short, structured, high-signal entries; no code dumping **Mode behavior** - `ix-docs <target>`: narrative-heavy by default, with a minimal selective reference appendix - `ix-docs <target> --full`: deeper coverage for important components, still importance-weighted **Style behavior** - `--style narrative` (default): prose-first narrative sections; reference layer stays compact - `--style reference`: tighter, docs-site style structure; narrative stays brief but is not removed - `--style hybrid`: full narrative plus fuller selective reference; best match for `--full` --- ## Flags | Fragment | Variable | Default | |---|---|---| | first non-flag token | `TARGET` | required | | `--full` | `FULL=true` | false | | `--style narrative\|reference\|hybrid` | `STYLE` | `narrative` | | `--split` | `SPLIT=true` | false | | `--single-doc` | `SINGLE=true` | false | | `--out <path>` | `OUT_PATH` | auto-detect | | `--save [path]` | alias for `--out` when `--out` is absent; if both are given, `--out` wins | — | **Parsing** Scan `$ARGUMENTS` left to right: - The first token that does not begin with `--` is `TARGET` - `--style` and `--out` consume the next token as their value (also accept `--style=value` form) - All other flags are boolean toggles - If `TARGET` is missing, stop and ask the user to supply a target before continuing **Output rules** - `--single-doc` forces one Markdown file - `--split` produces a directory with `index.md` plus per-system or per-subsystem docs - if neither is set and `FULL=true` on a repo with more than 10 subsystems, auto-enable `SPLIT=true` - `--single-doc` overrides auto-splitting **Output path auto-detection** 1. `docs/` exists at workspace root → `docs/<target-name>.md` or `docs/<target-name>/` 2. `doc/` exists → `doc/<target-name>.md` or `doc/<target-name>/` 3. otherwise → `<target-name>.md` or `<target-name>/` at workspace root If `FULL=true`, tell the user the planned mode, output path, and whether splitting was auto-enabled before generating the docs. --- ## Non-negotiable rules 1. **Graph first** — start with `ix_subsystems`, `ix_overview`, `ix_rank`, `ix_explain`; use `ix_read` only after graph data leaves an important behavior unclear 2. **Importance-weighted expansion** — expand detail by centrality, risk, coupling, orchestration role, and user focus; never treat all modules equally 3. **Selective low-level detail** — default mode: module and class summaries only for important parts; full mode: method summaries only for key classes or services 4. **No raw dumps** — never output raw JSON, never paste tool logs, never dump full inventories 5. **No redundancy** — group repeated patterns; if several modules have the same role, summarize the pattern once 6. **Code reads are rare** — default mode: at most 2 `ix_read` calls total; full mode: at most 5 `ix_read` calls total; symbol-level only --- ## Coverage policy Use the following ranking factors to decide what gets expanded: 1. **Centrality**: `ix_rank` results, caller count, dependent count 2. **Risk**: `ix_impact` 3. **Coupling**: cross-system or cross-subsystem relationships 4. **Orchestration role**: coordinators, entry points, workflow managers from `ix_explain` 5. **User focus**: the exact target and its immediate neighborhood ### Always include - top-level architecture - all major subsystems in scope - the most important modules or services ### Sometimes include - important files - key classes or services - notable boundary functions or entry points ### Only in `--full` - selective method summaries for the most important classes or services - expanded per-subsystem module coverage ### Never - exhaustive inventories - equal treatment for every module - long method lists ### Expansion budgets **Default mode** - repo or large system: cover all major subsystems, expand the top 3–5 most important ones, reference 5–8 key components total - subsystem or module: expand the target fully, reference the top 5–8 entities in scope **Full mode** - repo or large system: cover all major systems, expand the top 5–8 by importance - subsystem or module: expand the top 8–12 entities, add method summaries for the top 3–5 classes or services only --- ## Command strategy Do not call every tool mechanically. Reuse earlier results and stop when additional depth would not materially improve the documentation. ### Phase 1 — Scope **Stop early:** If `TARGET` is an unambiguous symbol or small component and scope is clear from `ix_stats` alone, skip the remaining Phase 1 calls and proceed to Phase 2. Always start by calling in parallel: - `ix_stats` with `{}` - `ix_subsystems` with `{}` - `ix_briefing` with `{}` **Pro check:** If `ix_briefing` returns `ok: true`, Pro is available. Extract `data.goals`, `data.decisions` for use in **[Pro]** steps. If it returns `ok: false`, skip all Pro-labeled steps. If `TARGET` is not obviously the whole repo, call `ix_locate` with `{ "symbol": "<TARGET>" }`. Resolve whether the target is: repo / top-level system / subsystem / module or file / class, service, or symbol. If ambiguous, resolve before proceeding. ### Parallel agent dispatch (large / full-mode runs) **Trigger:** `FULL=true` AND the target is a repo or top-level system with **more than 5 subsystems**. **Phase 1 reuse:** If subsystem and rank data is already present in context from a prior `/ix-understand` run in this session, skip those Phase 1 calls and use the cached data directly. **Step 1 — Per-system agents:** From the Phase 1 rank results, select the top systems by importance (cap at 5). For each, spawn one `ix-system-explorer` agent: > Task template: *"Build a complete architectural mental model of `$SYSTEM` within `$TARGET`. Focus on: (1) internal module structure and responsibilities, (2) the most important and most-coupled components, (3) main execution flows within this subsystem, (4) outbound dependencies and shared interfaces with other subsystems. Return structured findings with: a one-paragraph subsystem summary, top 5 important modules with roles, key internal flows, and coupling risks."* **Step 2 — Cross-cutting agent:** Immediately after spawning the per-system agents, spawn one additional `ix-system-explorer` agent: > Task: *"In the `$TARGET` codebase, identify only what crosses subsystem boundaries: (1) shared types, base classes, and utilities used across multiple subsystems, (2) cross-system execution flows and handoff points, (3) infrastructure or platform services that multiple systems depend on, (4) god-modules or highly-central components visible from the dependency graph. Do NOT explore individual subsystems in depth — focus exclusively on cross-cutting structure. Return structured findings."* **Do not wait** for agents before starting Phase 2. Continue running Phase 2 calls while agents work. **Step 3 — Synthesis:** Merge agent findings with Phase 2/3 graph results. Per-system outputs → per-system narrative sections. Cross-cutting output → Dependencies & Relationships section. If an agent contradicts graph data, prefer the graph. If an agent fails, continue without it and note the gap. **Skip this dispatch entirely** if: `FULL=false`; target is a subsystem, module, or symbol; or the repo has 5 or fewer subsystems. ### Phase 2 — Architecture **Stop when:** you have identified the top 3–5 important components and the subsystem structure is clear. Call in parallel (as relevant): - `ix_overview` with `{ "target": "<TARGET>" }` (skip if TARGET is the whole repo) - `ix_rank` with `{ "by": "dependents", "kind": "class", "top": 10 }` - `ix_rank` with `{ "by": "callers", "kind": "function", "top": 10 }` For module or file targets, also call: - `ix_imports` with `{ "symbol": "<TARGET>" }` Full mode: raise rank `top` to 20; inspect the most important systems first, never alphabetically. ### Phase 3 — Behavior **Stop when:** the main execution flow is understood. Skip `ix_trace` if `ix_explain` results are sufficient. Call `ix_explain` with `{ "symbol": "<TARGET>" }`. Also call `ix_explain` for the most important orchestrators, services, or entry points identified in Phase 2. Behavior budget: - default mode: explain the top 3–5 important entities - full mode: for each important subsystem, explain the top 5 classes or services and the top 3 functions or entry points Optional: call `ix_trace` with `{ "symbol": "<entry-point>" }` only if the main execution flow is still unclear after `ix_explain`. Do not narrate every edge in a trace. ### Phase 4 — Relationships **Stop when:** for symbol-level or small single-module targets, skip this phase entirely. **Repo-level guard:** If TARGET is the whole repo, skip `ix_callers`, `ix_callees`, and `ix_depends` on the repo itself — these are not meaningful at repo scope. Instead run them for the top 3–5 boundary components identified in Phase 2. Call as relevant: - `ix_callers` with `{ "symbol": "<TARGET>" }` (limit 15) - `ix_callees` with `{ "symbol": "<TARGET>" }` (limit 15) - `ix_depends` with `{ "symbol": "<TARGET>", "depth": 2 }` For large result sets: group callers by subsystem, summarize repeated patterns, never list more than 15 similar names individually. ### Phase 5 — Risk **Repo-level gate:** If TARGET is the whole repo, skip `ix_impact` on the repo itself. Instead run it for the top 3–5 high-centrality entities from Phase 2. Otherwise call `ix_impact` with `{ "target": "<TARGET>" }`. Full mode: also run `ix_impact` for the top 2–5 high-centrality entities. ### Phase 6 — Health **Stop when:** for symbol-level or single-module targets, skip this phase. Call `ix_smells` with `{}`. Filter by path prefix after retrieval if the target is a subsystem or module. **[Pro]** If Pro is available and `data.decisions` is non-empty, incorporate relevant architectural decisions in the risk and complexity section. Prioritize: god modules, highly coupled regions, orphaned components, subsystems with weak boundaries. Group health issues by subsystem, not as a flat dump. ### Phase 7 — Optional reads **Stop when:** you reach the read budget. Never exceed it — omit or note gaps instead. Only read code when graph data is insufficient for an important behavior. Allowed use cases: - orchestrators with unclear control flow - critical entry points on the main execution path - high-risk components whose role is still ambiguous after `ix_explain` Call `ix_read` with `{ "symbol": "<symbol>" }`. Extract only the behavior needed to clarify the docs — do not summarize implementation line-by-line. --- ## Writing rules by style ### `--style narrative` - lead with prose; each narrative section should explain how to think about the system - reference layer stays compressed ### `--style reference` - keep the narrative layer first, but tighten it to short paragraphs - use more headings, bullets, and compact summaries - reference layer more prominent than in narrative mode ### `--style hybrid` - full narrative layer plus fuller reference layer - best option for `--full`, onboarding docs, and handoff docs --- ## Output structure ```markdown # [Target] — Documentation > Generated: [date] > Scope: [repo | system | subsystem | module | symbol] > Mode: [standard | full] > Style: [narrative | reference | hybrid] > Evidence quality: [strong | partial | weak] > Coverage: [what was expanded vs summarized] ## Part 1 — Narrative ### 1. Overview - what the system is, what it does, why it exists - **[Pro]** active project goals this system serves (from briefing data.goals), if available ### 2. Architecture - systems → subsystems → modules - boundaries and responsibilities - high-level structure ### 3. How It Works - main execution flows - request or data lifecycle - orchestration paths ### 4. Key Components - the most important modules, classes, or services - why they matter ### 5. Dependencies & Relationships - major dependencies - cross-system interactions - important coupling points ### 6. Risk & Complexity - high-risk areas - fragile components - change sensitivity ### 7. How to Work With This Repo - where to start - how to navigate - common workflows - what to modify carefully ### 8. Where to Go Deeper - next files, modules, or symbols to inspect - suggested exploration paths ## Part 2 — Selective Reference ### Module Summary For each major module: purpose, responsibilities, dependencies, key contained components ### Class / Service Summary For each important class or service: role, what it manages, where it is used ### Method Summary Only in `--full`, and only for key classes or services: method name, 1–2 line role summary ``` --- ## Split output Use split output when `--split` is passed or `FULL=true` on a large repo. ``` <OUT_DIR>/ index.md <system-1>.md <system-2>.md ... <lower-ranked-system>-stub.md ``` `index.md` should contain: overall overview, top-level architecture, most important cross-system flows, navigation guidance, links to per-system docs. Per-system docs: full narrative structure plus selective reference for that system. Stubs for lower-ranked systems: one-paragraph overview, top 3 components, one risk note, instruction to rerun `/ix-docs <system> --full` for deeper coverage. --- ## Post-write confirmation After writing the file or files, confirm: ``` Documentation written. Mode: [standard | full] Style: [narrative | reference | hybrid] Output: [path or directory] Scope: [repo/system/subsystem/module/symbol] Coverage: [systems/subsystems/components expanded] Summary: [2–3 sentences on the system and the most important architectural fact] [If split:] Files written: [index + key system docs + stubs] ```
View on GitHub