Graphify wrapper setup
Use when a repo or machine needs graphify-wrapper wired up for the first time - installing the graphify CLI, adding the never-commit guard, seeding the per-repo registry, and picking a semantic backend - the one-time "set up graphify" step before any mapping or indexing.From its SKILL.md
npx -y skills add yoelgal/better-dev --skill graphify-wrapper-setupAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
3.7 KB, ~1.0k tokens by cl100k_base, as published. Nobody here has run it
/graphify-wrapper-setup
Make a repo ready for graphify-wrapper. Idempotent - safe to re-run.
. .better-dev/bin/bd-gfx 2>/dev/null || . "${CLAUDE_PLUGIN_ROOT}/scripts/bd-gfx"
1. Ensure the CLI
The PyPI package is graphifyy (double-y); the binary is graphify. The
wrapper needs graphifyy 0.9.18 or newer. Its hooks read the built_at_commit
provenance that graphifyy added in 0.7.0, and the wedge safety rests on the
atomic graph writes graphifyy completed in 0.9.18, so an older build leaves the
refresh hook dead and its writes non-atomic. Setup upgrades a stale install
before continuing.
command -v graphify >/dev/null || uv tool install graphifyy
graphify --version
floor=0.9.18
have=$(graphify --version 2>&1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
if [ -n "$have" ] && [ "$(printf '%s\n%s\n' "$floor" "$have" | sort -V | head -1)" != "$floor" ]; then
echo "graphifyy $have is below the $floor floor; upgrading"
uv tool upgrade graphifyy
graphify --version
fi
If uv is missing, stop and tell the operator to install it (brew install uv);
do not fall back to a global pip install.
2. Never-commit guard (global gitignore)
Graphs live in-tree at <path>/graphify-out/. Keep them out of every repo via
the operator's global gitignore so a host repo's tracked files are never
touched and nothing can be pushed.
gi=$(git config --global --get core.excludesfile || echo "$HOME/.config/git/ignore")
mkdir -p "$(dirname "$gi")"
git config --global core.excludesfile "$gi"
grep -qxF 'graphify-out/' "$gi" 2>/dev/null || printf 'graphify-out/\n' >> "$gi"
echo "global gitignore: $gi"
3. Init the per-repo registry
The central home holds only the registry (graphs stay in-tree). Keyed by git identity, so every worktree of this repo shares it.
home=$(gfx_home); reg=$(gfx_registry)
mkdir -p "$home"
if [ ! -f "$reg" ]; then
jq -n \
--arg key "$(gfx_repo_key)" \
--arg main "$(gfx_main_worktree)" \
--arg branch "$(gfx_default_branch)" \
'{repo_key:$key, main_worktree:$main, default_branch:$branch, backend:"claude-cli", cli_model:"sonnet", indexes:{}}' \
> "$reg"
fi
cat "$reg"
4. Pick a semantic backend
--semantic builds need a backend. Default is claude-cli (routes through the
local claude CLI on the operator's Pro/Max plan - no API key, billed to
the plan). The claude-cli path defaults to Opus (overkill for
structured-JSON extraction), so the registry pins cli_model: "sonnet";
/graphify-wrapper-sync --semantic exports it as GRAPHIFY_CLAUDE_CLI_MODEL.
If an API key is already in the env, prefer it:
if [ -n "${ANTHROPIC_API_KEY:-}" ]; then b=claude
elif [ -n "${GEMINI_API_KEY:-}${GOOGLE_API_KEY:-}" ]; then b=gemini
elif [ -n "${OPENAI_API_KEY:-}" ]; then b=openai
elif [ -n "${DEEPSEEK_API_KEY:-}" ]; then b=deepseek
else b=claude-cli; fi
reg=$(gfx_registry); tmp=$(mktemp "$(dirname "$reg")/.reg.XXXXXX")
jq --arg b "$b" '.backend=$b' "$reg" > "$tmp" && mv "$tmp" "$reg"
echo "semantic backend: $b"
5. Report
/graphify-wrapper-index <name> <path>to register a domain (or/graphify-wrapper-indexwith no args to have me analyze the repo and suggest domains)./graphify-wrapper-syncto build/refresh the current worktree's indexes.
Do not build any index here - that is /graphify-wrapper-index +
/graphify-wrapper-sync.