Skip to content

Commit cae397d

Browse files
xuiocodex
andcommitted
Prepare v0.2.0 release
Add local install/update and wiki publishing scripts, public release docs, known limitations, a demo asset, and tighter Claude-facing tool guidance. Bump plugin/package metadata to 0.2.0 and keep the installed-plugin real session test version-aware. Co-Authored-By: OpenAI Codex <noreply@openai.com>
1 parent 3f20c74 commit cae397d

21 files changed

Lines changed: 469 additions & 22 deletions

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codex-subagents",
3-
"version": "0.1.1",
3+
"version": "0.2.0",
44
"description": "Launch OpenAI Codex agents, Spark agents, and parallel Codex subagents from Claude Code through a daemonless MCP server with read-only defaults and explicit full-access mode.",
55
"author": {
66
"name": "xuio"

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
# Changelog
22

3-
## Unreleased
3+
## 0.2.0
44

55
- Refreshed the README into a shorter onboarding page.
66
- Added usage, architecture, development, and troubleshooting docs.
77
- Added GitHub issue templates and a pull request template.
8+
- Added a local install/update script and wiki publishing script.
9+
- Documented known limitations and release notes.
10+
- Tightened Claude tool-selection guidance for sessions, steering, aggregation, and async jobs.
811

912
## 0.1.1
1013

README.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ Run OpenAI Codex agents from Claude Code through a daemonless MCP plugin.
1010
parallel investigations, Spark checks, persistent multi-turn sessions, and explicit
1111
full-access Codex work when the user asks for it.
1212

13+
![Terminal demo of Claude launching parallel Codex reviewers](docs/assets/demo.svg)
14+
1315
## Why Use It?
1416

1517
- **Native Claude Code workflow:** Claude gets MCP tools and a plugin skill, so it can decide when to ask Codex without shell glue.
@@ -31,8 +33,7 @@ Requirements:
3133
```sh
3234
git clone https://github.com/xuio/claude-code-codex-subagents.git
3335
cd claude-code-codex-subagents
34-
npm install
35-
npm run build
36+
npm run install:local
3637
claude --plugin-dir .
3738
```
3839

@@ -115,6 +116,8 @@ use DNS/network, install packages, or behave like a normal unrestricted Codex ru
115116
- [Architecture](docs/ARCHITECTURE.md) - process model, app-server sessions, durability, logging.
116117
- [Development](docs/DEVELOPMENT.md) - setup, local Claude linking, test tiers, release checklist.
117118
- [Troubleshooting](docs/TROUBLESHOOTING.md) - diagnostics, logs, common failure modes.
119+
- [Known limitations](docs/KNOWN_LIMITATIONS.md) - sharp edges and operational constraints.
120+
- [Release notes](docs/RELEASE.md) - current release highlights and validation.
118121
- [Security policy](SECURITY.md) - default sandboxing, logs, reporting.
119122
- [Contributing](CONTRIBUTING.md) - contribution expectations and local checks.
120123

@@ -142,6 +145,13 @@ npm run test:ci
142145
npm run validate:plugin
143146
```
144147

148+
For local install/update:
149+
150+
```sh
151+
npm run install:local
152+
npm run update:local
153+
```
154+
145155
`test:ci` is portable and uses the fake Codex binary. It does not require live
146156
Claude or Codex credentials.
147157

@@ -159,6 +169,8 @@ See [Development](docs/DEVELOPMENT.md) for the full test matrix.
159169

160170
## Project Status
161171

172+
Current release: `v0.2.0`.
173+
162174
This project is early, but it is already tested across:
163175

164176
- stdio MCP protocol flows

dist/index.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25546,8 +25546,8 @@ var usageGuide = [
2554625546
"- Prefer ask_codex_parallel when the work can be split into independent concurrent tasks, for example separate reviewers for API flow, tests, security, performance, UI, docs, or migration risk.",
2554725547
"- Prefer start_codex_session and continue_codex_session when the user wants a Codex agent to keep context across multiple prompts. Persistent sessions use Codex app-server by default and fall back to codex exec only when app-server is unavailable.",
2554825548
"- Prefer start_codex_session_async when Claude needs a session id immediately while Codex keeps working in the background.",
25549-
"- Use send_codex_session_prompt to add prompts to an active or idle Codex session queue without losing context.",
25550-
"- Use steer_codex_session to send real live steering into a running app-server turn; use interrupt_current only when the active turn should be cancelled and redirected. If a session had to fall back to codex exec, steering degrades to the next high-priority queued turn.",
25549+
"- Use send_codex_session_prompt for ordinary follow-ups on an active or idle Codex session. This preserves context and queues behind the active turn when needed.",
25550+
"- Use steer_codex_session only when the user wants to redirect the active work now. It sends real live steering into a running app-server turn; use interrupt_current only when the active turn should be cancelled and redirected. If a session had to fall back to codex exec, steering degrades to the next high-priority queued turn.",
2555125551
"- Use get_codex_session or wait_codex_session to inspect or wait for long-running Codex sessions. Session snapshots include appServer.supports and appServerFallbackReason for protocol diagnostics.",
2555225552
"- Use recover_codex_session when Claude has a persisted session_id from before a Claude/MCP restart and wants to reattach to that Codex thread before sending a follow-up.",
2555325553
"- Use codex_export_debug_bundle after repeated failures; it writes recent diagnostics, selected session/job state, status, and optional log tail into one local JSON bundle.",
@@ -25558,6 +25558,7 @@ var usageGuide = [
2555825558
"- Use codex_doctor for installation, binary, auth, and default-setting diagnostics.",
2555925559
"- Use codex_status only for diagnostics or when you need to confirm the Codex binary/version.",
2556025560
"- Use codex_usage_guide if you are unsure how to structure a Codex delegation.",
25561+
"- Use codex_choose_tool before delegating when the request is ambiguous between one agent, parallel agents, aggregation, a persistent session, an async job, or live steering.",
2556125562
"",
2556225563
"Default operating rules:",
2556325564
"- Keep sandbox read-only unless the user explicitly asks for a different sandbox.",
@@ -25572,6 +25573,8 @@ var usageGuide = [
2557225573
"- Do not set service_tier by default. Let Codex use its normal account/default service tier unless the user explicitly asks for a service tier.",
2557325574
"- Pass project_dir whenever Claude knows the active project directory so Codex works in the same tree as Claude Code.",
2557425575
"- Persistent sessions are durable across MCP restarts when Codex has produced a thread id. After restart, list_sessions can show recovered sessions and recover_codex_session can validate the thread.",
25576+
"- Async one-shot jobs from start_agent_run/start_agents_run are not durable across MCP restarts. Use persistent session tools for recoverable long-running work.",
25577+
"- Raw debug logs are intentionally verbose and may contain MCP traffic and prompt text. Treat logs and debug bundles as sensitive local data.",
2557525578
"- Do not use Bash, Read, or filesystem inspection to locate Codex. The MCP server resolves Codex automatically, preferring the Codex desktop app binary when installed.",
2557625579
"- Set isolated_codex_home true when a run should ignore the user's Codex MCP server config and use only this request's temporary Codex configuration.",
2557725580
'- Use mcp_config_policy "explicit" with codex_mcp_servers for intentional MCP sharing. Use "inherit_claude_project" only when the project has a Claude MCP config that should be shared with Codex.',
@@ -26090,8 +26093,8 @@ server.registerTool(
2609026093
"Use start_codex_session for a new multi-turn Codex worker and continue_codex_session for follow-ups.",
2609126094
"Use recover_codex_session after an MCP restart when Claude has a previous persisted session id.",
2609226095
"Use start_codex_session_async when Claude needs the session id immediately and will poll or wait later.",
26093-
"Use send_codex_session_prompt to queue additional prompts onto an active or idle Codex session.",
26094-
"Use steer_codex_session to send live app-server steering into a running session; interrupt_current cancels the active turn before running the steering turn.",
26096+
"Use send_codex_session_prompt for ordinary follow-up prompts on an active or idle Codex session.",
26097+
"Use steer_codex_session only for active redirection. Live steering requires app-server support; exec fallback queues a high-priority turn.",
2609526098
"Use start_agent_run/start_agents_run for slow jobs that should not hold a blocking MCP request open.",
2609626099
"Use run_agents_aggregate only when Claude needs a deterministic consensus object.",
2609726100
"Pass project_dir whenever Claude knows the active project directory.",

docs/DEVELOPMENT.md

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,16 @@ npm run build
1010
The Claude plugin manifest points at `dist/index.js`, so rebuild after changing
1111
TypeScript source.
1212

13+
For the normal local install/update path:
14+
15+
```sh
16+
npm run install:local
17+
npm run update:local
18+
```
19+
20+
`install:local` builds, validates plugin wiring, and symlinks Claude's local
21+
plugin cache to this working tree. `update:local` first runs `git pull --ff-only`.
22+
1323
## Local Claude Plugin Link
1424

1525
For active development, link Claude's installed plugin cache back to this working
@@ -88,16 +98,34 @@ scenario in every round.
8898
3. Run `npm run test:ci`.
8999
4. Run relevant real-runtime or live tests for the touched area.
90100
5. Run `npm run check:dist`.
91-
6. Check for local artifacts and secrets before committing.
92-
7. Push and verify GitHub Actions on Node 20 and Node 22.
101+
6. For release candidates, run `npm run test:real-soak`.
102+
7. Check for local artifacts and secrets before committing.
103+
8. Push and verify GitHub Actions on Node 20 and Node 22.
104+
9. Create the GitHub release from `docs/RELEASE.md`.
105+
106+
## Wiki Publishing
107+
108+
Tracked wiki source lives in `docs/wiki/`.
109+
110+
```sh
111+
npm run wiki:publish
112+
```
113+
114+
If GitHub returns `Repository not found` for the `.wiki.git` remote, create the
115+
first wiki page once in the GitHub web UI, then rerun `npm run wiki:publish`.
116+
GitHub does not expose an initialized wiki git remote until that first page
117+
exists.
93118

94119
## Useful Scripts
95120

96121
| Script | Purpose |
97122
| --- | --- |
98123
| `npm run build` | Type-check and bundle `dist/index.js` |
99124
| `npm run check:dist` | Rebuild and verify committed dist has no diff |
125+
| `npm run install:local` | Build, validate, and symlink the local Claude plugin install |
126+
| `npm run update:local` | Pull latest main, then run the local install flow |
100127
| `npm run dev:link` | Symlink Claude's plugin cache to this repo |
101128
| `npm run dev:watch` | Rebuild dist on TypeScript changes |
129+
| `npm run wiki:publish` | Publish `docs/wiki/*.md` to the GitHub wiki repo |
102130
| `npm run diagnostics` | Write a sanitized local diagnostics bundle |
103131
| `npm run validate:plugin` | Run Claude's plugin manifest validator |

docs/KNOWN_LIMITATIONS.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# Known Limitations
2+
3+
This project is designed to be conservative by default, but several behaviors are
4+
intentionally sharp because the goal is deep Claude/Codex debugging and local
5+
power-user workflows.
6+
7+
## Raw Debug Logging Is Sensitive
8+
9+
The default debug profile logs raw MCP traffic, tool arguments/results, prompt
10+
text, progress events, and Codex stdin/stdout/stderr traffic. Treat these logs and
11+
debug bundles as sensitive project data.
12+
13+
Use quieter logging for normal work:
14+
15+
```sh
16+
export CODEX_SUBAGENTS_LOG_PROFILE=production
17+
```
18+
19+
Disable logging entirely:
20+
21+
```sh
22+
export CODEX_SUBAGENTS_LOG_LEVEL=silent
23+
```
24+
25+
## Async Jobs Are Not Durable
26+
27+
`start_agent_run` and `start_agents_run` are process-local async jobs. They keep
28+
Claude responsive during long one-shot work, but they do not survive MCP process
29+
restart.
30+
31+
Use `start_codex_session_async` for long-running work that should be recoverable
32+
after Claude Code or the MCP server restarts.
33+
34+
## Real Steering Requires App-Server
35+
36+
`steer_codex_session` delivers live steering only when the session is running
37+
through Codex app-server and reports `supportsRealSteering: true`.
38+
39+
If app-server is unavailable and the session falls back to `codex exec`, steering
40+
degrades to a high-priority queued follow-up turn. It cannot alter an already
41+
running `codex exec` process in place.
42+
43+
## Full-Access Mode Is Deliberately Dangerous
44+
45+
The default sandbox is read-only. Full local access requires this per-call flag:
46+
47+
```json
48+
{
49+
"dangerously_bypass_approvals_and_sandbox": true
50+
}
51+
```
52+
53+
That maps to Codex's unrestricted local mode. It can write files, mutate git
54+
state, use DNS/network, and run package installs. Use it only when the user
55+
explicitly asks for that capability.
56+
57+
## Nested Subagents Can Increase Cost And Latency
58+
59+
Nested Codex subagents are supported, including Spark. Keep nested work scoped,
60+
set explicit `subagent_tasks`, and keep `subagent_runtime.max_depth` at `1` unless
61+
recursive delegation is deliberately needed.
62+
63+
## Claude Tool Choice Still Benefits From Clear Prompts
64+
65+
The plugin has a skill, tool descriptions, and `codex_choose_tool`, but Claude can
66+
still make better choices when the user names the intended shape:
67+
68+
- "ask one Codex agent"
69+
- "run three Codex agents in parallel"
70+
- "start a long-running Codex session"
71+
- "steer the running Codex session"
72+

docs/RELEASE.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Release Notes
2+
3+
## v0.2.0
4+
5+
`v0.2.0` is the first public-ready release candidate for
6+
`claude-code-codex-subagents`.
7+
8+
Highlights:
9+
10+
- Daemonless Claude Code MCP plugin for launching OpenAI Codex agents.
11+
- Read-only Codex delegation by default.
12+
- Codex desktop app binary preferred automatically when installed.
13+
- Front-door tools for one agent, parallel agents, aggregation, persistent
14+
sessions, async sessions, live steering, recovery, and diagnostics.
15+
- Codex Spark preset support.
16+
- Nested Codex subagent definitions and task requests.
17+
- App-server persistent sessions with recoverable metadata and live steering.
18+
- Backpressure, progress notifications, response compaction, output artifacts,
19+
diagnostics bundles, and verbose logging.
20+
- Local install/update script for development and user installs.
21+
- GitHub-friendly README, docs, issue templates, PR template, and wiki source.
22+
23+
Recommended install/update:
24+
25+
```sh
26+
git clone https://github.com/xuio/claude-code-codex-subagents.git
27+
cd claude-code-codex-subagents
28+
npm run install:local
29+
```
30+
31+
Recommended verification:
32+
33+
```sh
34+
npm run test:ci
35+
npm run check:dist
36+
npm run test:codex-runtime
37+
npm run test:real-matrix
38+
```
39+
40+
Live Claude/Codex validation remains opt-in because it spends tokens:
41+
42+
```sh
43+
npm run test:claude-orchestration
44+
npm run test:claude-real-codex
45+
npm run test:claude-real-session
46+
```
47+

docs/TROUBLESHOOTING.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ claude --plugin-dir .
3939
For installed-plugin development, run:
4040

4141
```sh
42-
npm run dev:link
42+
npm run install:local
4343
npm run dev:watch
4444
```
4545

@@ -149,3 +149,21 @@ npm run test:claude-real-session
149149
```
150150

151151
These spend live Claude and/or Codex tokens.
152+
153+
## Release Or Update Looks Stale
154+
155+
Run the local update flow:
156+
157+
```sh
158+
npm run update:local
159+
```
160+
161+
Then restart Claude Code. If Claude still loads an old version, run:
162+
163+
```sh
164+
npm run dev:link
165+
npm run validate:plugin
166+
```
167+
168+
`dev:link` prints the marketplace and installed cache symlinks that Claude Code
169+
and Claude Desktop share.

docs/USAGE.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,24 @@ Diagnostics tools:
5757
- `codex_doctor`
5858
- `codex_export_debug_bundle`
5959

60+
## Choosing The Right Tool
61+
62+
Use this decision path when writing prompts or debugging Claude tool choice:
63+
64+
| User intent | Best tool |
65+
| --- | --- |
66+
| One normal read-only second opinion | `ask_codex` |
67+
| Two or more independent workstreams | `ask_codex_parallel` |
68+
| Several agents plus a merged summary | `run_agents_aggregate` |
69+
| Same Codex agent should keep context | `start_codex_session`, then `continue_codex_session` |
70+
| Long first turn, user wants to keep working | `start_codex_session_async` |
71+
| Add a normal follow-up to a running session | `send_codex_session_prompt` |
72+
| Redirect the active app-server turn | `steer_codex_session` |
73+
| Recover a session after Claude/MCP restart | `recover_codex_session` |
74+
| Slow one-shot job that need not be durable | `start_agent_run` |
75+
76+
When in doubt, ask Claude to call `codex_choose_tool` before delegating.
77+
6078
## Example: One Agent
6179

6280
Ask Claude:
@@ -188,6 +206,16 @@ This maps to Codex's `--dangerously-bypass-approvals-and-sandbox` flag and allow
188206
DNS/network access, file writes, package installs, and git writes. Keep it scoped
189207
to the specific tool call that needs it.
190208

209+
## Sharp Edges
210+
211+
See [Known limitations](KNOWN_LIMITATIONS.md) for the current operational sharp
212+
edges. The most important ones:
213+
214+
- raw debug logs are sensitive
215+
- async one-shot jobs are not durable across MCP restarts
216+
- real steering requires app-server support
217+
- full-access mode is intentionally dangerous
218+
191219
## Structured Output
192220

193221
Use `output_contract` when Claude needs machine-readable results:

docs/assets/demo.svg

Lines changed: 22 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)