# @acsetra/runner

The Runner CLI for Node — author and run **hosted Runner apps** from your
terminal. A thin, dependency-free client (Node 18+, uses global `fetch`) that
mirrors the Python `acsetra` package: every authoring command serializes to
`{op, args}` and is POSTed to the hosted API, where all validation runs
server-side. Same grammar, same token, interchangeable with the Python CLI.

## Use

```bash
npx -y @acsetra/runner signin
npx -y @acsetra/runner whoami
# or install globally:
npm install -g @acsetra/runner
runner app create crm --label "CRM"
runner set put crm contacts ada --json '{"role":"eng"}'
runner doctor <workspace>.crm && runner compile <workspace>.crm
runner auth crm                  # gate the app behind home.acsetra.com sign-in
runner dev <workspace>.crm
runner open <workspace>.crm      # reuse/create its paired Chrome tab
runner notify <workspace>.crm --title Ready
runner tabs
```

Exposes `runner` and `acsetra` binaries. The token is cached at
`~/.config/acsetra/credentials` (0600) — shared with the Python client, so you
can use either interchangeably.

`runner docs pull` refreshes concise Claude Code doctrine. Use
`runner <group> <subverb> --help` for the exact installed command grammar.

## Environment overrides

`ACSETRA_API_BASE`, `ACSETRA_TOKEN`, `ACSETRA_WORKSPACE`, `ACSETRA_SCOPE`.

Run `runner help` for the full verb list.
