You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Treat here-strings as inline arguments, never heredoc openers
* Match heredoc terminators exactly, with tab-stripping only for <<-
Trim-based closing accepted a space-indented marker for plain << and kept a stray carriage return in CRLF markers, so the splitter and the approval display disagreed with the shell about where a heredoc ends. Compare exact lines instead.
* Ignore heredoc openers inside arithmetic and comments
A << inside ((/$(( is the left-shift operator and a << after a top-level # is documentation, so neither the splitter nor the approval display may open a heredoc there and swallow the following chain. Track arithmetic depth and skip #-to-EOL comments in both.
* Lock secret-before-listing ordering for shell secret paths
Pure ls of a secret name still asks, and chains flag the content-reading half; bounded listings stay exempt and unbounded listings still ask. The secret-first ordering already holds at all three sites (classify auto-allow, gate segment guard, auto-shell policy) — these tests pin it.
* Document list-free listings and dump-locked secret reads in auto mode
Copy file name to clipboardExpand all lines: docs/IMPLEMENTATION.md
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -185,6 +185,17 @@ When auto is on, the gate auto-allows workspace file tools in `AUTO_ALLOWED_TOOL
185
185
186
186
Unmatched shell auto-allows, including contained non-force `git worktree add`/`remove`/`prune` and read-only `list`. Path-arg tools that escape the workspace are denied at authorize time (the same sandbox path-escape enforces at execution). Writes under the in-workspace session state root (legacy `.agent-state`), mutating MCP, and unknown built-ins still prompt. Authorization hard-denies (catastrophic commands, open-ended shell search) remain independent of auto mode.
187
187
188
+
Listings are list-free, dumps are dump-locked: a bounded `ls`/`tree` prints names only, so it auto-allows even in a directory containing a secret file — but the secret check runs before the listing exemption, so naming the secret itself still asks. Anything that dumps file contents never auto-allows in auto mode; shell references stay ask (not deny) so legitimate uses proceed after an explicit yes, while path-keyed tools hard-deny.
|`ls` in a directory containing `.env`| auto-allow (names only, no secret named) |
193
+
|`ls .env`| ask (secret check beats the listing exemption) |
194
+
|`cat .env`, `head .corbits/settings.json`| ask, never auto-allow |
195
+
|`bun --env-file=.env run …`| ask; runs after an explicit yes |
196
+
|`read_file` on `.env`| hard deny via secret-guard, even under skip-permissions |
197
+
|`cat README.md` in the workspace | auto-allow under the existing contained-read rules |
198
+
188
199
### Reasoning Effort
189
200
190
201
**Shift+Tab** in the TUI cycles reasoning effort for the live model (`cycleReasoningEffort` in `src/provider/reasoning-effort.ts`); the runner rebuilds inference sources and the prompt-border `profile · model · effort` label so the next turn picks it up. Plain Tab still toggles focus.
0 commit comments