@linzumi/cli 0.0.33-beta → 0.0.35-beta

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.
Files changed (3) hide show
  1. package/README.md +62 -266
  2. package/dist/index.js +680 -174
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Linzumi CLI
1
+ # Linzumi
2
2
 
3
3
  ```text
4
4
  ▓▓╗ ▓▓╗▓▓▓╗ ▓▓╗▓▓▓▓▓▓▓╗▓▓╗ ▓▓╗▓▓▓╗ ▓▓▓╗▓▓╗
@@ -19,317 +19,113 @@
19
19
  your agent, your laptop, coding live
20
20
  ```
21
21
 
22
- Copy this into your terminal:
22
+ **Linzumi is a lightweight, Slack-like chat built for native AI
23
+ Engineering teams.** Your coding agents run on your computer, reach
24
+ you in your browser or on your phone, and build context for your team
25
+ about what's going well, what's blocked, and what's ready to ship.
26
+ Ship more, regret less.
27
+
28
+ ## Try it
29
+
30
+ Paste this into your terminal:
23
31
 
24
32
  ```bash
25
33
  codex \
26
34
  -c sandbox_workspace_write.network_access=true \
27
35
  --ask-for-approval never \
28
36
  --sandbox danger-full-access \
29
- -- 'Follow https://linzumi.com/agents.md to get me to "wow"'
37
+ -- 'Curl https://linzumi.com/agents.md and then get me to "wow"'
30
38
  ```
31
39
 
32
- That's the launch path: the first Codex is only the bootstrapper. It
33
- opens the agent instructions, confirms your email and workspace details,
34
- asks you for the emailed code when it arrives, creates `/tmp/hello_linzumi`,
35
- creates the shared support channel, starts the Linzumi Commander for that
36
- folder, asks the Commander to launch the inner Linzumi Codex session in a work
37
- thread, and opens the browser editor pointed at the demo app. The
38
- Commander-launched Codex session starts the hot-reload app and edits it.
39
- When you ask the bootstrapper to get you to "wow", that means the complete
40
- first-run outcome: a running Linzumi workspace, browser VS Code editor,
41
- editable `/tmp/hello_linzumi` app on your computer, and a shareable Linzumi
42
- secure-tunnel preview URL for that app.
43
-
44
- Terms:
45
-
46
- - **Bootstrapper Codex**: the outer Codex started by the pasted command. It
47
- sets up Linzumi and local processes, but does not edit the demo app.
48
- - **Linzumi Commander**: the long-running local bridge started with
49
- `linzumi commander`; it runs as the claimed human's Commander and owns the
50
- secure tunnel, trusted folder, browser editor, and inner Codex launch.
51
- - **Linzumi Codex session**: the inner agent running inside the Linzumi thread;
52
- it edits `/tmp/hello_linzumi` and posts progress.
53
- - **Human**: the workspace owner who opens the one-time login link and watches
54
- the work in `#general` and `#linzumi-support`.
55
-
56
- The snippet uses automatic command approval and full local process access
57
- because the bootstrapper must start a real Linzumi Commander and browser editor on this
58
- computer. It is intentionally not the dangerous sandbox-bypass mode.
59
-
60
- Today, your AI coding agent has two homes, both bad.
61
-
62
- It can run **alone in your terminal**, where nobody — your teammate,
63
- your eng lead, your future self at 2am — can see what it's doing or
64
- help when it gets stuck.
65
-
66
- Or it can run in **someone else's sandbox VM**, where "works for the
67
- agent" rarely means "works on your laptop." You merge, pull, run the
68
- test suite, and find out at 4pm.
69
-
70
- Linzumi gives it a third home: **your real laptop, in a thread your
71
- team can watch live**. Real processes, real env vars, real dotfiles,
72
- real teamwork. Diffs land in chat as the agent makes them. Your
73
- reviewer opens a browser VS Code pointed at *your folder* and has an
74
- opinion before the agent's even finished. You approve from your phone
75
- on the way to lunch.
76
-
77
- In three minutes from now you'll have it working end to end.
40
+ The agent will ask for your email, send you a sign-in code, and drive
41
+ the rest. You'll end up with a workspace open in your browser, a tiny
42
+ demo app running on your laptop, a browser VS Code editor pointed at
43
+ it, and a shareable preview URL. Watch the agent edit live, jump in
44
+ alongside, or open the preview on your phone.
78
45
 
79
- ## What you'll have in three minutes
46
+ ## Why a CLI
80
47
 
81
- - **An AI coding agent running on your real laptop**, editing the
82
- generated Hello Linzumi app in a thread your team can read along with.
83
- - **A browser VS Code editor** pointed at `/tmp/hello_linzumi`,
84
- share-able by link with no clone and no deploy.
85
- - **A tunneled local preview** of the app running on your computer with
86
- hot reload.
87
- - **A private support channel with the Linzumi team**, in case
88
- anything goes sideways.
48
+ Your agent runs on the laptop you trust, with your real env vars, your
49
+ real dotfiles, and your real branches. No "works in the sandbox VM,
50
+ breaks in your repo" surprises. The chat side runs in your browser;
51
+ the work side runs locally. This npm package is the local half.
89
52
 
90
- One pasted command. No cloud VM. The editor, agent, and dev server stay
91
- on your laptop the whole time.
53
+ ## What you'll have in three minutes
92
54
 
93
- ## Manual Runner Setup
55
+ - A Linzumi workspace in your browser.
56
+ - A local Commander connected to one trusted project folder.
57
+ - A live Coding agent thread your team can watch and steer.
58
+ - Optional browser editor and preview forwarding for the running app.
94
59
 
95
- The agent-first command above is the launch path. Use this manual path
96
- when you want to connect your laptop yourself before starting work from
97
- the browser.
60
+ ## Manual Runner Setup
98
61
 
99
- You'll need **Node.js 20+**, the **Codex CLI**, and a Chromium-based browser
100
- (Chrome, Edge, Arc, or Brave). Safari mostly works; live collaboration is
101
- smoother in Chromium.
62
+ Install the CLI or run it with `npx`:
102
63
 
103
64
  ```bash
104
65
  npm install -g @linzumi/cli@latest
105
- linzumi start ~/code/my-app
66
+ npx -y @linzumi/cli@0.0.35-beta --version
67
+ linzumi --version
106
68
  ```
107
69
 
108
- Here's what the next 30 seconds look like:
109
-
110
- 1. Your browser opens to Linzumi.
111
- 2. Sign in (or sign up — one click).
112
- 3. Linzumi asks if it can connect to this computer. Click allow.
113
- 4. Your laptop appears as a Commander in your workspace, and
114
- `~/code/my-app` is added to your trusted-paths list automatically.
115
- 5. Type something in chat — *"Explain this project and tell me how
116
- to run it"* — and Linzumi Codex picks it up on your machine.
117
-
118
- That's it for manual setup. The rest of this README is detail.
119
-
120
- ## Agent-first launch path
121
-
122
- That one prompt is the launch path. The canonical agent instructions are
123
- hosted at `https://linzumi.com/agents.md`; `https://linzumi.com/skills.md`
124
- stays available for compatibility. The bootstrap agent will confirm your
125
- email and workspace choice up front, ask for the emailed code after signup
126
- sends it, say hello to `@sean` in the shared support channel,
127
- generate `/tmp/hello_linzumi`, trust that folder in `~/.linzumi/config.json`,
128
- start the global Commander daemon, ask the Commander to launch a Linzumi Codex
129
- session in a new work thread, and open the browser editor. The
130
- Commander-launched Linzumi Codex session starts the
131
- hot-reload app and adds confetti to the demo page while you watch. Workspace
132
- names are plain display names from 2 to 100 characters; Linzumi generates the
133
- URL-safe workspace slug.
134
-
135
- Under the hood, the npm package exposes these commands for the bootstrap
136
- agent to run. They are not extra human setup steps after the one pasted
137
- Codex command.
70
+ Start a local runner from a trusted folder:
138
71
 
139
72
  ```bash
140
- npx -y @linzumi/cli@latest signup --email alice@example.com --workspace-name "Alice's Linzumi" --agent-name BuildBot
141
- npx -y @linzumi/cli@latest claim --pending <pending_id> --code <XXXX-XXXX>
142
- npx -y @linzumi/cli@latest channel post <support_channel_id> "Hello @sean, starting this launch run."
143
- npx -y @linzumi/cli@latest init-hello-linzumi-demo-app --parent-dir /tmp --name hello_linzumi --host 0.0.0.0 --port 8787 --reset --json
144
- project_dir="$(cd /tmp/hello_linzumi && pwd -P)"
145
- commander_id="hello-linzumi-commander-$(uuidgen | tr '[:upper:]' '[:lower:]' | cut -c1-8)"
146
- npx -y @linzumi/cli@latest paths add "$project_dir"
147
- npx -y @linzumi/cli@latest commander daemon \
148
- --runner-id "$commander_id" \
149
- --forward-port 8787 \
150
- --sandbox danger-full-access \
151
- --approval-policy never
152
- npx -y @linzumi/cli@latest commander wait --runner-id "$commander_id" --timeout-ms 30000
73
+ linzumi paths add ~/code/my-app
74
+ linzumi start ~/code/my-app
153
75
  ```
154
76
 
155
- The human-owned Commander reads `~/.linzumi/agent-token.json`, uses the
156
- claimed human Commander token and workspace/channel scope from the approval
157
- flow, reads trusted folders from `~/.linzumi/config.json`, marks approved
158
- project directories trusted in Codex's normal project config so Codex does not
159
- stop for an interactive trust prompt, advertises the explicit preview port, and
160
- listens only to the approving human unless `--listen-user` is explicitly passed. Use a unique
161
- Commander id per launch. `linzumi commander daemon` writes a status record and
162
- log under `~/.linzumi/commanders`, and `linzumi commander wait` returns only
163
- after the Commander is connected.
164
-
165
- By default, the Commander downloads the Linzumi-approved `code-server`
166
- runtime for your platform and verifies its checksum before enabling the
167
- browser editor. Linux editor launches are wrapped with `bubblewrap`
168
- (`bwrap`) for filesystem confinement.
169
-
170
- `linzumi claim` also prints `workspace_name`, `workspace_id`, and `login_url`.
171
- That one-time link logs the human into `#general` in their own selected
172
- workspace. The claim also provisions `#linzumi-support`, a shared channel
173
- connected to Linzumi's workspace so our team can see setup issues from our
174
- side; the bootstrap agent posts a hello there with the printed
175
- `support_channel_id`.
176
- Keep demo work in task threads; use the support channel when signup, Commander,
177
- preview, or browser-editor setup gets stuck.
178
-
179
- Once the Commander is online, the bootstrap agent can ask Linzumi to create
180
- the work thread, have the Commander start Codex, and open the browser editor
181
- for the same thread and folder:
77
+ For explicit runner roots, pass a comma-separated allowlist:
182
78
 
183
79
  ```bash
184
- npx -y @linzumi/cli@latest codex start-new \
185
- --title "Hello Linzumi confetti" \
186
- --runner "$commander_id" \
187
- --cwd "$project_dir" \
188
- --work-description "Start the Hello Linzumi hot-reload app on 0.0.0.0:8787, add tasteful confetti when the page loads, keep the preview working, and post the exact files changed." \
189
- --developer-prompt "The Bootstrapper Codex generated the project and then handed off. You are the Commander-launched Linzumi Codex session. Start any dev server yourself as your descendant process, bind user-visible servers to 0.0.0.0, work only in the approved Hello Linzumi folder, and do not create a branch or PR for this demo." \
190
- --idempotency-key "hello-linzumi-${commander_id}"
191
-
192
- thread_id="<thread_id printed by codex start-new>"
193
- npx -y @linzumi/cli@latest editor open "$thread_id" \
194
- --runner "$commander_id" \
195
- --cwd "$project_dir"
80
+ linzumi start ~/code/my-app --allowed-cwd <paths>
196
81
  ```
197
82
 
198
- The launch target for this path is zero-to-Hello-Linzumi-editor+preview in
199
- under 3 minutes, measured from `signup` through browser VS Code readiness,
200
- forwarded preview readiness, and the first visible Codex edit.
83
+ ## Agent-first launch path
84
+
85
+ The fastest path is still the `codex` prompt above. It uses the npm CLI
86
+ to sign in, trust a demo project, connect the Commander, and start the
87
+ first visible Coding agent thread.
201
88
 
202
89
  ## What just happened
203
90
 
204
- You now have:
205
-
206
- - **A Commander.** Your laptop, listed in the workspace, advertising
207
- `/tmp/hello_linzumi` and the explicit preview port.
208
- - **A workspace** you can invite teammates into. They open the same
209
- browser app, see the same threads, and can start their own Commanders
210
- on their own machines.
211
- - **A private Linzumi support channel.** We can see this channel; we
212
- **cannot** see your repo contents, your tokens, your Codex
213
- transcripts, your editor session, or your other threads. Stuck?
214
- Post there — we read it.
215
- - **A browser VS Code editor**, opened against `/tmp/hello_linzumi` and
216
- ready for shared editing.
91
+ Linzumi keeps the browser/chat surface separate from the local work
92
+ surface. The CLI authenticates your local Commander, publishes runner
93
+ capabilities, and lets Kandan ask that Commander to start Codex inside
94
+ trusted folders only.
217
95
 
218
96
  ## Three things to try first
219
97
 
220
- 1. **Watch the demo change live.** The Linzumi Codex session edits the
221
- generated page, and hot reload shows the change in the tunneled preview.
222
- 2. **Make a real change without context-switching.** The Codex session
223
- running in Linzumi edits files on your disk. Watch the diff land in
224
- chat, or jump into the browser editor and shape it yourself.
225
- 3. **Show a teammate something on your screen.** Open the browser
226
- editor or share your local dev server through a normal HTTPS
227
- link. No exposing localhost, no copy-pasting IPs, no "screenshare
228
- real quick."
98
+ - Ask the Coding agent to make a small UI change and watch the thread.
99
+ - Open the browser editor from the thread controls.
100
+ - Share the preview URL with a teammate or your phone.
229
101
 
230
102
  ## Working as a team
231
103
 
232
- This is what makes Linzumi different from running an AI coding agent
233
- alone in a terminal.
104
+ Use the Linzumi thread as the shared source of truth. Humans can reply,
105
+ steer, interrupt, or inspect output while the actual commands still run
106
+ on the trusted local machine.
234
107
 
235
- - **Your laptops are always in sight.** Every machine you've run
236
- `linzumi start` on shows up as a Commander. From any channel, you can
237
- see how many of your Commanders are reachable right now and which ones
238
- are listening on that channel.
108
+ ## Trusted folders
239
109
 
240
- - **Put Codex on the job from the channel.** Pick an available Commander
241
- and a trusted folder from the channel menu, type what Codex should
242
- work on, hit start. Linzumi asks that Commander to attach a fresh Codex
243
- with the folder and settings you picked.
244
-
245
- - **One Codex per thread.** Once a Linzumi Codex session picks up a
246
- thread, it owns the thread — no second Codex can step in and trample
247
- the work. The lock holds for the life of the thread.
248
-
249
- - **Browse what your team's been up to.** Open the Commanders dropdown
250
- to see, across every device, the most recently active threads with
251
- short AI-written summaries. Jump in and keep working.
252
-
253
- - **Chat with humans without waking Codex.** Start a message with `&`
254
- and Codex won't see it. Side conversations live in the same thread
255
- without nudging the agent.
256
-
257
- ## Trusted folders — the security model
258
-
259
- Linzumi only runs Codex or opens the editor inside folders you've
260
- explicitly trusted. The trust list lives at `~/.linzumi/config.json`.
110
+ Linzumi only edits inside folders you've explicitly trusted.
261
111
 
262
112
  ```bash
263
- linzumi paths list
264
113
  linzumi paths add ~/code/my-app
265
- linzumi paths remove ~/code/my-app
266
114
  ```
267
115
 
268
- `linzumi start <path>` adds `<path>` to the trust list automatically
269
- on first use. `linzumi connect` uses the list as-is — or pass
270
- `--allowed-cwd <paths>` for a one-off comma-separated override.
271
-
272
- There's no credential escalation: Linzumi only asks the Commander to start
273
- Codex or the editor inside trusted folders. Those processes still run
274
- with your shell's operating-system privileges, so choose trusted folders
275
- intentionally. Every action is auditable from the thread.
116
+ The trust list lives at `~/.linzumi/config.json`. The bootstrap agent
117
+ adds `/tmp/hello_linzumi` for you on first run.
276
118
 
277
119
  ## When something looks wrong
278
120
 
279
- - **`linzumi: command not found`** your global npm bin folder isn't
280
- on `PATH`. Run `npm prefix -g`; add the printed path's `bin` folder
281
- to your shell.
282
- - **`codex: command not found`** — install the Codex CLI, or pass
283
- `--codex-bin <path>` to `linzumi start`.
284
- - **Browser sign-in opens but never returns to the CLI.** Your browser
285
- can't reach the address the CLI is listening on. Pass
286
- `--oauth-callback-host <ip-or-host-your-browser-can-reach>`.
287
- - **Browser editor never says it's ready.** Rerun `linzumi start` and
288
- watch the console for the editor download step. The very first
289
- launch on a slow network can take a minute or two.
290
- - **Collaboration looks off in Safari.** Switch to Chromium for now.
291
- - **Anything else.** Post in your Linzumi support channel — we read it.
292
-
293
- ## Pinning a version
294
-
295
- ```bash
296
- npm install -g @linzumi/cli@0.0.33-beta
297
- linzumi --version
298
- ```
121
+ Run `linzumi --help` or reconnect with `linzumi start ~/code/my-app`.
122
+ If the browser says no runner is connected, check that the terminal
123
+ running the Commander is still open and that the folder is listed in
124
+ `~/.linzumi/config.json`.
299
125
 
300
- ## Advanced
126
+ ---
301
127
 
302
- Most people never need anything in this section.
303
-
304
- ### Lower-level connect
305
-
306
- `linzumi start` is what you want almost every time. The lower-level
307
- form is useful when you already know your workspace and channel:
308
-
309
- ```bash
310
- linzumi connect \
311
- --workspace <your-workspace> \
312
- --channel <your-channel> \
313
- --cwd ~/code/my-app
314
- ```
315
-
316
- ### All the flags
317
-
318
- ```text
319
- --agent-token-file <path> Bootstrap token cache for `linzumi commander`
320
- --oauth-callback-host <ip> Sign-in callback host your browser can reach
321
- --codex-bin <path> Codex executable, default `codex`
322
- --model <name> Model requested for Codex sessions and labelled in Linzumi
323
- --reasoning-effort <value> Reasoning effort requested for Codex sessions and labelled in Linzumi
324
- --fast Advertise this Commander as low-latency in the workspace
325
- --forward-port <ports> Comma-separated local TCP ports Linzumi may share as authenticated previews
326
- --allowed-cwd <paths> Override ~/.linzumi/config.json with comma-separated trusted roots
327
- --log-file <path> JSONL Commander event log
328
- ```
128
+ *Slack-shaped on the surface. A multiplayer compiler underneath.*
329
129
 
330
- `--runner-id`, `--auth-file`, `--code-server-bin`, `--codex-url`,
331
- `--launch-tui`, `--listen-user`, `--sandbox`, `--approval-policy`,
332
- `--stream-flush-ms`, and `--token` are also accepted; `linzumi
333
- --help` shows them all with brief descriptions. They exist for
334
- multi-Commander orchestration, custom Codex deployments, and CI
335
- scenarios — not for everyday use.
130
+ [linzumi.com](https://linzumi.com) ·
131
+ [agents.md](https://linzumi.com/agents.md) ·