Git status and Commit & Push
Omniscio shows a project's git state where you already work — the current branch, how many files have changed, and each changed file's status — and gives you a commit box to write a message and push it, without opening a terminal. Committing stages every change in the repo; a push that fails after the commit keeps the commit and tells you why.
What it is
When an agent edits your files, the first things you want to know are which branch you are on, how much has changed, and what state each change is in. Omniscio surfaces that git metadata inside the app, next to the changes themselves, and puts a commit box beside it so you can save and publish the work without leaving for a terminal. It is read-and-write: the status side is a live read of the repository, and the commit box is the part that stages your changes, records a commit, and can push the branch to its remote.
Where to find it
- The git status sits at the top of the Changes panel in the File Explorer: the current branch (or, in a project that holds several git repos, the repo count), with each changed file listed below it carrying its own status letter and added/removed line counts. See Review changes for that panel in full.
- The commit box is under each repo's header in the same panel, in Project mode. A single-repo project shows one box; a project with several git repos (nested or side by side) shows one box per repo. On a phone, the same commit box is reached from a session's ⋯ menu → View Diffs.
How it behaves
The status side. The panel reads the working tree and shows your current branch and the number of changed files, and lists every changed file with a status letter (Modified, Added, Deleted, Renamed, Untracked, and so on) and its insertion/deletion counts. It refreshes itself when an agent in the project finishes a message, and there is a manual Refresh too.
Writing the commit. The commit box is a guided Conventional Commits form, like a code editor's commit helper: pick a type (feat, fix, docs, …), optionally a scope, and a subject, and a live preview shows the exact message git will receive. The subject field warns past 72 characters, and a Breaking change toggle adds the ! marker and a BREAKING CHANGE: footer. The type list and the one-click scope suggestions are mined from the repo's own recent history, so a project that already uses its own vocabulary is offered it back. ✨ Generate has AI read the repo's diff and fill the fields (you review before committing); Edit as text drops to a plain message box for anything the fields cannot express. Generate needs an AI account connected and is disabled when there is nothing to commit.
Commit and Commit & Push. Commit stages every change in that repo and records it locally. Commit & Push does the same and then pushes the current branch to its remote. Both stay disabled until the repo has changes and the draft has at least a type and a subject.
What you see, and what is protected. A success toast confirms "Committed." or "Committed and pushed."; the fields clear and the file list refreshes as the committed files drop off. The push never opens a terminal or a login prompt — it uses your already-connected GitHub credentials, and if it cannot authenticate or the branch is behind its remote it fails with a clear message (pull first, then push). If the push fails after the commit was saved, Omniscio says the commit was kept locally and gives the reason — your work is never lost. Telling you the one-time git config command to set your name and email is the same kind of plain message.
Why it is safe to hand a crafted branch or file name to it. Every git call spawns the git binary directly, as a list of arguments, never through a shell — so a branch name or file name can never be re-parsed as a command.
For agents
- Git status over IPC is
git:repo-status(GIT_REPO_STATUS), returning{ isGitRepo, branch, headSha, changedFileCount }. - Commit and push are one channel,
git:commit(GIT_COMMIT), with apushflag: it stage-alls and commits, then optionally pushes. The write half isstageAllAndCommit/pushCurrentBranchinsrc/main/services/git/git-commit-push-service.ts; a push failure after the commit returnsCommitted locally, but the push failed. …. - The AI commit message is
git:generate-commit-message; the composer rules (type list, 72-character subject, scope mining) live insrc/shared/conventional-commits.ts. - Injection safety is
src/main/services/git/git-run.ts—execFileon thegitbinary, no shell layer. The committing contract iscommit-push-contract.md.
Related
- diff-viewer.md — the full Changes panel and diff viewer this status and commit box live in
- agent-git-paved-road.md — how an agent does its own git work over the CLI instead of a terminal
- git-guardrails.md — the rules that stop a session doing something destructive to your history
- branch-header.md — the optional branch badge shown next to a session's name
Last verified 2026-10-06