Changelog
What changed in each release. Updates are optional and never install themselves: you choose if and when. Security fixes are marked so you can decide quickly.
Every license covers every release, and older versions stay available. Check from a terminal with imx update. Using Homebrew? brew pin imx keeps your version during brew upgrade.
1.0.0 (upcoming)
- Product renamed; name and identifiers now come from
Scripts/product.env. - Privacy filter (credential redaction) is a setting, on by default, for exports and the MCP server.
- Per-thread history limits for MCP clients.
- Server binds only to loopback and the Tailscale address; idle connections dropped after 15 s.
- Your own messages are labelled with your name (from Contacts or Settings).
- Settings opens reliably from the menu bar.
- Access keys: one per agent, with thread scope, daily request cap, per-call message cap, expiry, revoke, and usage counters. Tokens are stored hashed and shown once. The old single token migrates to a "Default key" automatically.
- Rate limiting: 10 failed attempts lock a source out for 15 minutes; global 20 requests/second.
- Access log at ~/Library/Logs/Blue Text Relay/access.log (key, source, tool, thread, count, status; never message text).
- Per-key agent briefing and connection snippets (Claude Code, Claude Desktop/Cursor JSON, curl).
imx keys add|list|revoke|delete|usage;imx serveuses the app's keys and threads by default.- Remote access modes (Settings → Remote), each one button from working: This Mac only, Tailscale (recommended), Tailscale Funnel, Cloudflare Quick Tunnel, Cloudflare Tunnel on your domain, ngrok. Missing helpers install with Homebrew; tunnels run as supervised child processes that restart on crash and stop when the app quits.
imx remote <mode>does the same headless. - Headless:
imx setupwizard andimx service install(launchd agent at login); the app detects the service and acts as a control panel. - Licensing: lifetime license keys (offline Ed25519, every future version), $9.99 launch price. No trial: without a key the server answers 402
license_requiredwith purchase steps for agents, and exports are off (Settings → General → License,imx license KEY). - First-run onboarding: access → contacts → threads → key → connect → ready.
- Optional update check (one small JSON fetch at launch, can be turned off); downloads open in the browser.
- Release pipeline: Scripts/release.sh signs, notarizes, builds the DMG, CLI tarball, source archive and update feed; worker/ issues license keys from Paddle purchases.
- Agent-first purchase flow: HTTP 402 carries a JSON body with price, buy URL and activation steps; MCP instructions point to bluetextrelay.com/agents.
imx status,imx buy,imx history,imx privacy, and--jsonon threads/keys/remote/license for scripted and agent use. - Website in site/ (Cloudflare Pages): home, buy (Paddle overlay), download, docs, agents guide, privacy, security, terms, refunds, support, llms.txt, update feed.
- Attachment files for agents, opt-in per key (off by default;
imx keys add --attachments,imx keys attachments NAME on|off, or the Attachment files toggle in Settings → Access). Messages list attachments with a stableid, MIME type and size, never a local path. New MCP toolget_attachmentand RESTGET /api/attachments/<id>return the file: images as image content (HEIC and other formats converted to JPEG), text files through the privacy filter, other files as a base64 resource. Every key limit applies, and an attachment outside the key's threads or history start answers exactly like one that doesn't exist. Size limit 10 MB by default, 1–100 MB (imx attachment-cap MB, Settings → Access). The access log records the attachment id and byte count, never the file name or contents. - Test suite: database reader, HTTP parser, router/auth/limits, access keys, rate limiter, audit log, remote helpers, licensing, credential filter, attachments (63 tests).