What happened
Installed via the documented path:
uv tool install graphifyy
graphify install --platform claude
Then ran /graphify . on a repo. Step 1 of the shipped SKILL.md resolves the interpreter with:
_UV_PY=$(uv tool run graphifyy python -c "import sys; print(sys.executable)" 2>/dev/null)
if [ -n "$_UV_PY" ]; then PYTHON="$_UV_PY"; fi
...
if [ -z "$PYTHON" ]; then PYTHON="python3"; fi
uv tool run graphifyy python -c "..." does not do what's intended. Since the package name (graphifyy) differs from the installed executable name (graphify), uv interprets python as an argument to a command named after the package, not as "run the python executable inside the graphifyy environment":
$ uv tool run graphifyy python -c "import sys; print(sys.executable)"
An executable named `graphifyy` is not provided by package `graphifyy`.
The following executables are available:
- graphify
- graphify-mcp
Use `uv tool run --from graphifyy <EXECUTABLE-NAME>` instead.
Because the script redirects stderr to /dev/null, this failure is invisible. _UV_PY ends up empty, PYTHON falls through to bare python3, which resolves to the system interpreter (Homebrew python3.14 on macOS) — not the graphifyy tool venv. graphify-out/.graphify_python then gets written with a path that can't import graphify:
$ /opt/homebrew/opt/python@3.14/bin/python3.14 -c "import graphify"
ModuleNotFoundError: No module named 'graphify'
Every subsequent step in the skill that shells out via $(cat graphify-out/.graphify_python) breaks immediately (detect, extract, build all fail with ModuleNotFoundError).
Environment
- macOS (Darwin), uv 0.11.17
uv tool install graphifyy (fresh install, no prior tool state)
which graphify → ~/.local/bin/graphify, shebang → ~/.local/share/uv/tools/graphifyy/bin/python (the correct interpreter — this one works)
Expected
Step 1's uv-detection branch should either:
- use
uv tool run --from graphifyy python -c "..." (the syntax uv's own error message suggests), or
- skip straight to the shebang-parsing fallback (branch 2), which already works correctly and is more robust for asymmetric package/executable names.
Suggested fix
In SKILL.md Step 1, replace:
_UV_PY=$(uv tool run graphifyy python -c "import sys; print(sys.executable)" 2>/dev/null)
with:
_UV_PY=$(uv tool run --from graphifyy python -c "import sys; print(sys.executable)" 2>/dev/null)
Happy to send a PR if that's useful — this bit me on a first-time install so it's likely hitting other users silently (the 2>/dev/null masks it completely; you just get confusing ModuleNotFoundErrors three steps later with no clue why).
What happened
Installed via the documented path:
Then ran
/graphify .on a repo. Step 1 of the shippedSKILL.mdresolves the interpreter with:uv tool run graphifyy python -c "..."does not do what's intended. Since the package name (graphifyy) differs from the installed executable name (graphify), uv interpretspythonas an argument to a command named after the package, not as "run thepythonexecutable inside thegraphifyyenvironment":Because the script redirects stderr to
/dev/null, this failure is invisible._UV_PYends up empty,PYTHONfalls through to barepython3, which resolves to the system interpreter (Homebrew python3.14 on macOS) — not thegraphifyytool venv.graphify-out/.graphify_pythonthen gets written with a path that can'timport graphify:Every subsequent step in the skill that shells out via
$(cat graphify-out/.graphify_python)breaks immediately (detect, extract, build all fail withModuleNotFoundError).Environment
uv tool install graphifyy(fresh install, no prior tool state)which graphify→~/.local/bin/graphify, shebang →~/.local/share/uv/tools/graphifyy/bin/python(the correct interpreter — this one works)Expected
Step 1's uv-detection branch should either:
uv tool run --from graphifyy python -c "..."(the syntax uv's own error message suggests), orSuggested fix
In
SKILL.mdStep 1, replace:_UV_PY=$(uv tool run graphifyy python -c "import sys; print(sys.executable)" 2>/dev/null)with:
_UV_PY=$(uv tool run --from graphifyy python -c "import sys; print(sys.executable)" 2>/dev/null)Happy to send a PR if that's useful — this bit me on a first-time install so it's likely hitting other users silently (the
2>/dev/nullmasks it completely; you just get confusingModuleNotFoundErrors three steps later with no clue why).