Generate dependency diagrams from code or architecture. Traces code-level dependencies (hooks, queries, providers, components) or maps high-level system architecture. Outputs Mermaid diagrams in markdown or FigJam via Figma MCP. Use when the user asks to map dependencies, visualize relationships, create a dependency diagram, diagram an architecture, or trace how systems connect.
Scanned 9/2/2026
Install to Claude Code
npx -y skills add majiayu000/claude-skill-registry --skill investigate-diagram --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Investigate Diagram?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/majiayu000-investigate-diagram)More formats (shields.io, HTML) on the badges page.
---
name: investigate-diagram
description: Generate dependency diagrams from code or architecture. Traces code-level dependencies (hooks, queries, providers, components) or maps high-level system architecture. Outputs Mermaid diagrams in markdown or FigJam via Figma MCP. Use when the user asks to map dependencies, visualize relationships, create a dependency diagram, diagram an architecture, or trace how systems connect.
---
# Dependency Diagram Generator
Generate dependency diagrams at any level — from code-level hook/query tracing to high-level architecture maps.
## Phase 1 — Gather Requirements
Use AskQuestion to collect:
### 1. Scope detection
| Scope | When to use | Examples |
|---|---|---|
| **Code-level** | Tracing function/hook/component dependencies | "Map dependencies of useQueryUserAccounts", "What calls AccountProvider?" |
| **Architecture-level** | Mapping services, teams, integrations | "Diagram the Payroll system", "Map Risk Engineering architecture" |
If ambiguous, ask which scope the user intends.
### 2. Entry points
- **Code-level**: function names, hook names, component names, or file paths
- **Architecture-level**: system, team, or domain name
### 3. Tracing options (code-level only)
Ask with multi-select:
| Option | What it traces |
|---|---|
| Hook calls | `useX()` calls inside function bodies |
| GraphQL queries | `useQuery`, `useSuspenseQuery`, `useMutation` with document imports |
| Context providers | React context providers consumed |
| HOC wrappers | `withX()` higher-order components |
| All of the above | Everything |
Default: **All of the above**
### 4. Depth (code-level only)
| Option | Behavior |
|---|---|
| Bounded (default: 3) | Trace up to N levels |
| Full tree | Trace until no more dependencies found |
| Immediate only | Direct parents/children only |
### 5. Output format
| Option | Requirement |
|---|---|
| **Mermaid in markdown** (default) | None |
| **FigJam via Figma MCP** | Requires Figma MCP connected — verify with ToolSearch |
### 6. Output location
Suggest a filename based on entry points, e.g. `dependency-graph-useQueryUserAccounts.md`.
---
## Phase 2 — Research
### Code-level: Trace Dependencies
Launch parallel explore subagents to trace the graph in both directions from each entry point.
#### Tracing parents (what does this symbol depend on?)
For each file, look for:
- **Hook calls**: `useX(...)` calls → find definition files
- **GraphQL documents**: imports of `*Document` passed to query/mutation hooks
- **Context reads**: `useContext(XContext)` or custom context hooks
- **Direct imports**: named imports from other project files (not node_modules)
#### Tracing children (what consumes this symbol?)
Search the codebase for:
- **Import references**: grep for the export name across `.ts`/`.tsx` files
- **Hook consumers**: files that call `useX()` where X is the traced symbol
- **Provider wrappers**: files that render `<XProvider>` or use `withX()` HOC
#### Classifying nodes
| Type | How to identify |
|---|---|
| `graphql-query` | Fires a query/mutation via document import |
| `data-hook` | Custom hook that fires a GraphQL query |
| `context-provider` | Exports a React context Provider |
| `composition-hook` | Custom hook calling other hooks, no query |
| `component` | React component (JSX return) |
| `hoc` | Higher-order component (`withX`) |
| `deprecated` | Has `@deprecated` JSDoc tag |
#### Data per node
```
- id: sanitized name for Mermaid
- label: display name
- file: relative file path
- type: one of the types above
- query_name: (if graphql-query) the operation name
- query_fields: (if graphql-query) root fields summary
- edges_to: list of { target_id, label }
```
### Architecture-level: Research the System
Run documentation search and codebase exploration in parallel.
#### Documentation search
If Glean MCP is available, search for:
- Architecture docs, tech specs, strategy docs
- Team formation / org docs
- Service ownership and on-call docs
- Integration docs (vendor partnerships, platform dependencies)
Run multiple searches with different keyword angles for broad coverage.
#### Codebase exploration
Search for:
- **Team config files**: `config/teams/**/<team>.yml` for owned gems, Kafka topics, feature flags, Sidekiq queues, service ownership — the single most information-dense source
- **Pack/module structure**: `packs/product_services/<domain>/` directories, `package.yml`, sub-pack organization
- **Service classes and models**: domain models, service objects under the team's Ruby module namespace
- **External integrations**: `*_client` gems and API wrappers listed in `owned_gems`
- **Messaging infrastructure**: Kafka producer/consumer definitions, Sidekiq workers
- **GraphQL subgraphs**: `graphql_service_list.json` for subgraphs owned by the domain
- **CLAUDE.md files**: `**/CLAUDE.md` files contain structured domain knowledge
#### Synthesize into categories
Organize findings into: Pods/Teams, Services/Systems, Shared Infrastructure, External Vendors, Platform Dependencies, Key Flows.
---
## Phase 3 — Verify Terminology
**STOP — present findings to user before proceeding.**
A wrong label is worse than a missing one. For every node you plan to include:
1. Search for the **exact name** in both docs and code
2. If docs and code use different terms, note both and let the user pick
3. If you cannot find a term in either source, **do not include it**
Present a terminology summary table:
| Planned Label | Found in Code? | Found in Docs? | Notes |
|---|---|---|---|
Wait for user confirmation before continuing.
---
## Phase 4 — Negotiate Scope
**STOP — present the plan to user before proceeding.**
Present:
### Node count and arrow budget
- 15-20 arrows for simple diagrams
- Up to 25 for complex ones
- Beyond 25: propose splitting into focused sub-diagrams
### Layout
**Code-level**: Top-down (`graph TD`) with rows grouped by node type.
Row assignment:
1. Find roots (no parents in traced set) and leaves (no children)
2. Layer 0 = GraphQL queries (always top if present)
3. Remaining: layer = 1 + max(layer of all parents)
4. Group into subgraphs by layer
Row naming by dominant type:
| Type | Row label |
|---|---|
| `graphql-query` | "GraphQL Queries" |
| `data-hook` (root) | "Root Data Hooks" |
| `context-provider` | "Context Providers" |
| `data-hook` (leaf) | "Data-Fetching Hooks" |
| `composition-hook` | "Composition Hooks" |
| `component` | "Components" |
**Architecture-level**: Offer layout choice:
| Layout | Best for |
|---|---|
| **Horizontal flow** (LR, default) | Data flowing through a system |
| **Ownership map** | What each team owns, minimal arrows |
| **Integration map** | External boundaries and vendor connections |
| **Decision flow** | End-to-end workflow with branch points |
Wait for user approval before generating.
---
## Phase 5 — Generate Diagram
Based on the output format chosen in Phase 1, read the corresponding guide and follow its rules:
- **Mermaid in markdown** → read [output-mermaid.md](output-mermaid.md) for syntax rules, style palette, templates, and output file structure
- **FigJam via Figma MCP** → read [output-figjam.md](output-figjam.md) for FigJam constraints, Figma MCP usage, and templates
Each guide is self-contained — it has layout rules, edge conventions, templates for both code-level and architecture-level diagrams, and output instructions specific to that format.
---
## Phase 6 — Audit
After generating, audit every label. Categorize:
| Severity | Definition | Action |
|---|---|---|
| **Wrong** | Refers to something that doesn't exist or misattributes a relationship | Must fix |
| **Imprecise** | Correct but uses a paraphrase instead of the official term | Flag for user |
| **Inferred** | Relationship you believe exists but can't trace to a specific source | Flag with caveat |
| **Verified** | Confirmed in code, docs, or both | Note the source |
Check:
- **Node labels**: Does this name appear in docs or code? Is any acronym expansion correct?
- **Edge labels**: Is this a real, documented relationship? Watch for fabricated queue names or generic labels like "sends data"
- **Missing nodes**: Are there systems/hooks visible in code that aren't on the diagram?
- **Structural accuracy**: Are nodes in the correct groups/layers?
Present audit as a table: Label | Severity | Source | Notes
---
## Phase 7 — Iterate
Most diagrams take 2-3 rounds. Common patterns:
| Request | How to handle |
|---|---|
| "Arrows are messy" | Reduce count, reorder node declarations, suggest manual rearrangement |
| "What does X mean?" | Explain and cite source. If inferred, say so immediately |
| "This is called Y, not X" | Fix. User correction always wins. Verify in code |
| "Add/remove X" | Regenerate with change. Re-audit affected labels |
| "Split this up" | Break into focused diagrams, each standalone |
| "Trace deeper into X" | Re-run Phase 2 scoped to that node, extend the existing graph |
---
## Reference
- [Output guide: Mermaid in markdown](output-mermaid.md)
- [Output guide: FigJam via Figma MCP](output-figjam.md)
- [Example output: account context dependency graph](dependency-graph-example.md)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!