@sma1lboy/kobe 0.8.47 → 0.8.52
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 +395 -388
- package/dist/skills/kobe/SKILL.md +143 -0
- package/package.json +2 -2
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kobe
|
|
3
|
+
description: Use when controlling kobe tasks, parallel coding attempts, hosted agent sessions, task lifecycle, or the daemon-owned issue tracker from a shell.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- kobe-skill-version: 6 — bump in lockstep with KOBE_SKILL_VERSION (src/lib/skill-install.ts). -->
|
|
7
|
+
|
|
8
|
+
# kobe shell control
|
|
9
|
+
|
|
10
|
+
Use `kobe api` to manage local coding tasks. Each Task owns a git Worktree,
|
|
11
|
+
branch, and Hosted PTY engine sessions. API automation works without an open
|
|
12
|
+
TUI; prompted `send`, `add`, and `fan-out` ensure the canonical engine session.
|
|
13
|
+
|
|
14
|
+
## Discover before calling
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
kobe api schema
|
|
18
|
+
kobe api schema --verb add
|
|
19
|
+
kobe api schema --group create
|
|
20
|
+
kobe api <verb> --help
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Do not guess flags. Commands emit one JSON object; errors use
|
|
24
|
+
`{"error":{"message","code",...}}` on stderr. Common rejections also carry
|
|
25
|
+
`hint` (what to do) and `nextCommandArgs` (argv for the same `kobe`
|
|
26
|
+
executable — run `kobe <args...>` verbatim to recover, e.g. `["api","list"]`
|
|
27
|
+
after `TASK_NOT_FOUND`). Add `--pretty` for readable output.
|
|
28
|
+
|
|
29
|
+
## Common operations
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Create one task and start its first engine turn.
|
|
33
|
+
kobe api add --repo "$PWD" --title "focused title" --vendor claude \
|
|
34
|
+
--prompt "<complete scoped instruction>"
|
|
35
|
+
|
|
36
|
+
# Parallel attempts of the same prompt (hard cap 10; prefer 3-4).
|
|
37
|
+
kobe api fan-out --repo "$PWD" --count 3 --prompt "<prompt>"
|
|
38
|
+
kobe api fan-out --repo "$PWD" --agents claude:2,codex:1 --prompt "<prompt>"
|
|
39
|
+
|
|
40
|
+
# Follow up. Use an explicit id for unattended work; the active task can drift.
|
|
41
|
+
kobe api send --task-id <id> --prompt "<complete next turn>"
|
|
42
|
+
|
|
43
|
+
kobe api get-task --task-id <id>
|
|
44
|
+
kobe api collect --task-ids <id1>,<id2>,<id3> --pretty
|
|
45
|
+
kobe api list --pretty
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`.running` means the task's canonical Hosted PTY engine session is alive.
|
|
49
|
+
`send` reuses it or auto-starts it when absent.
|
|
50
|
+
|
|
51
|
+
## Lifecycle
|
|
52
|
+
|
|
53
|
+
| Verb | Purpose |
|
|
54
|
+
|---|---|
|
|
55
|
+
| `rename --task-id ID --title T` | Rename a task |
|
|
56
|
+
| `set-branch --task-id ID --branch B` | Rename its branch |
|
|
57
|
+
| `set-vendor --task-id ID --vendor V` | Change engine for the next launch |
|
|
58
|
+
| `set-status --task-id ID --status S` | Set lifecycle status |
|
|
59
|
+
| `archive --task-id ID [--archived=false]` | Archive/unarchive; stops live sessions |
|
|
60
|
+
| `pin --task-id ID [--pinned=false]` | Pin/unpin |
|
|
61
|
+
| `set-active --task-id ID` / `--none` | Change shared active task |
|
|
62
|
+
| `ensure-worktree --task-id ID` | Materialize without starting an engine |
|
|
63
|
+
| `land --task-id ID [--strategy merge\|squash] [--delete-branch] [--then-archive]` | Merge the task's branch into the base repo's current branch |
|
|
64
|
+
| `delete --task-id ID [--force]` | Destructive task + Worktree removal |
|
|
65
|
+
| `discover-adoptable --repo PATH` | Find untracked Worktrees |
|
|
66
|
+
| `adopt --repo PATH --worktree PATH` | Import a Worktree |
|
|
67
|
+
|
|
68
|
+
Prefer `archive` unless the user explicitly authorizes deletion.
|
|
69
|
+
|
|
70
|
+
## Issue tracker
|
|
71
|
+
|
|
72
|
+
Issues are daemon-owned, not repo files:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
kobe api issue-list --repo "$PWD" --pretty
|
|
76
|
+
kobe api issue-create --repo "$PWD" --title "title" --body "context"
|
|
77
|
+
kobe api issue-set-status --repo "$PWD" --id <n> --status done
|
|
78
|
+
kobe api issue-update --repo "$PWD" --id <n> --title "new" --body "body"
|
|
79
|
+
kobe api issue-update --repo "$PWD" --id <n> --task <taskId> # link; `--task none` unlinks
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Kanban semantics
|
|
83
|
+
|
|
84
|
+
The TUI and web render issues as a Backlog / In progress / Done board whose
|
|
85
|
+
columns derive from the issue's own lifecycle — do NOT move cards with
|
|
86
|
+
`issue-set-status doing`:
|
|
87
|
+
|
|
88
|
+
- **In progress** = the issue has a linked task; `issue-update --task <taskId>`
|
|
89
|
+
IS the move (typical flow: `issue-create` → `add` a task → link them).
|
|
90
|
+
- **Done** = `status done`; the daemon mirrors it automatically when the
|
|
91
|
+
linked task finishes.
|
|
92
|
+
- **Backlog** = everything else (`open`/`doing`/`hold`, unlinked).
|
|
93
|
+
|
|
94
|
+
## Fan-out rules
|
|
95
|
+
|
|
96
|
+
Fan out only when the user requests parallel approaches, comparison, or an
|
|
97
|
+
explicit count. Give each task a scoped prompt, report returned IDs, then use
|
|
98
|
+
`collect` to compare. Do not recursively fan out from spawned tasks. Do not
|
|
99
|
+
poll `send` in a tight loop or use it as casual chat; every call is a full
|
|
100
|
+
engine turn.
|
|
101
|
+
|
|
102
|
+
### Supervising a round (report / await)
|
|
103
|
+
|
|
104
|
+
Outcomes are explicit, never inferred. The contract has two sides:
|
|
105
|
+
|
|
106
|
+
**Worker side** — every fan-out prompt should end with an instruction like:
|
|
107
|
+
"when finished, run `kobe api report --outcome succeeded --summary '<one
|
|
108
|
+
line>'` (or `--outcome failed`)". Inside a task the target resolves
|
|
109
|
+
automatically ($KOBE_TASK_ID, else the cwd's worktree); pass `--task-id`
|
|
110
|
+
only from outside. The verdict is stored verbatim on the task as
|
|
111
|
+
`workerReport` — it is the worker's claim, not kobe-verified, so verify the
|
|
112
|
+
winner's actual diff before landing.
|
|
113
|
+
|
|
114
|
+
**Coordinator side** — block until the round settles instead of polling:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
kobe api await --task-ids <id1>,<id2>,<id3> --timeout-secs 900
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Returns every task's outcome as JSON once all have reported. A timeout
|
|
121
|
+
(`"timedOut": true`, exit 0) is a CHECKPOINT, not a failure: silence never
|
|
122
|
+
proves a worker died — it may be mid-turn or waiting on a permission prompt.
|
|
123
|
+
On timeout, inspect (`collect`, `get-task`), nudge (`send`), or simply
|
|
124
|
+
`await` again. Never mark an unreported task failed just because it is
|
|
125
|
+
silent, and never auto-retry it.
|
|
126
|
+
|
|
127
|
+
### Closing a round
|
|
128
|
+
|
|
129
|
+
After comparing attempts, finish the round instead of leaving tasks behind:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# Land the winner: merge its branch into the base repo's CURRENT branch.
|
|
133
|
+
# Verify the base checkout is on the intended branch first.
|
|
134
|
+
kobe api land --task-id <winner> --then-archive
|
|
135
|
+
|
|
136
|
+
# Archive the losers (non-destructive; branches survive).
|
|
137
|
+
kobe api archive --task-id <loser1>
|
|
138
|
+
kobe api archive --task-id <loser2>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
`land` refuses a dirty base checkout; on merge conflict it aborts cleanly and
|
|
142
|
+
returns the conflicted files for manual resolution. Only `delete` destroys a
|
|
143
|
+
Worktree — never use it on a loser without explicit user authorization.
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@sma1lboy/kobe",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.52",
|
|
5
5
|
"description": "TUI orchestrator for Claude Code (codename)",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"packageManager": "bun@1.3.13",
|
|
8
8
|
"bin": {
|
|
9
9
|
"kobe": "dist/cli/index.js"
|
|
10
10
|
},
|
|
11
|
-
"files": ["dist/cli", "dist/web-ui", "dist/*.wav", "README.md", "LICENSE"],
|
|
11
|
+
"files": ["dist/cli", "dist/web-ui", "dist/skills", "dist/*.wav", "README.md", "LICENSE"],
|
|
12
12
|
"publishConfig": {
|
|
13
13
|
"access": "public"
|
|
14
14
|
},
|