Configuration

August 2, 2026 ยท View on GitHub

Gitside loads TOML from the platform configuration directory or the path passed to --config.

mouse = true
confirm_destructive = true
graph_page_size = 200
refresh_ms = 1500
layout = "auto"

[editor]
command = "code"
args = ["--reuse-window", "--goto", "{path}"]

Gitside inherits foreground and background colors from the terminal palette, so it intentionally has no separate theme configuration.

refresh_ms controls polling when native filesystem notifications are unavailable. With a watcher active, changes are coalesced promptly and a 30-second safety poll protects against dropped platform events.

confirm_destructive = true asks before discarding changes, deleting branches, dropping stashes, removing worktrees, starting a rebase, undoing a commit, or force-pushing with lease. Setting it to false performs those requested actions immediately.

Editor placeholders are passed as individual process arguments:

  • {path}: working-tree path

If no editor is configured, Gitside checks VISUAL, EDITOR, and common platform editors in that order.

The e comparison action uses Git's own difftool configuration. For example:

git config --global diff.tool vscode
git config --global difftool.vscode.cmd 'code --wait --diff "$LOCAL" "$REMOTE"'

Commit-message generation

Generation is opt-in and always creates an editable draft. It never stages files, creates a repository, switches branches, commits, or pushes. Every mode prefers staged changes and falls back to current unstaged and untracked changes when the index is empty. Enable one of the following modes:

The AI panel is always available in the normal Tab sequence, just like Stashes and Worktrees. From that panel, press e to enable generation for the current session and 1/2/3 to choose Local/Agent/API. Click Configure or press c to open the guided provider, model, credential, endpoint, and instruction setup. All controls and wizard choices support both mouse and keyboard input. Smart Local works immediately, while non-secret choices are saved automatically across launches.

API keys entered in the wizard are masked and stored in macOS Keychain, Windows Credential Manager, or the Linux Secret Service. They are never written to this TOML file. If the platform credential service is unavailable, Gitside warns that the key is available only for the current session. Environment variables remain a fallback, and k removes the selected provider's stored key.

Smart Local

This deterministic mode is private, offline, and requires no AI service. It summarizes the staged index or, when it is empty, the current working tree.

[ai]
enabled = true
mode = "local"
max_files = 3
max_diff_bytes = 32000

Existing agent

This mode invokes an already authenticated Codex, Claude Code, or OpenCode CLI non-interactively. The built-in adapters request non-mutating operation and provide a Git-specific system prompt based on the selected changes. Depending on the chosen agent, that diff may be sent to its configured provider.

[ai]
enabled = true
mode = "agent"
instructions = "Use conventional commit subjects."

[ai.agent]
provider = "codex" # codex, claude, opencode, or custom
# model = "your-model"
# args = ["additional", "arguments"]

For a custom generator, set provider = "custom" and command to a trusted command line. It runs with your user permissions, receives the generation prompt on standard input, and must print only the proposed commit message to standard output. For example, Codex can be used with codex exec --sandbox read-only -.

[ai.agent]
provider = "custom"
command = "/path/to/commit-message-generator"
args = []

MCP is not needed for this direction of control: Gitside initiates generation, so it calls the agent's non-interactive CLI. Agents can continue controlling repository state through ordinary Git commands.

Direct API

API keys can be entered through the masked setup wizard or read from environment variables. They are never stored in the configuration file. This mode sends the bounded diff to the chosen provider.

[ai]
enabled = true
mode = "api"
max_diff_bytes = 32000

[ai.api]
provider = "openai" # OpenAI, Anthropic, Gemini, OpenRouter, or Other in the UI
model = "your-model"
# api_key_env = "OPENAI_API_KEY"

Default key variables are OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, and OPENROUTER_API_KEY. Choose Other for an OpenAI-compatible service; it can use a complete chat-completions endpoint and an optional key variable:

[ai.api]
provider = "compatible"
model = "local-model"
endpoint = "http://127.0.0.1:11434/v1/chat/completions"
# api_key_env = "LOCAL_AI_KEY"

Press Ctrl+G from any panel, use G outside the commit editor, or click Generate beside Commit. Y opens the AI configuration and status panel.