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
Copy file name to clipboardExpand all lines: CHANGELOG.md
+10Lines changed: 10 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,16 @@ All notable changes to Sofos are documented in this file.
6
6
7
7
### Security
8
8
9
+
-**MCP server children no longer inherit the sofos environment.** Stdio MCP servers used to start with every variable the parent shell exported, so `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `MORPH_API_KEY`, ssh agent sockets, and AWS credentials all reached the child. The launcher now clears the environment first and forwards a small allowlist (`PATH`, `HOME` / `USERPROFILE`, `TMPDIR` / `TEMP` / `TMP`, `LANG`, every `LC_*` locale variable, plus Windows essentials like `SYSTEMROOT` and `PATHEXT`); anything else needs to be listed under the server's `env` config field. Existing servers that already declare their required vars in config are unaffected.
10
+
-**MCP HTTP transport no longer follows redirects.** A `302` from a hostile or misconfigured MCP host could otherwise forward a configured `Authorization: Bearer ...` header to a different origin. A redirect status now returns a clear error explaining the refusal; reconfigure the server to its final URL instead.
11
+
-**MCP HTTP response bodies are capped at 32 MB.** A server that streamed multi-GB JSON for a `tools/list` reply could previously stall a turn and exhaust memory under the 120-second timeout. Sofos now rejects oversized responses up front (when `Content-Length` is announced) or aborts mid-stream when the running total crosses the cap.
12
+
-**MCP JSON-RPC responses are matched against the originating request id.** A server that emits an unsolicited frame or replies out of order is rejected with a clear "id mismatch" error instead of returning the wrong result to the caller. The check accepts both numeric and string-shaped echoes of sofos's outgoing numeric id, matching the spec.
13
+
-**Slow MCP child shutdown no longer pauses the tokio executor.** The stdio launcher and the timeout-recovery path bound the kill+wait to about 200 ms with non-blocking polls; a server stuck on uninterruptible IO is left to the OS instead of holding up the runtime.
14
+
15
+
### Changed
16
+
17
+
-**MCP stdio servers spawn on a background worker.** Process creation used to happen on the tokio executor thread, which could pause the UI on a slow filesystem or NFS mount; it now runs on the blocking-task pool, so the rest of the session stays responsive while a server starts up.
18
+
9
19
-**A global deny rule survives a local allow with the same name.** Adding `Bash(rm)` to `.sofos/config.local.toml`'s allow list used to silently strip the matching `Bash(rm)` from `~/.sofos/config.toml`'s deny list; both entries now coexist after merge, so the per-command verdict reflects every configured rule instead of dropping the global guarantee.
10
20
-**`PATH=`, `LD_PRELOAD=`, `LD_LIBRARY_PATH=`, `DYLD_*=`, `NODE_PATH=`, and `PYTHONPATH=` prefixes now route the bash call to a confirmation prompt.** A command like `PATH=. cargo build` used to auto-allow as `cargo`; sofos now asks the user before running anything that swaps the binary the shell will execute, even when the base command is on the allow list or when blanket `Bash` allow is active. Built-in forbidden bases (`rm`, `chmod`, `sudo`, …) still take precedence and stay denied.
11
21
-**A session-scoped Bash path grant now applies only to the file the user named.** Allowing `cat /home/me/.ssh/config` once used to permit every other file under `/home/me/.ssh` for the rest of the session; the grant is now scoped to the specific file, so a follow-up `cat /home/me/.ssh/id_rsa` re-prompts. Grants saved to config (yes-and-remember) still cover the whole `parent/**` directory because the user explicitly opts in to that wider scope.
0 commit comments