oc-plugin-gitgud
v0.1.8
Published
Lightweight Git and Graphite controls for the OpenCode TUI sidebar: review your working tree, stage and unstage files, generate commit messages with an LLM, commit, and submit/push without leaving OpenCode.
Downloads
443
Readme
GitGud plugin for OpenCode
Lightweight Git and Graphite controls for the OpenCode TUI sidebar: review your working tree, stage and unstage files, generate commit messages with an LLM, commit, and submit/push without leaving OpenCode.
Inspired by lazygit.
Demo
Basic git actions (stage, commit, push)
https://github.com/user-attachments/assets/d670e879-0694-4443-8ee5-cdb2e4d58247
Staging, modifying, and submitting graphite stack
https://github.com/user-attachments/assets/100f4e87-6687-405e-b80d-a2f8f3527c7c
Moving up and down the graphite stack
https://github.com/user-attachments/assets/86148c41-eb92-4958-9fa1-a8b5cf5381f8
Installation
Install from the CLI:
opencode plugin oc-plugin-gitgudOr from OpenCode commands:
- Press
Ctrl+P - Select
Install Plugin - Enter
oc-plugin-gitgud
Options
Plugin options can be configured via the tui.json config file.
TUI
enabled(boolean, defaulttrue)workflow("auto" | "git" | "graphite", default"auto") chooses the primary GitGud workflow.autoadds Graphite controls when thegtCLI can read the current stack; otherwise it keeps the standard Git controls. When Graphite controls are active, plain Git commit and push actions remain available as explicit escape hatches.replace_sidebar_files(boolean, defaultfalse) disables OpenCode's default Modified Files sidebar cardconfirm_push(boolean, defaulttrue)confirm_stage_all_on_commit(boolean, defaulttrue) asks before committing all changed files when Commit or Graphite Modify is selected with changed files but no staged filescommit_agent(string, optional) overrides the agent used for generated commit messages. When unset, OpenCode uses its normal default for the generated session.commit_model(string, optional) overrides the model for generated commit messages usingprovider/modelformat, for exampleopencode-go/kimi-k2.6commit_system_instructions(string, optional) appends extra style guidance to GitGud's default commit-message system promptkeybinds(object) overrides GitGud's OpenCode command keybinds. Set a keybind tofalse,null, an empty string, or"none"to disable it.
For example:
{
"commit_model": "opencode-go/kimi-k2.6",
"commit_system_instructions": "Prefer short conventional commits. Mention issue IDs when present."
}Default keybinds use OpenCode leader sequences to avoid common terminal, macOS, and window-manager shortcuts. Mutating actions use uppercase shifted leader chords to reduce accidental collisions with OpenCode's lowercase leader defaults:
{
"keybinds": {
"open_status": "<leader>v",
"stage_all": "<leader>A",
"unstage_all": "<leader>U",
"commit": "<leader>C",
"push": "<leader>P",
"graphite_create": "none",
"graphite_modify": "none",
"graphite_submit_stack": "none",
"graphite_sync": "none",
"graphite_up": "none",
"graphite_down": "none",
"refresh": "f5"
}
}Graphite workflow
Plain Git commit generates an editable commit message for staged changes, then commits after
confirmation. If no files are staged and confirm_stage_all_on_commit is enabled, GitGud asks before
generating a message for all changed files; it stages and commits those changes only after you accept
the final commit prompt.
When workflow is "graphite", or "auto" detects a usable Graphite
CLI stack, GitGud keeps the same simple working-tree controls, shows Graphite actions first, and keeps
plain Git commit/push actions available in the same Actions palette. Graphite actions use Graphite's
canonical commands:
- Create Graphite branch: prompts for a branch name, then runs
gt create <branch> --no-interactivewithout staging or committing changes. If files are staged, GitGud asks you to unstage them first to avoid Graphite committing staged changes. - Modify current diff: generates an editable commit message for staged changes, then runs
gt modify --commit --message "message"(gt m -cm "message"). If no files are staged andconfirm_stage_all_on_commitis enabled, GitGud asks before generating a message for all changed files and runsgt modify --commit --all --message "message"(gt m -cam "message") after final confirmation. - Submit stack:
gt submit --stack(gt ss) - Sync stack:
gt sync - Move up/down stack:
gt up/gt down
Commands
GitGud: Stage allGitGud: Unstage allGitGud: Open Git StatusGitGud: Commit changes with git(generates an editable commit message before committing)GitGud: Push current branch with gitGitGud: Create Graphite branchGitGud: Modify current diff with GraphiteGitGud: Submit Graphite stackGitGud: Sync Graphite stackGitGud: Move up Graphite stackGitGud: Move down Graphite stackGitGud: Refresh
