Concepts
The words Actana Control uses for the fleet. Code, types, and core-link frames keep these names; the Panel UI diverges in one place, called out below.
Panel. The self-hosted web service you deploy once — one container or Node process, typically behind a reverse proxy. It owns the Core registry (endpoints, auth material, aliases), terminates every core-link, and serves the UI. It holds no task, session, or project state.
Core. A machine running the Actana Control daemon. It hosts projects, tasks, and sessions; owns its SQLite; and is the source of truth for all work on that machine. One Panel drives zero or more Cores.
Harness. The vendor coding CLI a session drives: claude-code (claude), codex (codex), cursor-cli (cursor-agent), opencode (opencode). Installed on the Core, spawned into a PTY by it. The Panel sees an id and an availability status, nothing else. Hermes and Pi are planned.
Operator. The human who owns a Panel and every Core registered in it. Exactly one per Panel, created at first boot (name and password). Cores belong to an Operator; identity is a thin gate in front of the registry, not an assumption baked into it.
Project. A folder on the Core's machine that hosts harness workspaces. The path is a machine path, validatable only by that Core. Stored in that Core's SQLite, never on the Panel.
Task vs Session. A Task is a unit of harness work inside a Project — one run of a Harness against the project's files. It owns its session, terminal, and lifecycle. A Session is the live or replayable conversation backing that Task: the PTY stream plus the harness's own session id. Code, types, database columns, and core-link messages say Task. The Panel UI labels a Task as "Session" ("Start a new session", the grid cells). That is a UI convention, not a second kind of work.
core-link. The persistent bidirectional WebSocket the Panel (or any Core client) dials to a Core. Authenticated with mutual TLS plus a bearer. Carries PTY streams, mutations, hook events, and notifications as framed JSON. Default Core port is 8443.
panel-link. The single multiplexed WebSocket between a browser tab (a Panel session) and the Panel. Carries coreId-tagged frames — PTY streams, events, mutations, dial statuses — for all Cores at once. The browser never holds a core-link.