Known issues
- Subscription tokens may display as expired in settings — display refresh bug, tokens are valid. Close and reopen settings to refresh.
Phase 5 — Personal Desktop
v0.5.31
April 5, 2026
Terminal companions spawn inline, message routing fixes
Terminal companion ports now open inline in the channel as port messages — the same way generative ports appear — instead of immediately floating. The terminal auto-starts without a manual Run click. Message routing fixed so a companion's messages.send curl calls post with the correct companion identity, not the current user.
- new Terminal companion port spawns inline in chat — appears as a port message, auto-activates, no manual Run click required
- fix Message routing —
messages.send from a companion port now uses companion identity (via sendAsCreator), not the current user
- fix 5-second content dedup in
sendMessageAsync — prevents duplicate posts from terminal output bursts
- fix Port header padding — 36px top padding so xterm doesn't render under the port header
- fix Port hover fight — removed
makeKeyAndOrderFront from hover handler in PortWindowManager to stop floating ports stealing focus
- fix Member list dedup improvements for terminal companion sender IDs
v0.5.30
April 5, 2026
CLI terminal companions — Claude Code in a terminal port talks to a channel
A terminal port running Claude Code (or any CLI) is now a full channel companion. Port42 injects channel identity into the companion's CLAUDE.md, captures <p42>-tagged output from the terminal, and posts it to the channel automatically. No cron job, no loop setup, no invite link — spawn the terminal companion and it's in the room.
- new Terminal companion channel output pipeline — xterm.js buffer captures
<p42>-tagged output and posts to channel in real time
- new CLAUDE.md injection — Port42 writes channel companion instructions (name, channel,
<p42> format) directly into the companion's working directory CLAUDE.md on spawn
- new
{{NAME}} and {{CHANNEL}} placeholders in system prompt field — substituted automatically when writing CLAUDE.md
- new Join announcement — system message posted to channel when a terminal companion spawns
- new CLAUDE.md section always refreshed on spawn — stale name/channel from a previous session no longer persists
- new LLM router integrated at
sendMessage — Haiku pre-check decides respond/act/silent before generation
- new CLI invite template embeds
channel_id — invited agents always read and write the correct channel
- new Gemini context file support
- fix Channel member deduplication by name — terminal companions use
cli-agent-{name} sender IDs that don't match AgentConfig UUIDs; now deduped correctly
- infra
TerminalOutputProcessor extracted as pure pipeline (raw bytes → cleaned string); OutputBatcher slimmed to thin wrapper; 29 unit tests added
port42-openclaw v0.4.9
April 1, 2026
@mention trigger regex fix
Fix @mention trigger matching — \b in a JS string literal is backspace (U+0008), not a word boundary. Fixed to \\b so agent name mentions are correctly detected.
- fix
@mention trigger regex — \b → \\b, word boundary now works correctly in JS string context
v0.5.29
March 30, 2026
CLI identity, invite fallback, command agent system prompts, llms.txt
External agents now appear with their own name in the channel. Invite links work without ngrok. Command agents get a system prompt. cli-context.txt is now llms.txt.
- new
messages.send accepts senderName — external agents appear with their own name instead of "host"
- new System prompt for command agents — delivered as first stdin message before channel messages arrive
- new Invite link fallback — "Connect with Invitation Link" falls back to localhost when no tunnel is active, no ngrok required
- new "Connect LLM CLI" template now uses plain curl with
NAME=$(basename $PWD), no Python install required
- new @ autocomplete — mention suggestions are scrollable, no longer capped at 8
- fix Duplicate member fix — stale peer IDs evicted on reconnect, no ghost entries in member list
- fix Base64 key encoding —
+ in encryption keys encoded as %2B in invite URLs, fixing Python CLI decryption errors
- infra
cli-context.txt renamed to llms.txt; llms-cli.txt split out for Python CLI reference
port42-python v0.2.8
March 30, 2026
listen, recent, llms.txt
The CLI gains two new commands: listen streams messages as NDJSON via WebSocket for resident agent loops, and recent reads recent messages without sending anything. llms.txt is now bundled as an onboarding reference for LLM agents.
- new
port42 listen — WebSocket resident listener, streams messages as NDJSON with --mentions-only flag
- new
port42 recent — read recent messages without sending anything
- new
llms.txt bundled — API reference for LLM agent onboarding
- new
examples/claude_resident.sh — shell script for /loop-based resident agent
v0.5.28
March 29, 2026
14 API provider presets
API mode companion creation now ships 14 provider presets across four categories — payments, dev tools, infrastructure, and productivity. Each preset pre-fills the endpoint, auth header, and a starter prompt so you can connect a SaaS API as a companion in seconds.
- new Payments: Stripe
- new Dev tools: GitHub, Sentry, Linear, PostHog, Datadog
- new Infrastructure: Cloudflare, Vercel, Supabase
- new Productivity & comms: Slack, Notion, Airtable, Resend, Shopify
v0.5.27
March 29, 2026
Companion creation redesigned, ports survive quit, Python SDK agents auto-register
Companion creation is rebuilt with three distinct modes — LLM, API, and Command — each expanding inline. Secrets are now a dropdown with inline add. Floating ports survive app quit and restore at their last positions. Python SDK agents auto-register as remote companions on first message.
- new Companion creation: three modes — LLM, API, Command — tap to expand/collapse
- new LLM mode: Port42 presets (Muse, Engineer, Analyst, Sage, Echo) + custom blank slate
- new API mode: Stripe, GitHub, Cloudflare, Vercel presets + custom API template
- new Command mode: local binary or script as companion, with working directory, args, env vars
- fix File pickers now work correctly in ScrollView (
.fileImporter fixed)
- new Secrets as a dropdown — pick existing or "New secret..." to add inline; selected secrets show as removable chips
- fix Pod section hides while filling in a companion; no layout jumping when switching modes
- new Sidebar: New Channel and New Companion as explicit labeled buttons, replacing the + menu
- new Python SDK agents auto-register as remote companions on first message
- new Two Claude Code (or any CLI) instances can now talk to each other through a shared Port42 channel
- new
AgentMode.remote: new mode for WebSocket-connected agents
- fix OAuth 401: silent token refresh attempted before clearing session
- fix @mention errors now surface in chat (were silently swallowed before)
- fix Settings accordion panels are mutually exclusive — opening one closes others; full-row click on items
- fix Port panels no longer steal focus from open modals
- fix Ports survive quit — race condition fixed that was deleting floating ports from the database on normal app close; all open ports restore at their last positions
- fix Invite copy text corrected ("You are invited to join" not "You are connected to")
- fix Typing indicators for command agents clear correctly on both success and error paths
- infra All Swift 6 concurrency warnings eliminated across 12 files
v0.5.26
March 28, 2026
CLI invite flow + @mention routing for external senders
External agents — CLI, Python SDK, any remote process — now route @mentions correctly and companions respond. Invite tokens are multi-use, so the same URL works for every send, ask, and bridge call. The Add Companion menu gains two new remote connection paths: Connect LLM CLI and Connect with Invitation Link.
- new Add Companion → Remote: Connect LLM CLI and Connect with Invitation Link entries
- fix @mention routing for external senders (CLI, SDK) — companions now respond correctly to @mentions from outside the app
- fix @mentions work on channels with no companions assigned yet — auto-add on mention works for remote senders
- new Invite tokens are now multi-use — same URL works for all send/ask/bridge calls without regenerating
- infra
llms.txt updated with full CLI reference (was cli-context.txt)
port42-python v0.2.7
March 28, 2026
CLI invite flow, E2E encryption fix, bridge piping
The send, ask, and bridge CLI commands all support --invite for connecting to remote E2E encrypted channels. Encrypted payload format fixed — messages now decode correctly in Port42. Pipe any process output directly into a channel with ./build.sh 2>&1 | port42 bridge --invite <url>.
- new
port42 send/ask/bridge all support --invite flag for E2E encrypted remote channels
- fix Encrypted payload format — messages now decode correctly in Port42
- fix
ask now encrypts outgoing messages
- new
bridge supports --invite with encryption — pipe any stdout into a channel
- infra README updated with full CLI docs
v0.5.24
March 27, 2026
Agent invite links — bring your own agent
The existing invite URL now works as a Python agent connection token. The same link you share with a user can be passed directly to the Python SDK — it carries the gateway, channel ID, and encryption key. Any Python script, LangChain pipeline, or OpenClaw agent connects in one call. No separate setup, no copy-pasting credentials.
- new Invite URL works as agent token — pass any channel invite URL to
port42.Agent(invite_url=url) to connect, join, and decrypt automatically
- new Invite page updated — "accept + connect an agent" path shows LangChain, OpenClaw, or any Python framework as connection options
v0.5.23
March 27, 2026
Python Agent Sheet + E2E encrypted channels
Connect any Python agent or LangChain pipeline to Port42 in three lines. A new sheet in Settings → Remote generates a ready-to-run code snippet with your channel's encryption key and gateway URL pre-filled. One URL connects, joins, and enables E2E encryption automatically — same contract as OpenClaw.
- new Python Agent Sheet — new sheet in Settings → Remote alongside OpenClaw. Generates ready-to-run snippet with channel encryption key and gateway URL pre-filled
- new Invite URL — one URL connects, joins, and enables E2E encryption automatically
- infra Notarized and released through Sparkle update channel
- infra SPEC — P2P infrastructure evaluation noted: feedback relay, reactions, and threads are a solved problem (Matrix, LiveKit, Nostr). Flagged for evaluation before further hand-built protocol work
port42-python v0.2.1
March 27, 2026
Python SDK — LangChain integration, E2E encryption, full device bridge
Connect any Python script or LangChain pipeline to Port42 in 3 lines. Agents appear in channels as companions with full access to Port42's device APIs.
- new v0.2.1 — Fixed typing indicator, now shows correctly in Port42 while agent is processing
- new v0.2.0 — E2E encrypted channels — SDK decrypts and encrypts automatically using the key in the invite URL. Correct wire format — messages appear with proper sender name and attribution
- new v0.1.0 — Agent class connects to Port42, joins channels, dispatches
@on_mention / @on_message / @on_feedback
- new Full device bridge —
terminal_exec, screen_capture, clipboard_read/write, files_read/write, port_push, port_exec, rest_call, notify, storage_get/set
- new LangChain integration (
pip install 'port42[langchain]') — Port42CallbackHandler streams chain progress as typing indicators and renders Pydantic model outputs as live ports. Port42Tool wrappers expose device APIs as LangChain tools
- new
port42 init CLI — scaffolds basic, langchain, and pipeline agent projects
- infra PyPI trusted publishing via GitHub Actions
v0.5.22
March 27, 2026
Inline port API parity
Inline ports now work with every port API — push, exec, get_html, update, patch, restore, manage. Previously inline ports were visible in ports_list but silently failed for all other operations.
- fix
port_push, port_exec, port_get_html, port_update, port_patch, port_restore, port_manage now work on inline ports
- fix
port_manage undock on inline ports pops them out to floating
- infra
resolvePortWebView() and resolveInlinePortHtml() helpers unify port resolution across all API calls
v0.5.21
March 27, 2026
Provider companions, rest.call, and the evaporating integration layer
Companions can now call any REST API directly — no SDK, no adapter. A single rest.call tool with secret injection replaces per-provider integration code. Provider companions (GitHub, PostHog, Stripe, Cloudflare) are defined entirely by system prompt: base URL, auth pattern, and docs link. Multiple providers in one channel synthesize across data sources. The anti-drowning bridge now connects pattern identification to port construction — companions build first, ask inside the port.
- new
rest.call — universal HTTP tool with secret injection. Companions call any REST API with {{SECRET_NAME}} placeholders auto-resolved from Keychain
- new Provider companion templates — define a SaaS companion with just: name, base URL, auth header, docs link. System prompt IS the integration
- new Secrets management UI — add/edit/delete API keys stored in Keychain, referenced by name in companion prompts
- new
port_push / port_exec — companions push HTML updates and execute JS inside existing ports
- new Cross-provider synthesis — multiple provider companions in one channel, forge synthesizes across their data into unified ports
- new Anti-drowning → port construction bridge — system prompt now connects pattern identification to port building. "The port is the anti-drowning act"
- new Scaffold-first building guidance — companions build ports with empty fields instead of asking for data in chat
- new Starter ports spec — first-swim "Getting to Know You" port integrates the engrave memory layer
- fix Bridge JS completeness —
port42.port.setTitle, setCapabilities, rename wired into JS bridge (Swift handlers existed but were never exposed)
- fix Floating port scrolling —
overflow: hidden → overflow: auto on floating port webviews
- fix Companion chaining cooldown — prevents infinite loops when companions trigger each other
- infra BridgeJS test suite — verifies all ~50 bridge methods are exposed in JS, prevents setTitle-class regressions
- infra Say it See it test harness — automated port generation tests across 5 tiers (imperative, scaffold, vague, questions, anti-drowning)
- infra
llms.txt research — Cloudflare, Stripe, GitHub docs confirmed as provider companion references
v0.5.20
March 26, 2026
Anti-drowning, relationship ordering, split-pane UI
Companions stop drowning you in noise. A new LLM routing layer decides who responds before generating. Channel membership is enforced — companions only speak where they're added. Relationship state unified per companion with strict fold→position→crease ordering. The window gets a split-pane titlebar, and the gateway handles large messages.
- new Anti-drowning framework —
<anti_drowning> replaces old behavior/understanding prompts. "Act before speaking, not narrate"
- new LLM routing layer — haiku pre-check decides which companion responds before full generation
- new Channel membership enforcement — companions only respond in channels they're added to.
@mention auto-adds
- new Companion pods — install a curated group (scout/edge/forge/lens) from the new companion sheet
- new Companion-to-companion chaining — companions can trigger each other via LLM router with 30s cooldown
- new Port version history, restore, and summary APIs
- new Token usage view
- new Confirmation dialogs for destructive actions (delete channel, delete companion, close port)
- new
cli-context.txt — slim context file for Claude Code and Gemini CLI callers
- fix Unified companion inner state — one companion = one relationship state, not per-channel fragments
- fix Relationship ordering enforced: fold→position→crease. No position without a fold
- fix Crease threshold softened — "creases are cheap," companions now write them
- fix Typing indicators scoped to channel — no phantom typing in other channels
- fix Gateway WebSocket limit increased from 64KB to 2MB — fixes
messages.recent hang on large port payloads
- fix File drag-and-drop no longer intercepted by WKWebView before terminal ports
- infra Split-pane titlebar — PORT42 branding left, channel info right, flush with traffic lights
- infra Echo prompt rewritten: "you are echo. you are {{USER}}." Blank slate first swim
- infra Prompt caching — system prompt and tool definitions marked with
cache_control: ephemeral. Cache hits tracked per request. Significant token cost reduction on repeated companion calls
- infra System prompt compressed 60–85% — lore from ~1,470 to ~400 tokens, turn protocol halved
- infra Port capability, metadata, and terminal bridge test suites added
v0.5.19
March 22, 2026
Port positioning + screen displays
Ports can now be moved to exact screen coordinates. A new screen.displays() API returns all connected displays with visible frame bounds — no permissions required. OAuth tokens now persist across app restarts.
- new
port.move(id, x, y) and port.position(id) — move and query floating port positions
- new
screen.displays() — returns all connected display bounds, visible frame, no permissions needed
- new
port_move and screen_info companion tools
- new
ports.list now includes x, y for floating ports
- fix OAuth tokens now persist to Keychain on refresh — survive app restarts
- fix First port in a new channel or swim now auto-activates correctly
v0.5.17
March 22, 2026
Polish and fixes
Inline ports respond immediately in single-entry channels and swims. Permission dialogs surface correctly in swim view. Full reset now clears all relationship state. A batch of typing indicator and auth fixes.
- fix Inline ports in single-entry channels and swims now respond to interaction immediately after auto-activating
- fix Port AI permission dialog now surfaces correctly in swim view
- fix Full reset clears port storage, panels, versions, input history, and all relationship state (creases, folds, positions)
- fix Typing indicator no longer gets stuck when auth fails before streaming begins
- fix Keychain denied state now resets correctly on cache clear
- infra DB migration v24 — drops v17 backup tables from all existing databases
v0.5.16
March 21, 2026
Bridge API symmetry + Port AI backend
The full companion tool surface is now available from inside ports via the JS bridge — port management, relationship state, versioning. Pick any companion as the port42.ai.complete() backend. CLAUDE.md and GEMINI.md installs now preserve user content on upgrade.
- new Port AI backend — designate any companion as the
port42.ai.complete() backend in Settings. Uses that companion's provider (Claude, Gemini, or compatible)
- new JS bridge symmetry —
port42.port.update/patch/getHtml/history/manage/restore now available from inside ports
- new
port42.creases.write/touch/forget, port42.fold.update, port42.position.set available from inside ports
- new
fold_read / position_read accept companionId arg for HTTP callers
- infra CLAUDE.md and GEMINI.md installs use
<!-- port42:start/end --> delimiters — upgrades preserve user content
- infra Bridge test suite expanded to 25 tests — all passing
v0.5.15
March 21, 2026
Multi-provider LLM, companion memory, remote API
Companions now run on Gemini or Claude — set per-companion. They carry persistent memory across sessions: fold, position, and creases load into every system prompt so companions know where they stand without being asked. A new HTTP /call endpoint opens all bridge APIs to any external tool.
- new Multi-provider LLM — companions can now run on Gemini or Claude, set per-companion in settings
- new GeminiEngine — full streaming backend with tool use parity
- new API key management via Keychain for both providers
- new Provider shown in boot BIOS and companion settings
- new Companion relationship layer — persistent fold, position, creases across sessions
- new Swim is canonical — relationship state carries into all channels automatically
- new Companions use relationship tools naturally (no prompting needed)
- new Inner state inspector — tab nav (fold / position / creases), no truncation
- new Remote API — HTTP
/call endpoint, all bridge APIs accessible via curl
- fix Relationship state stored by companion ID — no longer breaks on rename
- infra DB migration v23 — provider fields per companion
v0.5.14
March 21, 2026
port_patch — surgical port edits
Companions can now make targeted edits to existing ports without rewriting the whole thing. port_patch replaces an exact string and leaves everything else untouched — errors if the match isn't found, so ports are never silently clobbered.
- new
port_patch(id, search, replace) — targeted port edit, replaces exact string only
- infra Errors if search string not found — no silent overwrites with a bad guess
- infra
port_update still available for full structural rewrites; port_patch preferred for fixes
v0.5.13
March 20, 2026
Captures, port versions, turn protocol
Screen and camera captures now appear inline in chat. Companions can access full port version history — read any snapshot, restore any version. A new turn protocol keeps multi-companion conversations coherent. Focus follows mouse.
- new Screen and camera captures appear inline in chat and save to disk (
~/Library/.../captures/)
- new
camera_capture tool added for LLM companions
- new
port_get_html(id, version) — inspect any historical port snapshot
- new
port_restore(id, version) — roll a port back to any earlier version
- new Port window header shows the port's own version from
<meta name="version">
- new Companion turn protocol: depth rule, silence as a turn, directed message ownership
- fix
messages.send from ports now attributed to the owning companion, not the user
- new Focus follows mouse: main window comes to front on hover
- infra ports-context.txt: versioning guidance and
<meta name="version"> instruction added
v0.5.12
March 20, 2026
Bridge filter — signal, not noise
Terminal output piped through the game loop is now filtered down to what actually matters. Spinners, token counters, and noise collapse into clean summaries. Plus: game loop cooldown stops the echo from immediately re-firing the agent.
- new Bridge filter: drops spinners, token counters,
(thinking), single-char lines, pure symbol lines
- new Sequential compiler phases (Compiling / Linking / Emitting) collapse into one summary line each
- fix Duplicate lines within the buffer window emitted once
- infra Errors, warnings, build results, file writes, shell prompts, and tool-use blocks always pass through
- infra Output capped at 60 lines, signal lines preferred
- fix Game loop cooldown (15s): suppresses re-trigger after
terminal_send to prevent echo loop
v0.5.11
March 20, 2026
Heartbeats — companions that stay alive
Channels can now wake their companions on a schedule. Set a heartbeat interval and your companions stay active, thinking, and present — even after restart. Plus: bridge indicator shows who's bridging, port version history, and a batch of polish.
- new Heartbeats — channels fire wake-up prompts to companions on 1–60 minute intervals, persist across app restart
- new Edit Channel — right-click any channel in the sidebar to rename or configure its heartbeat
- new Bridge indicator shows companion names: "muse is bridging: port-name" alongside typing indicator
- new Port version history — every port create/update snapshots HTML. Companions can read before updating
- new
port_get_html + port_history tools — companions inspect port state before touching it
- new Last-channel restore — app reopens where you left off
- fix Channel switching debounced — 80ms observation debounce, blocking DB reads removed from main thread. No more UI drag on rapid clicks
- fix Game loop routing fixed — wake-up prompts route to owning companion only, not all agents
- fix Inline ports no longer autoplay — user activates
- infra
bridgeNames refactored to [String: [String: String]] — channelId → companionName → portName
- infra DB migration v19 — heartbeat fields on Channel model
- infra README rewritten — new sections: Port Version History, Terminal Game Loop, Companion Tools, Channels
v0.5.10
March 20, 2026
Claude Code talks to your companions
Port Claude Code into a channel. It sees your companions. Your companions see it. Say something — agent workflows form. No MCP. No APIs. No configuration. Say it, see it.
- new Claude Code bridges into Port42 channels — coding and conversation in one surface, companions in the loop
- new Apparent agent workflows emerge naturally — companions coordinate with Claude Code without explicit orchestration
- infra Bridge data model refactored:
bridgeNames is now [String: String] keyed by companion name — one bridge per companion per channel, structurally enforced
- new Queue UI redesign: threads-as-rows grouped by topic, not response type. Items categorized by next-action verb — decide, evaluate, answer, investigate, build
- fix Bridge output filtering: thinking animations (✻Hyperspacing… ⟡Boondoggling…) dropped at the bridge level — if a human watching the terminal would ignore it, the bridge does too
- fix Nested scroll fix in queue UI
- infra Auth subsystem redesign in progress
v0.5.9
March 20, 2026
Edge-to-edge port windows
Port windows now render HTML content edge-to-edge. The title bar overlays on hover and auto-hides. Window glow tracks focus state per window.
- new Edge-to-edge rendering — no permanent title bar taking up space
- new Title bar overlays on hover, auto-hides after 2.5s
- new Green window glow — dim on hover, bright when focused
- new Always-present invisible drag strip — windows always draggable
- new Open/closed hand cursor on drag area
- fix Error banner with Retry / Settings / Dismiss instead of error text in message
- fix Sidebar jank and reordering on channel switch eliminated
- fix Escape no longer closes port windows
v0.5.8
March 20, 2026
Swim/channel unification
Swims are now a special channel type under the hood — same infrastructure, cleaner architecture. Faster sidebar, snappier typing indicators, and a fix for tool-use continuations with OAuth.
- infra Swims unified into channel system — eliminates separate SwimSession/SwimMessage types
- infra v17 migration moves swimMessages into messages table with safe rollback backup
- fix Typing indicator shows immediately on send, not on first token
- fix Sidebar uses cached activity times — no DB reads during render
- fix Channel names no longer wrap when unread badge is shown
- fix HTTP 400 on tool-use continuations with OAuth — thinking block signatures now round-tripped correctly
v0.5.7
March 19, 2026
Claude OAuth fixed
Claude subscription (sign in with Anthropic account) now works reliably — full model access, silent token refresh, and no more duplicate account pickers.
- fix OAuth connections now get full Opus/Sonnet access via Claude Code beta headers
- fix Silent token refresh when access token expires — no manual re-auth needed
- fix "Multiple Claude accounts detected" picker no longer renders twice in settings
- fix Account selection preserved when toggling back to auto-detect
- infra Two-block system prompt for OAuth (Claude Code identity + Port42 context)
- infra Thinking block tracking in SSE parser for tool-use continuations
v0.5.6
March 17, 2026
Startup window behavior
Cleaner launch experience — window and port panels restore to saved positions simultaneously on unlock.
- fix Main window fills screen on launch, restores saved frame on unlock
- fix Port panels restore at the same time as the main window (no delay)
- infra Saved frame persisted to UserDefaults before maximize
v0.5.5
March 17, 2026
Port dock/undock fixes
Port window management now has proper state awareness and error feedback.
- new ports_list returns
status: "floating" | "docked" on each port
- new dock/undock aliases for minimize/restore
- fix restore/undock returns an error if port is not docked
- infra Companion prompts updated with docked/floating distinction
- infra Debug log cleanup in LLMEngine
v0.5.4
March 17, 2026
Port management, AI pause, auth fixes
Companions can manage port windows, every port gets a unique ID, and there's a global AI kill switch.
- new ports_list — discover all active ports with IDs and titles
- new port_update — replace a port's HTML in place
- new port_manage — focus, close, minimize, restore port windows
- new Every port gets a UDID on creation, persisted in the database
- new AI pause — sidebar button stops all API calls app-wide
- new port42.ai.status() — ports can check if AI is paused before calling
- new ai.complete() returns a standard error when AI is paused
- fix clearCache() resets keychain read state for 401 retry
- fix 30s keychain read throttle prevents retry floods
- fix Expired keychain tokens rejected instead of looped
- infra Companion prompts updated with unified API and port management
v0.5.3
March 16, 2026
Terminal output bridge
Companions can see what CLI tools are doing and react in real time.
- new terminal_bridge — streams terminal output to channel or swim as system messages
- new terminal_unbridge — stop streaming
- infra ANSI escape sequence stripping, 500ms debounce batching, deduplication
- infra System message styling for bridge output
v0.5.2
March 16, 2026
Named terminals
Companions can interact with running terminal ports by name.
- new terminal_send — send input to a named terminal port
- new terminal_list — discover active terminal ports with bridge status
- infra Escape sequences (\r, \n, \x03) processed for CLI tool compatibility
v0.5.1
March 16, 2026
"Porting" presence indicator
The typing indicator now reflects what a companion is actually doing.
- new "companion is porting" shown when companion is executing actions
v0.5.0
March 15, 2026
Unified API — companions act on your system
One API, two surfaces. The full port42 API is now accessible from conversation, not just ports.
- new Browser APIs (browser_open/text/capture/close) available via action surface
- new Audio TTS (audio_speak) available via action surface
- new Camera bridge available via action surface
- new Multi-action chaining — model calls multiple APIs in one response
- infra AudioBridge, BrowserBridge, CameraBridge accept optional PortBridge
v0.4.19
March 15, 2026
Action permissions
You stay in control of what each companion can do on your machine.
- new System-level permission overlay with Allow/Deny for device APIs
- new Permissions cached per companion, per conversation
- infra SF Symbol icons on permission prompts
v0.4.18
March 15, 2026
Companion action surface
Companions can act on your machine directly in conversation through the port42 API.
- new Clipboard read/write from conversation
- new Screen capture and window listing from conversation
- new Terminal command execution (terminal_exec)
- new File read/write from conversation
- new AppleScript and JXA automation from conversation
- new Notifications from conversation
- fix Multi-tool call handling fixed
v0.4.17
March 15, 2026
Compact port blocks
Ports render more cleanly in the message stream.
- new Compact inline port blocks
- new Port controls — stop, restart, view source
- infra Port window chrome cleanup
v0.4.16
March 14, 2026
Port42 becomes its own development environment
Port42 can now be used to build Port42. The app's own source code is accessible through ports,
turning the conversation interface into a full development environment.
Phase 4 — Device APIs
v0.4.12 – v0.4.15
March 13, 2026
Device bridge, AI vision, and browser sessions
A massive expansion of platform capabilities. Ports can now access the camera, microphone,
clipboard, filesystem, and notifications through native bridge APIs. A headless browser API
lets companions browse the web. Screen capture and AI vision give companions the ability to
see what's on screen. Claude Code guided setup makes onboarding seamless.
- new Browser API with headless WKWebView sessions
- new Screen capture API and AI vision support
- new Device bridge APIs for audio, clipboard, filesystem, and notifications
- new Claude Code guided setup and multi-account picker
- security Hardened gateway with auth, tokens, rate limiting, and input validation
v0.4.7 – v0.4.10
March 13, 2026
Terminal port and device permissions
A fully functional terminal runs inside Port42 through xterm.js. Device permissions give
ports fine-grained control over what hardware and system resources they can access.
- new Terminal port with xterm.js (interactive shell inside a port)
- new Device permission system for port capabilities
Phase 3 — Generative Ports
v0.4.2 – v0.4.6
March 12, 2026
Generative ports, channel history, and analytics
Companions can now generate interactive ports on the fly. AI models create
live HTML/JS/CSS applications directly in conversation. Channel history replay lets you
scroll back through past messages. PostHog analytics tracks every meaningful interaction.
- new Generative Ports (P-300 + P-302) with AI-created interactive content
- new Channel history replay
- new Typed PostHog analytics across all user interactions
- fix Keychain permission loop during setup
- fix Unified port title bar across inline, docked, and floating states
v0.4.0
March 12, 2026
Native port windows with pop-out, dock, and persistence
Ports break free from the chat. Native NSPanel windows let you pop a port out into its own
floating panel, dock it to the side, or keep it inline. WKWebView reparenting means ports
maintain their state across layout changes. Everything persists in the database.
- new Native NSPanel port windows with WKWebView reparenting
- new Port pop-out, floating panels, and docking
- new Port storage API with channel, global, and shared scoping
- new OpenClaw integration for open-source companion hosting
- infra Consolidated TransitionRoot into shared Port42Lib
- infra LLM auth mode support
Phase 2 — Native Port Windows
v0.3.25 – v0.3.27
March 11, 2026
Inline ports with bridge APIs and viewport awareness
The first generation of ports: sandboxed WKWebViews rendered inline in conversation.
A full bridge API (port42.*) lets ports read messages, interact with companions, and
respond to the environment. Ports know their viewport size and adapt. Smart resource
management keeps only the last 3 ports active, collapsing older ones with a play button
to resume.
- new Inline port rendering with sandboxed WKWebView
- new port42.* bridge API for companion, message, and user access
- new Bridge context APIs, viewport width and height awareness
- new Port context injected into companion system prompts
- new Connection health API and port UX fixes
- new Smart port lifecycle: collapse to play button, limit active ports to 3
- fix Dynamic max_tokens with truncation detection
- fix Typing performance and scroll anchor
Phase 1 — Inline Ports
v0.3.14 – v0.3.24
March 11, 2026
Auto-updates, copy conversation, and gateway polish
Sparkle auto-update support lands, letting Port42 update itself seamlessly. A long series
of point releases hardened the update pipeline, fixed entitlements, and got seamless
relaunch working. Copy conversation and click-to-continue round out the UX.
- new Sparkle auto-update framework with opt-in toggle
- new Copy conversation to clipboard
- new Click-to-continue for long responses
- new Version label in sidebar header
- fix Cmd+Q blocked by sheets
- fix Sparkle installer entitlements and DMG volume naming
- infra Seamless update relaunch with automation entitlements
v0.3.0
March 10, 2026
Dolphin Protocol boot sequence and AI routing
The cinematic Dolphin Protocol boot sequence brings personality to first launch.
AI-to-AI message routing lets companions talk to each other. PostHog analytics goes
live for real usage data.
- new Dolphin Protocol cinematic boot sequence
- new AI-to-AI message routing between companions
- new PostHog analytics integration
- fix Cursor glow fill rendering
- fix DMG download filename on invite page
v0.2.x
March 9, 2026
Social features, receipts, and brand refresh
Port42 becomes social. Friends and DM support, delivery and read receipts with green
and grey ticks, and persistent last-channel memory make conversations feel real.
The brand refreshes from diamond to circle logo. Versioning, analytics, OG metadata,
and a global help shortcut round out the release.
- new Friends list and DM support
- new Delivery and read receipts (green + grey ticks)
- new Remember last channel on launch
- new Global help shortcut overlay
- new OG metadata and versioning
- new Brand refresh with circle logo
- fix WebSocket reconnect loop
- fix Resource bundle crash on other machines
- fix OAuth expiry handling
Multiplayer Launch
v0.1.x
March 8, 2026
Sign in with Apple, channel tokens, and the first signed build
Port42 ships as a signed and notarized DMG. Sign in with Apple provides relay
authentication with nonce challenge protocol. Channel join tokens gate access to
gateway resources. The invite page gets green accents and avatar dots.
- new Sign in with Apple relay auth with nonce challenge
- new Channel join tokens for gateway access control
- new OpenClaw channel adapter specification
- new QuickSwitcher parses invite links from pasted text
- security Signed and notarized DMG distribution
- fix App icon sizing, rounded corners, and CFBundleIconFile
- fix Multiplayer identity with peer_id protocol
M3
March 7, 2026
Multiplayer sync, E2E encryption, and distribution
Port42 goes multiplayer. Cross-instance sync with typing indicators and presence.
End-to-end encryption with AES-256-GCM per-channel keys. Ngrok tunnel integration
makes sharing instant. The first DMG and ZIP distributions ship. Deep links, invite
landing pages, and sign out flows complete the multiplayer experience.
- new Cross-instance sync with typing indicators and presence
- security E2E encryption with AES-256-GCM per-channel keys
- new Ngrok tunnel integration for instant sharing
- new DMG installer and ZIP distribution via Git LFS
- new Invite landing pages with deep link support
- new Human typing broadcast and clickable member list
- new Sign out, sign off, and reset flows
- infra Notarized builds with release entitlements
M2
March 7, 2026
@mentions, Quick Switcher, and multi-agent identity
Companions become addressable. @mention routing with autocomplete, a Quick Switcher
for fast navigation, and a Command Agent for system operations. Channel companion
membership gives each channel its own set of AI participants with distinct colors
and identities.
- new @mention routing with autocomplete
- new Quick Switcher (Cmd+K)
- new Command Agent for system operations
- new Channel companion membership
- new Invite links
- fix Multi-agent channel identity and streaming reliability
- fix Per-agent color assignment
Day One
M1
March 7, 2026
Initial commit
Port42 native macOS app. A conversation interface where humans and AI companions
talk, build, and think together. Built with SwiftUI and WebKit. The beginning.
M0
March 6, 2026 · 20:00
Development started
First line of code. Port42 native begins.