detached fd07554

docs: document issues

commit
fd075549761c3da4c66f6060d23632b8122086d6
author
brice · · 2026-10-19 05:54 UTC
parent
582cf61
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
5 files · +59 -2
M README.md +1 -0
@@ -130,6 +130,7 @@ Give the agent the [`skills/ermite`](skills/ermite/SKILL.md) skill so it knows t
130130 - [Git over HTTP](docs/git-http.md): URLs and authentication
131131 - [Tokens](docs/tokens.md): scopes, presets, branch-limited tokens
132132 - [Merge requests](docs/merge-requests.md)
133+- [Issues](docs/issues.md)
133134 - [Commit signatures](docs/commit-signatures.md): SSH and OpenPGP badges, trusted keys
134135 - [Web sign-in](docs/web-sign-in.md): passkeys and one-time links
135136 - [CI](docs/ci.md): runners, trust, concurrency, reusable workflows
@@ -130,6 +130,7 @@ Give the agent the [`skills/ermite`](skills/ermite/SKILL.md) skill so it knows t
130 - [Git over HTTP](docs/git-http.md): URLs and authentication130 - [Git over HTTP](docs/git-http.md): URLs and authentication
131 - [Tokens](docs/tokens.md): scopes, presets, branch-limited tokens131 - [Tokens](docs/tokens.md): scopes, presets, branch-limited tokens
132 - [Merge requests](docs/merge-requests.md)132 - [Merge requests](docs/merge-requests.md)
133+- [Issues](docs/issues.md)
133 - [Commit signatures](docs/commit-signatures.md): SSH and OpenPGP badges, trusted keys134 - [Commit signatures](docs/commit-signatures.md): SSH and OpenPGP badges, trusted keys
134 - [Web sign-in](docs/web-sign-in.md): passkeys and one-time links135 - [Web sign-in](docs/web-sign-in.md): passkeys and one-time links
135 - [CI](docs/ci.md): runners, trust, concurrency, reusable workflows136 - [CI](docs/ci.md): runners, trust, concurrency, reusable workflows
M docs/cli.md +6 -1
@@ -48,7 +48,7 @@ It does not run:
4848
4949 ```sh
5050 ermite repo list | show <name> | create <name> [--description …] [--visibility public]
51-ermite repo edit <name> [--description …] [--visibility …] [--default-branch …] [--merge-modes …] [--failing-checks-block=false]
51+ermite repo edit <name> [--description …] [--visibility …] [--default-branch …] [--merge-modes …] [--failing-checks-block=false] [--issues off|owner|public]
5252 ermite repo delete <name> [--yes]
5353
5454 ermite token create <label> [--preset cli|agent|ci|runner] [--scope …] [--repo …] [--branch-prefix …] [--expires 30d]
@@ -58,6 +58,9 @@ ermite mr create <repo> --source <branch> --title … | list <repo> | show <repo
5858 ermite mr comment <repo> <n> -m … [--path … --line … --side old|new] | resolve <repo> <n> <comment>
5959 ermite mr merge <repo> <n> --head <id> [--squash] [--delete-branch] | close <repo> <n>
6060
61+ermite issue create <repo> --title … [--body … | --body-file …] | list <repo> [--state open|closed|all]
62+ermite issue show <repo> <n> | comment <repo> <n> -m … | close <repo> <n> | reopen <repo> <n>
63+
6164 ermite run list <repo> [--workflow …] [--branch …] [--status …]
6265 ermite run view <repo> <id> [--attempt n] [--log [--job …]] [--summary]
6366 ermite run watch <repo> <id> [--log] | cancel <repo> <id> | rerun <repo> <id> [--failed]
@@ -81,6 +84,8 @@ ermite version # client and server versions
8184 ermite completion bash|zsh|fish
8285 ```
8386
87+Issues need a server with the `issues` feature and `ermite repo edit <repo> --issues owner`; they are written with the `issue:write` scope. See [Issues](issues.md).
88+
8489 ## Output
8590
8691 - `--json` prints stable field names (listed in each `--help`) on `repo list|show|create|edit`, `token create|list`, `run list|view|cancel|rerun`, `runner list` and `version`.
@@ -48,7 +48,7 @@ It does not run:
48 48
49 ```sh49 ```sh
50 ermite repo list | show <name> | create <name> [--description …] [--visibility public]50 ermite repo list | show <name> | create <name> [--description …] [--visibility public]
51-ermite repo edit <name> [--description …] [--visibility …] [--default-branch …] [--merge-modes …] [--failing-checks-block=false]51+ermite repo edit <name> [--description …] [--visibility …] [--default-branch …] [--merge-modes …] [--failing-checks-block=false] [--issues off|owner|public]
52 ermite repo delete <name> [--yes]52 ermite repo delete <name> [--yes]
53 53
54 ermite token create <label> [--preset cli|agent|ci|runner] [--scope …] [--repo …] [--branch-prefix …] [--expires 30d]54 ermite token create <label> [--preset cli|agent|ci|runner] [--scope …] [--repo …] [--branch-prefix …] [--expires 30d]
@@ -58,6 +58,9 @@ ermite mr create <repo> --source <branch> --title … | list <repo> | show <repo
58 ermite mr comment <repo> <n> -m … [--path … --line … --side old|new] | resolve <repo> <n> <comment>58 ermite mr comment <repo> <n> -m … [--path … --line … --side old|new] | resolve <repo> <n> <comment>
59 ermite mr merge <repo> <n> --head <id> [--squash] [--delete-branch] | close <repo> <n>59 ermite mr merge <repo> <n> --head <id> [--squash] [--delete-branch] | close <repo> <n>
60 60
61+ermite issue create <repo> --title … [--body … | --body-file …] | list <repo> [--state open|closed|all]
62+ermite issue show <repo> <n> | comment <repo> <n> -m … | close <repo> <n> | reopen <repo> <n>
63+
61 ermite run list <repo> [--workflow …] [--branch …] [--status …]64 ermite run list <repo> [--workflow …] [--branch …] [--status …]
62 ermite run view <repo> <id> [--attempt n] [--log [--job …]] [--summary]65 ermite run view <repo> <id> [--attempt n] [--log [--job …]] [--summary]
63 ermite run watch <repo> <id> [--log] | cancel <repo> <id> | rerun <repo> <id> [--failed]66 ermite run watch <repo> <id> [--log] | cancel <repo> <id> | rerun <repo> <id> [--failed]
@@ -81,6 +84,8 @@ ermite version # client and server versions
81 ermite completion bash|zsh|fish84 ermite completion bash|zsh|fish
82 ```85 ```
83 86
87+Issues need a server with the `issues` feature and `ermite repo edit <repo> --issues owner`; they are written with the `issue:write` scope. See [Issues](issues.md).
88+
84 ## Output89 ## Output
85 90
86 - `--json` prints stable field names (listed in each `--help`) on `repo list|show|create|edit`, `token create|list`, `run list|view|cancel|rerun`, `runner list` and `version`.91 - `--json` prints stable field names (listed in each `--help`) on `repo list|show|create|edit`, `token create|list`, `run list|view|cancel|rerun`, `runner list` and `version`.
A docs/issues.md +35 -0
@@ -0,0 +1,35 @@
1+# Issues
2+
3+An issue records a task, a bug or a question about a repository: a title, a body, comments, and an open or closed state. Issues share the numbering of merge requests: after merge request 1, the next issue is number 2.
4+
5+```sh
6+ermite repo edit myrepo --issues owner
7+ermite issue create myrepo --title "Crash on start" --body "It crashes."
8+ermite issue list myrepo [--state open|closed|all]
9+ermite issue show myrepo 2
10+ermite issue comment myrepo 2 -m "Reproduced."
11+ermite issue close myrepo 2
12+ermite issue reopen myrepo 2
13+```
14+
15+All commands take `--json`. `--body -` and `--body-file -` read standard input. A server needs the `issues` feature (`ermite version`); without it the commands, `repo edit --issues` and `token create --scope issue:write` are refused.
16+
17+## The `issues` setting
18+
19+`ermite repo edit <repo> --issues off|owner|public`, shown by `repo show` (JSON field `issues`):
20+
21+- `off` (default): issues are disabled.
22+- `owner`: the owner and tokens with `issue:write` write issues.
23+- `public`: the anonymous moderated form; not available yet, the server refuses it.
24+
25+## Who can write
26+
27+The owner, and tokens with the `issue:write` scope. For an agent that proposes changes on its own branches and reports issues:
28+
29+```sh
30+ermite token create claude --preset agent --scope issue:write --repo <repo> --branch-prefix agent/<name>/
31+```
32+
33+## Numbering
34+
35+Merge requests and issues of a repository draw `#n` from one sequence, so a number names one thing: `ermite mr show myrepo 1`, `ermite issue show myrepo 2`.
@@ -0,0 +1,35 @@
1+# Issues
2+
3+An issue records a task, a bug or a question about a repository: a title, a body, comments, and an open or closed state. Issues share the numbering of merge requests: after merge request 1, the next issue is number 2.
4+
5+```sh
6+ermite repo edit myrepo --issues owner
7+ermite issue create myrepo --title "Crash on start" --body "It crashes."
8+ermite issue list myrepo [--state open|closed|all]
9+ermite issue show myrepo 2
10+ermite issue comment myrepo 2 -m "Reproduced."
11+ermite issue close myrepo 2
12+ermite issue reopen myrepo 2
13+```
14+
15+All commands take `--json`. `--body -` and `--body-file -` read standard input. A server needs the `issues` feature (`ermite version`); without it the commands, `repo edit --issues` and `token create --scope issue:write` are refused.
16+
17+## The `issues` setting
18+
19+`ermite repo edit <repo> --issues off|owner|public`, shown by `repo show` (JSON field `issues`):
20+
21+- `off` (default): issues are disabled.
22+- `owner`: the owner and tokens with `issue:write` write issues.
23+- `public`: the anonymous moderated form; not available yet, the server refuses it.
24+
25+## Who can write
26+
27+The owner, and tokens with the `issue:write` scope. For an agent that proposes changes on its own branches and reports issues:
28+
29+```sh
30+ermite token create claude --preset agent --scope issue:write --repo <repo> --branch-prefix agent/<name>/
31+```
32+
33+## Numbering
34+
35+Merge requests and issues of a repository draw `#n` from one sequence, so a number names one thing: `ermite mr show myrepo 1`, `ermite issue show myrepo 2`.
M docs/tokens.md +2 -1
@@ -6,7 +6,7 @@ ermite token list
66 ermite token revoke <id>
77 ```
88
9-The secret is printed once. Presets and `--scope` add up. The full scope list is in [`skills/ermite/CLI.md`](../skills/ermite/CLI.md).
9+The secret is printed once. Presets and `--scope` add up (`issue:write` lets a token write issues). The full scope list is in [`skills/ermite/CLI.md`](../skills/ermite/CLI.md).
1010
1111 | Preset | For |
1212 |---|---|
@@ -29,6 +29,7 @@ The token **can**:
2929
3030 - push, force-push and delete branches under its prefixes;
3131 - open, comment on and close merge requests;
32+- with `issue:write`, open, comment on, close and reopen issues of the repositories where they are enabled;
3233 - with `mr:merge`, merge into a branch under its prefixes;
3334 - read CI runs, logs and checks; with `ci:write`, cancel and re-run runs of its own branches;
3435 - create tokens whose prefixes lie within its own.
@@ -6,7 +6,7 @@ ermite token list
6 ermite token revoke <id>6 ermite token revoke <id>
7 ```7 ```
8 8
9-The secret is printed once. Presets and `--scope` add up. The full scope list is in [`skills/ermite/CLI.md`](../skills/ermite/CLI.md).9+The secret is printed once. Presets and `--scope` add up (`issue:write` lets a token write issues). The full scope list is in [`skills/ermite/CLI.md`](../skills/ermite/CLI.md).
10 10
11 | Preset | For |11 | Preset | For |
12 |---|---|12 |---|---|
@@ -29,6 +29,7 @@ The token **can**:
29 29
30 - push, force-push and delete branches under its prefixes;30 - push, force-push and delete branches under its prefixes;
31 - open, comment on and close merge requests;31 - open, comment on and close merge requests;
32+- with `issue:write`, open, comment on, close and reopen issues of the repositories where they are enabled;
32 - with `mr:merge`, merge into a branch under its prefixes;33 - with `mr:merge`, merge into a branch under its prefixes;
33 - read CI runs, logs and checks; with `ci:write`, cancel and re-run runs of its own branches;34 - read CI runs, logs and checks; with `ci:write`, cancel and re-run runs of its own branches;
34 - create tokens whose prefixes lie within its own.35 - create tokens whose prefixes lie within its own.
M skills/ermite/CLI.md +15 -0
@@ -41,6 +41,7 @@ Scopes:
4141 | `repo:admin` | delete a repository, change visibility, description, default branch, merge settings |
4242 | `mr:write` | open, comment on, resolve, close, mark read |
4343 | `mr:merge` | merge, and delete the merged source branch with `--delete-branch` |
44+| `issue:write` | open, comment on, close and reopen issues |
4445 | `token:admin` | create, list and revoke tokens |
4546 | `ci:write`, `secrets:write`, `runner:register` | reserved for CI |
4647
@@ -62,6 +63,20 @@ A token can never grant more than the token that creates it. `--repo` (repeatabl
6263
6364 Merge request JSON: `repo`, `number`, `title`, `description`, `source_branch`, `target_branch`, `state`, `author` (token label), `created_at`, `updated_at`, `head_id`, `merged_commit_id`, `merge_mode`. `mr show --json` adds `commits`, `diff_base_id`, `stats`, `files` (with `hunks` under `--diff`: `kind`, `old_number`, `new_number`, `text`), `comments`, `last_read_id`, `last_read_lost`.
6465
66+## Issues
67+
68+Issues share the numbering of merge requests and must be enabled per repository: `repo edit <repo> --issues off|owner|public` (`repo:admin`; default `off`; `public` is not available yet). Reading and writing needs a server with the `issues` feature.
69+
70+| Command | Scope | Notes |
71+|---|---|---|
72+| `issue create <repo> --title T [--body TEXT\|-] [--body-file F\|-]` | `issue:write` | title of 120 characters max |
73+| `issue list <repo> [--state open\|closed\|all] [--json]` | read access or `issue:write` | default `open` |
74+| `issue show <repo> <n> [--json]` | read access or `issue:write` | issue and comments |
75+| `issue comment <repo> <n> -m TEXT\|-` | `issue:write` | |
76+| `issue close <repo> <n>` / `issue reopen <repo> <n>` | `issue:write` | |
77+
78+Issue JSON: `repo`, `number`, `title`, `body`, `state`, `author` (token label), `created_at`, `updated_at`, `comment_count`. `issue show --json` adds `comments` (`id`, `author`, `text`, `created_at`). `repo show --json` has `issues`.
79+
6580 ## Workflows
6681
6782 | Command | Scope | Notes |
@@ -41,6 +41,7 @@ Scopes:
41 | `repo:admin` | delete a repository, change visibility, description, default branch, merge settings |41 | `repo:admin` | delete a repository, change visibility, description, default branch, merge settings |
42 | `mr:write` | open, comment on, resolve, close, mark read |42 | `mr:write` | open, comment on, resolve, close, mark read |
43 | `mr:merge` | merge, and delete the merged source branch with `--delete-branch` |43 | `mr:merge` | merge, and delete the merged source branch with `--delete-branch` |
44+| `issue:write` | open, comment on, close and reopen issues |
44 | `token:admin` | create, list and revoke tokens |45 | `token:admin` | create, list and revoke tokens |
45 | `ci:write`, `secrets:write`, `runner:register` | reserved for CI |46 | `ci:write`, `secrets:write`, `runner:register` | reserved for CI |
46 47
@@ -62,6 +63,20 @@ A token can never grant more than the token that creates it. `--repo` (repeatabl
62 63
63 Merge request JSON: `repo`, `number`, `title`, `description`, `source_branch`, `target_branch`, `state`, `author` (token label), `created_at`, `updated_at`, `head_id`, `merged_commit_id`, `merge_mode`. `mr show --json` adds `commits`, `diff_base_id`, `stats`, `files` (with `hunks` under `--diff`: `kind`, `old_number`, `new_number`, `text`), `comments`, `last_read_id`, `last_read_lost`.64 Merge request JSON: `repo`, `number`, `title`, `description`, `source_branch`, `target_branch`, `state`, `author` (token label), `created_at`, `updated_at`, `head_id`, `merged_commit_id`, `merge_mode`. `mr show --json` adds `commits`, `diff_base_id`, `stats`, `files` (with `hunks` under `--diff`: `kind`, `old_number`, `new_number`, `text`), `comments`, `last_read_id`, `last_read_lost`.
64 65
66+## Issues
67+
68+Issues share the numbering of merge requests and must be enabled per repository: `repo edit <repo> --issues off|owner|public` (`repo:admin`; default `off`; `public` is not available yet). Reading and writing needs a server with the `issues` feature.
69+
70+| Command | Scope | Notes |
71+|---|---|---|
72+| `issue create <repo> --title T [--body TEXT\|-] [--body-file F\|-]` | `issue:write` | title of 120 characters max |
73+| `issue list <repo> [--state open\|closed\|all] [--json]` | read access or `issue:write` | default `open` |
74+| `issue show <repo> <n> [--json]` | read access or `issue:write` | issue and comments |
75+| `issue comment <repo> <n> -m TEXT\|-` | `issue:write` | |
76+| `issue close <repo> <n>` / `issue reopen <repo> <n>` | `issue:write` | |
77+
78+Issue JSON: `repo`, `number`, `title`, `body`, `state`, `author` (token label), `created_at`, `updated_at`, `comment_count`. `issue show --json` adds `comments` (`id`, `author`, `text`, `created_at`). `repo show --json` has `issues`.
79+
65 ## Workflows80 ## Workflows
66 81
67 | Command | Scope | Notes |82 | Command | Scope | Notes |

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 43

↑↓ moveenter openesc close