Dependency graph for a file or symbol. Calls getCallHierarchy and findReferences, builds a directed graph, and renders an interactive HTML force-directed graph. Opens in the system browser.
Scanned 9/2/2026
Install to Claude Code
npx -y skills add Oolab-labs/patchwork-os --skill ide-deps --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ide Deps?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/oolab-labs-ide-deps)More formats (shields.io, HTML) on the badges page.
---
name: ide-deps
description: Dependency graph for a file or symbol. Calls getCallHierarchy and findReferences, builds a directed graph, and renders an interactive HTML force-directed graph. Opens in the system browser.
effort: low
argument-hint: "<file path> [symbol name]"
---
## Prerequisites
1. Check if the `getToolCapabilities` MCP tool is available to you.
- **Not available** (no MCP tool by that name): stop and tell the user:
"This skill requires the Claude IDE Bridge with a connected VS Code extension. It uses LSP tools (call hierarchy, references, document symbols) that have no CLI equivalent.
To use this skill:
1. Start the bridge: `npm run start-all` (in claude-ide-bridge/)
2. Ensure the Claude IDE Bridge extension is installed in your IDE
3. Use the `claude --ide` session (not remote-control)
Alternative: `/ide-diagnostics-board` works without the bridge for diagnostics."
- **Available**: call it. If `extensionConnected` is `false`: show the same message. If `true`: proceed.
Generate an interactive dependency graph for the given file or symbol and open it in the browser.
## Arguments
`$ARGUMENTS` may be:
- A file path: `src/bridge.ts`
- A file + symbol: `src/bridge.ts:handleConnection`
If no arguments provided, call `getOpenEditors` and use the first active editor's file path.
## Steps
### Phase 1 — Identify target
1. Parse `$ARGUMENTS` to extract the file path and optional symbol name.
2. Call `openFile` on the resolved path to ensure it is loaded.
3. Call `getDocumentSymbols` on the file to list all exported functions and classes.
4. If a symbol name was specified, filter to that symbol only. Otherwise use all exported symbols (cap at 20 symbols to keep the graph readable).
### Phase 2 — Build graph data
5. For each target symbol, call `getCallHierarchy` with direction `"outgoing"` to get what it calls.
6. For each target symbol, call `getCallHierarchy` with direction `"incoming"` to get what calls it.
7. Call `findReferences` on each target symbol to get the reference count.
8. Build a deduplicated graph:
- Nodes: `{ id, label, file, kind, refCount }`
- Edges: `{ from, to, direction }` — direction is "outgoing" or "incoming"
- Cap total nodes at 80. If exceeded, keep only the direct neighbors of the primary symbol.
### Phase 3 — Generate and open HTML
9. Construct a fully self-contained HTML document (no external URLs, no CDN — must work from file://) containing:
- The graph data embedded as a `const graphData = {...}` JSON literal in a `<script>` block
- A vanilla JS SVG force-directed graph renderer (~120 lines): nodes as circles, edges as lines, spring simulation via `requestAnimationFrame`
- Color coding: entry point symbols = `#4A90D9`, internal = `#888`, external deps = `#E8844A`
- Node labels shown on hover via `<title>` tooltip
- A search input that highlights matching nodes
- A sidebar showing selected node's file path and reference count on click
- The file/symbol name as the page `<title>` and an `<h2>` header
10. Call `openInBrowser` with the HTML string and filename `deps-<basename>.html`.
11. Report: "Opened dependency graph — N nodes, M edges. Saved to: <path>"
## HTML constraints
- No `<script src="...">`, no `<link href="...">` to external resources
- All CSS in a `<style>` block, all JS in a `<script>` block
- Target 300–500 lines of HTML total
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!