SCM Push Plugin
The scm_push plugin gives the main agent a git_commit tool that creates real, message-bearing commits inside the credential-free sandbox. The commits land in the session's workspace overlay and can later be pushed to a remote via the host-side Push gateway (triggered by the UI Push button, never by the agent).
This plugin keeps credentials out of the sandbox: the agent produces commits; the backend push gateway transports them using credentials the sandbox and agent never see. See the Secure SCM Push Design for the full architecture.
Overview
One tool, registered via onPromptAssemble (main agent only):
| Tool | Approval | Purpose |
|---|---|---|
git_commit | none (sandbox-local, credential-free) | Stage and commit changes with the user's identity. Does not push to any remote. |
The tool:
- Resolves commit identity from the user's per-user setting (auto-filled from the auth profile), falling back to a clearly-attributed default.
- Appends a configurable commit signature (default:
"Made with Codumentor") after a blank line. - Emits a
plugin.scm_push.committedUI event so the Push button lights up. - Pins the session workspace against the TTL sweep so unpushed commits survive eviction.
Configuration
plugins:
- module: codumentor.plugins.scm_push
class: ScmPushPlugin
priority: 25
dependencies: ["workspace_isolation", "user_secrets"]
args:
enabled: true
config:
commit_signature: "Made with Codumentor" # default; set "" to disable
Config options
| Option | Type | Default | Description |
|---|---|---|---|
config.commit_signature | string | "Made with Codumentor" | Text appended to every commit message after a blank line. Set to "" (empty string) to disable the signature entirely. |
Commit signature examples
Default (no config needed) — commit message "fix login bug" becomes:
fix login bug
Made with Codumentor
Custom signature:
args:
config:
commit_signature: "Co-Authored-By: Codumentor AI <ai@example.com>"
Disabled:
args:
config:
commit_signature: ""
Commit Identity
The git_commit tool stamps a real author identity on every commit. Resolution order:
- Per-user override — stored in the
scm_pushSQLite store (Settings → SCM Push). - Authenticated user profile — Gitea
display_name/email(when reachable). - Fallback default —
"Codumentor (identity unset)" <codumentor@localhost>with a warning in the tool result.
Commits are never blocked on a missing identity; the tool always succeeds with a clearly-attributed author.
Events
The plugin emits these events to the UI:
| Event | Payload | Purpose |
|---|---|---|
plugin.scm_push.committed | {status, repo, sha, branch, conversation_id} (hidden) | Lights up the Push button after a commit. |
plugin.scm_push.pushed | (planned) | Confirms a successful push. |
Notes
- The
git_committool is only available to the main agent. Subagents do not receive it. - The tool does not push to any remote. Push is a host-side operation triggered by the UI Push button, using credentials stored outside the sandbox.
- The
auto_commitmechanism (internal, after subagent completion) is separate and uses a generic identity ("Codumentor" <codumentor@local>). It is not thegit_committool.