Closes the no-phone-home work. Adds a structural backstop and removes the last
unprompted startup egress, then proves a network-silent launch.
F — egress backstop (http_client):
- The four Zed-host URL builders (build_zed_api_url, build_zed_cloud_url,
build_zed_cloud_url_with_query, build_zed_llm_url) now bail! instead of returning
a URL. Any code path that survived the feature removals fails loudly rather than
reaching api/cloud/llm.zed.dev. Belt-and-suspenders.
E — ACP agent-registry auto-fetch disabled (project/agent_registry_store):
- Network forensics (tshark SNI capture; IPs were Cloudflare anycast and
uninformative) identified the one persistent startup egress — ~36 connections —
as cdn.agentclientprotocol.com, the ACP registry fetched eagerly at launch.
- Removed the startup auto-refresh in init_global and made refresh_if_stale() a
no-op (the path that actually fired, via agent-settings load and registry-agent
connect). Registry still loads from disk cache; explicit user refresh() (Agent
Registry page) still works. Removed the now-unused REFRESH_THROTTLE_DURATION.
Extensions:
- default.json auto_install_extensions emptied (was {html:true}) so the extension
CDN isn't contacted at startup; users opt in explicitly.
Keymaps:
- Removed dangling onboarding::SignIn bindings from the three default keymaps
(a removed action left bound panics Zed's startup keymap validator).
Verification (see PRIVACY_HARDENING.md):
- Zero connections to *.zed.dev at any point across all passes.
- After E: agent-zed makes ZERO outbound connections at idle startup (0 established
across repeated lsof samples; no cdn.agentclientprotocol.com / *.zed.dev in the
tshark SNI capture). Startup is network-silent. 0 panics.
Adds PRIVACY_HARDENING.md documenting A–F, the extension/keymap changes, and the
verification method.
Co-Authored-By: Claude Opus 4.8 <[email protected]>