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.0.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.0-py3-none-any.whl (54.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: hawkeye_analyzer-0.1.0.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.0.tar.gz
Algorithm Hash digest
SHA256 2af4afbe189fbefab941b413bdcde31e7adc76aa0cb51552f9f8cda48b50d22e
MD5 96a73725eeb8c59da409b263f98987ad
BLAKE2b-256 1c167f0d8ada0dd88def3501dfdca90b406075c22586847e74083d1cfc8c536b

See more details on using hashes here.

Provenance

The following attestation bundles were made for hawkeye_analyzer-0.1.0.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.0-py3-none-any.whl.

File metadata

File hashes

Hashes for hawkeye_analyzer-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 87ea83a7a816ca7d2957f184a8728009d97d803573d20ab526bc7b66bb7c51aa
MD5 77411b2be480518c70311ad2972a6e95
BLAKE2b-256 21a468f201f32fa11a0b03cfdd5dc497e264e385e36880c80a467a59b83a235c

See more details on using hashes here.

Provenance

The following attestation bundles were made for hawkeye_analyzer-0.1.0-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