brass-runtime 1.16.0 → 1.16.1
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 +17 -0
- package/README.md +283 -18
- package/dist/agent/cli/main.cjs +38 -38
- package/dist/agent/cli/main.js +6 -6
- package/dist/agent/cli/main.mjs +6 -6
- package/dist/agent/index.cjs +7 -7
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.js +6 -6
- package/dist/agent/index.mjs +6 -6
- package/dist/chunk-2HQTDLHF.mjs +683 -0
- package/dist/chunk-36I3M4UC.mjs +370 -0
- package/dist/{chunk-QY5FKYEQ.js → chunk-3AYM6WPJ.js} +570 -51
- package/dist/chunk-3LOYJFRR.cjs +300 -0
- package/dist/chunk-3Y2RIUMM.js +300 -0
- package/dist/{chunk-N6VHMOWB.cjs → chunk-4ROBZFL6.cjs} +128 -128
- package/dist/{chunk-NC5SDRYE.js → chunk-52OB2ROS.js} +4 -4
- package/dist/{chunk-JX3LZQJH.cjs → chunk-52PPNNI4.cjs} +82 -20
- package/dist/{chunk-5YOQOXEQ.cjs → chunk-5EC274J5.cjs} +676 -293
- package/dist/chunk-5QC7LRZ3.js +229 -0
- package/dist/{chunk-7TL2LHQJ.js → chunk-5VRJNBLZ.mjs} +524 -141
- package/dist/chunk-62AZW6UT.cjs +313 -0
- package/dist/chunk-6IXXWIUM.js +683 -0
- package/dist/chunk-74ZTY6CP.js +2871 -0
- package/dist/chunk-76YMRMH2.cjs +777 -0
- package/dist/chunk-7CMJS3QE.mjs +2871 -0
- package/dist/{chunk-2WC63LJK.mjs → chunk-7JIJOVCT.js} +20 -10
- package/dist/{chunk-FM4W4QPL.js → chunk-A2OM6NEH.mjs} +5 -4
- package/dist/chunk-AGR5B2BC.cjs +683 -0
- package/dist/chunk-AVNQLJ5V.js +777 -0
- package/dist/chunk-B33ICAKP.js +313 -0
- package/dist/{chunk-J3H54ZRV.mjs → chunk-B5JD23U7.mjs} +1 -1
- package/dist/chunk-BABBZK4Y.js +2024 -0
- package/dist/{chunk-U5KWK3PX.mjs → chunk-C3MDXTRZ.js} +11 -0
- package/dist/{chunk-F5EUMJL7.mjs → chunk-CIZFIMK5.js} +55 -5
- package/dist/{chunk-SPUEME2B.cjs → chunk-CZIVE6NT.cjs} +12 -1
- package/dist/{chunk-TDVMADDN.js → chunk-DNFJLJMW.mjs} +11 -0
- package/dist/chunk-DNFO2EIZ.mjs +777 -0
- package/dist/{chunk-XDZOO4L5.js → chunk-EJ6BPYVR.mjs} +79 -17
- package/dist/{chunk-JNFRRJYH.cjs → chunk-ENKODRU3.cjs} +242 -192
- package/dist/chunk-EOC4UHBS.mjs +229 -0
- package/dist/{chunk-7LVI2GIN.js → chunk-FH2X7BVP.js} +507 -72
- package/dist/{chunk-OOGJ73B6.js → chunk-FHQGHPMO.mjs} +20 -10
- package/dist/{chunk-WQ5QNU5R.cjs → chunk-GLE2WY7Z.cjs} +652 -217
- package/dist/{chunk-G6IQOE4P.mjs → chunk-GYM3LLGS.mjs} +507 -72
- package/dist/chunk-HLWLMW2F.mjs +2024 -0
- package/dist/{chunk-TVN5I4U6.cjs → chunk-JF5WGYJJ.cjs} +25 -24
- package/dist/{chunk-CY33PGEX.mjs → chunk-KH4SYAOS.mjs} +570 -51
- package/dist/chunk-KN32XNTH.mjs +313 -0
- package/dist/chunk-KQLYONSE.cjs +2871 -0
- package/dist/{chunk-7HUOJA4W.cjs → chunk-KZJQ723N.cjs} +90 -80
- package/dist/{chunk-CCKHV5BT.mjs → chunk-L2SYFEBS.js} +5 -4
- package/dist/{chunk-IJT6RRQ5.cjs → chunk-L6VB5N7Q.cjs} +20 -9
- package/dist/{chunk-ZGLD4TVZ.mjs → chunk-MBEJI5HF.mjs} +4 -4
- package/dist/{chunk-PRWCB3QL.mjs → chunk-MIIYDLGM.js} +524 -141
- package/dist/{chunk-H55LI6WY.js → chunk-MOO4L7F4.mjs} +15 -4
- package/dist/{chunk-7XOPAB5Q.js → chunk-MT3OWDPC.mjs} +55 -5
- package/dist/chunk-MVGUEJ5Z.cjs +370 -0
- package/dist/chunk-PD4EJTQC.cjs +229 -0
- package/dist/chunk-PWC3RBQE.mjs +300 -0
- package/dist/{chunk-MWXMNYJS.cjs → chunk-Q2I37RP3.cjs} +643 -124
- package/dist/{chunk-VFIUZG7J.mjs → chunk-RKGKFN2A.js} +79 -17
- package/dist/{chunk-NYL4D7SK.cjs → chunk-SA6HUJVI.cjs} +5 -5
- package/dist/{chunk-K2T3DV26.mjs → chunk-TRM4JUZQ.js} +15 -4
- package/dist/chunk-UB4B6OFY.js +370 -0
- package/dist/{chunk-G3XGCZDQ.js → chunk-UCUBNWM2.js} +1 -1
- package/dist/chunk-VN44DYYT.cjs +2024 -0
- package/dist/{client-CtFmoDvM.d.ts → client-CZHU674n.d.ts} +211 -36
- package/dist/core/index.cjs +135 -9
- package/dist/core/index.d.ts +238 -33
- package/dist/core/index.js +155 -29
- package/dist/core/index.mjs +155 -29
- package/dist/{effect-CGNl5Rqp.d.ts → effect-DIUHZ9IN.d.ts} +89 -1
- package/dist/effectRunner-CFLC32IK.cjs +8 -0
- package/dist/{effectRunner-A4CHJXJI.js → effectRunner-L4S7IPT3.js} +2 -2
- package/dist/{effectRunner-OPUF6QRN.mjs → effectRunner-NNGG75QA.mjs} +2 -2
- package/dist/http/index.cjs +324 -2986
- package/dist/http/index.d.ts +54 -68
- package/dist/http/index.js +238 -2900
- package/dist/http/index.mjs +238 -2900
- package/dist/http/testing.cjs +14 -12
- package/dist/http/testing.d.ts +5 -4
- package/dist/http/testing.js +10 -8
- package/dist/http/testing.mjs +10 -8
- package/dist/index.cjs +423 -255
- package/dist/index.d.ts +87 -69
- package/dist/index.js +301 -133
- package/dist/index.mjs +301 -133
- package/dist/observability/index.cjs +16 -531
- package/dist/observability/index.d.ts +81 -8
- package/dist/observability/index.js +23 -538
- package/dist/observability/index.mjs +23 -538
- package/dist/perf/cli.cjs +401 -0
- package/dist/perf/cli.d.ts +1 -0
- package/dist/perf/cli.js +401 -0
- package/dist/perf/cli.mjs +401 -0
- package/dist/perf/index.cjs +141 -0
- package/dist/perf/index.d.ts +483 -0
- package/dist/perf/index.js +141 -0
- package/dist/perf/index.mjs +141 -0
- package/dist/schedule-CK3Ml_7p.d.ts +259 -0
- package/dist/schema/index.cjs +6 -2
- package/dist/schema/index.d.ts +3 -1
- package/dist/schema/index.js +5 -1
- package/dist/schema/index.mjs +5 -1
- package/dist/{server-C8hDXA74.d.ts → server-GJPg8ZSG.d.ts} +4 -3
- package/dist/{stream-dvSs0QS5.d.ts → stream-B4oK9JFP.d.ts} +1 -1
- package/dist/{tracer-B5tRH9H7.d.ts → tracer-Hwt1cl7h.d.ts} +13 -54
- package/dist/{tracing-Dt9S_6V8.d.ts → tracing-DqbTKGcf.d.ts} +1 -1
- package/docs/ARCHITECTURE.md +292 -0
- package/docs/README.md +63 -0
- package/docs/adr/0001-ai-context-pack.md +32 -0
- package/docs/agent-apply-mode.md +104 -0
- package/docs/agent-approvals.md +110 -0
- package/docs/agent-batch.md +185 -0
- package/docs/agent-boundaries.md +112 -0
- package/docs/agent-chat-sessions.md +160 -0
- package/docs/agent-ci.md +17 -0
- package/docs/agent-cli.md +405 -0
- package/docs/agent-config.md +480 -0
- package/docs/agent-context-discovery.md +159 -0
- package/docs/agent-copilot-like-dx.md +126 -0
- package/docs/agent-declarative-optimized-planning.md +138 -0
- package/docs/agent-dx.md +224 -0
- package/docs/agent-env-files.md +126 -0
- package/docs/agent-follow-up-context.md +43 -0
- package/docs/agent-global-usage.md +180 -0
- package/docs/agent-init.md +109 -0
- package/docs/agent-install-and-configure.md +516 -0
- package/docs/agent-language-workspace-ux.md +99 -0
- package/docs/agent-llm-adapters.md +123 -0
- package/docs/agent-local-install.md +190 -0
- package/docs/agent-local-tests.md +51 -0
- package/docs/agent-observability.md +155 -0
- package/docs/agent-patch-quality-loop.md +162 -0
- package/docs/agent-presets.md +22 -0
- package/docs/agent-project-commands.md +237 -0
- package/docs/agent-project-intelligence.md +156 -0
- package/docs/agent-redaction.md +18 -0
- package/docs/agent-release-readiness.md +76 -0
- package/docs/agent-rollback-safety.md +162 -0
- package/docs/agent-rollback.md +23 -0
- package/docs/agent-run-artifacts.md +16 -0
- package/docs/agent-vscode-auto-discovery.md +137 -0
- package/docs/agent-vscode-batch-runner.md +100 -0
- package/docs/agent-vscode-chat-layout.md +90 -0
- package/docs/agent-vscode-clean-install.md +147 -0
- package/docs/agent-vscode-code-actions.md +70 -0
- package/docs/agent-vscode-diff-preview.md +45 -0
- package/docs/agent-vscode-inline-assist.md +56 -0
- package/docs/agent-vscode-install.md +186 -0
- package/docs/agent-vscode-model-setup.md +97 -0
- package/docs/agent-vscode-patch-preview.md +92 -0
- package/docs/agent-vscode-problems.md +79 -0
- package/docs/agent-vscode-project-dashboard.md +106 -0
- package/docs/agent-vscode-run-history.md +92 -0
- package/docs/agent-vscode-ux.md +73 -0
- package/docs/ai/INVARIANTS.md +84 -0
- package/docs/ai/PROJECT_MAP.md +338 -0
- package/docs/ai/PUBLIC_API.md +336 -0
- package/docs/ai/VALIDATION_MATRIX.md +67 -0
- package/docs/api-polish.md +37 -0
- package/docs/cancellation.md +162 -0
- package/docs/coverage.md +46 -0
- package/docs/getting-started.md +159 -0
- package/docs/guides/README.md +40 -0
- package/docs/guides/circuit-breaker.md +89 -0
- package/docs/guides/error-handling.md +91 -0
- package/docs/guides/getting-started.md +107 -0
- package/docs/guides/layers.md +189 -0
- package/docs/guides/metrics.md +101 -0
- package/docs/guides/resource-management.md +141 -0
- package/docs/guides/retry.md +215 -0
- package/docs/guides/semaphore.md +66 -0
- package/docs/guides/streams.md +117 -0
- package/docs/guides/supervisors.md +98 -0
- package/docs/guides/testing.md +162 -0
- package/docs/guides/tracing.md +71 -0
- package/docs/http-recipes.md +399 -0
- package/docs/http.md +749 -0
- package/docs/modules.md +285 -0
- package/docs/observability-collector-smoke.md +31 -0
- package/docs/observability-framework-examples.md +98 -0
- package/docs/observability.md +542 -0
- package/docs/otel-collector-smoke.yaml +27 -0
- package/docs/performance-profiler.md +199 -0
- package/docs/production-readiness.md +73 -0
- package/docs/recipes/README.md +12 -0
- package/docs/recipes/http-server.md +45 -0
- package/docs/recipes/layers.md +44 -0
- package/docs/recipes/performance.md +47 -0
- package/docs/recipes/runtime.md +41 -0
- package/docs/recipes/testing.md +41 -0
- package/docs/release.md +53 -0
- package/docs/wasm-bounded-queues.md +44 -0
- package/docs/wasm-engine-observability-benchmarks.md +85 -0
- package/docs/wasm-fiber-engine.md +117 -0
- package/docs/wasm-scheduler-state-machine.md +122 -0
- package/docs/wasm-stream-chunks.md +54 -0
- package/package.json +22 -2
- package/dist/chunk-45F7OKGT.cjs +0 -104
- package/dist/chunk-7V4KY4RL.mjs +0 -104
- package/dist/chunk-DJQ7OMMB.cjs +0 -144
- package/dist/chunk-GOV47PPB.mjs +0 -552
- package/dist/chunk-JF4XXPZ5.cjs +0 -552
- package/dist/chunk-KCPT2D6G.js +0 -552
- package/dist/chunk-NOYZIMUJ.mjs +0 -144
- package/dist/chunk-PNVFW245.js +0 -144
- package/dist/chunk-ROJC3NBJ.js +0 -104
- package/dist/effectRunner-3ZHAD3LE.cjs +0 -8
- package/dist/schedule-Fque9Abz.d.ts +0 -70
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
# Brass Agent CLI
|
|
2
|
+
|
|
3
|
+
## Initialize a workspace
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
brass-agent --init
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
This creates `.brass-agent.json`, `brass-agent.batch.json`, `.env.example`, and `BRASS_AGENT.md` in the workspace. Existing files are skipped unless `--force` is passed.
|
|
10
|
+
|
|
11
|
+
Useful variants:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
brass-agent --init --init-dry-run
|
|
15
|
+
brass-agent --init --init-profile google
|
|
16
|
+
brass-agent --init --init-profile fake --force
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
See [Agent init](./agent-init.md) for the generated config and recommended first-run flow.
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
`brass-agent` is the development CLI for the experimental `src/agent` module.
|
|
23
|
+
It wires the agent environment together, runs `runAgent(...)`, and prints either a
|
|
24
|
+
human-readable run summary, streamed event JSON, protocol JSON Lines, or the raw `AgentState` JSON.
|
|
25
|
+
|
|
26
|
+
The CLI is intentionally thin:
|
|
27
|
+
|
|
28
|
+
```txt
|
|
29
|
+
CLI
|
|
30
|
+
-> parse flags
|
|
31
|
+
-> load .brass-agent.json if present
|
|
32
|
+
-> choose LLM provider
|
|
33
|
+
-> choose context discovery budget
|
|
34
|
+
-> choose approval strategy
|
|
35
|
+
-> create AgentEnv
|
|
36
|
+
-> create Runtime
|
|
37
|
+
-> runAgent(...)
|
|
38
|
+
-> print result
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The runtime and agent invariants still live below the CLI. The CLI must not run
|
|
42
|
+
side effects directly except for reading process arguments/environment, prompting
|
|
43
|
+
for approvals, and printing output.
|
|
44
|
+
|
|
45
|
+
## Install/build entry
|
|
46
|
+
|
|
47
|
+
The package exposes a binary after build:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm run build
|
|
51
|
+
npm run agent:link
|
|
52
|
+
brass-agent "fix the failing tests"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
For local development without building:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm run agent:dev -- "fix the failing tests"
|
|
59
|
+
# or
|
|
60
|
+
npx tsx src/agent/cli/main.ts "fix the failing tests"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Usage
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
brass-agent [options] "goal"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Options:
|
|
70
|
+
|
|
71
|
+
```txt
|
|
72
|
+
--mode read-only|propose|write|autonomous
|
|
73
|
+
Agent permission mode. Default: propose.
|
|
74
|
+
|
|
75
|
+
--apply
|
|
76
|
+
Alias for --mode write.
|
|
77
|
+
|
|
78
|
+
--cwd PATH
|
|
79
|
+
Starting directory for workspace discovery. Default: current directory.
|
|
80
|
+
|
|
81
|
+
--where, --print-workspace
|
|
82
|
+
Print the resolved workspace root and exit.
|
|
83
|
+
|
|
84
|
+
--no-discover-workspace
|
|
85
|
+
Use --cwd exactly instead of searching upward for package.json, .brass-agent.json, workspace markers, or .git.
|
|
86
|
+
|
|
87
|
+
--config PATH
|
|
88
|
+
Load a specific .brass-agent.json policy/config file.
|
|
89
|
+
|
|
90
|
+
--batch-file PATH
|
|
91
|
+
Run multiple goals sequentially from a JSON or line-based file.
|
|
92
|
+
|
|
93
|
+
--batch-stop-on-failure
|
|
94
|
+
Stop a batch after the first failed run.
|
|
95
|
+
|
|
96
|
+
--batch-continue-on-failure
|
|
97
|
+
Continue a batch even when one run fails.
|
|
98
|
+
|
|
99
|
+
--no-config
|
|
100
|
+
Do not discover or load an agent config file.
|
|
101
|
+
|
|
102
|
+
--json
|
|
103
|
+
Print the full AgentState JSON instead of human-readable output.
|
|
104
|
+
|
|
105
|
+
--events-json
|
|
106
|
+
Stream compact AgentEvent objects as JSON Lines and do not print final AgentState.
|
|
107
|
+
|
|
108
|
+
--protocol-json
|
|
109
|
+
Stream Brass Agent protocol JSON Lines. This includes event messages and a final-state message for editor integrations.
|
|
110
|
+
|
|
111
|
+
--yes, -y
|
|
112
|
+
Auto-approve approval prompts. Useful for CI and smoke tests.
|
|
113
|
+
|
|
114
|
+
--no-input
|
|
115
|
+
Do not prompt; reject any action that requires approval.
|
|
116
|
+
|
|
117
|
+
--approval auto|interactive|approve|deny
|
|
118
|
+
Approval strategy. Default: auto.
|
|
119
|
+
|
|
120
|
+
--help, -h
|
|
121
|
+
Show help.
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
## Batch runs
|
|
126
|
+
|
|
127
|
+
P21 adds sequential batch execution:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
brass-agent --batch-file ./brass-agent.batch.json --ci
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Batch files can be JSON arrays, JSON objects with a `goals` array, or line-based
|
|
134
|
+
text files. Each item becomes a normal `runAgent(...)` invocation, so policy,
|
|
135
|
+
approvals, redaction, rollback safety, and CI exit code handling still apply.
|
|
136
|
+
|
|
137
|
+
See [Agent batch runs](./agent-batch.md).
|
|
138
|
+
|
|
139
|
+
## Config files
|
|
140
|
+
|
|
141
|
+
By default, the CLI first resolves a workspace root by searching upward from `--cwd` for:
|
|
142
|
+
|
|
143
|
+
```txt
|
|
144
|
+
.brass-agent.json
|
|
145
|
+
brass-agent.config.json
|
|
146
|
+
package.json
|
|
147
|
+
pnpm-workspace.yaml
|
|
148
|
+
turbo.json
|
|
149
|
+
nx.json
|
|
150
|
+
.git
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Then it searches upward from that resolved workspace root for config files:
|
|
154
|
+
|
|
155
|
+
```txt
|
|
156
|
+
.brass-agent.json
|
|
157
|
+
brass-agent.config.json
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Use `brass-agent --where` to see the resolved root.
|
|
161
|
+
|
|
162
|
+
Use `--config PATH` to force a specific file, or `--no-config` to run with
|
|
163
|
+
only built-in defaults and environment variables. Config can set default mode,
|
|
164
|
+
approval strategy, LLM provider/model, project command discovery, context discovery,
|
|
165
|
+
shell command policy, patch apply policy, and tool timeouts/retries.
|
|
166
|
+
|
|
167
|
+
Precedence is:
|
|
168
|
+
|
|
169
|
+
```txt
|
|
170
|
+
CLI flags > environment variables > .brass-agent.json > built-in defaults
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
See [Agent config and policy files](./agent-config.md).
|
|
174
|
+
|
|
175
|
+
## Context discovery
|
|
176
|
+
|
|
177
|
+
Before calling the LLM, the CLI-driven agent now runs a bounded context pass by
|
|
178
|
+
default. It extracts paths and identifiers from the goal and validation output,
|
|
179
|
+
then uses `fs.searchText` / `fs.readFile` to gather likely relevant files.
|
|
180
|
+
|
|
181
|
+
Tune it in config:
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"context": {
|
|
186
|
+
"maxSearchQueries": 3,
|
|
187
|
+
"maxFiles": 4
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Or disable it:
|
|
193
|
+
|
|
194
|
+
```json
|
|
195
|
+
{
|
|
196
|
+
"context": {
|
|
197
|
+
"enabled": false
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
See [Agent context discovery](./agent-context-discovery.md).
|
|
203
|
+
|
|
204
|
+
## Modes
|
|
205
|
+
|
|
206
|
+
### `propose`
|
|
207
|
+
|
|
208
|
+
Default mode. The agent can inspect the workspace, discover project-aware
|
|
209
|
+
validation commands from `package.json`/lockfiles/config, run whitelisted
|
|
210
|
+
validation commands, discover a bounded set of relevant context files, ask the
|
|
211
|
+
LLM, and record `patch.proposed`. It does not
|
|
212
|
+
apply changes.
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
brass-agent "fix the failing tests"
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### `write`
|
|
219
|
+
|
|
220
|
+
Writable mode. The agent can apply an extracted unified diff through the
|
|
221
|
+
`PatchService`, then rerun validation. If a generated patch fails to apply or
|
|
222
|
+
validation still fails, P13 can ask `llm.patch` for a bounded repair diff and
|
|
223
|
+
validate again. Applying a patch still requires approval.
|
|
224
|
+
In an interactive terminal the CLI prompts by default; in CI/non-interactive
|
|
225
|
+
contexts use `--yes` to approve or `--no-input` to reject.
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
brass-agent --apply "fix the failing tests"
|
|
229
|
+
# equivalent:
|
|
230
|
+
brass-agent --mode write "fix the failing tests"
|
|
231
|
+
# non-interactive approval:
|
|
232
|
+
brass-agent --apply --yes "fix the failing tests"
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### `read-only`
|
|
236
|
+
|
|
237
|
+
Inspection mode. The agent reads workspace context, checks project metadata such
|
|
238
|
+
as lockfiles, and asks the LLM without running shell validation or applying
|
|
239
|
+
patches.
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
brass-agent --mode read-only "inspect this repo"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### `autonomous`
|
|
246
|
+
|
|
247
|
+
Reserved for future work. It currently has the broadest policy surface, but P6
|
|
248
|
+
still routes sensitive actions such as `patch.apply` through approvals.
|
|
249
|
+
|
|
250
|
+
## Output
|
|
251
|
+
|
|
252
|
+
Human-readable output is the default:
|
|
253
|
+
|
|
254
|
+
```txt
|
|
255
|
+
brass-agent propose
|
|
256
|
+
workspace: /repo
|
|
257
|
+
goal: fix the failing tests
|
|
258
|
+
|
|
259
|
+
✓ read package.json
|
|
260
|
+
! pnpm test exited 1
|
|
261
|
+
✓ llm.plan responded
|
|
262
|
+
✓ patch proposed
|
|
263
|
+
✓ done
|
|
264
|
+
|
|
265
|
+
phase: done
|
|
266
|
+
steps: 5
|
|
267
|
+
patch: proposed only; rerun with --apply to apply it
|
|
268
|
+
|
|
269
|
+
summary:
|
|
270
|
+
...
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Use `--json` when debugging the state machine or tests:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
brass-agent --json "fix the failing tests"
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Use `--events-json` for quick event-only streams:
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
brass-agent --events-json "fix the failing tests"
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Use `--protocol-json` for editor integrations and other clients that need both live events and the final compact state:
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
brass-agent --protocol-json "fix the failing tests"
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
The protocol is newline-delimited JSON:
|
|
292
|
+
|
|
293
|
+
```jsonl
|
|
294
|
+
{"protocol":"brass-agent","version":1,"type":"event","event":{"type":"agent.run.started"}}
|
|
295
|
+
{"protocol":"brass-agent","version":1,"type":"final-state","state":{"phase":"done"}}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
See [Agent DX surfaces](./agent-dx.md).
|
|
299
|
+
|
|
300
|
+
## Project command discovery
|
|
301
|
+
|
|
302
|
+
The CLI passes `config.project` into `runAgent(...)`. The agent uses it to
|
|
303
|
+
select validation commands instead of hardcoding `npm test`.
|
|
304
|
+
|
|
305
|
+
Default discovery reads `package.json`, checks common lockfiles, infers
|
|
306
|
+
`npm`/`pnpm`/`yarn`/`bun`, and selects scripts like `test`,
|
|
307
|
+
`test:ci`, `typecheck`, or `lint` when relevant.
|
|
308
|
+
|
|
309
|
+
Examples:
|
|
310
|
+
|
|
311
|
+
```json
|
|
312
|
+
{
|
|
313
|
+
"project": {
|
|
314
|
+
"packageManager": "pnpm",
|
|
315
|
+
"validationCommands": ["pnpm run test:unit", "pnpm run typecheck"]
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
See [Agent project command discovery](./agent-project-commands.md).
|
|
321
|
+
|
|
322
|
+
## Approvals
|
|
323
|
+
|
|
324
|
+
Actions can be allowed, denied, or marked as requiring approval by
|
|
325
|
+
`PermissionService`. In P6, `patch.apply` requires approval in `write` and
|
|
326
|
+
`autonomous` modes.
|
|
327
|
+
|
|
328
|
+
Approval strategy is chosen by CLI flags/environment:
|
|
329
|
+
|
|
330
|
+
```txt
|
|
331
|
+
--approval auto Interactive only when stdin/stderr/stdout are TTYs; otherwise deny.
|
|
332
|
+
--approval interactive Always prompt on stderr.
|
|
333
|
+
--approval approve Auto-approve all approval requests.
|
|
334
|
+
--approval deny Auto-reject all approval requests.
|
|
335
|
+
--yes, -y Alias for --approval approve.
|
|
336
|
+
--no-input Alias for --approval deny.
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
Environment knobs:
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
BRASS_AGENT_APPROVAL=approve|deny|interactive|auto
|
|
343
|
+
BRASS_AGENT_AUTO_APPROVE=true
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Prompts are written to stderr, so `--json --approval interactive` can still keep
|
|
347
|
+
final JSON on stdout. The default remains conservative: non-interactive runs deny
|
|
348
|
+
approval-required actions unless `--yes` or `BRASS_AGENT_AUTO_APPROVE=true` is
|
|
349
|
+
set.
|
|
350
|
+
|
|
351
|
+
## LLM providers
|
|
352
|
+
|
|
353
|
+
The CLI chooses a provider from environment variables.
|
|
354
|
+
|
|
355
|
+
Fake/offline:
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
BRASS_LLM_PROVIDER=fake brass-agent "inspect"
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
Google Gemini:
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
BRASS_LLM_PROVIDER=google \
|
|
365
|
+
GEMINI_API_KEY="..." \
|
|
366
|
+
BRASS_GOOGLE_MODEL="gemini-2.5-flash" \
|
|
367
|
+
brass-agent "fix the failing tests"
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
OpenAI-compatible:
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
BRASS_LLM_PROVIDER=openai-compatible \
|
|
374
|
+
BRASS_LLM_ENDPOINT="https://api.openai.com/v1/chat/completions" \
|
|
375
|
+
BRASS_LLM_API_KEY="..." \
|
|
376
|
+
BRASS_LLM_MODEL="gpt-4.1" \
|
|
377
|
+
brass-agent "fix the failing tests"
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
If `BRASS_LLM_PROVIDER` is not set, the CLI tries Google, then
|
|
381
|
+
OpenAI-compatible, then falls back to the fake LLM.
|
|
382
|
+
|
|
383
|
+
The CLI also auto-loads supported agent environment keys from `.brass-agent.env`,
|
|
384
|
+
`.env.local`, and `.env` in `--cwd`. Use `--env-file PATH` to choose a specific
|
|
385
|
+
file, or `--no-env-file` to disable this behavior. The loader never prints secret
|
|
386
|
+
values and ignores non-agent keys. See [Agent env files](./agent-env-files.md).
|
|
387
|
+
|
|
388
|
+
## Applying a reviewed patch file
|
|
389
|
+
|
|
390
|
+
Editor integrations can apply an already-reviewed unified diff without asking
|
|
391
|
+
the model to regenerate it. This exact patch-file path does not run the patch
|
|
392
|
+
quality repair loop, so the diff being applied is the diff the user reviewed:
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
brass-agent --apply-patch-file ./approved.diff --yes "apply approved patch"
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
For preview integrations, use:
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
brass-agent --protocol-json --protocol-full-patches "fix the failing tests"
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
`--protocol-full-patches` is intended for trusted local clients that need the
|
|
405
|
+
full `patch.proposed` payload. Other large payloads remain compacted.
|