chutes-build 0.4.0 → 0.4.2
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/CHANGELOG.md +371 -0
- package/PRIVACY.md +10 -2
- package/README.md +127 -289
- package/SECURITY.md +73 -0
- package/npm/README.md +17 -3
- package/package.json +22 -11
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Chutes Build will be documented in this file. The format
|
|
4
|
+
is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this
|
|
5
|
+
project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.4.2] - 2026-08-01
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `/undo` is accepted as an alias for `/rewind`.
|
|
14
|
+
- Added repository-wide coding-agent guidance and editor defaults.
|
|
15
|
+
- The npm launcher archive now includes the changelog and security policy.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Reviewed Grok Build upstream through `0.2.117` and recorded the selective
|
|
20
|
+
port and deferral decisions.
|
|
21
|
+
- Removed the orphaned Dependabot auto-merge workflow after automated version
|
|
22
|
+
update PRs were disabled.
|
|
23
|
+
- The Windows CI job no longer disables real-time malware protection.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Repeated-tool-call reminders are injected only after the preceding tool
|
|
28
|
+
results are committed, preventing duplicate results from corrupting session
|
|
29
|
+
history.
|
|
30
|
+
- Empty Enter no longer silently approves a plan while the revision prompt is
|
|
31
|
+
focused; revision notes are required, with `a` as the explicit approve key.
|
|
32
|
+
- Notification-hook tests that launch external shells are serialized, avoiding
|
|
33
|
+
Windows CI failures caused by concurrent PowerShell startup contention.
|
|
34
|
+
- The asynchronous notification-hook test now joins its worker before checking
|
|
35
|
+
output, removing a race with slow PowerShell startup on loaded CI runners.
|
|
36
|
+
- Removed Rust 1.94 Clippy warnings in the Windows crash handler, PTY text
|
|
37
|
+
rendering, and workspace utilities without changing their behavior.
|
|
38
|
+
- Notification events without an owning session explicitly remove any stale
|
|
39
|
+
`CHUTES_BUILD_SESSION_ID` inherited from the parent process.
|
|
40
|
+
|
|
41
|
+
### Security
|
|
42
|
+
|
|
43
|
+
- Documented and aligned repository security controls for SHA-pinned Actions,
|
|
44
|
+
read-only workflow tokens, and reviewed security-update PRs.
|
|
45
|
+
- Updated vulnerable transitive `rand` and AWS SDK lockfile entries to their
|
|
46
|
+
first compatible patched releases.
|
|
47
|
+
|
|
48
|
+
## [0.4.1] - 2026-07-26
|
|
49
|
+
|
|
50
|
+
### Added
|
|
51
|
+
|
|
52
|
+
- Remote ACP background terminal tasks now persist their cumulative output
|
|
53
|
+
locally while they run; terminal results use the real remote exit status.
|
|
54
|
+
- Repeated identical tool calls are detected, warned about, and eventually
|
|
55
|
+
stopped without emitting a misleading assistant response; repeated `true`
|
|
56
|
+
no-ops use a shorter limit.
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
|
|
60
|
+
- Dependabot auto-merge is limited to patch updates. Minor and major updates
|
|
61
|
+
remain open for manual review.
|
|
62
|
+
- The upstream-watch workflow refreshes the existing review issue with the
|
|
63
|
+
current upstream commit and version instead of leaving stale issue content.
|
|
64
|
+
- Plugin subagents inherit the parent's already-connected MCP pool through the
|
|
65
|
+
normal inheritance filter, without allowing plugins to create connections.
|
|
66
|
+
- A fresh managed-MCP catalog is propagated to live sessions and refreshes the
|
|
67
|
+
tool-search index without requiring an application restart.
|
|
68
|
+
|
|
69
|
+
### Fixed
|
|
70
|
+
|
|
71
|
+
- Session-creation failures now clear the stuck loading state, remove orphaned
|
|
72
|
+
sessions, and surface a useful warning or failure block.
|
|
73
|
+
- A bare `Esc` cancels a running turn in non-vim and minimal modes while
|
|
74
|
+
fullscreen vim retains navigation semantics; the queued draft is preserved.
|
|
75
|
+
- Fork/rewind copies only live history and the compaction checkpoint files it
|
|
76
|
+
actually references, rejecting malformed paths and non-regular files.
|
|
77
|
+
|
|
78
|
+
### Security
|
|
79
|
+
|
|
80
|
+
- Chutes and Context7 endpoint resolution now rejects insecure schemes,
|
|
81
|
+
credentials in URLs, private/special-use network targets, and unapproved
|
|
82
|
+
custom endpoints unless the corresponding explicit development opt-in is
|
|
83
|
+
enabled. API keys are never sent to custom Context7 endpoints.
|
|
84
|
+
- Generated media streams to temporary files with bounded response sizes and
|
|
85
|
+
uses create-new persistence so existing artifacts cannot be overwritten.
|
|
86
|
+
- Automatic permission classification only fast-paths deterministic read-only
|
|
87
|
+
shell commands; classifier failures fall back to the normal user prompt.
|
|
88
|
+
- Permission resolution now honors the folder-trust verdict: an untrusted
|
|
89
|
+
project's `.claude/settings.json` (including `defaultMode: bypassPermissions`)
|
|
90
|
+
and `.chutes-build/config.toml` `[permission]` rules are no longer
|
|
91
|
+
auto-applied. A cloned repository could previously ship permission rules
|
|
92
|
+
that auto-approved tool calls regardless of the folder's trust state. Global
|
|
93
|
+
and admin-tier permission sources are unaffected. Found while reviewing
|
|
94
|
+
upstream grok-build for changes worth porting.
|
|
95
|
+
|
|
96
|
+
### Documentation
|
|
97
|
+
|
|
98
|
+
- Reworked the README around a concise product overview, static terminal
|
|
99
|
+
screenshot, quick start, privacy contract, common workflows, and repository
|
|
100
|
+
map; removed the obsolete promotional video assets.
|
|
101
|
+
- Added dedicated getting-started and configuration guides, reorganized the
|
|
102
|
+
documentation index, and aligned privacy, security, architecture, npm,
|
|
103
|
+
contributor, and embedded `/docs` references with current behavior.
|
|
104
|
+
- Corrected OAuth guidance, media response limits, automatic-permission
|
|
105
|
+
semantics, remote terminal behavior, `Esc` cancellation, and upstream
|
|
106
|
+
baseline rules.
|
|
107
|
+
|
|
108
|
+
## [0.4.0] - 2026-07-23
|
|
109
|
+
|
|
110
|
+
### Added
|
|
111
|
+
|
|
112
|
+
- Machine-readable `--json` output for the model catalog and local session
|
|
113
|
+
list/search/delete commands.
|
|
114
|
+
- Headless worktree creation, including `--worktree-ref`, and headless
|
|
115
|
+
`--no-subagents` / memory controls.
|
|
116
|
+
- CSS-selector or snapshot-index addressing for browser click/type actions.
|
|
117
|
+
- A complete public CLI and slash-command reference.
|
|
118
|
+
|
|
119
|
+
### Changed
|
|
120
|
+
|
|
121
|
+
- Session storage, search, deletion, traces, and workspace state are now
|
|
122
|
+
enforced as local-only product policy. Inherited remote write-back settings
|
|
123
|
+
cannot override it.
|
|
124
|
+
- Updates are manual through npm/release artifacts. The runtime no longer links
|
|
125
|
+
or starts the inherited automatic updater.
|
|
126
|
+
- Custom model catalogs use `CHUTES_MODELS_API_KEY`; ambient Chutes API/session
|
|
127
|
+
credentials are restricted to allowlisted official HTTPS endpoints.
|
|
128
|
+
- Destructive session, memory, plugin, marketplace, and worktree operations
|
|
129
|
+
require confirmation or an explicit `--yes`.
|
|
130
|
+
|
|
131
|
+
### Fixed
|
|
132
|
+
|
|
133
|
+
- OAuth login (`l` / `/login`, "Sign in with Chutes"): the token exchange (and
|
|
134
|
+
now refresh) send a `client_secret` when one is configured. The built-in app
|
|
135
|
+
(`cid_nyt9i...`) currently rejects the token exchange with `invalid_client`
|
|
136
|
+
unless a secret is sent, despite being documented as a public PKCE client —
|
|
137
|
+
confirmed by isolating scope as a non-factor in a controlled A/B test.
|
|
138
|
+
`openid` is also requested again — Chutes' own app docs list it as
|
|
139
|
+
required, contradicting the assumption an earlier revision of this list was
|
|
140
|
+
based on.
|
|
141
|
+
- A `client_secret` supplied via `CHUTES_BUILD_OAUTH2_CLIENT_SECRET` /
|
|
142
|
+
`CHUTES_BUILD_OIDC_CLIENT_SECRET` was silently dropped before reaching the
|
|
143
|
+
token request whenever `config.toml` also had an
|
|
144
|
+
`[grok_com_config.oidc]`/`[oauth2]` table: the config merge round-trips
|
|
145
|
+
through a generic TOML value, which does not preserve fields marked
|
|
146
|
+
`#[serde(skip)]`.
|
|
147
|
+
- Relative `--cwd` values are canonicalized before changing directories,
|
|
148
|
+
avoiding a second relative-path resolution.
|
|
149
|
+
- `--load` now behaves as an alias of `--resume`; resume/restore conflicts,
|
|
150
|
+
headless-only options, `--no-plan`, `--best-of-n`, and prompt/subcommand
|
|
151
|
+
combinations fail with actionable parser errors instead of being ignored.
|
|
152
|
+
- Agent `--reauthenticate`, `--reasoning-effort`, model-list cancellation,
|
|
153
|
+
export/clipboard failures, worktree partial failures, plugin registry
|
|
154
|
+
failures, and custom OAuth refresh secrets now behave consistently.
|
|
155
|
+
- `CHUTES_BUILD_HOME` now relocates user roles/personas and the bundled-agent
|
|
156
|
+
cache together with the rest of the application state, including on Windows.
|
|
157
|
+
- Media writes roll back partial artifacts when either media or provenance
|
|
158
|
+
persistence fails.
|
|
159
|
+
|
|
160
|
+
### Security
|
|
161
|
+
|
|
162
|
+
- Removed the hidden remote workspace-exposure CLI and disabled the matching
|
|
163
|
+
leader protocol capability.
|
|
164
|
+
- `mcp list --json` redacts environment/header values, command arguments, and
|
|
165
|
+
URL credentials/query/fragment data.
|
|
166
|
+
- `agent serve` defaults to loopback, rejects short secrets, and requires
|
|
167
|
+
`--allow-remote-bind` for non-loopback listeners.
|
|
168
|
+
- Plugin/marketplace removal and generated-media persistence now surface
|
|
169
|
+
partial failures instead of reporting false success.
|
|
170
|
+
|
|
171
|
+
### Removed
|
|
172
|
+
|
|
173
|
+
- Inherited remote share, feedback, coding-data retention, update, setup, and
|
|
174
|
+
workspace-exposure commands that were unavailable or incompatible with the
|
|
175
|
+
Chutes Build privacy contract.
|
|
176
|
+
- The no-op `trace --local`, `agent serve --remote`, and duplicate load/update
|
|
177
|
+
flags.
|
|
178
|
+
|
|
179
|
+
### Documentation
|
|
180
|
+
|
|
181
|
+
- README: documented the OAuth environment variables and the custom-client
|
|
182
|
+
fallback.
|
|
183
|
+
|
|
184
|
+
## [0.3.0] - 2026-07-22
|
|
185
|
+
|
|
186
|
+
### Added
|
|
187
|
+
|
|
188
|
+
- Voice recording bar: an animated wave visual while the mic is capturing.
|
|
189
|
+
- Auto-update checks re-enabled (were previously hardcoded off regardless of
|
|
190
|
+
config or CLI flag). Still off in debug builds; honors `--no-auto-update`
|
|
191
|
+
and the new `CHUTES_BUILD_DISABLE_AUTOUPDATER` env var.
|
|
192
|
+
|
|
193
|
+
### Fixed
|
|
194
|
+
|
|
195
|
+
- Voice dictation actually works now: default transcription switched to a
|
|
196
|
+
batch REST call against Chutes' own STT endpoint. The prior WebSocket
|
|
197
|
+
streaming client only ever worked against the original upstream backend —
|
|
198
|
+
every dictation attempt against Chutes' inference API failed with a
|
|
199
|
+
WebSocket 404 (no such route exists there). The streaming transport is
|
|
200
|
+
still available (`stt_mode = "streaming"`) for a backend that speaks it.
|
|
201
|
+
- Voice dictation: the 10-second no-speech timeout now distinguishes true mic
|
|
202
|
+
silence (permissions, muted input) from other failures and surfaces a
|
|
203
|
+
platform-specific fix hint instead of one generic message.
|
|
204
|
+
- Sampler: a zero-retry budget now fails fast instead of silently falling
|
|
205
|
+
through the generic/rate-limit retry paths; retry backoff sleeps are now
|
|
206
|
+
cancellable, so a cancelled request during backoff no longer waits out the
|
|
207
|
+
full delay.
|
|
208
|
+
|
|
209
|
+
### Security
|
|
210
|
+
|
|
211
|
+
- Sandbox: fixed a fail-open bypass where an unopenable device file (e.g.
|
|
212
|
+
`/dev/tty` with no controlling terminal under headless/CI) aborted the
|
|
213
|
+
entire Landlock/Seatbelt ruleset instead of just skipping that one rule,
|
|
214
|
+
leaving the sandbox unenforced.
|
|
215
|
+
- Permission auto-mode and exec-risk classification brought forward from a
|
|
216
|
+
stale pre-0.2.106 baseline: kubectl/`ps`/`rg` heuristic hardening
|
|
217
|
+
(credential-plugin and environment-dump risks), a 3-tier environment-risk
|
|
218
|
+
model replacing a binary check, opaque-shell detection, an ambient
|
|
219
|
+
exec-risk scan for `git -C`/`--git-dir`/submodule config paths, and
|
|
220
|
+
reinstated consecutive/total auto-deny limits.
|
|
221
|
+
- MCP tool permission checks now use an overlap-aware `server__tool` name
|
|
222
|
+
parser (rejects names with more than one delimiter boundary) instead of
|
|
223
|
+
splitting on the first occurrence.
|
|
224
|
+
|
|
225
|
+
## [0.2.0] - 2026-07-22
|
|
226
|
+
|
|
227
|
+
### Added
|
|
228
|
+
|
|
229
|
+
- Chutes-native inference, model discovery, automatic routing, and fallback
|
|
230
|
+
handling.
|
|
231
|
+
- Adaptive reasoning controls backed by a centralized model capability
|
|
232
|
+
registry.
|
|
233
|
+
- Advisor and parallel subagent orchestration.
|
|
234
|
+
- Built-in Context7, official Chutes research, web search, browser automation,
|
|
235
|
+
and project memory.
|
|
236
|
+
- Chutes usage indicators for rolling four-hour and monthly limits.
|
|
237
|
+
- Typed image, video, and audio artifacts with bounded, opt-in terminal
|
|
238
|
+
previews and native-player fallbacks.
|
|
239
|
+
- Privacy-first defaults with telemetry, remote trace upload, and automatic
|
|
240
|
+
update checks disabled.
|
|
241
|
+
- Cross-platform npm launcher and native package pipeline.
|
|
242
|
+
- Voice dictation (`/voice`, Ctrl+Space, or the mic icon), enabled by default;
|
|
243
|
+
recording still starts only on an explicit manual press.
|
|
244
|
+
- Hybrid memory search enabled by default: local recall now combines full-text
|
|
245
|
+
search with semantic vector search against a built-in Chutes-hosted
|
|
246
|
+
embedding model (`Qwen/Qwen3-Embedding-8B-TEE`).
|
|
247
|
+
- Advisor now reasons at maximum effort by default (previously inherited
|
|
248
|
+
whatever effort the parent session was using). `/advisor on|off` enables or
|
|
249
|
+
disables the subagent; `/advisor <model>` pins the model it uses;
|
|
250
|
+
`/advisor default` clears the pin. Writes `[subagents.roles.advisor]` /
|
|
251
|
+
`[subagents.toggle]` in config.toml — the running session's own model is
|
|
252
|
+
never touched.
|
|
253
|
+
- On-demand OCR (`ocr_page` tool): extracts text verbatim from a single image
|
|
254
|
+
or PDF page via a dedicated Chutes vision model, independent of the active
|
|
255
|
+
chat model's vision support. Billed against the account's subscription
|
|
256
|
+
quota, never the separate marketplace/wallet balance third-party chutes use.
|
|
257
|
+
|
|
258
|
+
### Changed
|
|
259
|
+
|
|
260
|
+
- Rebranded the public product, binary, user data directory, and themes as
|
|
261
|
+
Chutes Build.
|
|
262
|
+
- Cached FFmpeg and package-manager discovery for the lifetime of the process
|
|
263
|
+
so idle TUI rendering does not repeatedly probe external commands.
|
|
264
|
+
- Bounded account quota fallback concurrency and cached model-capability
|
|
265
|
+
discovery to reduce unnecessary API work.
|
|
266
|
+
- The model-capability catalog response and the vision transcription client's
|
|
267
|
+
chat-completion response are now parsed into small typed structs instead of
|
|
268
|
+
navigated as raw JSON, so an unexpected shape in a field we don't read can't
|
|
269
|
+
silently change behavior; fields whose absence or wrong shape must stay a
|
|
270
|
+
soft "not found"/"no match" (a model's `input_modalities`, a transcription's
|
|
271
|
+
`content`/`finish_reason`) are still parsed leniently, only genuinely
|
|
272
|
+
malformed responses now surface as a distinct decode error. Account usage
|
|
273
|
+
and per-chute media responses stay dynamic on purpose — their shapes
|
|
274
|
+
legitimately vary per tier/quota kind and per third-party chute schema.
|
|
275
|
+
|
|
276
|
+
### Fixed
|
|
277
|
+
|
|
278
|
+
- Interactive login: the welcome screen and `/login` had no working path to
|
|
279
|
+
the OAuth method the rebrand advertised, and no way to enter an API key
|
|
280
|
+
from inside the running app at all (only the separate `chutes-build login`
|
|
281
|
+
CLI subcommand worked, before ever starting the TUI). Added "Sign in with
|
|
282
|
+
Chutes" OAuth end-to-end (issuer, client, scopes, loopback callback) and an
|
|
283
|
+
in-TUI API key entry reachable from the welcome screen (`k`), `/login`, and
|
|
284
|
+
`/apikey`, and fixed two stale-state bugs (`auth_show_raw_url`,
|
|
285
|
+
`welcome_prompt_focused`) that silently swallowed keyboard input on the
|
|
286
|
+
auth screen.
|
|
287
|
+
- `get_chutes_usage` and all media tools 401'd by default: the account/media
|
|
288
|
+
HTTP client sent the API key without the `Bearer` prefix `api.chutes.ai`
|
|
289
|
+
requires.
|
|
290
|
+
- The macOS native build failed to compile (a stray `cfg` left an
|
|
291
|
+
`std::process` import unreachable in a macOS-only module).
|
|
292
|
+
- The secret sanitizer that filters Sentry/Mixpanel/log output did not
|
|
293
|
+
recognize the `cpk_` Chutes API key prefix, so real keys were not redacted
|
|
294
|
+
from those sinks.
|
|
295
|
+
- The browser automation tool left a dead session in place after any
|
|
296
|
+
connection-level failure (closed socket, crashed browser), making it
|
|
297
|
+
unusable for the rest of the session until an explicit `close`.
|
|
298
|
+
- `generate_media` only validated the top-level shape of `params` against a
|
|
299
|
+
cord's schema, so a payload with the right outer wrapper (e.g. `args`) but
|
|
300
|
+
wrong fields nested inside it passed local validation and round-tripped to
|
|
301
|
+
Chutes for a generic "Invalid input parameters" error instead of a precise
|
|
302
|
+
local one.
|
|
303
|
+
- The terminal window/tab title showed "grok" instead of "chutes-build".
|
|
304
|
+
- Memory embeddings always sent requests to the chat completion base URL
|
|
305
|
+
(`llm.chutes.ai`, which does not proxy `/embeddings` and 404s), and
|
|
306
|
+
unconditionally requested Matryoshka-truncated output via a `dimensions`
|
|
307
|
+
field the default embedding model rejects outright (400). Together these
|
|
308
|
+
made vector memory search completely unusable even when `[memory.embedding]`
|
|
309
|
+
was explicitly configured. Embeddings now use their own configurable base
|
|
310
|
+
URL (defaulting to the model's dedicated endpoint) and no longer request
|
|
311
|
+
truncation.
|
|
312
|
+
- `generate_media` only encoded workspace file paths found at the top level
|
|
313
|
+
of `params`; a cord requiring a wrapper shape (e.g. `{"args": {"image":
|
|
314
|
+
"input.png"}}`) never got its nested path encoded, so the literal filename
|
|
315
|
+
round-tripped to Chutes instead of the file's contents. Asset discovery now
|
|
316
|
+
recurses through nested objects and arrays.
|
|
317
|
+
- `generate_media`'s schema guard unconditionally overwrote a cord's own
|
|
318
|
+
`additionalProperties`/`unevaluatedProperties` with its own default —
|
|
319
|
+
including stripping them entirely when `CHUTES_ALLOW_UNKNOWN_PARAMS` was
|
|
320
|
+
set, removing a restriction the provider declared rather than just
|
|
321
|
+
disabling this tool's own default. It now only adds its own restriction
|
|
322
|
+
where the schema has no existing opinion.
|
|
323
|
+
- `generate_media` accepted any response with an empty or `octet-stream`
|
|
324
|
+
Content-Type outright, so a Chutes error response (HTML/JSON, sometimes
|
|
325
|
+
served as `octet-stream` by a proxy) could be saved to disk as if it were
|
|
326
|
+
the requested media. Responses are now verified against actual byte
|
|
327
|
+
content, not just the declared header.
|
|
328
|
+
- The model-capability catalog cache held a single global lock for the
|
|
329
|
+
entire network refresh, serializing every concurrent lookup behind one
|
|
330
|
+
HTTP request whenever the cache was stale.
|
|
331
|
+
- On the Windows native build, file-tool path remapping (`resolve_model_path`)
|
|
332
|
+
and the `.gitignore` out-of-repo guard both tested `Path::is_absolute()`,
|
|
333
|
+
which on Windows also requires a drive letter. The forward-slash-rooted
|
|
334
|
+
virtual paths these paths actually deal with (e.g. a sandboxed session's
|
|
335
|
+
`/home/user/project`) were therefore misclassified as relative, silently
|
|
336
|
+
breaking model-facing path resolution and letting an out-of-repo path fall
|
|
337
|
+
through to a crate call that can panic. Both now check for a root instead
|
|
338
|
+
of a full drive-qualified absolute path.
|
|
339
|
+
- On the Windows native build, LSP crash-recovery silently failed to replay
|
|
340
|
+
a server's previously-open documents after a restart: it derived each
|
|
341
|
+
document's file path by stripping the literal `"file://"` prefix off its
|
|
342
|
+
URI, which on Windows leaves an invalid leading slash before the drive
|
|
343
|
+
letter (`/C:/...`), so the on-disk re-read failed and the document was
|
|
344
|
+
quietly dropped instead of being replayed. Now uses proper file-URI-to-path
|
|
345
|
+
conversion.
|
|
346
|
+
|
|
347
|
+
### Security
|
|
348
|
+
|
|
349
|
+
- Restricted credential-bearing media invocation to Chutes HTTPS hosts,
|
|
350
|
+
disabled credential-bearing redirects, and bounded generated-media and input
|
|
351
|
+
asset sizes.
|
|
352
|
+
- Restricted browser and media output paths to canonical workspace locations,
|
|
353
|
+
prevented silent file overwrite, and redacted password values from browser
|
|
354
|
+
snapshots.
|
|
355
|
+
- Added full-history secret scanning, Rust dependency/source policy checks,
|
|
356
|
+
native archive checksums, and assembled-package smoke testing to CI.
|
|
357
|
+
- `CHUTES_INFERENCE_BASE_URL`/`CHUTES_API_BASE_URL`/`CHUTES_ROUTER_BASE_URL`
|
|
358
|
+
previously accepted any value with no validation, so an env-var override
|
|
359
|
+
could silently redirect Chutes credentials to an arbitrary host. These
|
|
360
|
+
(and the model-router dispatch path, which had the same gap) now require
|
|
361
|
+
HTTPS and a trusted Chutes/router host by default; `CHUTES_ALLOW_INSECURE_ENDPOINTS`
|
|
362
|
+
is an explicit opt-in for local development and forks.
|
|
363
|
+
- Outbound requests for Chutes credentials and generated-media downloads now
|
|
364
|
+
refuse to connect to loopback/private/link-local/reserved addresses,
|
|
365
|
+
checked at the exact point of connection (closing a DNS-rebinding gap
|
|
366
|
+
where only literal IP addresses were previously rejected).
|
|
367
|
+
- Unified secret detection: Context7's outbound-query guard and persistent
|
|
368
|
+
memory filtering matched only 12 hardcoded substrings (`api_key`,
|
|
369
|
+
`bearer`, `password`, ...) and could miss shapes like a bare AWS key or
|
|
370
|
+
GitHub token that the existing log/trace sanitizer already caught. Both
|
|
371
|
+
now route through the same canonical detector.
|
package/PRIVACY.md
CHANGED
|
@@ -36,6 +36,8 @@ image/video decoding uses local image codecs and FFmpeg tools when installed,
|
|
|
36
36
|
and audio uses `ffplay` or the operating system's default player. Preview work
|
|
37
37
|
is bounded, off-thread, serialized, and deferred while inference is active. No
|
|
38
38
|
remote preview, thumbnail, codec, waveform, or playback service is used.
|
|
39
|
+
Non-JSON media downloads stream through local temporary files and are removed
|
|
40
|
+
after persistence or failure; error and JSON bodies remain memory-bounded.
|
|
39
41
|
|
|
40
42
|
## Outbound connections
|
|
41
43
|
|
|
@@ -47,9 +49,9 @@ explicit hosted feature:
|
|
|
47
49
|
| `model-router-ten.vercel.app` | default Chutes-compatible model routing | prompts, selected context/tool schemas, model inputs, Chutes API credential |
|
|
48
50
|
| `llm.chutes.ai` | Chutes inference, model catalog, semantic memory, voice transcription, OCR, and vision | model requests and the selected inputs: prompts/context, memory chunks, audio, images, PDF pages, or sampled video frames; Chutes API credential |
|
|
49
51
|
| `api.chutes.ai` | Chutes account and media APIs | account requests, media parameters and user-selected media assets; Chutes API credential |
|
|
50
|
-
| `api.chutes.ai/idp` | OAuth sign-in and refresh | authorization code or refresh token, PKCE verifier,
|
|
52
|
+
| `api.chutes.ai/idp` | OAuth sign-in and refresh | authorization code or refresh token, PKCE verifier, registered client ID, and a client secret only when configured |
|
|
51
53
|
| `chutes.ai/docs`, `chutes.ai/news` | mandatory primary-source verification for Chutes topics | requested official page URLs; no Chutes API credential |
|
|
52
|
-
| `context7.com` | current library documentation | library names and documentation queries;
|
|
54
|
+
| `context7.com` | current library documentation | library names and documentation queries; known secrets are rejected and an optional Context7 key is sent only to the official HTTPS service |
|
|
53
55
|
| DuckDuckGo or Brave Search | web search | search query; Brave receives only its dedicated key |
|
|
54
56
|
| User-selected web pages | web fetch/browser automation | normal HTTP/browser traffic required by the requested action |
|
|
55
57
|
| User-configured MCP servers/plugins | external tools | data required by the selected tool and its own configuration |
|
|
@@ -61,6 +63,12 @@ browser automation. Custom inference models must declare a dedicated
|
|
|
61
63
|
`api_key`/`env_key`; a custom model-catalog endpoint uses
|
|
62
64
|
`CHUTES_MODELS_API_KEY`.
|
|
63
65
|
|
|
66
|
+
Local endpoint overrides are rejected unless they pass the official-host HTTPS
|
|
67
|
+
policy or the operator explicitly enables the development-only insecure
|
|
68
|
+
endpoint opt-in. That opt-in relaxes URL/DNS trust for a controlled local fork;
|
|
69
|
+
it does not attach ambient Chutes credentials to arbitrary custom models.
|
|
70
|
+
Likewise, a custom Context7 endpoint never receives `CONTEXT7_API_KEY`.
|
|
71
|
+
|
|
64
72
|
Model catalog and account usage requests may run during startup after
|
|
65
73
|
authentication. Prompts and repository content are not sent by those discovery
|
|
66
74
|
requests. They leave the machine only in a model/tool request that needs them.
|
package/README.md
CHANGED
|
@@ -1,57 +1,38 @@
|
|
|
1
1
|
# Chutes Build
|
|
2
2
|
|
|
3
|
-
**A privacy-first, open-source coding agent built for the
|
|
3
|
+
**A privacy-first, open-source coding agent built for the
|
|
4
|
+
[Chutes](https://chutes.ai) ecosystem.**
|
|
4
5
|
|
|
5
6
|
[](https://github.com/TheStreamCode/chutes-build/actions/workflows/ci.yml)
|
|
6
7
|
[](https://www.npmjs.com/package/chutes-build)
|
|
7
8
|
[](LICENSE)
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
Chutes Build combines a polished terminal interface, a production-grade agent
|
|
11
|
+
runtime, Chutes-native model routing, subagents, local memory, multimodal tools,
|
|
12
|
+
web research, and browser automation. Telemetry, remote trace upload, upstream
|
|
13
|
+
session sharing, and phone-home updates are disabled by product policy.
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
runtime, native Chutes model routing, parallel subagents, multimodal
|
|
13
|
-
generation, web research, browser automation, and local memory — with
|
|
14
|
-
telemetry, remote trace upload, and phone-home update checks disabled.
|
|
15
|
+

|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
> **Development preview:** Chutes Build is under active development. Review
|
|
18
|
+
> commands and file changes before approving them, especially in unfamiliar
|
|
19
|
+
> repositories.
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
> from source and review agent actions before approving changes.
|
|
21
|
+
## Why Chutes Build
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
- [CLI reference](#cli-reference)
|
|
28
|
-
- [Privacy & security](#privacy--security)
|
|
29
|
-
- [Project](#project)
|
|
30
|
-
|
|
31
|
-
## Highlights
|
|
32
|
-
|
|
33
|
-
- 🔒 **Privacy by construction** — telemetry, remote error reporting, automatic
|
|
34
|
-
update checks, remote trace upload, and upstream session sharing are all
|
|
35
|
-
disabled at the product-policy level.
|
|
36
|
-
- ⚡ **Chutes-native inference** — live model discovery, `Auto (Chutes Router)`
|
|
37
|
-
as the default, and automatic fallback when a model is temporarily
|
|
38
|
-
unavailable.
|
|
39
|
-
- 🧭 **Advisor** — an on-demand reasoning agent that reviews plans, blockers,
|
|
40
|
-
and completion claims without ever taking over the executor loop.
|
|
41
|
-
- 🧩 **Subagent orchestration** — concurrent fan-out with isolated worktrees
|
|
42
|
-
for real parallel decomposition, not just sequential delegation.
|
|
43
|
-
- 🎨 **Multimodal, natively** — image, video, music, speech, and on-demand OCR,
|
|
44
|
-
built directly into the Rust runtime instead of a bolted-on MCP process.
|
|
45
|
-
- 🧠 **Hybrid memory & voice** — full-text plus semantic vector recall, and
|
|
46
|
-
hold-to-record voice dictation, both on by default.
|
|
47
|
-
|
|
48
|
-
See [Features](#features) below for the complete list.
|
|
23
|
+
| Principle | What it means |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| **Chutes-native** | Live model discovery, `Auto (Chutes Router)`, model-aware reasoning controls, account usage, OCR, voice, and media generation are integrated directly into the Rust runtime. |
|
|
26
|
+
| **Private by default** | Sessions, memory, traces, logs, configuration, and exports stay local. Cloud features run only when their documented provider call is needed. |
|
|
27
|
+
| **Built for real repositories** | Planning, permission controls, worktrees, MCP, skills, background tasks, advisor review, and parallel subagents share one coherent session model. |
|
|
28
|
+
| **Transparent fork** | Chutes-specific product code is separated from retained `grok-build` infrastructure, with documented upstream review and Apache-2.0 attribution. |
|
|
49
29
|
|
|
50
30
|
## Quick start
|
|
51
31
|
|
|
52
|
-
### Install
|
|
32
|
+
### Install
|
|
53
33
|
|
|
54
|
-
|
|
34
|
+
The npm package selects the native binary for Windows, macOS, or Linux. A Rust
|
|
35
|
+
toolchain is not required.
|
|
55
36
|
|
|
56
37
|
```powershell
|
|
57
38
|
npm install -g chutes-build
|
|
@@ -64,305 +45,162 @@ For one-off use:
|
|
|
64
45
|
npx chutes-build
|
|
65
46
|
```
|
|
66
47
|
|
|
67
|
-
The
|
|
68
|
-
not collect telemetry and does not download executables from an install script.
|
|
69
|
-
|
|
70
|
-
### Build from source
|
|
48
|
+
The launcher does not download executables from a lifecycle script.
|
|
71
49
|
|
|
72
|
-
|
|
50
|
+
### Authenticate
|
|
73
51
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
Protocol Buffer tooling is vendored for normal builds; a separate `protoc`
|
|
79
|
-
installation is not required.
|
|
52
|
+
An API key is the most reliable way to start. Create one in the Chutes
|
|
53
|
+
dashboard, then press `k` on the welcome screen, run `/apikey`, or store it
|
|
54
|
+
through the hidden-input CLI flow:
|
|
80
55
|
|
|
81
56
|
```powershell
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
cargo build -p chutes-build --release
|
|
57
|
+
chutes-build login
|
|
58
|
+
chutes-build
|
|
85
59
|
```
|
|
86
60
|
|
|
87
|
-
|
|
88
|
-
Linux it is `target/release/chutes-build`.
|
|
89
|
-
|
|
90
|
-
### First run
|
|
91
|
-
|
|
92
|
-
Run `chutes-build` with no prior setup and log in from the welcome screen:
|
|
93
|
-
press `l` for "Login with Chutes" (opens your browser) or `k` to paste a
|
|
94
|
-
Chutes API key directly. `/login` reopens this choice at any time and
|
|
95
|
-
`/apikey` jumps straight to the API-key prompt.
|
|
96
|
-
|
|
97
|
-
To provide a key non-interactively instead, create one in Chutes and either
|
|
98
|
-
expose it only to the current process:
|
|
61
|
+
For a process-local credential:
|
|
99
62
|
|
|
100
63
|
```powershell
|
|
101
64
|
$env:CHUTES_API_KEY = "your-api-key"
|
|
102
65
|
chutes-build
|
|
103
66
|
```
|
|
104
67
|
|
|
105
|
-
|
|
68
|
+
Browser-based OAuth with PKCE is available through `l` or `/login`. Chutes
|
|
69
|
+
OAuth applications may require registered client credentials; see
|
|
70
|
+
[Authentication](docs/getting-started.md#authentication) for the supported
|
|
71
|
+
fallbacks and environment variables.
|
|
72
|
+
|
|
73
|
+
### Choose a model
|
|
74
|
+
|
|
75
|
+
`Auto (Chutes Router)` is the default when no model preference has been saved.
|
|
76
|
+
Use `/model` interactively or inspect the live catalog from the CLI:
|
|
106
77
|
|
|
107
78
|
```powershell
|
|
108
|
-
chutes-build
|
|
109
|
-
chutes-build
|
|
79
|
+
chutes-build models
|
|
80
|
+
chutes-build models --json
|
|
81
|
+
chutes-build --model model-router
|
|
110
82
|
```
|
|
111
83
|
|
|
112
|
-
|
|
113
|
-
when no preference has been saved. Select a concrete model with `/model` or
|
|
114
|
-
`chutes-build --model <model-id>`. Inspect the resolved catalog with
|
|
115
|
-
`chutes-build models` or machine-readable `chutes-build models --json`.
|
|
116
|
-
|
|
117
|
-
## Features
|
|
118
|
-
|
|
119
|
-
### Agent & coding
|
|
120
|
-
|
|
121
|
-
- **Coding agent runtime:** repository inspection, edits, shell commands,
|
|
122
|
-
planning, goals, MCP servers, skills, sessions, worktrees, and permission
|
|
123
|
-
controls inherited from the mature upstream runtime.
|
|
124
|
-
- **Local session lifecycle:** list, search, resume, fork, export, trace, and
|
|
125
|
-
delete sessions without a remote registry. Machine-readable list/search
|
|
126
|
-
output is available with `--json`; destructive commands require confirmation
|
|
127
|
-
unless `--yes` is supplied.
|
|
128
|
-
- **Advisor:** a read-only, on-demand reasoning agent that reviews plans,
|
|
129
|
-
difficult decisions, blockers, and completion claims without taking over the
|
|
130
|
-
executor loop. Reasons at maximum effort by default. `/advisor on|off`
|
|
131
|
-
toggles it; `/advisor <model>` pins a specific model (e.g. your largest or
|
|
132
|
-
highest-tier available one — Chutes' catalog carries no price/size metadata
|
|
133
|
-
to pick one automatically); `/advisor default` clears the pin.
|
|
134
|
-
- **Subagent orchestration:** foreground and background workers, concurrent
|
|
135
|
-
fan-out, multi-worker waits, bounded nesting, and isolated worktrees. The
|
|
136
|
-
`chutes-build-orchestrator` preset is tuned for parallel decomposition.
|
|
137
|
-
|
|
138
|
-
### Chutes integration
|
|
139
|
-
|
|
140
|
-
- **Chutes-native inference:** API-key authentication, live model discovery,
|
|
141
|
-
`Auto (Chutes Router)` as the first model choice, configurable fallback
|
|
142
|
-
chains, and automatic retry when a selected model is temporarily unavailable.
|
|
143
|
-
- **Chutes account:** read-only subscription, quota, and usage access through
|
|
144
|
-
`get_chutes_usage`, a compact plan/quota indicator in the TUI, and detailed
|
|
145
|
-
`/usage` output. Per-model statistics remain disabled unless requested.
|
|
146
|
-
- **Chutes media:** live discovery and invocation for image generation and
|
|
147
|
-
editing, video, music, speech, and other supported Chutes media models through
|
|
148
|
-
`list_media_models`, `describe_media_model`, and `generate_media`. This is the
|
|
149
|
-
native Rust integration of the `chutes-media-mcp` workflow, so Chutes Build
|
|
150
|
-
does not need to spawn a separate Node/MCP process for its core media tools.
|
|
151
|
-
Generated output crosses the tool/ACP/TUI boundary as a typed artifact:
|
|
152
|
-
images use bounded lazy previews, videos use a two-frame rolling decoder,
|
|
153
|
-
and music/speech expose local pause/resume, seek, volume, duration, and
|
|
154
|
-
waveform controls with native-player fallback. Media work starts only while
|
|
155
|
-
inference is idle, never autoplays, and stays off the TUI render thread.
|
|
156
|
-
- **Capability routing:** image inputs stay with the selected model when it
|
|
157
|
-
supports vision and are otherwise delegated to a vision-capable Chutes route.
|
|
158
|
-
- **On-demand OCR:** the `ocr_page` tool extracts text verbatim from a single
|
|
159
|
-
image or PDF page via a dedicated Chutes vision model, independent of the
|
|
160
|
-
active chat model's vision support. Returns extracted text only — the image
|
|
161
|
-
itself is never added to the conversation.
|
|
162
|
-
|
|
163
|
-
### Research & tools
|
|
164
|
-
|
|
165
|
-
- **Current coding documentation:** Context7 search and documentation tools are
|
|
166
|
-
built in and avoid sending credentials or known secrets.
|
|
167
|
-
- **Official Chutes research:** before answering Chutes-specific questions, the
|
|
168
|
-
main agent and subagents consult both the official
|
|
169
|
-
[documentation](https://chutes.ai/docs) and [news](https://chutes.ai/news),
|
|
170
|
-
treating directly relevant official pages as primary authority.
|
|
171
|
-
- **Research and browser tools:** native web search (DuckDuckGo by default,
|
|
172
|
-
optionally Brave) plus agentic Chrome/Edge control through a local DevTools
|
|
173
|
-
connection and an isolated temporary browser profile. Browser actions accept
|
|
174
|
-
either CSS selectors or the numeric element indices shown by snapshots.
|
|
175
|
-
|
|
176
|
-
### Memory & voice
|
|
177
|
-
|
|
178
|
-
- **Local memory:** Chutes Build maintains a secret-filtered `memories.md` file
|
|
179
|
-
and can be launched with `--no-memory` when a stateless session is preferred.
|
|
180
|
-
Recall is hybrid by default — full-text search combined with semantic vector
|
|
181
|
-
search against a built-in Chutes-hosted embedding model. Semantic recall
|
|
182
|
-
sends the selected memory chunks to that Chutes embedding endpoint; use
|
|
183
|
-
`--no-memory` when this is not appropriate.
|
|
184
|
-
- **Voice input:** hold-to-record dictation transcribes speech into the prompt
|
|
185
|
-
box. Enabled by default; activation is always manual (mic icon, `/voice`, or
|
|
186
|
-
Ctrl+Space) — Chutes Build never records without an explicit press.
|
|
187
|
-
- **Time awareness and wellness:** the agent receives the local date, time, and
|
|
188
|
-
timezone and can suggest a break after long or late sessions.
|
|
189
|
-
|
|
190
|
-
### Privacy by construction
|
|
191
|
-
|
|
192
|
-
Telemetry, remote error reporting, automatic update checks, remote trace
|
|
193
|
-
upload, upstream session sharing, and remote workspace exposure are disabled.
|
|
194
|
-
Updates are installed manually from npm or a release artifact. See
|
|
195
|
-
[Privacy & security](#privacy--security) below for the full data boundary.
|
|
196
|
-
|
|
197
|
-
## Configuration
|
|
198
|
-
|
|
199
|
-
### State root
|
|
200
|
-
|
|
201
|
-
User state defaults to `~/.chutes-build`. Set `CHUTES_BUILD_HOME` to relocate
|
|
202
|
-
the complete state tree, including configuration, credentials, sessions, logs,
|
|
203
|
-
trace exports, plugins, user roles/personas, and the managed bundled-agent
|
|
204
|
-
cache. Chutes Build does not combine roles or bundle data from the default home
|
|
205
|
-
with a custom state root.
|
|
206
|
-
|
|
207
|
-
Project-scoped `.chutes-build` directories remain inside their repositories and
|
|
208
|
-
continue to take precedence over user and bundled agent definitions.
|
|
209
|
-
|
|
210
|
-
### Model selection, reasoning, and routing
|
|
211
|
-
|
|
212
|
-
Auto sends `model-router` requests to the Chutes router endpoint, allowing the
|
|
213
|
-
service to select a model for the task and handle cold or unavailable capacity.
|
|
214
|
-
A concrete model remains pinned unless a qualifying pre-stream failure advances
|
|
215
|
-
the explicit fallback chain.
|
|
216
|
-
|
|
217
|
-
Reasoning is model-specific. The model picker exposes only the controls
|
|
218
|
-
supported by the exact deployed generation: binary `Instant`/`Thinking` modes,
|
|
219
|
-
GLM-5.2's three modes, or no selector for fixed and non-reasoning models. Use
|
|
220
|
-
`/effort` interactively or `--effort <option-id>` in headless invocations. The
|
|
221
|
-
published model default is preserved unless the user explicitly changes it.
|
|
222
|
-
|
|
223
|
-
See [Model reasoning compatibility](docs/model-reasoning-compatibility.md) for
|
|
224
|
-
the current model matrix and forward-compatibility rules.
|
|
84
|
+
## What is included
|
|
225
85
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
86
|
+
| Area | Capabilities |
|
|
87
|
+
| --- | --- |
|
|
88
|
+
| **Agent runtime** | Repository inspection, edits, shell commands, plans, goals, permissions, sandbox profiles, local sessions, worktrees, and structured headless output. |
|
|
89
|
+
| **Model routing** | Live Chutes catalog, automatic routing, explicit fallback chains, exact-generation reasoning controls, and vision-capability delegation. |
|
|
90
|
+
| **Orchestration** | Read-only advisor, foreground/background subagents, concurrent fan-out, bounded nesting, grouped waits, and isolated worktrees. |
|
|
91
|
+
| **Knowledge** | Context7 library documentation, official Chutes source checks, web search, local full-text memory, and Chutes-hosted semantic recall. |
|
|
92
|
+
| **Multimodal** | Image and PDF OCR, image/video understanding, voice dictation, and typed image, video, music, and speech generation artifacts. |
|
|
93
|
+
| **Automation** | MCP servers, plugins, skills, background tasks, and isolated Chrome/Edge control through local DevTools. |
|
|
230
94
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
95
|
+
Generated media is streamed to bounded temporary storage and persisted with
|
|
96
|
+
create-new semantics. Inline previews remain local; unsupported terminals use
|
|
97
|
+
safe text cards and native-player fallbacks.
|
|
98
|
+
|
|
99
|
+
## Privacy contract
|
|
100
|
+
|
|
101
|
+
| Boundary | Policy |
|
|
102
|
+
| --- | --- |
|
|
103
|
+
| **Local state** | Configuration, credentials, sessions, memory, logs, traces, exports, plugins, and agent definitions live under `~/.chutes-build` or `CHUTES_BUILD_HOME`. |
|
|
104
|
+
| **Hosted inference** | Prompts and selected context leave the machine only for the Chutes model request that needs them. Semantic memory sends selected memory chunks to the configured Chutes embedding route. |
|
|
105
|
+
| **Explicit tools** | OCR, voice, media, web, browser, MCP, and plugin actions send only the inputs required by the selected operation and provider. |
|
|
106
|
+
| **Disabled surfaces** | Product telemetry, remote error reporting, automatic trace upload, upstream session sharing/search, remote workspace exposure, and automatic updates cannot be enabled through normal configuration. |
|
|
107
|
+
| **Credentials** | Ambient Chutes credentials are restricted to allowlisted official HTTPS hosts. Custom endpoints require dedicated credentials and explicit trust configuration. |
|
|
108
|
+
|
|
109
|
+
Read [Privacy](PRIVACY.md) for the complete data-flow inventory and
|
|
110
|
+
[Security](SECURITY.md) for the threat boundaries and reporting process.
|
|
234
111
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
Ambient Chutes credentials are attached only to official Chutes/router
|
|
240
|
-
endpoints. Custom inference models must declare their own `api_key` or
|
|
241
|
-
`env_key`; a custom model-catalog endpoint uses the dedicated
|
|
242
|
-
`CHUTES_MODELS_API_KEY`. Neither receives `CHUTES_API_KEY` or a cached Chutes
|
|
243
|
-
session token implicitly.
|
|
244
|
-
|
|
245
|
-
The inference client shares pooled HTTP connections, enables TCP no-delay, and
|
|
246
|
-
forwards parsed SSE events without an application-level streaming buffer. Cold
|
|
247
|
-
starts and model-side generation can still dominate latency. Auto is the
|
|
248
|
-
recommended default when a particular model is not required. The client does
|
|
249
|
-
not apply reduced-quality generation settings; target selection and quality
|
|
250
|
-
remain router decisions.
|
|
251
|
-
Selecting `Instant` can reduce reasoning latency, but it intentionally changes
|
|
252
|
-
the model's reasoning behavior and is never enabled silently.
|
|
253
|
-
|
|
254
|
-
### Account plan and quota
|
|
255
|
-
|
|
256
|
-
When authenticated, Chutes Build fetches subscription usage, plan metadata, and
|
|
257
|
-
quota data concurrently. The TUI status bar shows the plan plus the rolling
|
|
258
|
-
four-hour and monthly percentages when available; its color follows the most
|
|
259
|
-
constrained active window and changes at 80% and 100%. Click the indicator or
|
|
260
|
-
run `/usage` for every active window, percentage, and reset time. If aggregate
|
|
261
|
-
quota usage is unavailable, the client falls back concurrently to the
|
|
262
|
-
documented per-chute quota endpoints.
|
|
263
|
-
|
|
264
|
-
### OAuth login (Sign in with Chutes)
|
|
265
|
-
|
|
266
|
-
Pressing `l` at the welcome screen (or `/login`) runs a standard OAuth 2.0 +
|
|
267
|
-
PKCE flow against Chutes' own identity provider. The built-in app is a public
|
|
268
|
-
client and does not bundle or require a client secret. Custom confidential
|
|
269
|
-
clients can be configured under
|
|
270
|
-
[Chutes' developer settings](https://chutes.ai/app/api):
|
|
112
|
+
## Common workflows
|
|
113
|
+
|
|
114
|
+
Start an interactive session in the current repository:
|
|
271
115
|
|
|
272
116
|
```powershell
|
|
273
|
-
$env:CHUTES_BUILD_OAUTH2_CLIENT_ID = "cid_..."
|
|
274
|
-
$env:CHUTES_BUILD_OAUTH2_CLIENT_SECRET = "csc_..." # only if your app has one
|
|
275
117
|
chutes-build
|
|
276
118
|
```
|
|
277
119
|
|
|
278
|
-
|
|
279
|
-
`config.toml` or any other file on disk. The custom secret is included in both
|
|
280
|
-
the initial token exchange and refresh requests. `k` / `/apikey` (pasting a
|
|
281
|
-
Chutes API key directly) needs no app registration.
|
|
120
|
+
Run one headless task:
|
|
282
121
|
|
|
283
|
-
|
|
122
|
+
```powershell
|
|
123
|
+
chutes-build -p "Review this repository and report only actionable findings"
|
|
124
|
+
```
|
|
284
125
|
|
|
285
|
-
|
|
126
|
+
Create an isolated worktree session:
|
|
286
127
|
|
|
287
128
|
```powershell
|
|
288
|
-
|
|
289
|
-
$env:CHUTES_WEB_SEARCH_PROVIDER = "brave"
|
|
129
|
+
chutes-build --worktree feature-auth
|
|
290
130
|
```
|
|
291
131
|
|
|
292
|
-
|
|
132
|
+
Resume the latest session for the current directory:
|
|
293
133
|
|
|
294
134
|
```powershell
|
|
295
|
-
|
|
296
|
-
$env:CHUTES_BROWSER_HEADFUL = "1" # optional; default is headless
|
|
135
|
+
chutes-build --continue
|
|
297
136
|
```
|
|
298
137
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
138
|
+
Use `chutes-build --help` for the installed version's authoritative option
|
|
139
|
+
set. See the [CLI reference](docs/cli-reference.md) and
|
|
140
|
+
[slash-command reference](docs/slash-commands.md) for the maintained overview.
|
|
302
141
|
|
|
303
|
-
|
|
304
|
-
frames through the same Chutes vision path. Set `CHUTES_FFMPEG_EXECUTABLE` when
|
|
305
|
-
FFmpeg is not discoverable on `PATH`; restart Chutes Build after installing or
|
|
306
|
-
changing FFmpeg so the per-process capability cache is refreshed.
|
|
142
|
+
## Documentation
|
|
307
143
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
(
|
|
144
|
+
- [Getting started](docs/getting-started.md) — installation, authentication,
|
|
145
|
+
first session, models, and troubleshooting.
|
|
146
|
+
- [Configuration](docs/configuration.md) — state paths, routing, credentials,
|
|
147
|
+
web/browser options, media limits, and development-only endpoint overrides.
|
|
148
|
+
- [CLI reference](docs/cli-reference.md) and
|
|
149
|
+
[slash commands](docs/slash-commands.md) — public command surfaces.
|
|
150
|
+
- [Architecture](docs/ARCHITECTURE.md) — runtime layers and ownership map.
|
|
151
|
+
- [npm distribution](npm/README.md) and [release procedure](docs/releasing.md)
|
|
152
|
+
— launcher contents, native packages, verification, and publication order.
|
|
153
|
+
- [Privacy](PRIVACY.md), [security policy](SECURITY.md), and
|
|
154
|
+
[security review](docs/security-review.md) — operational trust boundaries.
|
|
155
|
+
- [Documentation index](docs/README.md) — complete user, maintainer, and design
|
|
156
|
+
reference map.
|
|
314
157
|
|
|
315
|
-
|
|
158
|
+
The concise guides available through `/docs` are embedded from
|
|
159
|
+
`crates/codegen/xai-grok-pager/docs/user-guide/`.
|
|
316
160
|
|
|
317
|
-
|
|
318
|
-
[docs/cli-reference.md](docs/cli-reference.md). Interactive slash commands are
|
|
319
|
-
documented in [docs/slash-commands.md](docs/slash-commands.md). Installed
|
|
320
|
-
binaries remain authoritative for the exact version: use
|
|
321
|
-
`chutes-build --help` and `chutes-build <command> --help`.
|
|
161
|
+
## Build from source
|
|
322
162
|
|
|
323
|
-
|
|
163
|
+
Prerequisites are Rust stable, Git, and the native C/C++ toolchain required by
|
|
164
|
+
Rust on your platform. Protocol Buffer tooling is vendored for normal builds.
|
|
324
165
|
|
|
325
|
-
|
|
166
|
+
```powershell
|
|
167
|
+
git clone https://github.com/TheStreamCode/chutes-build.git
|
|
168
|
+
cd chutes-build
|
|
169
|
+
cargo build -p chutes-build --release
|
|
170
|
+
```
|
|
326
171
|
|
|
327
|
-
|
|
328
|
-
`
|
|
329
|
-
sessions, logs, exports, credentials, plugins, user roles/personas, and bundled
|
|
330
|
-
agent definitions remain local. Prompts, selected repository content, memory
|
|
331
|
-
embeddings, voice recordings, OCR/media inputs, and browser traffic leave the
|
|
332
|
-
machine only when their corresponding hosted feature is invoked.
|
|
172
|
+
The executable is `target\release\chutes-build.exe` on Windows and
|
|
173
|
+
`target/release/chutes-build` on macOS/Linux.
|
|
333
174
|
|
|
334
|
-
|
|
175
|
+
### Repository map
|
|
335
176
|
|
|
336
|
-
|
|
177
|
+
| Path | Ownership |
|
|
178
|
+
| --- | --- |
|
|
179
|
+
| `AGENTS.md` | Repository-wide guidance and verification contract for coding agents. |
|
|
180
|
+
| `crates/chutes-build-core/` | Chutes routing, endpoint policy, catalog, reasoning, account, media, privacy, and product policy. |
|
|
181
|
+
| `crates/codegen/` | Retained and adapted upstream runtime crates. Keep crate names stable to make upstream review practical. |
|
|
182
|
+
| `npm/` | Native launcher, platform-package assembly, and npm verification. |
|
|
183
|
+
| `docs/` | Public technical references, maintainer procedures, and design records. |
|
|
184
|
+
| `.github/workflows/` | CI, security policy checks, upstream monitoring, and release packaging. |
|
|
185
|
+
| `prod/` and `third_party/` | Shared protocol sources and retained attribution/material from upstream. |
|
|
337
186
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
for sensitive work. Never place API keys in prompts, source files, or committed
|
|
342
|
-
configuration. See the [security review](docs/security-review.md) for release
|
|
343
|
-
controls, trust boundaries, and tracked dependency exceptions.
|
|
187
|
+
The root `Cargo.toml` is generated and treated as read-only. Make dependency
|
|
188
|
+
changes in the owning crate manifest or generator source instead of manually
|
|
189
|
+
reorganizing the generated workspace.
|
|
344
190
|
|
|
345
191
|
## Project
|
|
346
192
|
|
|
347
|
-
### Provenance
|
|
348
|
-
|
|
349
193
|
Chutes Build is a substantially modified fork of
|
|
350
|
-
[`xai-org/grok-build`](https://github.com/xai-org/grok-build).
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
See [NOTICE](NOTICE), [LICENSE](LICENSE), and
|
|
355
|
-
[THIRD-PARTY-NOTICES](THIRD-PARTY-NOTICES) for attribution.
|
|
356
|
-
|
|
357
|
-
New upstream releases and commits are detected by a read-only scheduled check
|
|
358
|
-
and reviewed through the documented [upstream synchronization
|
|
359
|
-
procedure](docs/upstream-sync.md); upstream changes are never merged or released
|
|
360
|
-
automatically.
|
|
361
|
-
|
|
362
|
-
### Contributing
|
|
194
|
+
[`xai-org/grok-build`](https://github.com/xai-org/grok-build). Upstream changes
|
|
195
|
+
are reviewed and ported selectively; they are never merged or released
|
|
196
|
+
automatically. See [Upstream synchronization](docs/upstream-sync.md).
|
|
363
197
|
|
|
364
198
|
Issues and focused pull requests are welcome. Read
|
|
365
|
-
[CONTRIBUTING.md](CONTRIBUTING.md), [
|
|
366
|
-
[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
|
|
199
|
+
[CONTRIBUTING.md](CONTRIBUTING.md), [AGENTS.md](AGENTS.md),
|
|
200
|
+
[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md), and [SECURITY.md](SECURITY.md) before
|
|
201
|
+
contributing.
|
|
202
|
+
|
|
203
|
+
Apache-2.0 licensing and attribution are documented in [LICENSE](LICENSE),
|
|
204
|
+
[NOTICE](NOTICE), and [THIRD-PARTY-NOTICES](THIRD-PARTY-NOTICES).
|
|
367
205
|
|
|
368
206
|
Copyright 2026 Michael Gasperini (Mikesoft).
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported versions
|
|
4
|
+
|
|
5
|
+
Chutes Build is currently a development preview. Security fixes are applied to
|
|
6
|
+
the latest revision of the default branch; older source snapshots are not
|
|
7
|
+
supported.
|
|
8
|
+
|
|
9
|
+
## Reporting a vulnerability
|
|
10
|
+
|
|
11
|
+
Use the repository's private GitHub Security Advisory reporting flow. Do not
|
|
12
|
+
open a public issue and do not include live credentials, private source code,
|
|
13
|
+
session archives, or personal data in a report.
|
|
14
|
+
|
|
15
|
+
Include:
|
|
16
|
+
|
|
17
|
+
- the affected revision and platform;
|
|
18
|
+
- a concise description of the impact and trust boundary;
|
|
19
|
+
- minimal reproduction steps using synthetic data;
|
|
20
|
+
- whether exploitation requires user approval, repository control, browser
|
|
21
|
+
access, or a malicious model/tool response;
|
|
22
|
+
- any proposed mitigation.
|
|
23
|
+
|
|
24
|
+
You should receive an acknowledgement when the report is reviewed. Disclosure
|
|
25
|
+
and remediation timing will be coordinated according to severity and the
|
|
26
|
+
availability of a safe fix.
|
|
27
|
+
|
|
28
|
+
## Security boundaries
|
|
29
|
+
|
|
30
|
+
Chutes Build can execute commands, modify files, invoke models, start subagents,
|
|
31
|
+
and control an isolated browser. Model output, repository contents, web pages,
|
|
32
|
+
MCP servers, tool responses, and downloaded documents are untrusted input. Keep
|
|
33
|
+
permission prompts enabled, use trusted repositories, and never expose secrets
|
|
34
|
+
in prompts or committed files.
|
|
35
|
+
|
|
36
|
+
The project intentionally disables telemetry, remote trace uploads, automatic
|
|
37
|
+
updates, upstream session sharing/search, remote workspace exposure, and
|
|
38
|
+
upstream managed configuration. These are compile-time product policies, not
|
|
39
|
+
server-controlled feature flags. Any change to those guarantees requires an
|
|
40
|
+
explicit security and privacy review.
|
|
41
|
+
|
|
42
|
+
Ambient Chutes credentials are restricted to allowlisted official HTTPS hosts.
|
|
43
|
+
Custom inference and model-catalog endpoints require dedicated credentials.
|
|
44
|
+
OAuth client secrets are read from the environment, used for token exchange
|
|
45
|
+
and refresh when configured, and are never persisted by Chutes Build.
|
|
46
|
+
|
|
47
|
+
Credential-bearing and download clients reject URL credentials, unexpected
|
|
48
|
+
ports, insecure schemes, redirects, and private, loopback, link-local, or
|
|
49
|
+
special-use DNS results. Development endpoint overrides require the explicit
|
|
50
|
+
`CHUTES_ALLOW_INSECURE_ENDPOINTS=1` opt-in; the opt-in does not make ambient
|
|
51
|
+
Chutes credentials transferable to arbitrary model endpoints. Custom Context7
|
|
52
|
+
endpoints require their own opt-in and never receive `CONTEXT7_API_KEY`.
|
|
53
|
+
|
|
54
|
+
Machine-readable MCP listings redact environment/header values and URL
|
|
55
|
+
credentials. Destructive session, memory, plugin, marketplace, and worktree
|
|
56
|
+
operations require an interactive confirmation unless an explicit `--yes`
|
|
57
|
+
flag is provided. Media responses stream to bounded temporary storage, default
|
|
58
|
+
to 128 MiB with a 512 MiB hard ceiling, and use transactional create-new
|
|
59
|
+
artifact writes. Automatic permission mode only fast-paths deterministic
|
|
60
|
+
read-only shell commands; classifier failure returns to the normal user prompt.
|
|
61
|
+
|
|
62
|
+
## Automated release checks
|
|
63
|
+
|
|
64
|
+
CI scans the complete Git history for known secret patterns and evaluates the
|
|
65
|
+
resolved Rust dependency graph for advisories, licenses, duplicate versions,
|
|
66
|
+
and unapproved sources. Release packaging additionally executes every native
|
|
67
|
+
binary, creates SHA-256 sidecars for native npm archives, verifies those
|
|
68
|
+
sidecars after artifact download, and runs the assembled launcher with its
|
|
69
|
+
native Linux package before publication can begin.
|
|
70
|
+
|
|
71
|
+
Documented advisory exceptions must include a bounded rationale in `deny.toml`.
|
|
72
|
+
New advisories or source-policy violations fail CI by default. The current
|
|
73
|
+
review record is maintained in [docs/security-review.md](docs/security-review.md).
|
package/npm/README.md
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
|
-
# npm distribution
|
|
1
|
+
# npm distribution and native packages
|
|
2
2
|
|
|
3
3
|
The public `chutes-build` package is a dependency-free Node.js launcher. Its
|
|
4
4
|
optional dependencies contain the native Rust executable for each supported
|
|
5
5
|
platform, so installation does not require Rust and does not download an
|
|
6
6
|
executable from a lifecycle script.
|
|
7
7
|
|
|
8
|
+
The launcher archive includes the product README, changelog, security and
|
|
9
|
+
privacy policies, license, and notice. It deliberately defines no install or
|
|
10
|
+
post-install lifecycle script; executable selection happens only when the
|
|
11
|
+
`chutes-build` command runs.
|
|
12
|
+
|
|
8
13
|
Supported release targets:
|
|
9
14
|
|
|
10
15
|
- Windows x64 and ARM64
|
|
11
16
|
- macOS x64 and ARM64
|
|
12
17
|
- Linux glibc x64 and ARM64
|
|
13
18
|
|
|
19
|
+
For installation and first-run instructions, see the repository
|
|
20
|
+
[`README`](../README.md) and the
|
|
21
|
+
[getting-started guide](https://github.com/TheStreamCode/chutes-build/blob/main/docs/getting-started.md).
|
|
22
|
+
|
|
14
23
|
## Prepare a platform package
|
|
15
24
|
|
|
16
25
|
Build the release executable for the target first, then stage its npm package:
|
|
@@ -30,12 +39,17 @@ or test scripts. Validate release metadata before packaging:
|
|
|
30
39
|
|
|
31
40
|
```powershell
|
|
32
41
|
npm run verify:release
|
|
42
|
+
npm test
|
|
43
|
+
npm pack --dry-run
|
|
33
44
|
```
|
|
34
45
|
|
|
35
46
|
The manual GitHub Actions workflow in `.github/workflows/package-release.yml`
|
|
36
47
|
builds all six native packages. Its publish input is disabled by default and
|
|
37
|
-
requires the
|
|
38
|
-
|
|
48
|
+
requires the `npm-release` environment when enabled. Native archives
|
|
49
|
+
are published before the launcher, every publish uses npm provenance, and an
|
|
50
|
+
already published package/version is skipped during a recovery run. See
|
|
51
|
+
the [release procedure](https://github.com/TheStreamCode/chutes-build/blob/main/docs/releasing.md)
|
|
52
|
+
for the complete workflow.
|
|
39
53
|
|
|
40
54
|
## Verify the launcher
|
|
41
55
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chutes-build",
|
|
3
|
-
"version": "0.4.
|
|
4
|
-
"description": "Privacy-first coding agent
|
|
3
|
+
"version": "0.4.2",
|
|
4
|
+
"description": "Privacy-first, open-source coding agent for the Chutes ecosystem",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Michael Gasperini (Mikesoft)",
|
|
7
7
|
"homepage": "https://github.com/TheStreamCode/chutes-build#readme",
|
|
@@ -24,27 +24,38 @@
|
|
|
24
24
|
"README.md",
|
|
25
25
|
"LICENSE",
|
|
26
26
|
"NOTICE",
|
|
27
|
-
"PRIVACY.md"
|
|
27
|
+
"PRIVACY.md",
|
|
28
|
+
"SECURITY.md",
|
|
29
|
+
"CHANGELOG.md"
|
|
28
30
|
],
|
|
29
31
|
"engines": {
|
|
30
32
|
"node": ">=18"
|
|
31
33
|
},
|
|
32
34
|
"scripts": {
|
|
33
35
|
"test": "node --test npm/tests/*.test.cjs",
|
|
34
|
-
"verify:release": "node npm/scripts/verify-release.mjs"
|
|
36
|
+
"verify:release": "node npm/scripts/verify-release.mjs",
|
|
37
|
+
"check": "npm test && npm run verify:release && npm pack --dry-run"
|
|
35
38
|
},
|
|
36
39
|
"optionalDependencies": {
|
|
37
|
-
"chutes-build-darwin-arm64": "0.4.
|
|
38
|
-
"chutes-build-darwin-x64": "0.4.
|
|
39
|
-
"chutes-build-linux-arm64-gnu": "0.4.
|
|
40
|
-
"chutes-build-linux-x64-gnu": "0.4.
|
|
41
|
-
"chutes-build-win32-arm64": "0.4.
|
|
42
|
-
"chutes-build-win32-x64": "0.4.
|
|
40
|
+
"chutes-build-darwin-arm64": "0.4.2",
|
|
41
|
+
"chutes-build-darwin-x64": "0.4.2",
|
|
42
|
+
"chutes-build-linux-arm64-gnu": "0.4.2",
|
|
43
|
+
"chutes-build-linux-x64-gnu": "0.4.2",
|
|
44
|
+
"chutes-build-win32-arm64": "0.4.2",
|
|
45
|
+
"chutes-build-win32-x64": "0.4.2"
|
|
43
46
|
},
|
|
44
47
|
"keywords": [
|
|
45
48
|
"ai",
|
|
49
|
+
"ai-agents",
|
|
46
50
|
"chutes",
|
|
47
51
|
"cli",
|
|
48
|
-
"coding-agent"
|
|
52
|
+
"coding-agent",
|
|
53
|
+
"developer-tools",
|
|
54
|
+
"mcp",
|
|
55
|
+
"multimodal",
|
|
56
|
+
"privacy",
|
|
57
|
+
"rust",
|
|
58
|
+
"terminal",
|
|
59
|
+
"tui"
|
|
49
60
|
]
|
|
50
61
|
}
|