1 # Changelog
2
3 ## Unreleased
4
5 ### Added
6
7 - **Editors can now list and delete siGit Code threads.** `session/list` and
8 `session/delete` were unadvertised, so Zed's "Import Threads" picker showed
9 siGit Code with a warning triangle even though every ACP turn was already
10 saved to disk. A session now writes a small metadata sidecar (cwd,
11 additional roots, a title from its first message) alongside its transcript,
12 so a client can list threads for the open project, reopen one through the
13 existing `session/load` replay, and remove one it no longer wants
14
15 ## 1.5.7
16
17 ### What changed
18
19 - **`@smbcloud/sigit` gets releases again.** The npm scope moved to
20 `@getsigit` in 1.5.5 and the old package was left sitting on the registry at
21 1.5.2, so an install made before the rename went quiet — `npm update` had
22 nothing to give it and nothing said why. All seven packages now publish under
23 both scopes from the same build, so `@smbcloud/sigit` is a full install again
24 rather than a stub, with its own platform binaries and no dependency on the
25 new scope. It prints a line on stderr saying where the package moved to;
26 `SIGIT_SUPPRESS_SCOPE_NOTICE=1` turns that off. This is a migration path, not
27 a second home: `@getsigit/sigit` is what the docs, the Homebrew tap, and the
28 ACP registry entry point at, and it is the name to move to
29 - **Multi-root projects now work in the editor.** When a client opens several
30 directories in one project, ACP sends the extra ones as
31 `additionalDirectories` — but only to an agent that says it wants them, which
32 siGit never did, so Zed kept the first root and showed a banner saying
33 multi-root workspaces were unsupported. The capability is now advertised at
34 `initialize`, and the directories that arrive are no longer logged and thrown
35 away. All the roots are now part of the session: the model is told about each
36 one, every root's `AGENTS.md` / `CLAUDE.md` is loaded, and skills, slash
37 commands, and subagent types are discovered from all of them (primary root
38 first, so it still wins name collisions). `/status` lists the roots when
39 there is more than one, and headless runs take the same thing as repeatable
40 `--add-dir <dir>` flags. MCP servers are the exception: discovery happens
41 once at startup, before a session exists, so a second root's `.sigit/mcp.toml`
42 is not picked up
43
44 ### Fixed
45
46 - **A shell command can no longer wedge the editor session.** Tool commands
47 inherited siGit's own stdin, which in ACP mode is the JSON-RPC pipe from the
48 editor. A command that read stdin — a signing passphrase prompt, a pager, a
49 `git` credential ask — blocked on it and consumed the client's next request
50 out of the pipe, so nothing typed afterwards ever reached the agent and the
51 session stayed dead past the command timeout. Commands, hooks, and the
52 co-author `git` helpers now run with stdin closed, so a command that wants
53 input gets EOF and reports an error instead
54 - **A command that prints a lot no longer stalls for two minutes.**
55 `run_command` waited for the command to exit before reading its output, so
56 anything past the pipe buffer (a build, a verbose test run) blocked writing
57 while siGit blocked waiting, until the 120-second timeout killed it. Output
58 is now drained while the command runs
59 - **The command timeout now stops the whole command.** It killed only the
60 shell, leaving anything that shell had started running and unreaped; it now
61 kills the process group
62 - **A refused turn now shows the endpoint's own message.** siGit pasted the
63 status line and the raw JSON body into the editor's error banner, so a
64 billing or allowance message arrived wrapped in
65 `endpoint returned 429 Too Many Requests: {"error":{"message":…`. The message
66 the endpoint wrote is what the banner shows now; the status is only used when
67 there is no message to show
68 - **An error that arrives mid-stream is no longer silent.** An endpoint that
69 fails after the response is already open reports it as a frame in the stream.
70 That frame carries no `choices`, so siGit parsed it as an empty chunk and
71 skipped it, and the turn ended as though the model had answered with nothing
72
73 ## 1.5.6
74
75 ### What changed
76
77 - **Switching models mid-conversation no longer restarts it.** Both switching
78 to a local GGUF model and picking a different cloud tier now carry the live
79 conversation history across, repairing any half-finished tool call so
80 strict OpenAI-compatible endpoints don't reject the session
81 - **Long-running tools now show progress in ACP clients.** Synchronous tools
82 (shell commands, file operations, `read_website`, ...) run on a blocking
83 thread pool instead of the ACP connection's own task, so a slow command's
84 `in_progress` update reaches the client — and Zed's spinner — while the
85 command is still running instead of arriving with the result
86 - **Text from consecutive tool rounds no longer runs together.** ACP and
87 headless clients concatenate consecutive message chunks, so a reply that
88 continued after a tool call used to glue onto the previous round's last
89 sentence with no space. A blank line now opens the next round's text
90 - **New onde-cloud model tiers.** The model picker (`/models` in the TUI, the
91 config panel in editors) now offers five additional siGit Code Cloud tiers —
92 `flux`, `apex`, `aura`, `orbit`, and `nova` — alongside the existing Fast,
93 Balanced, Large, Mini, Air, Pro, and KKK options. The tier list mirrors
94 onde-cloud's router catalogue, so all three sides (the picker, the router,
95 and the cloud catalogue) have to be updated together when a tier is added
96 - **MCP Registry listing moved to `getsigit/si`.** The `server.json` manifest
97 and its `release-mcp-registry.yml` publish workflow now live in the
98 [`getsigit/si`](https://github.com/getsigit/si) repo alongside the si CLI's
99 other code, since the registry entry describes the si platform rather than
100 the coding agent
101
102 ## 1.5.5
103
104 A distribution release. siGit Code itself is unchanged. What moved is how it
105 reaches you on npm and on Windows.
106
107 ### What changed
108
109 - **The npm package is now `@getsigit/sigit`.** The six platform packages moved
110 with it. `@smbcloud/sigit` stays on the registry but stops receiving updates,
111 so upgrading means switching names:
112 `npm uninstall -g @smbcloud/sigit && npm install -g @getsigit/sigit`. The old
113 package had been stuck at 1.5.2, so this picks up 1.5.3 and 1.5.4 as well.
114 - **npm publishes over OIDC.** Every `@getsigit/*` package has a trusted
115 publisher pointing at the release workflow, so no npm token is stored in the
116 repository. The release workflow moves to Node 22, which trusted publishing
117 requires.
118 - **winget releases actually go out.** The workflow could only update a package
119 already present in `microsoft/winget-pkgs`, and siGit Code had never been
120 submitted there, so every dispatch failed. It now submits the package the
121 first time and updates it on later releases. The identifier is
122 `getSigit.siGitCode`.
123
124 ## 1.5.4
125
126 - **CI**: nfpm config expanded to include package version and binary path
127
128 ## 1.5.3
129
130 Adds browser-based sign-in, expands distribution channels to Windows (winget,
131 Scoop), Linux (AUR, deb, rpm), and .NET (NuGet), gives ACP clients live
132 visibility into tool activity, adds the KKK and Moonshot AI cloud tiers, and
133 fixes the co-authored-by trailer email.
134
135 ### What changed
136
137 - **Browser sign-in:** `sigit login` now opens a browser OAuth flow (PKCE S256
138 against the siGit Code Cloud authorization server) so you can sign in without
139 a password. A loopback listener catches the redirect automatically; a
140 paste-back fallback handles environments where a loopback isn't reachable.
141 `--paste` forces the paste path, `--password` keeps the old email/password
142 prompt. Zed's "Sign in to siGit Code" button uses the loopback path via ACP
143 `authenticate`
144 - **New release channels:** siGit Code is now published to winget
145 (`getsigit.siGitCode`), Scoop (`getsigit/scoop-bucket`), the AUR
146 (`sigit-bin`), and as `.deb`/`.rpm` packages alongside the existing
147 Homebrew, npm, PyPI, crates.io, and NuGet channels
148 - **NuGet .NET tool:** `dotnet tool install --global SiGit.Code` now works on
149 Windows, macOS, and Linux — the package bundles all six platform binaries and
150 a managed shim that execs the right one, leaving stdin/stdout/stderr
151 unredirected so TUI vs ACP mode detection still works
152 - **New cloud tiers:** the model picker (`/models` in the TUI, the config
153 panel in Zed) now offers the `onde-kkk` (KKK) and Moonshot AI (`oke`) tiers
154 alongside the existing Fast, Balanced, Large, Mini, Air, and Pro options
155 - **ACP tool visibility:** the agent loop now emits `ToolCall(InProgress)`
156 before each tool runs and `ToolCallUpdate(Completed/Failed)` after it
157 returns, so clients like Zed gain live visibility into tool activity between
158 inference rounds. `tool_choice: "auto"` is also sent explicitly whenever
159 tools are present, fixing models that describe actions in prose rather than
160 issuing a tool call when the field is absent
161 - **Malformed tool argument logging:** invalid tool argument JSON is now logged
162 at three sites (TUI pretty-printer, ACP tool-call event, permission request)
163 instead of silently falling back to a string value, making malformed payloads
164 visible in logs while preserving backward-compatible behaviour
165 - **Co-authored-by trailer fix:** the `Co-Authored-By` trailer email was
166 updated to `noreply@sigit.si` (platform-neutral); the commit attribution
167 check was tightened to use idiomatic ownership
168 - **NuGet trusted publishing:** the NuGet release workflow now exchanges a
169 GitHub OIDC token for a short-lived NuGet API key (via `NuGet/login`) instead
170 of relying on a long-lived `NUGET_API_KEY` secret, so there is no stored
171 credential to rotate or leak
172 - **AUR dispatch temporarily disabled:** the AUR release workflow is no longer
173 dispatched from `release-github` while new AUR account registration is
174 closed; the `sigit-bin` channel returns once registration reopens
175 - Legal and branding copy updated
176
177 ## 1.5.2
178
179 Brings the latest siGit Code Cloud tiers to the picker and aligns the MCP
180 registry metadata with the server release.
181
182 ### What changed
183
184 - `/models` now lists the Pro, Air, and Mini siGit Code Cloud tiers alongside
185 Fast, Balanced, and Large
186 - Updated the MCP registry manifest to version 1.2.5, matching the siGit Code
187 Cloud server release
188 - Updated the Agent Client Protocol SDK to the latest v1 release
189
190 ## 1.5.1
191
192 Makes siGit Code work as an Xcode custom agent, and updates the Onde SDK.
193
194 ### What changed
195
196 - Xcode can now run siGit Code as a custom agent. Point it at the binary with
197 `--acp` as the argument, and that explicit mode loads the selected on-device
198 model on the first prompt, since Xcode's chat has no equivalent of `/load`.
199 The README covers the setup, including wiring up `xcrun mcpbridge` in
200 `mcp.toml` so the agent can use Xcode's build, test, and project tools
201 - MCP calls to the `xcode` server time out after 30 seconds instead of 120, so
202 a request Xcode cannot service no longer leaves the prompt looking busy for
203 two minutes. String JSON-RPC ids from the bridge are handled too
204 - The agent stops repeating itself: a tool call made three times with identical
205 arguments now forces a text reply instead of looping
206 - Onde SDK bumped to 1.2.2
207 - The registry listing in `server.json` matches what sigit.si publishes
208
209 ## 1.5.0
210
211 Opens the agent up to user extension: lifecycle hooks, custom slash commands,
212 and configurable subagent types. Also adds web search, a Repo tab in the TUI,
213 and a baked-in smbCloud MCP server.
214
215 ### What changed
216
217 - Hooks let you run shell commands at three points in the agent's lifecycle:
218 `session_start`, `pre_tool_use`, and `post_tool_use`, configured under
219 `[hooks]` in `settings.toml`. Commands get context through variable
220 substitution (`{cwd}`, `{tool_name}`, `{tool_result_len}`) and run in the
221 session working directory. A hook that fails is logged and the session
222 continues; a hook that hangs is killed on a timeout, along with its whole
223 process group
224 - User-defined slash commands: drop a Markdown file in `.sigit/commands/` or
225 `.claude/commands/` (or the personal `$SIGIT_CONFIG_DIR/commands/` and
226 `~/.claude/commands/`) with optional `description` and `argument-hint`
227 frontmatter, and the body becomes a prompt template. `$ARGUMENTS` takes the
228 whole argument string and `$1`..`$9` the positional words. A subdirectory
229 namespaces the command with `:`, so `.sigit/commands/git/commit.md` becomes
230 `/git:commit`. They run as ordinary agent turns through the usual tools and
231 permission checks, and are advertised to ACP clients like Zed. `/commands`
232 lists what was discovered
233 - Configurable subagent types for the `task` tool: a Markdown file in
234 `.sigit/agents/` or `.claude/agents/` with `name`, `description`, and an
235 optional `tools:` allow-list, whose body becomes that subagent's system
236 prompt. Pass its name as `subagent_type` to swap the prompt in. The
237 `tools:` list can only narrow the subagent's read-only ceiling, never widen
238 it, so a config file cannot grant itself `edit_file` or `run_command` and
239 route around the permission system. `/agents` lists the discovered types
240 - New `web_search` tool, backed by the Brave-Search-backed search on siGit
241 Code Cloud's MCP server. It is offered only when you are signed in, and it
242 is classified read-only, so searching never triggers a permission prompt
243 - The TUI gains a Repo tab, shown when the session's `origin` remote points at
244 the sigit.si host. It lists issues and pull requests fetched through the
245 official MCP server: Up and Down select, Enter opens a scrollable detail,
246 `i`, `p`, Left and Right switch sections, `r` refreshes. The tab is hidden
247 and skipped in the cycle for any other remote
248 - The smbCloud CLI's stdio MCP server (`smb --mcp`) is now baked in, so
249 smbCloud project and deployment tools work with no `mcp.toml` setup. It is
250 added only when the `smb` binary is on `PATH`, its read-only tools (`me`,
251 `deployments`, `project_list`, `project_show`) skip permission prompts, and
252 you can opt out with `smbcloud = false` in `mcp.toml` or
253 `SIGIT_MCP_SMBCLOUD=off`
254 - siGit Code Cloud's MCP server is now listed in the public MCP Registry as
255 `si.sigit/sigit`, published from `server.json` at the repository root
256
257 ### Fixes
258
259 - An explicit `deny` rule now applies to read-only first-party tools instead
260 of being skipped
261 - A subagent type whose `tools:` list resolves to an empty set is rejected
262 rather than producing a subagent with no tools
263 - Command templates render in a single substitution pass, so an argument that
264 contains something like `$1` is no longer re-substituted
265 - Frontmatter is stripped with the same leniency it is parsed with
266 - The Repo tab's detail view no longer shows stale data after a refresh
267
268 ## 1.4.1
269
270 Two small fixes: correct co-author attribution and a Homebrew tap fix.
271
272 ### What changed
273
274 - The `Co-Authored-By` trailer siGit Code adds to commits now uses the GitHub
275 noreply address for the [sigitc](https://github.com/sigitc) account instead
276 of `sigit@sigit.si`, so GitHub reliably attributes co-authored commits to
277 the siGit Code profile
278 - Fixed the Homebrew tap install docs to trust the tap with `brew trust`
279 instead of a `brew tap --force` flag
280
281 ## 1.4.0
282
283 Adds a headless one-shot mode, fine-grained permission rules, stdio transport
284 for MCP servers, an `/init` command, and a set of TUI upgrades: tabs, a live
285 thinking display, and collapsible tool calls.
286
287 ### What changed
288
289 - New headless mode: `sigit -p "prompt"` runs one agent turn with tools and exits — 0 on a completed turn, 1 on inference errors, 2 on bad invocations. Assistant text streams to stdout while logs and tool progress stay on stderr; `--cwd` sets the working directory and `--quiet` prints only the final message. Nobody can answer a permission prompt in a headless run, so `ask` collapses to a denial: grant tools for the run with `--allow-tool`, block them with `--deny-tool`, or use `SIGIT_PERMISSIONS=allow`
290 - Permission rules make autonomy granular: `[permissions.rules]` in `settings.toml` holds ordered `allow` and `deny` lists of `tool_name(pattern)` entries, e.g. `run_command(git *)` or `edit_file(src/*)`. Patterns match the command string for `run_command` and the path for file tools; deny always beats allow, and unparseable patterns fail closed, so a bad rule can only narrow access. Always-allow on a `run_command` prompt now grants that command family (its first two tokens), not the whole shell
291 - The MCP client speaks stdio: `mcp.toml` server entries can give a `command`, `args`, and an `env` map instead of a `url`, so the stdio-first majority of published MCP servers plugs in. Same handshake, timeouts, tool namespacing, and output caps as HTTP; `/mcp` shows the command line for stdio servers
292 - New `/init` command (TUI and ACP): runs a normal agent turn that explores the repository and writes an `AGENTS.md` — or improves an existing `AGENTS.md`/`CLAUDE.md` in place — going through the ordinary tools and permission checks
293 - The TUI gains tabs, cycled with the Tab key: Session is the chat, History lists saved sessions (restore with Enter, delete with a confirmed double-`d`, refresh with `r`), and Cloud shows the signed-in account, inference mode, current model and engine state, permission policy, and config dir, with a live Local Inference toggle
294 - The TUI shows model thinking: while a reply streams, the last three lines of the reasoning appear live under the spinner, dim and italic; finished replies collapse to a one-line indicator with the line count, and `/thinking` expands the full reasoning block above each reply. Display only — nothing changes in what is sent to the model, saved to sessions, or streamed over ACP
295 - Tool calls in the TUI transcript collapse to single dim title lines (the command for `run_command`, the path for file tools, the pattern for search and glob); `/tools` expands every entry to show the pretty-printed arguments and a capped tail of the result. Permission prompts keep showing the full command, and the model still receives full outputs
296 - When `AGENTS.md` and `CLAUDE.md` sit in the same directory, the instructions loader now prefers `AGENTS.md`, so shared content is injected once
297
298 ## 1.3.2
299
300 Adds a tool permission system with plan mode, durable sessions with context
301 compaction, background command execution, a subagent research tool, and commit
302 co-author attribution.
303
304 ### What changed
305
306 - Every tool call now passes a permission policy before executing. Read-only tools always run; mutating tools (and all MCP or unknown tools) are governed by, in order: plan mode, session grants, per-tool overrides, and a default mode from `[permissions]` in `settings.toml` (`allow`/`ask`/`deny`, default `ask`). On `ask`, editors get a native ACP permission dialog (allow once / allow for this session / deny) and the TUI pauses on a y/a/n prompt showing the tool and its arguments. `SIGIT_PERMISSIONS` overrides the default mode for headless runs and clients without permission support
307 - New `/plan [on|off]` command: plan mode blocks mutating tools and asks the model to present a plan while research tools keep working. `/permissions` prints the effective policy
308 - Sessions are durable: conversation history is saved per session under `~/.config/sigit/sessions/` after every turn. ACP `session/load` actually restores it, the TUI gets `/resume`, and `/clear` deletes the saved file
309 - Context compaction: `/compact` compresses the conversation on demand, and the agent compacts automatically once the history approaches a 24k-token budget, summarizing older turns and keeping the recent ones. The tool-round cap rises from 10 to 24 now that long sessions have a defense other than the cap
310 - `run_command` can run work in the background: pass `run_in_background` and the tool returns a task id immediately, so builds, test suites, and dev servers are no longer killed by the 120 second foreground timeout. Poll with the new `command_output` tool (read-only, never prompts) and stop with `kill_command`
311 - New `task` tool: delegate research to a fresh subagent conversation that only gets the read-only tools and returns its final answer, keeping the main context small. Available on OpenAI-compatible backends; on-device returns a clear fallback until onde supports a second context
312 - Commits created by the agent are co-authored: commit messages end with `Co-Authored-By: siGit Code <sigit@sigit.si>` (the [sigitc](https://github.com/sigitc) account), which GitHub renders next to the human author. If the model forgets the trailer, siGit amends it in, never rewriting commits that already exist on a remote
313 - ACP mode now honors the `OPENAI_BASE_URL`/`OPENAI_API_KEY` provider override at startup, matching the interactive client
314
315 ## 1.3.1
316
317 Adds [Model Context Protocol](https://modelcontextprotocol.io) (MCP) client
318 support with the official siGit Code MCP server baked in, a set of agent tools
319 that close parity gaps in the tool layer, and refreshed branding and licensing.
320
321 ### What changed
322
323 - siGit Code is now an MCP client: it connects to MCP servers over the Streamable HTTP transport (a single JSON-RPC endpoint), discovers the tools they expose, and offers them to the model alongside the built-in tools. When the model calls one, the call is forwarded to the owning server and the result fed back into the agent loop
324 - Bakes in the official siGit Code MCP server at `https://sigit.si/api/v1/mcp` (follows `SIGIT_CLOUD_URL`). When you are signed in (`sigit login`), the cloud session token is sent as the bearer credential
325 - Configure additional servers in `mcp.toml` — global (`~/.config/sigit/mcp.toml`) or project-local (`.sigit/mcp.toml`). Each `[[server]]` has a `name`, `url`, optional `enabled`, and optional `[server.headers]`; set `official = false` to opt out of the baked-in server
326 - MCP tools are namespaced `mcp__<server>__<tool>` so they never collide with built-in tools or across servers; tool output is capped to protect the model's context
327 - Discovery is best-effort at startup and bounded by a per-server timeout, so an unreachable server never blocks startup — it just contributes no tools
328 - Added a `/mcp` slash command (TUI and ACP) that lists configured servers, their connection status, and the tools each exposes
329 - Disable MCP entirely with `SIGIT_MCP=off`, or just the official server with `SIGIT_MCP_OFFICIAL=off`
330 - New agent tools that close parity gaps in the tool layer: `multi_edit` (apply a batch of exact-substring edits to one file atomically — written only if every edit matches), `glob` (locate files by name pattern with `**`/`*`/`?`/`{a,b}`, most-recently-modified first), `write_todos` (render a live task checklist through the tool result for multi-step work), and `remember` (append durable notes to the nearest `AGENTS.md`/`CLAUDE.md`)
331 - `edit_file` now supports `replace_all` and returns actionable failure context — naming the line whose trimmed text matches when only whitespace differs — so the model self-corrects in one round
332 - `search_files` gained a `file_glob` filter and a `max_results` cap (default 50, hard-capped at 1000) that also bounds the directory walk
333 - Refreshed branding and legal: updated `LICENSE`, `README`, and the npm/PyPI package descriptions
334
335 ## 1.3.0
336
337 Adds a Local Inference on/off toggle, the open [Agent Skills](https://agentskills.io)
338 format, and support for project instruction files (`AGENTS.md` and the like).
339
340 ### What changed
341
342 - Added a Local Inference on/off setting that is the explicit local-vs-cloud mode switch. It is persisted in `~/.config/sigit/settings.toml` (default on, local-first) and can be overridden with `SIGIT_LOCAL_INFERENCE`
343 - Toggle it with the `/local [on|off]` command (TUI and ACP); ACP clients without slash-command support get an equivalent "Local Inference" On/Off control in the session config panel
344 - `/models` now groups models by nature — Local vs siGit Code Cloud — and highlights the active mode's group while still showing the other, so the cloud tiers stay discoverable
345 - Discovers Agent Skills (folders with a `SKILL.md`) from `.sigit/skills/` and `.claude/skills/` in the project, `~/.config/sigit/skills/`, and `~/.claude/skills/`
346 - Follows the spec's progressive disclosure: each skill's name and description are advertised up front via a new `skill` tool, and the full instructions load only when the agent activates one
347 - Added a `/skills` slash command (TUI and ACP) that lists the discovered skills
348 - Reads project instruction files at session start: `AGENTS.md` (the cross-tool standard) and `CLAUDE.md`, walking from the working directory up to the repository root, plus a global file under `~/.config/sigit/`, and injects them into the session's system context so their guidance is always in force
349 - Nested instruction files are ordered outermost-first so the closest, most specific file takes precedence; the scan never reads above the repository root
350 - On-device models are no longer loaded implicitly. The chat UI and ACP sessions come up immediately, and the local model is brought into memory only when you run the `/load` command (or pick one in `/models`). Prompts sent before a model is loaded now return a hint instead of blocking on a multi-minute download.
351
352 ## 1.2.2
353
354 Streams assistant tokens as they arrive, on-device and over the cloud.
355
356 ### What changed
357
358 - Streamed assistant tokens live in the TUI and ACP sessions, both on-device and through siGit Code Cloud
359 - On-device inference streams only when a turn offers no tools, since `onde` can't stream and detect tool calls in the same pass; tool-capable turns still resolve in one shot
360 - Fixed the TUI so the latest message stays visible in long chats
361 - Put the cloud model-switch confirmation on its own line in ACP
362
363 ## 1.2.1
364
365 Stabilizes the Zed/ACP integration and finishes the cloud-tier wiring on top of 1.2.0.
366
367 ### What changed
368
369 - Fixed a Zed crash by keeping model-picker labels ASCII in the ACP model selector
370 - Wired ACP auth, cloud tiers, and slash commands into the Zed panel, including a `/reload` command to re-sync session state in place
371 - Fixed the TUI so the loaded-model checkmark appears once a download completes
372 - Synced bundled agent skills with the current code and added `CLAUDE.md`
373
374 ## 1.2.0
375
376 Adds siGit Code Cloud — a hosted inference tier alongside on-device models.
377
378 ### What changed
379
380 - Added siGit Code Cloud with cloud-tier routing, pointed at `sigit.si`
381 - Added account management slash commands and surfaced cloud tiers in `/models`
382 - Carried forward from 1.1.0: ACP SDK v0.13, refreshed dependencies and branding
383
384 ## 1.1.0
385
386 Bumps the ACP SDK to v0.13 and pulls in updated dependencies.
387
388 ### What changed
389
390 - Updated `agent-client-protocol` from v0.11 to v0.13
391 - Updated `onde` to 1.1.2
392 - Refreshed branding and skill metadata
393
394 ## 1.0.4
395
396 This release tightens up the terminal experience and finishes a few release-facing cleanup items.
397
398 ### What changed
399
400 - Added bold rich-text rendering in the TUI for assistant replies, so `**text**` now displays with terminal styling instead of raw markdown markers
401 - Refreshed the bundled skill metadata to follow the current Agent Skills `SKILL.md` format
402 - Synced the crate release metadata for the `1.0.4` cut
403
404 ## 1.0.3
405
406 This is the cleanup release for the editor-side startup problems.
407
408 ### What changed
409
410 - Fixed ACP sessions failing on the first real prompt because the server claimed the model was ready before anything had actually been loaded
411 - Changed ACP startup so the default model loads lazily on the first non-slash prompt instead of pretending it is already in memory
412 - Kept `initialize` and `session/new` lightweight while still sending proper progress updates once model loading begins
413 - Updated the Onde integration to `1.0.0`
414 - Removed a few dependencies we were no longer using
415
416 ## 1.0.2
417
418 This release was supposed to fix the ACP auth breakage. It did fix the stdout pollution problem, but it turned out not to be the whole story.
419
420 ### What changed
421
422 - Delayed model loading in ACP mode so startup diagnostics would not leak into protocol stdout during the auth handshake
423 - Tightened up the ACP startup path for editor integrations
424 - Refreshed some README wording while cutting `1.0.2`
425
426 ## 1.0.1
427
428 The first patch after `1.0.0` was mostly about making model loading and model switching feel less opaque.
429
430 ### What changed
431
432 - Added ToolCall-based progress UI for startup model loading and downloading
433 - Improved model-switch progress reporting in ACP clients
434 - Fixed model-load error handling so failed switches did not leave the UI in a weird state
435 - Cleaned up a few status messages and docs while the release was going out
436
437 ## 1.0.0 (2026)
438
439 siGit Code has been living in real smbCloud repos for a while now. At some point it stopped feeling like an experiment, so we called it 1.0.
440
441 ### What this release is
442
443 siGit Code is a local coding agent. It runs a quantized model on your machine, talks to editors over ACP, and can read files, run commands, fetch web pages, and write code without sending your project to a hosted API.
444
445 You can install it with Cargo, pip, npm, or Homebrew and use it like any other tool on your machine.
446
447 ### What shipped in 1.0
448
449 #### Editor integration
450
451 This is the core of the project.
452
453 Zed and VS Code can talk to siGit Code over ACP. Multi-turn sessions work. Tool calling works. Session forking works. Working-directory context works. That was the original goal, and it feels solid now.
454
455 #### Terminal UI
456
457 The terminal UI started as a side quest and turned out to be useful. You get a full-screen ratatui chat, streaming tokens, a spinner while the model is busy, and a model picker you can open in the middle of a session.
458
459 It runs on macOS and Linux. Windows gets ACP and editor mode for now. The Windows terminal UI is still unfinished.
460
461 #### Tool calling
462
463 This is the part that makes siGit Code feel like an agent instead of a chat box. The loop can run up to 10 rounds per message.
464
465 Available tools:
466
467 - `read_file` / `write_file` / `delete_file`
468 - `list_directory` / `search_files`
469 - `run_command`, with an optional working directory
470 - `read_website`, which fetches a URL and strips it down to readable text
471
472 The model can call a tool, inspect the result, and keep going until it has a real answer.
473
474 #### Model support
475
476 The model list ended up wider than we expected for 1.0:
477
478 - Qwen 3 1.7B, 4B, 8B, and 14B
479 - Qwen 2.5 1.5B and 3B
480 - Qwen 2.5 Coder 1.5B, 3B, and 7B
481 - DeepSeek Coder 6.7B
482
483 They are all GGUF models and they all come from Hugging Face on first run.
484
485 Qwen 3 is the interesting one. It uses extended thinking mode. The model reasons inside `<think>...</think>` blocks before answering. The TUI strips those blocks out and renders them dimmed above the reply, so you can see what happened without turning the whole conversation into noise.
486
487 The 8B model is the desktop default. Mobile stays on 1.7B because iOS gives apps roughly 2 to 3 GB of memory, and we learned the hard way that 3B can blow up on an iPhone 16e.
488
489 #### Model picker
490
491 The model picker shows:
492
493 - what is already cached locally
494 - what can be downloaded
495 - which models support tool calling
496 - whether the local cache looks healthy
497
498 You can open it with `/models` in the TUI or through the editor config option. Switching models happens in the background and the UI stays alive while the download or load is in progress.
499
500 #### smbCloud context
501
502 siGit Code knows smbCloud repos better than a generic coding assistant does. It understands the difference between platform-user flows and tenant-app auth flows, how `Project`, `FrontendApp`, `AuthApp`, and GresIQ fit together, and why Next.js SSR deploys are not the same thing as the generic git-push path.
503
504 Outside smbCloud, it backs off and behaves like a normal coding agent.
505
506 #### Distribution
507
508 Distribution took an unreasonable amount of time, honestly.
509
510 There are prebuilt binaries for macOS, Linux, and Windows on both arm64 and x64 where relevant, plus install paths through Cargo, PyPI, npm, and Homebrew:
511
512 - `cargo install sigit`
513 - `pip install sigit-code`
514 - `npm install -g @smbcloud/sigit`
515 - `brew install sigit`
516
517 Getting that whole pipeline to behave across CI, crates.io, PyPI, npm, and Homebrew was basically its own project.
518
519 ### What still does not work
520
521 The Windows terminal UI is still missing.
522
523 ACP and editor mode work on Windows. The part that is still missing is the interactive full-screen terminal UI. The blocker is Unix-specific terminal handling that has not been abstracted cleanly yet.
524
525 ### Changes since 0.1.2
526
527 - Added Qwen 3 14B support
528 - Added Qwen 3 `<think>` block parsing and separate rendering in the TUI
529 - Moved all TUI code into `#[cfg(unix)]`, which fixed a pile of dead-code errors on Windows CI
530 - Added live download progress during model switches, including cancellation with Ctrl+C
531 - Added model download and loading progress in the Zed agent config panel
532 - Added an animated spinner during model switching
533 - Added Qwen 2.5 Coder 7B
534 - Added downloadable models to the picker, not just locally cached ones
535 - Made model selection persist across restarts
536 - Added session working-directory support
537 - Moved model picker logic into a platform-independent module so Windows can compile without the TUI
538 - Added the `/models N` shortcut for picking a model by number
539 - Added the `read_website` tool
540 - Improved `read_file` handling and empty-reply detection
541 - Added async tool execution
542 - Fixed CI cross-compilation for macOS, iOS, Linux, and Windows
543 - Added npm, PyPI, and Homebrew distribution
544
545 ---
546
547 *© 2026 PT Sigit Mitra Bangun ([siGit Code & Deploy](https://sigit.si)), distributed by [Splitfire AB](https://5mb.app).*