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