enola CLI

A CLI that builds a dependency graph from code with no AI model and serves it to agents over MCP: what an edit touches, whether layers hold

  • 278 ★ on the repository
  • Last commit
  • Apache-2.0
CLI

Extended access

Why this level

  • Reads the whole repository and saves a graph snapshot into the .enola/ folder
  • enola install --hooks edits agent settings and adds a hook that runs at the end of every agent turn, but it lists the files and asks first
All reasons and checks

enola-labs/enola

Install

Manual install

curl -fsSL https://raw.githubusercontent.com/enola-labs/enola/main/install.sh | sh

A prebuilt binary lands in `~/.local/bin`; no Go or C toolchain is needed. A `pip install enola-cli` package exists too.

Access and checks

How we review

Extended accessThe tool runs code or makes network calls and only reads external data.

  • Reads the whole repository and saves a graph snapshot into the .enola/ folder
  • enola install --hooks edits agent settings and adds a hook that runs at the end of every agent turn, but it lists the files and asks first

This is third-party code. Review the repository files before installing.

What it does

enola reads source code and records what is in it: modules, functions, API routes, the database tables it touches, the message topics it publishes. It then links those pieces to each other, inside one repository and across several. The result is a graph you can ask what an edit to a function would affect, or hand to an agent. The `enola --explain` command with a repository path prints an overview: languages, dependency cycles, layer violations, the most coupled modules. `enola baseline pin` records the current state, and `enola check` after your edits reports only what changed. The layer order and the calls services may make are declared in an intent file. For an agent, enola runs as an MCP server, and `enola install --hooks` adds a hook: after an edit the agent runs the same check and sees what it broke. The analysis is deterministic: the same code always produces the same graph.

Who it is for. For developers and teams who change large or multi-service codebases with Claude Code, Codex or Cursor and want architecture checked automatically.

Good fit when

  • You need to know what depends on a function, route or module before editing it
  • The team declared a layer order and CI should fail on new violations
  • A frontend calls a backend in another repository and you want the call linked to its handler
  • An agent burns tokens on text search and needs a short answer about structure
  • You want to load the graph into your own tool: a snapshot is a set of plain files with a documented format

Not a fit when

  • You need runtime behaviour: enola models structure and knows nothing about timeouts, retries or lost messages
  • Request URLs are built at runtime: enola marks such calls unresolved and does not guess
  • You need proof the repository is clean: a clean `enola check` only means the change added nothing new
  • Your language is outside the roughly twenty supported ones: gaps can be reported in issues

Example request

I want to rewrite the discount calculation function. Ask the enola graph what depends on it and list the call sites

Limitations

Most findings are advisory: across the benchmark corpus 91.6% of them could not fail a build even with every check named. Nothing fails by default; you choose which checks should, for example `enola check --fail-on=layers`. Per-language limits are described in docs/extraction. Unresolved calls, such as URLs built at runtime, are shown as a separate list and never filled in by guesswork.

How to disable. The `enola uninstall` command reverses everything `enola install` changed: hooks and agent settings entries. The binary sits in `~/.local/bin`, saved graphs in the repository's `.enola/` folder.

FAQ

How do I connect enola to Claude Code and Codex?

For Claude Code run `claude mcp add enola enola`, for Codex `codex mcp add enola -- enola`. Cursor reads a block with the enola command from `.cursor/mcp.json`, and opencode gets the server registered by `enola install`.

Does enola need an AI model or an account?

No. It is one binary that parses code locally, sends nothing and needs no account. The graph comes from parsing, so the same code gives the same result.

Which languages does enola read?

More than twenty: Go, Java, Kotlin, Scala, JavaScript, TypeScript, Python, Ruby, PHP, Swift, Dart, Rust, C and C++, and .NET languages. OpenAPI, gRPC, GraphQL, AsyncAPI, Terraform and Ansible are parsed too.

How do I run the check on every pull request?

Add the `enola-labs/enola-action@v2` action: it compares the base commit with the branch, annotates lines with findings and writes the result to the job summary. By default it only reports; the fail-on parameter turns on blocking.

How does enola link several repositories?

You describe a cluster of a backend and its clients, and enola matches calls to routes. The `enola coverage` command shows which calls were linked and which were not. A frontend call to `/api/orders`, for example, is tied to a Go handler.

Discussion

No questions or reviews yet.

CLI tools

Local code structure graph: builds a repository map with tree-sitter and serves the assistant only the context a change actually touches over MCP

MCP serverExtended access32.5KRepository stars
Official

A local code graph with version history: an MCP server that tells the agent who calls a function and what an edit breaks

MCP serverExtended access508Repository stars
Editors’ pick

Indexes a codebase into a knowledge graph and gives the agent call chains, change blast radius and code search over MCP

MCP serverExtended access48.1KRepository stars

Local code graph for agents: an MCP server returns entry points, symbol links and change impact in one call

MCP serverExtended access75.8KRepository stars

A dependency-free CLI and MCP server that builds a call graph of a repository so the agent understands code without reading whole files

CLIExtended access2.5KRepository stars

Comparison with similar tools

Entries that share the main search query, and how they differ.

EntryOfficialAuthenticationRepository starsMain difference
enola (this entry)no278
CodeGraph (Rust)nonot required908a Rust code graph with four MCP tools and no CI architecture gate
SocratiCodenonot required3,358a local codebase index with hybrid search and dependency graphs
Memtraceyesnot required508a code knowledge graph with version history

README in short

The README opens with a run on enola's own repository: the command prints the fact count, cycles, layer violations and the most loaded modules. It then covers grading a change with baseline and check, running in CI, connecting agents over MCP and joining several repositories into one graph. A benchmarks section gives measurements on public repositories, and the author lists the limitations.

README badge

Report a problem

Foxx AIenola
Foxx AI

I am Foxx AI and I have already vetted this tool. Ask about install, setup or anything else, and I will keep it simple.