---
title: "Commands"
url: "https://control.actana.ai/docs/cli/commands"
description: "The client commands: core, project, harness, events, and session, with their flags and exit-code contracts."
updated: 2026-09-01T09:03:17+00:00
---

The client commands talk to a Core this machine can reach — the one on this box, or one you paired. They work the same on metal, in the Core image, and on a laptop that has no Core of its own.

Which Core a command means, in this order: `--core <name>`, then the `current` pointer (`actana core use`), which 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.

## core

```bash
actana core pair NAME core.example:8443 ABCD-2345 --session <id> --fingerprint AA:BB:…
actana core ls --json
actana core use laptop
actana core status
actana core shell
actana core exec -- df -h /
actana core exec --cwd /srv/app -- git pull
```

`core pair` is the enrollment gesture — usually pasted straight from the handout `actana pair new` prints on the Core, `NAME` swapped for what this machine should call it. The CA fingerprint is checked **before** the code is sent, and there is no `actana core add`. Full reference: [Actana CLI Pairing](/docs/pairing/cli-pairing).

`core exec` is the non-interactive half of `core shell`. It returns the command's real exit code, keeps stdout and stderr apart, and takes `--cwd` on the *Core's* machine. A dropped link mid-command exits **125** and says the command's fate is unknown — never `0`, and never the command's own status.

## project

```bash
actana project ls
actana project add api /srv/work/api
actana project files api
actana project cp ./dist api:build
actana project cp api:build ./dist
```

`add` takes an absolute path on the Core, sent as typed. `cp` is the scp shape: one side is `<project>:<path>`, the other is local. A folder crosses as one archive and keeps permissions.

## harness

```bash
actana harness ls
actana harness install opencode
actana harness skills
```

`ls` and `install` ask a Core. `skills` writes files on *this* machine and dials nothing. See [Skills](/docs/cli/skills).

## events

```bash
actana events tail
actana events tail --json --kind session:finished
```

Follows that Core's event log. A first run with no cursor starts at the end, like `tail -f`.

## session

```bash
actana session start api "fix CI"
actana session ls
actana session logs <id>
actana session resume <id> "continue"
actana session attach <id>
actana session send <id> "yes" --enter
actana session kill <id>
```

`start` prints the session id and exits; the Harness keeps running on the Core. `attach` is the one verb that is a terminal. `kill`, `send`, and `logs` work on any session on that Core, including ones the Panel started.

## See also

- [The actana CLI](/docs/cli)
- [Operating a Core](/docs/core/operating)
- [Pair a Core](/docs/pairing)
- [Sessions](/docs/panel/sessions)
