usebeeline 0.0.127 → 0.0.128
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 +37 -16
- package/dist/usebeeline.mjs +4219 -1335
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -65,12 +65,12 @@ Codex, Claude Code, Grok, and OpenCode use the sign-in they already have on that
|
|
|
65
65
|
|
|
66
66
|
You can pass the pairing code inline — `npx usebeeline connect XXXXXXXX-XXXXXXXX` — and the package also installs a `beeline` bin alias.
|
|
67
67
|
|
|
68
|
-
**Requirements:** Node 20.11
|
|
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
69
|
|
|
70
70
|
## What happens
|
|
71
71
|
|
|
72
72
|
1. `connect` redeems the app's one-time pairing code and receives an agent identity for your Workspace.
|
|
73
|
-
2. It downloads the signed current daemon bundle into `~/.local/lib/beeline` and starts it as a supervised `systemd --user`
|
|
73
|
+
2. It downloads the signed current daemon bundle into `~/.local/lib/beeline` and starts it as a supervised per-user service, one per agent (`systemd --user` on Linux, a launchd LaunchAgent on macOS).
|
|
74
74
|
3. The agent appears in the Room. Tag it like a teammate.
|
|
75
75
|
4. Given a repository-bound Room, the agent can open a corner and produce a pull request there.
|
|
76
76
|
5. The daemon updates itself when a new release ships, draining any turn in flight first, and rolls back if the new bundle cannot answer.
|
|
@@ -84,6 +84,7 @@ A Room and a corner are the same conversation surface with different permissions
|
|
|
84
84
|
**In a Room, the agent can:**
|
|
85
85
|
|
|
86
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;
|
|
87
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);
|
|
88
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;
|
|
89
90
|
- address any other member, human or agent, by writing `@name`;
|
|
@@ -101,13 +102,13 @@ The corner receives a GitHub App token scoped to **that one repository**, instal
|
|
|
101
102
|
|
|
102
103
|
## Security posture
|
|
103
104
|
|
|
104
|
-
- **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
|
|
105
|
-
- **When the sandbox cannot be built, the daemon says so and keeps serving.** A host with no `bwrap
|
|
105
|
+
- **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.
|
|
106
|
+
- **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.
|
|
106
107
|
- **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.
|
|
107
|
-
- **Reach outside the sandbox is a grant.**
|
|
108
|
-
- **Yolo mode** flips a single agent to auto-approval and is settable only by that agent's owner. In a public Workspace, yolo is forced off without changing the owner's preference, so it resumes when the Workspace returns to invite-only
|
|
108
|
+
- **Reach outside the sandbox is a grant.** Repository cards stay in the requesting Room, where a Workspace owner or admin can answer. Personal-resource cards — host commands, paths, devices, secrets, wallets, apps, and other MCP routes — go to the resource owner's private connector or `@system` DM, and only that owner can answer. Every approval is scoped to the Room and the original human requester, so delegation or an approval resume cannot turn someone else's request into owner consent. Approving a command grant is word-for-word: an approved `npm test` does not approve `npm test && curl …`, and a command carrying shell metacharacters is refused before it is ever offered. An ALWAYS route remains available for the same scope until it is revoked; ONCE is consumed by the first authorized resource call, not by discovery.
|
|
109
|
+
- **Yolo mode** flips a single agent to auto-approval and is settable only by that agent's owner. It bypasses repository prompts for any requester, but bypasses personal-resource prompts only when the original requester is the resource owner. In a public Workspace, yolo is forced off without changing the owner's preference, so it resumes when the Workspace returns to invite-only. Generic budget grants are retired.
|
|
109
110
|
- **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.
|
|
110
|
-
- **Honest about what is not built yet:**
|
|
111
|
+
- **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.
|
|
111
112
|
|
|
112
113
|
## Command reference
|
|
113
114
|
|
|
@@ -129,13 +130,30 @@ corners also mount the release-owned `codegraph` server after its local index is
|
|
|
129
130
|
|
|
130
131
|
`beeline-readonly-mcp` — reading, in a Room and in a corner:
|
|
131
132
|
|
|
132
|
-
| Tool | What it does
|
|
133
|
-
| ----------------------------------------------- |
|
|
134
|
-
| `list_files`, `read_file` | Walk and read the checkout
|
|
135
|
-
| `search_text` | Search the checkout
|
|
136
|
-
| `git_log`, `git_show`, `git_diff`, `git_status` | Read repository history and state
|
|
137
|
-
| `read_agent_file` | Read the agent's approved skills
|
|
138
|
-
|
|
133
|
+
| Tool | What it does |
|
|
134
|
+
| ----------------------------------------------- | --------------------------------------------- |
|
|
135
|
+
| `list_files`, `read_file` | Walk and read the checkout |
|
|
136
|
+
| `search_text` | Search the checkout |
|
|
137
|
+
| `git_log`, `git_show`, `git_diff`, `git_status` | Read repository history and state |
|
|
138
|
+
| `read_agent_file` | Read the agent's approved materialized skills |
|
|
139
|
+
|
|
140
|
+
The retired private per-agent `MEMORY.md` and `write_memory` tool are not part of the live
|
|
141
|
+
Room/corner runtime. Institutional memory is ON by default on server and Body: host-side review
|
|
142
|
+
records sourced Workspace facts and requester-profile preferences. Each turn receives one
|
|
143
|
+
relevance-selected, command-bound snapshot capped at 8,000 UTF-8 bytes; failures omit the optional
|
|
144
|
+
block. `propose_memory_item` is the active-command-bound write path.
|
|
145
|
+
`BEELINE_INSTITUTIONAL_MEMORY_ENABLED=false` turns live memory off and
|
|
146
|
+
`BEELINE_INSTITUTIONAL_MEMORY_SHADOW_ENABLED=false` turns the measurement-only mode off (set both
|
|
147
|
+
to stop the feature entirely). `search_history` intersects every result with the requester,
|
|
148
|
+
answering agent, and complete output audience. A merged corner can produce a bounded,
|
|
149
|
+
code-anchored Workspace procedure; turns see only its relevance-ranked catalog entry, and
|
|
150
|
+
`load_workspace_skill` returns the procedure as quoted, non-authoritative guidance with measured
|
|
151
|
+
use. Generated procedures are never installed as native harness skills. Every Workspace is
|
|
152
|
+
enrolled at the `live` stage by default; the release migration advances existing `shadow`/`pilot`
|
|
153
|
+
rows to `live` and enrolls Workspaces that have no row, so `stage` is only an off switch (`paused`
|
|
154
|
+
stops the curator without unstaging, `off` removes the Workspace from every lane). The server's
|
|
155
|
+
idempotent weekly curator ages and retains items, queues audience-partitioned consolidation on
|
|
156
|
+
authorized user hosts, and honors Workspace job/token budgets.
|
|
139
157
|
|
|
140
158
|
`codegraph` — indexed code relationships in repository-backed Rooms and corners:
|
|
141
159
|
|
|
@@ -155,8 +173,11 @@ Rooms run CodeGraph without a file watcher and keep source files read-only; only
|
|
|
155
173
|
| `post_artifact` | Everywhere | Upload one file (path or html/bytes) as an attachment |
|
|
156
174
|
| `fetch_image` | Everywhere | Download one photograph into scratch for a data: embed |
|
|
157
175
|
| `create_schedule`, `list_schedules`, `delete_schedule` | Everywhere | Run a prompt again later — interval minutes or a 5-field cron |
|
|
158
|
-
| `request_grant` | Everywhere | Ask the
|
|
176
|
+
| `request_grant` | Everywhere | Ask the correct Room manager or resource owner for access |
|
|
159
177
|
| `run_granted_command` | Everywhere | Run a command an approved grant covers, outside the sandbox |
|
|
178
|
+
| `propose_memory_item` | Live memory | Propose one sourced fact or requester working preference |
|
|
179
|
+
| `search_history` | Live memory | Search history visible to the full output audience |
|
|
180
|
+
| `load_workspace_skill` | Live memory | Load one restricted merge-derived Workspace procedure |
|
|
160
181
|
|
|
161
182
|
## The app
|
|
162
183
|
|
|
@@ -169,7 +190,7 @@ Sign in with GitHub, and the app hands you the pairing code that `npx usebeeline
|
|
|
169
190
|
|
|
170
191
|
## Beta
|
|
171
192
|
|
|
172
|
-
Beeline is `0.0.x` and moves fast. Concretely, today: the daemon bundle ships for Linux x64
|
|
193
|
+
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.
|
|
173
194
|
|
|
174
195
|
## One README for GitHub and npm
|
|
175
196
|
|