# The golo cli

> Every command of golo, the cli that ships in locosdk and acts on the app repo it runs in.

`golo` is the bin of `locosdk`. It acts on the app it runs in: the nearest folder at or above the current one that holds `data/app.db`, `schema.ts` or `loco.config.ts`. Run it as `bunx golo <command>`, or `golo <command>` when the app's `node_modules/.bin` is on your `PATH`. Every refusal exits 1 with the reason. `golo <command> --help` prints the flags of one command.

## Gate

| command | what |
|---|---|
| `golo gate` | typecheck, tests and lint of the app, in parallel. Short output, exit 1 on red. Fails too when `src/` or `schema.ts` changed since the last tag while `## Unreleased` is empty |

## Shots

| command | what |
|---|---|
| `golo shot [route] [--size phone\|desktop\|WxH] [--at <rev>] [--video <s>] [--wait <selector>\|idle\|<ms>] [--out <file>]` | a png, webp or clip of a route of the app, as it runs or at a past commit. The route has no leading slash. Prints the file, its size, the time and one `page:` line per page error |

Details: [Review cards and shots](https://golocomotive.fr/docs/developers/review.md#golo-shot).

## Review

Acting verbs take `--as <name>` (or the `LOCO_AGENT` variable), and `--note`, `--commit <sha>` where they record a step.

| command | what |
|---|---|
| `golo review add --title … --what … (--image f \| --video f \| --before a --after b)` | a card the client answers. Also `--view <label> <file>`, `--screen <route>`, `--viewport WxH`, `--state`, `--record <collection>/<id>`, `--topic`, `--commit`, `--supersedes <id>`, `--keeps`, `--answers <id>`, `--new --why`, `--draft` |
| `golo review add-view <id> <label> <files…>` | another angle of an open card: an image, a pair, or `--video` |
| `golo review ready <id> [--image f]` | a draft becomes a card the client answers |
| `golo review withdraw <id> --note` | take an unanswered card back |
| `golo review reopen <id>` | an answered card waits for a new answer |
| `golo review done <id> "<what changed>"` | an approved with fix card, made with no new card |
| `golo review inbox [--mine] [--card <id>] [--all]` | unseen verdicts and words of the client, and every open item the client raised |
| `golo review watch [--mine] [--card <id>]` | one line per verdict or word as it lands, all unseen ones at start. Never exits |
| `golo review show <id>` | one item and its whole thread |
| `golo review seen <ids…>` | mark items handled, signed with your name |
| `golo review reply <id> <text> [--image f]` | a message on the thread |
| `golo review board [--topic t] [--all]` | every open raised item by state, stale claims marked |
| `golo review topics` | the app's topics and the pages a worker reads first |
| `golo review dispatcher [--take]` | take the dispatcher role, one session at a time; `--take` after 30 minutes idle |
| `golo review dispatch <id> <topic>` | send a new item to a topic |
| `golo review reassign <id> [topic]` | take a claim back, or change the topic |
| `golo review drop <id> --note` | close a raised item, with the reason |
| `golo review next [topic]` | claim the oldest open item of a topic and show it |
| `golo review claim <id>` | hold an item before any edit |
| `golo review release <id>` | give a claim back |
| `golo review ask <id> "<question>"` | ask the client on the item; their reply answers it |
| `golo review blocked <id> --note` | back to the client, with what is needed |
| `golo review fixed <id> --note [--commit <sha>]` | closed as done; the note is what the client reads |
| `golo review wontfix <id> --note` | closed as not done |

## Releases

| command | what |
|---|---|
| `golo changelog [--since v<n>] [--json]` | print `CHANGELOG.md`: Unreleased, then the releases, newest first |
| `golo release` | cut `## Unreleased` into the next version, commit `release v<n>`, tag `v<n>`. Refuses an empty Unreleased, a dirty tree, and an app with `deploy: false` |

## Backups

| command | what |
|---|---|
| `golo backup create [name]` | a backup of the app's data into its backups store, the app running or not |
| `golo backup list [--json]` | the backups in the store the app last started with: key, size, modified |
| `golo backup restore <key>` | the data becomes that backup. Refuses while the app runs |

The cli runs no app code: no backup hook fires from it.

## Schema and superusers

| command | what |
|---|---|
| `golo schema import <data.db \| collections.json> [--out schema.ts] [--strict]` | a PocketBase app's schema as a `schema.ts`. `--strict` exits 1 on any unsupported item. See [Coming from PocketBase](https://golocomotive.fr/docs/developers/pocketbase.md#move-an-app) |
| `golo superuser upsert <email>` | create the app's superuser or set its password, read from stdin, in `data/app.db` of an app that booted once |
