Skip to content
This repository was archived by the owner on Sep 7, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
02a9924
Add plugin cli-agent-bridge
Hylouis233 Aug 15, 2026
9cd9011
Harden cli-agent-bridge headless templates and git snapshot
Hylouis233 Aug 15, 2026
78515cf
Launch Windows command shims through PowerShell runner
Hylouis233 Aug 15, 2026
77b9cb2
Address PR review: serialize, cancel, fail-closed, honest results
Hylouis233 Aug 15, 2026
db2553e
Align docs with review-hardened server behavior
Hylouis233 Aug 15, 2026
fd9c432
Add plugin test suite and precise parallel wording
Hylouis233 Aug 15, 2026
a42a84d
Key locks by worktree root, harden cancellation and process-tree kills
Hylouis233 Aug 15, 2026
d27f2e6
Run git snapshot commands serially; make tests leak-proof
Hylouis233 Aug 15, 2026
6ee0a0b
fix(cli-agent-bridge): harden delegation lifecycle
Hylouis233 Aug 16, 2026
0c7a401
fix(cli-agent-bridge): address current review gaps
Hylouis233 Aug 16, 2026
1612d21
fix(cli-agent-bridge): close remaining review gaps
Hylouis233 Aug 16, 2026
f46431a
fix(cli-agent-bridge): serialize across server processes
Hylouis233 Aug 16, 2026
c7a4a15
fix(cli-agent-bridge): harden Linux zombie cleanup
Hylouis233 Aug 16, 2026
8f599d2
fix(cli-agent-bridge): harden cross-process isolation
Hylouis233 Aug 16, 2026
13d4570
fix(cli-agent-bridge): use CAS workspace leases
Hylouis233 Aug 16, 2026
4a6fb48
fix(cli-agent-bridge): close audit findings on leases, trees, and att…
Hylouis233 Aug 16, 2026
72a0fb2
fix(cli-agent-bridge): close latest review round
Hylouis233 Aug 16, 2026
34b9690
fix(cli-agent-bridge): isolate shared refs and process scans
Hylouis233 Aug 16, 2026
47b4eca
fix(cli-agent-bridge): close current review gaps
Hylouis233 Aug 16, 2026
36988ef
fix(cli-agent-bridge): address delayed review findings
Hylouis233 Aug 16, 2026
183aa04
fix(cli-agent-bridge): cover complete baselines and paths
Hylouis233 Aug 16, 2026
d91e923
fix(cli-agent-bridge): observe late children and fetched tags
Hylouis233 Aug 16, 2026
8e6c5aa
fix(cli-agent-bridge): preserve moved tag attribution
Hylouis233 Aug 16, 2026
c6e6ec7
fix(cli-agent-bridge): close current review gaps
Hylouis233 Aug 16, 2026
b17c929
fix(cli-agent-bridge): isolate lock metadata from mirrors
Hylouis233 Aug 16, 2026
dd7d4b4
test(cli-agent-bridge): gate Linux-only fixtures
Hylouis233 Aug 16, 2026
a1ecd0a
fix(cli-agent-bridge): close latest review findings
Hylouis233 Aug 16, 2026
6f158b2
fix(cli-agent-bridge): harden shared lock lifecycle
Hylouis233 Aug 16, 2026
bf51a02
fix(cli-agent-bridge): harden delegated execution
Hylouis233 Aug 16, 2026
95af068
fix(cli-agent-bridge): close latest runtime review gaps
Hylouis233 Aug 16, 2026
68bbb14
test(cli-agent-bridge): isolate commit-base attribution fixture
Hylouis233 Aug 16, 2026
2bbce49
fix(cli-agent-bridge): close latest safety gaps
Hylouis233 Aug 17, 2026
7ac1c50
fix(cli-agent-bridge): harden delegation state handling
Hylouis233 Aug 17, 2026
50664e4
fix(cli-agent-bridge): harden configuration and trace handling
Hylouis233 Aug 17, 2026
5db74bf
fix(cli-agent-bridge): fail closed without reliable containment
Hylouis233 Aug 17, 2026
6be15eb
fix(cli-agent-bridge): harden interrupted setup and lock recovery
Hylouis233 Aug 17, 2026
05bfcff
fix(cli-agent-bridge): reconcile uncertain cleanup outcomes
Hylouis233 Aug 17, 2026
51437d9
fix(cli-agent-bridge): preserve config cleanup failures
Hylouis233 Aug 17, 2026
b2f7811
fix review safety and cancellation gaps
Hylouis233 Aug 17, 2026
8f87ae4
fix(cli-agent-bridge): harden Git snapshot handling
Hylouis233 Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions plugins/Hylouis233/cli-agent-bridge/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 Hylouis233

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
14 changes: 14 additions & 0 deletions plugins/Hylouis233/cli-agent-bridge/NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
cli-agent-bridge is an original implementation informed by the following
open-source projects. Their licenses are retained where applicable.

- claude-subagent-mcp (https://github.com/ltxzs/claude-subagent-mcp)
MIT License. Copyright (c) ltxzs contributors.
Its headless spawn, timeout, capture-cap, and git-snapshot patterns
informed server.mjs.

- subagent-mcp (https://github.com/Heretyc/subagent-mcp)
Apache License 2.0. Copyright 2026 Lexi Blackburn.
Its delegated-CLI orchestration concepts informed the Skill guidance.

- wshobson/agents (https://github.com/wshobson/agents)
Reference for multi-harness agent plugin packaging patterns.
121 changes: 121 additions & 0 deletions plugins/Hylouis233/cli-agent-bridge/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# CLI Agent Bridge

## The problem

MiniMax Code users who also run Claude Code, Codex, Kimi Code, ZCode, or DSH want to keep
MiniMax Code as the single orchestrator while handing well-scoped implementation work to those
CLIs. Without a bridge, delegation means copying prompts between terminals and pasting results
back, with no record of what the worker changed.

## What this Plugin does

This Plugin ships one dependency-free stdio MCP server and one Skill. MiniMax Code calls the
three MCP tools to drive headless sessions of the other coding CLIs inside the same git
repository:

- list_backends: report which coding CLIs are installed and available on this machine.
- workspace_status: git status, diff stat, and changed files before delegating work.
- delegate_task: run a self-contained task with a chosen backend CLI and return its exit
code, output tail, stderr tail, and the before/after git snapshots (staged, unstaged,
untracked, and committed deltas) the worker produced. Runs against the same workspace are
serialized; dirty trees are refused unless allowDirty=true; cancellation kills the worker.

The Skill teaches MiniMax Code when and how to delegate, and to review the returned diff before
reporting completion.

## Try it

```text
Use the cli-agent-bridge skill, then delegate the login-form refactor in this repository to codex.
```

Expected result: MiniMax Code checks workspace_status, confirms the tree is clean, runs
delegate_task with backend=codex and a self-contained task, then reviews the returned git status,
diff stat, changed files, and output tail before continuing.

```text
Use cli-agent-bridge to have claude and kimi implement the same small feature independently,
then compare the two diffs. Create two independent worktrees first.
```

Expected result: the orchestrator creates two git worktrees (`git worktree add ../ws-claude`,
`git worktree add ../ws-kimi`), delegates the same task to backend=claude in the first and
backend=kimi in the second, then compares the two diffs reported to the user. Independent
comparison runs need separate worktrees: the first run leaves its checkout dirty, so a
same-workspace second run would be rejected by the allowDirty=false guard (same-checkout runs
are serialized into a queue, which suits follow-up work, not parallel comparisons).

## Requirements

- Node.js 20 or newer to run the MCP server (the server has no npm dependencies).
- git available on PATH; the target workspace must be a git repository.
- Supported operating systems: Windows, macOS, and Linux. The server is plain Node.js; on Windows,
shim-based CLIs additionally go through the bundled PowerShell 5.1 runner. End-to-end verified on
Windows (Claude Code 2.1.226, Kimi Code 0.30.0) and validated on Linux in a Node 22 container;
macOS uses the same POSIX path and is not yet machine-verified.
- Each backend CLI must be installed, on PATH, and signed in with your own account before use:
Comment thread
Hylouis233 marked this conversation as resolved.

| Backend | CLI | Status | Headless form used |
|---|---|---|---|
| claude | Claude Code | verified end-to-end (2.1.226) | claude -p <task> --output-format text --permission-mode acceptEdits |
| codex | OpenAI Codex CLI | documented non-interactive form | codex exec -- <task> |
| kimi | Kimi Code | headless invocation verified (0.30.0) | kimi -p <task> |

The claude template passes `--permission-mode acceptEdits` so the headless worker can edit files
in the workspace without an interactive approval prompt; other permission levels can be selected
by editing backends.json. The kimi prompt mode (`-p`) accepts no permission flags on current
versions, so the worker runs with kimi's own non-interactive defaults.

Experimental backends ship with a documented template and a note in list_backends:

| Backend | CLI | Status | Headless form used |
|---|---|---|---|
| zcode | ZCode | experimental | zcode -p <task> (desktop builds have no verified headless mode) |
| dsh | DeepSeek Harness | experimental | dsh --profile headless <task> (requires a headless profile) |

ZCode desktop builds have no verified headless CLI; point the command field at your own CLI if
your ZCode distribution provides one. The dsh template uses its documented headless profile
(dsh --profile headless), which must exist under DSH_HOME/profiles. Edit backends.json (or set
the CLI_AGENT_BRIDGE_BACKENDS environment variable to a custom file) to adjust command, args, or
binary paths.

On Windows, npm-style .ps1/.cmd shims cannot be launched directly, so the server retries them
through the bundled ps1-runner.ps1 using the built-in Windows PowerShell 5.1. Arguments pass
through verbatim with no cmd.exe re-interpretation. If a custom wrapper shim re-binds parameters
(for example a proxy autostart shim) and mangles dashed flags, set the backend command to the
underlying real executable in backends.json.

## Data and network

- This Plugin makes no network calls of its own and stores no credentials, tokens, or logs.
- delegate_task passes the task text to the backend CLI you choose, which runs with your own
local authentication and may contact that vendor or service for the requested work.
- The task text and workspace files are processed by the chosen backend provider. Never include
credentials, private endpoints, or personal data in a task.
- The server captures only the command output and the resulting git diff; nothing is transmitted
anywhere by the server itself.
- Workers run with the permission level baked into their template (claude: acceptEdits, which
auto-approves workspace file edits but still gates other tool classes) or with that CLI's own
non-interactive defaults. Review the returned diff before accepting the work.

## Customizing backends

backends.json maps each backend to a command template. The placeholders <task> and <session>
are substituted at run time. To use a differently named binary (for example a zcode wrapper),
change the command field. resumeSessionId is honored only for backends whose resumeArgs is set.

## Limitations

- MiniMax Code Agent Plugins 1.0 does not expose hooks, so context metering and automatic
orchestration switches from the upstream subagent-mcp design are out of scope here; the Skill
plays that role instead.
- The bridge delegates tasks; it does not merge code, commit, or push. The user reviews every
diff.
- zcode and dsh backends are experimental: ZCode desktop builds have no verified headless CLI,
and dsh needs a headless profile present under DSH_HOME/profiles.
- Custom wrapper shims that re-bind dashed flags can misreport a backend as unavailable; point
the backend command at the real executable to bypass the wrapper.

## License

MIT. See LICENSE. Upstream credits: see NOTICE.
10 changes: 10 additions & 0 deletions plugins/Hylouis233/cli-agent-bridge/backends.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$comment": "Backend command templates for cli-agent-bridge. <task> and <session> are placeholders. Edit command or buildArgs to point at another binary or add flags. Never store credentials here; each CLI uses your own local authentication.",
"backends": {
"claude": { "label": "Claude Code", "command": "claude", "buildArgs": ["-p", "<task>", "--output-format", "text", "--permission-mode", "acceptEdits"], "resumeArgs": ["-p", "<task>", "--output-format", "text", "--permission-mode", "acceptEdits", "--resume", "<session>"], "experimental": false },
"codex": { "label": "OpenAI Codex CLI", "command": "codex", "buildArgs": ["exec", "--", "<task>"], "resumeArgs": ["exec", "resume", "<session>", "--", "<task>"], "experimental": false },
"kimi": { "label": "Kimi Code", "command": "kimi", "buildArgs": ["-p", "<task>"], "resumeArgs": ["-S", "<session>", "-p", "<task>"], "experimental": false },
"zcode": { "label": "ZCode", "command": "zcode", "buildArgs": ["-p", "<task>"], "resumeArgs": null, "experimental": true, "notes": "Desktop ZCode builds have no verified headless mode; set command to your CLI if your distribution provides one." },
"dsh": { "label": "DeepSeek Harness (dsh)", "command": "dsh", "buildArgs": ["--profile", "headless", "<task>"], "resumeArgs": null, "experimental": true, "notes": "Uses the documented headless profile; requires a headless profile under DSH_HOME/profiles." }
}
}
10 changes: 10 additions & 0 deletions plugins/Hylouis233/cli-agent-bridge/mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
"mcpServers": {
"cli-agent-bridge": {
"type": "stdio",
"command": "node",
"args": ["./server.mjs"]
}
}
}
9 changes: 9 additions & 0 deletions plugins/Hylouis233/cli-agent-bridge/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "cli-agent-bridge",
"version": "0.1.0",
"description": "Delegate coding tasks from MiniMax Code to locally installed coding CLIs (Claude Code, Codex, Kimi Code, ZCode, DSH) through a dependency-free stdio MCP server with git-diff review.",
"author": { "name": "Hylouis233", "url": "https://github.com/Hylouis233" },
"license": "MIT",
"keywords": ["minimax-code", "plugin", "mcp", "multi-agent", "delegation", "orchestration"]
}
8 changes: 8 additions & 0 deletions plugins/Hylouis233/cli-agent-bridge/ps1-runner.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# No param block: with -File, every token after the script path lands in
# $args as a literal string, so dashes, quotes, parentheses, and percent
# signs survive verbatim.
$Command = $args[0]
$rest = $args | Select-Object -Skip 1
& $Command @rest
exit $LASTEXITCODE
Comment thread
Hylouis233 marked this conversation as resolved.
Outdated

Loading