v0.3.0-preview.6
Released on 2026-11-06 (v0.3.0-preview.5..v0.3.0-preview.6, changes since v0.3.0-preview.5).
v0.3.0-preview.6 hardens the Hub–Runtime Broker boundary and workspace isolation: Hub–Runtime Broker traffic requires TLS off loopback (server.trusted_proxies), multi-replica Helm installs default conduit.internalTls to auto, host-side git runs without host credentials through the guarded entry point, and Runtime Brokers enforce single-component template and harness-config names, confine NFS mounts (nosuid,nodev) to each agent’s scope, and disable Kubernetes API token automounting on agent pods. Asynchronous agent start (hub.async_agent_start) defaults on, Cloud Run agents gain per-agent NFS workspaces, provisioned Agent homes, in-memory staged Hub credentials and pre-checked CPU/memory limits, and shared NFS project storage consolidates deletion, readiness and state-directory provisioning on the Hub alongside Hub-signed workspace bootstrap URLs. Single-node Hubs add confirmed downgrades (409 downgrade_requires_confirmation) with database snapshots, boot-failure rollback and atomic Runtime Broker plugin updates, while the CLI and web UI add scion hub settings, project-defaults, experiments, scion project settings, scion artifact comments, Hub-boundary access tokens, per-schedule time zones, Unlimited count limits (0), an opt-in pi harness, and experimental chat retention (hub.chat_retention), artifact .zip archives (hub.artifact_archive) and port view links (hub.port_view).
Highlights
Section titled “Highlights”1. Hardened Hub–Runtime Broker TLS, Host Git and Workspace Confinement
Section titled “1. Hardened Hub–Runtime Broker TLS, Host Git and Workspace Confinement”Hub and Runtime Broker endpoints refuse non-loopback plaintext traffic, minting secrets and join tokens only over TLS or from the same host and trusting forwarded headers only from server.trusted_proxies (127.0.0.1, ::1 when unset), while Helm defaults conduit.internalTls to auto above one replica. Host-side git runs with LC_ALL=C through the guarded entry point without host credentials, offering a project git secret only to the recorded remote (https, ssh or git URLs). Runtime Brokers require .scion inside explicit project paths (409 project_path_not_initialized), confine template files (up to 4 MiB), declarative harness files and skills without following symlinks, enforce single-component template and harness-config names, mount NFS with nosuid,nodev (503 nfs_unavailable otherwise) scoped to the agent’s tree, and set automountServiceAccountToken: false on Kubernetes agent pods.
2. Default-On Async Start, Cloud Run Workspaces and Consolidated NFS Storage
Section titled “2. Default-On Async Start, Cloud Run Workspaces and Consolidated NFS Storage”hub.async_agent_start is on by default where the Runtime Broker and all live Hub instances support it. On cloudrun, clone-per-agent agents get per-agent NFS workspaces, provisioned Agent homes on the share, in-memory staged Hub credentials, pre-checked CPU/memory limits (400 validation_error when refused) and OS Login SSH keys signed for the instance’s service account. Shared server.project_storage places clone-per-agent and empty-per-agent workspaces on the share for Docker, Podman and Apple container runtimes (and mounts NFS inline on Kubernetes without shares[0].pv_name), keeps provisioning state in the project’s state directory, checks the NFS share on Hub /readyz with Hub-only project tree deletion, and bootstraps workspaces via Hub-signed URLs. Count limits (max_turns, max_model_calls) treat 0 as Unlimited, cleared resources sub-fields apply at the next start (clearedResourceSubfields), and stopped/suspended agents free their max_agents_per_project slot.
3. Confirmed Downgrades, Expanded Hub & Project CLI, Chat Retention and Artifact Stewardship
Section titled “3. Confirmed Downgrades, Expanded Hub & Project CLI, Chat Retention and Artifact Stewardship”Single-node Hubs support confirmed downgrades (409 downgrade_requires_confirmation) with five DB snapshots and settings copies, a deploy.sh boot-failure rollback guard, and atomic Runtime Broker plugin updates (~/.scion/plugins/broker), while release binaries are stamped with their built tag and Runtime Broker health reports control_channel status per Hub. The CLI adds scion hub settings, project-defaults, experiments, scion project settings, scion artifact comments and scion hub token --boundary project|hub, plus per-schedule IANA time zones and an opt-in pi harness (1.3.0). Behind hub.chat_retention, Hub admins gain messages_retention_days and deleted_conversation_grace_days (default 30) with previews and manual sweeps; agent-created artifacts record the delegating user as steward, grant marks-only access to new artifacts, and support .zip downloads (hub.artifact_archive) and a unified Manage access dialog (web.artifact_manage_access).
⚠️ Breaking Changes
Section titled “⚠️ Breaking Changes”- Hub–Runtime Broker TLS and
server.trusted_proxies(#4384, #4404): Endpoints refuse non-loopback plaintext connections and mint Runtime Broker secrets and join tokens only over TLS or from the same host; forwarded headers and the relay public listener trust onlyserver.trusted_proxies(127.0.0.1,::1with a startup warning when unset; explicit lists including[]apply verbatim), reported in 403 details, logs, health andscion doctor. - Helm TLS on the inter-Hub relay hop (#4304, #4489):
conduit.internalTlsdefaults toautoabove one replica, requiringconduit.internalTls.existingSecret(kubernetes.io/tls) orconduit.internalTls.enabled: falseand Hub imagenightly-20261029/v0.3.0-preview.5or later; render guards refuse non-loopback plaintext relay listeners. - Host-side git uses no host credentials (#4376, #4352, #4387): Hub and Runtime Broker git remote operations (including backstop and agent-start clones) never use host credential helpers, askpass,
~/.netrc, TLS client certs, Kerberos or SSH identities; without a project git secret they run anonymously, with one only that secret goes to the recorded remote, and SSH URLs require a project secret. - Asynchronous agent start on by default (#4548):
hub.async_agent_startdefaults on where the Runtime Broker and all live Hub instances support it (scion startand resume wait for launch); keep it off during multi-node upgrades from versions without the Hub instance registry until all nodes are upgraded, and before a downgrade turn it off and wait the launch timeout plus 15s. - Single-component names,
.scionpaths and template file confinement (#4542, #4528, #4401, #4400): Template and harness-config names cannot contain a separator or.., be absolute, start with:or contain://; agent create, scheduleddispatch_agentand default templates must use a template name or ID. Explicit project paths require an internal.sciondirectory or marker (409 project_path_not_initialized). Templateagent_instructionsandsystem_promptfiles must be regular files up to 4 MiB inside the template directory without symlinks (single-line relative paths; multi-line inline text). - NFS readiness,
nosuid,nodev, inline NFS and per-agent shared workspaces (#4458, #4377, #4342, #4354, #4533): Onnfsproject storage, the Hub is the sole remover of deleted project trees andworkspace_storagereadiness checks the share (project_storage_treeretired fornfs), returning 503 on/readyz, unhealthy on/healthz, and 200 withstorageKepton delete when missing while Runtime Brokers keep their directory while agents remain (409). Runtime Broker NFS mounts requirenosuid,nodev(503 nfs_unavailableotherwise). Withoutshares[0].pv_name, Kubernetes pods mount NFS directly (writable Runtime Broker mount atmount_root/<share id>, no NFS Agent homes). On shared NFS storage for Docker, Podman and Apple container,clone-per-agentandempty-per-agentworkspaces live on the share scoped to the starting agent. - Kubernetes token automount, placement checks, App tokens and held-agent sends (#4362, #4487, #4415, #4397, #4507): Kubernetes agent pods set
automountServiceAccountToken: falsein all GCP identity modes, legacy Kubernetes Runtime Brokers enforce operator placement policy at start/restart, and saving runtimes and profiles checks placement in one guarded transaction (422 on new problems, warning on stored ones, 409 on conflict). The Hub mints GitHub App tokens only for the agent’s own project, and the agent hold check refuses every message send path to a held target before wake, store write or dispatch. max_turns: 0Unlimited, settings error envelope, liveauthorized_domainsand root session checks (#4356, #4442, #4424, #4374): Count limits (max_turns,max_model_calls) treat0as Unlimited (unset inherits, positive caps, 422 withoutunlimitedCountLimits). Settings writes return422 validation_error(details.errors),409 revision_conflicton stale revisions, and400on unreadable bodies. Savedserver.auth.authorized_domainsapplies live and at startup (SCION_SERVER_AUTH_AUTHORIZEDDOMAINS, saved, thensettings.yaml, refusing self-blocking saves with 422). Onlyweb/public/files skip the root-level web session check (others redirect browsers or return 401, including/robots.txt).
🔐 Security & Access Control
Section titled “🔐 Security & Access Control”- Host-side git door and clone URL schemes (#4378, #4381, #4379, #4358, #4414, #4398, #4531): Host git refuses empty or option-leading arguments, pins discovery to the resolved directory (including after-run checks), runs with
LC_ALL=C, routes the workspace probe, shared-workspace pull/clone fallback, and worktree/branch lookups through the host git door, and clones onlyhttps,sshorgitURLs. - NFS mount scope, Agent home confinement and symlink-free skill installs (#4450, #4463, #4455, #4395, #4554, #4429, #4491): Runtimes refuse NFS mounts of the export root, parent directories or another agent’s/project’s tree; declarative harness files use an Agent home handle refusing outside paths and directory symlinks; skills install through one writer skipping symlinks, special files and hard links within entry/size/depth limits;
sciontool harness provisionrequires a separator boundary; and attachment deletes validate IDs and use a store-root handle. - Keyring relay signing, sealed secrets, key verification and encryption-policy fence (#4355, #4470, #4465, #4535, #4523, #4573): Conduit relay admission tokens and peer signatures use the versioned signing ring with key IDs, and separate relays hear grant key changes immediately. Without a keyring file, JWTs require an absent or
legacykey ID; in keyring mode the Hub drops thelegacysigning entry requirement and seals no-backend GitHub App and chat secrets.scion server keys verifychecks secret authentication and Hub backups, and under an encryption policy the secret store refuses writes leaving a row without a value or secret reference. - Tokens, federation
allowed_domains, Cloud Run SSH keys, port proxy and CSP (#4365, #4443, #4439, #4438, #4383, #4484, #4532, #4564, #4579, #4347, #4454, #4552, #4512, #4388, #4393, #4472): User access tokens supportuser:promote(member/viewer) anduser:delete, user reads requireuser.read, constraint preview tokens apply only to their own constraint, constraint window changes require relaxation authority, and token-created agents receivesecret.deliver,env_var.deliver,skill_injection.deliverandsecret.useintrinsically. Trusted issuerallowed_domainsapplies on federation-token auth, and cross-project GitHub App tokens (via token-source label) require no installation on the agent’s project and re-verify source installation and agent-create permission on every mint. Cloud Run exec signs OS Login keys for the instance’s service account and drops cached keys on cleanup; deleting a Runtime Broker deletes its HMAC secret and join token;GET /runtime-brokers?projectId=XhidesLocalPathfrom non-readers; runtimes drop inheritedSCION_HUB_TOKEN_STAGEDmarkers with stricteriatparsing; credential stores validate names on load/delete;hubclientescapes URL path parameters; the port proxy strips internal Hub auth headers; and CSP reports answer 204 with rate limiting (20 req/s, burst 200, 100 reports/req).
🤖 Agent Lifecycle & Workspaces
Section titled “🤖 Agent Lifecycle & Workspaces”- Cloud Run workspaces, Agent home, resources and reliable restarts (#4453, #4433, #4545, #4537, #4518, #4578, #4604, #4500): On
cloudrun,clone-per-agentagents get per-agent NFS workspaces, provisioned Agent homes copied onto the shared-volume home at start without following links, staged harness secrets and Hub credentials in an in-memory volume (scion doctorchecksactAs), pre-checked CPU/memory limits (400 validation_erroror asynccontainer_configwhen refused), run-scoped instance reuse, and bounded 24h/20s log reads. - Consolidated project storage provisioning, Hub-signed bootstrap and NFS cleanup (#4607, #4394, #4459, #4495, #4503, #4602): Provisioning state lives only in the project’s state directory through one provisioner (promoting old markers and clearing stale locks at Hub start), Runtime Brokers without GCP credentials bootstrap workspaces via short-lived GET-only Hub-signed URLs, remote
scion startcollects local git-less files from the workspace root and removes the agent if upload fails, agent delete and failed Cloud Run starts clean up NFS agent directories and partialmkdirtrees, and Kubernetes starts fail fast withvolume_mount_failedon NFS mount errors. - Unlimited count limits, cleared resources, quotas and harnesses (#4356, #4419, #4457, #4411, #4441, #4353, #4367, #4558, #4566, #4584, #4549): Count limits (
max_turns,max_model_calls) support0as Unlimited (nullclears; negative refused), clearedresourcessub-fields apply at the next start (clearedResourceSubfields), and stopped/suspended agents free theirmax_agents_per_projectslot. An opt-inpiharness (1.3.0) preserves colons in model IDs while strippingpithinking suffixes, Claude provisioning writes real Vertex AI project/region values and applies them on Cloud Run, Copilot no-auth mode runs without a session bus or keyring, and the# Placeholdersystem prompt counts as empty. - Git config keys at start, secret warnings, delegation grants and
sciontoolinit (#4543, #4527, #4534, #4520, #4357, #4575, #4606, #4601, #4380, #4434, #4456, #4511, #4570, #4587): Agent start carriesgrep.threads,branch.<name>.vscode-merge-base,remote.<name>.promisorandremote.<name>.partialclonefilterinto.git/config, omits command/hook keys on Docker/Podman with a notice, and reports refused keys by file (git_config_refused). Starts list store-skipped secret names inwarnings, suspend revokes only the suspended run’s grants, start claims release on launch success, replaced-run status reports during restart are ignored,sciontool initwrites credential state outside/run/scion, Kubernetes NFS homes record provision status before outputs exist,hubHas[].scopefollows shared precedence, placement refusals keep their 409 code on delete, invalid local shared-dir names are skipped with a warning, time zone read errors return 503, and empty template names resolve to the default template.
💬 Chat & Messaging
Section titled “💬 Chat & Messaging”- Send receipts, sender time zones, failed-message retention and Telegram replies (#4462, #4460, #4474, #4427, #4444, #4337, #4583, #4410, #4346, #4510): Send responses include
conversation_id, human sender messages carrysender_timezone, agent-to-user DM responses return the storedmessage_idand timestamp, soft-deleted targets are treated as unknown, and agents withoutproject:artifact:readget404 attachment_artifacts_unavailableand fall back to legacy attachments.messaging.failed_message_retention_days(default 7, min 1) controls the chunked failed-message purge (up to 500 rows). Telegram group-chat error replies send as threaded plain text, the chat members sidebar folds People/Agents sections, and chat banners use dark-theme tokens.
☁️ Runtime Brokers, Settings & Operations
Section titled “☁️ Runtime Brokers, Settings & Operations”- Confirmed downgrades, Runtime Broker plugin updates and command-path health (#4371, #4440, #4609, #4420, #4471, #4417, #4445, #4399, #4426, #4363, #4519, #4482): Single-node Hubs support confirmed downgrades (
409 downgrade_requires_confirmation; refused below the downgrade floor or on non-SQLite stores), keeping five DB snapshots and settings copies, adeploy.shboot-failure rollback guard, atomic Runtime Broker plugin updates (~/.scion/plugins/broker), and tag-stamped release binaries. Runtime Broker health reportscontrol_channelstatus per Hub (in Hub health,scion doctorandscion runtime-broker status),update-binaryandrebuild-serverwarn on unset settings likeserver.trusted_proxies, Runtime Brokers connect before checking non-active profile runtimes (503 when missing), preserve profiles on empty embedded re-register, receiveconnectedfirst with connection-scoped PTY frames, and use a 180s request limit (210s write, 4m CLI create).scion doctorrecommends a namespaced Kubernetes Role and checks the shared-dir PVC storage class, and the Helm chart setshub.terminationGracePeriodSeconds(default 45). - Storage validation, per-schedule time zones and starter Hub defaults (#4340, #4467, #4364, #4585, #4486, #4514, #4494, #4586, #4452, #4446, #4431): Project storage settings validate in one place (
422 storage_invalid), recurring schedules accept an IANA time zone (UTC in API) and pause withcreator_deletedon user delete, starter Hubs defaultimage_registrytolocalhost/scion(IMAGE_REGISTRY/SCION_IMAGE_REGISTRY), Server Config saves changed sections by revision and shows startup-set running values,settings.yamlvalidates the GCP identity pair, restarts skip re-saving current key backups,cloud_loggingdegrades on a failure ratio, conduit ingress counts pending placements, v1 runtime keys mark unversionedsettings.yamlas v1, and cloned project identities align only within the same project.
🧪 Experiments & Groundwork
Section titled “🧪 Experiments & Groundwork”- Chat retention, artifact archives & stewardship, port view and flat Cloud Run (#4385, #4476, #4526, #4610, #4555, #4571, #4574, #4525, #4348, #4388, #4403, #4580, #4581, #4515, #4547): Behind
hub.chat_retention,chat_retentionsettings (messages_retention_days,deleted_conversation_grace_daysdefault 30) and a paced sweeper purge old messages, soft-deleted conversations and unreferenced attachment bytes with retained-history markers,[no longer available]replies, dry-run previews, manual runs and run history. Behindhub.artifact_archive, an artifact’s Files tab adds Download all (.zip) viaGET /api/v1/artifacts/{id}/versions/{seq}/archive; agent-created artifacts record the delegating user as steward and grant active delegating users marks-only access to new artifacts; and behindweb.artifact_manage_access, one Manage access dialog manages sharing, review access, retention and share links. Behindhub.port_view, forwarded ports open through a short-lived page link over conduit or the port-forward tunnel; behindhub.flat_cloudrun_target, flat Runtime Brokers acceptcloudrunas aruntime_targettype; andscion runtime-broker convert --planprints a redacted move-to-flat plan (hub.flat_runtime_brokers). - Held edits, lifecycle analytics, key status, delegated agent list and
image_tag(#4409, #4432, #4423, #4451, #4603, #4599): Held edits re-check saver permission at start (hub.agent_edit_held, 503 if undecided),hub.lifecycle_eventsemitsagent.lifecycleevents via a transactional outbox,server.secret_rotationaddsGET /api/v1/admin/keys/statusandscion server keys status|check, delegated agent credentials list agents on sealed cursors, andhub.image_tag_settingaddsimage_tag(SCION_IMAGE_TAG) andbuild-release-images.sh.
- Hub/project settings, artifact comments, token boundaries, conversation IDs and IAP login (#4437, #4449, #4569, #4577, #4563, #4538, #4522, #4499, #4488, #4493):
scion hub settings get/set/unset/schema(with revision compare-and-set and--dry-run),scion hub project-defaults get/set/unset,scion hub experiments list/enable/disable/resetandscion project settings get/set/unsetmanage Hub and project settings (scion hub token --helplists required scopes).scion artifact commentslists structured review marks for<id>or<id>@<seq>,scion hub token list/scopes/createsupport--boundary project|huband aBOUNDARYcolumn, project-scoped token errors name missingproject:read/project:listscopes,scion conversation listandgetprint full IDs (conv:<id>), and IAP-fronted Hub logins fail with a clear message.
🎨 Web UI
Section titled “🎨 Web UI”- Kubernetes runtime editor, Hub-boundary tokens, Server Config and artifact review UI (#4339, #4373, #4497, #4496, #4567, #4502, #4501, #4413, #4406, #4422, #4405, #4389): The admin Runtimes editor edits Kubernetes placement and identity fields, Project Settings edits the per-profile default GCP service account map and labels Hub fallbacks, the access tokens page creates Hub-boundary tokens with purpose and up to 8 labels (
403 scope_violationon refusal), and Server Config edits the maintenance message and agent start timing, clears Kubernetes shared-dir defaults on a switch to Cloud Run, and shows env-override badges on Federation, Harness Configs and scratchpad settings. In graphical review view, clicking your own comment badge edits or removes it, Cmd/Ctrl-click or middle click opens links in a new tab, Refresh reloads an artifact in place, the review toolbar stays pinned with a 44px phone Comment target, long sign-in return URLs store the path without query when needed, and opening a terminal pane dialog closes the Jump to agent palette.