What's New

Release notes for K2. Updates are published to GitHub.

v0.39.45

Latest
June 9, 2026

0.39.45 — Messages that actually arrive: the comms-reliability release

-k2so msg now confirms the Enter actually landed. Under heavy host load

(big agent fleets), a delivered message could sit un-submitted in the

recipient's input box until a human pressed Enter — while the sender saw

success: true. Delivery now wraps the message in explicit paste framing and

*verifies* submission against the recipient's screen, re-sending Enter until

it lands. If it truly can't confirm, you get an honest no_submit error

(with guidance) instead of a silent stall.

-Long messages stop getting clipped. Inbox memos silently truncated at

~2.7 KB (~54 lines) and long live messages lost their tails — the payload

rode the URL, which had a hard cap. Message text and inbox bodies now travel

in a proper request body with no size limit, and anything that *would*

overflow the old path errors loudly instead of corrupting the record.

-Workspace names are forgiving now. k2so msg appa finds the workspace

named Appa; misses come back with a "did you mean …?" suggestion instead of

a bare not-found.

-k2so connections stops lying. add failures actually print an error

(they used to exit silently as if they'd worked), and list shows *whose*

connections you're looking at and flags peers that are no longer reachable.

-New workspaces show up immediately. A workspace added from another

window, the CLI, or a connected client now appears in the sidebar and

Settings on every client — no more manual window reload. CLI-created

workspaces no longer vanish into an unreachable no-focus-group limbo.

-Create workspace folders from a connected client. The remote folder

picker has a "+ New Folder" button, so you can create a fresh workspace

folder on the host instead of only adopting existing ones.

-k2so settings --mode and k2so workspace list work. The mode setter

was a silent no-op and the list always failed with no output; both do their

jobs now.

-Pinned tabs can't borrow a sibling's identity anymore. The server now

heals any pinned Chat/Inbox tab stamped with a neighboring workspace's

identity during a switch race — on save *and* when serving older corrupted

layouts.

Download K2SO_0.39.45_aarch64.dmg (40.1 MB)

v0.39.44

June 8, 2026

0.39.44 — Clone-to actually brings your Claude chat history

-Cloned workspaces now arrive with their conversations. A folder-naming

mismatch meant K2SO and Claude Code looked in *different* directories for a

workspace's sessions whenever the path had an underscore (or a dotted name, or

lived under a symlinked location) — so a "Clone to" could report success yet

bring zero chat history, and /resume came up empty. K2SO now names those

folders exactly the way Claude Code does, so sessions — including worktree

history — bundle, transfer, and resume correctly. A one-time self-heal repairs

earlier clones (and local workspaces) that had landed in the wrong folder, and

the clone now logs how many sessions it moved.

Download K2SO_0.39.44_aarch64.dmg (40.1 MB)

v0.39.43

June 8, 2026

0.39.43 — Right-sized terminals + reliable pinned-chat switching

-The terminal sizes for whoever's actually looking. With multiple clients on

one server, the PTY now follows the active viewer — the focused client's (or

whoever just typed) screen dimensions are used — so a remote viewer no longer

gets a terminal clipped to someone else's window. Whoever last interacts owns

the size, and it hands back cleanly when the other side takes over.

-Switching the pinned chat's session works again. Picking a different

conversation from the pinned-tab dropdown now reliably loads it: your explicit

choice is honored instead of being quietly reverted to the most-recent session.

Download K2SO_0.39.43_aarch64.dmg (40.1 MB)

v0.39.42

June 8, 2026

0.39.42 — Tabs behave when two clients share a server

-No more tab/terminal flicker with multiple clients. When two windows — or

two people — were connected to the same server, tab-order sync could spiral

into a fast loop that constantly rebuilt the tabs and reloaded the terminals

(and the pinned chat). Tab order now syncs cleanly and quietly.

-Reordering a tab just moves the tab. Adopting another client's reorder no

longer rebuilds the panes — your terminals and pinned chat stay put instead of

reloading.

-Your selected tab is yours. Which tab you're looking at is now per-client:

a teammate reordering tabs or switching their view no longer drags yours along.

Each person explores the workspace freely.

Download K2SO_0.39.42_aarch64.dmg (40.1 MB)

v0.39.41

June 8, 2026

0.39.41 — Pinned chats remember exactly where they were

-Your pinned chat resumes the same conversation, every time. The workspace's

pinned chat now has one canonical, server-owned identity — so reopening it,

switching devices, or restarting the host all return you to the *same* Claude

session instead of occasionally starting a fresh one. This is the root fix

behind the remote re-mint loop the last release patched.

Download K2SO_0.39.41_aarch64.dmg (40.1 MB)

v0.39.40

June 8, 2026

0.39.40 — Clone-to chat history lands, and remote pinned chats settle down

-Cloned workspaces keep their chat history on the new machine. After a

"Clone to", Claude's /resume came up empty on the destination because each

session still pointed at the *source* machine's folder. Clones now rewrite

those paths on arrival, and a one-time self-heal repairs workspaces you

already cloned — your conversations show up where they belong.

-Pinned chat no longer churns when viewed remotely. Opening a workspace's

pinned chat from a connected/companion client could spin in a loop, minting a

brand-new session on every reconnect instead of resuming the real one. It now

resumes the workspace's actual session and stays put.

-Settings top-bar alignment. "K2 ‹Server Name›" now sits flush in the

Settings top-bar instead of dropping below the window's traffic lights.

Download K2SO_0.39.40_aarch64.dmg (40.1 MB)

v0.39.39

June 8, 2026

0.39.39 — The server runs the show (steadier chats, less chatter)

-Pinned chats are server-owned and steadier. The daemon now owns the pinned

chat's session end-to-end — opening, switching sessions, reloading, and

reviving the right session after a restart are all handled server-side. No more

open-flicker, and the tab keeps its icon.

-Live updates instead of polling. The app used to poll the server on timers

for model status, agent activity, the review queue, and tunnel state. It now

receives those as live pushes — fresher, lighter, correct across multiple

devices, and it keeps working on a headless server.

-Shared truth across everyone on a server. Tab renames, tab order, the

Active bar, and heartbeat "live" state now sync to every connected device — one

consistent picture, not a per-window guess.

-K2 Connect is now K2 Toge. The remote-access feature was renamed (the old

name belonged to another product). Settings and the website reflect it.

-Settings shows the connected host up top. The Settings page now carries the

same "K2 ‹Server Name›" top-bar as the main view, with the host switcher there.

-Small fix: the Active-window up/down arrows in General settings are now

visible instead of black-on-dark.

Download K2SO_0.39.39_aarch64.dmg (40.0 MB)

v0.39.38

June 8, 2026

0.39.38 — Remote sessions stay alive, and Clone-to brings everything

-Remote chat sessions no longer die after ~15 seconds. When you opened a

dormant workspace's chat from a connected client, the host could mistake it

for a closed tab and reap the session out from under you. "Active" workspaces

and the cleanup that acts on them now live on the server itself, so opening a

workspace from *any* device keeps it alive — and the host (or a headless

server) does the cleanup correctly on its own.

-Everyone on a server sees the same Active workspaces. When two people use

one server, each sees the other's open workspaces appear in the Active bar —

one shared, live picture of what's in use, mirrored to every connected device.

-"Clone to" now migrates your *entire* chat history. It used to bundle only

the single newest session per workspace; it now brings every session by

default. A new "Include all chat history" toggle (on by default) lets you

opt back to live-only if you want a slimmer bundle.

-Rename tabs. Double-click a tab — or right-click → Rename Tab — to give

it your own name.

-Pinned-chat session picker, fixed and sturdier. The dropdown reliably

switches the pinned chat to a past session, the reload button reloads the one

it names, and your chosen session is remembered across restarts (and reinstalls)

so it comes back without re-picking — it's stored on the server now.

-Brand-new workspaces open cleanly. The pinned Chat + Inbox show up

immediately (no more "leave and come back"), and a workspace's first chat starts

fresh instead of failing on a not-yet-existent session.

-Remote access stays connected. A connected machine's tunnel keeps itself

alive even if the Settings panel isn't open — the host renews its own lease, so

remote access no longer drops out from under you.

-Behind the scenes: restored chat history always binds to the workspace that

owns it (no wrong-history on lookalike workspaces); a safety rail prevents a

misbehaving chat from respawning in a loop; plus test-suite reliability fixes.

Download K2SO_0.39.38_aarch64.dmg (40.0 MB)

v0.39.37

June 6, 2026

0.39.37 — Settings layout polish for connected hosts

-"Update Host" button. Updating a connected machine is one click that

downloads, installs, and relaunches it — so the button now says **"Update

Host"** (it was "Download," which implied a separate install step that

doesn't apply to app hosts).

-General settings reads cleaner when connected to a host. It now splits

into two equal halves with a full-height divider — your general settings on

the left, the connected host's Restart + Update controls on the right. On

your own Mac it's a single half-width column with no divider.

Download K2SO_0.39.37_aarch64.dmg (39.9 MB)

v0.39.36

June 6, 2026

0.39.36 — Reconnecting after a host restart just works

-No more "invalid token" dead-ends after updating or restarting a host.

When a machine you're connected to restarts (e.g. right after a remote

update), its sign-in can expire. K2 now checks your session the moment it

reconnects and, if it's expired, prompts you to sign back in — instead of

silently opening a broken workspace where the file tree, chat history, and

terminals all fail with "invalid or missing auth token." One re-auth instead

of having to remove and re-add the connection. (A momentary network blip

never logs you out — only a genuinely expired session does.)

Download K2SO_0.39.36_aarch64.dmg (39.9 MB)

v0.39.35

June 6, 2026

0.39.35 — Remote updates that actually work (both kinds of host)

-Updating a machine you're connected to now works end-to-end. A signing-

manifest bug was silently breaking every remote daemon self-update; that's

fixed. Headless/server hosts update via a verified binary swap;

desktop-app hosts update by triggering that machine's own app updater —

K2 now auto-detects which kind of host it is and picks the right path for you.

-Update failures tell you why. Instead of a generic "Update failed," the

remote-update panel now shows the actual reason (download, signature, or

version detail) so a stuck update is diagnosable at a glance.

-Cleaner Settings when connected to a host. The remote Restart and

Update controls now sit together in their own right-hand column with a

divider; when you're on your own Mac, the page is a single column as before.

-Under the hood: signed-download hardening (redirect handling + real logging),

host-type reporting on the connection handshake, and a clear "open the app on

that machine" message if a desktop host's app isn't running.

Download K2SO_0.39.35_aarch64.dmg (39.9 MB)

v0.39.34

June 6, 2026

0.39.34 — Active bar that tells the truth (and uses less RAM)

-**"Active" now means *alive or recently worked*, not *what you're looking

at*.** Workspaces you haven't touched in a while age out of Active on their

own, and their background sessions get cleaned up — so K2 stops quietly

holding hundreds of MB for workspaces you walked away from days ago.

-Tune how long Active sticks around. General settings has a new

"Keep workspaces Active for [N] hours" — lower it for more aggressive

cleanup, raise it to keep sessions warm longer.

-At-a-glance status on every Active item: a small green square when

the workspace has a live session (grey when none), the braille spinner

when it's working, and an EKG icon when it has an enabled heartbeat (i.e.

it can run on its own). Pinned workspaces float to the top, separated

from the rest.

-The pinned Chat tab shows when it's working — its icon turns into a

spinner while the agent is busy, then back when it's done.

-Heartbeat indicators are honest now. A workspace only shows the heartbeat

icon when it actually has an enabled heartbeat — fixed a case where a

workspace with every heartbeat turned off still looked self-driving (and held

its session open forever).

-Squared-off status dots in the server switcher, matching the rest of the

UI. Plus K2 Connect settings polish and a reordered Settings list.

Download K2SO_0.39.34_aarch64.dmg (39.9 MB)

v0.39.33

June 5, 2026

0.39.33 — Remote reboot + remote updates (beta)

-Restart a machine you're connected to — from the app or the terminal. A

new Restart host control (Settings) appears only when you're on a remote

host and is clearly labelled for *that* machine, not your Mac. From the CLI,

k2so daemon restart --host --wait does the same and waits for it to

come back up. Owner/Admin only.

-Update a remote machine over K2 Connect (beta). On a remote host:

check → download → verify → install & restart, with live progress and an

automatic rollback if the new build doesn't come back. The download is

minisign-verified before anything is swapped. The flow names the remote

machine at every step so it can never be mistaken for your local one.

-Install on a headless server from the CLI (beta). k2so daemon install

(and a curl … | sh one-liner) fetches, verifies the signature, and

installs the standalone daemon, registering a systemd/launchd service so it

stays up across restarts.

> Remote update and headless install are beta: the macOS path is wired end

> to end, while the Linux server binaries (built in CI) and the live

> download → swap → relaunch want a real-world shakeout. Signature verification

> is mandatory; all of it is Owner/Admin gated.

Download K2SO_0.39.33_aarch64.dmg (39.9 MB)

v0.39.32

June 5, 2026

0.39.32 — Leaner memory, smoother relaunch

-Closed a memory leak that piled up background agent processes. Terminal

and agent sessions are now force-reaped when their tab or workspace goes

away (or when a remote host-switch tears them down) instead of orphaning a

long-running claude/agent process (~150 MB each). If your machine felt

heavier the longer K2 ran, this was why.

-Dismissing a workspace from the Active bar now frees its sessions. After

a short grace period the dismissed workspace's pinned Chat (and any extra

terminals) are reaped to reclaim memory; reopening the workspace relaunches

the saved session right where you left off.

-The workspace you land on at launch starts its Chat on its own. Fixed a

cold-start race where the first workspace's pinned Chat tab wouldn't spawn

until you clicked refresh.

-Connected Workspaces works on a remote machine — the related-workspaces

list now reads from the host you're connected to.

-"Connection dropped" stays out of your way. A brief tunnel blip now

shows a small, non-blocking indicator instead of a full overlay — the top

bar stays usable and the screen keeps updating; it only flags a real drop

after repeated failures.

-Clone-to cleans up after itself — temporary transfer bundles are removed

once a clone finishes, and stale ones are pruned, on both source and

destination machines.

Download K2SO_0.39.32_aarch64.dmg (39.9 MB)

v0.39.31

June 5, 2026

0.39.31 — K2 Connect: the whole remote surface is host-aware

-What you do on a remote machine now actually happens on *that* machine.

A batch of actions were quietly running against your *local* machine even

while you were connected to a remote — now they target the host you're

connected to: approving / rejecting / requesting-changes on agent reviews,

creating & deleting agents, editing heartbeats (add / edit / archive /

enable / rename), the agent presence locks, scheduler ticks, managing

skills, saving an agent's AGENT.md, regenerating the workspace skill,

workspace connections, and more.

-Format-on-save no longer misfires on a remote — it skips rather than

running a local formatter against a file that lives on the host.

Download K2SO_0.39.31_aarch64.dmg (39.8 MB)

v0.39.30

June 5, 2026

0.39.30 — Fix: pinned-chat dropdown works on a remote machine

-**The pinned chat tab's chat-picker now switches chats on the machine

you're connected to.** Selecting a different chat from the dropdown was

updating only your *local* machine, so on a remote the chosen chat never

loaded — it now writes to the active host, so it works the same remote as

it does locally. (Working directly on the machine was already fine.)

Download K2SO_0.39.30_aarch64.dmg (39.8 MB)

v0.39.29

June 5, 2026

0.39.29 — Clone to: the cloned workspace shows up + "Open on host"

-The cloned workspace now appears on the host immediately — no more

manual window reload to see it. After a clone finishes, the destination's

workspace list refreshes on its own.

-"Open on \" button on the done screen — jump straight into the

freshly-cloned workspace on the remote machine, instead of hunting for it

in the sidebar.

Download K2SO_0.39.29_aarch64.dmg (39.8 MB)

v0.39.28

June 5, 2026

0.39.28 — Clone to: fix crash on workspaces with symlinked folders

-Clone to no longer fails with *"Is a directory"* on a workspace that

contains a symlink pointing at a folder (for example, linked

agent-skills under .k2so/). Those links are now skipped while bundling;

symlinks to individual files are still copied. (0.39.27 introduced Clone

to — this makes it work for those workspaces.)

Download K2SO_0.39.28_aarch64.dmg (40.5 MB)

v0.39.27

June 5, 2026

0.39.27 — Clone a workspace to another machine + rock-solid remote tunnels

-"Clone to" — move a whole workspace to a remote machine. Right-click a

workspace and pick Clone to → to copy it onto a machine you're

connected to over K2 Connect. It bundles the workspace — its files, the

agent's memory, and session history — pushes it over your existing

encrypted connection, unpacks it on the host, and registers it there with

its K2 settings, ready to resume. A quick pre-flight lets you **decide

whether to bring secrets** (.env, .auth/, in-workspace tokens): on by

default since it travels over your encrypted link, or off if you'd rather

re-add them on the host. (Your Claude login is never copied — the host

signs in as itself.)

-Remote tunnels now survive updates and restarts. Fixed a bug where a

K2 Connect host could go unreachable at .k2.dev after a software

update or daemon restart: the tunnel could pin a stale internal port, and

leftover tunnel processes could pile up and fight over your subdomain. The

host now always tracks its live port and clears out old tunnel processes

on start, so remote access self-heals on the next launch.

-CLI polish. k2so tunnel and k2so daemon companion no longer print

an error on their status output under newer Python versions.

Download K2SO_0.39.27_aarch64.dmg (39.8 MB)

v0.39.26

June 5, 2026

0.39.26 — K2 Connect: drag files straight onto the remote machine

When you're connected to another machine, dragging a file in from your

computer now actually transfers it to that machine, decided by where

you drop it:

-Onto a terminal → the file uploads to the workspace's

.k2so/downloads/ and the path is dropped into the prompt, so the agent

can use a file that really exists on the host.

-Onto a folder in the file tree → the file uploads into that folder.
-Anywhere else → you're asked where on the host to save it.

Local drag-and-drop is unchanged. (Both machines need 0.39.26 for the

host to accept the upload.)

Download K2SO_0.39.26_aarch64.dmg (39.7 MB)

v0.39.25

June 5, 2026

0.39.25 — Remote folder picker everywhere + agent slash-commands

-Open a remote folder from anywhere. The 0.39.24 remote folder

browser now backs every "add workspace" entry point — the main

navbar +, the sidebar, the File menu, and ⌘O — not just Settings. So

while you're connected to another machine, adding a workspace always

browses that machine, never your local disk.

-Agents can trigger slash-commands over messages. k2so msg gains a

--command flag that prepends a slash-command (like /loop or /goal)

to the front of a delivered message — so one agent can kick off a

command in another. Omitted, messages deliver exactly as before.

Download K2SO_0.39.25_aarch64.dmg (39.7 MB)

v0.39.24

June 5, 2026

0.39.24 — K2 Connect: open a workspace on the remote machine

-Open folders that live on the host. When you're connected to another

machine, "New Workspace" now lets you browse and pick a folder on **that

machine** — an in-app folder browser that walks the remote's filesystem —

instead of your local file picker (which could only see this computer).

-Friendlier with out-of-date machines. The app stays compatible with

hosts running an older K2SO, so you can always connect and sign in to

update one. And when a host is too old for a newer feature, the app now

tells you which version it needs instead of silently doing nothing.

Download K2SO_0.39.24_aarch64.dmg (39.7 MB)

v0.39.23

June 5, 2026

0.39.23 — K2 Connect: roles + cleaner remote settings

-User roles for shared servers. Connect users now have a role:

Owner, Admin, or Member. The owner can promote trusted people

to help run the server (including handing off ownership); admins can add

users and enable/disable them; members just connect and use it. Removing

users and changing roles stay owner-only.

-Cleaner settings when viewing another machine. The K2 Connect

*tunneling* controls — k2.dev sign-in, subdomain, start/stop — now hide

while you're connected to a remote host, since those belong to the machine

that owns the daemon. Managing that server's users still works from

right there.

-k2so works from any folder. Fixed a bug where running the k2so

command (for example, an agent-to-agent message) from a directory that

isn't a git repository would exit silently with no output.

Download K2SO_0.39.23_aarch64.dmg (39.7 MB)

v0.39.22

June 4, 2026

0.39.22 — daemon onboarding fixes (#14, #15) + Settings host indicator

-#15: enrich daemon-spawned PTY child PATH (login-shell PATH + known dirs,

cached w/ 5s timeout) so agent CLIs in ~/.local/bin / Homebrew / nvm resolve.

-#14: daemon LaunchAgent self-heals a transient (/Volumes or AppTranslocation)

ProgramArguments path before kickstart so a DMG-launched install converges

after upgrade; refuses to register from a DMG/translocated path.

-Settings: ServerSwitcher in the Settings header shows/sets the active host.

Gate green: tsc 0, cargo 901, vitest pass (tabs flake only).

Download K2SO_0.39.22_aarch64.dmg (39.7 MB)

v0.39.21

June 4, 2026

0.39.21 — K2 Connect: client fully mirrors the active host

Fixes the host-switch state-leak class (#625): module-level zustand stores +

module Map/let singletons survive the remount, so daemon-

backed state loaded once against local leaked onto a remote connection. Added

onActiveHostChange()/activeHostKey() in connect-host.ts; on host change re-fetch

settings (focusGroupsEnabled etc.), focus-groups, panels, timer, custom-themes,

projects restore + clear ActiveBar memory / tabs sessions / active-agents pane

state / pending persist timer / stale session WS. Client prefs stay local.

Gate green: tsc 0, vitest 167, cargo 879.

Download K2SO_0.39.21_aarch64.dmg (39.7 MB)

v0.39.20

June 4, 2026

0.39.20 — K2 Connect: remote clients can read the host's data

Fixes the daemon /cli/* catchall, which gated on the owner token ONLY

(req_token != *state.token) instead of token_ok (owner OR valid connect-user

session). A connected remote user authenticated (whoami) but every data read

(projects/list, fs/read-dir, workspace/*, git, chat via cli::dispatch) 403'd

"Invalid or missing auth token", so the client showed stale LOCAL workspaces.

Now token_ok; owner-only routes still gated by require_owner above the catchall.

Validated: connect-user session reads projects/list (55) + fs/read-dir.

Update the HOST machine to 0.39.20.

Download K2SO_0.39.20_aarch64.dmg (39.7 MB)

v0.39.19

June 4, 2026

0.39.19 — Plan B: renderer talks to the daemon directly

Replaces 0.39.18's host-aware DaemonClient (Plan A), which had a global-override

race (failed connect blanked local workspaces) and a blocking-proxy beachball

over the tunnel. The renderer now calls the daemon over host-aware HTTP

(daemonCliGet/Post) for ALL data; the Tauri daemon-data proxy + A's

set_active_daemon chokepoint are deleted. Remote connect drives

nav/files/git/agents/settings reliably. Full gate green: tauri build, tsc 0,

vitest 156, cargo units 879. Verified locally (daemon 0.39.19, 55 workspaces).

Download K2SO_0.39.19_aarch64.dmg (39.7 MB)

v0.39.18

June 3, 2026

0.39.18 — K2 Connect: drive the remote machine

-Host-aware DaemonClient: connecting to a remote daemon now repoints the

~90 Tauri-proxied routes (projects/git/agents/states/layouts/sections/

settings/timer/workspaces) to the active host instead of 127.0.0.1.

-Fix "Invalid or missing auth token": ConnectionGate no longer accepts a

remote host (off public /boot-status) before a connect-user session

exists; parks polling until sign-in lands; proxied calls never fire

tokenless.

-Bundle frpc as a signed externalBin sidecar, auto-staged to ~/.k2so/bin

on startup — fresh host needs no brew install frpc.

Download K2SO_0.39.18_aarch64.dmg (39.9 MB)

v0.39.17

June 3, 2026

0.39.17 — K2 Connect sign-in fix

Production CSP connect-src was blocking the webview fetch()/wss:// to

Supabase and to *.k2.dev, so account sign-in showed "Load Failed" and the

remote-daemon connect would have failed the same way. Added

https://*.supabase.co, https://*.k2.dev, wss://*.k2.dev.

Download K2SO_0.39.17_aarch64.dmg (34.3 MB)

v0.39.16

June 3, 2026

K2 Connect — reach your K2 daemon from anywhere

0.39.16 introduces K2 Connect: expose your local K2 daemon at a public

https://.k2.dev URL and connect to it securely from another computer.

Host this device

-Account + subdomains — sign in to your k2.dev account, buy a subdomain ($2.99/mo), and pick it in-app to bind this device's tunnel.
-One-click tunnel — Start/Stop with live status; "Re-launch this tunnel on restart" auto-starts it when the daemon boots.
-Subdomain claim — a subdomain in use on another device is greyed out; swapping prompts before ending the current tunnel.

Users / Access (who may connect in)

-Add connect-users with a username + initial password (argon2-hashed — never recoverable, only resettable).
-Owner-configurable password policy (min length + special/number/uppercase) and a 3-fail → 15-minute lockout.
-Self-service password management in a browser at https://.k2.dev.

Connect out

-Add a remote server by URL + username + password in Settings → Connections, with a full-screen sign-in and remembered credentials.

Also in this release

-Settings → K2 Connect and Connections merged into one page.
-K2 Companion page reworked to "download the app + live tunnel status" (standalone tunnel retired).
-Connection-resilience fixes (auto-recover stale daemon token, frpc status, daemon HTTP routes).
Download K2SO_0.39.16_aarch64.dmg (34.3 MB)