Skip to main content

Python dependency graph analyzer, architecture enforcer, and MCP server for AI coding agents

Project description

๐Ÿฆ… Hawkeye

Python architectural intelligence engine โ€” dependency analysis, symbol-level impact tracking, and MCP server for AI coding agents.

Hawkeye gives AI editors (Claude Code, Cursor, Windsurf) full architectural awareness before they edit your code โ€” preventing broken imports, hidden coupling, and circular dependencies.

Python 3.10+ License: MIT Tests


Installation

# From source (recommended during beta)
git clone https://github.com/AlexxBenny/Hawkeye-analyze-your-codebase.git
cd Hawkeye-analyze-your-codebase
pip install -e .

# With MCP server for AI editors
pip install -e ".[mcp]"

Quick Start

# 1. Analyze any Python project
hawkeye analyze /path/to/project

# 2. Get full architectural context for a file
hawkeye context /path/to/project src/core/engine.py

# 3. Check symbol-level impact before refactoring
hawkeye impact /path/to/project src/core/engine.py -s Engine

# 4. Find coupling hotspots
hawkeye impact /path/to/project src/core/engine.py --hotspots

# 5. Find dead code
hawkeye impact /path/to/project src/core/engine.py --unused

# 6. Open interactive dependency graph
hawkeye show /path/to/project

# 7. Enforce architecture rules in CI
hawkeye check /path/to/project --no-cycles

Why Hawkeye?

Problem How Hawkeye Solves It
"I changed a class and 5 tests broke" hawkeye impact shows blast radius before you edit
"This codebase has spaghetti imports" hawkeye analyze maps the entire dependency graph
"Which module is the riskiest?" hawkeye metrics ranks by instability + complexity
"Are there circular imports?" hawkeye check --no-cycles detects and suggests fixes
"AI editor made a bad import" MCP server gives the AI full context before it writes

CLI Commands (7)

Command Description
hawkeye analyze <path> Full project analysis (text/json/dot/html output)
hawkeye context <path> <file...> Architectural context for one or more files
hawkeye impact <path> <file> Symbol-level impact analysis, hotspots, dead code
hawkeye show <path> Open interactive D3.js graph in browser
hawkeye check <path> Enforce architecture rules (CI/CD exit codes)
hawkeye metrics <path> Coupling + complexity metrics table
hawkeye serve Start MCP server for AI editors

Example: hawkeye analyze

=== PROJECT SUMMARY: MyApp ===

  Modules:          20
  Dependencies:     40
  Total LOC:        2696
  Graph density:    0.1053
  Avg instability:  0.444
  Has cycles:       No โœ…

  Health breakdown:
    โœ… Healthy:     9
    โš ๏ธ  Warning:    5
    ๐Ÿ”ด Critical:    6

โ”€โ”€ Module Metrics โ”€โ”€
Module                       Ca   Ce       I    LOC   Health
MyApp.core.graph              8    2   0.200    251     ๐Ÿ”ด
MyApp.core.metrics            5    1   0.167    144     โš ๏ธ
MyApp.core.analyzer           3    1   0.250    328     ๐Ÿ”ด
MyApp.config                  4    0   0.000    102     โœ…

Example: hawkeye impact --hotspots

๐Ÿ”ฅ Symbol Hotspots (imported by โ‰ฅ2 modules):

  DependencyGraph       (core.graph)     โ†’ 16 importers
  ModuleMetrics         (core.metrics)   โ†’ 10 importers
  HawkeyeEngine         (engine)         โ†’  6 importers

Example: hawkeye impact --unused

๐Ÿ’€ Unused Symbols (5 found):

  EdgeInfo              (core.graph)        โ† safe to make private
  analyze_file          (core.analyzer)     โ† superseded by analyze_project

AI Editor Integration (MCP)

Hawkeye exposes 10 MCP tools designed for AI coding agents. Add to your editor's MCP config:

{
  "mcpServers": {
    "hawkeye": {
      "command": "hawkeye-mcp",
      "args": ["--project", "/path/to/your/project"]
    }
  }
}

MCP Tools

Tool Purpose
hawkeye_analyze(path) Scan project โ€” call this first
hawkeye_file_context(file) Everything about a file in one call โ€” deps, dependents, impact, cycles, health
hawkeye_context(files) Combined context for multi-file editing sessions
hawkeye_impact(file, symbol, mode) Symbol-level blast radius, hotspots, dead code
hawkeye_symbols(file) List all classes/functions with usage counts
hawkeye_find(pattern) Search for modules by name
hawkeye_cycles() Import cycles with severity and break suggestions
hawkeye_metrics(sort_by) Coupling + complexity metrics for all modules
hawkeye_path(source, target) Shortest dependency path between modules
hawkeye_graph(max_depth) Full graph as structured JSON

Example: hawkeye_file_context

One call gives the AI agent everything it needs:

{
  "module": "myapp.core.engine",
  "file": "core/engine.py",
  "loc": 340,
  "dependency_count": 3,
  "dependent_count": 8,
  "dependencies": [
    {"module": "myapp.core.scanner", "file": "core/scanner.py"},
    {"module": "myapp.core.analyzer", "file": "core/analyzer.py"}
  ],
  "dependents": [
    {"module": "myapp.cli", "file": "cli.py"},
    {"module": "myapp.server.mcp", "file": "server/mcp.py"}
  ],
  "impact": {"direct": 8, "transitive": 12},
  "metrics": {
    "ca": 8, "ce": 3, "instability": 0.273,
    "health": "critical",
    "cyclomatic_complexity": 45,
    "cognitive_complexity": 32
  }
}

Architecture Rules

Define rules in hawkeye.toml and enforce them with hawkeye check:

[project]
name = "MyApp"

[scan]
exclude_dirs = ["venv", "__pycache__", ".git"]

# Enforce layered architecture (lower layers can't import higher ones)
[rules.layers]
order = ["models", "services", "api", "cli"]
direction = "downward"

# Block specific import patterns
[[rules.forbidden]]
from = "api.*"
to = ["cli.*", "scripts.*"]

# Ensure module groups are independent
[[rules.independence]]
modules = ["auth", "billing", "notifications"]
# CI/CD integration โ€” exits non-zero on violations
hawkeye check /path/to/project --no-cycles

Core Analysis Features

Dependency Graph

  • AST-based import resolution (relative, absolute, symbol-level)
  • Directed graph with transitive closure, shortest path, neighborhood extraction
  • Topological sort, depth filtering, subgraph extraction

Coupling Metrics (Robert C. Martin)

  • Ca โ€” Afferent coupling (who depends on me)
  • Ce โ€” Efferent coupling (who do I depend on)
  • I โ€” Instability (Ce / (Ca + Ce)) โ€” 0.0 = stable, 1.0 = unstable

Complexity Metrics

  • Cyclomatic complexity โ€” decision branches per function
  • Cognitive complexity โ€” nesting-weighted (SonarSource specification)
  • Per-function, per-class, and per-module aggregation

Cycle Detection

  • Tarjan's Strongly Connected Components (SCC) algorithm
  • Severity scoring (low โ†’ critical based on cycle size + coupling)
  • Break suggestions with specific edge recommendations

Symbol Resolution

  • Cross-file symbol registry (class X defined in module Y)
  • Import โ†’ definition matching
  • Hotspot detection (most-imported symbols)
  • Dead code detection (defined but never imported)
  • Symbol-level impact analysis (blast radius per class/function)

Health Scoring

  • Composite of coupling + complexity โ†’ healthy / warning / critical
  • Per-module and project-level aggregation

Visualization

Interactive HTML (D3.js)

hawkeye show /path/to/project           # Opens in browser
hawkeye analyze /path/to/project -f html -o graph.html

Force-directed graph with search, zoom, drag, click-to-inspect. Color-coded by health status.

Graphviz DOT

hawkeye analyze /path/to/project -f dot -o deps.dot
dot -Tpng deps.dot -o deps.png

JSON

hawkeye analyze /path/to/project -f json

Project Structure

Hawkeye/
โ”œโ”€โ”€ src/hawkeye/
โ”‚   โ”œโ”€โ”€ engine.py               # Central orchestrator (9-step pipeline)
โ”‚   โ”œโ”€โ”€ config.py               # TOML config with walk-up discovery
โ”‚   โ”œโ”€โ”€ cli.py                  # 7 CLI commands
โ”‚   โ”œโ”€โ”€ core/                   # Analysis pipeline
โ”‚   โ”‚   โ”œโ”€โ”€ scanner.py          #   File discovery + LOC counting
โ”‚   โ”‚   โ”œโ”€โ”€ analyzer.py         #   AST imports + symbols + complexity
โ”‚   โ”‚   โ”œโ”€โ”€ graph.py            #   Directed graph + algorithms
โ”‚   โ”‚   โ”œโ”€โ”€ metrics.py          #   Coupling + complexity metrics
โ”‚   โ”‚   โ”œโ”€โ”€ cycles.py           #   Tarjan's SCC + severity scoring
โ”‚   โ”‚   โ”œโ”€โ”€ rules.py            #   Architecture rule enforcement
โ”‚   โ”‚   โ””โ”€โ”€ symbols.py          #   Cross-file symbol resolution
โ”‚   โ”œโ”€โ”€ server/                 # AI editor integration
โ”‚   โ”‚   โ””โ”€โ”€ mcp.py              #   10 MCP tools
โ”‚   โ””โ”€โ”€ visualizer/             # Output renderers
โ”‚       โ”œโ”€โ”€ html_renderer.py    #   Interactive D3.js graph
โ”‚       โ”œโ”€โ”€ dot_renderer.py     #   Graphviz DOT format
โ”‚       โ”œโ”€โ”€ text_renderer.py    #   Terminal tables + summaries
โ”‚       โ””โ”€โ”€ json_renderer.py    #   Structured JSON
โ”œโ”€โ”€ tests/                      # 195 tests (pytest)
โ”‚   โ”œโ”€โ”€ conftest.py             #   Shared fixtures
โ”‚   โ”œโ”€โ”€ test_scanner.py         #   17 tests
โ”‚   โ”œโ”€โ”€ test_analyzer.py        #   22 tests
โ”‚   โ”œโ”€โ”€ test_graph.py           #   16 tests
โ”‚   โ”œโ”€โ”€ test_metrics.py         #   15 tests
โ”‚   โ”œโ”€โ”€ test_cycles.py          #   14 tests
โ”‚   โ”œโ”€โ”€ test_rules.py           #   16 tests
โ”‚   โ”œโ”€โ”€ test_symbols.py         #   27 tests
โ”‚   โ””โ”€โ”€ test_engine.py          #   22 tests
โ”œโ”€โ”€ examples/                   # Usage examples
โ”œโ”€โ”€ hawkeye.toml                # Example config
โ”œโ”€โ”€ pyproject.toml              # pip install ready
โ””โ”€โ”€ LICENSE                     # MIT

Zero required dependencies. Core analysis runs on Python stdlib only. MCP server requires pip install mcp.


Requirements

  • Python 3.10+
  • No dependencies for core analysis
  • mcp package for AI editor integration (optional)

License

MIT โ€” see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hawkeye_analyzer-0.1.2.tar.gz (64.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hawkeye_analyzer-0.1.2-py3-none-any.whl (54.7 kB view details)

Uploaded Python 3

File details

Details for the file hawkeye_analyzer-0.1.2.tar.gz.

File metadata

  • Download URL: hawkeye_analyzer-0.1.2.tar.gz
  • Upload date:
  • Size: 64.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hawkeye_analyzer-0.1.2.tar.gz
Algorithm Hash digest
SHA256 bb4ae7cb6b3d4e3d89c0bbf4591517270c0d55f583e11b10f973425f87ec75b2
MD5 68314800bf562a10102e683cdae54c50
BLAKE2b-256 4430e2c7e26086cc6825dad7b64d1a28385f2d133cc8ec27a1dc65c131b081bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for hawkeye_analyzer-0.1.2.tar.gz:

Publisher: ci.yml on AlexxBenny/Hawkeye-analyze-your-codebase

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hawkeye_analyzer-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for hawkeye_analyzer-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f0eb62a279d81cbb0d4c24b9ac735669916a78f27d561f5451e176cf6fb224b1
MD5 b646d6a916c282a41668ed94c54aa44a
BLAKE2b-256 18c3d031b744523c385d2dc2c622a5e245afdee5715045d41f7326a9cba93f0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for hawkeye_analyzer-0.1.2-py3-none-any.whl:

Publisher: ci.yml on AlexxBenny/Hawkeye-analyze-your-codebase

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page