Repository navigation
Breaking: the MCP server is gone
The MCP stdio transport could not carry a long analysis reliably. Browser launch,
collection and Lighthouse regularly exceeded the client timeout, and the server
died mid-run without returning a partial result. A full run takes about three
minutes, and a page that never goes network-idle could not be measured at all.
The CLI is now the only runtime interface, and the agent-facing layer is a skill.
Removed
- the
perfgraph mcpsubcommand, the MCP server, handlers, resources, prompts
and progress reporting - the
@modelcontextprotocol/sdkdependency
Added
skills/perfgraph— the agent skill: how to run the CLI, which artifacts
to read in which order, and how to qualify causal claims. It ships inside
the npm package.insights.toonseparates the two measurements:metricsfrom the
PerfGraph run andlighthousefrom Lighthouse's own navigation.- Lighthouse insight audits become findings — forced reflows, oversized
images, bytes that are not cached, duplicated or legacy JavaScript, fonts
that block the text. Each carries the value Lighthouse measured and the
sources involved. criticalPath.documentChainreports a page that loaded more than one
document, with the server time spent on a response nobody used.insights.documentResponsecarries the headers of the document the
visitor received: cache status, cache-control, content encoding, alt-svc.insights.lighthouse.failedAuditslists the audits that did not pass,
with their values.- The network summary lists the heaviest resources, not only the slowest, and
the run summary reports the spread of the lab run — the run the report
describes — next to the spread of the Lighthouse runs. - The CLI prints a short summary for the person who ran it: score, issue
counts, data-quality warnings and where the report is. perfgraph --version, so an agent can check that the skill it loaded
matches the tool it runs.
Fixed
The report used to state more than it had measured. Most of the work in this
release went into that.
- The LCP element is the one the browser reported, taken from the final
Performance API candidate — not the largest downloaded image. The trace LCP
was never parsed at all, because the event name did not match the one Chrome
emits. - The time to the first byte is measured, not added up wrongly: the TLS
handshake is no longer counted twice, the time a request spent in a proxy is
part of it, and the server wait is the server wait. - Main-thread work is counted per process and only for the outermost
events, and Total Blocking Time counts the main thread only. - The run environment and the collection warnings reach the report, and
the report and the insights judge the quality of the data the same way. - One finding is counted once. The impact node of a chain states the
consequence and no longer raises the severity of the verdict, and a
Lighthouse audit is a warning at most — the measured signals of the run
decide how bad the page is. - A page that never goes network-idle can be measured: the run waits for
the load event and for the LCP. - A run against a site that serves a request initiated by itself — Google
does — no longer dies with a stack overflow while building the critical
path. - A URL without a scheme is accepted, and a failed run prints its message
instead of a stack trace.
Installing
npm install -g perfgraph
npx playwright install chromiumThe skill can be copied into an agent's skills directory:
cp -r node_modules/perfgraph/skills/perfgraph ~/.config/opencode/skills/Full Changelog: v0.1.2...v0.2.0