What's Changed
- ci: cut the PR gate from ~12 min to ~5 min by @chelojimenez in #4676
- webmcp: run the WebMCP Inspector on a hosted deploy by @chelojimenez in #4612
- Disambiguate saved client display names by @ignaciojimenezr in #4658
- Add Claude Desktop as its own client by @ignaciojimenezr in #4663
- Show Claude Code and Codex in client Compare by @ignaciojimenezr in #4673
- Agent browser: three findings that merged with #4660 still open by @chelojimenez in #4677
- Make the trace-destination scope-ordering test actually check ordering by @chelojimenez in #4678
- Evals: close the fail-open gaps a second review round found by @chelojimenez in #4046
- evals: the settings page shows what it measures, and the judge can be trusted to decide by @chelojimenez in #4682
- Count reads in the trace-destination scope-ordering guard by @chelojimenez in #4683
- evals: the review follow-ups from #4682 by @chelojimenez in #4686
- Render the safe-area-insets row on caniuse by @ignaciojimenezr in #4675
- Fix sign-out landing on the login page by @ignaciojimenezr in #4684
- Evaluate (New): a suite that has never run says so by @chelojimenez in #4689
- I-2d: get hosted browser frames out of the sandbox by @chelojimenez in #4687
- The hosted frame socket: daemon stream in, pane socket out by @chelojimenez in #4690
- Browser: read a page as text, and fence what the page wrote by @chelojimenez in #4691
- I-7: the rail's Browser tab serves the hosted engine too by @chelojimenez in #4693
- Stop the docs agent choking on a generated bundle by @chelojimenez in #4694
- Bound the Electron logout wait to the sign-out latch by @ignaciojimenezr in #4685
- Browser: an observation that names what the model can click by @chelojimenez in #4692
- Bound secret-scrub work by escaping present, and stamp delivery on every outcome by @chelojimenez in #4541
- Hosted browser: ask the daemon we are about to kill, and claim the relaunch before killing it by @chelojimenez in #4703
- Fix false unavailable project routes by @ignaciojimenezr in #4672
- Simple eval case editor on the user-value chain (flag-gated) by @chelojimenez in #4707
- local-harness: Windows is a native platform by @chelojimenez in #4701
- Remove Windows native harness limitation from docs by @mintlify[bot] in #4709
- ui: User Testing rename, study empty state, and the chrome retheme by @ZeHuari in #4706
- compat: replace the server card client row with a support pill by @ZeHuari in #4700
- Update host-compat docs: compat strip → support pill by @mintlify[bot] in #4712
- Swarm Insights: page-scroll the tab so the full Sankey is reachable (BB-80) by @SebasKoria in #4092
- fix(evals): format JSON tool results + show csp by @ignaciojimenezr in #4670
- Docs: document eval trace viewer improvements by @mintlify[bot] in #4715
- Reconcile compare presets against the user's own clients by @ignaciojimenezr in #4705
- Eval run view: route facts, description-rewrite experiment, failure groups (inspector) by @chelojimenez in #4711
- fix(inspector): self-service UX for self-hosted network 403 (BB-118) by @SebasKoria in #4127
- Document Docker network access via MCPJAM_ALLOWED_HOSTS by @mintlify[bot] in #4717
- Make the simple case editor an Evaluate-surface component, not a flagged one by @chelojimenez in #4719
- Route facts need no gate of their own by @chelojimenez in #4721
- Fix swarm traces showing all spans starting from 0.0s (BB-153) by @ZeHuari in #4461
- Keep Evaluate (New) Add case on /evaluate by @chelojimenez in #4724
- fix(webmcp): give the hosted browser an X server to draw on by @chelojimenez in #4725
- BB-133 follow-up: shrink and compress the guest credit-wall illustration by @SebasKoria in #4722
- fix(browser panel): a deploy should not kill the browser view by @chelojimenez in #4726
- Evaluate case workspace: one editor, one selected trial by @chelojimenez in #4727
- Docs: update Evaluate case workspace UI by @mintlify[bot] in #4728
- Keep the plan CTA spinner out of translated text nodes by @olartgabo in #4730
- fix(hosted browser): recover a desktop stream this process did not start by @chelojimenez in #4731
- fix(csp-workbench): Policy Diff shows the applied CSP, not the request by @Paoli99 in #4697
- feat(playground): let a hosted turn use the open page's WebMCP tools by @chelojimenez in #4733
- feat(csp): correlate violations with applied policies by @ignaciojimenezr in #4720
- Keep the WorkOS session alive through a transient refresh failure by @ignaciojimenezr in #4729
- Eval suite settings: tabbed surface, and say what decides Connection/Discovery by @chelojimenez in #4737
- fix(evals): skip Convex queries for a direct guest instead of throwing by @ignaciojimenezr in #4738
- Collapse the sidebar on the wide working surfaces by @prathmeshpatel in #4744
- Enterprise grading: quality gate, scorers, and judges by @chelojimenez in #4741
- Evaluate: one case workspace, and an explicit negative-test flag by @chelojimenez in #4747
- Pin the synthetic-monitor payload to the shape the backend accepts by @chelojimenez in #4750
- Eval spend: an org budget, cost as a result, and retiring the Limits tab by @chelojimenez in #4754
- Agent browser: viewport fidelity (Wave 6) by @chelojimenez in #4745
- Seamless local harness: one dialog to run Claude Code on this machine by @chelojimenez in #4746
- fix(auth): report exhausted guest bootstrap by @ignaciojimenezr in #4755
- fix(chat): stop the local-harness send hook from dropping messages by @chelojimenez in #4759
- Eval suites: name the client at create time, and persist a server override by name by @chelojimenez in #4764
- Require installation identity in GitHub repository pickers by @ignaciojimenezr in #4766
- Sidebar project/org switcher: redesign, and make the org switch actually switch by @chelojimenez in #4762
- fix(evals): export SDK code that compiles against the current SDK by @chelojimenez in #4765
- Update Projects docs for sidebar switcher redesign by @mintlify[bot] in #4769
- Mark taken GitHub accounts in the picker instead of dead-ending by @ignaciojimenezr in #4767
- github checks: only offer the controls to an org admin by @ignaciojimenezr in #4768
- Clarify admin-only controls on GitHub Checks page by @mintlify[bot] in #4771
- A provider 429 stops failing as "No output generated" (BB-172) by @nachocossio in #4698
- Per-run hosted browsers for unattended runs (evals / swarms) — inspector + SDK by @chelojimenez in #4748
- Put eval-suite Schedule behind its own flag, and its writers behind a deployment switch by @chelojimenez in #4780
- Fix cached project sign-in recovery race by @ignaciojimenezr in #4772
- One way to connect a GitHub account by @ignaciojimenezr in #4776
- Plan A: honest verdicts, and write paths that don't lie by @chelojimenez in #4775
- Run provenance (CLI / MCP / GitHub) + CI-owned suite lock by @chelojimenez in #4778
- Plan B: one vocabulary across UI, API, SDK, CLI and MCP by @chelojimenez in #4774
- Release prep: the missing changelog, and three honest-attribution fixes by @chelojimenez in #4787
- Show the browser's tools where the model's tools are shown by @chelojimenez in #4791
- Actually show the browser section: the bearer, and the default host by @chelojimenez in #4794
- Evaluate: observe first — the case as a spine, checks suggested from the run by @chelojimenez in #4790
- Name the provider that rate-limited a session (BB-172) by @nachocossio in #4699
- Update provider/quota error docs for swarm rate-limit card by @mintlify[bot] in #4799
- Fix NUX logo flicker and brand the first-run loading screen (BB-106) by @SebasKoria in #4089
- promote: rebuild the promote-to-test-case modal around existing vs new suite (BB-163) by @ZeHuari in #4618
- feat(evaluate): scoped authoring, client matrices, and combined run results by @vigneshgopalandd-maker in #4739
- Eval UX updates: runs landing, Eval my server flow, run review, iterations terminology by @mintlify[bot] in #4803
- Confirm swarm cancel with a toast (BB-64) by @SebasKoria in #4111
- server tabs: make each tab a sheet, and mark the active one by @ZeHuari in #4785
- fix: keep the first-run logo and Excalidraw nudge on screen (BB-112) by @nachocossio in #4055
- Say what each repository switch does by @ignaciojimenezr in #4804
- Document per-repository GitHub Checks switches by @mintlify[bot] in #4807
- Agent browser: an action reports what it changed, and the two composites by @chelojimenez in #4789
- Fix team checkout handoff routing by @ignaciojimenezr in #4806
- Tool approval: one mechanism, one setting by @chelojimenez in #4792
- Agent Browser: recordings and motion (Wave 7 — R-1…R-5) by @chelojimenez in #4795
- Stop asking for an email invite on anyone-with-link studies (BB-205) by @nachocossio in #4784
- Analyze sessions never started: it serialized a click event by @SebasKoria in #4805
- web_search follows the tool-approval switch by @chelojimenez in #4808
- Agent Browser Wave 7 fast follows: recordings dir allowlist, independent switches, tested release order by @chelojimenez in #4809
- Friction signals per trial, and the suspected condition behind them by @chelojimenez in #4796
- swarms: Findings stage labels, the Insights rail's name, and a summary that never opens empty (BB-146) by @SebasKoria in #4763
- The browser on the agent surface, with the trace coming back (M1: the local loop) by @chelojimenez in #4798
- UVC checks: twelve new check kinds over evidence we already had, and server facts by @chelojimenez in #4800
- First-class WebMCP page tools for the agent browser (stages 1 & 2) by @chelojimenez in #4801
- workos: test the AuthKit and API-key paths against a real API surface by @chelojimenez in #4813
- Keep GitHub check recipe guidance visible by @ignaciojimenezr in #4814
- user-testing: first-land consent, What to try list, two-step create by @ZeHuari in #4760
- chat-ui: render tool results as conversation, not raw JSON by @ZeHuari in #4777
- Answer a resumed tool call only after re-introducing it by @chelojimenez in #4816
- Fix GitHub checks for environment suites by @ignaciojimenezr in #4817
- Suite settings can configure the suite again by @chelojimenez in #4821
- Remodel WebMCP Inspector as a Tools-shaped three-panel workspace by @chelojimenez in #4822
- Refs, dialogs and the network: what a browser agent could not do, and could not see by @chelojimenez in #4824
- Group DOM mutation conflicts into one Sentry issue per environment by @olartgabo in #4736
- Show the Invite team members CTA to hosted guests by @devin-ai-integration[bot] in #4828
- Iterate Evaluate suite and run results by @vigneshgopalandd-maker in #4820
- Update Evaluate docs for redesigned run/suite UI by @mintlify[bot] in #4839
- feat(swarm run): a finished wave says so and walks to Findings (BB-161, BB-195) by @nachocossio in #4797
- fix(playground): switch clients in one click instead of two (BB-135) by @nachocossio in #4586
- Update multi-host compare picker interaction docs by @mintlify[bot] in #4843
- Mark a server's connection status where servers are picked (BB-49) by @nachocossio in #4647
- User Testing Findings tab: the mapper, the page, and the landing tab (BB-145 / BB-146) by @SebasKoria in #4826
- Add Findings tab changelog entry for User Testing by @mintlify[bot] in #4847
- User Testing analyzes itself, and stops asking to be asked (BB-196) by @SebasKoria in #4842
- Changelog: User Testing auto-analysis by @mintlify[bot] in #4849
- Session detail: name the client and model, label the share control (BB-197) by @ZeHuari in #4848
- Keep GitHub fork checkout and eval execution credential-free by @ignaciojimenezr in #4833
- Tell a blocked swarm which allowance ran out, not "Unknown error" by @nachocossio in #4506
- Client header: make the verification date read as a verdict by @ignaciojimenezr in #4853
- Add per-repository approved fork credential controls by @ignaciojimenezr in #4837
- Name the wrong OAuth error code in the refresh-declined toast by @ignaciojimenezr in #4855
- fix(detail header): a long run name clipped the tab row (BB-202) by @nachocossio in #4743
- WebMCP Inspector: annotation evidence, declarative fixtures, cross-document results, cross-origin frames by @chelojimenez in #4836
- Add durable browser sessions and saved profiles by @chelojimenez in #4830
- One switch, every tool that acts by @chelojimenez in #4825
- A Codex-style browser workspace by @chelojimenez in #4838
- Require a bearer on the audio transcription route (MJ-002) by @olartgabo in #4735
- Refuse to send a stored credential to a URL it was not saved against (MJ-003) by @olartgabo in #4761
- Document credential clearing on cross-origin URL change by @mintlify[bot] in #4862
- Fix browser workspace ownership, resizing, and profile export by @chelojimenez in #4865
- Give the browser panel the chat's session, as the rail tab had by @chelojimenez in #4863
- Say which link of the chain each check measures by @chelojimenez in #4864
- perf: preserve Playwright Docker layer cache by @chelojimenez in #4866
- fix: authenticate local browser panel requests by @chelojimenez in #4868
- Make per-conversation browsers the default, not a flag by @chelojimenez in #4869
- Add bounded network diagnostics to GitHub check sandboxes by @ignaciojimenezr in #4854
- feat: let coding agents drive isolated cloud browsers by @chelojimenez in #4870
- fix(webmcp): report uncertain outcomes after cancellation by @chelojimenez in #4871
- Put every hosted MCP connection behind the pinned egress guard (MJ-001) by @olartgabo in #4783
- chore: add release changeset for inspector, CLI, and SDK by @ignaciojimenezr in #4860
- Attach Browser directly and offer local consent in its panel by @chelojimenez in #4873
- Record eval execution timing and parallelism by @ignaciojimenezr in #4858
- Improve Node-local browser interaction and frame presentation by @chelojimenez in #4877
- fix(changeset): drop the ignored @mcpjam/mcp from a mixed changeset by @ignaciojimenezr in #4880
- Fix WebMCP inspector invocation identity and outcome handling by @chelojimenez in #4878
- Restore saved chat execution targets before loading history by @chelojimenez in #4876
- Share Node WebMCP viewing, capture and human input with browser panes by @chelojimenez in #4882
New Contributors
Full Changelog: v3.3.6...v3.4.0