Agent skill
investigate-diagram
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.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/investigate-diagram
SKILL.md
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
*Documentpassed 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/.tsxfiles - Hook consumers: files that call
useX()where X is the traced symbol - Provider wrappers: files that render
<XProvider>or usewithX()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>.ymlfor 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:
*_clientgems and API wrappers listed inowned_gems - Messaging infrastructure: Kafka producer/consumer definitions, Sidekiq workers
- GraphQL subgraphs:
graphql_service_list.jsonfor subgraphs owned by the domain - CLAUDE.md files:
**/CLAUDE.mdfiles 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:
- Search for the exact name in both docs and code
- If docs and code use different terms, note both and let the user pick
- 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:
- Find roots (no parents in traced set) and leaves (no children)
- Layer 0 = GraphQL queries (always top if present)
- Remaining: layer = 1 + max(layer of all parents)
- 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 for syntax rules, style palette, templates, and output file structure
- FigJam via Figma MCP → read 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 guide: FigJam via Figma MCP
- Example output: account context dependency graph
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?