Free
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.
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.
For whoever has to approve it
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.
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.
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.
📄 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.
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.handler packageREFACTORING.md Fail core.exception must not depend on command internalsARCHITECTURE.md Pass Advisory: striff's reading, not a check
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 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 betterReal pull requests, real findings
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 evidenceFor engineering managers
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.
DefaultCommandHandlerManager sits in implementation, but REFACTORING.md requires command handlers to live in handler.
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.
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.
Clean PR rateShare of analyzed pull requests with zero regressions or hotspots flagged, over the last 6 months.
High-risk PR rateShare of analyzed pull requests with at least one regression flagged, the more severe finding type, over the last 6 months.
PRs analyzedTotal pull requests Striff reviewed for architecture across every active repo in this installation.
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.
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
Merge auth and billing request pipelines
Add retry backoff to invoice webhook consumer
Refactor onboarding wizard step components
Introduce direct DB call from the notifications module
Bump Stripe SDK to v18
Extract shared form validation hook
Collapse billing and shipping address models
Add idempotency key support to charge endpoint
Move auth token refresh into shared context provider
Route webhook fan-out through billing-service directly
Add token-bucket rate limiter to gateway middleware #1842
All checks have passed
4 successful checks
All 12 structural checks passed. 2 documented rules checked, no new violation. Rate limiter stays inside gateway/middleware, as ARCHITECTURE.md requires.
Free Chrome extension
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.
Get started
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
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
One team's private repos
GitHub App checks on every private PR. Automated architecture review with the full detector suite and risk scoring.
Enterprise
Self-hosted & 50+ repos
Private deployment, SSO, and audit workflows for organizations that need full control.
FAQ
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.
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.
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.
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.
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.
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).
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.
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.