What’s the weak link in your repo?
Static analysis deep enough for CI, fast enough for your coding agent to run on every edit.
Catch bugs while
the context is fresh.
Your coding agent runs SlopCop after each edit, fixes what it finds and keeps working, without waiting for CI.
- Your agent edits a file.
- SlopCop checks the change.
- The agent fixes what it finds and keeps going.
Again on the next edit.
When the task is done, you push. Analyzers this deep usually run once, in CI, after the agent has moved on.
Problems don’t stay
in one file.
A request parameter can cross three files before it reaches a SQL query, and SlopCop follows it the whole way.
8@app.get("/users")9def search( ):10 return find_user( request .args[ "name"])1 2
4def find_user(name):5 return run_query( FIND_USER % name)3 4
3FIND_USER = "SELECT id, email FROM users WHERE name = '%s'"4 5def run_query(sql):6 with sqlite3 .connect( "app.db") as conn:7 return conn .execute( sql) .fetchall( )5 6
Ruff 0.16.10, every rule on
14 warnings, none about the injection.
- D100Missing docstring in public module×3
- CPY001Missing copyright notice at top of file×3
- ANN201Missing return type annotation for public function×3
- D103Missing docstring in public function×3
- ANN001Missing type annotation for function argument×2
Its SQL check looks for SQL written into the string. Here the SQL is in db.py, so nothing is flagged.
SlopCop
1 finding: the SQL injection.
A request parameter reached the query argument of Connection.execute(sql) Certainty: definite; proof: proven; completeness: complete
- 1sourceroutes.py:10:22
request.args["name"] - 2callroutes.py:10:12
find_user(…) - 3propagationusers.py:5:34
name - 4callusers.py:5:12
run_query(FIND_USER % name) - 5propagationdb.py:7:29
sql - 6sinkdb.py:7:16
conn.execute(sql)
It follows the value from the request to the query, so your agent sees where the input came from before it changes anything.
Nothing to
second-guess.
SlopCop checks code with Bifrost, an open-source static analysis engine rather than a language model, so every finding traces back to a rule and the lines that triggered it.
- Same code, same findings
- Running the check twice on the same code gives the same result, so a finding that disappears was fixed rather than missed.
- Checks half-finished edits
- It reads the source as written, so your agent can check a change before the project builds again.
- Right when it answers
- Each finding says whether it is proven, and a check that runs out of budget is reported as incomplete rather than as a pass.
Languages
- C
- C++
- C#
- Go
- Java
- JavaScript
- Kotlin
- PHP
- Python
- Ruby
- Rust
- Scala
- TypeScript
Coverage differs by language. Bifrost is written in Rust and licensed under Apache-2.0.
Answers it can prove
On DataFlowBench v0.9.0, Bifrost answers fewer of the 952 kernel data-flow assertions than CodeQL, and gets every one it answers right.
Bifrost524 answered, all correct
CodeQL741 answered, 145 wrong
Get set up
on a call.
Tell us about your codebase, and we’ll get on a call to set SlopCop up in your team’s coding agents and CI, so problems are caught on every edit and again before every merge.
Meet the team
- Jonathan Ellis
SlopCop founder and CEO, DataStax co-founder and former CTO, and former Apache Cassandra project chair.
- David Baker Effendi
PhD in computer science, with published research in static analysis. He develops Bifrost’s code intelligence and helped maintain and extend Joern’s analysis.
- Ryan Svihla
Built diagnostics for distributed systems at DataStax and Dremio. Today he builds SlopCop’s agentic coding tools and the infrastructure behind them.
Find the weak link
before it ships.
Create an account, pick a repository, and SlopCop starts indexing it.
Read-only access. SlopCop never builds or runs your code.Security details
The GitHub App reads source in the repositories you select. Sending a deep-review action as an issue requires optional Issues write permission and your confirmation.
Anyone holding a valid report-access link can view the report. Links are unlisted, and access is not restricted to your GitHub collaborators. Treat private-code report links as sensitive.
Credential-like matches are reported by location without the matched value. Flagged files are excluded from source excerpts. Detection is bounded and does not guarantee that every secret is found.