Agents can read the heap now.
Chrome's October DevTools recap says the Chrome DevTools MCP server can query heap objects by retained size or property name. It can also inspect edge sizes and memory held by V8 execution contexts.[1]
The current tool reference exposes a larger memory set behind the experimental --memoryDebugging=true flag. The documented tools compare snapshots, list retainers, search retaining paths, inspect dominators, find duplicate strings, and query objects by class, property, size, type, or detached state.[2]
Search narrows the heap. It does not explain the leak.
Retained size answers one question.
Chrome defines shallow size as the memory held by an object itself. Retained size is the memory that can be freed when that object and its dependents are no longer reachable.[3] A small listener or closure can therefore keep a much larger graph alive.
Sorting by retained size is a good way to find heavy suspects. It is not proof that the top object is wrong. A cache, application shell, or long-lived model can be large by design. The diagnosis needs an expected lifetime, a repeatable action, and a path back to a root.
Use a reversible cycle.
Chrome's manual workflow starts with a snapshot, runs an operation, reverses it, repeats the pair, then compares another snapshot with the first. Opening and closing the same document should not leave a fresh copy of its object graph behind each time.[3]
Keep the sequence exact. Record the route, fixture, browser build, cycle count, idle wait, and snapshot files. If garbage collection, timers, network responses, or animation can change the result, state that in the packet. One before-and-after pair may contain warm-up allocations that never grow again.
Follow ownership, not resemblance.
The heap view can show retainers for a selected object. The agent tool reference also documents retaining paths and dominator chains. Those routes help answer which live object prevents collection. They do not prove which source line created the reference unless the evidence reaches a named closure, property, listener, cache, or framework owner.
Turn the finding into a code review target. Name the retained object. Save its node identifier for that snapshot. Record the shortest useful retaining path. Point to the owner that should release it. Then rerun the same cycle after the fix and compare growth across several repetitions.