@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.
@@ -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: 17 — bump in lockstep with KOBE_SKILL_VERSION (src/lib/skill-install.ts). -->
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 chat tabs. Enumerate them first (inspect's .tabs is
99
- # the sidebar's tab snapshot: id, kind, vendor, lastTitle), then address one:
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@sma1lboy/kobe",
4
- "version": "0.8.78",
4
+ "version": "0.8.80",
5
5
  "description": "TUI orchestrator for Claude Code (codename)",
6
6
  "type": "module",
7
7
  "packageManager": "bun@1.3.13",