SCM Push Plugin
The scm_push plugin gives the main agent a git_commit tool that creates real commits inside the credential-free sandbox. Those commits stay in the conversation's workspace overlay until a person clicks Push in the UI. The host-side push gateway then transports them using credentials the sandbox and the agent never see.
Requires Workspace Isolation and User Secrets.
Configuration
plugins:
- module: codumentor.plugins.scm_push
class: ScmPushPlugin
priority: 25
dependencies: ["workspace_isolation", "user_secrets"]
args:
enabled: true
| Option | Type | Default | Description |
|---|---|---|---|
enabled | bool | true | Enable or disable the plugin. |
Every git_commit message gets a Made with Codumentor trailer after a blank line.
What users do
- The agent commits with
git_commit(stages all changes by default). Commits land in this session's overlay only — they are not pushed. - The Push button in the chat header lights up.
- The user confirms the repo, branch, and SHA. Push runs on the host, never as an agent tool.
Bind a host-only push secret (HTTPS token or SSH key) in Settings → SCM Push, scoped to a repo (or glob), remote URL, and optional branch patterns. SSH bindings can also pin a host public key.
Until that binding exists — or while the secret it names is still empty — the dialog says so and its Push button stays disabled, so a missing credential is read before it is discovered. Readiness is answered by user_secrets' secret_store.has_host_secret, which reports only whether a value is set; the value itself is still read once, host-side, at push time.
Reviewing the changes
The dialog shows uncommitted work and pending commits for each repository. Review changes loads a per-file diff:
- Each file is a disclosure — fold a long one away to reach the ones under it; Collapse all / Expand all does the lot. Folds survive the dialog's re-renders (a commit landing, a turn ending).
- A file's diff scrolls inside its own box, so the horizontal scrollbar stays beside the long line instead of below the whole file, and add/delete highlights span the full scrolled line.
Commit identity (git_commit vs auto-commit)
git_commit stamps a real author. Resolution order:
- Settings → SCM Push — per-user name/email (the form pre-fills from the auth profile).
- Authenticated profile — display name and email, when available.
- Fallback —
"Codumentor (identity unset)" <codumentor@localhost>, with a warning in the tool result. Commits are never blocked on a missing identity.
This is not workspace isolation's integration.auto_commit. Auto-commit runs after an isolated subagent finishes and uses a generic "Codumentor" <codumentor@local> identity. It does not push and does not use the user's SCM Push identity.
Notes
git_commitis only available to the main agent. Subagents do not receive it.- The tool does not push. Push is host-side, triggered by the UI, using a host-only secret.
- After a successful commit, the session workspace is pinned against TTL cleanup so unpushed commits survive eviction until they are pushed (or the pin is released).