
Graphify
- 413 installs
- 40 repo stars
- Updated August 4, 2026
- akillness/oh-my-skills
graphify is an oh-my-skills agent skill that transforms tabular or relational data into charts and graph views for developers who need dashboard-ready visuals and stakeholder documentation during feature delivery.
About
graphify is an agent skill in the akillness/oh-my-skills collection that converts tabular or relational datasets into charts, graph views, and visualization-ready outputs for reports, dashboards, and stakeholder documentation. The skill guides coding agents to select appropriate chart types, map columns to axes, label series clearly, and export visuals suitable for README files, internal wiki pages, sprint demos, and executive summaries. Developers reach for graphify when SQL query results, CSV exports, JSON metrics blobs, or ORM query output need quick transformation into bar, line, scatter, or network graph presentations without manually opening a separate BI tool. graphify fits mid-build and pre-demo moments where feature teams must communicate experiment results, usage trends, or A/B outcomes alongside code changes. Install through the oh-my-skills repository using the standard skills CLI so Claude Code or Cursor sessions can generate reproducible chart artifacts from repository-local data files during agent-assisted documentation workflows.
- Chart and graph generation from data
- Report-ready visual outputs
- Supports analytics storytelling
- Useful for dashboard prototyping
- Clarifies complex relationships
Graphify by the numbers
- 413 all-time installs (skills.sh)
- Ranked #489 of 2,064 Data Science & ML skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/akillness/oh-my-skills --skill graphifyAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 413 |
|---|---|
| repo stars | ★ 40 |
| Last updated | August 4, 2026 |
| Repository | akillness/oh-my-skills ↗ |
How do you turn query results into charts?
Transform tabular or relational data into charts and graph views for reports, dashboards, and stakeholder-ready documentation during feature delivery.
Who is it for?
Developers and data-oriented engineers who need agent-generated charts from CSV, SQL, or relational exports for reports and feature delivery demos.
Skip if: Production BI pipeline setup with scheduled ETL jobs or teams requiring pixel-perfect design-system dashboard components built directly in React.
When should I use this skill?
User asks to chart tabular data, visualize SQL results, create graph views for a report, or turn metrics CSVs into dashboard visuals.
What you get
Chart specifications, rendered graph views, and stakeholder-ready visualization artifacts derived from tabular or relational datasets.
- Chart and graph view files
- Visualization specifications
- Stakeholder report graphics
Files
Graphify
Use this skill when the main question is "what graph mode should we trust, what artifact should we produce, and what should we read next?"
The job is not to dump every Graphify feature or pretend all repo-understanding work needs a graph. The job is to: 1. classify the request into one graph packet, 2. choose one honest execution mode, 3. scope the corpus before runtime or token pain explodes, 4. report artifacts and fallback truthfully, 5. route search-only, wiki-only, or project-memory work to the right neighboring skill.
Read references/mode-packets-and-route-outs.md before handling an unfamiliar request. Read references/build-and-fallback-recipes.md when choosing between assistant-native install, local Python, incremental refresh, and structural fallback.
When to use this skill
- The user explicitly wants
GRAPH_REPORT.md,graph.json,graph.html, a codebase graph, or a persistent knowledge graph - The request is about repo/corpus structure, graph-backed relationship tracing, path queries, or architecture discovery that should survive the current session
- The corpus mixes code, docs, PDFs, notes, screenshots, or other assets and the user wants one durable structure layer
- The user wants to refresh, query, or explain an existing Graphify output instead of re-reading raw files from scratch
- The user asks to install Graphify into Claude, Codex, Gemini, OpenCode, or another coding assistant for always-on graph access
When not to use this skill
- The user only needs to find a symbol, file owner, config location, or reference chain → use
codebase-search - The user wants a persistent markdown knowledge base or filed research notes → use
llm-wiki - The user wants project/repo memory, manifests, or cross-agent handoff packets → use
opencontext - The user needs dependency-only JS/TS analysis or a quick repo tree diagram, not a durable graph memory layer
- The request is generic GraphRAG / text-KG architecture without a concrete Graphify or durable structure ask
Instructions
Step 1: Start from the graph packet already in hand
Use references/mode-packets-and-route-outs.md.
Normalize the request into one of these packet shapes:
repo-structure-packet— map a codebase or subsystem before editingrelationship-trace-packet— answer a path/query/explain question from an existing or newly built graphmixed-corpus-memory-packet— build durable structure across code + docs + assets + sourcesassistant-install-packet— install Graphify into an assistant for always-on userefresh-or-fallback-packet— update an existing graph, recover from empty/weak output, or switch to structural fallback
Capture the smallest useful frame:
Packet: repo-structure-packet
Scope: src/ + docs/architecture/
Need: GRAPH_REPORT.md + one path query
Graph state: no current outputs
Main risk: whole-repo graphing is too noisyRule: start from the packet the user already has. Do not force every request through a full feature tour.
Step 2: Choose one primary mode
Pick exactly one primary mode:
assistant-native-install— install Graphify into Claude/Codex/Gemini/OpenCode because always-on/graphifyaccess is the real goallocal-python-build— run the local Python/API workflow because the environment needs a truthful non-native pathincremental-refresh— update an existing graph on changed scope instead of rebuilding everything blindlygraph-query-followup— start from current artifacts and answer focused graph-backed questionsstructural-fallback— produce a graphify-style structural graph when native extraction is unavailable, empty, or misleading for a markdown-heavy corpus
Optional: mention one fallback mode, but do not hand the user five equal options.
Step 3: Scope the corpus before doing anything expensive
Choose the smallest path that answers the question.
Good defaults:
- repo root only when the user truly needs repo-wide architecture
src/,app/,packages/foo/, or one service directory for implementation workraw/,docs/, or a mixed research folder for corpus graphing- existing
graphify-out/when the job is query/refresh rather than rebuild
Rules:
- avoid blind whole-repo graphing on large repos
- prefer
.graphifyignoreor smaller scope over hoping runtime cost behaves - if the graph request is really a locate/reference request, route to
codebase-search
Step 4: Tell the truth about install and runtime shape
Use references/build-and-fallback-recipes.md.
Core facts to preserve:
- official PyPI package name:
graphifyy - CLI command:
graphify - Python 3.10+
- assistant-native installs exist for Claude / Codex / Gemini / OpenCode and related tools
- local automation may need a Python/API path or structural fallback rather than assuming assistant-native
/graphifyis available
Never blur these cases:
- always-on assistant install
- local one-shot graph build / refresh
- querying an existing graph
- structural fallback because native extraction is not the honest answer
Step 5: Run the chosen mode with the narrowest recipe
Keep commands or steps minimal and mode-specific.
Typical recipes:
assistant-native-install→ install / verify the assistant-specific Graphify integrationlocal-python-build→ installgraphifyy, verify runtime, run the Python pipeline or tested local workflow, and exportGRAPH_REPORT.md,graph.json, andgraph.htmlincremental-refresh→ reuse existing artifacts and refresh only the changed scope when practicalgraph-query-followup→ readGRAPH_REPORT.mdfirst, then runquery,path, orexplainstructural-fallback→ build the smallest truthful graph from filesystem structure, frontmatter, support files, and explicit mentions instead of pretending native semantic extraction succeeded
If the corpus is markdown-heavy and native extraction returns a 0-node or misleading graph, switch modes instead of retrying the same failing path.
Step 6: Read artifacts in the right order
Always prefer: 1. graphify-out/GRAPH_REPORT.md 2. graphify-out/graph.html 3. graphify-out/graph.json
Do not dump raw graph.json into a prompt if the report or a focused query is enough.
Step 7: Route adjacent work outward
This skill owns durable graph mode choice and graph-backed follow-up, not every repo/corpus task.
Typical route-outs:
codebase-search— exact text, symbol, config/content ownership, and impact mapping before graphingllm-wiki— narrative synthesis, wiki pages, source filing, long-lived markdown knowledge basesopencontext— searchable decisions, manifests, stable links, and project-memory handoffsurvey— broader landscape scans when the real question is tool/platform comparison before choosing Graphify
If the user asks “build or query the graph,” stay here. If they ask “find the file/symbol fast,” “file this as a wiki note,” or “store this as project memory,” route out.
Step 8: Return one concise graph brief
Always return a short operator-style brief with:
- packet
- primary mode
- scope
- output directory / artifacts
- whether the result was native Graphify or structural fallback
- 1–3 next steps or queries
- one route-out if neighboring work now owns the next step
Output format
Always return a graph build brief, graph refresh brief, graph query brief, or Graphify install brief.
Required qualities:
- identify the packet already in hand
- choose one primary mode
- name the scope explicitly
- state which artifacts exist or were created
- label fallback mode honestly when native extraction was not used
- read from
GRAPH_REPORT.mdbefore over-focusing on raw graph JSON - route search-only, wiki-only, or project-memory work outward
Examples
Example 1: understand a repo before editing
Input
Map this repo with Graphify so I can understand the architecture before touching code.
Good output direction
repo-structure-packetlocal-python-buildorassistant-native-installdepending on environment- scopes the repo honestly
- reports
GRAPH_REPORT.md,graph.json,graph.html
Example 2: trace a relationship from an existing graph
Input
We already have graphify-out. What connects the auth controller to billing?
Good output direction
relationship-trace-packetgraph-query-followup- reads
GRAPH_REPORT.mdfirst, then usesquery/path - avoids unnecessary rebuilds
Example 3: mixed corpus with markdown-heavy sources
Input
Turn this docs + screenshots + notes folder into a persistent graph we can reuse next week.
Good output direction
mixed-corpus-memory-packet- chooses
local-python-buildorstructural-fallback - explains whether the result is native Graphify or graphify-style structural fallback
Example 4: request is really search, not graphing
Input
I just need to find where this config is defined and who references it.
Good output direction
- routes to
codebase-search - does not force Graphify where search is the bottleneck
Best practices
1. Use the smallest scope that answers the question. 2. Keep assistant-native install, local build, refresh, query, and fallback as distinct modes. 3. Prefer GRAPH_REPORT.md before raw graph JSON. 4. Treat structural fallback as a first-class honest mode, not a hidden failure. 5. Route search-first work to codebase-search instead of overselling graphing. 6. Route narrative memory to llm-wiki and project memory to opencontext. 7. Refresh compact and discovery surfaces whenever the front-door wording changes materially. 8. If a graph build is machine-specific or path-leaky, say so instead of presenting it as portable truth.
References
- Mode packets and route-outs
- Build and fallback recipes
../codebase-search/SKILL.md../llm-wiki/SKILL.md../opencontext/SKILL.md- Graphify upstream: https://github.com/safishamsi/graphify
- Graphify PyPI: https://pypi.org/project/graphifyy/
{
"skill_name": "graphify",
"evals": [
{
"id": 1,
"prompt": "Map this repository with Graphify so I can understand the architecture before editing anything.",
"expected_output": "The skill classifies the request as a repo-structure packet, chooses one honest graph mode, scopes the repo, and reports durable graph artifacts.",
"assertions": [
"Response identifies a packet or equivalent mode classification for repo structure work",
"Response mentions GRAPH_REPORT.md, graph.json, or graph.html",
"Response scopes the repo or subtree explicitly instead of assuming the whole repo by default"
]
},
{
"id": 2,
"prompt": "We already have graphify-out. What connects AuthModule to BillingService?",
"expected_output": "The skill uses graph-query follow-up behavior, reads the existing report/graph first, and avoids an unnecessary rebuild.",
"assertions": [
"Response starts from existing graph artifacts rather than forcing a rebuild",
"Response mentions query, path, or explain usage",
"Response references GRAPH_REPORT.md as the first reading surface"
]
},
{
"id": 3,
"prompt": "Turn this docs + screenshots + notes folder into a persistent graph we can reuse next week.",
"expected_output": "The skill treats this as a mixed-corpus memory packet and chooses between local Graphify and structural fallback honestly.",
"assertions": [
"Response recognizes a mixed-corpus graphing request",
"Response mentions local build or structural fallback rather than only assistant-native install",
"Response labels fallback truthfully if native extraction is weak"
]
},
{
"id": 4,
"prompt": "I just need to find where this config is defined and who references it.",
"expected_output": "The skill routes the request to codebase-search instead of forcing Graphify.",
"assertions": [
"Response routes simple locate/reference work to codebase-search or an equivalent neighboring search skill",
"Response does not insist on building a graph for a search-first request"
]
}
]
}
Build and Fallback Recipes
Use these recipes after choosing the mode. Keep the front door in SKILL.md small; keep the mechanical detail here.
Core runtime facts
- Official PyPI package name:
graphifyy - CLI command:
graphify - Python requirement: 3.10+
- Assistant-native installs exist for Claude, Codex, Gemini, OpenCode, Cursor, Copilot, Aider, and related tools
- Local automation may still need a Python/API or structural-fallback path even when assistant installs exist upstream
assistant-native-install
Use when the user wants Graphify to be available inside the assistant rather than as a one-off local build.
Typical commands:
graphify install
graphify claude install
graphify codex install
graphify gemini install
graphify opencode installChecklist: 1. verify graphify --help 2. confirm the target assistant/runtime exists 3. install only the assistant integration actually needed 4. tell the user how to invoke /graphify or the equivalent next step
local-python-build
Use when the environment needs a truthful non-native path.
Typical runtime prep:
python3 -m pip install graphifyy
graphify --helpGuidance:
- prefer the smallest useful subtree first
- preserve the durable artifact contract:
graphify-out/GRAPH_REPORT.md,graphify-out/graph.json,graphify-out/graph.html - if the raw CLI/build surface does not honestly support the needed workflow in the current environment, switch to the tested local/Python path instead of faking parity with assistant-native UX
incremental-refresh
Use when artifacts already exist and the user changed only part of the corpus.
Guidance:
- inspect current
graphify-out/ - refresh only the changed scope when practical
- preserve or regenerate the same artifact set
- tell the user whether the run was a full rebuild or a refresh of existing outputs
graph-query-followup
Use when the graph exists and the job is now question answering.
Read in this order: 1. GRAPH_REPORT.md 2. graph.html 3. graph.json
Typical follow-up commands:
graphify query "show the auth flow"
graphify path "AuthModule" "Database"
graphify explain "BillingPipeline"Rule: prefer one focused query over an unnecessary rebuild.
structural-fallback
Use when native extraction is unavailable, returns a 0-node graph, or would be misleading for a markdown-heavy corpus.
Good fallback signals:
- filesystem structure
- frontmatter metadata
- support-folder presence (
references/,evals/,scripts/, compact variants) - explicit cross-file mentions or index references
- repo discovery docs that already list the relevant nodes
Fallback output rule:
- still write the normal durable artifact names when possible
- label the result as a graphify-style structural fallback, not a native semantic graph build
- explain why the fallback was chosen
Common failure patterns
- Package/command confusion:
graphifyyis the package,graphifyis the CLI - Large noisy repo: shrink the scope or add ignores before retrying
- Markdown-heavy corpus: choose structural fallback sooner
- Machine-specific artifact leakage: tell the user if output paths or caches are local-machine specific
- Search-only request: route to
codebase-searchinstead of forcing a graph
Neighboring ownership reminder
codebase-searchowns fast locate/reference/config impact workllm-wikiowns markdown knowledge-base synthesis and filingopencontextowns searchable project memory and cross-agent handoff
Mode Packets and Route-outs
Start from the graph packet the user already has. Do not force every request through a full Graphify feature tour.
repo-structure-packet
Use when the user wants architecture discovery or a durable repo map before editing.
Capture:
- target repo/subtree
- whether the user needs a full graph build or just a summary artifact
- whether the repo is large/noisy enough to require a smaller scope or
.graphifyignore
Good outcomes:
- one chosen scope
- one primary mode (
assistant-native-installorlocal-python-build) - one explicit artifact contract (
GRAPH_REPORT.md,graph.json,graph.html)
Route out when:
- the real work is finding files, symbols, or references quickly →
codebase-search
relationship-trace-packet
Use when a graph already exists or the only real question is a path/query/explain follow-up.
Capture:
- whether
graphify-out/already exists - the exact concept pair or relationship question
- whether rebuild is necessary or a focused query is enough
Good outcomes:
graph-query-followup- read
GRAPH_REPORT.mdfirst - one focused
query,path, orexplainstep instead of a blind rebuild
Route out when:
- the user only needs symbol/text ownership, not graph semantics →
codebase-search
mixed-corpus-memory-packet
Use when code, docs, PDFs, screenshots, notes, or raw sources should become one durable structure layer.
Capture:
- corpus types present
- whether the user wants structural graph outputs, wiki pages, or both
- whether the corpus is likely to be markdown-heavy or light on code semantics
Good outcomes:
local-python-buildif native Graphify is appropriatestructural-fallbackif native extraction is weak or misleading- explicit route-out to
llm-wikiwhen the user really wants narrative knowledge pages
Route out when:
- the main goal is persistent markdown filing, source summaries, query pages, or schema-driven note maintenance →
llm-wiki
assistant-install-packet
Use when the user wants Graphify available inside Claude, Codex, Gemini, OpenCode, or another supported assistant.
Capture:
- target assistant/runtime
- whether Graphify needs to be always-on or just used once locally
- whether Python/runtime prerequisites are already satisfied
Good outcomes:
assistant-native-install- one assistant-specific install path
- one verification step so the user knows the install actually worked
Route out when:
- the user really needs project-memory or handoff surfaces rather than a graph install →
opencontext
refresh-or-fallback-packet
Use when a graph already exists but is stale, empty, misleading, or too expensive to rebuild naively.
Capture:
- what artifacts already exist
- what changed since the last build
- whether the failure is runtime/install related, corpus-shape related, or size/noise related
Good outcomes:
incremental-refreshfor changed scopestructural-fallbackfor 0-node / markdown-heavy / weak native results- clear note when artifacts are machine-specific or path-leaky
Route out when:
- the next job is session memory / manifests / stable-link handoff rather than graph repair →
opencontext
Quick route-out table
| If the real question is... | Route to |
|---|---|
| Where is this symbol/file/config and who references it? | codebase-search |
| Build/query a durable repo or corpus graph | graphify |
| Turn sources into an interlinked markdown knowledge base | llm-wiki |
| Store project decisions, manifests, or stable links for cross-agent handoff | opencontext |
| Research tools/platforms before choosing a graph approach | survey |
Rule of thumb
A good graph packet is the smallest artifact set that lets you choose one truthful graph mode. If the packet still cannot support that choice, ask for one missing artifact or route to the neighboring skill that owns the next step.
N:graphify
D:Route durable graph-building requests into one honest mode: assistant-native install, local Python build, incremental refresh, graph query follow-up, or a graphify-style structural fallback for markdown-heavy corpora. Use when the user wants `GRAPH_REPORT.md`, `graph.json`, `graph.html`, repo/corpus relationship tracing, mixed code+docs+asset graphing, or graph-backed architecture understanding that should persist across sessions.
G:knowledge-graph codebase-analysis graphrag architecture graphify corpus-analysis persistent-memory
U[6]:
Build persistent graph artifacts for a repo or mixed corpus
Choose between assistant-native install, local build, refresh, query, or structural fallback
Trace relationships with graph-backed query/path/explain flows
Refresh an existing graph without rebuilding blindly
Handle markdown-heavy or weak-extraction cases honestly with structural fallback
Route search-only, wiki-only, or project-memory work to neighboring skills
S[8]{n,action,details}:
1,Normalize packet,Classify the request as repo-structure, relationship-trace, mixed-corpus-memory, assistant-install, or refresh/fallback
2,Choose mode,Pick one primary mode: assistant-native-install, local-python-build, incremental-refresh, graph-query-followup, or structural-fallback
3,Scope corpus,Choose the smallest path or existing graph outputs that answer the question
4,Verify runtime,Preserve the `graphifyy` package / `graphify` CLI distinction and tell the truth about assistant-native vs local execution
5,Run narrow recipe,Use the smallest honest install/build/query/fallback recipe for the chosen mode
6,Read artifacts,Prefer `GRAPH_REPORT.md` then `graph.html` then `graph.json`
7,Route out,Send simple locate/reference work to codebase-search, narrative knowledge-base work to llm-wiki, and project-memory handoff to opencontext
8,Return brief,Produce one concise graph brief with scope, artifacts, fallback truth, and next steps
R[6]:
Do not force Graphify when the real bottleneck is search-first repo navigation
Keep assistant-native install, local build, refresh, query, and fallback as distinct modes
Use the smallest scope that answers the question
Treat structural fallback as an honest first-class mode when native extraction is weak
Read `GRAPH_REPORT.md` before over-using raw `graph.json`
Label portability/path-leak limitations honestly when artifacts are machine-specific
Related skills
FAQ
What data formats does graphify accept?
graphify accepts tabular and relational data such as CSV exports, SQL query result sets, and structured JSON metrics. The oh-my-skills skill maps columns to axes and recommends chart types for stakeholder-ready output.
When should developers use graphify?
Developers should use graphify when feature delivery needs quick charts or graph views from repository-local datasets for README reports, sprint demos, or dashboard documentation without opening a separate BI suite.