# Commands

A path is `owner/name`, or just `name` for your own. Add `--json` to any
command for structured output.

## Anywhere

```
otisk whoami                              show the authenticated account
otisk status                              what the host is running
otisk version                             what this client is
otisk help                                the host's own list of commands

otisk repo list                           repositories you can read
otisk repo show <path>                    details of one repository
otisk repo create <path> [--public]       create one (private by default)
otisk repo rename <path> <new-name>       rename, keeping its identity and data
otisk repo transfer <path> <new-owner>    move it to another account
otisk repo visibility <path> <public|private>
otisk repo delete <path> --yes            delete it and release its data

otisk key list                            your registered SSH keys
otisk key add [<key>]                     register a key, or read one from stdin
otisk key remove <fingerprint>            revoke a key

otisk clone <path> [directory]            clone by owner/name
otisk host [set <host>]                   show or set the configured host
otisk ui [--repo <path>] [--all]          review in a terminal interface
```

## Inside a clone

For changes under review. The repository and remote come from the git remote
pointing at the configured host; `--repo` and `--remote` override them.

```
otisk change hook                         add a Change-Id to new commits
otisk change push [--branch <branch>]     push HEAD for review
otisk change list [--all]                 open changes, or every change
otisk change show <number>                a change, its revisions, and what each touches
otisk change diff <number> [<a> <b>]      range-diff two revisions (latest two by default)
otisk change checkout <number>            check out the latest revision, to amend it
otisk change land <number> [--revision=<n>]
                                          fast-forward the branch to the latest revision
otisk change abandon <number>             close a change without landing it

otisk change comments <number> [--all]    comment threads: open ones, or every one
otisk change comment <number> [--file <path> --line <n>] [--revision <n>] [-m <text>]
                                          start a thread; the text may also be piped in
otisk change reply <number> <thread> [-m <text>]
otisk change resolve <number> <thread>    mark a thread dealt with
otisk change reopen <number> <thread>
```

## Without the client

Every command is an ssh exec request you can type by hand, and pushing for
review is plain git:

```sh
ssh git@git.otisk.dev otisk repo list
ssh git@git.otisk.dev otisk change list yuritomanek/notes
git push origin HEAD:refs/for/main
```

`otisk help`, run against a host, prints that host's own list — which is the
one that cannot be out of date. A test compares it against this page, so if
they ever disagree, a build fails rather than a reader.
