@sma1lboy/kobe 0.8.192 → 0.8.194
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +131 -131
- package/dist/cli/kobe-run.js +131 -131
- package/dist/cli/rove-run.js +131 -131
- package/dist/skills/rove/SKILL.md +27 -6
- package/dist/skills/rove/references/api-flags.md +223 -0
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ name: rove
|
|
|
3
3
|
description: Use when controlling Rove tasks, parallel coding attempts, hosted agent sessions, task lifecycle, or the daemon-owned issue tracker from a shell. Also the ONLY channel for messaging another agent session on this machine — `rove api send`, never a peer/MCP side channel.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- rove-skill-version:
|
|
6
|
+
<!-- rove-skill-version: 33 — bump in lockstep with KOBE_SKILL_VERSION (src/lib/skill-install.ts). -->
|
|
7
7
|
|
|
8
8
|
# Rove shell control
|
|
9
9
|
|
|
@@ -208,15 +208,35 @@ build artifacts, nothing a lockfile promises. Two consequences:
|
|
|
208
208
|
|
|
209
209
|
## Discover before calling
|
|
210
210
|
|
|
211
|
+
Do not guess flags — but do not pay a round-trip for the ones you use every
|
|
212
|
+
turn either. These five carry almost all traffic:
|
|
213
|
+
|
|
214
|
+
```text
|
|
215
|
+
add --repo(REQ) --prompt --title --command --count --agents --activate
|
|
216
|
+
send --prompt(REQ) --task-id --tab --command --plain
|
|
217
|
+
get-task --task-id(REQ) list (no flags)
|
|
218
|
+
collect --task-ids <csv> | --repo
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Four names that have actually been guessed wrong here: `add --vendor` is
|
|
222
|
+
`--command`; `read-output --task` is `--task-id`; `dispatch --text` is
|
|
223
|
+
`--prompt` (`--text` belongs to `note`); `issue-list` has no `--state` at all
|
|
224
|
+
— filter its JSON yourself.
|
|
225
|
+
|
|
226
|
+
**[`references/api-flags.md`](references/api-flags.md) is every verb and flag**,
|
|
227
|
+
including the groups this file leaves out on purpose: `routine-*` (scheduled
|
|
228
|
+
prompts), `workitem-*` (GitHub issues via `gh`), `note`/`note-list` (the repo's
|
|
229
|
+
durable field-note store), `read-output`/`digest`/`agent-turns`/`pty-list`, and
|
|
230
|
+
the error-code table. Read it when you need a verb that is not above; reach for
|
|
231
|
+
`schema` when the binary and that file disagree.
|
|
232
|
+
|
|
211
233
|
```bash
|
|
212
|
-
rove api schema
|
|
213
|
-
rove api schema --verb add
|
|
214
|
-
rove api schema --group create
|
|
234
|
+
rove api schema --verb add # or --group create, --all
|
|
215
235
|
rove api <verb> --help
|
|
216
236
|
rove api engine-list # what you can launch, and with what command
|
|
217
237
|
```
|
|
218
238
|
|
|
219
|
-
|
|
239
|
+
Commands emit one JSON object; errors use
|
|
220
240
|
`{"error":{"message","code",...}}` on stderr. Common rejections also carry
|
|
221
241
|
`hint` (what to do) and `nextCommandArgs` (argv for the same `Rove`
|
|
222
242
|
executable — run `rove <args...>` verbatim to recover, e.g. `["api","list"]`
|
|
@@ -267,7 +287,8 @@ auto-start the canonical engine in the task's worktree (`started: true` in
|
|
|
267
287
|
the result marks that fresh session). If live tabs exist but none resolves
|
|
268
288
|
as an engine, it refuses with `NO_ENGINE_TAB` — address one with `--tab
|
|
269
289
|
tab-N` or spawn one with `--tab new`; it never silently spawns a duplicate
|
|
270
|
-
engine.
|
|
290
|
+
engine. Its `hint` names `pty-list` — the live-PTY read (key, alive, pid,
|
|
291
|
+
command); use it when `.tabs[]` and reality disagree.
|
|
271
292
|
|
|
272
293
|
## Terminal panes
|
|
273
294
|
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# `rove api` flag reference
|
|
2
|
+
|
|
3
|
+
Every verb and flag, so you don't pay a `schema` round-trip to look one up.
|
|
4
|
+
SKILL.md covers the verbs you need for routing and lifecycle; this file is the
|
|
5
|
+
full surface, including the groups SKILL.md deliberately leaves out
|
|
6
|
+
(routines, GitHub work items, telemetry reads, field notes).
|
|
7
|
+
|
|
8
|
+
Authoritative source is still the binary — `rove api schema --verb <name>` or
|
|
9
|
+
`rove api <verb> --help`. Read that when this file and a rejection disagree;
|
|
10
|
+
the CLI is what ships.
|
|
11
|
+
|
|
12
|
+
Global: `--pretty` (readable JSON), `--help` (usage, exit).
|
|
13
|
+
Every `--repo` resolves relative paths against `$PWD` and wants the git toplevel.
|
|
14
|
+
|
|
15
|
+
## The hot path
|
|
16
|
+
|
|
17
|
+
These five carry almost all traffic. Nothing here should ever need `schema`.
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
add --repo(REQ) --prompt --title --command --count --agents
|
|
21
|
+
--branch --base-branch --status --pin --activate
|
|
22
|
+
send --prompt(REQ) --task-id --tab --command --plain
|
|
23
|
+
get-task --task-id(REQ)
|
|
24
|
+
list (no flags)
|
|
25
|
+
collect --task-ids <csv> | --repo
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Four flag names that have actually been guessed wrong here, and what they are:
|
|
29
|
+
|
|
30
|
+
| Guessed | Real |
|
|
31
|
+
|---|---|
|
|
32
|
+
| `add --vendor` | `add --command` (engine id or full command line) |
|
|
33
|
+
| `read-output --task` | `read-output --task-id` |
|
|
34
|
+
| `dispatch --text` | `dispatch --prompt` (`--text` belongs to `note`) |
|
|
35
|
+
| `issue-list --state` | none — `issue-list` takes only `--repo`; filter the JSON yourself |
|
|
36
|
+
|
|
37
|
+
`--count`/`--agents` require `--prompt`. `--branch` is single-task only.
|
|
38
|
+
`--tab new` is the only placement that accepts `send --command`.
|
|
39
|
+
|
|
40
|
+
## Retired — these no longer exist
|
|
41
|
+
|
|
42
|
+
| Gone | Now |
|
|
43
|
+
|---|---|
|
|
44
|
+
| `fan-out` | `add --count N` / `add --agents claude:2,codex:1` |
|
|
45
|
+
| `task-list` | `list` |
|
|
46
|
+
| `send-tab` | `send --tab tab-N` |
|
|
47
|
+
| `$KOBE_TASK_ID` / `$KOBE_TAB_ID` | `$ROVE_TASK_ID` / `$ROVE_TAB_ID` |
|
|
48
|
+
|
|
49
|
+
Seeing one of these in guidance means that guidance predates the rename —
|
|
50
|
+
`rove api schema` is the tiebreak.
|
|
51
|
+
|
|
52
|
+
## read
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
list (none) every task, archived included
|
|
56
|
+
get-task --task-id(REQ) one task + .tabs[] — the read before `send --tab`
|
|
57
|
+
collect --task-ids <csv> --repo comparison snapshot across tasks
|
|
58
|
+
inspect --task-id daemon activity + pty walk + tab snapshots
|
|
59
|
+
pty-list (none) live hosted PTYs: key, alive, pid, command, OSC title
|
|
60
|
+
read-output --task-id --tab --source[auto|history|terminal] --cursor --limit
|
|
61
|
+
digest --repo(REQ) --since-days(7)
|
|
62
|
+
agent-turns --task-id --repo --since-days(7) --limit(200)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
`pty-list` is what `NO_ENGINE_TAB`'s hint points at: when `.tabs[]` and reality
|
|
66
|
+
disagree, it is the ground truth for what is actually alive.
|
|
67
|
+
|
|
68
|
+
`read-output --limit` maxes at 50 (default 40). `--tab` is terminal-only —
|
|
69
|
+
it cannot combine with `--source history`. The cursor is pinned to one
|
|
70
|
+
source/session/tab; a moved target returns `SOURCE_CHANGED` rather than
|
|
71
|
+
silently paging something else.
|
|
72
|
+
|
|
73
|
+
`digest` and `agent-turns` are the measurement reads — `digest` aggregates a
|
|
74
|
+
repo's recent task + routine activity, `agent-turns` is per-turn telemetry
|
|
75
|
+
(vendor, model, timings, tokens). Reach for them when a workflow question
|
|
76
|
+
needs numbers, not when you want to know what a task is doing.
|
|
77
|
+
|
|
78
|
+
## drive
|
|
79
|
+
|
|
80
|
+
```text
|
|
81
|
+
send --prompt(REQ) --task-id --tab --command --plain
|
|
82
|
+
dispatch --task-id(REQ) --prompt(REQ) --tab
|
|
83
|
+
note --task-id(REQ) --text(REQ)
|
|
84
|
+
note-list --repo(REQ)
|
|
85
|
+
pane-open --command --task-id --tab --direction[right|down] --placement[split|tab] --title
|
|
86
|
+
pane-close --title(REQ) --task-id --tab
|
|
87
|
+
notify --title(REQ) --kind --task-id --source
|
|
88
|
+
prompt --title(REQ) --placeholder --initial --timeout
|
|
89
|
+
set-active --task-id | --none
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**`note` is the repo's durable field-note store.** One line, a verified
|
|
93
|
+
conclusion another session could act on — it is appended to the repo's notes
|
|
94
|
+
(every future session on this repo starts with them) AND relayed to the
|
|
95
|
+
dispatcher. Read them back with `note-list --repo`. This is the right home for
|
|
96
|
+
a resolved gotcha; an issue is for work that still needs doing.
|
|
97
|
+
|
|
98
|
+
`notify --kind` styles the toast: `done`, `needs_input`, `error` get severity
|
|
99
|
+
treatment and an unread mark, anything else renders neutrally.
|
|
100
|
+
|
|
101
|
+
`prompt` blocks on a human answering the attached TUI's input dialog —
|
|
102
|
+
`--timeout` defaults to 120000ms, caps at 600000. Returns `{ value }` or
|
|
103
|
+
`{ cancelled, reason }`. No attached TUI means no answer.
|
|
104
|
+
|
|
105
|
+
`pane-open --command` runs through the login shell's `-ilc`, so pipes and
|
|
106
|
+
your rc's PATH work.
|
|
107
|
+
|
|
108
|
+
## create / edit / lifecycle
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
add --repo(REQ) + the hot-path flags above
|
|
112
|
+
rename --task-id(REQ) --title(REQ)
|
|
113
|
+
set-branch --task-id(REQ) --branch(REQ)
|
|
114
|
+
set-command --task-id(REQ) --command(REQ) next launch only
|
|
115
|
+
set-status --task-id(REQ) --status(REQ)[backlog|in_progress|in_review|done|canceled|error]
|
|
116
|
+
archive --task-id(REQ) --archived(true)
|
|
117
|
+
pin --task-id(REQ) --pinned(true)
|
|
118
|
+
land --task-id(REQ) --strategy[merge|squash] --delete-branch --then-archive --remove-worktree
|
|
119
|
+
delete --task-id(REQ) --force --delete-branch
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Task `--status` and issue `--status` are DIFFERENT enums — a task is
|
|
123
|
+
`backlog|in_progress|in_review|done|canceled|error`, an issue is
|
|
124
|
+
`open|doing|hold|done`.
|
|
125
|
+
|
|
126
|
+
`land` refuses a dirty base checkout and refuses a branch with zero commits
|
|
127
|
+
ahead (`EMPTY_BRANCH`; `EMPTY_BRANCH_DIRTY_WORKTREE` when the worktree still
|
|
128
|
+
holds the uncommitted work, with a send-back recovery path). Conflict aborts
|
|
129
|
+
cleanly and returns the conflicted files.
|
|
130
|
+
|
|
131
|
+
## worktree
|
|
132
|
+
|
|
133
|
+
```text
|
|
134
|
+
ensure-worktree --task-id(REQ)
|
|
135
|
+
discover-adoptable --repo(REQ)
|
|
136
|
+
adopt --repo(REQ) --worktree(REQ) --branch --title --command
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## issues (daemon-owned)
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
issue-list --repo(REQ)
|
|
143
|
+
issue-create --repo(REQ) --title(REQ) --body
|
|
144
|
+
issue-update --repo(REQ) --id(REQ,int) --title --body --task
|
|
145
|
+
issue-set-status --repo(REQ) --id(REQ,int) --status(REQ)[open|doing|hold|done]
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
`--id` is an int, not the ULID a task uses. `issue-update --task <taskId>` is
|
|
149
|
+
the kanban "move to In progress"; `--task none` unlinks. Kanban semantics are
|
|
150
|
+
in SKILL.md — do not move cards with `issue-set-status doing`.
|
|
151
|
+
|
|
152
|
+
## workitems (GitHub, through `gh`)
|
|
153
|
+
|
|
154
|
+
Read-only against the repo's real GitHub issues; nothing is copied into Rove's
|
|
155
|
+
own store. These are the INBOUND user reports; Rove issues are the backlog.
|
|
156
|
+
|
|
157
|
+
```text
|
|
158
|
+
workitem-list --repo(REQ) --state[open|closed|all] --limit(20,max 50) --search --assignee --label
|
|
159
|
+
workitem-start --repo(REQ) --number(REQ,int) --vendor --base-branch
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
`workitem-start` creates a worktree + engine whose first message carries the
|
|
163
|
+
issue title, body, and URL, and keeps a link back to the issue. Note it takes
|
|
164
|
+
`--vendor` (an engine enum), not `--command` — the one place the older
|
|
165
|
+
vocabulary survives.
|
|
166
|
+
|
|
167
|
+
## routines (scheduled prompts)
|
|
168
|
+
|
|
169
|
+
Each firing creates a FRESH task — worktree, engine, delivered prompt. An
|
|
170
|
+
enabled routine holds the daemon alive so it fires with no TUI attached.
|
|
171
|
+
|
|
172
|
+
```text
|
|
173
|
+
routine-list (none)
|
|
174
|
+
routine-create --repo(REQ) --name(REQ) --prompt(REQ) --schedule(REQ)
|
|
175
|
+
--vendor --base-branch --precheck --precheck-timeout(120) --grace(60) --disabled
|
|
176
|
+
routine-update --id(REQ) --name --prompt --schedule --vendor --base-branch --precheck --precheck-timeout --grace
|
|
177
|
+
routine-set-enabled --id(REQ) --enabled(REQ,bool)
|
|
178
|
+
routine-delete --id(REQ)
|
|
179
|
+
routine-run-now --id(REQ)
|
|
180
|
+
routine-runs --id(REQ)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
`--schedule` is five-field cron in the DAEMON HOST's local time
|
|
184
|
+
(`'0 9 * * MON-FRI'`). `--precheck` is a shell command run in the repo before
|
|
185
|
+
the engine starts — non-zero exit skips the run without spawning an agent,
|
|
186
|
+
which is the cheap way to not burn a turn on "nothing to do". `--grace` is how
|
|
187
|
+
late a missed occurrence may still run after the daemon was down; only the
|
|
188
|
+
most recent missed occurrence ever runs.
|
|
189
|
+
|
|
190
|
+
`routine-update --schedule` re-anchors the next run. `--precheck ''` clears it.
|
|
191
|
+
`routine-run-now` skips the precheck deliberately (asking for it IS the answer)
|
|
192
|
+
and does not shift the schedule. `routine-delete` leaves already-created tasks
|
|
193
|
+
alone.
|
|
194
|
+
|
|
195
|
+
Run statuses from `routine-runs`: `dispatched`, `skipped_precheck` (nothing to
|
|
196
|
+
do), `skipped_missed`, `skipped_unavailable`, `dispatch_failed`.
|
|
197
|
+
|
|
198
|
+
## discover / feedback
|
|
199
|
+
|
|
200
|
+
```text
|
|
201
|
+
schema --verb <name> | --group <g> | --all (bare = compact index)
|
|
202
|
+
engine-list (none) ids + RAW launch command + protocol
|
|
203
|
+
feedback --title(REQ) --body(REQ) --category(feedback)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
`feedback` opens a GitHub Discussion in the Rove repo through `gh` — Rove's own
|
|
207
|
+
product feedback channel, not a way to file work for another project (that is
|
|
208
|
+
a `send` to their main task; see SKILL.md).
|
|
209
|
+
|
|
210
|
+
## Error codes
|
|
211
|
+
|
|
212
|
+
Errors go to stderr as `{"error":{"message","code",...}}`. Most carry `hint`
|
|
213
|
+
(what to do) and `nextCommandArgs` (argv for the same executable — run
|
|
214
|
+
`rove <args...>` verbatim).
|
|
215
|
+
|
|
216
|
+
| Code | Means | Recover |
|
|
217
|
+
|---|---|---|
|
|
218
|
+
| `BAD_FLAG` | flag not on that verb | check the table above, then `schema --verb <v>` |
|
|
219
|
+
| `TASK_NOT_FOUND` | id deleted or mistyped | `rove api list` |
|
|
220
|
+
| `NO_ENGINE_TAB` | live tabs exist, none is an engine | `--tab tab-N` from `pty-list`, or `--tab new` |
|
|
221
|
+
| `DISPATCHER_UNREACHABLE` | bare `send` reply, dispatcher gone | nothing alive to reply to — never silently spawns |
|
|
222
|
+
| `SOURCE_CHANGED` | `read-output` cursor's target moved | re-read without the cursor |
|
|
223
|
+
| `EMPTY_BRANCH` | `land` on zero commits ahead | the worker committed nothing |
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@sma1lboy/kobe",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.194",
|
|
5
5
|
"description": "Rove — the agent multiplexer for your terminal. Run coding agents on parallel tasks with isolated worktrees and persistent sessions.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"packageManager": "bun@1.3.13",
|