Skip to content
Version: Current

studio: the workspace

import StatusPill from ‘../../../components/StatusPill.astro’;

studio is a named tcpsystems suite product for project workspaces and runs.

  • State: live (API answers), measured 2026-11-10.
  • Source: single read-only requests from the docs worktree on 2026-11-10T11:43Z: GET https://studio.tcp.systems/ returned 200 with a JSON service description ("name":"studio", "description":"control plane for agent-driven work"); GET /readyz returned 200 with ok; GET /healthz returned 200 with ok; GET /app/ returned 302 to the Pocket ID sign-in at auth.tcp.systems.
  • Placement: the suite atlas of 2026-11-06 lists the studio Nomad job on scaleblade (API :9192, UI :9193). The live image then was behind the repository trunk; the running commit was not measured here. studio does not run on dsh, which owner ruling 2026-11-10 removed from the fleet.
  • Not measured: no signed-in session, run or deployment was exercised. /version redirects to sign-in and was not read.
  • 2026-11-03: suite docs described studio as live with OIDC, workspaces, runs, deploy/preview APIs, and a Svelte UI served by studiod.
  • 2026-11-02: owner passkey login was previously recorded as verified.

These snapshots require fresh verification after restoration. A historical note is not evidence of current availability.

Architecture intent (design, not current state)

Section titled “Architecture intent (design, not current state)”

The studio repository (github.com/tcpsystems/studio, sibling source) defines the intended service shape. The statements below describe that design. They do not show the deployment matches or runs.

  • Service role. A gRPC agent builder service with durable runs, projects, repos, usage, and model discovery. The contract of record is proto/tcps/studio/v1/studio.proto (studio:proto/tcps/studio/v1/studio.proto:1).
  • Durable state. Studio owns durable state in PostgreSQL. The README states the durable world is in PostgreSQL, not Vercel (studio:README.md:3).
  • Runs. Runs move through statuses such as queued, running, verify, done, and failed (studio:README.md:20).
  • Workspaces. The API design includes per project durable git workspaces, leases, patches, tree, and file routes under /api/workspaces/... (studio:README.md:96).
  • Realtime. The API design includes /api/runs, SSE /api/runs/events, and /api/live controls with tenant scoping (studio:README.md:103).
  • UI and auth. The intended UI is a Svelte 5 app on @tcpsystems/ui, served by studiod. API access uses a Pocket ID session (studio:README.md:14, studio:README.md:96).
  • Eve integration. Studio routes runs through Eve when configured; STUDIO_EVE_URL and related settings control that integration (studio:README.md:285).

Treat blueprint or architecture material for studio and stations as intent unless a dated deployment record confirms it.

These prerequisites come from the studio service configuration surface. Confirm the unit, paths, and credentials on the target host before use (studio:README.md:269).

  • Network binding. gRPC, probe, and UI listeners are loopback only by default (STUDIO_GRPC_ADDR, STUDIO_HTTP_ADDR, STUDIO_UI_ADDR). Do not relax loopback checks.
  • Database credential. Set STUDIO_PG_DSN_FILE to a 0400 file containing the PostgreSQL DSN. The DSN value must not travel in environment variables or logs.
  • Workspace and runtime paths. Configure STUDIO_WORKSPACE_ROOT, STUDIO_DEPLOY_ROOT, and STUDIO_SANDBOX_ROOT as needed. Routes that need missing roots should answer with an honest unavailable response.
  • Eve and bridge. Set STUDIO_EVE_URL and STUDIO_EVE_TOKEN_FILE if runs should use the Eve runtime (studio:README.md:285).
  • Authentication. Pocket ID session auth protects the UI and /api/. Unauthenticated API calls return 401; HTML may redirect to the identity provider.

Use this checklist before changing studio status in docs or status records.

  1. Confirm deploy target and revision. Record host, unit or process, image or binary revision, and date.
  2. Check process and probes. Verify loopback gRPC/probe/UI listeners and health endpoints on the host.
  3. Check dependencies. Verify PostgreSQL DSN file permissions, database reachability, workspace roots, sandbox root, and Eve configuration if enabled.
  4. Check auth. Verify Pocket ID client configuration and a sign in flow. Record the date and actor role, not credentials.
  5. Check core API paths. Verify /api/projects, /api/runs, /api/runs/events behavior, workspace routes, and operator routes in scope. Confirm degraded responses are honest (for example 503 with fallback semantics where documented).
  6. Check status integration. Update status evidence only after independent verification.
  7. Update docs with dates. Replace the dead status only when a dated verification supports the change.

If a panel reports unavailable, the backend is absent or unconfigured. The message names which, so you can fix the connection before retrying.

Studio is a row on the status page that expects the Pocket ID gate: a 302 is up, and a 200 would mean the gate is off. See that page for the state vocabulary a reader sees during an incident.