Skip to content

Releases: kevin-lee/claude-proxymate

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 21 Jul 14:07

0.3.0 - 2026-07-21

New Features

  • Make Global the default Route Claude mode (#26)

    The Route Claude control now defaults to Global instead of Manual, since routing Claude through the proxy automatically is what most users want. On first launch — and for existing users who never explicitly picked a route — the control starts on Global, which manages ANTHROPIC_BASE_URL in the env object of ~/.claude/settings.json while the proxy runs (applied on proxy start; removed on proxy stop, app quit, and by the crash-recovery sweep at the next launch, exactly as before).

    Anyone who had already selected a mode keeps their choice — the persisted selection is honored on launch, so an explicit Manual stays Manual.

    The status-bar control is also reordered to Global · VS Code · Manual so the default sits first.

What's Changed

New Contributors

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 12 Jul 16:27

0.2.0 - 2026-07-13

New Features

  • Add an easy way to set up VS Code to use Claude Proxymate (#17)

    While enabled, the ANTHROPIC_BASE_URL entry in claudeCode.environmentVariables of every detected VS Code-family editor's user settings.json (VS Code, VS Code Insiders, VSCodium, Cursor) is managed automatically: applied when the proxy actually starts, and removed on proxy stop, proxy crash, app quit, and by a crash-recovery sweep at the next launch.

    Safety first:

    • settings.json is edited with jsonc-parser, so comments, trailing commas, and formatting survive.
    • Every write is preceded by a backup under the app's userData, verified after writing, and restored from the backup on failure.
    • Ownership is record-based: a foreign ANTHROPIC_BASE_URL value (e.g. a corporate gateway) is never modified or removed.
  • Improve UX and support global setting update for Claude Proxy (#19)

    The main window is redesigned as title bar → address bar → content → status bar, so the one primary action and ambient state no longer compete in a single overloaded toolbar:

    • The title bar keeps only view controls (theme, language, info); the About popover anchors under it.
    • A new address bar holds the sole primary action (Start Proxy / Stop), the port field (editable only while stopped, locked while running so the displayed command can no longer drift from the actually bound port), and the copyable ANTHROPIC_BASE_URL command.
    • A new IDE-style status bar shows status, port, and request count, plus the modes: a single Mask secrets switch (replacing the status chip + Reveal All button) and the Route Claude control.
    • Clear moves into the captured-requests panel header, next to what it clears, and the empty states get correct copy.

    The VS Code ON/OFF toggle from #17 becomes a three-way Route Claude control, so Claude can also be routed through the proxy without VS Code:

    • Manual — no settings file is touched.
    • VS Code — manages ANTHROPIC_BASE_URL in claudeCode.environmentVariables (as before).
    • Global — manages ANTHROPIC_BASE_URL in the env object of ~/.claude/settings.json.

    Exactly one target is active at a time, so selecting one removes the entry from the other. The selection and the port now persist across restarts, but the env var still only exists while the proxy runs: proxy stop, app quit, and the launch sweep remove it from every target regardless of mode. Masking still starts ON at every launch for screen-share safety.

    Claude Proxymate - New UI

Fixes

  • The native proxy binary silently ignored --port and always bound 8888 regardless of the UI port; both entry points now parse the real program arguments, and a startup/bind failure emits a proxy_error protocol event instead of only stack-tracing to stderr. (#17)

  • The proxy-bar status was optimistic and could show "Running" for a dead proxy (e.g. port already in use). The UI state is now driven by the binary's actual started/stopped/error events, so "Running on port N" appears only after the true bind, the port field reflects the actually bound port, and a failed start surfaces an error alert (with a 10s watchdog as fallback). (#17)

Internal Housekeeping

  • Add Dependabot configuration and PR labeler GitHub Actions workflow

Updated GitHub Actions:

  • actions/checkout: 4 => 7
  • actions/setup-java: 4 => 5
  • actions/setup-node: 4 => 6
  • actions/download-artifact: 4 => 8
  • softprops/action-gh-release: 2 => 3

What's Changed

Full Changelog: v0.1.2...v0.2.0

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 11 Jul 13:07

0.1.2 - 2026-07-11

Update

  • Turn the (i) button popover into an About panel with website and bug report links (#9)

Internal Housekeeping

  • Fix Google Analytics credentials (#8)

What's Changed

  • Bake Google Analytics credentials into the build instead of reading them at runtime by @kevin-lee in #8
  • Turn the (i) button popover into an About panel with website and bug report links by @kevin-lee in #9
  • claude-proxymate v0.1.2 by @kevin-lee in #10

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 11 Jul 05:49

0.1.1 - 2026-07-11

Update

  • Update price data (#5)

    Update cost-calculation pricing data for current Claude models

    Tier (code) Input Output Cache Read 5m Cache Write
    Fable5 (Fable 5, Mythos 5) $10 $50 $1.00 $12.50
    OpusPremium (4.5–4.8) $5 $25 $0.50 $6.25
    OpusLegacy (4.1, 4.0, Opus 3) $15 $75 $1.50 $18.75
    Sonnet5 intro (≤ 2026-08-31) $2 $10 $0.20 $2.50
    Sonnet5 from 2026-09-01 / Sonnet 4.x $3 $15 $0.30 $3.75
    Haiku 4.5 $1 $5 $0.10 $1.25
    Haiku 3.5 $0.80 $4 $0.08 $1.00
    Haiku 3 $0.25 $1.25 $0.03 $0.30

    Price source: https://platform.claude.com/docs/en/about-claude/pricing

Internal Housekeeping

Updated dependencies:

  • scala: 3.3.7 => 3.8.4
  • sbt-scala-native: 0.4.17 => 0.5.12
  • sbt-scalajs: 1.20.2 => 1.22.0
  • sbt-devoops: 3.5.0 => 3.5.1
  • cats: 2.11.0 => 2.13.0
  • cats-effect: 3.5.7 => 3.7.0
  • circe: 0.14.8 => 0.14.16
  • fs2: 3.11.0 => 3.13.0
  • http4s: 0.23.33 => 0.23.34
  • scalajs-dom: 2.8.0 => 2.8.1
  • hedgehog: 0.13.0 => 0.13.1
  • munit: 1.0.0 => 1.3.3

What's Changed

  • Refactor: Apply better Scala + Functional Programming (FP) practices by @kevin-lee in #1
  • Update dependencies (Scala 3.8.4, Scala Native 0.5) and fix the resulting breakage by @kevin-lee in #2
  • Add build.yml - for non-release build by @kevin-lee in #3
  • Drop codesign seal check from build.yml's unsigned DMG smoke verify by @kevin-lee in #4
  • Close #5: Update price data by @kevin-lee in #6
  • claude-proxymate v0.1.1 by @kevin-lee in #7

New Contributors

Full Changelog: v0.1.0...v0.1.1

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 05 Jul 01:53
1b78e69

Claude Proxymate 0.1.0

2026-07-04

The first release of Claude Proxymate — a real-time man-in-the-middle (MITM) proxy that intercepts and visualizes API traffic between Claude Code and the Anthropic API. It surfaces the hidden prompt-augmentation machinery (CLAUDE.md injection, slash commands, skills, sub-agents, MCP tools) in a desktop UI, with privacy-first masking so captures are safe to share.

Built as a hybrid Scala Native + Scala.js application: a native HTTP proxy binary forwards traffic to Anthropic and streams capture events into an Electron UI written entirely in Scala.

Highlights

Live capture

Every request/response pair between Claude Code and api.anthropic.com is captured and reconstructed from the SSE stream into a full message. The capture's own response is shown in the Messages tab in place, rather than lagging one turn behind.

Mechanism detection

Each request body is scanned for prompt-augmentation mechanisms and highlighted in place: injected CLAUDE.md / rules / memory sections, output styles, slash commands, skills, sub-agents, and MCP tools.

Request Anatomy

A dashboard on the Analysis tab that quantifies a request: per-segment byte/token estimates, structural facts (message / turn / tool / image / thinking counts, cache-eligible system blocks), a mechanism inventory, and flagged anomalies.

Token cost

Per-capture cost breakdown driven by model-based pricing.

Privacy masking

Display-only — raw captures are never mutated:

  • Sensitive field-name values (api_key, *_token, password, account / device / session identifiers, …).
  • Known-shape secrets in free text (sk-ant-… and friends) via regex detection, with longer-than-canonical tokens masked whole.
  • Verbose correlation IDs (msg_…, toolu_…) compacted to a short hash tag.
  • Sensitive URL query-string values.
  • Presenter mode — one decisive global mask-all / reveal-all toggle (⌘⇧M).
  • WYSIWYG Copy — the clipboard follows the on-screen mask state, in both the detail view and the Messages tab.

Search

Across request / response / analysis / messages, with match navigation.

Messages tab

All is the first sub-tab and the default selection.

Theme and i18n

  • System / light / dark theme, tracking the OS prefers-color-scheme.
  • English and Korean, externalized to .properties files and loaded at runtime.

Onboarding

A getting-started image carousel that walks new users through the app.

Security hardening

  • Chromium OS-level sandbox enabled on the renderer (sandbox: true).
  • All renderer-initiated navigations blocked on webContents.
  • Strict Content-Security-Policy meta tag on the generated index.html.
  • DevTools disabled in packaged builds, with an env-flag escape hatch.
  • A confirm prompt on the Clear button before captures are discarded.

Architecture

Five cross-compiled modules:

Module Platform Purpose
claude-proxymate-core JVM / JS / Native Shared core: data models, JSON codecs, SSE parser, CLAUDE.md parser, mechanism detector, Request Anatomy, masking primitives, IPC / element-ID constants, JSON-line protocol. The JVM side also generates index.html (ScalaTags) and the i18n JSON at build time.
claude-proxymate-server Scala Native HTTP proxy binary. Intercepts requests, forwards to Anthropic, tees the response, emits events as JSON lines on stdout. Default TLS backend is libcurl via FFI (CurlMain); an http4s Ember / s2n backend (Main) is available as a fallback.
claude-proxymate-electron Scala.js Electron main process. Spawns the native proxy, reads its stdout, forwards events to the renderer via IPC.
claude-proxymate-preload Scala.js Electron preload bridge. Exposes IPC channels to the renderer via contextBridge.
claude-proxymate-renderer Scala.js Electron renderer UI. All frontend logic, built on a testable View/logic split (pure ScalaTags *View modules render to strings; sibling modules wire them to the DOM).

Install

Prebuilt macOS DMGs are published on the Releases page:

  • Apple Silicon (M1/M2/M3/…): Claude-Proxy-0.1.0-arm64.dmg
  • Intel: Claude-Proxy-0.1.0-x64.dmg

Open the DMG and drag Claude Proxymate to Applications.

These builds are not yet signed with an Apple Developer ID or notarized, so
macOS Gatekeeper will refuse to open the app on the first try. Right-click the
app in Applications and choose Open, or clear the quarantine flag with
xattr -dr com.apple.quarantine "/Applications/Claude Proxymate.app". Signed +
notarized builds are planned once an Apple Developer ID is available.

Acknowledgements

Inspired by an early version of claude-inspector.

Full Changelog: https://github.com/kevin-lee/claude-proxymate/commits/v0.1.0