{"id":48123666,"url":"https://github.com/harshkedia177/axon","last_synced_at":"2026-04-20T02:01:09.899Z","repository":{"id":339732220,"uuid":"1163168741","full_name":"harshkedia177/axon","owner":"harshkedia177","description":"Graph-powered code intelligence engine — indexes codebases into a knowledge graph, exposed via MCP tools for AI agents and a CLI for developers.","archived":false,"fork":false,"pushed_at":"2026-03-25T06:56:58.000Z","size":742,"stargazers_count":594,"open_issues_count":21,"forks_count":108,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-03-26T10:57:54.349Z","etag":null,"topics":["claude-code","code-analysis","code-intelligence","dead-code-detection","knowledge-graph","mcp","python","static-analysis","tree-sitter","typescript"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/harshkedia177.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-21T07:41:02.000Z","updated_at":"2026-03-26T07:08:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/harshkedia177/axon","commit_stats":null,"previous_names":["harshkedia177/axon"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/harshkedia177/axon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harshkedia177%2Faxon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harshkedia177%2Faxon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harshkedia177%2Faxon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harshkedia177%2Faxon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/harshkedia177","download_url":"https://codeload.github.com/harshkedia177/axon/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harshkedia177%2Faxon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32029857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","code-analysis","code-intelligence","dead-code-detection","knowledge-graph","mcp","python","static-analysis","tree-sitter","typescript"],"created_at":"2026-04-04T16:22:44.555Z","updated_at":"2026-04-20T02:01:09.892Z","avatar_url":"https://github.com/harshkedia177.png","language":"Python","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/harshkedia177/axon/main/axon-logo.png\" alt=\"Axon logo\" width=\"420\" /\u003e\n\u003c/p\u003e\n\n# Axon\n\n[![PyPI version](https://img.shields.io/pypi/v/axoniq)](https://pypi.org/project/axoniq/)\n[![PyPI downloads](https://static.pepy.tech/badge/axoniq/month)](https://pepy.tech/projects/axoniq)\n[![Total installs](https://static.pepy.tech/badge/axoniq)](https://pepy.tech/projects/axoniq)\n[![GitHub stars](https://img.shields.io/github/stars/harshkedia177/axon?style=social)](https://github.com/harshkedia177/axon)\n[![License](https://img.shields.io/pypi/l/axoniq)](https://github.com/harshkedia177/axon/blob/main/LICENSE)\n\n**The knowledge graph for your codebase — explore it visually, or let your AI agent query it.**\n\nIndexes any codebase into a structural knowledge graph — every dependency, call chain, cluster, and execution flow. Explore it through an **interactive web dashboard** with force-directed graph visualization, or expose it through **MCP tools** so AI agents get full structural understanding in every tool call.\n\n```\n$ axon analyze .\n\nWalking files...               142 files found\nParsing code...                142/142\nTracing calls...               847 calls resolved\nAnalyzing types...             234 type relationships\nDetecting communities...       8 clusters found\nDetecting execution flows...   34 processes found\nFinding dead code...           12 unreachable symbols\nAnalyzing git history...       18 coupled file pairs\nGenerating embeddings...       623 vectors stored\n\nDone in 4.2s — 623 symbols, 1,847 edges, 8 clusters, 34 flows\n```\n\nThen explore your codebase visually:\n\n```bash\naxon ui                      # Opens interactive dashboard at localhost:8420\n```\n\n**Three views, one command:**\n\n- **Explorer** — Interactive force-directed graph (Sigma.js + WebGL). Click any node to see its code, callers, callees, impact radius, and community. Community hull overlays show architectural clusters at a glance.\n- **Analysis** — Health score, coupling heatmap, dead code report, inheritance tree, branch diff — your codebase health in one dashboard.\n- **Cypher Console** — Write and run Cypher queries against the graph with syntax highlighting, presets, and history.\n\nPlus: command palette (`Cmd+K`), keyboard shortcuts, flow trace animations, graph minimap, and SSE-powered live reload when watch mode is active.\n\n---\n\n## The Problem\n\nYour AI agent edits `UserService.validate()`. It doesn't know that 47 functions depend on that return type, 3 execution flows pass through it, and `payment_handler.py` changes alongside it 80% of the time.\n\n**Breaking changes ship.**\n\nThis happens because AI agents work with flat text. They grep for callers, miss indirect ones, and have no understanding of how code is *connected*. Context windows are finite. LSPs don't expose call graphs. Grepping gives you strings, not structure.\n\nThe agent needs a **knowledge graph** — not more text.\n\n---\n\n## How Axon Solves It\n\nMost code intelligence tools give the agent raw files and hope it reads enough. Axon takes a different approach: **precompute structure at index time** so every tool call returns complete, actionable context.\n\nA 12-phase pipeline runs once over your repo. After that:\n\n- `axon_impact(\"validate\")` returns all 47 affected symbols, grouped by depth (will break / may break / review), with confidence scores — in a single call\n- `axon_query(\"auth handler\")` returns hybrid-ranked results grouped by execution flow, not a flat list of name matches\n- `axon_context(\"UserService\")` returns callers, callees, type references, community membership, and dead code status — the full picture\n\n**Three benefits:**\n\n1. **Reliability** — the context is already in the tool response. No multi-step exploration that can miss code.\n2. **Token efficiency** — one tool call instead of a 10-query search chain. Agents spend tokens on reasoning, not navigation.\n3. **Model democratization** — even smaller models get full architectural clarity because the tools do the heavy lifting.\n\n**Zero cloud dependencies.** Everything runs locally — parsing, graph storage, embeddings, search. No API keys, no data leaving your machine.\n\n---\n\n## TL;DR\n\n```bash\npip install axoniq            # 1. Install\ncd your-project \u0026\u0026 axon analyze .  # 2. Index (one command, ~5s for most repos)\naxon ui                       # 3. Explore visually at localhost:8420\n```\n\n**For AI agents** — add to `.mcp.json` in your project root:\n\n```json\n{\n  \"mcpServers\": {\n    \"axon\": {\n      \"command\": \"axon\",\n      \"args\": [\"serve\", \"--watch\"]\n    }\n  }\n}\n```\n\n**For developers** — explore the graph yourself:\n\n```bash\naxon ui                      # Interactive dashboard (standalone or attaches to running host)\naxon ui --watch              # Live reload on file changes\naxon host --watch            # Shared host: UI + multi-session MCP\n```\n\n---\n\n## What You Get\n\n### Explore your codebase visually\n\n**Web UI**\n\nA full interactive dashboard — no terminal or extensions required. One command:\n\n```bash\naxon ui                           # Launch at localhost:8420\naxon ui --watch                   # Live reload on file changes\naxon ui --port 9000               # Custom port\naxon ui --dev                     # Dev mode (Vite HMR on :5173)\n```\n\n| View | What It Shows |\n|------|--------------|\n| **Explorer** | Interactive force-directed graph (Sigma.js + WebGL), file tree sidebar, symbol detail panel with code preview, callers/callees, impact analysis, and process memberships. Community hull overlays reveal architectural clusters. |\n| **Analysis** | Health score, coupling heatmap, dead code report, inheritance tree visualization, branch diff, and aggregate stats — your codebase health at a glance. |\n| **Cypher Console** | Query editor with syntax highlighting, preset query library, results table, and query history. |\n\n**Extras:** Command palette (`Cmd+K`), keyboard shortcuts, graph minimap, flow trace and impact ripple animations, SSE-powered live reload when watch mode is enabled.\n\nThe UI is backed by a FastAPI server with a full REST API — see [API Endpoints](#api-endpoints) below.\n\n### Find anything — by name, concept, or typo\n\n**Hybrid Search (BM25 + Vector + Fuzzy)**\n\nThree search strategies fused with [Reciprocal Rank Fusion](https://plg.uwaterloo.ca/~gvcormac/cormacksigir09-rrf.pdf):\n\n- **BM25 full-text search** — fast exact name and keyword matching via KuzuDB FTS\n- **Semantic vector search** — conceptual queries via 384-dim embeddings (BAAI/bge-small-en-v1.5)\n- **Fuzzy name search** — Levenshtein fallback for typos and partial matches\n\nResults are ranked with test file down-ranking (0.5x) and source function/class boosting (1.2x), then **grouped by execution flow** so the agent sees architectural context in a single call.\n\n### Know what breaks before you change it\n\n**Impact Analysis with Depth Grouping**\n\nWhen you're about to change a symbol, Axon traces upstream through the call graph, type references, and git coupling history. Results are grouped by depth for actionability:\n\n- **Depth 1** — Direct callers (will break)\n- **Depth 2** — Indirect callers (may break)\n- **Depth 3+** — Transitive (review)\n\nEvery edge carries a confidence score (1.0 = exact match, 0.8 = receiver method, 0.5 = fuzzy) so you can prioritize what to review.\n\n### Find what to delete\n\n**Dead Code Detection**\n\nNot just \"zero callers\" — a multi-pass analysis that understands your framework:\n\n1. **Initial scan** — flags symbols with no incoming calls\n2. **Exemptions** — entry points, exports, constructors, test code, dunder methods, `__init__.py` symbols, decorated functions, `@property` methods\n3. **Override pass** — un-flags methods overriding non-dead base class methods\n4. **Protocol conformance** — un-flags methods on Protocol-conforming classes\n5. **Protocol stubs** — un-flags all methods on Protocol classes (interface contracts)\n\n### Understand how code runs, not just where it sits\n\n**Execution Flow Tracing**\n\nDetects entry points using framework-aware patterns:\n- **Python**: `@app.route`, `@router.get`, `@click.command`, `test_*` functions, `__main__` blocks\n- **JavaScript/TypeScript**: Express handlers, exported functions, `handler`/`middleware` patterns\n\nThen traces BFS execution flows from each entry point through the call graph, classifying flows as intra-community or cross-community.\n\n### See your architecture without reading docs\n\n**Community Detection**\n\nUses the [Leiden algorithm](https://www.nature.com/articles/s41598-019-41695-z) (igraph + leidenalg) to automatically discover functional clusters. Each community gets a cohesion score and auto-generated label. Agents can ask \"what cluster does this symbol belong to?\" and get the answer without reading a single design doc.\n\n### Find hidden dependencies git knows about\n\n**Change Coupling (Git History)**\n\nAnalyzes 6 months of git history to find dependencies that static analysis misses:\n\n```\ncoupling(A, B) = co_changes(A, B) / max(changes(A), changes(B))\n```\n\nFiles with coupling strength \u003e= 0.3 and 3+ co-changes get linked. These show up in impact analysis — so when you change `user.py`, the agent also knows to check `user_test.py` and `auth_middleware.py`.\n\n### Always up to date\n\n**Watch Mode**\n\nLive re-indexing powered by a Rust-based file watcher (watchfiles):\n\n```bash\n$ axon watch\nWatching /Users/you/project for changes...\n\n[10:32:15] src/auth/validate.py modified -\u003e re-indexed (0.3s)\n[10:33:02] 2 files modified -\u003e re-indexed (0.5s)\n```\n\nFile-local phases (parse, imports, calls, types) run immediately on change. Global phases (communities, processes, dead code) batch every 30 seconds.\n\n### Structural diff, not text diff\n\n**Branch Comparison**\n\nCompare branches at the symbol level using git worktrees (no stashing required):\n\n```bash\n$ axon diff main..feature\n\nSymbols added (4):\n  + process_payment (Function) -- src/payments/stripe.py\n  + PaymentIntent (Class) -- src/payments/models.py\n\nSymbols modified (2):\n  ~ checkout_handler (Function) -- src/routes/checkout.py\n\nSymbols removed (1):\n  - old_charge (Function) -- src/payments/legacy.py\n```\n\n### Clean call graphs\n\n**Noise Filtering**\n\nBuilt-in blocklist (138 entries) automatically filters language builtins (`print`, `len`, `isinstance`), JS/TS globals (`console`, `setTimeout`, `fetch`), React hooks (`useState`, `useEffect`), and common stdlib methods from the call graph. Your graph shows *your* code's relationships, not noise from `list.append()`.\n\n---\n\n## The Pipeline\n\nAxon builds deep structural understanding through 12 sequential analysis phases:\n\n| Phase | What It Does |\n|-------|-------------|\n| **File Walking** | Walks repo respecting `.gitignore`, filters by supported languages |\n| **Structure** | Creates File/Folder hierarchy with CONTAINS relationships |\n| **Parsing** | tree-sitter AST extraction — functions, classes, methods, interfaces, enums, type aliases |\n| **Import Resolution** | Resolves import statements to actual files (relative, absolute, bare specifiers) |\n| **Call Tracing** | Maps function calls with confidence scores. Noise filtering skips 138 language builtins |\n| **Heritage** | Tracks class inheritance (EXTENDS) and interface implementation (IMPLEMENTS) |\n| **Type Analysis** | Extracts type references from parameters, return types, and variable annotations |\n| **Community Detection** | Leiden algorithm clusters related symbols into functional communities |\n| **Process Detection** | Framework-aware entry point detection + BFS flow tracing |\n| **Dead Code Detection** | Multi-pass analysis with override, protocol, and decorator awareness |\n| **Change Coupling** | Git history analysis — finds files that always change together |\n| **Embeddings** | 384-dim vectors for every symbol, enabling semantic search. Skip with `--no-embeddings` |\n\n---\n\n## MCP Integration\n\nAxon exposes its full intelligence as an MCP server. Set it up once, and your AI agent has structural understanding of your codebase forever.\n\n### Setup\n\n**Claude Code** — add to `.mcp.json` in your project root (or run `claude mcp add axon -- axon serve --watch`):\n\n```json\n{\n  \"mcpServers\": {\n    \"axon\": {\n      \"command\": \"axon\",\n      \"args\": [\"serve\", \"--watch\"]\n    }\n  }\n}\n```\n\n**Cursor** — add to your MCP settings:\n\n```json\n{\n  \"axon\": {\n    \"command\": \"axon\",\n    \"args\": [\"serve\", \"--watch\"]\n  }\n}\n```\n\nOptional new feature:\n\n```bash\naxon host --watch\n```\n\nThis starts a shared host for the UI and multiple MCP clients. `axon setup --claude` / `axon setup --cursor` still prints the standard config.\n\nThe `--watch` flag enables live re-indexing — the graph updates as you edit code.\n\n### Tools\n\n| Tool | What the agent gets |\n|------|-------------|\n| `axon_query` | Hybrid search (BM25 + vector + fuzzy) with results grouped by execution flow |\n| `axon_context` | 360-degree view — callers, callees, type refs, confidence tags, dead code status |\n| `axon_impact` | Blast radius grouped by depth — direct (will break), indirect (may break), transitive |\n| `axon_dead_code` | All unreachable symbols grouped by file |\n| `axon_detect_changes` | Map a `git diff` to affected symbols and execution flows |\n| `axon_list_repos` | All indexed repositories with stats |\n| `axon_cypher` | Read-only Cypher queries against the knowledge graph |\n\nEvery tool response includes a **next-step hint** guiding the agent through a natural investigation workflow:\n\n```\nquery   -\u003e \"Next: Use context() on a specific symbol for the full picture.\"\ncontext -\u003e \"Next: Use impact() if planning changes to this symbol.\"\nimpact  -\u003e \"Tip: Review each affected symbol before making changes.\"\n```\n\n### Resources\n\n| URI | Description |\n|-----|-------------|\n| `axon://overview` | Node and relationship counts by type |\n| `axon://dead-code` | Full dead code report |\n| `axon://schema` | Graph schema reference for Cypher queries |\n\n---\n\n## API Endpoints\n\nThe web UI is backed by a FastAPI server. All endpoints are under `/api`:\n\n| Endpoint | Description |\n|----------|-------------|\n| `GET /api/graph` | Full knowledge graph (paginated) |\n| `GET /api/node/{id}` | Node detail with callers, callees, type refs |\n| `GET /api/overview` | Aggregate node/edge counts |\n| `GET /api/search` | Hybrid search (BM25 + vector + fuzzy) |\n| `GET /api/impact/{id}` | Blast radius analysis by depth |\n| `GET /api/dead-code` | Dead code report |\n| `GET /api/communities` | Community listing with members |\n| `GET /api/coupling` | Change coupling heatmap data |\n| `GET /api/files/{path}` | Source file content with syntax context |\n| `POST /api/cypher` | Execute read-only Cypher queries |\n| `GET /api/diff` | Structural branch comparison |\n| `GET /api/processes` | Execution flow listing |\n| `GET /api/events` | SSE stream for live reload events |\n| `POST /api/reindex` | Trigger a full re-index (watch mode only) |\n\nCypher queries are validated server-side — write keywords (`CREATE`, `DELETE`, `DROP`, etc.) are rejected after comment stripping.\n\n---\n\n## How It Compares\n\n| Capability | grep / ripgrep | LSP | Context window stuffing | Axon |\n|-----------|---------------|-----|------------------------|------|\n| **Interactive graph UI** | **No** | **No** | **No** | **Yes (full web dashboard)** |\n| Text search | Yes | No | Yes | Yes (hybrid BM25 + vector) |\n| Find all callers | No | Partial | Hit-or-miss | Yes (full call graph with confidence) |\n| Type relationships | No | Yes | No | Yes (param/return/variable roles) |\n| Dead code detection | No | No | No | Yes (multi-pass, framework-aware) |\n| Execution flow tracing | No | No | No | Yes (entry point -\u003e flow) |\n| Community detection | No | No | No | Yes (Leiden algorithm) |\n| Change coupling (git) | No | No | No | Yes (6-month co-change analysis) |\n| Impact analysis | No | No | No | Yes (depth-grouped with confidence) |\n| AI agent integration | No | Partial | N/A | Yes (full MCP server) |\n| Structural branch diff | No | No | No | Yes (node/edge level) |\n| Watch mode | No | Yes | No | Yes (Rust-based, 500ms debounce) |\n| Works offline | Yes | Yes | No | Yes |\n\n---\n\n## Supported Languages\n\n| Language | Extensions | Parser |\n|----------|-----------|--------|\n| Python | `.py` | tree-sitter-python |\n| TypeScript | `.ts`, `.tsx` | tree-sitter-typescript |\n| JavaScript | `.js`, `.jsx`, `.mjs`, `.cjs` | tree-sitter-javascript |\n\n---\n\n## Installation\n\n```bash\n# With pip\npip install axoniq\n\n# With uv (recommended)\nuv add axoniq\n\n# With Neo4j backend support\npip install axoniq[neo4j]\n```\n\nRequires **Python 3.11+**. The web UI (frontend + backend) is included — no Node.js or extra install needed.\n\n### From Source\n\n```bash\ngit clone https://github.com/harshkedia177/axon.git\ncd axon\nuv sync --all-extras\nuv run axon --help\n```\n\nTo rebuild the frontend after making changes (requires Node.js 18+):\n\n```bash\ncd src/axon/web/frontend\nnpm install \u0026\u0026 npm run build\n```\n\n---\n\n## CLI Reference\n\n```\naxon analyze [PATH]          Index a repository (default: current directory)\n    --full                   Force full rebuild (skip incremental)\n    --no-embeddings          Skip vector embedding generation (faster indexing)\n\naxon status                  Show index status for current repo\naxon list                    List all indexed repositories (auto-populated on analyze)\naxon clean                   Delete index for current repo\n    --force / -f             Skip confirmation prompt\n\naxon query QUERY             Hybrid search the knowledge graph\n    --limit / -n N           Max results (default: 20)\n\naxon context SYMBOL          360-degree view of a symbol\naxon impact SYMBOL           Blast radius analysis\n    --depth / -d N           BFS traversal depth (default: 3)\n\naxon dead-code               List all detected dead code\naxon cypher QUERY            Execute a raw Cypher query (read-only)\n\naxon watch                   Watch mode — live re-indexing on file changes\naxon diff BASE..HEAD         Structural branch comparison\n\naxon host                    Shared host for UI + HTTP MCP (default: localhost:8420)\n    --port / -p PORT         Port to serve on (default: 8420)\n    --watch / --no-watch     Enable live file watching\n    --dev                    Dev mode — proxy to Vite dev server for HMR\n    --no-open                Don't auto-open browser\n\naxon ui                      Launch the web UI (default: localhost:8420)\n    --port / -p PORT         Port to serve on (default: 8420)\n    --watch / -w             Enable live file watching with auto-reindex\n    --dev                    Dev mode — proxy to Vite dev server for HMR\n    --no-open                Don't auto-open browser\n    --direct                 Force standalone mode even if a shared host exists\n\naxon setup                   Print MCP configuration JSON\n    --claude                 For Claude Code\n    --cursor                 For Cursor\n\naxon mcp                     Start the MCP server (stdio transport)\naxon serve                   Start the MCP server\n    --watch, -w              Enable live file watching with auto-reindex\naxon --version               Print version\n```\n\n---\n\n## Example Workflows\n\n### \"I need to refactor the User class — what breaks?\"\n\n```bash\n# See everything connected to User\naxon context User\n\n# Check blast radius — grouped by depth\naxon impact User --depth 3\n\n# Find files that always change with user.py\naxon cypher \"MATCH (a:File)-[r:CodeRelation]-\u003e(b:File) WHERE a.name = 'user.py' AND r.rel_type = 'coupled_with' RETURN b.name, r.strength ORDER BY r.strength DESC\"\n```\n\n### \"Is there dead code we should clean up?\"\n\n```bash\naxon dead-code\n```\n\n### \"What are the main execution flows?\"\n\n```bash\naxon cypher \"MATCH (p:Process) RETURN p.name, p.properties ORDER BY p.name\"\n```\n\n### \"Which parts of the codebase are most tightly coupled?\"\n\n```bash\naxon cypher \"MATCH (a:File)-[r:CodeRelation]-\u003e(b:File) WHERE r.rel_type = 'coupled_with' RETURN a.name, b.name, r.strength ORDER BY r.strength DESC LIMIT 20\"\n```\n\n---\n\n## Knowledge Graph Model\n\n### Nodes\n\n| Label | Description |\n|-------|-------------|\n| `File` | Source file |\n| `Folder` | Directory |\n| `Function` | Top-level function |\n| `Class` | Class definition |\n| `Method` | Method within a class |\n| `Interface` | Interface / Protocol definition |\n| `TypeAlias` | Type alias |\n| `Enum` | Enumeration |\n| `Community` | Auto-detected functional cluster |\n| `Process` | Detected execution flow |\n\n### Relationships\n\n| Type | Description | Key Properties |\n|------|-------------|----------------|\n| `CONTAINS` | Folder -\u003e File/Symbol hierarchy | -- |\n| `DEFINES` | File -\u003e Symbol it defines | -- |\n| `CALLS` | Symbol -\u003e Symbol it calls | `confidence` (0.0-1.0) |\n| `IMPORTS` | File -\u003e File it imports from | `symbols` (names list) |\n| `EXTENDS` | Class -\u003e Class it extends | -- |\n| `IMPLEMENTS` | Class -\u003e Interface it implements | -- |\n| `USES_TYPE` | Symbol -\u003e Type it references | `role` (param/return/variable) |\n| `EXPORTS` | File -\u003e Symbol it exports | -- |\n| `MEMBER_OF` | Symbol -\u003e Community it belongs to | -- |\n| `STEP_IN_PROCESS` | Symbol -\u003e Process it participates in | `step_number` |\n| `COUPLED_WITH` | File -\u003e File that co-changes with it | `strength`, `co_changes` |\n\n### Node ID Format\n\n```\n{label}:{relative_path}:{symbol_name}\n\nExamples:\n  function:src/auth/validate.py:validate_user\n  class:src/models/user.py:User\n  method:src/models/user.py:User.save\n```\n\n---\n\n## Architecture\n\n```\nSource Code (.py, .ts, .js, .tsx, .jsx)\n    |\n    v\n+----------------------------------------------+\n|         Ingestion Pipeline (12 phases)        |\n|                                               |\n|  walk -\u003e structure -\u003e parse -\u003e imports        |\n|  -\u003e calls -\u003e heritage -\u003e types                |\n|  -\u003e communities -\u003e processes -\u003e dead_code     |\n|  -\u003e coupling -\u003e embeddings                    |\n+----------------------+-----------------------+\n                       |\n                       v\n              +-----------------+\n              | KnowledgeGraph  |  (in-memory during build)\n              +--------+--------+\n                       |\n          +------------+------------+\n          v            v            v\n     +---------+ +---------+ +---------+\n     | KuzuDB  | |  FTS    | | Vector  |\n     | (graph) | | (BM25)  | | (HNSW)  |\n     +----+----+ +----+----+ +----+----+\n          +------------+------------+\n                       |\n              StorageBackend Protocol\n                       |\n           +-----------+-----------+\n           v           v           v\n     +----------+ +----------+ +----------+\n     |   MCP    | |  Web UI  | |   CLI    |\n     |  Server  | | (FastAPI | | (Typer)  |\n     | (stdio)  | |  + React)| |          |\n     +----+-----+ +----+-----+ +----+-----+\n          |             |            |\n     Claude Code    Browser      Terminal\n     / Cursor      (developer)  (developer)\n```\n\n### Tech Stack\n\n| Layer | Technology | Purpose |\n|-------|-----------|---------|\n| Parsing | tree-sitter | Language-agnostic AST extraction |\n| Graph Storage | KuzuDB | Embedded graph database with Cypher, FTS, and vector support |\n| Graph Algorithms | igraph + leidenalg | Leiden community detection |\n| Embeddings | fastembed | ONNX-based 384-dim vectors (~100MB, no PyTorch) |\n| MCP Protocol | mcp SDK (FastMCP) | AI agent communication via stdio |\n| Web Backend | FastAPI + Uvicorn | REST API for the web UI, SSE for live updates |\n| Web Frontend | React + TypeScript + Vite | Interactive dashboard with Tailwind CSS |\n| Graph Visualization | Sigma.js + Graphology | WebGL graph rendering with ForceAtlas2 layout |\n| CLI | Typer + Rich | Terminal interface with progress bars |\n| File Watching | watchfiles | Rust-based file system watcher |\n| Gitignore | pathspec | Full `.gitignore` pattern matching |\n\n### Storage\n\nEverything lives locally:\n\n```\nyour-project/\n+-- .axon/\n    +-- kuzu/          # KuzuDB graph database (graph + FTS + vectors)\n    +-- meta.json      # Index metadata and stats\n```\n\nAdd `.axon/` to your `.gitignore`.\n\nA global registry at `~/.axon/repos/` is automatically populated on `axon analyze`, enabling `axon list` to discover all indexed repositories across your machine.\n\nThe storage layer is abstracted behind a `StorageBackend` Protocol — KuzuDB is the default, with an optional Neo4j backend available via `pip install axoniq[neo4j]`.\n\n---\n\n## Development\n\n```bash\ngit clone https://github.com/harshkedia177/axon.git\ncd axon\nuv sync --all-extras\n\n# Run tests\nuv run pytest\n\n# Lint\nuv run ruff check src/\n\n# Run from source\nuv run axon --help\n\n# Frontend development (React + Vite with HMR)\ncd src/axon/web/frontend\nnpm install\nnpm run dev                  # Vite dev server on :5173\n# In another terminal:\nuv run axon ui --dev         # Backend on :8420, proxies to Vite\n```\n\n---\n\n## License\n\nMIT\n\n---\n\nBuilt by [@harshkedia177](https://github.com/harshkedia177)\n","funding_links":[],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharshkedia177%2Faxon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharshkedia177%2Faxon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharshkedia177%2Faxon/lists"}