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
docs(readme): Update to v6.1.0 with security audit details
Add What's New section for v6.1.0 security hardening release documenting
all 31 findings resolved. Updated Security section with Keychain storage,
model verification, thread safety, and secure logging details.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
**31 findings resolved across CRITICAL, HIGH, MEDIUM, LOW, and INFO severities:**
55
+
56
+
**Critical Fixes:**
57
+
-**API Keys to Keychain**: All AI backend API keys (OpenAI, Anthropic, Google, AWS, Azure, IBM) migrated from UserDefaults to macOS Keychain with automatic migration on first launch
58
+
59
+
**High Fixes:**
60
+
-**Command Validator Hardened**: Replaced naive `String.contains()` with `NSRegularExpression` word-boundary matching to prevent bypass via substrings
61
+
-**Python Import Validator**: Regex-based import validation with comment filtering prevents bypass via inline comments
62
+
-**Model Hash Verification**: SHA256 verification of downloaded models using CryptoKit
63
+
-**Buffered I/O**: 4096-byte chunk reading replaces byte-by-byte daemon communication for significant performance improvement
64
+
-**Task Cancellation**: All infinite `while true` loops replaced with `while !Task.isCancelled` for clean shutdown
- Multi-version Python path lookup (3.13 down to 3.9)
73
+
- Serial queues for thread-safe MLX service operations
74
+
- Async logging via serial queue in CommandValidator
75
+
- Permission check for script execution
76
+
- Regex validation improvements
77
+
78
+
---
79
+
51
80
## Features
52
81
53
82
### Xcode Integration
@@ -159,17 +188,33 @@ MLX Code (SwiftUI)
159
188
## Security
160
189
161
190
### Shell Execution Safety
162
-
-**Command Validation**: All bash commands pass through `CommandValidator` before execution, blocking dangerous patterns (rm -rf /, fork bombs, etc.)
191
+
-**Command Validation**: All bash commands pass through `CommandValidator` with regex word-boundary matching before execution, blocking dangerous patterns (rm -rf /, fork bombs, etc.)
192
+
-**Python Import Validation (v6.1.0)**: Regex-based validation with comment filtering prevents bypass via inline comments
163
193
-**No Shell Interpolation**: Git and build tools use `process.currentDirectoryURL` instead of `cd` string interpolation, preventing directory traversal and injection attacks
164
194
-**Tool Approval Flow**: Write and execute tools (bash, file write, xcode build) require user confirmation before running
165
195
-**Read-Only Auto-Approve**: Only safe, read-only tools (grep, glob, file read) auto-approve without user interaction
196
+
-**Permission Checks (v6.1.0)**: File permission validation before script execution in CommandValidator
197
+
198
+
### Credential Security (v6.1.0)
199
+
-**macOS Keychain Storage**: All API keys (OpenAI, Anthropic, Google, AWS, Azure, IBM) stored in macOS Keychain using `SecItemAdd`/`SecItemCopyMatching`
200
+
-**Automatic Migration**: Existing UserDefaults-stored keys automatically migrated to Keychain on first launch
201
+
-**No Plaintext Secrets**: Non-secret config only (region, model names) stored in UserDefaults
202
+
203
+
### Model Security (v6.1.0)
204
+
-**SHA256 Hash Verification**: Downloaded models verified against expected hashes using CryptoKit
205
+
-**Secure Logging**: All debug output routed through `SecureLogger` instead of `print()` — no sensitive data in console
166
206
167
207
### Data Privacy
168
208
-**100% Local**: All model inference runs on-device via Apple MLX -- no data leaves your machine
169
209
-**No Telemetry**: No analytics, crash reporting, or usage tracking
170
210
-**No API Keys Required**: No cloud services, no subscriptions, no accounts
171
211
-**Local Memory Storage**: User memories stored in `~/.mlxcode/memories.json`, never transmitted
172
212
213
+
### Thread Safety (v6.1.0)
214
+
-**Serial Queues**: MLX service I/O operations serialized to prevent race conditions
215
+
-**Buffered I/O**: 4096-byte chunk reading replaces byte-by-byte daemon communication
216
+
-**Task Cancellation**: All infinite loops replaced with `while !Task.isCancelled` for clean shutdown
217
+
173
218
---
174
219
175
220
## What It Doesn't Do
@@ -186,7 +231,29 @@ Being honest about limitations:
0 commit comments