---
title: "The actana CLI"
url: "https://control.actana.ai/docs/cli"
description: "One binary for both ends: machine verbs that operate this machine's Core, client commands that drive any Core."
updated: 2026-09-01T09:03:16+00:00
---

`actana` is one program with one name. It installs and operates a Core on the machine you are typing on (**machine verbs**), and it talks to Cores near or far (**client commands**). There used to be two binaries under this name; since 0.4.1 there is one.

Install the published client anywhere Node 22 or newer is available:

```bash
npm install -g @actana/cli
actana --help
```

The same command is inside the Core tarball and the Core image. On a machine you turned into a Core with `actana setup`, `~/.local/bin/actana` is that binary, and that Core is registered with this machine's `actana` automatically — nothing to pair on the box that just installed itself.

```mermaid
flowchart TB
  A["actana on this machine"]
  A -->|"machine verbs"| L["Core on this machine"]
  A -->|"client commands"| R["Any registered Core"]
  L -.->|"also a client target"| R
```

Machine verbs own lifecycle — install, place, setup, status, pair, update, start/stop/restart/logs, harnesses, uninstall — and are documented where they are used: [Install](/docs/install) and [Operating a Core](/docs/core/operating). Client commands are the nouns `core`, `project`, `harness`, `events`, `session`.

## Conventions

- **Which Core a client command means**: `--core <name>`, else the `current` pointer from `actana core use`. A Core installed on this machine is pointed at automatically.
- **`--json`** is machine-readable output; every list command has it.
- **`--verbose`** explains steps on stderr and never prints a credential.
- **Terminal vs pipe**: some commands (the pairing pair, notably) draw framed, coloured output at a terminal and plain labelled lines down a pipe — same bytes as earlier releases, so scripts keep scraping. `isatty(stdout)` is the whole switch; `NO_COLOR` strips colour. Behaviour never differs by where output goes.
- **Exit codes** are meaningful: `0` ok, `1` failure, `2` usage; `actana core exec` exits `125` when the link dropped mid-command and the command's fate is unknown; `actana core pair` has a code per refusal class ([table](/docs/pairing/cli-pairing)).

## In this section

- [Commands](/docs/cli/commands) — the client nouns: `core`, `project`, `harness`, `events`, `session`.
- [Skills](/docs/cli/skills) — `actana-sessions` and `actana-subagent`, written into your Harnesses' skill directories.

## See also

- [Client CLI quickstart](/docs/get-started/client-cli)
- [Operating a Core](/docs/core/operating)
- [Actana CLI Pairing](/docs/pairing/cli-pairing)
