architecture guardrails, in your terminal

Code is cheap.
Architecture is not.

AI writes more code than your team can review. ovecc catches the changes that break your architecture, before they merge.

ovecc MCP

Your agent stops grepping.

Same repo, same question, same model. The answer comes from one indexed query.

Asking whether a new import closes a dependency cycle, zod, Claude Sonnet 4.6
Reading filesWith ovecc
Finding the callersgrep, then open every hitone indexed query
Tokens per questionbaseline9× fewer
Cost per questionbaseline7× cheaper
Wall clockbaseline9× faster
Dependency cyclesinvisible to grepnamed, with the edge that closes them
Verdict you can gate onnoneexit code

The counters run live in the clip. Method and the numbers where ovecc loses: read the benchmarks.

With ovecc on the left. Without ovecc on the right.

What a diff review misses

Your reviewer sees the lines that changed. None of this shows up there, and every one of them gets more expensive the longer it sits.

findings, with severity
  • HIGH dependency cycles between modules
  • HIGH boundary leaks into internals
  • MED hotspot files everyone edits
  • MED duplicated logic drifting apart
  • HIGH secrets & insecure patterns in diffs
  • MED exports with no remaining callers

architecture as code

Rules your agent can't quietly break

Declare what each component may depend on. Every run checks the whole repo and points at the line that broke it.

.ovecc/architecture.toml

# your intended architecture, as code
[[component]]
name = "api"
paths = ["src/api/**"]
depends_on = ["core"]

[[component]]
name = "features"
paths = ["src/features/**"]
depends_on = ["core"]
slices = true

[[component]]
name = "core"
paths = ["src/core/**"]
deny_capabilities = ["network"]
max_cyclomatic = 8

$ ovecc architecture check

Divergences (1)
Highapi → features is not in the contract
src/api/routes.ts:2
Slice isolation breaches (1)
Highfeatures/billing → features/users
src/features/billing/service.ts:1
Denied capabilities used (1)
Medcore uses denied capability 'network'
src/core/pricing.ts:3 (fetch)
Complexity budgets exceeded (1)
Medcore: cyclomatic 11 > 8
src/core/pricing.ts:8
✗ exit 1 · contract broken in 4 places

ovecc architecture init writes the first contract from your real imports, so day one starts green. In CI, drift fails the pull request.

The five you'll actually run

All of them read the same index and exit non-zero on a finding, so any of them can gate a build.

ovecc impact

Blast radius. Every module a change can break before you merge it.

ovecc review

Only the new defects a change introduces, each with its file and line.

ovecc architecture

Your contract, checked. Declare each component's allowed dependencies once.

ovecc gate

One exit code for CI. Fails the pull request on anything new.

ovecc mcp

Every command as an MCP tool your agent calls directly.

install

One binary, no runtime

Nothing to configure and no account to create. Your code never leaves the machine.

npx ovecc index .

npm downloads only the binary for your platform. npm i -g ovecc keeps it on your PATH.

Or take the binary directly, with no Node involved:

Older versions and checksums are on the releases page. A browser download on macOS needs one extra step.

Get the release notes

One short email when a version ships. Nothing else, and unsubscribing is one click.

or star it on GitHub

See what your codebase
actually looks like.

One command: npx ovecc index .