@sma1lboy/kobe 0.1.0 → 0.2.0

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/README.md CHANGED
@@ -3,39 +3,174 @@
3
3
  </p>
4
4
 
5
5
  <p align="center">
6
- <strong>A TUI orchestrator for Claude Code.</strong><br/>
7
- Conductor-shaped 5-pane terminal app: many sessions in flight, one place to drive them.
6
+ <strong>One terminal, many Claude Code sessions.</strong><br/>
7
+ kobe is a TUI that runs N Claude Code agents in parallel each in its own git worktree — so you can drive a small team of tasks from one screen.
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <em>Codename — will be renamed before any public release.</em>
11
+ <em>Codename — will be renamed before any non-beta release.</em>
12
12
  </p>
13
13
 
14
14
  ---
15
15
 
16
- ## What it is
16
+ ## What kobe is
17
17
 
18
- kobe is a terminal UI that runs multiple Claude Code sessions in parallel, each in its own git
19
- worktree. The layout copies Conductor's grammar (sidebar of tasks, workspace pane with a chat
20
- tab and per-file tabs, files tree, terminal, status bar) but the engine and theming follow Claude
21
- Code's own conventions so a kobe session feels like a Claude Code session — not a third-party
22
- shell wrapping it.
18
+ A terminal UI on top of the `claude` CLI. It gives you a Conductor-shaped layout
19
+ (sidebar of tasks, workspace pane with chat + file tabs, file tree, embedded
20
+ terminal, status bar) and runs each task in its own isolated git worktree, so
21
+ multiple Claude Code sessions can edit the same repo at the same time without
22
+ stepping on each other.
23
23
 
24
- ## Stack
24
+ If you've used a single `claude` session and wished you could fan out to five,
25
+ that's the gap kobe fills.
25
26
 
26
- **TypeScript** + **[`@opentui/core`](https://github.com/sst/opentui) / `@opentui/solid`** + **Solid.js** + **Bun**.
27
- Tests via vitest + PTY-driven behavior tests. Lint via biome. Engine spawns the `claude` CLI as a
28
- subprocess and parses `--output-format stream-json`.
27
+ ## Install
29
28
 
30
- ## Quick start
29
+ [![npm](https://img.shields.io/npm/v/%40sma1lboy%2Fkobe.svg)](https://www.npmjs.com/package/@sma1lboy/kobe)
30
+
31
+ You need three things on `PATH`:
32
+
33
+ - [**Bun**](https://bun.sh) ≥ 1.0 — kobe's renderer is opentui, which uses Bun-FFI.
34
+ - [**`claude`** CLI](https://docs.anthropic.com/en/docs/claude-code) — the engine kobe drives. Run `claude --version` to confirm it's installed and signed in.
35
+ - **`tmux`** — the embedded terminal pane uses one tmux session per task. On macOS: `brew install tmux`.
36
+
37
+ Then:
38
+
39
+ ```bash
40
+ bun install -g @sma1lboy/kobe
41
+ kobe
42
+ ```
43
+
44
+ Or run without installing:
45
+
46
+ ```bash
47
+ bunx @sma1lboy/kobe
48
+ ```
49
+
50
+ The first launch drops you into an empty sidebar — press `ctrl+n` to create
51
+ your first task. kobe will ask for a repo path and a base branch, then spin
52
+ up a worktree at `<repo>/.claude/worktrees/<task-id>/` and a chat pane
53
+ talking to a fresh `claude` session inside it.
54
+
55
+ ## A glimpse
56
+
57
+ <p align="center">
58
+ <img src="docs/assets/brand/pane-grid.gif" alt="kobe pane layout" width="720" />
59
+ </p>
60
+
61
+ ## What you can do
62
+
63
+ Once you're in, the keys you'll use most:
64
+
65
+ | Key | What it does |
66
+ | ------------------ | -------------------------------------------------------------- |
67
+ | `ctrl+n` | New task (any pane, any time) |
68
+ | `ctrl+1` / `2` / `3` / `4` | Jump straight to a pane (sidebar, workspace, files, terminal) |
69
+ | `tab` | Cycle focus to the next pane |
70
+ | `ctrl+q` | Detach back to the sidebar (your task keeps streaming) |
71
+ | `?` | Show the full keybinding help dialog |
72
+ | `,` or `ctrl+,` | Open Settings (theme, transparent background, dev reset) |
73
+ | `q` | Quit (with confirm) |
74
+
75
+ Inside the sidebar, with a task highlighted: `j/k` to move, `enter` to open,
76
+ `r` to rename, `a` to archive, `d` to delete, `[` / `]` to switch between the
77
+ working session and the archives view.
78
+
79
+ Inside the chat composer:
80
+
81
+ - `enter` to send, `shift+enter` for a newline.
82
+ - `shift+tab` cycles the per-task tool-permission mode (`default → acceptEdits → plan`), forwarded to `claude` as `--permission-mode`.
83
+ - Click the model label in the footer to pick the model for this task (opus / sonnet / haiku).
84
+ - Type `/` to open the slash-command dropdown. Bundled `claude-code` commands and your own `.claude/{commands,skills}/*.md` are merged in.
85
+ - A `Create PR` chip on the chat header injects a PR-instructions prompt into the active task and routes the resulting PR through the orchestrator.
86
+
87
+ A given task can host **multiple chat tabs** on the same worktree — useful when
88
+ you want a parallel sub-conversation without losing the main thread.
89
+
90
+ For the full feature manifest, see [`CHANGELOG.md`](./CHANGELOG.md).
91
+
92
+ ## Custom themes
93
+
94
+ kobe ships a handful of bundled themes (`claude` is the default), and any JSON
95
+ file you drop into `~/.kobe/themes/` is auto-loaded at boot and shows up in
96
+ Settings → Theme alongside the built-ins. Themes are publishable as raw JSON
97
+ on GitHub and installed with one command:
98
+
99
+ ```bash
100
+ kobe theme add https://raw.githubusercontent.com/<you>/<repo>/main/<your-theme>.json
101
+ kobe theme list
102
+ kobe theme remove <name>
103
+ ```
104
+
105
+ A JSON Schema at [`packages/kobe/src/tui/context/theme/theme.schema.json`](./src/tui/context/theme/theme.schema.json)
106
+ gives editor autocomplete — reference it via `"$schema"` in your theme file.
107
+
108
+ Full guide (shape, examples, GitHub publishing flow):
109
+ [`docs/themes.md`](../../docs/themes.md).
110
+
111
+ ## Where things live
112
+
113
+ - Tasks: `~/.kobe/tasks.json`
114
+ - User themes: `~/.kobe/themes/*.json`
115
+ - Per-task worktrees: `<repo>/.claude/worktrees/<task-id>/`
116
+ - UI state (theme, sidebar widths, last-active task): kobe's KV store, also under `~/.kobe/`
117
+
118
+ ## Troubleshooting
119
+
120
+ **`command not found: claude`** — kobe shells out to the `claude` CLI; install
121
+ it from [the Claude Code docs](https://docs.anthropic.com/en/docs/claude-code)
122
+ and confirm `claude --version` works in the same shell you launched kobe from.
123
+
124
+ **`bun: command not found`** — install [Bun](https://bun.sh) (`curl -fsSL https://bun.sh/install | bash`).
125
+ kobe's renderer requires Bun ≥ 1.0; it does not run under Node.
126
+
127
+ **The terminal pane is blank / errors about tmux** — install `tmux` (`brew install tmux` on macOS).
128
+ The embedded terminal is one tmux session per task; without `tmux` on `PATH`,
129
+ the pane stays empty but the rest of kobe still works.
130
+
131
+ **`posix_spawnp failed` when running `bun run test:behavior`** — on macOS arm64,
132
+ Bun's installer occasionally ships `node-pty`'s prebuilt `spawn-helper` without
133
+ an exec bit. The behavior-test driver fixes it lazily on first spawn (see
134
+ `test/behavior/driver.ts`), so a re-run usually clears it. If not, run
135
+ `chmod +x node_modules/node-pty/build/Release/spawn-helper`.
136
+
137
+ **Worktree won't create** — kobe wants a clean git repo. The new-task dialog
138
+ validates the repo path before creating; if it's complaining, check that
139
+ `git status` runs cleanly inside the path you typed.
140
+
141
+ ## Coming later
142
+
143
+ - Homebrew tap (mirroring [`sma1lboy/homebrew-codefox`](https://github.com/sma1lboy/homebrew-codefox)) so you can `brew install kobe` without touching Bun directly.
144
+ - Conductor-as-backend mode (Phase 2 in [`docs/PLAN.md`](./docs/PLAN.md)).
145
+
146
+ ---
147
+
148
+ ## For contributors
149
+
150
+ If you want to hack on kobe itself rather than just use it:
31
151
 
32
152
  ```bash
33
153
  bun install
34
- bun run dev # boots the 5-pane TUI
154
+ bun run dev # boots the 5-pane TUI under KOBE_DEV=1 (no update chip, etc.)
35
155
  bun run test # unit + type tests
36
156
  bun run test:behavior # PTY-driven; spawns kobe as a real binary
157
+ bun run typecheck # strict tsc
158
+ bun run build # produces ./dist/index.js for `npm publish`
37
159
  ```
38
160
 
39
- Tasks live at `~/.kobe/tasks.json`; per-task git worktrees live at `<repo>/.kobe/worktrees/<task-id>/`.
161
+ Architecture, design philosophy, and the team-of-agents operating model live in:
162
+
163
+ - [`docs/DESIGN.md`](./docs/DESIGN.md) — design philosophy, tech stack lock-in.
164
+ - [`docs/ARCHITECTURE.md`](./docs/ARCHITECTURE.md) — module map and current state.
165
+ - [`docs/HARNESS.md`](./docs/HARNESS.md) — the agent self-test contract.
166
+ - [`docs/PLAN.md`](./docs/PLAN.md) — phase / wave plan.
167
+ - [`HANDOFF.md`](./HANDOFF.md) — current direction + what just shipped.
168
+
169
+ ### Releasing
40
170
 
41
- Current direction, what just shipped, and what's next live in [`HANDOFF.md`](./HANDOFF.md).
171
+ Bump `package.json`, move `## [Unreleased]` in `CHANGELOG.md` to the new
172
+ version section, commit, then push the matching `vX.Y.Z` tag. The release
173
+ workflow ([`.github/workflows/release.yml`](./.github/workflows/release.yml))
174
+ runs typecheck + unit tests + build, asserts the tag matches `package.json`,
175
+ then `npm publish --provenance` and creates a GitHub release with the
176
+ changelog section as the body.