usebeeline 0.1.74 → 0.1.75
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 +20 -234
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
<
|
|
1
|
+
<p align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/Beeline-Work/beeline/main/apps/mobile/sources/assets/images/logotype-light@2x.png" />
|
|
4
|
+
<img src="https://raw.githubusercontent.com/Beeline-Work/beeline/main/apps/mobile/sources/assets/images/logotype-dark@2x.png" alt="beeline" width="180" />
|
|
5
|
+
</picture>
|
|
6
|
+
</p>
|
|
2
7
|
|
|
3
8
|
<p align="center">
|
|
4
9
|
<a href="https://www.npmjs.com/package/usebeeline"><img src="https://img.shields.io/npm/v/usebeeline?logo=npm&color=D7AF5F" alt="npm version" /></a>
|
|
@@ -9,253 +14,34 @@
|
|
|
9
14
|
<p align="center"><strong>Team messaging for agents and humans.</strong></p>
|
|
10
15
|
<p align="center">One Room for your people and your coding agents. Talk it through, hand off the work, watch it merge.</p>
|
|
11
16
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
The agent stays on your machine. Your provider key stays on your machine. What crosses the wire is the conversation, and — when repository work starts — a pull request.
|
|
15
|
-
|
|
16
|
-
## One message
|
|
17
|
-
|
|
18
|
-
In a Room bound to a repository, someone types:
|
|
19
|
-
|
|
20
|
-
```text
|
|
21
|
-
@codex the corner status line wraps onto two lines on small phones. fix it and open a PR.
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Codex answers in the Room, opens a **corner** — an isolated worktree of the repository with one branch and one objective — works there, pushes, and opens the pull request. The Room shows the corner card, the checks, and the merge. Nobody left the chat.
|
|
25
|
-
|
|
26
|
-
Other things people ask an agent in a Room:
|
|
27
|
-
|
|
28
|
-
- “@claude what changed in the release job this week?”
|
|
29
|
-
- “@pi read the crash log I just attached and tell me which commit did it.”
|
|
30
|
-
- “@goose open a corner and take the deprecation warnings out of the auth tests.”
|
|
31
|
-
- “@codex run the deploy script.” — the agent raises its hand for a command grant; you approve it on the card.
|
|
32
|
-
- “@claude every weekday at 9, post yesterday's failed checks.” — it schedules itself.
|
|
17
|
+
Connect the coding agent you already run to a Room in the Beeline app. Tag it like a teammate.
|
|
33
18
|
|
|
34
19
|
## Install
|
|
35
20
|
|
|
36
|
-
On any machine that already runs your coding agents:
|
|
37
|
-
|
|
38
21
|
```sh
|
|
39
22
|
npx usebeeline connect
|
|
40
23
|
```
|
|
41
24
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
| Step | What it asks |
|
|
45
|
-
| -------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
46
|
-
| Harness | Claude Code, Codex, Goose, Pi, Grok, Cursor, or OpenCode |
|
|
47
|
-
| Provider | Goose and Pi only — OpenRouter (default), OpenAI, Anthropic, Google, or xAI |
|
|
48
|
-
| API key | Goose and Pi only — verified against the provider, then saved to `~/.config/beeline/providers.json` (mode `0600`) |
|
|
49
|
-
| Model | Whatever the harness advertises, filtered as you type; OpenRouter defaults to GLM 5.3 Flash |
|
|
50
|
-
| Effort | The reasoning effort your harness advertises for that model; skipped by a harness that has no such setting |
|
|
51
|
-
|
|
52
|
-
A harness that is already set up answers the provider and key questions itself, but model and effort are still asked, with its own current settings pre-selected.
|
|
53
|
-
|
|
54
|
-
It does **not** ask for a name or a soul. The server assigns the agent one of twelve animals nobody in your Workspace is already wearing, and prints it:
|
|
55
|
-
|
|
56
|
-
```text
|
|
57
|
-
│ Your agent is Foxy the fox.
|
|
58
|
-
│
|
|
59
|
-
◇ Name
|
|
60
|
-
│ ● Keep Foxy (default)
|
|
61
|
-
│ ○ Rename this agent
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Codex, Claude Code, Grok, and OpenCode use the sign-in they already have on that machine, so they are not asked for a key at all. For OpenCode, install `opencode-ai` and run `opencode auth login` first; Beeline launches it with `opencode acp`.
|
|
65
|
-
|
|
66
|
-
You can pass the pairing code inline — `npx usebeeline connect XXXXXXXX-XXXXXXXX` — and the package also installs a `beeline` bin alias.
|
|
67
|
-
|
|
68
|
-
**Requirements:** Node 20.11+ and either Linux x64 with systemd user services or macOS (Apple silicon or Intel) with launchd. On macOS the helper is supervised in your login session: a LaunchAgent starts at login rather than at boot, so keep a user logged in — turn on automatic login for a headless Mac. Pairing over SSH with nobody logged in cannot start the daemon.
|
|
69
|
-
|
|
70
|
-
## What happens
|
|
71
|
-
|
|
72
|
-
1. `connect` redeems the app's one-time pairing code and receives an agent identity for your Workspace.
|
|
73
|
-
2. It downloads and verifies the current helper bundle into `~/.local/lib/beeline` and starts it as a supervised per-user service, one helper per machine serving every paired agent (`systemd --user` on Linux, a launchd LaunchAgent on macOS).
|
|
74
|
-
3. The agent appears in the Room. Tag it like a teammate.
|
|
75
|
-
4. Given a repository-bound Room, the agent can open a corner and produce a pull request there.
|
|
76
|
-
5. The helper prepares new releases while agents keep serving, then hands over when quiet or after at most five minutes. It verifies checksums, Node requirements and imports before activation. The native service manager restarts every unexpected exit.
|
|
77
|
-
|
|
78
|
-
Your provider key is not part of any of that. `connect` sends the server the pairing code, the harness name, the provider name, the model id, and the reasoning effort — never the key. The key is written to your own config directory and handed to the harness as an environment variable when it runs.
|
|
79
|
-
|
|
80
|
-
## Rooms and corners
|
|
81
|
-
|
|
82
|
-
A Room and a corner are the same conversation surface with different permissions.
|
|
83
|
-
|
|
84
|
-
**In a Room, the agent can:**
|
|
85
|
-
|
|
86
|
-
- read the repository checkout, run searches, read git history — the filesystem is mounted **read-only**;
|
|
87
|
-
- run shell commands inside that same sandbox (curl an endpoint, check `tailscale status`) — writable only in its own session state;
|
|
88
|
-
- use every MCP tool mounted into its session, and web search where the harness has it (Codex and Claude Code get theirs turned on in the isolated home);
|
|
89
|
-
- read files and photos people share (downloaded to the session for it — it never fetches a URL) and attach a file back to its reply;
|
|
90
|
-
- address any other member, human or agent, by writing `@name`;
|
|
91
|
-
- schedule itself to run again later, once or repeatedly;
|
|
92
|
-
- ask for something outside the sandbox with a grant request;
|
|
93
|
-
- open a corner.
|
|
94
|
-
|
|
95
|
-
**In a Room, the agent cannot:** write to the repository, commit, push, or open a pull request. There is one way to start write work, and it is `open_corner`.
|
|
96
|
-
|
|
97
|
-
**A corner** is a fresh worktree, its own branch, one owning agent, and one fixed objective of at most 24 words. In it the agent works, commits, pushes the branch, runs `gh pr create`, and prints the pull request URL. It then waits for the server's own checks fact — not for whatever `gh` printed locally — and merges only when the checks passed and no human has put the corner on hold. The merge webhook archives the corner and reaps the worktree.
|
|
98
|
-
|
|
99
|
-
When Beeline reads that a Room's repository allows GitHub auto-merge, it warns a Workspace manager while they choose a reviewer and shows an inline notice when one is already set. The warning does not prevent setting a reviewer. GitHub merges a pull request with auto-merge turned on as soon as its checks pass, before Beeline asks the reviewer to look; turn off auto-merge in that repository's GitHub settings to protect reviewer approval.
|
|
100
|
-
|
|
101
|
-
The corner receives a GitHub App token scoped to **that one repository**, installed as a worktree-local git credential helper. Your host credential stores are masked out of the sandbox — with one deliberate exception: the Trusty Squire session directory stays readable, so a routed agent shares your one signed-in browser and vault instead of standing up its own.
|
|
102
|
-
|
|
103
|
-
**Direct messages** are strictly conversational: no repository binding, no corners.
|
|
25
|
+
Sign in with GitHub in the [iOS](https://apps.apple.com/app/id6803948500) or [Android](https://play.google.com/store/apps/details?id=app.usebeeline) app. Enter its pairing code on your agent's machine.
|
|
26
|
+
Requires Node 20.11+ and Linux x64 or macOS. [Setup details](https://github.com/Beeline-Work/beeline/blob/main/docs/getting-started.md#install).
|
|
104
27
|
|
|
105
|
-
##
|
|
106
|
-
|
|
107
|
-
- **The filesystem boundary is the sandbox, not a tool list.** Room sessions run under bubblewrap with a read-only view of the checkout, a private `/tmp`, and an isolated home. Every mounted MCP tool is approved, and so are shell commands while the sandbox wraps the session, because the sandbox — not an allowlist — is what holds the line for both.
|
|
108
|
-
- **When the sandbox cannot be built, the daemon says so and keeps serving.** A host with no `bwrap` gets one automatic install attempt at daemon start (Linux hosts with `apt-get`; the unit's start deadline is extended to cover it, and a failed attempt is remembered for a day rather than retried on every restart). If the sandbox still cannot be built — a kernel that refuses unprivileged user namespaces, no usable package manager, or an operator who turned it off — every session afterwards runs unwrapped: mounted MCP tools stay approved, the agent's session prompt states whether it can run shell commands, and the read-only rule for anything else rests on the harness's own sandbox. Codex keeps its offline read-only mode; a harness that asks, like Claude Code or Grok, is told a shell is unavailable instead of being granted one. Pi does not ask before it writes, so a Pi Room is only as read-only as its sandbox. OpenCode Rooms select its Plan agent; bubblewrap holds the filesystem boundary when available.
|
|
109
|
-
- **Write access requires a corner.** A corner is a separate worktree on its own branch with a repository-scoped GitHub App token, and it is opened by an explicit host-governed call, never inferred.
|
|
110
|
-
- **Resource authority follows ownership.** An agent uses its own owner's files, secrets, host commands and imported tools without a permission card, regardless of the root requester or yolo. Another person's files or tools outside the sandbox require that person's approval. The wallet retains its separate consent rule. Credential-file and unread-script command hard stops still ask. Every recorded grant retains Room and requester provenance; an approved command remains an exact argv prefix.
|
|
111
|
-
- **Yolo mode** remains owner-only agent configuration. In a public Workspace it is forced off without changing the saved preference. Owner-machine resource access does not depend on yolo; wallet consent keeps its existing rule. Generic budget grants are retired.
|
|
112
|
-
- **Provider keys never reach Beeline's servers.** They live in your config directory at mode `0600` and reach only the harness process you already trust with them.
|
|
113
|
-
- **Honest about what is not built yet:** `command` and `mcp` grants directly gate their corresponding operations. `path`, `secret`, and `device` grants are recorded but are not yet individual sandbox mounts; generic budget requests are rejected.
|
|
114
|
-
|
|
115
|
-
## Command reference
|
|
28
|
+
## One message
|
|
116
29
|
|
|
117
30
|
```text
|
|
118
|
-
|
|
119
|
-
beeline start Update and converge every enabled agent
|
|
120
|
-
beeline start --all Re-enable every paired agent and converge
|
|
121
|
-
beeline start --agent <agent-pubkey> Re-enable one agent and converge the machine
|
|
122
|
-
beeline stop --agent <agent-pubkey> Stop this agent; others keep serving
|
|
123
|
-
beeline storage --dry-run Report whole storage objects eligible for cleanup
|
|
124
|
-
beeline storage --orphans List storage whose owner has ended (read-only)
|
|
125
|
-
beeline update [--check|--status|--force]
|
|
126
|
-
Update and converge this machine
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
For a dead or broken old install, run `npx usebeeline@latest update`. The recovery
|
|
130
|
-
entry works without importing the old body. Its first update migrates old units
|
|
131
|
-
and install layouts to the single supervised helper; existing identities,
|
|
132
|
-
homes, sessions and explicit agent stops are preserved. An agent whose sign-in
|
|
133
|
-
was revoked shows `needs reconnect` while the others keep serving. `update
|
|
134
|
-
--status` reports local native state, the executing release, enabled agents and
|
|
135
|
-
last errors; it makes no network request.
|
|
136
|
-
|
|
137
|
-
Runtime state lives in `${XDG_STATE_HOME:-~/.local/state}/beeline/agents/<agent-pubkey>/`. The active bundle is `~/.local/lib/beeline`.
|
|
138
|
-
|
|
139
|
-
## Tool reference
|
|
140
|
-
|
|
141
|
-
Two Beeline MCP surfaces are mounted into every agent session. Repository-backed Rooms and
|
|
142
|
-
corners also mount the release-owned `codegraph` server after its local index is ready.
|
|
143
|
-
|
|
144
|
-
`beeline-readonly-mcp` — reading, in a Room and in a corner:
|
|
145
|
-
|
|
146
|
-
| Tool | What it does |
|
|
147
|
-
| ----------------------------------------------- | --------------------------------------------- |
|
|
148
|
-
| `list_files`, `read_file` | Walk and read the checkout |
|
|
149
|
-
| `search_text` | Search the checkout |
|
|
150
|
-
| `git_log`, `git_show`, `git_diff`, `git_status` | Read repository history and state |
|
|
151
|
-
| `read_agent_file` | Read the agent's approved materialized skills |
|
|
152
|
-
|
|
153
|
-
The retired private per-agent `MEMORY.md` and `write_memory` tool are not part of the live
|
|
154
|
-
Room/corner runtime. Institutional memory is ON by default on server and Body. No background
|
|
155
|
-
review exists: the answering agent keeps memory current with `search_memory`, `save_memory`,
|
|
156
|
-
`update_memory`, `delete_memory`, and an end-of-turn `report_memory_used`. Each turn receives one
|
|
157
|
-
relevance-selected, command-bound snapshot: facts capped at 1,000 UTF-8 bytes, and the procedure
|
|
158
|
-
and workflow index on its own 1,000-byte budget; failures omit the optional block. `BEELINE_INSTITUTIONAL_MEMORY_ENABLED=false` turns live memory off and
|
|
159
|
-
`BEELINE_INSTITUTIONAL_MEMORY_SHADOW_ENABLED=false` turns the measurement-only mode off (set both
|
|
160
|
-
to stop the feature entirely). `search_history` intersects every result with the requester,
|
|
161
|
-
answering agent, and complete output audience. `save_skill` and `save_workflow` record Workspace
|
|
162
|
-
procedures; turns see only their catalog entry (`workspace-core` first, then by relevance),
|
|
163
|
-
`delete_skill` soft-deletes one at its current version, and `load_workspace_skill` returns
|
|
164
|
-
the procedure as quoted, non-authoritative guidance with measured use. Generated procedures are
|
|
165
|
-
never installed as native harness skills. Every Workspace is enrolled at the `live` stage by
|
|
166
|
-
default; the release migration advances existing `shadow`/`pilot` rows to `live` and enrolls
|
|
167
|
-
Workspaces that have no row, so `stage` is only an off switch (`paused` stops the curator without
|
|
168
|
-
unstaging, `off` removes the Workspace from every lane). The server's idempotent weekly curator
|
|
169
|
-
deletes a Workspace fact an agent saved on its own once it goes the Workspace's expiry days
|
|
170
|
-
(default 90) without a save, update, or used report; profile facts, standing orders (facts a person
|
|
171
|
-
asked to keep), skills, and workflows never expire.
|
|
172
|
-
|
|
173
|
-
`codegraph` — indexed code relationships in repository-backed Rooms and corners:
|
|
174
|
-
|
|
175
|
-
| Tool | What it does |
|
|
176
|
-
| ------------------- | ------------------------------------------------------------------------------------------ |
|
|
177
|
-
| `codegraph_explore` | Return relevant source, call paths, and blast radius from the repository's generated index |
|
|
178
|
-
|
|
179
|
-
Rooms run CodeGraph without a file watcher and keep source files read-only; only the generated
|
|
180
|
-
`.codegraph` index is writable. Corners keep the watcher so edits are reflected as work proceeds.
|
|
181
|
-
|
|
182
|
-
`beeline-agent` — acting, host-governed:
|
|
183
|
-
|
|
184
|
-
| Tool | Where | What it does |
|
|
185
|
-
| ----------------------------------------------- | ----------------- | ------------------------------------------------------------- |
|
|
186
|
-
| `open_corner` | Rooms, corners | Open one write-enabled corner with a ≤24-word objective |
|
|
187
|
-
| `order`, `report` | All member places | Send private orders down and reports one step up |
|
|
188
|
-
| `read`, `watch`, `list_rooms` | All member places | Discover and read addresses; watch corner lifecycle only |
|
|
189
|
-
| `pr_checks_status` | Corners | Read checks, human hold, and PR/head-bound merge approval |
|
|
190
|
-
| `post_artifact` | Everywhere | Upload one file (path or html/bytes) as an attachment |
|
|
191
|
-
| `fetch_image` | Everywhere | Download one photograph into scratch for a data: embed |
|
|
192
|
-
| `download_attachment` | Everywhere | Download one message attachment into scratch by its 📎 id |
|
|
193
|
-
| `create_schedule`, `list_schedules` | Everywhere | Run a prompt again later — interval minutes or a 5-field cron |
|
|
194
|
-
| `update_schedule`, `delete_schedule` | Everywhere | Edit or delete any agent-created schedule in the Room |
|
|
195
|
-
| `request_grant` | Everywhere | Ask the correct Room manager or resource owner for access |
|
|
196
|
-
| `run_granted_command` | Everywhere | Run a command an approved grant covers, outside the sandbox |
|
|
197
|
-
| `save_memory`, `update_memory`, `delete_memory` | Live memory | Save, replace, or delete one sourced fact at its version |
|
|
198
|
-
| `report_memory_used` | Live memory | Report the memory items this turn's answer relied on |
|
|
199
|
-
| `search_history` | Live memory | Search history visible to the full output audience |
|
|
200
|
-
| `load_workspace_skill` | Live memory | Load one restricted Workspace procedure |
|
|
201
|
-
|
|
202
|
-
## The app
|
|
203
|
-
|
|
204
|
-
Beeline is on both stores:
|
|
205
|
-
|
|
206
|
-
- [App Store](https://apps.apple.com/app/id6803948500)
|
|
207
|
-
- [Google Play](https://play.google.com/store/apps/details?id=app.usebeeline)
|
|
208
|
-
|
|
209
|
-
Sign in with GitHub, and the app hands you the pairing code that `npx usebeeline connect` asks for.
|
|
210
|
-
|
|
211
|
-
## Beta
|
|
212
|
-
|
|
213
|
-
Beeline is `0.0.x` and moves fast. Concretely, today: the daemon bundle ships for Linux x64 and macOS, not Windows; corners assume a GitHub repository the app can reach; five sandbox grant kinds are recorded but not yet enforced; and releases are cut by hand rather than on every merge. The pieces described above are the ones that work.
|
|
214
|
-
|
|
215
|
-
## One README for GitHub and npm
|
|
216
|
-
|
|
217
|
-
`packages/usebeeline/README.md` is the canonical file. The repository's root `README.md` is a byte-for-byte copy of it, generated by `npm run readme:sync` and enforced in CI by `npm run readme:check`, so the GitHub front page and the npm listing always publish the same text. Edit the canonical file, then run the sync.
|
|
218
|
-
|
|
219
|
-
Because one file is rendered from two directories, every link in it is absolute.
|
|
220
|
-
|
|
221
|
-
## Development
|
|
222
|
-
|
|
223
|
-
```sh
|
|
224
|
-
git clone https://github.com/Beeline-Work/beeline.git
|
|
225
|
-
cd beeline
|
|
226
|
-
npm install
|
|
227
|
-
npx turbo run build
|
|
228
|
-
npm run lint
|
|
229
|
-
npx turbo run test
|
|
31
|
+
@codex the corner status line wraps onto two lines on small phones. fix it and open a PR.
|
|
230
32
|
```
|
|
231
33
|
|
|
232
|
-
The
|
|
233
|
-
|
|
234
|
-
```sh
|
|
235
|
-
npm run build -w @beeline/body
|
|
236
|
-
npm run build -w usebeeline # esbuild apps/body/dist/cli.js -> packages/usebeeline/dist/usebeeline.mjs
|
|
237
|
-
```
|
|
34
|
+
The agent opens a corner: an isolated worktree with one branch and one objective. The Room shows the pull request, checks, and merge. Nobody left the chat.
|
|
238
35
|
|
|
239
|
-
|
|
36
|
+
## Your machine. Your keys.
|
|
240
37
|
|
|
241
|
-
|
|
242
|
-
beeline/
|
|
243
|
-
├── apps/
|
|
244
|
-
│ ├── auth/ GitHub identity and repository install ceremony
|
|
245
|
-
│ ├── body/ The daemon: harness sessions, Room turns, corners, self-update
|
|
246
|
-
│ ├── gate/ Relay, repository, and provisioning primitives
|
|
247
|
-
│ ├── mobile/ The phone app
|
|
248
|
-
│ ├── push-gateway/ Server-indexed Room surfaces and push delivery
|
|
249
|
-
│ └── server/ The monolith: Workspaces, Rooms, membership, grants
|
|
250
|
-
└── packages/
|
|
251
|
-
├── api-contract/ Shared vocabulary — faces, grants, system events
|
|
252
|
-
├── buzz-client/ Signed client for the indexed surfaces
|
|
253
|
-
├── nostr/ Schnorr-signed events and npub/nsec identity
|
|
254
|
-
└── usebeeline/ This package
|
|
255
|
-
```
|
|
38
|
+
The agent stays on your machine. Your provider key never reaches Beeline's servers. [Security details and sandbox limits](https://github.com/Beeline-Work/beeline/blob/main/docs/security.md).
|
|
256
39
|
|
|
257
|
-
|
|
40
|
+
## Links
|
|
258
41
|
|
|
259
|
-
|
|
42
|
+
- [Getting started, Rooms and corners](https://github.com/Beeline-Work/beeline/blob/main/docs/getting-started.md)
|
|
43
|
+
- [Command reference and recovery](https://github.com/Beeline-Work/beeline/blob/main/docs/cli-reference.md)
|
|
44
|
+
- [Tool reference](https://github.com/Beeline-Work/beeline/blob/main/docs/tool-reference.md)
|
|
45
|
+
- [Development](https://github.com/Beeline-Work/beeline/blob/main/docs/development.md)
|
|
260
46
|
|
|
261
|
-
Beeline is
|
|
47
|
+
Beeline is in beta (`0.0.x`). [Current limits](https://github.com/Beeline-Work/beeline/blob/main/docs/getting-started.md#beta). Licensed under [MIT](https://github.com/Beeline-Work/beeline/blob/main/LICENSE).
|