More code isn't more product.

Your team merges more code every week than anyone can read, and every risky change routes to the one person who can judge it. Striff is architecture review for every GitHub pull request. It checks each change against the architecture you documented and reports back as one check, so approving a merge stops being a judgment call only your most senior engineer can make.

What posts on your pull request: a diagram of what changed, and a report of every check that ran
apache/fineract PR #6063 Java 2 HIGH · 2 MEDIUM
Striff / architectural-review
Striff structural diff for apache/fineract PR #6063
Scroll to zoom · Drag to pan
Architecture diagram of this PR
HIGH
Package structure violation

DefaultCommandHandlerManager sits in implementation, but REFACTORING.md requires command handlers to live in handler.

In the report
HIGH
New directional boundary crossing

New dependency from command to command.implementation, with no prior edge in this direction.

In the report
MED
Complexity growth: WMC +10

DefaultCommandHandlerManager WMC grew from 4 to 14: rising cyclomatic complexity in the misplaced class.

In the report
MED
Coupling spike: EC +9

DefaultCommandHandlerManager efferent coupling grew from 8 to 17, making it harder to change in isolation.

In the report
Striff read REFACTORING.md out of this repo and flagged the exact class that contradicts it.

For whoever has to approve it

Your reviewers stop guessing whether it's safe to merge.

Passing tests tell your team the code works today. They say nothing about whether this change made the system harder to work in tomorrow. Striff answers that on the pull request, names the exact class at fault and quotes the rule it broke, so any reviewer on your team can approve with the confidence your staff engineer would.

apache/fineract PR #6063 Checks tab 13 checks · 4 flagged
Striff / architectural-review

Striff / architectural-review

Successful in 26s

Green because Striff reports, it doesn't gate. The findings below are advice your reviewer can act on, not a blocked merge. Mark the check required when you want it to hold the merge button.

Review Summary

This PR moves command-handling responsibility into command.implementation: DefaultCommandHandlerManager is added there, and the command package now depends on it. That dependency direction did not exist between these two packages before.

Top Review Items

  • 📄 Doc Conflict Handler placed outside the documented package

    DefaultCommandHandlerManager sits in implementation. REFACTORING.md requires command handlers in handler.

    Fix Move it, or update the doc.

  • 🎯 Structural Regression command now depends on its own implementation package

    First edge in this direction. The manager gained a dependent (AC 1 → 2) while reaching into core.exception (EC 8 → 17), so the abstraction points at the dispatcher.

    Fix Invert it: expose the manager as an interface from command, wire the concrete class in config.

Documented Rules 2 enforceable · 2 advisory

Extracted from this repository's own docs and checked against the dependencies this PR adds. Pass means this change added no violation, not that the codebase is clean.

  • Command handlers live in the command.handler packageREFACTORING.md Fail
  • core.exception must not depend on command internalsARCHITECTURE.md Pass

Advisory: striff's reading, not a check

  • Each command resolves to exactly one handlerREFACTORING.md may be affected
  • Command handling must not block the request threadARCHITECTURE.md nothing stood out

Structural Checks 12 checks · 3 flagged · 9 clean

  • Boundary crossings1 flagged
  • Complexity growth1 flagged
  • Coupling stability1 flagged
  • Package cyclesclean
  • Cycle seedsclean
  • Module boundariesclean
  • Layer integrityclean
  • Production → test edgesclean
  • Public contract stabilityclean
  • Interface downgradesclean
  • Encapsulationclean
  • Hub formationclean

Thirteen results in all: twelve structural checks, plus the documented-rules check that reads your own docs. Every one reports on every PR, clean or not. Advisory rows are never given a pass: striff cannot prove an intention from structure.

The problem

Your architecture is eroding one merge at a time.

Your team merges more AI-written code every week than anyone can read. Left unchecked, each merge piles on coupling and cycles until every change takes twice as long and nobody wants to touch the core. Striff catches that structural drift on every pull request, while it's still a one-line fix.

Why AI makes this worse, not better

Real pull requests, real findings

The riskiest changes look safe in a file diff.

These are real public pull requests. Each one looked routine file-by-file. Striff read the structure underneath (a core engine reaching into a plugin, drivers rewired into the platform layer, query internals one step from a namespace cycle) and posted the findings before merge.

1 in 3 refactor PRs moves the architecture. See the evidence
  • Live public PRs: open any of them and verify
  • Findings posted on the PR before merge
  • Findings you can trace back to the diagram

For engineering managers

Writing code was never the hard part.

Keeping a system coherent while a dozen people change it every day is the hard part, and it's the part nobody owns. Striff checks every pull request against the architecture you've already documented, then rolls the results into a view of your team's repos, so the system your team is building stays the system you designed.

How Striff turns design docs into enforced checks
Striff structural diagram for apache/fineract PR #6063, zoomed on DefaultCommandHandlerManager
HIGH
Package structure violation

DefaultCommandHandlerManager sits in implementation, but REFACTORING.md requires command handlers to live in handler.

Last 6 monthsFebruary 2026 to July 2026

Regressions flaggedA high-severity structural break Striff traced directly to this PR -- a new dependency cycle, a one-way boundary crossing, a stable component's contract shifting, or a sharp complexity jump. Deliberately rare: most PRs show zero.

30

Hotspots flaggedA lower-severity or anomaly-only finding worth a second look -- coupling or churn signals that don't rise to a confirmed structural regression. Usually zero or one per PR.

54

Clean PR rateShare of analyzed pull requests with zero regressions or hotspots flagged, over the last 6 months.

75%

High-risk PR rateShare of analyzed pull requests with at least one regression flagged, the more severe finding type, over the last 6 months.

7%

PRs analyzedTotal pull requests Striff reviewed for architecture across every active repo in this installation.

425

CoverageShare of GitHub PR-check webhook events (opened, updated, reopened) that completed analysis, over the last 6 months. Below 100% may mean PRs were skipped -- check billing status or repo connection.

93%

Flagged repos over timeEvery repo that has cracked the top-flagged list at any point in the last 6 months, tracked month by month. A repo can show a lower or zero count in months it wasn't flagged enough to be in that month's own top list -- more than one repo commonly appears here as the top spot reshuffles across months.

Recently flagged PRsThe 10 most recent pull requests this month with a structural regression or review hotspot -- click through to see exactly what was flagged.

Jul 2026

acme-corp / platform-api

Add token-bucket rate limiter to gateway middleware #1842

Open jordan-lee wants to merge 6 commits into main from feature/rate-limiter
Conversation 12 Commits 6 Checks 4 Files changed 9

All checks have passed

4 successful checks

continuous-integration / build 44s Details
continuous-integration / test (312) 1m 12s Details
lint 18s Details
Striff / architecture

All 12 structural checks passed. 2 documented rules checked, no new violation. Rate limiter stays inside gateway/middleware, as ARCHITECTURE.md requires.

26s Details

Free Chrome extension

See what any GitHub PR really touches.

Reviewing an unfamiliar change means holding somebody else's dependency graph in your head. Striff draws it for you, in a tab right beside Files changed, so you see what a change touches before you approve it. You never leave GitHub.

  • Interactive dependency diagrams on any PR
  • Comment straight from the diagram
  • AI findings pinned to the graph
  • No backend, and your token stays local
Add to Chrome

Get started

Start with public repos. Scale to your team.

Nothing to learn and no workflow to change: Striff shows up as one more check on the PRs your team already opens. Start free on public repos, add private repos when you're ready.

Free

$0 forever

Public repositories

GitHub App checks on every public PR, plus the browser extension for any public PR you visit. Architecture diagrams, risk findings, and AI review notes.

Starter

$29 /mo · 5 repos

One team's private repos

GitHub App checks on every private PR. Automated architecture review with the full detector suite and risk scoring.

Team $59/mo · Scale $149/mo →

Enterprise

Talk to us

Self-hosted & 50+ repos

Private deployment, SSO, and audit workflows for organizations that need full control.

FAQ

Common questions

Does Striff replace my AI code reviewer (CodeRabbit, Copilot, Claude)?

No, it works alongside them. Striff reviews one layer: the dependency graph your change produces. It reports new cycles, boundary violations, coupling spikes, and god classes forming, and checks the whole thing against the architecture your repo already documents. Line-level bugs, style, and logic stay with your existing review, human or AI.

How does Striff know what my architecture is supposed to look like?

Two ways. Out of the box, twelve deterministic checks run on every PR and flag structural regressions that are almost never intentional: new dependency cycles, first-ever dependency directions between packages, layer skips, and sharp complexity or coupling growth. No configuration needed, and every one of the twelve is listed in the Check with its own result, whether it fired or not. On top of that, if your repo contains architecture docs (an ARCHITECTURE.md, ADRs, or design notes), Striff reads them and checks the dependencies your PR adds against what your team wrote down, quoting the document it came from.

What languages does Striff support?

Java, TypeScript, Python, and C#. Go support is coming soon. Striff parses source code into a full structural model using its own parser, not regex or text matching, so references, inheritance, and coupling are resolved the way a compiler sees them.

Is it just an LLM wrapper?

No. The findings come from deterministic structural analysis of your dependency graph, backed by a model trained on well-architected codebases to tell risky changes from normal ones. The AI layer explains and ranks what the analysis already established, and decides which of those facts are worth your attention; it can never originate a finding of its own. It also writes a short account of what the PR did structurally, which is why a clean PR still gets an explanation rather than a bare verdict.

Will it slow down or block my pull requests?

No. Striff runs as a GitHub Check next to your CI and posts its results when the analysis finishes, typically within a few minutes. It never blocks a merge unless you choose to make the check required.

What do I need to set up?

Just install the GitHub App: it works on public and private repos alike and posts checks automatically on every PR, with no per-developer setup. Plans start at $29/month, based on how many repos actually get reviewed each month, not how many you connect. Separately, there's a free browser extension: a standalone tool that analyzes any public PR directly in GitHub's UI, a handy way to try Striff on open-source code without installing anything on the repo (bring a free GitHub token; it stays in your browser).

Is my source code sent to a third party or stored?

Your code is parsed on Striff's servers in memory and not persisted. The AI explanation layer works from the structural model (component names, relationships, metrics, and doc excerpts), not your raw source files. For teams that need full control, self-hosted deployment is available on the Enterprise plan.

Code is cheap now. Changing it isn't.

Every unchecked merge makes the next change a little more expensive. It compounds quietly, and nobody can point at the day it started. Striff starts checking on your next pull request.