@openscout/scout 0.2.94 → 0.2.95

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/NOTICE ADDED
@@ -0,0 +1,14 @@
1
+ OpenScout
2
+ Copyright 2026 Arach Tchoupani
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
package/README.md CHANGED
@@ -1,423 +1,245 @@
1
- # scout
1
+ <p align="center">
2
+ <a href="https://openscout.app">
3
+ <img src="https://openscout.app/og.png" alt="Scout — one place for all your agents, local-first and neutral by design" width="100%" />
4
+ </a>
5
+ </p>
2
6
 
3
- > **Requires [Bun](https://bun.sh).** Scout uses Bun as its runtime. If you don't have it: `brew install bun`
7
+ <p align="center">
8
+ <strong>The coordination layer for the coding agents you already run.</strong><br />
9
+ Discover agents, dispatch work, send messages, and follow progress across the tools you already use.
10
+ </p>
4
11
 
5
- Install:
12
+ <p align="center">
13
+ <a href="https://www.npmjs.com/package/@openscout/scout"><img alt="npm version" src="https://img.shields.io/npm/v/@openscout/scout?style=flat-square&amp;label=npm&amp;color=94d59a&amp;labelColor=171a16" /></a>
14
+ <a href="https://bun.sh"><img alt="Bun 1.3 or newer" src="https://img.shields.io/badge/runtime-Bun_%E2%89%A5_1.3-f7f4ea?style=flat-square&amp;labelColor=171a16&amp;logo=bun" /></a>
15
+ <a href="https://github.com/oscout/scout/blob/main/LICENSE"><img alt="Apache 2.0 license" src="https://img.shields.io/badge/license-Apache--2.0-f7f4ea?style=flat-square&amp;labelColor=171a16" /></a>
16
+ <a href="https://openscout.app"><img alt="OpenScout project homepage" src="https://img.shields.io/badge/project-openscout.app-dde6d8?style=flat-square&amp;labelColor=171a16" /></a>
17
+ </p>
6
18
 
7
- ```bash
8
- bun add -g @openscout/scout
9
- scout --help
10
- ```
11
-
12
- `@openscout/scout` is the public package name. It installs the `scout` command and carries the bundled broker/runtime and web UI. Installing it does not start services; commands such as `scout setup`, `scout up`, and `scout server start` activate them explicitly.
13
-
14
- ## Canonical Flow
15
-
16
- ```bash
17
- scout setup
18
- scout doctor
19
- scout whoami
20
- scout who
21
- scout latest
22
- scout runtimes
23
- scout providers usage
24
- scout ask --project ../talkie --harness claude "can you review our docs?"
25
- ```
26
-
27
- `scout setup` is the canonical onboarding entry point. It creates or updates:
28
-
29
- - `~/Library/Application Support/OpenScout/settings.json`
30
- - `~/Library/Application Support/OpenScout/relay-agents.json` for compatibility with the existing machine-local agent registry
31
- - `.openscout/project.json` for the current repo when needed
32
-
33
- It also discovers local and project-backed agents from your configured workspace roots, installs the base Scout service, attempts to start it, and ensures Caddy is available for the local `scout.local` edge. On macOS, setup installs missing Caddy with `brew install caddy`; otherwise install Caddy yourself or set `OPENSCOUT_CADDY_BIN`.
34
-
35
- `scout doctor --fix` asks the native `scoutd` daemon to run conservative repairs
36
- when that daemon version exposes them. Use `scout doctor --fix --yes` for
37
- non-interactive install scripts; older or missing `scoutd` binaries simply leave
38
- the normal doctor report intact.
39
-
40
- For a CLI-only onboarding pass, save the same identity, workspace roots, and
41
- runtime choice used by the app flows:
42
-
43
- ```bash
44
- scout config set name "Ada"
45
- scout setup --source-root ~/dev --default-harness codex
46
- scout runtimes
47
- ```
48
-
49
- `scout setup` creates `~/.openscout/config.json` when it is missing. Use
50
- `scout init` when you only want to rewrite the local host/port config, for
51
- example `scout init --force --broker-port 43110 --web-port 43120
52
- --pairing-port 43130`.
19
+ ---
53
20
 
54
- When the input is not a known subcommand and includes exactly one `@agent` mention, Scout treats it as an implicit `ask`: it records durable work with the broker, waits for the target to acknowledge or complete immediately, and leaves later completion visible through the conversation or flight follow-up. For example:
21
+ Scout is a local-first control plane for AI agents. It sits underneath Claude
22
+ Code, Codex, Cursor, Pi, and other harnesses, giving them one durable broker for
23
+ discovery, messages, work, and routing without moving agents out of the tools
24
+ where they already run.
55
25
 
56
- ```bash
57
- scout @dewey can you review our docs?
58
- scout hey @hudson please inspect the failing test
59
- scout --as vox --timeout 900 @talkie take another pass on the keyboard port
60
- ```
26
+ ## What Scout gives you
61
27
 
62
- Reserved leading profile names are deterministic fresh-session routes for the
63
- current project, not shorthand agent names:
28
+ | Capability | What it means |
29
+ | --- | --- |
30
+ | **Discover** | See agents, projects, sessions, and available runtimes from one place. |
31
+ | **Coordinate** | Send an update, dispatch owned work, or route by project and harness explicitly. |
32
+ | **Follow** | Keep requests, replies, progress, and durable follow-up handles visible across surfaces. |
33
+ | **Reach** | Coordinate through the local broker first, with optional mesh reachability across trusted machines. |
64
34
 
65
- ```bash
66
- scout ask Fable to review the parser
67
- scout ask Opus high to fix the tests
68
- scout ask --profile kimi "review the parser"
69
- ```
35
+ Agents keep owning their processes and transcripts. Scout owns the coordination
36
+ records it creates and exposes the same broker-backed state through the CLI,
37
+ TUI, web UI, and optional native apps.
70
38
 
71
- The broker owns each profile's harness/model/default mapping. `--effort` is an
72
- optional Fable/Opus override; Kimi and Grok reject it until their ACP transports
73
- expose reasoning-effort control. Direct `scout ask --to fable ...` always means
74
- an existing target named `fable`; it is never silently converted to a profile.
39
+ ## Start here
75
40
 
76
- For a natural-language existing target, use an explicit `agent` prefix and
77
- `to` delimiter:
41
+ Scout requires [Bun 1.3 or newer](https://bun.sh). The full broker and service
42
+ package currently targets Apple Silicon macOS.
78
43
 
79
44
  ```bash
80
- scout ask agent Composer Review to fix the tests
45
+ bun add -g @openscout/scout
46
+ scout setup
47
+ scout doctor
81
48
  ```
82
49
 
83
- Scout normalizes that name to exact handle `@composer-review`. Zero or multiple
84
- agent/session matches fail with disambiguation instead of choosing by locality
85
- or similarity.
86
-
87
- ## One Routing Model
50
+ Prefer npm for global packages? `npm install -g @openscout/scout` installs the
51
+ same package; Bun is still required at runtime.
88
52
 
89
- The routing rules do not change by harness, UI, or host:
53
+ Installing the package does not silently start services. `scout setup`
54
+ configures the local broker and attempts to start it explicitly; `scout doctor`
55
+ then verifies that the broker and project inventory are healthy.
90
56
 
91
- - one target -> DM
92
- - group coordination -> explicit channel
93
- - everyone -> `scout broadcast`
94
- - tell / update -> `scout send`
95
- - owned work / requested reply -> `scout ask`
96
- - follow-up stays in the same DM or explicit channel
57
+ ## Make your first handoff
97
58
 
98
- Short mutable callback names are broker-owned route aliases:
99
-
100
- ```bash
101
- scout alias set review --to scope.main.arts-mac-mini-local
102
- scout alias set patch --to session:019eff52-9347-7470-ba5c-6bfe99d8dd83
103
- scout alias resolve patch
104
- scout alias repoint patch --to session:<new-id> --if-revision 1
105
- scout alias unset patch --if-revision 2
106
- scout ask --to alias:review "take a fresh pass"
107
- ```
108
-
109
- Aliases are scoped to the current project/local host unless `--project` or
110
- `--host` is supplied. They point at existing targets and never create or rename
111
- cards. Native bare agent names win; `alias:<name>` is the explicit form.
112
-
113
- The lowest-churn fresh start is **capability first**: pass the project path and
114
- optional harness, then let the broker choose or create the concrete worker.
115
- Do not guess generic names like `claude.main` just because you want Claude. Use
116
- the returned `ref`, flight, conversation, work, or session handle for follow-up.
117
- If the worker proves useful, promote it to a named/pinned sibling after the fact
118
- using the broker-suggested handle when one is returned.
119
-
120
- When sender, target, or recent activity is unclear, the shortest orientation loop is:
59
+ Route work by project and harness instead of guessing an agent name:
121
60
 
122
61
  ```bash
123
62
  scout whoami
124
- scout inbox --latest 10 --json
125
- scout who
126
- scout channel triage --latest 10 --json
127
- scout latest
128
- scout latest --channel triage --messages --limit 3
63
+ scout runtimes
64
+ scout ask --project . --harness codex \
65
+ "Review this repository and return the three highest-leverage improvements."
129
66
  ```
130
67
 
131
- Use `channel <name> --latest <count> --json` for the cheapest agent-facing
132
- channel catch-up. It reads broker messages for that channel and exits. Use
133
- `latest --channel <name>` when you want the compact activity projection instead.
134
- Use `inbox --latest <count> --json` for direct messages addressed to the
135
- current inferred agent identity.
136
-
137
- CLI agents should use these commands rather than curling broker HTTP endpoints
138
- or reading relay files directly.
139
-
140
- ### Sender identity
141
-
142
- `scout send`, `scout ask`, and `scout broadcast` all use the
143
- same default sender identity. Most of the time you should let Scout infer it
144
- from your current context. For agent-to-agent delegation, check `scout whoami`
145
- first and use `--as` whenever the acting project agent must be preserved
146
- explicitly across shells, hosts, or bridges.
147
-
148
- `scout watch` follows a conversation or channel; it does not choose a sender.
149
-
150
- Inspect the current default once:
68
+ Scout resolves or starts a suitable worker, records the request, and returns a
69
+ durable handle. Continue the same work with the returned ref:
151
70
 
152
71
  ```bash
153
- scout whoami
72
+ scout ask --ref <ref> "Now check the tests."
154
73
  ```
155
74
 
156
- Default sender resolution is:
157
-
158
- 1. `--as <agent>` for that command
159
- 2. `OPENSCOUT_AGENT` when the current session already has a bound agent
160
- 3. the current project-scoped sender inferred from your working directory
161
- 4. your operator name when you're outside a project context
162
-
163
- Coding-agent hosts use the project-scoped sender for `scout ask` automatically when
164
- the CLI detects a host harness signal:
75
+ ## One routing model
165
76
 
166
- - **Scout-managed:** `OPENSCOUT_AGENT`, `OPENSCOUT_MANAGED_AGENT`
167
- - **Cursor:** `CURSOR_AGENT=1`
168
- - **Claude Code:** `CLAUDECODE=1`, `CLAUDE_CODE_CHILD_SESSION`, `CLAUDE_CODE_REMOTE`, session ids
169
- - **Codex:** `CODEX_THREAD_ID`, `CODEX_CI=1`, `CODEX_SANDBOX`, proposed `AGENT=codex`
77
+ | You mean… | Use… |
78
+ | --- | --- |
79
+ | “Heads up.” | `scout send --to <target> "message"` |
80
+ | “Do this and get back to me.” | `scout ask --to <target> "request"` |
81
+ | “Start fresh in this project.” | `scout ask --project . --harness <harness> "request"` |
82
+ | “Continue that exact work.” | `scout ask --ref <ref> "follow-up"` |
83
+ | “Coordinate a group.” | `scout send --channel <name> "message"` |
170
84
 
171
- Run `scout whoami --json` to see which signal matched. Human terminal shells still
172
- default to `operator` unless `--as` or a host signal is present.
85
+ One explicit target is a direct message. Group coordination uses an explicit
86
+ channel. Shared broadcast is opt-in, and routing lives in structured metadata
87
+ rather than accidental mentions in message text.
173
88
 
174
- That keeps ordinary collaboration simple:
175
-
176
- ```bash
177
- scout send --to vox "heads up: I’m on the runtime side"
178
- scout ask --to vox "can you confirm the broker fix?"
179
- scout ask --project ../talkie --harness claude "review the build spec"
180
- scout ask --harness codex "review this in a fresh Codex worker"
181
- ```
89
+ ## What ships in this package
182
90
 
183
- Known on-demand or offline agents are supposed to wake on first delivery. `scout send` and `scout ask` should be the default path; `scout up` is for explicit prewarming or for creating/registering a target the broker does not know yet.
184
-
185
- Prefer `scout send --to <agent> "message"` for tells. Legacy
186
- `scout send "@agent message"` remains for compatibility, but it makes the
187
- message body participate in route discovery. With `--to`, quoted handles inside
188
- the text stay text.
189
-
190
- ### File-backed input
191
-
192
- Use a file when the primary prompt or message is too large or too structured to
193
- belong in shell argv.
194
-
195
- Nomenclature:
196
-
197
- - **Prompt file**: the primary work prompt for `scout ask`; pass it with `--prompt-file <path>`.
198
- - **Message file**: the message body for `scout send`, `scout broadcast`, or `scout speak`; pass it with `--message-file <path>`.
199
- - **Body file**: shared alias for either command family; `--body-file <path>` reads the same UTF-8 text into the broker `body` field.
200
-
201
- Examples:
202
-
203
- ```bash
204
- scout ask --to hudson --prompt-file ./handoff.md
205
- scout @hudson --prompt-file ./review-request.md
206
- scout send --channel triage --message-file ./status-update.md
207
- scout broadcast --message-file ./maintenance-window.md
91
+ ```text
92
+ Claude Code ─┐
93
+ Codex ─┼── local Scout broker ── CLI · Monitor · Web
94
+ Other agents ─┘ messages · work · routing
95
+ │
96
+ └── optional surfaces: Rust TUI · macOS · iOS
208
97
  ```
209
98
 
210
- The file is read locally before dispatch. The local broker still receives one
211
- structured request containing the target, body, sender, routing fields, and
212
- metadata, so the rest of the broker and mesh path can choose the right transport
213
- without depending on shell argument size.
214
-
215
- ### One-to-one delegation
216
-
217
- When one project agent is delegating concrete work to one other agent, treat it
218
- as a private handoff:
219
-
220
- - keep it in a DM, not `channel.shared`
221
- - preserve the acting project agent as the sender
222
- - keep progress and completion in that same DM
223
-
224
- Today the best CLI surface for that handoff is `scout ask`, because it opens a
225
- DM by default when no explicit channel is pinned:
99
+ `@openscout/scout` installs:
226
100
 
227
- ```bash
228
- scout whoami
229
- scout ask --to hudson "Build the editable CodeViewer and report back with the integration-ready surface."
230
- ```
101
+ - the `scout` command;
102
+ - the bundled local broker and runtime;
103
+ - the local web control surface opened by `scout server open`;
104
+ - the bundled terminal console launched by `scout monitor`.
231
105
 
232
- If the invoking shell or host path might not already be bound to the acting
233
- project agent, make it explicit:
106
+ The Rust TUI launched by `scout tui` and the macOS and iOS apps are optional
107
+ OpenScout surfaces; they are not installed by the npm package. They read and
108
+ write the same coordination state when present.
234
109
 
235
- ```bash
236
- scout ask --as premotion.master.mini --to hudson "Build the editable CodeViewer and report back with the integration-ready surface."
237
- ```
238
-
239
- Use `channel.shared` only when the work is genuinely for a group, not for a
240
- single owner.
110
+ ## CLI at a glance
241
111
 
242
- ### Label-scoped catch-up
112
+ | Goal | Commands |
113
+ | --- | --- |
114
+ | Bootstrap and verify | `scout setup`, `scout doctor`, `scout config` |
115
+ | Find your bearings | `scout whoami`, `scout who`, `scout runtimes`, `scout inbox` |
116
+ | Coordinate | `scout send`, `scout ask`, `scout broadcast`, `scout watch` |
117
+ | Follow activity | `scout latest`, `scout flight`, `scout label`, `scout tail` |
118
+ | Operate local agents | `scout up`, `scout down`, `scout ps`, `scout restart` |
119
+ | Open a bundled surface | `scout monitor`, `scout server open` |
120
+ | Open an optional surface | `scout tui`, `scout menu` |
121
+ | Connect tools | `scout mcp`, `scout pair`, `scout mesh` |
243
122
 
244
- Use labels to tie related asks together without creating a new workflow object:
123
+ Run `scout --help` for the complete command list and
124
+ `scout <command> --help` for current flags and examples.
245
125
 
246
- ```bash
247
- scout ask --to hudson --label release:0.2.66 "Review the package bump."
248
- scout ask --to lattices --label release:0.2.66 "Check the install path."
249
- scout label feed release:0.2.66 --since 10m
250
- scout label watch release:0.2.66 --interval 2
251
- scout label brief release:0.2.66
252
- ```
126
+ ## Works with the tools you already use
253
127
 
254
- Labels are plain metadata. They can mean a goal, release, milestone, incident,
255
- or any local convention. `scout label watch` streams a normalized firehose of
256
- matching Scout-owned activity; `scout label brief` gives a compact digest. Scout
257
- does not assign a lifecycle to the label.
128
+ Scout has host integrations for Claude Code, Codex, Cursor, Pi, and Hermes, plus
129
+ MCP, ACP, Slack, Telegram, voice, and webhook paths where those transports are
130
+ configured. The broker provides the shared coordination model; each harness
131
+ keeps its native runtime and workflow.
258
132
 
259
- ### Addressing specific agents
133
+ See the [integration guide](https://github.com/oscout/scout/blob/main/docs/integrations.md)
134
+ for the current package and setup map.
260
135
 
261
- Agent identity has six dimensions: `definitionId`, workspace qualifier, `profile`, `harness`, `model`, `node`. Canonical form:
136
+ ## Advanced CLI reference
262
137
 
263
- ```
264
- @<definitionId>[.<workspaceQualifier>][.profile:<profile>][.harness:<harness>][.model:<model>][.node:<node>]
265
- ```
138
+ <details>
139
+ <summary><strong>Setup and local configuration</strong></summary>
266
140
 
267
- Short `@name` only resolves when exactly one matching agent is available from the current context. If multiple agents share a name (e.g. one Codex-backed, one Claude-backed), pin the dimension you care about with a typed qualifier:
141
+ `scout setup` is the canonical onboarding command. It saves the local identity
142
+ and workspace roots, discovers project-backed agents, installs the base service,
143
+ and attempts to start the broker. A CLI-only setup can make its inputs explicit:
268
144
 
269
145
  ```bash
270
- scout send --to vox.harness:codex "message from hudson: please retry the build"
271
- scout ask --to vox.harness:claude "what did the reviewer flag?"
272
- scout ask --to arc.profile:reviewer "take another pass"
273
- scout ask --to vox.harness:codex.node:mini "run locally on mini"
274
- scout ask --to lattices#codex?5.5 "take task A"
275
- scout ask --to lattices#claude?sonnet "take task B"
146
+ scout config set name "Ada"
147
+ scout setup --source-root ~/dev --default-harness codex
148
+ scout doctor
276
149
  ```
277
150
 
278
- Aliases: `runtime:` = `harness:`, `persona:` = `profile:`, `branch:` / `worktree:` = workspace qualifier. Shorthand `#codex` maps to `harness:codex`; `?sonnet` or `?5.5` maps to `model:<model>`. Dimensions combine in any order.
151
+ Use `scout doctor --fix` for conservative native-daemon repairs when the
152
+ installed daemon supports them. Use `scout init` only when you need to rewrite
153
+ the low-level local host and port configuration.
279
154
 
280
- If direct send/ask still comes back unresolved, treat that as a routing problem, not a mere "target is offline" problem. The right follow-up is to disambiguate the target, inspect broker context with `scout who` / `scout latest`, or create/register the missing identity. Do not default to pushing the bring-up step back onto the operator for a known target.
155
+ See the [install guide](https://github.com/oscout/scout/blob/main/install.md)
156
+ and [quickstart](https://openscout.app/docs/quickstart) for prerequisites,
157
+ filesystem footprint, and first-run success criteria.
281
158
 
282
- For current-project work where the harness is the only important choice, omit
283
- `--to` and `--project`; Scout infers the current project and creates or chooses
284
- a compatible worker:
159
+ </details>
285
160
 
286
- ```bash
287
- scout ask --harness codex "take a fresh pass on this repo"
288
- ```
161
+ <details>
162
+ <summary><strong>Routing, profiles, sessions, and follow-up</strong></summary>
289
163
 
290
- That routes by the current project path and asks the broker to create or choose
291
- a compatible worker. For another repo, pass the repo path explicitly:
164
+ Capability-first routing is the lowest-churn way to start fresh work. Give Scout
165
+ the project and, when it matters, the harness; use a concrete target only when
166
+ you mean one known agent or session.
292
167
 
293
168
  ```bash
294
- scout ask --project ../talkie --harness claude "review the modular build spec"
295
- ```
169
+ # Fresh worker for the current project
170
+ scout ask --harness codex "Review the parser."
296
171
 
297
- Use an exact `--ref` or `session:<id>` only when the intent is to continue prior
298
- context. If the broker returns a friendly worker handle, treat it as the human
299
- mnemonic; promote/pin it only after the routed worker proves useful.
172
+ # Fresh worker through a broker-owned runtime profile
173
+ scout ask --profile kimi "Review the parser."
300
174
 
301
- Local product handoffs use the public Scout address:
175
+ # One known target
176
+ scout ask --to hudson "Check the release package."
302
177
 
303
- ```bash
304
- scout send --to scout "message for the local Scout inbox"
178
+ # Continue from a returned handle or exact session
179
+ scout ask --ref <ref> "Take another pass."
180
+ scout ask --to session:<id> "Continue this exact runtime context."
305
181
  ```
306
182
 
307
- Broker names and concrete node or agent ids are diagnostic details. Normal send
308
- output should say whether the message was sent, not which broker or internal
309
- session handled it. Reusing an existing session is an explicit continuity
310
- choice, not the default.
183
+ One target means a direct message. Groups use explicit channels. `scout send`
184
+ is for durable updates where no response is expected; `scout ask` creates owned
185
+ work with a reply path. Runtime profiles such as Fable, Opus, Kimi, and Grok are
186
+ broker-owned fresh-session routes, not guessed agent names.
311
187
 
312
- Session refs are separate route targets for continuing a concrete bound
313
- session. Use the bare `ref:<suffix>` form in receipts/history, and pass the
314
- suffix with `--ref`; do not encode refs into `@agent#harness?model` identity
315
- syntax.
188
+ See [runtime sessions](https://github.com/oscout/scout/blob/main/docs/runtime-sessions.md)
189
+ and [Scout comms](https://github.com/oscout/scout/blob/main/docs/scout-comms.md)
190
+ for identity dimensions, session continuation, aliases, delivery state, and
191
+ advanced routing grammar.
316
192
 
317
- ```bash
318
- scout ask --ref 7f3a9c21 "continue from that handoff"
319
- scout send --ref 7f3a9c21 "status for that same session"
320
- ```
321
-
322
- Diagnostic views may show both layers, for example:
193
+ </details>
323
194
 
324
- ```text
325
- sent to Scout via DM (ref:7f3a9c21)
326
- ```
195
+ <details>
196
+ <summary><strong>Operator views, files, and local surfaces</strong></summary>
327
197
 
328
- ## Current Commands
198
+ The shortest orientation loop is:
329
199
 
330
200
  ```bash
331
- scout --help
332
- scout version
333
- scout doctor
334
- scout setup
335
- scout runtimes
336
- scout providers usage
337
201
  scout whoami
338
- scout send
339
- scout speak
340
- scout ask
341
- scout watch
202
+ scout inbox --latest 10 --json
342
203
  scout who
343
204
  scout latest
344
- scout broadcast
345
- scout up
346
- scout down
347
- scout ps
348
- scout restart
349
- scout menu
350
- scout pair
351
- scout server start
352
- scout server open
353
- scout tui
354
- scout tui --take mesh
355
- ```
356
-
357
- ### Provider Usage and Orchestration Map
358
-
359
- Read every quota window from the live `/providers` feed without opening the
360
- web UI, or combine those windows with Scout's role/model/provider policy:
361
-
362
- ```bash
363
205
  scout providers usage
364
- scout providers usage --json
365
- scout providers usage --cached
366
- scout providers map
367
- scout providers map --role implementation
368
- scout providers map --json
369
206
  ```
370
207
 
371
- `usage` refreshes the shared service-budget pipeline and prints every available
372
- quota window with percent used and remaining, the local reset time, source, and
373
- observation freshness. `map` derives each window's burn pace, telemetry
374
- confidence, and binding remaining quota, then recommends a model/provider for
375
- product judgment, synthesis, critique, inventory, implementation, and review.
376
- These dispatch roles are recommendations; they do not create durable
377
- `scout role` assignments. `--cached` skips live provider probes when a recent
378
- server snapshot is available; a cold or expired cache still reads providers.
379
-
380
- ### Menu Bar App (`scout menu`)
381
-
382
- On macOS, `scout menu` is the quick launcher for the native menu bar app.
208
+ Use file-backed input when a request is too large or structured for shell argv:
383
209
 
384
210
  ```bash
385
- scout menu
386
- scout menu status
387
- scout menu restart
388
- scout menu quit
211
+ scout ask --to hudson --prompt-file ./review-request.md
212
+ scout send --channel triage --message-file ./status-update.md
389
213
  ```
390
214
 
391
- If you run it from an OpenScout repo checkout, Scout prefers the repo helper at
392
- `apps/macos/bin/openscout-menu.ts`, so it can auto-build and launch the app bundle for you.
393
- Outside the repo, it opens an installed `OpenScout Menu` app when available.
215
+ `scout monitor` opens the bundled terminal console. `scout server open` reuses
216
+ or starts the bundled local web UI. `scout tui` launches the separately built
217
+ Rust TUI when `scout-tui` is installed or available from a source checkout, and
218
+ `scout menu` opens an installed macOS app when available.
394
219
 
395
- ### Web UI (`scout server start`, `scout server open`)
220
+ Run `scout --help` for the current command inventory and
221
+ `scout <command> --help` for all flags.
396
222
 
397
- Runs the current OpenScout web UI used by the repo’s `bun run dev` entry. **Bun must be on your PATH.** Published CLI builds ship `dist/scout-control-plane-web.mjs` and `dist/client/` (Vite build); when `dist/client/index.html` is present, **`scout server start` defaults to static assets** unless you pass `--vite-url` to proxy a dev server.
398
-
399
- ```bash
400
- scout whoami
401
- scout who
402
- scout latest
403
- scout server open
404
- scout server start
405
- scout server start --port 43120
406
- scout server open --path /agents/arc-codex-2.master.mini
407
- scout server start --public-origin http://scout.local
408
- scout server edge --local-name m1
409
- scout server start --vite-url http://127.0.0.1:43173 # SPA dev server
410
- scout server start --static --static-root /custom/client
411
- ```
223
+ </details>
412
224
 
413
- `scout server open` reuses an already-running matching Scout server on that port, or starts one in the background and opens the browser for you. Use `scout server` or `scout server help` for full flags.
225
+ ## Current posture
414
226
 
415
- The application server binds to `0.0.0.0` by default, treats `scout.local` as the local portal name, and derives the node URL as `<machine>.scout.local` unless the user configures a short alias such as `m1`. `scout server edge` publishes `scout.local` plus the node host with Bonjour/mDNS and runs Caddy against the active web port. The managed edge defaults to HTTP on port `80` for zero-cert local browsing. HTTPS remains an explicit opt-in via `--edge-scheme https` or `--edge-scheme both` plus `scout server trust`.
227
+ > Scout is in active v0.x development for high-trust local developer pilots.
228
+ > It is not yet an enterprise-ready, compliance-ready, or hardened multi-tenant
229
+ > runtime. Optional mesh features provide reachability and coordination, not
230
+ > global consensus or exactly-once delivery.
416
231
 
417
- `scout setup` verifies Caddy for this path. The setup command installs it with Homebrew on macOS when `caddy` is not already available, but Scout still runs Caddy directly with the generated `~/.scout/local-edge/Caddyfile` instead of registering a separate Homebrew service. The base LaunchAgent is labelled `app.openscout` and supervises the broker, local edge, web startup, and menu bar app; `scout doctor` prints the exact `launchctl bootout ...` command for the current mode.
232
+ ## Go deeper
418
233
 
419
- When the edge is up but the web app is down, Caddy serves a same-origin "Start Scout" page. The button calls Caddy's internal `/__openscout/web/start` path, which proxies to the always-on broker and starts the web server while keeping the user-facing URL at `scout.local` or `<name>.scout.local`.
234
+ - [OpenScout project homepage](https://openscout.app)
235
+ - [Quickstart](https://openscout.app/docs/quickstart)
236
+ - [Documentation](https://openscout.app/docs)
237
+ - [Architecture](https://openscout.app/docs/architecture)
238
+ - [Current status and scope](https://openscout.app/docs/current-posture)
239
+ - [Public source](https://github.com/oscout/scout)
240
+ - [Issues](https://github.com/oscout/scout/issues)
420
241
 
421
- `packages/web` remains the internal web workspace. Published installs get that same server and client through `@openscout/scout`.
242
+ ## License
422
243
 
423
- For source development, `bun run dev:edge -- --local-name m1` starts the web dev stack and the local edge together. It generates Caddy config against the actual selected dev port, so worktree-specific ports and busy-port fallback still route through `scout.local`.
244
+ Apache-2.0. See the [license](https://github.com/oscout/scout/blob/main/LICENSE)
245
+ and [notice](https://github.com/oscout/scout/blob/main/packages/cli/NOTICE).
package/bin/scoutd CHANGED
Binary file
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "packageName": "@openscout/scout",
4
- "version": "0.2.94",
5
- "commit": "23bcb0d2821b93066f0eb79f88d622777d8170e0",
4
+ "version": "0.2.95",
5
+ "commit": "edcbc2933b914dee199c741ffa986d8c4127a318",
6
6
  "branch": "HEAD",
7
7
  "sourceDirty": false,
8
- "builtAt": "2026-08-29T17:32:28.098Z"
8
+ "builtAt": "2026-08-31T02:14:41.975Z"
9
9
  }
package/dist/main.mjs CHANGED
@@ -100958,7 +100958,7 @@ var init_stdio2 = __esm(() => {
100958
100958
  // ../../apps/desktop/src/shared/product.ts
100959
100959
  var SCOUT_APP_VERSION;
100960
100960
  var init_product = __esm(() => {
100961
- SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.94";
100961
+ SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.95";
100962
100962
  });
100963
100963
 
100964
100964
  // ../../apps/desktop/src/core/mcp/stdio-server-lifecycle.ts
@@ -105022,7 +105022,9 @@ __export(exports_install, {
105022
105022
  runInstallCommand: () => runInstallCommand,
105023
105023
  renderInstallCommandHelp: () => renderInstallCommandHelp,
105024
105024
  parseInstallArgs: () => parseInstallArgs,
105025
- findAppDmgAsset: () => findAppDmgAsset
105025
+ findAppDmgAsset: () => findAppDmgAsset,
105026
+ OPENSCOUT_RELEASE_REPOSITORY: () => OPENSCOUT_RELEASE_REPOSITORY,
105027
+ OPENSCOUT_RELEASE_OWNER: () => OPENSCOUT_RELEASE_OWNER
105026
105028
  });
105027
105029
  import { spawnSync as spawnSync8 } from "child_process";
105028
105030
  import { existsSync as existsSync39, mkdtempSync, rmSync as rmSync5, writeFileSync as writeFileSync9 } from "fs";
@@ -105115,7 +105117,7 @@ function getInstalledVersion() {
105115
105117
  return version3 || null;
105116
105118
  }
105117
105119
  async function fetchRelease(version3) {
105118
- const base = `https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases`;
105120
+ const base = `https://api.github.com/repos/${OPENSCOUT_RELEASE_OWNER}/${OPENSCOUT_RELEASE_REPOSITORY}/releases`;
105119
105121
  const apiUrl = version3 ? `${base}/tags/${version3}` : `${base}/latest`;
105120
105122
  try {
105121
105123
  const response = await fetch(apiUrl, {
@@ -105125,12 +105127,12 @@ async function fetchRelease(version3) {
105125
105127
  return await response.json();
105126
105128
  }
105127
105129
  } catch {}
105128
- const apiPath = version3 ? `repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases/tags/${version3}` : `repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases/latest`;
105130
+ const apiPath = version3 ? `repos/${OPENSCOUT_RELEASE_OWNER}/${OPENSCOUT_RELEASE_REPOSITORY}/releases/tags/${version3}` : `repos/${OPENSCOUT_RELEASE_OWNER}/${OPENSCOUT_RELEASE_REPOSITORY}/releases/latest`;
105129
105131
  const gh = spawnSync8("gh", ["api", apiPath], { encoding: "utf8" });
105130
105132
  if ((gh.status ?? 1) === 0 && gh.stdout.trim()) {
105131
105133
  return JSON.parse(gh.stdout);
105132
105134
  }
105133
- throw new ScoutCliError(version3 ? `release "${version3}" not found on GitHub (${GITHUB_OWNER}/${GITHUB_REPO})` : `could not fetch the latest OpenScout release from GitHub (${GITHUB_OWNER}/${GITHUB_REPO})`);
105135
+ throw new ScoutCliError(version3 ? `release "${version3}" not found on GitHub (${OPENSCOUT_RELEASE_OWNER}/${OPENSCOUT_RELEASE_REPOSITORY})` : `could not fetch the latest OpenScout release from GitHub (${OPENSCOUT_RELEASE_OWNER}/${OPENSCOUT_RELEASE_REPOSITORY})`);
105134
105136
  }
105135
105137
  function findAppDmgAsset(release) {
105136
105138
  const assets = release.assets ?? [];
@@ -105304,7 +105306,7 @@ async function runInstallCommand(context, args) {
105304
105306
  message: `${verb} OpenScout ${installedAfter} \u2192 ${APP_PATH}${relaunchNote}`
105305
105307
  }, renderInstallResult);
105306
105308
  }
105307
- var GITHUB_OWNER = "arach", GITHUB_REPO = "openscout", APP_NAME = "OpenScout.app", APP_PATH, INFO_PLIST_PATH, APP_BUNDLE_ID = "app.openscout.scout", APP_PROCESS_NAME = "Scout", USER_AGENT = "scout-cli", HELP_FLAGS9;
105309
+ var OPENSCOUT_RELEASE_OWNER = "oscout", OPENSCOUT_RELEASE_REPOSITORY = "scout", APP_NAME = "OpenScout.app", APP_PATH, INFO_PLIST_PATH, APP_BUNDLE_ID = "app.openscout.scout", APP_PROCESS_NAME = "Scout", USER_AGENT = "scout-cli", HELP_FLAGS9;
105308
105310
  var init_install = __esm(() => {
105309
105311
  init_errors();
105310
105312
  APP_PATH = `/Applications/${APP_NAME}`;
package/package.json CHANGED
@@ -1,7 +1,25 @@
1
1
  {
2
2
  "name": "@openscout/scout",
3
- "version": "0.2.94",
4
- "description": "Public Scout package that installs the `scout` command and bundled local runtime",
3
+ "version": "0.2.95",
4
+ "description": "Local-first control plane for discovering, messaging, and coordinating AI agents across Claude Code, Codex, and more",
5
+ "keywords": [
6
+ "openscout",
7
+ "ai-agents",
8
+ "coding-agents",
9
+ "agent-coordination",
10
+ "multi-agent",
11
+ "local-first",
12
+ "control-plane",
13
+ "agent-broker",
14
+ "developer-tools",
15
+ "cli",
16
+ "mcp",
17
+ "acp",
18
+ "claude-code",
19
+ "codex",
20
+ "cursor",
21
+ "bun"
22
+ ],
5
23
  "license": "Apache-2.0",
6
24
  "type": "module",
7
25
  "repository": {
@@ -12,18 +30,19 @@
12
30
  "bugs": {
13
31
  "url": "https://github.com/oscout/scout/issues"
14
32
  },
15
- "homepage": "https://github.com/oscout/scout#readme",
33
+ "homepage": "https://openscout.app",
16
34
  "bin": {
17
35
  "scout": "./bin/scout",
18
36
  "openscout-runtime": "./bin/openscout-runtime.mjs"
19
37
  },
20
38
  "engines": {
21
- "bun": ">=1.2"
39
+ "bun": ">=1.3"
22
40
  },
23
41
  "files": [
24
42
  "bin",
25
43
  "dist",
26
- "README.md"
44
+ "README.md",
45
+ "NOTICE"
27
46
  ],
28
47
  "dependencies": {
29
48
  "@lydell/node-pty": "1.2.0-beta.12",
@@ -46,5 +65,5 @@
46
65
  "publishConfig": {
47
66
  "access": "public"
48
67
  },
49
- "gitHead": "23bcb0d2821b93066f0eb79f88d622777d8170e0"
68
+ "gitHead": "edcbc2933b914dee199c741ffa986d8c4127a318"
50
69
  }