---
title: "Concepts"
url: "https://control.actana.ai/docs/introduction/concepts"
description: "The vocabulary of the fleet: Panel, Core, Harness, Operator, Project, Task vs Session, core-link, and panel-link."
updated: 2026-09-01T09:02:47+00:00
---

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.

## See also

- [How it works](/docs/introduction/how-it-works)
- [Security and privacy](/docs/introduction/security-and-privacy)
- [Pair a Core](/docs/pairing)
- [Introduction](/docs/introduction)
