Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -699,6 +699,18 @@
"authentication": "ON_INSTALL"
},
"category": "Productivity"
},
{
"name": "graphify",
"source": {
"source": "local",
"path": "./plugins/graphify"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Tooling"
}
]
}
8 changes: 8 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -675,6 +675,14 @@
"keywords": ["skillopt", "sleep", "self-improvement", "memory-consolidation", "skills", "continual-learning"],
"tags": ["productivity", "skills", "hooks"],
"source": "./plugins/skillopt-sleep"
},
{
"name": "graphify",
"description": "Turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph with community detection, query/path/explain tools, and an honest audit trail",
"category": "tooling",
"keywords": ["graphify", "knowledge-graph", "graphrag", "codebase", "code-understanding", "ast", "community-detection"],
"tags": ["skills", "knowledge-graph"],
"source": "./plugins/graphify"
}
]
}
2 changes: 1 addition & 1 deletion plugins/ast-grep/hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/context.sh",
"command": "./hooks/context.sh",
Comment thread
amondnet marked this conversation as resolved.
"timeout": 10
}
]
Expand Down
2 changes: 1 addition & 1 deletion plugins/fetch/hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/webfetch-fallback.sh",
"command": "./hooks/webfetch-fallback.sh",
"timeout": 5
}
]
Expand Down
2 changes: 1 addition & 1 deletion plugins/gatekeeper/hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/dist/pre-tool-use.js",
"command": "node ./dist/pre-tool-use.js",
Comment thread
amondnet marked this conversation as resolved.
"timeout": 5
}
]
Expand Down
2 changes: 1 addition & 1 deletion plugins/google-workspace/hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/context.sh",
"command": "./hooks/context.sh",
"timeout": 10
}
]
Expand Down
23 changes: 23 additions & 0 deletions plugins/graphify/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "graphify",
"version": "1.0.0",
"description": "Turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph with community detection, query/path/explain tools, and an honest audit trail",
"author": {
"name": "Safi Shamsi",
"url": "https://github.com/safishamsi"
},
"homepage": "https://github.com/safishamsi/graphify",
"repository": "https://github.com/safishamsi/graphify",
"license": "MIT",
"keywords": [
"graphify",
"knowledge-graph",
"graphrag",
"codebase",
"code-understanding",
"ast",
"community-detection",
"obsidian",
"neo4j"
]
}
37 changes: 37 additions & 0 deletions plugins/graphify/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"name": "graphify",
"version": "1.0.0",
"description": "Turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph with community detection, query/path/explain tools, and an honest audit trail",
"author": {
"name": "Safi Shamsi",
"url": "https://github.com/safishamsi"
},
"interface": {
"displayName": "Graphify",
"shortDescription": "Turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph with community detection, query/path/explain tools, and an honest a...",
"longDescription": "Turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph with community detection, query/path/explain tools, and an honest audit trail",
"developerName": "Safi Shamsi",
"category": "Tooling",
"capabilities": [
"Skill"
],
"defaultPrompt": [
"Help me use Graphify for my current task."
],
"websiteURL": "https://github.com/safishamsi/graphify"
},
"homepage": "https://github.com/safishamsi/graphify",
"repository": "https://github.com/safishamsi/graphify",
"license": "MIT",
"keywords": [
"graphify",
"knowledge-graph",
"graphrag",
"codebase",
"code-understanding",
"ast",
"community-detection",
"obsidian",
"neo4j"
]
}
47 changes: 47 additions & 0 deletions plugins/graphify/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Graphify

Turn any folder of code, docs, papers, images, or videos into a navigable **knowledge graph** with community detection, an honest audit trail (EXTRACTED / INFERRED / AMBIGUOUS), and three outputs: interactive HTML, GraphRAG-ready JSON, and a plain-language `GRAPH_REPORT.md`.

This plugin bundles the official Graphify Claude skill, so Claude automatically treats questions about a codebase — its architecture, file relationships, or project content — as graph queries, and can build the graph on demand.

## Installation

```sh
claude
/plugin marketplace add pleaseai/claude-code-plugins
/plugin install graphify@pleaseai
```

The skill installs the underlying `graphifyy` CLI on first use (via `uv tool install` or `pip`), so no manual setup is required. To install it yourself ahead of time:

```sh
uv tool install graphifyy # recommended
# or: pipx install graphifyy
```

## Usage

Once installed, ask Claude natural-language questions about a project, or invoke the pipeline directly:

```
/graphify # build a graph for the current directory
/graphify ./docs --update # re-extract only changed files
/graphify query "describe the auth flow"
/graphify path "UserService" "DatabasePool"
/graphify explain "SwinTransformer"
```

When `graphify-out/graph.json` already exists, plain questions like "How does X work?" are answered straight from the graph.

## Optional environment variables

| Variable | Purpose |
|----------|---------|
| `GEMINI_API_KEY` / `GOOGLE_API_KEY` | Use Gemini for semantic extraction instead of in-session subagents |
| `GRAPHIFY_GEMINI_MODEL` | Override the default Gemini model |
| `GRAPHIFY_MAX_WORKERS` | AST parallelism thread count |

## Links

- Source: https://github.com/safishamsi/graphify
- License: MIT
17 changes: 17 additions & 0 deletions plugins/graphify/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"description": "Load graphify usage rules at session start when the project has a knowledge graph (graphify-out/graph.json)",
"hooks": {
"SessionStart": [
{
"matcher": "startup",
"hooks": [
{
"type": "command",
"command": "./hooks/context.sh",
Comment thread
amondnet marked this conversation as resolved.
"timeout": 10
}
]
}
]
}
}
9 changes: 9 additions & 0 deletions plugins/graphify/hooks/claude-md.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## graphify

This project has a knowledge graph at graphify-out/ with god nodes, community structure, and cross-file relationships.

Rules:
- For codebase questions, first run `graphify query "<question>"` when graphify-out/graph.json exists. Use `graphify path "<A>" "<B>"` for relationships and `graphify explain "<concept>"` for focused concepts. These return a scoped subgraph, usually much smaller than GRAPH_REPORT.md or raw grep output.
- If graphify-out/wiki/index.md exists, use it for broad navigation instead of raw source browsing.
- Read graphify-out/GRAPH_REPORT.md only for broad architecture review or when query/path/explain do not surface enough context.
- After modifying code, run `graphify update .` to keep the graph current (AST-only, no API cost).
29 changes: 29 additions & 0 deletions plugins/graphify/hooks/context.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -euo pipefail

# Only inject graphify's always-on rules when this project actually has a graph.
# The context describes how to use graphify-out/, so it is irrelevant (and just
# noise) in sessions for projects that have never been graphified.
if [ ! -f "graphify-out/graph.json" ]; then

Check failure on line 7 in plugins/graphify/hooks/context.sh

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use '[[' instead of '[' for conditional tests. The '[[' construct is safer and more feature-rich.

See more on https://sonarcloud.io/project/issues?id=pleaseai_claude-code-plugins&issues=AZ7MFJzKdf2vxGfcM1Wp&open=AZ7MFJzKdf2vxGfcM1Wp&pullRequest=211
exit 0
fi

# Resolve the plugin root from CLAUDE_PLUGIN_ROOT, falling back to this script's
# own location when the runtime does not set it (e.g. Antigravity). Without the
# fallback, `set -u` would abort here with "unbound variable".
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONTEXT_FILE="${CLAUDE_PLUGIN_ROOT:-$SCRIPT_DIR/..}/hooks/claude-md.md"
[ -f "$CONTEXT_FILE" ] || exit 0

Check failure on line 16 in plugins/graphify/hooks/context.sh

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use '[[' instead of '[' for conditional tests. The '[[' construct is safer and more feature-rich.

See more on https://sonarcloud.io/project/issues?id=pleaseai_claude-code-plugins&issues=AZ7MFJzKdf2vxGfcM1Wq&open=AZ7MFJzKdf2vxGfcM1Wq&pullRequest=211
CONTEXT_CONTENT=$(cat "$CONTEXT_FILE")

if command -v jq >/dev/null 2>&1; then
jq -n --arg context "$CONTEXT_CONTENT" '{
"hookSpecificOutput": {
"hookEventName": "SessionStart",
"additionalContext": $context
}
}'
else
# Fallback: SessionStart hooks also accept raw stdout as additional context.
printf '%s\n' "$CONTEXT_CONTENT"
fi
17 changes: 17 additions & 0 deletions plugins/graphify/hooks/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"description": "Load graphify usage rules at session start when the project has a knowledge graph (graphify-out/graph.json)",
"hooks": {
"SessionStart": [
{
"matcher": "startup",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/context.sh",
"timeout": 10
}
]
}
]
}
}
23 changes: 23 additions & 0 deletions plugins/graphify/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "graphify",
"version": "1.0.0",
"description": "Turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph with community detection, query/path/explain tools, and an honest audit trail",
"author": {
"name": "Safi Shamsi",
"url": "https://github.com/safishamsi"
},
"homepage": "https://github.com/safishamsi/graphify",
"repository": "https://github.com/safishamsi/graphify",
"license": "MIT",
"keywords": [
"graphify",
"knowledge-graph",
"graphrag",
"codebase",
"code-understanding",
"ast",
"community-detection",
"obsidian",
"neo4j"
]
}
Loading
Loading