Skip to content

Agent Smith 1.0.2

Choose a tag to compare

@drewster99 drewster99 released this 21 Sep 23:04
· 195 commits to main since this release

Release 1.0.2 of Agent Smith.

Install

  1. Download the DMG asset below.
  2. Open it and drag Agent Smith to Applications.
  3. 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 just some View (56c9496)
  • Pin the body-length ratchet alongside the -> some View one (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 View backlog; 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)