# siGit Code
siGit Code is a local-first AI coding agent. It runs on your machine by default, with optional cloud inference and remote automation when you choose them. No API key is required to start; the on-device path needs none at all. It is the agent runtime for [siGit Factory](https://factory.sigit.si/), the hosted version of the same product. Run it yourself, as below, or use siGit Code Cloud there if you would rather not host a model locally. [sigit.si](https://sigit.si) is Git hosting built for AI workflows. It works in any codebase. In smbCloud repos it is more useful out of the box because it already understands the Rust workspace layout, deploy flows, auth boundaries, and GresIQ. You can use it in two ways: - **ACP mode:** Zed or another ACP-compatible editor starts it over stdio with the `--acp` argument - **Terminal mode:** run `sigit` for the interactive chat UI Every ACP client must pass `--acp`. It takes no other arguments, and it is what tells the binary to speak the Agent Client Protocol instead of opening the terminal UI. | Platform | ACP mode | Terminal mode | |----------|----------|---------------| | macOS | ✓ | ✓ | | Linux | ✓ | ✓ | | Windows | ✓ | not yet | ## Install ```sh cargo install sigit ``` | Method | Command | |--------|---------| | Homebrew | `brew tap getsigit/tap && brew trust --tap getsigit/tap && brew install sigit` | | pip | `pip install sigit-code` | | uv | `uvx --from sigit-code sigit` | | npm | `npm install -g @getsigit/sigit` | | NuGet | `dotnet tool install --global SiGit.Code` | | winget | `winget install smbCloud.siGitCode` | | Scoop | `scoop bucket add getsigit https://github.com/getsigit/scoop-bucket && scoop install sigit` | | AUR | `yay -S sigit-bin` | | Debian/Ubuntu | download the `.deb` from [releases](https://github.com/getsigit/sigit/releases), then `sudo dpkg -i sigit_*.deb` | | Fedora/RHEL | download the `.rpm` from [releases](https://github.com/getsigit/sigit/releases), then `sudo rpm -i sigit-*.rpm` | ## First run The first launch downloads a GGUF model from Hugging Face. Expect roughly 1 to 2 GB, depending on the model. After that, loads come from disk and are much faster. On macOS, siGit Code shares its model cache with the desktop app through an App Group container. If the desktop app already downloaded the model, the CLI reuses it. ## Zed setup Add this to `~/.config/zed/settings.json`: ```json { "agent_servers": { "siGit Code": { "type": "custom", "command": "/absolute/path/to/sigit", "args": ["--acp"] } } } ``` Use the full absolute path. `~` does not expand here. ## Xcode custom agent In Xcode, open **Settings > Intelligence > Agents**, add a custom agent, and set: - **Executable:** the absolute path to `sigit` - **Arguments:** `--acp` In Xcode the `--acp` mode also loads the selected on-device model on the first prompt, so you do not need to send `/load` from the Xcode chat. To let siGit use Xcode's build, test, and project tools, enable **Allow external agents to use Xcode tools** in Xcode's Intelligence settings, keep the project open, and add this to `~/.config/sigit/mcp.toml`: ```toml [[server]] name = "xcode" command = "xcrun" args = ["mcpbridge"] ``` ## VS Code ### With siGit Code Extension Install from the [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items?itemName=getsigit.sigit-code). ```jsonc { "sigit.agents": { "sigit": { "name": "siGit (on-device)", "command": "sigit", "args": ["--acp"], "env": {} }, }, "sigit.agent.default": "sigit" } ``` ### With ACP Client Install [ACP Client](https://marketplace.visualstudio.com/items?itemName=formulahendry.acp-client), then add: ```json { "acp.agents": { "siGit Code": { "command": "sigit", "args": ["--acp"], "env": {} } } } ``` ## ACP support siGit Code speaks [Agent Client Protocol](https://agentclientprotocol.com) v1 over stdio. As of 1.7.0 it implements the whole stable v1 surface an agent can offer: | Area | What is supported | |------|-------------------| | Sessions | `session/new`, `load`, `resume`, `fork`, `list` (paged, with a `cwd` filter), `close`, `delete`, and multi-root projects through `additionalDirectories` | | Prompts | Text, images, audio, embedded resources and resource links. Stop reasons `end_turn`, `max_tokens`, `max_turn_requests`, `refusal` and `cancelled` | | Updates | Message and thought chunks with a `messageId`, tool calls with diffs, locations and embedded terminals, plans, `usage_update`, `session_info_update`, slash commands | | Cancellation | `session/cancel`, and `$/cancel_request` for a prompt or a sign-in | | Permissions | `session/request_permission` with allow or deny, once or for the session. Manual, Auto and Plan as config options and as session modes | | Client features | `fs/read_text_file` and `fs/write_text_file`, `terminal/*`, URL-mode elicitation and boolean config options, each used only when the client advertises it | | MCP | stdio and Streamable HTTP servers passed in `mcpServers` | | Auth | `authenticate` (browser sign-in) and `logout` | `session/fork` is still marked unstable in the protocol. Draft v2 is not enabled. ## Terminal mode Run `sigit` in a terminal and you get the same model and system prompt as the editor integration, just in a full-screen chat UI. Terminal mode currently needs Unix terminal behavior, so it works on macOS and Linux only. The interactive UI emits [OSC 7501 program status](https://www.superlogical.com/rex/docs/build/program-status) reports so supporting terminals can show working, waiting for permission or input, browser sign-in, completion, and errors across tabs. User-driven quit reports idle; terminals expire active work on process exit and retain completion or error reports. Status sequences are never written to headless/JSON or ACP output. ## Headless and CI mode Use `sigit run` to execute the same agent from scripts, CI, or another siGit Factory client: ```sh sigit run "Review this repository and run the focused tests" --cwd . ``` Every run receives a durable session ID. The ID is printed to stderr in text mode and included in every event in JSONL mode. Resume the same conversation from a later command—or import it in an ACP client—by passing that ID: ```sh sigit run "Continue with the next issue" --resume