qoder-as-subagent
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@qoder-as-subagent Review the auth module in project-b for security issues"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
qoder-as-subagent
An MCP server that exposes the local Qoder CN CLI (qoderclicn) as a
subagent, for Codex to delegate review and implementation work to.
Built by copying cc-as-subagent and adapting it — the
two CLIs share most of their command surface, so the architecture carried over.
What did not carry over is isolation, and this server is weaker than the
Claude Code one. Read the next two sections before using it.
Read this first
This server is a hole in your caller's policy, by construction. Codex's sandbox and approval settings do not govern MCP servers, and they do not govern anything an MCP server goes on to spawn.
This CLI is missing three of the controls the other one has. Compared with
cc-as-subagent:
Claude Code
Qoder CN
settings isolation (
--setting-sources=user)✓ measured working
✓ present, unverified here
MCP exclusion (
--strict-mcp-config)✓
✓
tool restriction (
--tools/--disallowed-tools)✓
✓
drop
AGENTS.md/ skills / plugins / hooks (--safe-mode)✓
✗ no equivalent
turn ceiling (
--max-turns)✓
✗ does not exist
spend ceiling (
--max-budget-usd)✓
✗ does not exist
So: a workspace's
AGENTS.md, skills, plugins and hooks load, and a run has no built-in ceiling on turns or cost. The server's timeout is the only bound. See SECURITY.md.There is no OS-level sandbox underneath this on Windows.
Set
default_tools_approval_mode = "prompt"in your Codex config (see examples/codex-config.toml). It is the only human checkpoint on this path, and it is off by default.
Related MCP server: Claude Code Bridge
What it does
Submits a task to qoderclicn in a workspace and returns a job handle
immediately. The run continues in the background; you poll for the result.
Submitting never blocks, because a real review takes minutes and Codex's default
tool timeout is 60 seconds.
Two permission tiers, chosen by the server — the caller names a tier, never a CLI flag:
Tier | Tools | Permission mode | Can |
|
|
| read and search; nothing that needs approval |
|
|
| work inside the workspace, with a classifier reviewing anything risky |
auto is what makes execute useful, and it is a classifier-backed mode, not
a blanket approval. Nothing prompts; work inside the workspace proceeds; and an
action that goes out of scope is handed to a reviewing model, which either
allows it or blocks it with a stated reason. A write outside the workspace, for
instance, comes back blocked as "Auto mode: action blocked by classifier —
restricting file modifications to the workspace or explicitly trusted paths".
The layering is what makes this safe enough to default to: --tools decides
which tools exist, --settings deny rules are deterministic and are evaluated
first, and the classifier only sees what survives both. Measured — a denied
command reports tool_denial_kind: "permission-rule", not "classifier".
consult stays on dont_ask and therefore fails closed: it is for reading, and
it does not get the classifier.
Requirements
Node 18+ (developed on 24)
Qoder CN CLI installed and signed in. Verified against
qoderclicn1.1.64. Resolution order isQODER_BIN→PATH→~/.qoder-cn/bin/qoderclicn/. The install path matters:qodercnonPATHis the IDE's launcher (qoder-cn.exe, which answers--diffand--install-extension), not this program, and resolving by name alone would run the wrong thing.
Install
npm install
npm run build
node scripts/selfcheck.mjs # checks the assumptions against your CLI
npm run probe # optional: MCP handshake smoke testConfigure Codex
Add the server to ~/.codex/config.toml — a working example is in
examples/codex-config.toml.
[mcp_servers.qoder-as-subagent]
command = "node"
args = ["<abs path>/qoder-as-subagent/dist/index.js"]
default_tools_approval_mode = "prompt"
[mcp_servers.qoder-as-subagent.env]
QODER_AS_SUBAGENT_WORKSPACE_ROOTS = "C:\\code\\project-a;C:\\code\\project-b"Tools
Tool | Arguments | Returns |
|
|
|
|
|
|
|
| a new |
|
|
|
qoder_reply takes a job id, never a session id. The session id stays
server-side, so a caller cannot aim --resume at an arbitrary transcript.
Poll with the cursor from the previous response to get only new events.
Configuration
Variable | Default | Purpose |
| the server's own cwd | Path-delimiter-separated allowlist. A workspace outside every root is refused. |
|
| Where job state lives. Deliberately outside any workspace, and separate from |
| (none) | Comma-separated variable names to pass through. Everything else is dropped. |
| resolved as above | Pin an exact CLI build. |
Verified behaviour
npm test — 56 unit tests. node scripts/e2e.mjs — 13 checks against the real
CLI: consult reads a workspace while being granted no write tool, execute
writes, a resumed turn still carries the isolation stack, and the granted tool
list is exactly the tier's six.
node scripts/selfcheck.mjs re-runs the security assumptions and writes a
verdict to the state directory. Re-run it after a CLI upgrade.
One check reports skipped, and that is the honest result: I could not make
the settings-injection probe fire on this CLI, so whether --setting-sources
actually excludes a workspace's settings is unverified here. The flag is kept
because it is the same flag with the same vocabulary as the CLI where the
mechanism was measured, and it costs nothing — but it is defence, not a verified
fix. Details in SECURITY.md.
Known limitations
See SECURITY.md for the reasoning.
No
--safe-modeequivalent. A workspace'sAGENTS.md, skills, plugins and hooks load. Hook activity is visible in a job's event stream.No turn limit and no spend cap. A runaway run is bounded only by the server's 30-minute timeout.
--setting-sourcesis unverified on this CLI.No OS sandbox on Windows.
Command deny rules are not a security boundary — they blunt a confused model, not a hostile one.
Reads inside the workspace are unrestricted.
License
MIT — see LICENSE.
Available Tools
5 toolspingPingARead-onlyIdempotent
Liveness check. Reports the server version and the workspace roots it will accept. Never spawns the Qoder CLI.
Inputs: no named parameters.
qoder_cancelCancel a jobAIdempotent
Stop a running job and the process tree it started.
Inputs: jobId (required).
qoder_replyContinue a sessionA
Start a follow-up turn in an existing session. Takes the jobId of a finished job — the session id stays server-side. Returns a new jobId for the follow-up.
Inputs: jobId (required), prompt (required), model, waitSeconds, +1 more.
qoder_runRun Claude CodeA
Start a new Claude Code session in a workspace. Returns a jobId immediately; the run continues in the background. Use qoder_status to poll for the result. Tier "consult" is read-only; "execute" may edit files in the workspace.
Inputs: tier (required), prompt (required), workspace (required), model, +3 more.
qoder_statusCheck a jobARead-onlyIdempotent
Poll a job for progress and its result. Pass the cursor from the previous call to receive only new events. Returns the final answer once the run completes.
Inputs: jobId (required), cursor, waitSeconds.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool covers a distinct lifecycle action: liveness, start, poll, cancel, and follow-up. The descriptions make the boundaries clear, especially qoder_run (new session) vs qoder_reply (existing session).
The four main tools follow a consistent qoder_<verb/noun> pattern, but ping breaks the prefix convention. Minor deviation, easily predictable overall.
Five tools is well-scoped for a subagent orchestration server. Each tool serves a necessary step in the job lifecycle with no redundancy.
The tool surface covers the full lifecycle: discover workspace via ping, start a job, poll progress/results, continue with follow-up turns, and cancel if needed. No obvious dead ends or missing operations for the stated purpose.
Related MCP Connectors
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
No-data MCP handoff for local Claude Code to Codex harness moves. $49 lifetime.
Project context, backlog tasks, and controlled workflows for coding agents. OAuth sign-in.
Command center for developers coordinating AI coding agents across projects.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Codex to delegate tasks to Claude Code, allowing Claude to investigate, edit, and verify changes in the repository with background job management.3 npmMIT
- AlicenseNot gradedqualityBmaintenanceLets Codex delegate coding and repository work to an installed Claude Code CLI with permission-aware inspect/write access, model and effort selection, resumable and cloud-attached sessions, and durable synchronous or asynchronous jobs.MIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude Code to delegate bounded, read-only analysis and isolated patch proposals to the locally installed Codex CLI over MCP, with sanitized live status, revision-aware polling, and reviewable results.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables delegating bounded tasks from Codex to Claude Code, including read-only reviews, isolated branch edits, long-running background work, and approval handling.420 npmMIT