Repository navigation
Agent Smith 1.0.2
Release 1.0.2 of Agent Smith.
Install
- Download the DMG asset below.
- Open it and drag Agent Smith to Applications.
- Launch the app from Applications.
Requires macOS 26.2 or later. The app is Developer ID signed and notarized by Apple.
Changes
- Release 1.0.2 (2417d7e)
- Record that .info for approvedWithoutReview is a user decision (d623f62)
- The conversation pane's default was 73% plumbing; the floor lets it be quiet (b3181e9)
- Extract the assignment rule so the thing that deleted config is testable (9d3e0e9)
- Loading a session must never delete the assignments it just loaded (76f59ac)
- Legacy security rows derive severity, so one table colours every row (1337dc6)
- Recheck: four dead error readers, and bash exit codes are not errors (ad8d4f1)
- Document the decisions in CLAUDE.md; stop the suite's three timing flakes (6dad2ee)
- An agent that goes quiet with a tool still failing has to say so (a182e98)
- Recheck fixes: the floor must not cross scope, and three calibration bugs (4f76d47)
- An empty tool argument means absent, not a value to reject (46618c5)
- Severity is a first-class axis, and the transcript filter has a floor (f616257)
- A parameter change reaches a live agent; a model change still does not (98376aa)
- Bump to SwiftLLMKit 0.0.206: finish-reason refusals on a 200 are permanent too (26dc8db)
- Refusal banner quotes the server's message, not the wrapped error description (9b984fc)
- Bump to SwiftLLMKit 0.0.205: a content-policy refusal is permanent, not retried 50 times (d2bd0c5)
- Sweep: --only-unprobed, tolerant reuse that keeps a record's version, no re-asking a reused ladder (9c69fc3)
- Bump to SwiftLLMKit 0.0.203: the version-keyed ladder gate restores 690 measured ladders (2dd790f)
- Bump to SwiftLLMKit 0.0.202: per-conversation prompt_cache_key on the ChatGPT-subscription provider (1b5daf0)
- Bump to SwiftLLMKit 0.0.201: the measured Codex ladders reach the catalog (591bbd6)
- Bump to SwiftLLMKit 0.0.200: measured effort ladders for the ChatGPT-subscription provider (4f1a07a)
- Bump to SwiftLLMKit 0.0.198: probe the ChatGPT-subscription provider honestly (1de9f89)
- Update 8 transitive dependencies, and put both lockfiles back in agreement (1a59cff)
- Bump to SwiftLLMKit 0.0.196 — cancellation-safe Codex token refresh (3923092)
- Bump to SwiftLLMKit 0.0.195, and collapse a status line that switched to pick a string (b6b8401)
- Say why the Codex limit check is un-gated, since it reads like a bug (9b6f029)
- Bump to 0.0.194; harden the sign-in quoting and fix a doc that invited a bug (147d579)
- Stop reading the credential file from a view body (6634271)
- Bump to SwiftLLMKit 0.0.193 and mark the Codex work complete (09b4b97)
- Show how full the subscription's usage window is, when anything has reported it (9f7523d)
- Phase 5: an exhausted usage window becomes a stated wait, not a failure (b7b3d3f)
- Phase 4: the ChatGPT-subscription provider is selectable in the app (2c95c49)
- Bump SwiftLLMKit to 0.0.187 — Codex Responses provider (6f822f9)
- ROADMAP: correct the Codex entry — one client id, not two, and Phase 1 is done (82d9fe6)
- Bump SwiftLLMKit to 0.0.186 — export-stripped probe seed (555bad0)
- Bump SwiftLLMKit to 0.0.185 (a68f0fb)
- Commit the xcodeproj's SwiftLLMKit pin too (ab62f39)
- Bump SwiftLLMKit to 0.0.184 for the Codex credential layer (a50bcf6)
- ROADMAP: the ChatGPT-subscription (Codex OAuth) plan, with Phase 0 measured (486d57b)
- Put the task pane's filter in its own header, not a second bar (ced3e6d)
- Tag the cross-session pane's filtered transcript with its task (393ec8f)
- Give the task pane its own transcript filter (a7bf576)
- Body ratchet: match any
some <Type>body, not justsome View(56c9496) - Pin the body-length ratchet alongside the
-> some Viewone (4c86ef3) - Sidebar: restore the once-per-pass partitioning the body splits regressed (e499ea4)
- Sidebar: split TaskListView's body, the row button's sheets, and three rows (c3b1ba7)
- Inspector: split AgentCard and RoleAgentCard's watcher chain (7fa903f)
- Split ChannelLogView's body: the row list and the scroll tracking (8aa43c4)
- Split the two highest observable-read bodies: MainViewDetailColumn, MainView (ed636fc)
- Persist hidden tool names, and aim the coverage guard at the path that saves them (7ff4b6e)
- Transcript filter: hide or show individual tool calls (740b5fe)
- Restore the guarded write in the section-tracking preference handler (d714541)
- Task detail: finish splitting, 18 oversized bodies down to 3 (621e2a8)
- Task detail: split the editors, verdict rows, result and context sections (0846b4b)
- Task detail: split the window chrome, the description section, the scroll body (d20f360)
- Task detail: split the metadata grid and the two contract sections (27a68ce)
- New-task banner: name its two derived flags, group its footer rows (b0e045a)
- Channel banners: extract the chrome eight of them repeated verbatim (adcdbde)
- Guard multiple trailing closures at zero, across both targets (8699ab8)
- Write all 38 multiple-trailing-closure calls in parameter position (0f07ffa)
- Stop the onTapGesture guard from prescribing a forbidden form (770d7b2)
- Timed UI flashes: let the latest press own the reset (ecece42)
- Task detail: key update rows by append index, workspace rows by label (efc8f66)
- Quick Look: one implementation instead of three, and stop swallowing the launch error (d6d76a9)
- Remove the engine's four force unwraps (c005d8c)
- Task detail: 30 helpers and 13 @State vars become 25 View structs (c6221e7)
- Sidebar rows: TaskRow becomes View structs, 23 helpers -> 4 (f55586e)
- Sidebar rows: extract five hot-path helpers into real View structs (91281ad)
- Second review: my fixes had two P1s of their own (8c16585)
- Independent review: four defects, and a test that was not detecting its bug (c899e15)
- Recheck: an unbounded loop, a missing coverage guard, and a test that stopped detecting its bug (c89063b)
- Close the some-View property guard's evasions: 8 of 10 spellings walked past it (acd8641)
- Bump swift-llm-kit to 0.0.183 (finishReason reported by every adapter) (3fc5ead)
- Ratchet counted comments: baseline is 184, not 186 (e295c2e)
- Ratchet the
-> some Viewbacklog; make recurrence catch-up O(1) and audible (4af09bf) - Read the transcript in bounded scans instead of whole-file (0e2ca75)
- Fix the auto-advance stall, lost worker context, and outage-as-verdict (505660a)
- Copy the whole wake when building a recurrence link, don't restate it (c765875)
- Recheck: stop rescheduling from shedding wake fields, and find recurring targets in the library (5693154)
- Fix scheduled runs silently discarded when the task isn't plain-runnable (cca02b4)
- Bump swift-llm-kit to 0.0.181 (refreshed bundled probe seed) (bc60e3a)
- Recheck: reunite stopAll's doc comment split by the reconcile method's insertion (a3ee75c)
- Fix 20-hour-stale Thinking badges: reconcile the activity indicators, never just push (a327f98)
- Raise enumerator item cap: maxPrepareItems 50 -> 250 (0911ba0)
- Compose Message sheet: user-resizable again (macOS 15 fitted sizing) (85c98a2)
- /stupid sweep: five audit tracks, every fix adversarially reviewed before landing (4f74c86)
- swift-llm-kit 0.0.179: the recheck's resolver-parity and budget-seed fixes (2098da5)
- Role settings: the thinking switch, honest four-state status, per-model row gating (941a0b0)
- Transcript filter: kind selection per sender (61fccb8)
- Transcript filter: every message kind individually toggleable (a14d4e1)
- ROADMAP: the capability-sweep concurrency entry (2026-08-06) (41b0acb)
- Sweep liveness: a 10-minute target deadline and a 30-second heartbeat (55ceb8f)
- Capability sweep goes concurrent: 10 global / 4 per provider, storage on one funnel (ce617fc)
- Cap MLX's Metal buffer cache at 256 MB; clear it after the re-embed sweep (0ef07a8)
- Leak audit fixes: two unbounded evaluation stores, a store cycle, parked transcript consumers, session-delete teardown (8c1fd54)
- Recheck: the kind sweep's third narrowing and the legacy-filter governance shift, documented (358b529)
- GPU memory monitoring: swift-semantic-search 0.0.8 + post-sweep report (b00bd8e)
- Every system message carries a kind; Smith's filter reads kinds, not prefixes (3690a8a)
- Security reviews become a typed message kind, and group visibility persists inverted (51c2443)
- The transcript split goes pure SwiftUI; the sidebar stays on screen (5b08bda)
- Recheck: Quick Look was not Quick Look, and standard rows re-opened a full scan (ac878c4)
- Run History becomes the template's page; split children fill the split axis (9bb4f2c)
- Sidebar: name Recent, promote runs to first-class rows, stop the Library repeating itself (54b246c)
- The task transcript header says the task the way the rest of the app says it (8093ebc)
- A probe sweep now folds its evidence into the catalog production reads (b05e76f)
- The top pane's transcript branch didn't fill, so it clipped against a blank band (3a6e934)
- Auto-scroll targeted rows that have no view (e40b67d)
- Sidebar rows can compress — .fixedSize() was the horizontal-overflow bug (7f7f9c6)
- SwiftLLMKit 0.0.177: mechanism recorded on demonstration OR discrimination (e3c034a)
- Recheck: the keep probe reads the DISCOVERED mechanism, like its two siblings (b819341)
- SwiftLLMKit 0.0.176: valid probe schema, adaptive on the wire, keep canary (da0e506)
- SwiftLLMKit 0.0.174: Anthropic adaptive thinking (0fab5b0)
- SwiftLLMKit 0.0.173: borrowed-ceiling rule pinned, stale parameter doc corrected (2431b57)
- Only the current prober version is reusable; pair the resize cursor (3b47911)
- Force the budget probes; stop probing effort on models that can't chat (60b5fac)
- Sweep fixes: the screen-clear was clearing a pane nobody can see (85b2fb0)
- Recheck: drop the doubled rule, stop the header wrapping, sync Package.resolved (cd8f557)
- Transcript panes size to the window, not to their own text (de9298d)
- Hang catcher: check every 6s, and say when it will actually trip (0e5f2cb)
- Add a hang catcher — sample the GUI while it is beachballing (7c30aea)
- Clearing the screen clears one pane, not every pane at once (ae401d7)
- SwiftLLMKit 0.0.169: proberVersion 5 invalidates the wrong v4 records (12801f5)
- Discover the reasoning mechanism per endpoint; record and show it (68d3d9a)
- Budget probes require evidence that there is a budget to measure (453b6c3)
- Recheck: attempt the thinking-disable unless it is KNOWN useless (a70fc4e)
- SwiftLLMKit 0.0.165: baseline-relative disabled-reasoning verdict (53d9858)
- Read the two reasoning switches together; add a "reasons" column (4471416)
- Wire the three new probes; mark vendor-only capabilities in the output (f85a2f7)
- Probe everything by default; --effort becomes --no-effort (f58e1ba)
- Probe the minimum thinking budget; give the budget range a UI control (4e65df5)
- Probe summary: show the vendor's ladders and every capability it states (465cc09)
- Bump to 0.0.159 (06ed5f6)
- Adopt the renamed capabilities in the eval runner (550b99e)
- Bump to 0.0.158: persisted capability keys migrated to the clarified names (17c7c21)
- Bump to 0.0.157: unambiguous capability names (fc698de)
- Bump to 0.0.156 and probe reasoning BEFORE tool_choice (04abb08)
- Commit the package-level Package.resolved for 0.0.155 (3e77cab)
- Sweep #3 (MED, data-loss): revert the flip in-flight slot — it broke destination-before-source (7de4a40)
- Recheck: close the flip paths' cross-session library clobber (sweep #1 missed them) (25da4a2)
- Bump SwiftLLMKit to 0.0.155 (738777a)
- Sweep fixes #2-#7: surgical rollback, demote slot, locked moves, dedup, slot reads, error string (c1fe424)
- Sweep #1 (HIGH): serialize cross-session library edits with a library-side edit lock (3f3a147)
- Bump to 0.0.154 and pass the catalog capabilities into the sweep (b8da7be)
- Bump to 0.0.152: delete the duplicated tool_choice encoder, scope the probes (b63656e)
- Recheck F6: extend the per-task lock to the flag-pattern editors it missed (2644b0b)
- Bump SwiftLLMKit to 0.0.151 (674c57a)
- Bump to 0.0.148: force the tool_choice probe past its own gate (9f18b6b)
- Bump SwiftLLMKit to 0.0.147 (6ee40f7)
- Bump to 0.0.146 and adopt the corrected probe signatures (b88caef)
- Review fixes F3/F4: deleted templates are recoverable, in their own bucket (d066d75)
- Review fix F6: per-task mutation lock + in-flight slot; concurrent edits no longer lose updates (9887794)
- Bump to 0.0.144: restores reasoning_effort for OpenAI models (75efbe1)
- ROADMAP: record the model capability contract work (691564d)
- Review fix F7: cross-session transcript can't be clobbered by a stale load; read errors surfaced (3b116ae)
- Wire every new probe into the capability sweep (3d5babb)
- Review fixes F5/F8/F10: backstop newest-wins + durable-first, reserved default-group identity (1ddaaf9)
- Bump to 0.0.141: thinking-budget accounting picker (159fc1e)
- Bump SwiftLLMKit to 0.0.140 and document the capability contract (d31b71b)
- Fix 3 review findings: template-run crash, session-delete fail-open, timestamp year calendar (b873549)
- Model override editors: preserve unknown fields, add the reasoning-control picker (26d007f)
- Adopt the effort split: two effort rows, two probe ladders (d5b9d52)
- ROADMAP: note ProviderManagementView functions-returning-some-View cleanup (44a41bb)
- Recheck fixes: pure relative-date bucketing, POSIX-pinned formatters, honest filter tests (0bac889)
- CodeStyleGuard: whitelist the user-approved LazyVStack in ModelsSettingsTab (3293341)
- Providers settings: make Show-all a proper switch + a "N hidden" hint (4d274ce)
- Transcript filter: recipient axis, task-scope + error switches, relative-date timestamps (481c0e7)
- Recheck 2: crash-order the library moves + fix transcript routing (cbf1f55)
- Closed-session transcript vending (completes cross-session run drill-in) (1b3147d)
- Templates: recoverable delete, crash-ordered flips, + edge fixes (3998142)
- Template run-history in the top pane (58ee315)
- Recheck: make templates reachable by tools + harden session-delete (ae8e8d5)
- ROADMAP: mark the task-workspace overhaul BUILT (phases 1–6 + templates-global) (8dad93b)
- Templates-global 9d: Library pop-out window (30abe7d)
- Templates-global 9d: Library sidebar section + Active recent-cap (5900bbc)
- Templates-global 9c(2): create-in-library, migration, sidebar union (f625aaa)
- Bump SwiftLLMKit to 0.0.138 — DeepSeek and Moonshot AI built-ins (a1b2ac8)
- Templates-global 9c(1): TaskStore dual-dispatches editing + promote/demote (5f5490b)
- Templates-global 9b: engine + tools read the per-session ∪ library union (7767ece)
- Templates-global 9a: wire the TemplateLibraryStore (inert) (03d3fd1)
- Bottom transcript pane: a real filter-config popover (94ecab8)
- Persist the top-pane task selection per session (991c278)
- Phase 6: delete a session (with its tasks archived or deleted) (a4eead0)
- Phase 4 fix: task row uses a Button for select, not .onTapGesture (081a683)
- Phase 5 (#3, part 1): TemplateLibraryStore + groups foundation (unwired) (42d51ad)
- Phase 5 (#1): Archived/Deleted open their own pane + an all-session browser (d9e6f91)
- Phase 5c: two-line running-task row + step-glyph strip (4c6e704)
- Phase 5a/5b: task-row cosmetics + orchestration gear (90687b2)
- Phase 4 (core): two-pane transcript + task selection (258e375)
- Phase 3: immutable origin sessionID on AgentTask — stamp on creation, back-fill on load (5760579)
- Phase 2 recheck: fix clear() count regression + disk-first ordering; add TranscriptStore tests (d67b0fe)
- Phase 2 (part 3): wire AppViewModel onto the transcript store (3ea8ff0)
- Phase 2 (part 2): FilteredTranscriptProvider + store display-only API (unwired) (8b24338)
- Phase 2 (part 1): TranscriptFilter + TranscriptStore foundation (unwired) (be5c02d)
- Phase 1 recheck: keep long-lived-Smith tests' auto-run intent under the settings sync (6eb2d57)
- Phase 1: auto-run → Orchestration settings; gate load-time auto-archive; cancel wakes on archive/delete (b37c3c2)
- Inspector: work around a Swift 6.3.3 IRGen crash in LLMTurnDisclosureRow (50a5fae)
- Inspector: revert the per-frame coalescing experiment (d160f5c) — it didn't fix the warnings (4ec1756)
- Inspector: coalesce per-frame so onChange watchers stop firing multiple times per frame (d160f5c)
- get_task_details: return the worker's approved tool list (4ce62ac)
- App: adopt SwiftLLMKit 0.0.137 (deterministic resolved() id); drop app-side workaround (5ec8156)
- App: stop inspector re-render loop from unstable resolved ModelConfiguration id (d8ab13c)
- Revert "App: coalesce transcript + live-context updates to one mutation per frame" (197321c)
- Orchestration settings: surface resolved retrieval values in the Memory & Task Search grid (a67b34d)
- App: coalesce transcript + live-context updates to one mutation per frame (33a43d8)