跳到主要内容
    ↑↓ 选择↵ 打开esc 关闭
    aivi-hq

    Attribution

    opencode-attribution·v0.2.0·Git 与版本控制

    OpenCode plugin: a commit tool that attributes commits by who launched the shell

    GitHub 星标

    2

    近 30 天 +1

    月装机量

    365

    近 7 天 21

    综合评分

    41.3

    生态多维模型

    最近提交

    14 天前

    2026-09-20

    快速安装与配置

    opencode.json

    写入当前项目的 opencode.json,只对这个仓库生效。

    opencode.json

    {
      "$schema": "https://opencode.ai/config.json",
      "plugin": ["opencode-attribution@0.2.0"]
    }

    OpenCode 启动时会通过内嵌运行时自动加载 npm 依赖并缓存至本地目录,无需手动在全局环境执行安装。

    An OpenCode plugin that adds a commit tool: every commit an agent makes carries the right attribution automatically.

    [!WARNING] Requires OpenCode 2 or newer. This plugin is built on the V2 plugin API (tool transforms, session context, permission hooks). It will not load on OpenCode 1.

    Quick start

    opencode plugin add opencode-attribution
    

    Optional — who the co-author is (a repository may override it locally; the default is OpenCode <noreply@opencode.ai>):

    git config --global opencode.coauthor "aivi-agent[bot] <331678708+aivi-agent[bot]@users.noreply.github.com>"
    

    Optional — hide the Harness: debug line (attribution is not affected):

    // opencode.json(c)
    {
      "plugins": [
        {
          "package": "opencode-attribution",
          "options": { "harness": false }
        }
      ]
    }
    

    That is all. No permission configuration: the plugin denies git commit in the shell tool itself.

    The rule

    Attribution follows who launched the shell, never what a prompt said:

    Launched by Commit
    An unattended agent (an aivi worker) the agent is the sole author and committer — no trailers
    An agent with a person attending the person is the author; the agent gets a Co-authored-by and a Harness: line
    A person in their own terminal untouched

    What it does

    • Registers the commit tool — thin over git commit: stage with git add, call the tool with a message (plus optional extra git commit arguments).

    • An attended commit gets two trailers via git commit --trailer (git ≥ 2.22):

      Co-authored-by: aivi-agent[bot] <331678708+aivi-agent[bot]@users.noreply.github.com>
      Harness: OpenCode v2.0.11, mlx-serve/Qwen3.8-Flash-Next
      

      Harness: is one line of debug metadata: the OpenCode version and the session's providerID/modelID. GitHub renders it as plain text; only Co-authored-by links to a profile. It can be turned off with the harness plugin option — the co-author trailer is always added.

    • Denies git commit through the shell tool, with the commit tool named as the reason — agents are redirected, never stuck. OpenCode's permission scanner splits chained commands, so git add x && git commit is denied too. The deny follows the plugin: a global install covers every session on the machine; don't install it globally where you don't want it. A person's own terminal is never affected — permission evaluation only exists for tool calls.

    aivi and agent.autonomous

    The plugin reads git config --get agent.autonomous in the session's working directory. This is the default in aivi worker worktrees: when aivi launches an unattended worker it sets user.name and user.email to the bot and agent.autonomous = true per worktree. With the flag set, the commit tool adds no trailers — the bot is already the author and committer, and a co-author trailer on the bot's own work would be wrong.

    Known gaps, stated not hidden

    • bash -c 'git commit' and env-prefixed forms can slip past the deny; the plugin only sees what goes through the permission system.
    • A machine without the plugin gets no attribution — correct: nothing there launched an agent either.
    • An attended session inside an autonomous worktree gets no trailers, even though a person is attending.

    Development

    Node ≥ 26 (the source is type-stripped TypeScript, executed directly), git ≥ 2.22.

    npm install
    npm run agentic:verify
    

    License

    MIT

    同类生态推荐