@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.
- package/README.md +62 -266
- package/dist/index.js +680 -174
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Linzumi
|
|
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
|
-
|
|
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
|
-
-- '
|
|
37
|
+
-- 'Curl https://linzumi.com/agents.md and then get me to "wow"'
|
|
30
38
|
```
|
|
31
39
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
##
|
|
46
|
+
## Why a CLI
|
|
80
47
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
91
|
-
on your laptop the whole time.
|
|
53
|
+
## What you'll have in three minutes
|
|
92
54
|
|
|
93
|
-
|
|
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
|
-
|
|
96
|
-
when you want to connect your laptop yourself before starting work from
|
|
97
|
-
the browser.
|
|
60
|
+
## Manual Runner Setup
|
|
98
61
|
|
|
99
|
-
|
|
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
|
-
|
|
66
|
+
npx -y @linzumi/cli@0.0.35-beta --version
|
|
67
|
+
linzumi --version
|
|
106
68
|
```
|
|
107
69
|
|
|
108
|
-
|
|
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
|
-
|
|
141
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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
|
-
|
|
233
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
269
|
-
|
|
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
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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
|
-
|
|
126
|
+
---
|
|
301
127
|
|
|
302
|
-
|
|
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
|
-
|
|
331
|
-
|
|
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) ·
|