denoise

Review code you didn't write.

Code diffs for the agentic pace.

Six zoom levels, and the line you were reading stays where it was. Focus a function in a file or a pull request, starting from the most complex. On a phone the controls are icons.

Open the app

or paste a pull request

Opens the viewer in a few seconds. Public repos are free. Sign in with GitHub for private ones.

See it on a small change

The call didn't change. What guards it did.

A line diff shows one deleted line, and save(record) looks untouched. denoise reads both versions of the function and says what happened around that call. Select the finding to see where.

Flow changes

  • Early return removed before save(record).

A structural observation, not a verdict: denoise does not say whether the change is right. It is read from the code with a parser, with no AI and no guessing. How it works and what it skips

Schematic · What does it do, step by step, in plain words?

update(allowed, record)
returns early if !allowed return
end
update(allowed, record)
returns early if !allowed return
save()
end
calls save
2export function update(allowed, record) {3  if (!allowed) return;4  save(record);5}
update(allowed, record)
returns early removed if !allowed return
update(allowed, record)
returns early removed if !allowed return
save()
   2   2 export function update(allowed, record) {   3    −  if (!allowed) return;   4   3   save(record);   5   4 }
update(allowed, record)
update(allowed, record)
save()
calls save
2export function update(allowed, record) {3  save(record);4}

This example is a three-line function, read when this page was built by the same engine the app runs. Try your own pull request, public ones work without signing in.

Deterministic

Same commit, same picture. 0 failures across 70,811 functions in 22 real repositories: no crashes, no drawings that broke their structural rules, no redraws that differed. This does not test that a drawing is right.

What a failure is, and the evidence

Private stays private

Private code parses in your browser. Our servers never see it.

How it stays private

Built for agents too

The same trees and diffs as versioned JSON, from the CLI or in CI.

CLI and JSON

Example

PR #7433 ↗
PreparedRequest.prepare_body · cognitive 36 → 37

Schematic · What does it do, step by step, in plain words?

PreparedRequest.prepare_body(data: _t.DataType, files: _t.FilesType, json: _t.JsonType = None) -> None
body = None
content_type = None
if not data and json exists
content_type = "application/json"
try
body ← dumps
except ValueError as ve
leaves by an exception raise InvalidJSONError
if not body is a bytes
body ← encode
added is_iterable ← isinstance · hasattr
added if is_iterable and not data is a str
try
length ← super_len
except TypeError, AttributeError, UnsupportedOperation
length = None
body = data
if getattr exists
try
changes state outside the function self._body_position ← tell
except OSError
changes state outside the function self._body_position ← object
leaves by an exception if files raise NotImplementedError: Streamed bodies and files are mutually exclusive.
if length
changes state outside the function self.headers["Content-Length"] ← builtin_str
else
changes state outside the function self.headers["Transfer-Encoding"] = "chunked"
else
raw_data ← cast
if files
(body, content_type) ← _encode_files
else
if raw_data
body ← _encode_params
if data is a basestring or data is a _SupportsRead
content_type = None
else
content_type = "application/x-www-form-urlencoded"
changes state outside the function prepare_content_length()
if content_type and no "content-type"
changes state outside the function self.headers["Content-Type"] = content_type
changes state outside the function self.body = body
end
Calls added and removed
built-inadded hasattr
unchanged14 calls

Reading

How to read a schematic

Four shapes carry almost everything. The full guide

Languages

Supported languages

Every function in these languages gets a schematic, at every zoom level.