Diffport

Provenance for code

Your codebase is full of code no human wrote.

You can't prove which parts. Not reliably, not per pull request, not in a way you'd stake a release on. Diffport can.

Reads your repository Never writes to it Never touches your database
Commits from a connected repository pass through
        Diffport and come out as three verdicts: machine written, human written, and untraced.
Claude CodeOpenAI CodexCursor GitHub CopilotDeepSeekDevin Replit AgentAiderQwen Code Lovable

How it works

Four steps, and you never hand over a credential.

Connecting is read-only and takes about a minute. Everything after it happens on its own, as pull requests arrive.

src/Repository/ProjectRepository.php 87% AI
12final class ProjectRepository
13{
14 public function find(int $id): ?Project
15 {
16 $row = $this->db->one(
17 'SELECT * FROM projects WHERE id = ?',
18 [$id, $this->scope->id()],
19 );
20
21 // no signal on this hunk
22 $row = $this->legacy($row);
23 return $row ? Project::fromRow($row) : null;
24 }
github-copilot human untraced
01

Connect a repository

A GitHub App with read access. No keys, no database, no agent installed anywhere.

acme/platform-api

Read · never write

02

It reads the history

Commits, trailers, bot actors and diffs. What is already in the repository, not a survey.

03

Every line gets an origin

Machine, person, or untraced. Untraced stays untraced — it is never rounded up to human.

AI Human Untraced
04

Rules fire where it matters

Destructive migrations, unreviewed high-risk merges, coverage falling. Email, Slack or a signed webhook.

Destructive DDL · alerted
Report signed · archived

Why now

Git records who committed a change. It has never recorded who wrote it, because until recently there was no difference worth tracking.

There is now.

A commit authored by a person, generated by an agent under their account, or written half by each are three different things arriving through the same pipe, and nothing in your toolchain tells them apart.

Proof, not screenshots

Every verdict carries the evidence that produced it.

A conclusion you cannot interrogate is one you will eventually learn to ignore. Diffport shows the signals it read, what each one covered, and how confident it is in each.

Confidence is reported as the weakest link in the chain, never the strongest. A chain is exactly as sound as its worst step.

MIXED acme/platform-api · #481 feat: multi-tenant workspace scoping
AI 64% Human 36% 8 of 8 commits traced

Signals · 3 found

Commit trailer “Co-Authored-By: Copilot” on 5 commits · 960 lines attributed
high
App actor 3 commits authored by copilot-swe-agent[bot], a registered agent identity
high
Diff heuristic Burst size and comment density match agent output. Annotation only — low-confidence signals never move the number.
low

Reported confidence is the lowest of the signals that moved the number. One file carried no signal at all and is counted as untraced, not as human.

Three positions

The parts a competitor would have to give something up to copy.

01

Never inferred

No evidence means unknown, never “human”

The tempting move is to treat anything unattributed as person-written. It makes the numbers look better and the dashboard look complete. It is also a lie that gets more expensive every month. When Diffport has no signal it says untraced, and it will never quietly upgrade that to human to fill a gap.

02

Weakest link

Confidence is the floor, not the ceiling

Most systems report their most confident guess. Diffport reports its least. A conclusion is exactly as sound as the worst step used to reach it, and reporting anything higher is how a tool teaches you to stop believing it.

03

Not a defect

Machine-written is not a fault

Diffport does not score AI code as risky. It changes how much review a change has to earn. Those are different claims, and conflating them produces a tool that punishes the thing your team is trying to do, which is ship faster.

What it does not do

Every one of these is true by construction, not by policy.

“By construction” is a stronger promise than “we would never”, because it does not depend on anyone keeping their word.

It never connects to your database

No credentials, no queries, no copy of your data. The schema view is reconstructed entirely from the migration files in your pull requests.

It does not ask your AI vendor anything

Detection reads your repository. Which agent you use is a fact about your commits, not an integration Diffport has to go and buy.

Your source code does not leave your repository

Beyond what the connection you grant already allows. Diffport reads. It cannot push, cannot open a pull request, and cannot change a branch.

It has no opinion on which agents you should use

The catalog is data, not a ranking. Adding an agent to it is a fact about detection, never an endorsement.

Start with one

Find out what is already in there.

Diffport reads a repository's history and tells you what it can prove, what it cannot, and which parts it will not guess about.

Connect a repository See pricing

Read-only. No card required to look.