Skip to content

Colossus Desktop

Goal

Open one repository in Colossus Desktop without installing or starting a daemon, then confirm that work uses the app-managed runtime and its bounded access profile.

Prerequisites

  • macOS 13 or later for the first desktop release.
  • Apple silicon for the first direct-download build.
  • A folder you own and intend Colossus to use as its workspace.
  • An OpenAI Responses or OpenAI-compatible provider key, or the official Codex CLI installed for ChatGPT subscription-backed model runs.

The offline self-test does not require a provider key or network connection.

For the unsigned Windows 10/11 x64 package, use the Windows Desktop Developer Preview guide.

Steps

1. Download and verify Desktop

From the v0.10.2-preview.10 Developer Preview, download Colossus-Desktop-DEVELOPER-PREVIEW-v0.10.2-preview.10-aarch64-apple-darwin.zip and its adjacent .sha256 file. Keep both files together and verify the archive before opening it:

shasum -a 256 -c \
  Colossus-Desktop-DEVELOPER-PREVIEW-v0.10.2-preview.10-aarch64-apple-darwin.zip.sha256

The check must report success. Expand the zip and move Colossus Desktop to Applications. A checksum detects damage or substitution after the checksum was produced; it does not by itself authenticate the publisher.

This Developer Preview is ad-hoc signed and is not notarized by Apple. Control-click Colossus Desktop, choose Open, and confirm Open on first launch. If macOS still blocks it, use System Settings → Privacy & Security → Open Anyway. Do not disable Gatekeeper globally, and do not treat this preview as a stable production build.

2. Open a workspace

Launch Colossus Desktop and choose a folder through the native picker. The app records an opaque workspace binding in $COLOSSUS_HOME/desktop/settings.json. It does not write Colossus configuration, state, or credentials into the selected repository. Managed Local keeps its generated configuration, canonical database, indexes, and private runtime files in the selected workspace's isolated workspaces/<partition-id>/desktop/ home partition; it never aliases CLI/TUI state.

An older preview that recorded only a path or inode cannot safely prove that the current folder is the one you chose after the app has exited. After upgrading such a preview, Desktop intentionally asks you to choose the folder again and starts a fresh managed state partition; it never attaches the replacement folder to the old state. This release also starts fresh in the Colossus home rather than migrating earlier application-support data. That legacy data is preserved and ignored, not imported or deleted. Keep it until the new workspace has been verified.

New installations select Managed Local. The signed app supervises its bundled colossus-sidecar, and the native desktop backend connects to that process over the same authenticated, pinned loopback gRPC contract used by application SDKs. A WebView reload does not stop the runtime.

The repository remains Desktop's context, relative-path anchor, and state identity. Selecting it does not relocate the Colossus home. Full access, the default for fresh Managed Local settings, allows authorized tools to use host resources outside that repository; choose Workspace isolated or Offline isolated when it must be a resource boundary. Top-level Desktop agent runs automatically snapshot $COLOSSUS_HOME/AGENTS.md followed by the selected repository's AGENTS.md; see the home and instruction reference.

Offline isolated is not an air gap. It uses platform isolation without derived workspace resources and hides the generic model-visible network.http, web.fetch, and docs.fetch tools. Managed Local still retains the exact provider service and authentication/refresh destinations required by the selected provider, so model calls and Codex authentication can work; those retained destinations do not make the generic fetch tools visible. Search, MCP, and integration adapters remain independently controlled by their own configuration. For a deployment with no remote transport, use the offline and air-gapped operation guide.

3. Configure a model

Select the fixed OpenAI Responses, OpenRouter (OpenAI-compatible), or ChatGPT subscription (Codex) preset and enter the model. OpenAI and OpenRouter continue through an operating-system secure-input dialog for the preset's fixed origin; the WebView cannot submit a key or endpoint. The native layer stores that key directly in the platform keychain, and Managed Local resolves only its opaque host: reference after policy permits the provider action.

For Codex, choose Sign in with ChatGPT. Desktop confirms the operation natively and starts the official Codex CLI login flow. The resulting credential stays in the Codex-owned private file store. The WebView receives only signed-in, signed-out, or unavailable status; the native host passes the validated file path—not its tokens or account identifier—over inherited bootstrap IPC. Sign-out uses the official CLI too.

Later model or access-profile edits reuse the existing keychain entry when the provider preset is unchanged. Select Replace the stored API key to rotate it; first setup and every API-key provider-preset change always force the native key prompt. Advanced model configuration also exposes the provider-neutral reasoning-effort setting used by Codex and other adapters that support it.

The key is not written to YAML, argv, environment variables, renderer state, logs, or terminal sessions. Real model runs remain unavailable until this setup succeeds. Use the explicit offline self-test when you only need to validate local startup.

Manage inherited configuration

Open Settings and switch between Global and Workspace. Global resources are immutable revisioned definitions for providers, models, credentials, MCP servers, search, and telemetry. A Workspace pins the exact revisions it uses. Saving a Global edit does not change a running Workspace; the Workspace shows an update and must review and apply it. Workspace edits apply only to that Workspace after configuration preflight and any required native authority confirmation.

Each ordinary setting shows whether its effective value comes from the Colossus built-in default, a Global override, or a Workspace override. Inherit removes an override instead of copying the current value. The read-only effective YAML view is sanitized and marks Desktop-owned runtime identities and private storage paths.

Global catalog editors preserve the complete managed resource revision. In particular, model reasoning effort and image-input capability, nullable provider defaults, explicit telemetry sensitivity acknowledgments, and the complete MCP transport contract can be reviewed without hand-editing YAML. MCP exposes exact arguments and tool names one per line, working directories, multiple native credential bindings, non-secret static headers, OAuth, research projections, stateless HTTP, and optional runtime limits. Credential values remain native-only; the editor stores and displays identifiers.

Use Import config in a Workspace to inspect .colossus/config.yaml without modifying the repository. Desktop proposes reusable catalog resources, Workspace overrides, and native credential mappings. Same-name conflicts require Rename, Replace, or Skip. Re-import compares the stored source hash before applying any changes. Repository env: references must map to native credentials; secret values and static MCP headers never cross into the WebView.

For an active Workspace, provider, model, search, MCP, and OTLP health checks run through that Workspace's authenticated worker using its accepted revisions, CA trust, credentials, network grants, and sandbox. MCP OAuth status, login completion, and logout remain runtime-owned; Desktop exposes only bounded status and authorization metadata. The OTLP check emits bounded diagnostic signals and flushes the live host-owned exporters. Its result contains only per-signal pass, fail, or disabled status, never collector errors, endpoints, headers, credentials, or payloads.

Applying a Workspace edit while work is active moves the Workspace to Draining. Existing runs finish against their pinned configuration, new runs are rejected, and Desktop restarts the Workspace only after the active set is empty. A bounded drain timeout leaves the current runtime and persisted settings unchanged.

4. Start work

Create new work, choose Plan or Execute, and submit a prompt. Every request names the selected runtime target. Access and execution boundary are separate controls. The default access profile is Allow all, and Full access is the default execution boundary for fresh Managed Local settings. Schema-v1–v3 migrations preserve the prior platform-isolated behavior: Minimal maps to Offline isolated, while Development and legacy allow_all map to Workspace isolated. Full access is intentionally unsafe: registered tools are allowed without built-in approval friction and may use ambient host filesystem, process, environment, and HTTP(S) resources. The interface keeps a persistent warning visible. Choose Workspace isolated or Offline isolated to restore platform containment; choose Development or Minimal to narrow tool decisions independently.

The Work surface keeps every released, listable session record available. Snapshots lists immutable context-compaction records and opens their summary, message range, pinned facts, open tasks, touched files, notable tool results, and strategy. Resources links plans, sources, snapshots, and artifacts and expands delegated agents, goals, tasks, decisions, memories, and research runs for direct inspection. The session map uses bounded projections; opening these views never exposes canonical secrets or deletes conversation history. Managed Local's native layer requires an operating-system confirmation before widening access or execution authority. Its primary credential has exactly the run and prompt scopes plus the reviewed built-in tool ceiling for that selection. That ceiling includes bounded, non-recursive delegation when agent.delegate is selected; it never creates undeclared tools or administrative authority. Approval responses use a separate native-only, tool-less credential after the operating-system confirmation. Neither credential grants administrative or unrestricted skill authority.

The permission selector beside the Work composer changes how Managed Local handles approval-required effects for subsequent work without restarting the runtime. Deny fails those effects closed, Ask pauses for the app's approval card, Risk auto allows eligible low-risk effects after evaluator review, and Full access satisfies approval obligations without asking. Moving to Risk auto or Full access requires an operating-system confirmation, and the mode cannot change while a managed run is active. This runtime-local selection returns to Ask when Managed Local restarts. It does not change policy decisions, tool authority, access profile, or execution boundaries, and it is unavailable for independently administered External targets.

Settings shows the runtime as Starting, Ready, Restarting, Stopping, or Failed. Workspace and provider changes drain and restart the sidecar. Unexpected exits receive at most three bounded restart attempts; in-flight mutations are not automatically replayed.

For a private provider or enterprise TLS interception root, open Settings → Additional CA certificates and import a PEM bundle. Desktop copies and validates it in private native storage and shows only its certificate count and SHA-256 fingerprints. Import and removal restart Managed Local transactionally; the renderer never receives the original or private storage path.

5. Check the signed update channel

Only stable builds advertise an automatic update channel. Desktop does not perform a background update request: the check occurs only after Settings → Desktop updates → Check for updates. Developer Preview, validation-only, and development builds have no update authority; install later previews manually from GitHub Releases.

Both the metadata request and package download use the shared Colossus network configuration, including an imported additional CA bundle. The native updater rejects non-HTTPS endpoints, HTTP redirect downgrades, mismatched channel metadata, and unsupported platform targets. Install update opens a native confirmation, downloads the package, verifies its Tauri updater signature with the public key sealed into the application, and only then invokes the platform installer. The renderer receives only whether an update is configured or available and the public version/channel values; it does not receive update URLs, signatures, or package bytes.

6. Add an External target when needed

Use External for an installed daemon or fleet node that was enrolled for this application. External targets preserve their independent endpoint, certificate pin, instance identity, application credential, and lifecycle. Fleet can show multiple targets, while Work sends operations only to the selected target.

In Settings → External targets, choose Add daemon and select the non-secret connection JSON created from the worker application-enrollment output. The strict file contains instanceId, certificateSha256, publicApiDir, credentialService, and credentialAccount, plus an optional human-readable label. Start from apps/desktop/src-tauri/connection.json when creating it; map the CLI's printed instance_id, certificate_sha256, and credential destination names to the camel-case fields. Never add the bearer credential or provider key to this file.

Enroll an External target into Desktop's identity-bound keyring namespace with credential-keyring-account auto. The CLI expands auto to an account bound to the daemon's full instance ID and TLS certificate fingerprint and prints the exact result for the JSON:

colossus --config .colossus/config.yaml worker \
  --public-api-dir "$HOME/.colossus-public-api" \
  --enroll-application app:colossus-desktop \
  --scope runs:execute --scope runs:read --scope runs:control \
  --scope prompts:respond --scope approvals:respond --role primary \
  --credential-keyring-service com.obscuritylabs.colossus.desktop.external \
  --credential-keyring-account auto

Add exact --tool TOOL_NAME ceilings when that External target should execute tools. The explicit approvals:respond scope lets Desktop answer a policy approval for those effects; omit that scope when the target has no approval-gated tools or approvals are handled by a different application credential. It never expands the tool ceiling. The connection file cannot choose an arbitrary keychain entry: Desktop accepts only the fixed service and the account derived from the file's instance and certificate anchors. A target saved by an older Desktop build remains listed but reports that re-enrollment is required. Migrate its legacy credential explicitly while the worker is stopped:

colossus --config .colossus/config.yaml worker \
  --public-api-dir "$HOME/.colossus-public-api" \
  --enroll-application app:colossus-desktop \
  --scope runs:execute --scope runs:read --scope runs:control \
  --scope prompts:respond --scope approvals:respond --role primary \
  --credential-keyring-service com.obscuritylabs.colossus.desktop.external \
  --credential-keyring-account auto \
  --retire-credential-keyring-service com.obscuritylabs.colossus.desktop \
  --retire-credential-keyring-account colossus-public-api

Add the same exact --tool ceilings the application needs. Omit --scope approvals:respond during migration only when Desktop must not approve effects for that target. The CLI reads the legacy bearer only from the operating-system keyring, proves that it is an active credential for app:colossus-desktop under this daemon's API authentication root, delivers and activates the new identity-bound credential, durably revokes the legacy credential, and only then deletes the legacy keyring entry. The retirement flags must appear together and conflict with --replace-credential.

Import the updated JSON to upgrade that same target in place. Desktop never copies a bearer out of a legacy selector. If the CLI reports an unconfirmed revocation or keyring cleanup, keep the printed non-secret credential IDs for reconciliation; the new credential remains active and neither bearer is printed. Do not delete the source selector's current value unless it is confirmed to be the printed prior credential; another process may have replaced that keyring entry.

Desktop accepts only a bounded, regular, non-symlink connection file owned by the current user and not writable by group or other users. Before import, selection, reconnection, or removal, a native dialog identifies the daemon by label, instance ID, and full certificate SHA-256 pin. It copies the validated trust anchors into owner-private native settings. The renderer receives only a newly generated opaque target ID and the display label; discovery paths, certificate pins, and keyring lookup labels are never returned to it. Removing a target deletes this saved native connection record but does not revoke its worker credential or stop the daemon; use worker administration when revocation is required.

A workspace already owned by another worker is never stopped or taken over. Connect that worker as External instead. Closing Desktop stops Managed Local after graceful drain and checkpoint; it does not stop an installed External daemon.

7. Opt into local terminals

The dedicated terminal WebView can open the bundled Colossus TUI for the active managed workspace and, on macOS, one fixed local shell. Enabling this feature for the first time requires a native operating-system confirmation. Consent recorded by an earlier TUI-only build does not silently enable shell authority. The terminal renderer cannot supply an executable, environment, absolute working directory, or arbitrary arguments. Clipboard escape writes, automatic URL opening, remote navigation, and general renderer-initiated process spawning are disabled; manual copy and paste remain user actions.

Open Colossus TUI starts the verified bundled CLI suspended with fixed arguments, binds its live code identity to the signed bundle manifest before resuming it, and then requires the CLI to open and attest the exact selected workspace before delivering worker authentication through bounded one-use inherited anonymous pipes that never traverse the PTY. It requires the existing managed worker and fails instead of opening a second writer. Inside that TUI, /permissions shows the active approval mode and /permissions deny, /permissions ask, /permissions risk-auto, or /permissions full-access changes it for subsequent interactive operations from that TUI. The selection is client-scoped: it does not change the managed worker default for Desktop or other clients. TUI actions remain inside normal Colossus policy and audit. External targets never offer a TUI action.

Open Shell is a privileged local-user convenience, not an agent tool. Native macOS code launches exactly the validated system /bin/zsh -l with a cleared, native-constructed environment and the selected workspace. It receives no worker authentication. It runs outside Colossus policy, approvals, journal, and audit. It can remain available while Managed Local is unavailable so an operator can inspect or repair the repository directly. Closing the tab, disabling the feature, closing the terminal window, or exiting Desktop requests best-effort process-group cleanup; macOS cannot guarantee cleanup after an arbitrary shell child deliberately detaches and reparents itself.

Expected result

The selected folder appears as a Managed Local workspace, runtime health reaches Ready, and a provider-backed or offline test run produces ordered durable updates. No daemon enrollment or terminal command is required for the default path.

Verification

Open Settings and confirm the selected target, workspace display name, provider/model, access profile, and runtime health. Restart Managed Local once and confirm that Work refetches durable runs without resubmitting a create or effect request.

If the local TUI is enabled, open it and confirm that it attaches to the existing worker; it must fail safely if Managed Local is not ready.

Failure path

  • Needs workspace: choose a folder through the native picker; renderer-supplied paths are intentionally unsupported. Upgrades from a preview-era path-only or inode-only binding also require this explicit reselection.
  • Needs provider: choose a supported provider preset, enter its model, and save a valid key through the native secure prompt, or use the offline self-test.
  • Runtime integrity failure: do not replace bundled files. Reinstall a signed desktop build.
  • Workspace already owned: leave the owner running and add its authenticated daemon as an External target.
  • External re-enrollment required: provision the credential into the Desktop-bound service with account auto, update the connection JSON from the command output, and import it again.
  • Provider failure: confirm the fixed provider preset, model, keychain access, and key format. Errors shown to the renderer are sanitized.
  • TUI unavailable: wait for Managed Local to become Ready; the launcher never falls back to a second local runtime.

Next step

Read Core concepts before broadening access, or learn the full Terminal UI interaction model.