Skip to content

Network Proxy

Craft Agents can route all network traffic through an HTTP or HTTPS proxy. This is useful for corporate networks that require proxy access, firewalls that block direct connections, or environments where network inspection is required.

Open Settings → Network and configure:

FieldDescriptionExample
Enable ProxyToggle proxy routing on/off
HTTP ProxyProxy URL for HTTP requestshttp://proxy.corp.com:8080
HTTPS ProxyProxy URL for HTTPS requests (uses HTTP Proxy as fallback if not set)http://proxy.corp.com:8080
No ProxyComma-separated list of hosts/domains to bypasslocalhost,127.0.0.1,.internal.com

Settings are stored in ~/.craft-agent/config.json under the networkProxy key:

{
"networkProxy": {
"enabled": true,
"httpProxy": "http://proxy.corp.com:8080",
"httpsProxy": "http://proxy.corp.com:8080",
"noProxy": "localhost,127.0.0.1,.internal.com"
}
}

Changes take effect immediately — no restart required.

When proxy is enabled, Craft Agents routes traffic at two levels:

  1. Node.js (main process) — All fetch() calls (OAuth flows, MCP server connections, API requests) are routed through an undici ProxyAgent that uses HTTPS CONNECT tunneling for secure connections.

  2. Electron (browser windows) — Browser pane requests and OAuth browser windows use Chromium’s built-in proxy support via session.setProxy().

  3. SDK subprocesses — The Claude Code subprocess receives HTTP_PROXY, HTTPS_PROXY, and NO_PROXY environment variables automatically.

For proxies that require authentication, include credentials in the URL:

http://username:password@proxy.corp.com:8080

The No Proxy field accepts a comma-separated list of bypass rules:

PatternMatches
*All hosts (effectively disables proxy)
example.comExact hostname
.example.comAll subdomains of example.com
example.com:8080Specific host and port
192.168.1.1Exact IP address
[::1]IPv6 address
[::1]:8080IPv6 address with port

TLS-Intercepting Proxies (Corporate Firewalls)

Section titled “TLS-Intercepting Proxies (Corporate Firewalls)”

Many corporate proxies perform TLS inspection by re-signing HTTPS traffic with an internal Certificate Authority (CA). This causes fetch failed errors because Node.js does not trust the proxy’s CA by default.

  • OAuth sign-in fails with “fetch failed” or returns silently with no browser window
  • MCP server connections fail behind the corporate network but work on personal networks
  • Browser pane requests work fine (Chromium uses the system certificate store) but agent-initiated requests fail

Set the NODE_EXTRA_CA_CERTS environment variable to point to your corporate proxy’s CA certificate before launching Craft Agents:

One-time launch from terminal:

Terminal window
NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.pem open -a "Craft Agents"

Permanent (all apps, including Dock/Spotlight launches):

Shell profile variables (~/.zshrc) only apply to terminal sessions. To set environment variables for packaged apps launched from Dock or Spotlight, use launchctl:

Terminal window
# Set for the current user session (survives reboots on modern macOS)
launchctl setenv NODE_EXTRA_CA_CERTS /path/to/corporate-ca.pem

Then relaunch Craft Agents. To verify it took effect:

Terminal window
launchctl getenv NODE_EXTRA_CA_CERTS

To remove it later:

Terminal window
launchctl unsetenv NODE_EXTRA_CA_CERTS

Your IT department should provide the corporate proxy CA certificate. If you need to extract it yourself:

Terminal window
# Connect through the proxy and capture the certificate chain
openssl s_client -connect api.anthropic.com:443 -proxy proxy.corp.com:8080 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > corporate-ca.pem

This typically indicates a TLS-intercepting proxy. See the TLS-Intercepting Proxies section above.

Proxy works for browsing but not for OAuth

Section titled “Proxy works for browsing but not for OAuth”

The browser pane uses Chromium’s certificate store (which includes system-installed CAs), while OAuth discovery and token exchange use Node.js fetch() (which only trusts Node’s built-in CA bundle). Set NODE_EXTRA_CA_CERTS to bridge this gap.

Ensure the MCP server’s hostname is not in the No Proxy list (unless you want direct access). For local MCP servers (stdio transport), proxy settings do not apply — they run as local subprocesses.

  • Verify credentials work with curl: curl -v --proxy http://user:pass@proxy:8080 https://api.anthropic.com
  • URL-encode special characters in the password (e.g., p%40ss for p@ss)
  • Some corporate proxies use NTLM authentication, which is not supported directly. Consider using cntlm as a local NTLM-to-Basic proxy bridge.

Check the application log for proxy configuration at startup:

[proxy] Applying proxy settings: { enabled: true, hasHttpProxy: true, hasHttpsProxy: true, hasNoProxy: true }

Log location: ~/Library/Logs/@craft-agent/electron/main.log (macOS)