diff --git a/README.md b/README.md index 229149123..82c119a40 100644 --- a/README.md +++ b/README.md @@ -57,14 +57,17 @@ Every relationship is tagged `EXTRACTED` (found directly in source), `INFERRED` **Requires:** Python 3.10+ and one of: [Claude Code](https://claude.ai/code), [Codex](https://openai.com/codex), [OpenCode](https://opencode.ai), [Cursor](https://cursor.com), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [GitHub Copilot CLI](https://docs.github.com/en/copilot/how-tos/copilot-cli), [VS Code Copilot Chat](https://code.visualstudio.com/docs/copilot/overview), [Aider](https://aider.chat), [OpenClaw](https://openclaw.ai), [Factory Droid](https://factory.ai), [Trae](https://trae.ai), [Kiro](https://kiro.dev), Hermes, or [Google Antigravity](https://antigravity.google) ```bash -pip install graphifyy && graphify install -# or with pipx (keeps the CLI isolated from your project environments) +# Recommended — works on Mac and Linux with no PATH setup needed +uv tool install graphifyy && graphify install +# or with pipx pipx install graphifyy && graphify install +# or plain pip +pip install graphifyy && graphify install ``` > **Official package:** The PyPI package is named `graphifyy` (install with `pip install graphifyy`). Other packages named `graphify*` on PyPI are not affiliated with this project. The only official repository is [safishamsi/graphify](https://github.com/safishamsi/graphify). The CLI and skill command are still `graphify`. -> **`graphify: command not found`?** On Windows, pip user scripts land in `%APPDATA%\Python\PythonXY\Scripts` — add that to your PATH or use `python -m graphify` instead. On macOS with pipx, run `pipx ensurepath` then restart your terminal. +> **`graphify: command not found`?** Use `uv tool install graphifyy` (recommended) or `pipx install graphifyy` — both put the CLI in a managed location that's automatically on PATH. With plain `pip`, you may need to add `~/.local/bin` (Linux) or `~/Library/Python/3.x/bin` (Mac) to your PATH, or run `python -m graphify` instead. On Windows, pip scripts land in `%APPDATA%\Python\PythonXY\Scripts`. ### Platform support diff --git a/graphify/skill.md b/graphify/skill.md index 9bbaa0a9f..89ca46e72 100644 --- a/graphify/skill.md +++ b/graphify/skill.md @@ -62,16 +62,24 @@ Follow these steps in order. Do not skip steps. ### Step 1 - Ensure graphify is installed ```bash -# Detect the correct Python interpreter (handles pipx, venv, system installs) +# Detect the correct Python interpreter (handles uv tool, pipx, venv, system installs) +PYTHON="" GRAPHIFY_BIN=$(which graphify 2>/dev/null) -if [ -n "$GRAPHIFY_BIN" ]; then - PYTHON=$(head -1 "$GRAPHIFY_BIN" | tr -d '#!') - case "$PYTHON" in - *[!a-zA-Z0-9/_.-]*) PYTHON="python3" ;; - esac -else - PYTHON="python3" +# 1. uv tool installs — most reliable on modern Mac/Linux +if [ -z "$PYTHON" ] && command -v uv >/dev/null 2>&1; then + _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 fi +# 2. Read shebang from graphify binary (pipx and direct pip installs) +if [ -z "$PYTHON" ] && [ -n "$GRAPHIFY_BIN" ]; then + _SHEBANG=$(head -1 "$GRAPHIFY_BIN" | tr -d '#!') + case "$_SHEBANG" in + *[!a-zA-Z0-9/_.-]*) ;; + *) "$_SHEBANG" -c "import graphify" 2>/dev/null && PYTHON="$_SHEBANG" ;; + esac +fi +# 3. Fall back to python3 +if [ -z "$PYTHON" ]; then PYTHON="python3"; fi "$PYTHON" -c "import graphify" 2>/dev/null || "$PYTHON" -m pip install graphifyy -q 2>/dev/null || "$PYTHON" -m pip install graphifyy -q --break-system-packages 2>&1 | tail -3 # Write interpreter path for all subsequent steps (persists across invocations) mkdir -p graphify-out diff --git a/pyproject.toml b/pyproject.toml index 37c4a80af..b00eeda11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ description = "AI coding assistant skill (Claude Code, Codex, OpenCode, Cursor, readme = "README.md" license = { file = "LICENSE" } keywords = ["claude", "claude-code", "codex", "opencode", "cursor", "gemini", "aider", "kiro", "knowledge-graph", "rag", "graphrag", "obsidian", "community-detection", "tree-sitter", "leiden", "llm"] -requires-python = ">=3.10" +requires-python = ">=3.10,<3.14" dependencies = [ "networkx", "tree-sitter>=0.23.0", @@ -55,6 +55,11 @@ all = ["mcp", "neo4j", "pypdf", "html2text", "watchdog", "graspologic; python_ve [project.scripts] graphify = "graphify.__main__:main" +[tool.uv] +# Install via: uv tool install graphifyy +# Run without installing: uvx graphifyy install +package = true + [tool.setuptools.packages.find] where = ["."] include = ["graphify*"]