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

Uploaded Python 3

File details

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

File metadata

  • Download URL: hawkeye_analyzer-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 8d5c08065f14a1f84c12fa913cfaea50629fd88b2c0e74ee5cc481603f601115
MD5 65595e6cc734faa3efb94f09ea68e5c9
BLAKE2b-256 b23a03da3b76589083f2449a4f05bb67ddc73eab513db534a50d218a1f6be63a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for hawkeye_analyzer-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 171c298e5677b23295dfa777ac9b178a2be1618e6e02948b6908a4f38b02318e
MD5 c042b95096979a7b74725dffec1830ff
BLAKE2b-256 e572e1d6cc2127afc67d405ad690073188129334b24f3c6c6b0bef41b5e9e588

See more details on using hashes here.

Provenance

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