1 # Changelog
2
3 ## 1.4.1
4
5 Two small fixes: correct co-author attribution and a Homebrew tap fix.
6
7 ### What changed
8
9 - The `Co-Authored-By` trailer siGit Code adds to commits now uses the GitHub
10 noreply address for the [sigitc](https://github.com/sigitc) account instead
11 of `sigit@sigit.si`, so GitHub reliably attributes co-authored commits to
12 the siGit Code profile
13 - Fixed the Homebrew tap install docs to trust the tap with `brew trust`
14 instead of a `brew tap --force` flag
15
16 ## 1.4.0
17
18 Adds a headless one-shot mode, fine-grained permission rules, stdio transport
19 for MCP servers, an `/init` command, and a set of TUI upgrades: tabs, a live
20 thinking display, and collapsible tool calls.
21
22 ### What changed
23
24 - 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`
25 - 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
26 - 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
27 - 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
28 - 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
29 - 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
30 - 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
31 - When `AGENTS.md` and `CLAUDE.md` sit in the same directory, the instructions loader now prefers `AGENTS.md`, so shared content is injected once
32
33 ## 1.3.2
34
35 Adds a tool permission system with plan mode, durable sessions with context
36 compaction, background command execution, a subagent research tool, and commit
37 co-author attribution.
38
39 ### What changed
40
41 - 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
42 - 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
43 - 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
44 - 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
45 - `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`
46 - 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
47 - 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
48 - ACP mode now honors the `OPENAI_BASE_URL`/`OPENAI_API_KEY` provider override at startup, matching the interactive client
49
50 ## 1.3.1
51
52 Adds [Model Context Protocol](https://modelcontextprotocol.io) (MCP) client
53 support with the official siGit Code MCP server baked in, a set of agent tools
54 that close parity gaps in the tool layer, and refreshed branding and licensing.
55
56 ### What changed
57
58 - 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
59 - 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
60 - 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
61 - 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
62 - 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
63 - Added a `/mcp` slash command (TUI and ACP) that lists configured servers, their connection status, and the tools each exposes
64 - Disable MCP entirely with `SIGIT_MCP=off`, or just the official server with `SIGIT_MCP_OFFICIAL=off`
65 - 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`)
66 - `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
67 - `search_files` gained a `file_glob` filter and a `max_results` cap (default 50, hard-capped at 1000) that also bounds the directory walk
68 - Refreshed branding and legal: updated `LICENSE`, `README`, and the npm/PyPI package descriptions
69
70 ## 1.3.0
71
72 Adds a Local Inference on/off toggle, the open [Agent Skills](https://agentskills.io)
73 format, and support for project instruction files (`AGENTS.md` and the like).
74
75 ### What changed
76
77 - 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`
78 - 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
79 - `/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
80 - Discovers Agent Skills (folders with a `SKILL.md`) from `.sigit/skills/` and `.claude/skills/` in the project, `~/.config/sigit/skills/`, and `~/.claude/skills/`
81 - 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
82 - Added a `/skills` slash command (TUI and ACP) that lists the discovered skills
83 - 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
84 - Nested instruction files are ordered outermost-first so the closest, most specific file takes precedence; the scan never reads above the repository root
85 - 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.
86
87 ## 1.2.2
88
89 Streams assistant tokens as they arrive, on-device and over the cloud.
90
91 ### What changed
92
93 - Streamed assistant tokens live in the TUI and ACP sessions, both on-device and through siGit Code Cloud
94 - 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
95 - Fixed the TUI so the latest message stays visible in long chats
96 - Put the cloud model-switch confirmation on its own line in ACP
97
98 ## 1.2.1
99
100 Stabilizes the Zed/ACP integration and finishes the cloud-tier wiring on top of 1.2.0.
101
102 ### What changed
103
104 - Fixed a Zed crash by keeping model-picker labels ASCII in the ACP model selector
105 - Wired ACP auth, cloud tiers, and slash commands into the Zed panel, including a `/reload` command to re-sync session state in place
106 - Fixed the TUI so the loaded-model checkmark appears once a download completes
107 - Synced bundled agent skills with the current code and added `CLAUDE.md`
108
109 ## 1.2.0
110
111 Adds siGit Code Cloud — a hosted inference tier alongside on-device models.
112
113 ### What changed
114
115 - Added siGit Code Cloud with cloud-tier routing, pointed at `sigit.si`
116 - Added account management slash commands and surfaced cloud tiers in `/models`
117 - Carried forward from 1.1.0: ACP SDK v0.13, refreshed dependencies and branding
118
119 ## 1.1.0
120
121 Bumps the ACP SDK to v0.13 and pulls in updated dependencies.
122
123 ### What changed
124
125 - Updated `agent-client-protocol` from v0.11 to v0.13
126 - Updated `onde` to 1.1.2
127 - Refreshed branding and skill metadata
128
129 ## 1.0.4
130
131 This release tightens up the terminal experience and finishes a few release-facing cleanup items.
132
133 ### What changed
134
135 - Added bold rich-text rendering in the TUI for assistant replies, so `**text**` now displays with terminal styling instead of raw markdown markers
136 - Refreshed the bundled skill metadata to follow the current Agent Skills `SKILL.md` format
137 - Synced the crate release metadata for the `1.0.4` cut
138
139 ## 1.0.3
140
141 This is the cleanup release for the editor-side startup problems.
142
143 ### What changed
144
145 - Fixed ACP sessions failing on the first real prompt because the server claimed the model was ready before anything had actually been loaded
146 - Changed ACP startup so the default model loads lazily on the first non-slash prompt instead of pretending it is already in memory
147 - Kept `initialize` and `session/new` lightweight while still sending proper progress updates once model loading begins
148 - Updated the Onde integration to `1.0.0`
149 - Removed a few dependencies we were no longer using
150
151 ## 1.0.2
152
153 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.
154
155 ### What changed
156
157 - Delayed model loading in ACP mode so startup diagnostics would not leak into protocol stdout during the auth handshake
158 - Tightened up the ACP startup path for editor integrations
159 - Refreshed some README wording while cutting `1.0.2`
160
161 ## 1.0.1
162
163 The first patch after `1.0.0` was mostly about making model loading and model switching feel less opaque.
164
165 ### What changed
166
167 - Added ToolCall-based progress UI for startup model loading and downloading
168 - Improved model-switch progress reporting in ACP clients
169 - Fixed model-load error handling so failed switches did not leave the UI in a weird state
170 - Cleaned up a few status messages and docs while the release was going out
171
172 ## 1.0.0 (2026)
173
174 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.
175
176 ### What this release is
177
178 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.
179
180 You can install it with Cargo, pip, npm, or Homebrew and use it like any other tool on your machine.
181
182 ### What shipped in 1.0
183
184 #### Editor integration
185
186 This is the core of the project.
187
188 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.
189
190 #### Terminal UI
191
192 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.
193
194 It runs on macOS and Linux. Windows gets ACP and editor mode for now. The Windows terminal UI is still unfinished.
195
196 #### Tool calling
197
198 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.
199
200 Available tools:
201
202 - `read_file` / `write_file` / `delete_file`
203 - `list_directory` / `search_files`
204 - `run_command`, with an optional working directory
205 - `read_website`, which fetches a URL and strips it down to readable text
206
207 The model can call a tool, inspect the result, and keep going until it has a real answer.
208
209 #### Model support
210
211 The model list ended up wider than we expected for 1.0:
212
213 - Qwen 3 1.7B, 4B, 8B, and 14B
214 - Qwen 2.5 1.5B and 3B
215 - Qwen 2.5 Coder 1.5B, 3B, and 7B
216 - DeepSeek Coder 6.7B
217
218 They are all GGUF models and they all come from Hugging Face on first run.
219
220 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.
221
222 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.
223
224 #### Model picker
225
226 The model picker shows:
227
228 - what is already cached locally
229 - what can be downloaded
230 - which models support tool calling
231 - whether the local cache looks healthy
232
233 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.
234
235 #### smbCloud context
236
237 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.
238
239 Outside smbCloud, it backs off and behaves like a normal coding agent.
240
241 #### Distribution
242
243 Distribution took an unreasonable amount of time, honestly.
244
245 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:
246
247 - `cargo install sigit`
248 - `pip install sigit-code`
249 - `npm install -g @smbcloud/sigit`
250 - `brew install sigit`
251
252 Getting that whole pipeline to behave across CI, crates.io, PyPI, npm, and Homebrew was basically its own project.
253
254 ### What still does not work
255
256 The Windows terminal UI is still missing.
257
258 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.
259
260 ### Changes since 0.1.2
261
262 - Added Qwen 3 14B support
263 - Added Qwen 3 `<think>` block parsing and separate rendering in the TUI
264 - Moved all TUI code into `#[cfg(unix)]`, which fixed a pile of dead-code errors on Windows CI
265 - Added live download progress during model switches, including cancellation with Ctrl+C
266 - Added model download and loading progress in the Zed agent config panel
267 - Added an animated spinner during model switching
268 - Added Qwen 2.5 Coder 7B
269 - Added downloadable models to the picker, not just locally cached ones
270 - Made model selection persist across restarts
271 - Added session working-directory support
272 - Moved model picker logic into a platform-independent module so Windows can compile without the TUI
273 - Added the `/models N` shortcut for picking a model by number
274 - Added the `read_website` tool
275 - Improved `read_file` handling and empty-reply detection
276 - Added async tool execution
277 - Fixed CI cross-compilation for macOS, iOS, Linux, and Windows
278 - Added npm, PyPI, and Homebrew distribution
279
280 ---
281
282 *© 2026 [Splitfire AB](https://5mb.app) ([siGit Code & Deploy](https://sigit.si)).*