Codumentor logo Codumentor

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):

ToolApprovalPurpose
git_commitnone (sandbox-local, credential-free)Stage and commit changes with the user's identity. Does not push to any remote.

The tool:

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

OptionTypeDefaultDescription
config.commit_signaturestring"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:

  1. Per-user override — stored in the scm_push SQLite store (Settings → SCM Push).
  2. Authenticated user profile — Gitea display_name / email (when reachable).
  3. 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:

EventPayloadPurpose
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