@sma1lboy/kobe 0.8.78 → 0.8.80
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 +166 -166
- package/dist/skills/kobe/SKILL.md +82 -3
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ name: kobe
|
|
|
3
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
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- kobe-skill-version:
|
|
6
|
+
<!-- kobe-skill-version: 19 — bump in lockstep with KOBE_SKILL_VERSION (src/lib/skill-install.ts). -->
|
|
7
7
|
|
|
8
8
|
# kobe shell control
|
|
9
9
|
|
|
@@ -61,6 +61,80 @@ in a kobe task. Do not recursively fan out from a spawned task.
|
|
|
61
61
|
When the check fails, none of this applies — use `kobe api` only if the
|
|
62
62
|
user asks for kobe by name.
|
|
63
63
|
|
|
64
|
+
## Vocabulary — what the user's words map to
|
|
65
|
+
|
|
66
|
+
| Term | What it is | Isolation it gives | Users also say |
|
|
67
|
+
|---|---|---|---|
|
|
68
|
+
| **Task** | one Worktree + branch + the Terminal Tabs inside it — one sidebar row | its own files AND its own branch | "a task", "a new one", "a separate attempt" |
|
|
69
|
+
| **Worktree** | that task's file tree on disk (`.task.worktreePath`) | — | "workspace", "this checkout", "this branch", "here" |
|
|
70
|
+
| **Terminal Tab** | one engine session inside a task | its own conversation, SAME files | "tab", "chattab", "another chat", "a second agent on this" |
|
|
71
|
+
| **Split** | the tree that divides ONE Terminal Tab into several regions (the `pane-open` verb's unit; a leaf is not called a pane) | none — same session's screen, same files | "split it", "side by side", "put the logs next to it" |
|
|
72
|
+
|
|
73
|
+
Two of those colloquialisms are traps, so read them as INTENT, not as
|
|
74
|
+
product terms: in kobe's own vocabulary **Workspace** is the center Terminal
|
|
75
|
+
Tab region of the UI (CONTEXT.md), not a checkout, and **ChatTab** is
|
|
76
|
+
retired vocabulary for Terminal Tab. A user saying "in this workspace" means
|
|
77
|
+
the worktree they are looking at — answer the intent, keep writing the real
|
|
78
|
+
term.
|
|
79
|
+
|
|
80
|
+
They nest — **Task ⊃ Terminal Tab ⊃ Split** — and isolation drops at every
|
|
81
|
+
level down:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
new Task → own worktree + own branch (parallel work can't collide)
|
|
85
|
+
new Tab → own engine session, SAME files (a helper in the same checkout)
|
|
86
|
+
new Split → same session's screen, one tab divided (a monitor beside the work)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The distinction that decides every routing call: **a new tab shares the
|
|
90
|
+
worktree and branch; only a new task gets its own.** Two tabs in one task
|
|
91
|
+
edit the same files, so they can collide — that is a feature when the user
|
|
92
|
+
wants a helper in the same checkout, and a bug when they wanted parallel
|
|
93
|
+
attempts. A split isolates nothing at all: it is a layout, for watching
|
|
94
|
+
something (logs, `btop`, a test loop) next to the work — never the answer to
|
|
95
|
+
"do this work".
|
|
96
|
+
|
|
97
|
+
### Where does this work land?
|
|
98
|
+
|
|
99
|
+
Inside a kobe session (`$KOBE_TASK_ID` non-empty — check first: it is what
|
|
100
|
+
makes the tab/split rows addressable at all), match top to bottom and take
|
|
101
|
+
the first row that fits:
|
|
102
|
+
|
|
103
|
+
| The user says | Lands in | Command |
|
|
104
|
+
|---|---|---|
|
|
105
|
+
| "you do it", "just fix it", "change X to Y" | you, right here | no kobe verb — edit the files yourself |
|
|
106
|
+
| "try it N ways", "compare approaches" | N new tasks | `kobe api fan-out --repo "$PWD" --count N --prompt "…"` |
|
|
107
|
+
| "split", "side by side", "keep an eye on X while…" | a new region in the CURRENT tab | `kobe api pane-open --command "…"` |
|
|
108
|
+
| names a tab: "tell the agent in tab 3" | that exact tab | `kobe api send --task-id <id> --tab tab-3 --prompt "…"` |
|
|
109
|
+
| a LOCATION word: "in this workspace/worktree/checkout", "on this branch", "here", "same task" | THIS task, a NEW Terminal Tab | `kobe api send --task-id "$KOBE_TASK_ID" --tab new --prompt "…"` |
|
|
110
|
+
| names an ENGINE for the same files: "let codex take over here", "try this one with claude instead" | THIS task, a new tab pinned to that engine | `kobe api send --task-id "$KOBE_TASK_ID" --tab new --vendor codex --prompt "…"` |
|
|
111
|
+
| **anything else — no row above matched** | a NEW task — new worktree + branch | `kobe api add --repo "$PWD" --prompt "…"` |
|
|
112
|
+
|
|
113
|
+
Order is the tiebreak: a count ("3 ways in this workspace") beats a location
|
|
114
|
+
word, and delegation language loses to "you do it" — the user asking YOU is
|
|
115
|
+
not asking for a fleet. Two more rules the table can't show:
|
|
116
|
+
|
|
117
|
+
- No location word at all ⇒ new task. It is the only routing whose isolation
|
|
118
|
+
cannot corrupt work-in-progress, so it is the safe default.
|
|
119
|
+
- "this repo" / "this project" are NOT location words — they name the repo,
|
|
120
|
+
not the checkout. Only worktree-scoped words route to a tab.
|
|
121
|
+
|
|
122
|
+
Outside a kobe session none of this applies: there is no "this task" to add
|
|
123
|
+
a tab to, so `add` / `fan-out` are the only routings available.
|
|
124
|
+
|
|
125
|
+
### Know where you are before you route
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
echo "$KOBE_TASK_ID / $KOBE_TAB_ID" # who you are (empty = not a kobe session)
|
|
129
|
+
kobe api get-task --task-id "$KOBE_TASK_ID" # .task.worktreePath, .task.branch, .running, .tabs[]
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
`get-task` is the per-task read that answers "what is my worktree, my
|
|
133
|
+
branch, and which sibling tabs exist" — `.tabs[]` carries each tab's `id`, `kind`,
|
|
134
|
+
`vendor`, `lastTitle` and `alive`, which is exactly the target list for
|
|
135
|
+
`send --tab`. A tab flagged `unregistered: true` is a live session the tab
|
|
136
|
+
snapshot lost; it is addressable like any other.
|
|
137
|
+
|
|
64
138
|
## Discover before calling
|
|
65
139
|
|
|
66
140
|
```bash
|
|
@@ -95,11 +169,16 @@ kobe api send --task-id <id> --prompt "<complete next turn>"
|
|
|
95
169
|
# Reply home: no --task-id inside a dispatched task = the dispatcher's tab.
|
|
96
170
|
kobe api send --prompt "succeeded: <one line> (branch <final branch>)"
|
|
97
171
|
|
|
98
|
-
# A task can hold several
|
|
99
|
-
#
|
|
172
|
+
# A task can hold several Terminal Tabs. `get-task` lists ONE task's tabs (the
|
|
173
|
+
# usual read before addressing one); `inspect` is the wider diagnostic — every
|
|
174
|
+
# task's snapshot plus daemon activity and live pty sessions.
|
|
100
175
|
kobe api inspect --task-id <id>
|
|
101
176
|
kobe api send --task-id <id> --tab tab-3 --prompt "<turn>" # exact alive tab
|
|
102
177
|
kobe api send --task-id <id> --tab new --prompt "<turn>" # fresh engine tab
|
|
178
|
+
# Same worktree, DIFFERENT agent — the API twin of the TUI's ctrl+e pick. The
|
|
179
|
+
# engine is pinned to that tab (survives restarts, unaffected by a later
|
|
180
|
+
# set-vendor) and the task's own vendor is left alone. --tab new only.
|
|
181
|
+
kobe api send --task-id <id> --tab new --vendor codex --prompt "<turn>"
|
|
103
182
|
|
|
104
183
|
kobe api get-task --task-id <id>
|
|
105
184
|
kobe api collect --task-ids <id1>,<id2>,<id3> --pretty
|
package/package.json
CHANGED