delegate-agent-cli 0.12.0__tar.gz → 0.13.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/CHANGELOG.md +30 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/PKG-INFO +31 -6
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/README.md +30 -5
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/config.example.json +7 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/docs/agent-setup.md +29 -2
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/docs/cli-reference.md +81 -12
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/docs/configuration.md +57 -2
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/docs/development.md +5 -2
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/docs/publishing-checklist.md +1 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/docs/security-model.md +24 -5
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/docs/troubleshooting.md +38 -6
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/docs/worktrees.md +2 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/pyproject.toml +1 -1
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/__init__.py +1 -1
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/argv_builders.py +37 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/argv_utils.py +1 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/bundled_models.py +6 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/cli.py +5 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/cli_parser.py +64 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/command_help.py +82 -14
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/config.py +121 -16
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/constants.py +6 -4
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/describe_payload.py +120 -10
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/harness_events.py +136 -1
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/model_discovery.py +65 -2
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/reasoning.py +63 -1
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/redaction.py +2 -1
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/request_build.py +215 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/request_models.py +6 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/run_metadata.py +12 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/run_registry.py +3 -1
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/runner.py +4 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/safe_workspace.py +1 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/snapshot_view.py +1 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/runtime.py +17 -1
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_execution.py +2 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/PKG-INFO +31 -6
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_capability_commands.py +54 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_command_help.py +12 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_delegate_help_cli.py +15 -3
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_delegate_parser.py +113 -1
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_delegate_validation.py +1 -1
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_end_to_end_tracking.py +13 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_engine_argv.py +359 -1
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_execution_argv_and_prompt.py +31 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_execution_dry_run.py +23 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_execution_worktree_preflight.py +2 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_harness_events.py +178 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_model_discovery.py +106 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_model_selection_wave1a.py +85 -2
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_model_selection_wave1b.py +2 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_reasoning_capabilities.py +61 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_run_registry.py +25 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_runner_capture.py +50 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_slash_passthrough.py +1 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_utility_modules.py +7 -2
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_workflow_commands.py +138 -2
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/CONTRIBUTING.md +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/LICENSE +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/MANIFEST.in +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/SECURITY.md +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/bin/delegate-profile-shim +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/bin/delegate.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/docs/assets/delegate-agent-header.png +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/docs/live-runtime.md +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/examples/task.claude.json +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/examples/task.codex.json +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/examples/task.cursor.json +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/examples/task.droid.json +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/examples/task.grok.json +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/examples/task.judge.json +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/setup.cfg +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/archived_logs.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/capability_commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/command_errors.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/config_commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/errors.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/git_utils.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/inspection_commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/isolation.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/json_types.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/log_output.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/private_io.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/profile_commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/profile_guard.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/profiles.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/prompt_instructions.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/prompt_transport.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/rendering.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/retention.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/run_output_commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/run_status.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/wait_cancel_commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/__init__.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/registry.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/schema.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/script.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_gc.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_mgmt.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_records.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_remove.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_summary.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/wsl.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/SOURCES.txt +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/dependency_links.txt +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/entry_points.txt +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/requires.txt +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/top_level.txt +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_config_commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_delegate_isolation.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_execution_worktree_failure_cleanup.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_execution_worktree_run.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_inspection_commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_kimi_commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_packaging.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_profiles.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_retention.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_safe_workspace_isolation.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_snapshot_redaction.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_snapshot_rendering.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_snapshot_run_output.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_snapshot_view.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_wait_cancel_commands.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_wave4_launch_features.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_worktree_list_show.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_worktree_prune_gc.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_worktree_remove.py +0 -0
- {delegate_agent_cli-0.12.0 → delegate_agent_cli-0.13.1}/tests/test_wsl_guardrails.py +0 -0
|
@@ -5,6 +5,33 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.13.1] - 2026-07-09
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Codex-only `--fast` / `--no-fast` per-run service-tier overrides (and a
|
|
13
|
+
`fast` boolean in run-input JSON). `--fast` emits `service_tier="fast"` plus
|
|
14
|
+
`features.fast_mode=true` so the tier cannot be silently dropped by ambient
|
|
15
|
+
Codex config; `--no-fast` emits the explicit `service_tier="default"`
|
|
16
|
+
standard-routing sentinel; omitting both inherits Codex configuration. The
|
|
17
|
+
explicit choice is recorded as `requestedFast` in run metadata. The flag and
|
|
18
|
+
JSON key fail closed on every other engine, including a bare `"fast": null`.
|
|
19
|
+
|
|
20
|
+
## [0.13.0] - 2026-07-09
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- Added `opencode` as a first-class engine across `safe`, `work`, `call`, and
|
|
25
|
+
workflow runs. OpenCode drives any provider/model in the models.dev catalog
|
|
26
|
+
(75+ providers, plus custom/local providers) through one harness. Safe mode
|
|
27
|
+
and `call --read-only` enforce a deny-all-but-read permission lockdown via
|
|
28
|
+
`OPENCODE_CONFIG_CONTENT` (merges last, beating hostile repo config; verified
|
|
29
|
+
live against v1.17.17 including a git-worktree write-barrier test). Live
|
|
30
|
+
model discovery via `opencode models`, string or `{"model", "variant"}`
|
|
31
|
+
object aliases that can pin a reasoning variant, `--reasoning-effort` mapped
|
|
32
|
+
to OpenCode `--variant`, and per-run `--agent` selection with
|
|
33
|
+
`opencode.defaultAgent` fallback.
|
|
34
|
+
|
|
8
35
|
## [0.12.0] - 2026-07-09
|
|
9
36
|
|
|
10
37
|
Three features in one train: Delegate Workflows (multi-agent orchestration with durable resume), per-run model selection + discovery across all seven engines, and the Devin engine. Model selection was built as the inaugural Delegate Workflows dogfood: three implementation waves plus a twelve-round two-lane adversarial review loop driven through `workflow run --resume`.
|
|
@@ -277,6 +304,9 @@ Usage-audit fix wave: 82 sessions and 1,241 delegate invocations from one week o
|
|
|
277
304
|
|
|
278
305
|
- Releases before 0.1.3 predate this changelog.
|
|
279
306
|
|
|
307
|
+
[0.13.1]: https://github.com/treygoff24/delegate-agent/compare/v0.13.0...v0.13.1
|
|
308
|
+
[0.13.0]: https://github.com/treygoff24/delegate-agent/compare/v0.12.0...v0.13.0
|
|
309
|
+
[0.12.0]: https://github.com/treygoff24/delegate-agent/compare/v0.11.0...v0.12.0
|
|
280
310
|
[0.11.0]: https://github.com/treygoff24/delegate-agent/compare/v0.10.0...v0.11.0
|
|
281
311
|
[0.10.0]: https://github.com/treygoff24/delegate-agent/compare/v0.9.0...v0.10.0
|
|
282
312
|
[0.9.0]: https://github.com/treygoff24/delegate-agent/compare/v0.8.1...v0.9.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: delegate-agent-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.1
|
|
4
4
|
Summary: A tiny CLI for delegating bounded agent tasks to Cursor, Droid, OpenAI Codex, Claude Code, Grok Build, or Kimi Code runtimes.
|
|
5
5
|
Author: Trey Goff
|
|
6
6
|
License-Expression: MIT
|
|
@@ -37,7 +37,7 @@ Dynamic: license-file
|
|
|
37
37
|
|
|
38
38
|
# Delegate Agent
|
|
39
39
|
|
|
40
|
-
Delegate Agent is a small CLI for handing a bounded task to another coding-agent runtime. It normalizes common calls to Cursor Agent, Factory Droid, OpenAI Codex, Claude Code, Grok Build, Devin, and Kimi Code so humans or other agents can launch review, investigation, and implementation jobs without remembering each tool's flags.
|
|
40
|
+
Delegate Agent is a small CLI for handing a bounded task to another coding-agent runtime. It normalizes common calls to Cursor Agent, Factory Droid, OpenAI Codex, Claude Code, Grok Build, Devin, OpenCode, and Kimi Code so humans or other agents can launch review, investigation, and implementation jobs without remembering each tool's flags.
|
|
41
41
|
|
|
42
42
|
Use it when you want a predictable wrapper around prompts like:
|
|
43
43
|
|
|
@@ -47,7 +47,7 @@ Use it when you want a predictable wrapper around prompts like:
|
|
|
47
47
|
|
|
48
48
|
Delegate does **not** commit, push, merge, deploy, publish, or run a background service. It builds the child command, adds safety framing, launches the selected runtime, and records local run metadata for later inspection.
|
|
49
49
|
|
|
50
|
-
Prompt handling is provider-specific: Codex and
|
|
50
|
+
Prompt handling is provider-specific: Codex, Claude, and OpenCode prompts are delivered to the child
|
|
51
51
|
runtime over stdin; Droid, Grok, and Devin prompts are delivered through private
|
|
52
52
|
temporary prompt files; Cursor Agent and Kimi Code currently
|
|
53
53
|
require prompt argv. Delegate redacts Cursor and Kimi prompt argv in dry-run
|
|
@@ -98,11 +98,16 @@ command -v codex # OpenAI Codex CLI, used by delegate codex ...
|
|
|
98
98
|
command -v claude # Claude Code CLI, used by delegate claude ...
|
|
99
99
|
command -v grok # xAI Grok Build CLI, used by delegate grok ...
|
|
100
100
|
command -v devin # Cognition Devin CLI, used by delegate devin ...
|
|
101
|
+
command -v opencode # OpenCode CLI, used by delegate opencode ...
|
|
101
102
|
command -v kimi # Kimi Code CLI, used by delegate kimi ...
|
|
102
103
|
```
|
|
103
104
|
|
|
104
105
|
Runtime authentication is owned by each child CLI. Delegate cannot log in for you. Dry-runs and CI tests do not require the real child binaries.
|
|
105
106
|
|
|
107
|
+
Install OpenCode from [opencode.ai](https://opencode.ai). Its curl installer
|
|
108
|
+
normally writes the binary to `~/.opencode/bin`, which may not be on `PATH`.
|
|
109
|
+
Extend `PATH` or set `opencode.binary` to the absolute binary path.
|
|
110
|
+
|
|
106
111
|
Initialize a starter config and replace placeholder Droid model IDs before real Droid runs:
|
|
107
112
|
|
|
108
113
|
```bash
|
|
@@ -125,6 +130,7 @@ delegate --json describe
|
|
|
125
130
|
delegate --json models
|
|
126
131
|
delegate --json models codex # per-engine advisory catalog
|
|
127
132
|
delegate --json models cursor --live # merge live harness probe when supported
|
|
133
|
+
delegate --json models opencode --live # query every model visible to OpenCode
|
|
128
134
|
delegate --json capabilities
|
|
129
135
|
```
|
|
130
136
|
|
|
@@ -148,6 +154,7 @@ Preview the command without launching a child runtime:
|
|
|
148
154
|
```bash
|
|
149
155
|
delegate --json dry-run codex safe "Review this repository. Do not edit files."
|
|
150
156
|
delegate --json dry-run claude safe "Review this repository. Do not edit files."
|
|
157
|
+
delegate --json dry-run opencode safe "Review this repository. Do not edit files."
|
|
151
158
|
```
|
|
152
159
|
|
|
153
160
|
Run a read-only review in an isolated throwaway workspace:
|
|
@@ -157,6 +164,7 @@ delegate codex safe "Review this repository for correctness risks. Do not edit f
|
|
|
157
164
|
delegate claude safe "Review this repository for correctness risks. Do not edit files."
|
|
158
165
|
delegate grok safe "Review this repository for correctness risks. Do not edit files."
|
|
159
166
|
delegate devin safe "Review this repository for correctness risks. Do not edit files."
|
|
167
|
+
delegate opencode safe "Review this repository for correctness risks. Do not edit files."
|
|
160
168
|
delegate cursor safe "Review the current diff for regressions. Do not edit files."
|
|
161
169
|
delegate kimi safe "Review this repository for regressions. Do not edit files."
|
|
162
170
|
```
|
|
@@ -174,6 +182,7 @@ Run an edit-capable task in a workspace you trust:
|
|
|
174
182
|
delegate cursor work "Fix the parser bug. Run python3 -m unittest tests.test_delegate_parser. Report changed files."
|
|
175
183
|
delegate claude work "Implement the scoped change and run the named check. Report changed files."
|
|
176
184
|
delegate devin work "Implement the scoped change and run the named check. Report changed files."
|
|
185
|
+
delegate opencode work "Implement the scoped change and run the named check. Report changed files."
|
|
177
186
|
delegate kimi work "Implement the scoped change and run the named check. Report changed files."
|
|
178
187
|
```
|
|
179
188
|
|
|
@@ -227,13 +236,28 @@ python3 bin/delegate.py workflow approve wf_0123abcdef45
|
|
|
227
236
|
See [Delegate Workflows](docs/delegate-workflows.md) for the DSL, safety
|
|
228
237
|
limits, config, and gate semantics.
|
|
229
238
|
|
|
230
|
-
Reasoning effort is provider-aware. Unsupported combinations fail before launch. It changes only the requested model thinking depth/cost/latency; it does not change safe/work/call mode, sandboxing, approvals, or edit capability. Codex/Droid validate effort against model capability metadata, Cursor maps effort to configured model selection, Claude maps to Claude Code `--effort`,
|
|
239
|
+
Reasoning effort is provider-aware. Unsupported combinations fail before launch. It changes only the requested model thinking depth/cost/latency; it does not change safe/work/call mode, sandboxing, approvals, or edit capability. Codex/Droid validate effort against model capability metadata, Cursor maps effort to configured model selection, Claude maps to Claude Code `--effort`, Grok maps to Grok `--effort` (`low`, `medium`, `high`, `xhigh`, `max`), and OpenCode passes it through as `--variant`. Devin and Kimi do not expose a Delegate reasoning-effort flag. Explicit Codex effort can target the harness default model even when `codex.defaultModel` is unset:
|
|
231
240
|
|
|
232
241
|
```bash
|
|
233
242
|
delegate --json dry-run codex safe --reasoning-effort high "Review this repository. Do not edit files."
|
|
234
243
|
delegate --json dry-run claude safe --reasoning-effort high "Review this repository. Do not edit files."
|
|
235
244
|
```
|
|
236
245
|
|
|
246
|
+
Codex model routing is deliberately model-first rather than aliasing every
|
|
247
|
+
model/effort pair: define model aliases in `codex.models`, then set effort per
|
|
248
|
+
run with `--reasoning-effort`. Per-model effort menus (including any efforts
|
|
249
|
+
newer than the bundled data) belong in the private `reasoning.capabilities`
|
|
250
|
+
config block, which overrides the bundled defaults.
|
|
251
|
+
|
|
252
|
+
Fast mode is an independent per-run serving choice. `--fast` requests Codex's
|
|
253
|
+
Fast service tier, `--no-fast` explicitly requests Standard, and omitting both
|
|
254
|
+
inherits the active Codex configuration:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
delegate codex safe --model my-alias --reasoning-effort medium --fast "Explore likely causes."
|
|
258
|
+
delegate codex work --model my-alias --reasoning-effort high --no-fast "Implement and verify."
|
|
259
|
+
```
|
|
260
|
+
|
|
237
261
|
Inspect tracked output by alias:
|
|
238
262
|
|
|
239
263
|
```bash
|
|
@@ -291,9 +315,10 @@ Delegate separates three ideas:
|
|
|
291
315
|
|
|
292
316
|
Defaults are intentionally conservative for review paths:
|
|
293
317
|
|
|
294
|
-
- `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok safe`, `delegate devin safe`, `delegate droid ALIAS safe`, and `delegate kimi safe` run in an isolated throwaway workspace. Safe mode reviews your **current working tree** — uncommitted tracked edits and untracked, non-ignored files are mirrored into an isolated throwaway copy (only gitignored paths are excluded), so you can review local changes without committing first or pasting a diff.
|
|
318
|
+
- `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok safe`, `delegate devin safe`, `delegate opencode safe`, `delegate droid ALIAS safe`, and `delegate kimi safe` run in an isolated throwaway workspace. Safe mode reviews your **current working tree** — uncommitted tracked edits and untracked, non-ignored files are mirrored into an isolated throwaway copy (only gitignored paths are excluded), so you can review local changes without committing first or pasting a diff.
|
|
295
319
|
- Grok safe mode uses Delegate isolated copy plus Grok read-only sandbox/permission controls (`--sandbox read-only`, `--permission-mode dontAsk` by default). It does not use Grok `plan` mode. Prompts are delivered via Grok `--prompt-file` from a Delegate temp file.
|
|
296
320
|
- Devin safe mode uses Delegate isolated copy plus a Delegate-generated `--agent-config` deny-list for edit/write/exec and `mcp__*`, with Devin `--permission-mode auto`. Work mode uses Devin `--permission-mode dangerous` because Devin print mode rejects unapproved edit/exec tools.
|
|
321
|
+
- OpenCode safe mode uses Delegate's isolated copy plus an `OPENCODE_CONFIG_CONTENT` permission lockdown that allows only read, glob, and grep operations. OpenCode merges this override last, so repository configuration cannot restore write-capable tools. `opencode call --read-only` uses the same lockdown; plain `call` does not.
|
|
297
322
|
- Claude safe mode invokes `claude -p` with prompt text on stdin, `--permission-mode plan`, `--strict-mcp-config`, Read/Grep/Glob plus selected read-only Bash tools, and `--no-session-persistence` by default. Delegate does not currently prove that Claude Code hooks, plugins, user settings, or other non-MCP customization surfaces are disabled.
|
|
298
323
|
- `work` mode can edit. By default it runs in the real workspace for backward compatibility.
|
|
299
324
|
|
|
@@ -320,7 +345,7 @@ To carry uncommitted local work into the worktree instead of stashing it, add
|
|
|
320
345
|
the worktree through the same snapshot primitives as safe mode, and tears the
|
|
321
346
|
worktree down before launching the child if that sync fails.
|
|
322
347
|
|
|
323
|
-
Safe isolation and `--include-dirty` recreate an untracked symlink only when it is relative, resolves inside the source workspace, and its target is not gitignored; any symlink that fails those checks — an absolute target, an escape out of the tree, or a target that is itself a gitignored secret — is replaced with an inert placeholder file, failing closed on any ambiguity. Delegate reports a warning listing the symlink paths it blocked. In Git repositories with no commits yet, Cursor/Codex/Claude/Droid/Grok/Devin/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
|
|
348
|
+
Safe isolation and `--include-dirty` recreate an untracked symlink only when it is relative, resolves inside the source workspace, and its target is not gitignored; any symlink that fails those checks — an absolute target, an escape out of the tree, or a target that is itself a gitignored secret — is replaced with an inert placeholder file, failing closed on any ambiguity. Delegate reports a warning listing the symlink paths it blocked. In Git repositories with no commits yet, Cursor/Codex/Claude/Droid/Grok/Devin/OpenCode/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
|
|
324
349
|
|
|
325
350
|
Snapshots and `run-output` redact common credential shapes by default, including authorization headers, bearer/basic tokens, JWT-like strings, and common `token=` / `api_key=` / `password=` values. Use `--no-redact` only when exact output is necessary and safe to display.
|
|
326
351
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# Delegate Agent
|
|
6
6
|
|
|
7
|
-
Delegate Agent is a small CLI for handing a bounded task to another coding-agent runtime. It normalizes common calls to Cursor Agent, Factory Droid, OpenAI Codex, Claude Code, Grok Build, Devin, and Kimi Code so humans or other agents can launch review, investigation, and implementation jobs without remembering each tool's flags.
|
|
7
|
+
Delegate Agent is a small CLI for handing a bounded task to another coding-agent runtime. It normalizes common calls to Cursor Agent, Factory Droid, OpenAI Codex, Claude Code, Grok Build, Devin, OpenCode, and Kimi Code so humans or other agents can launch review, investigation, and implementation jobs without remembering each tool's flags.
|
|
8
8
|
|
|
9
9
|
Use it when you want a predictable wrapper around prompts like:
|
|
10
10
|
|
|
@@ -14,7 +14,7 @@ Use it when you want a predictable wrapper around prompts like:
|
|
|
14
14
|
|
|
15
15
|
Delegate does **not** commit, push, merge, deploy, publish, or run a background service. It builds the child command, adds safety framing, launches the selected runtime, and records local run metadata for later inspection.
|
|
16
16
|
|
|
17
|
-
Prompt handling is provider-specific: Codex and
|
|
17
|
+
Prompt handling is provider-specific: Codex, Claude, and OpenCode prompts are delivered to the child
|
|
18
18
|
runtime over stdin; Droid, Grok, and Devin prompts are delivered through private
|
|
19
19
|
temporary prompt files; Cursor Agent and Kimi Code currently
|
|
20
20
|
require prompt argv. Delegate redacts Cursor and Kimi prompt argv in dry-run
|
|
@@ -65,11 +65,16 @@ command -v codex # OpenAI Codex CLI, used by delegate codex ...
|
|
|
65
65
|
command -v claude # Claude Code CLI, used by delegate claude ...
|
|
66
66
|
command -v grok # xAI Grok Build CLI, used by delegate grok ...
|
|
67
67
|
command -v devin # Cognition Devin CLI, used by delegate devin ...
|
|
68
|
+
command -v opencode # OpenCode CLI, used by delegate opencode ...
|
|
68
69
|
command -v kimi # Kimi Code CLI, used by delegate kimi ...
|
|
69
70
|
```
|
|
70
71
|
|
|
71
72
|
Runtime authentication is owned by each child CLI. Delegate cannot log in for you. Dry-runs and CI tests do not require the real child binaries.
|
|
72
73
|
|
|
74
|
+
Install OpenCode from [opencode.ai](https://opencode.ai). Its curl installer
|
|
75
|
+
normally writes the binary to `~/.opencode/bin`, which may not be on `PATH`.
|
|
76
|
+
Extend `PATH` or set `opencode.binary` to the absolute binary path.
|
|
77
|
+
|
|
73
78
|
Initialize a starter config and replace placeholder Droid model IDs before real Droid runs:
|
|
74
79
|
|
|
75
80
|
```bash
|
|
@@ -92,6 +97,7 @@ delegate --json describe
|
|
|
92
97
|
delegate --json models
|
|
93
98
|
delegate --json models codex # per-engine advisory catalog
|
|
94
99
|
delegate --json models cursor --live # merge live harness probe when supported
|
|
100
|
+
delegate --json models opencode --live # query every model visible to OpenCode
|
|
95
101
|
delegate --json capabilities
|
|
96
102
|
```
|
|
97
103
|
|
|
@@ -115,6 +121,7 @@ Preview the command without launching a child runtime:
|
|
|
115
121
|
```bash
|
|
116
122
|
delegate --json dry-run codex safe "Review this repository. Do not edit files."
|
|
117
123
|
delegate --json dry-run claude safe "Review this repository. Do not edit files."
|
|
124
|
+
delegate --json dry-run opencode safe "Review this repository. Do not edit files."
|
|
118
125
|
```
|
|
119
126
|
|
|
120
127
|
Run a read-only review in an isolated throwaway workspace:
|
|
@@ -124,6 +131,7 @@ delegate codex safe "Review this repository for correctness risks. Do not edit f
|
|
|
124
131
|
delegate claude safe "Review this repository for correctness risks. Do not edit files."
|
|
125
132
|
delegate grok safe "Review this repository for correctness risks. Do not edit files."
|
|
126
133
|
delegate devin safe "Review this repository for correctness risks. Do not edit files."
|
|
134
|
+
delegate opencode safe "Review this repository for correctness risks. Do not edit files."
|
|
127
135
|
delegate cursor safe "Review the current diff for regressions. Do not edit files."
|
|
128
136
|
delegate kimi safe "Review this repository for regressions. Do not edit files."
|
|
129
137
|
```
|
|
@@ -141,6 +149,7 @@ Run an edit-capable task in a workspace you trust:
|
|
|
141
149
|
delegate cursor work "Fix the parser bug. Run python3 -m unittest tests.test_delegate_parser. Report changed files."
|
|
142
150
|
delegate claude work "Implement the scoped change and run the named check. Report changed files."
|
|
143
151
|
delegate devin work "Implement the scoped change and run the named check. Report changed files."
|
|
152
|
+
delegate opencode work "Implement the scoped change and run the named check. Report changed files."
|
|
144
153
|
delegate kimi work "Implement the scoped change and run the named check. Report changed files."
|
|
145
154
|
```
|
|
146
155
|
|
|
@@ -194,13 +203,28 @@ python3 bin/delegate.py workflow approve wf_0123abcdef45
|
|
|
194
203
|
See [Delegate Workflows](docs/delegate-workflows.md) for the DSL, safety
|
|
195
204
|
limits, config, and gate semantics.
|
|
196
205
|
|
|
197
|
-
Reasoning effort is provider-aware. Unsupported combinations fail before launch. It changes only the requested model thinking depth/cost/latency; it does not change safe/work/call mode, sandboxing, approvals, or edit capability. Codex/Droid validate effort against model capability metadata, Cursor maps effort to configured model selection, Claude maps to Claude Code `--effort`,
|
|
206
|
+
Reasoning effort is provider-aware. Unsupported combinations fail before launch. It changes only the requested model thinking depth/cost/latency; it does not change safe/work/call mode, sandboxing, approvals, or edit capability. Codex/Droid validate effort against model capability metadata, Cursor maps effort to configured model selection, Claude maps to Claude Code `--effort`, Grok maps to Grok `--effort` (`low`, `medium`, `high`, `xhigh`, `max`), and OpenCode passes it through as `--variant`. Devin and Kimi do not expose a Delegate reasoning-effort flag. Explicit Codex effort can target the harness default model even when `codex.defaultModel` is unset:
|
|
198
207
|
|
|
199
208
|
```bash
|
|
200
209
|
delegate --json dry-run codex safe --reasoning-effort high "Review this repository. Do not edit files."
|
|
201
210
|
delegate --json dry-run claude safe --reasoning-effort high "Review this repository. Do not edit files."
|
|
202
211
|
```
|
|
203
212
|
|
|
213
|
+
Codex model routing is deliberately model-first rather than aliasing every
|
|
214
|
+
model/effort pair: define model aliases in `codex.models`, then set effort per
|
|
215
|
+
run with `--reasoning-effort`. Per-model effort menus (including any efforts
|
|
216
|
+
newer than the bundled data) belong in the private `reasoning.capabilities`
|
|
217
|
+
config block, which overrides the bundled defaults.
|
|
218
|
+
|
|
219
|
+
Fast mode is an independent per-run serving choice. `--fast` requests Codex's
|
|
220
|
+
Fast service tier, `--no-fast` explicitly requests Standard, and omitting both
|
|
221
|
+
inherits the active Codex configuration:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
delegate codex safe --model my-alias --reasoning-effort medium --fast "Explore likely causes."
|
|
225
|
+
delegate codex work --model my-alias --reasoning-effort high --no-fast "Implement and verify."
|
|
226
|
+
```
|
|
227
|
+
|
|
204
228
|
Inspect tracked output by alias:
|
|
205
229
|
|
|
206
230
|
```bash
|
|
@@ -258,9 +282,10 @@ Delegate separates three ideas:
|
|
|
258
282
|
|
|
259
283
|
Defaults are intentionally conservative for review paths:
|
|
260
284
|
|
|
261
|
-
- `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok safe`, `delegate devin safe`, `delegate droid ALIAS safe`, and `delegate kimi safe` run in an isolated throwaway workspace. Safe mode reviews your **current working tree** — uncommitted tracked edits and untracked, non-ignored files are mirrored into an isolated throwaway copy (only gitignored paths are excluded), so you can review local changes without committing first or pasting a diff.
|
|
285
|
+
- `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok safe`, `delegate devin safe`, `delegate opencode safe`, `delegate droid ALIAS safe`, and `delegate kimi safe` run in an isolated throwaway workspace. Safe mode reviews your **current working tree** — uncommitted tracked edits and untracked, non-ignored files are mirrored into an isolated throwaway copy (only gitignored paths are excluded), so you can review local changes without committing first or pasting a diff.
|
|
262
286
|
- Grok safe mode uses Delegate isolated copy plus Grok read-only sandbox/permission controls (`--sandbox read-only`, `--permission-mode dontAsk` by default). It does not use Grok `plan` mode. Prompts are delivered via Grok `--prompt-file` from a Delegate temp file.
|
|
263
287
|
- Devin safe mode uses Delegate isolated copy plus a Delegate-generated `--agent-config` deny-list for edit/write/exec and `mcp__*`, with Devin `--permission-mode auto`. Work mode uses Devin `--permission-mode dangerous` because Devin print mode rejects unapproved edit/exec tools.
|
|
288
|
+
- OpenCode safe mode uses Delegate's isolated copy plus an `OPENCODE_CONFIG_CONTENT` permission lockdown that allows only read, glob, and grep operations. OpenCode merges this override last, so repository configuration cannot restore write-capable tools. `opencode call --read-only` uses the same lockdown; plain `call` does not.
|
|
264
289
|
- Claude safe mode invokes `claude -p` with prompt text on stdin, `--permission-mode plan`, `--strict-mcp-config`, Read/Grep/Glob plus selected read-only Bash tools, and `--no-session-persistence` by default. Delegate does not currently prove that Claude Code hooks, plugins, user settings, or other non-MCP customization surfaces are disabled.
|
|
265
290
|
- `work` mode can edit. By default it runs in the real workspace for backward compatibility.
|
|
266
291
|
|
|
@@ -287,7 +312,7 @@ To carry uncommitted local work into the worktree instead of stashing it, add
|
|
|
287
312
|
the worktree through the same snapshot primitives as safe mode, and tears the
|
|
288
313
|
worktree down before launching the child if that sync fails.
|
|
289
314
|
|
|
290
|
-
Safe isolation and `--include-dirty` recreate an untracked symlink only when it is relative, resolves inside the source workspace, and its target is not gitignored; any symlink that fails those checks — an absolute target, an escape out of the tree, or a target that is itself a gitignored secret — is replaced with an inert placeholder file, failing closed on any ambiguity. Delegate reports a warning listing the symlink paths it blocked. In Git repositories with no commits yet, Cursor/Codex/Claude/Droid/Grok/Devin/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
|
|
315
|
+
Safe isolation and `--include-dirty` recreate an untracked symlink only when it is relative, resolves inside the source workspace, and its target is not gitignored; any symlink that fails those checks — an absolute target, an escape out of the tree, or a target that is itself a gitignored secret — is replaced with an inert placeholder file, failing closed on any ambiguity. Delegate reports a warning listing the symlink paths it blocked. In Git repositories with no commits yet, Cursor/Codex/Claude/Droid/Grok/Devin/OpenCode/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
|
|
291
316
|
|
|
292
317
|
Snapshots and `run-output` redact common credential shapes by default, including authorization headers, bearer/basic tokens, JWT-like strings, and common `token=` / `api_key=` / `password=` values. Use `--no-redact` only when exact output is necessary and safe to display.
|
|
293
318
|
|
|
@@ -86,6 +86,13 @@
|
|
|
86
86
|
"defaultModel": "swe-1.7",
|
|
87
87
|
"defaultReasoningEffort": null
|
|
88
88
|
},
|
|
89
|
+
"opencode": {
|
|
90
|
+
"binary": "opencode",
|
|
91
|
+
"defaultModel": null,
|
|
92
|
+
"defaultReasoningEffort": null,
|
|
93
|
+
"defaultAgent": null,
|
|
94
|
+
"models": {}
|
|
95
|
+
},
|
|
89
96
|
"kimi": {
|
|
90
97
|
"binary": "kimi",
|
|
91
98
|
"defaultModel": "kimi-code/kimi-for-coding",
|
|
@@ -36,6 +36,8 @@ This guide covers both human setup and non-interactive setup for agents or CI jo
|
|
|
36
36
|
command -v codex || echo "Codex CLI missing"
|
|
37
37
|
command -v claude || echo "Claude Code CLI missing"
|
|
38
38
|
command -v grok || echo "Grok Build CLI missing"
|
|
39
|
+
command -v devin || echo "Devin CLI missing"
|
|
40
|
+
command -v opencode || echo "OpenCode CLI missing"
|
|
39
41
|
command -v kimi || echo "Kimi Code CLI missing"
|
|
40
42
|
```
|
|
41
43
|
|
|
@@ -94,12 +96,33 @@ When running on Windows through WSL, treat Delegate as a Linux CLI:
|
|
|
94
96
|
delegate --json dry-run claude safe --reasoning-effort high "Review only. Do not edit files."
|
|
95
97
|
delegate --json dry-run grok safe "Review only. Do not edit files."
|
|
96
98
|
delegate --json dry-run grok safe --reasoning-effort high "Review only. Do not edit files."
|
|
99
|
+
delegate --json dry-run devin safe "Review only. Do not edit files."
|
|
100
|
+
delegate --json dry-run opencode safe "Review only. Do not edit files."
|
|
101
|
+
delegate --json dry-run opencode safe --reasoning-effort high "Review only. Do not edit files."
|
|
97
102
|
delegate --json dry-run cursor safe "Review only. Do not edit files."
|
|
98
103
|
delegate --json dry-run droid reviewer safe "Review only. Do not edit files."
|
|
99
104
|
delegate --json dry-run kimi safe "Review only. Do not edit files."
|
|
100
105
|
```
|
|
101
106
|
|
|
102
|
-
The Codex, Claude, Grok, Cursor, and Kimi dry-runs succeed with the unedited example config when no reasoning effort is requested. Explicit Codex reasoning-effort dry-runs can target the harness default model when no default model is configured. Claude and Grok reasoning effort map to native `--effort` flags. The Droid dry-run validates the alias, so it returns `unconfigured_model` until you replace the `reviewer` placeholder in `config.json` with a real model ID.
|
|
107
|
+
The Codex, Claude, Grok, Devin, OpenCode, Cursor, and Kimi dry-runs succeed with the unedited example config when no reasoning effort is requested. Explicit Codex reasoning-effort dry-runs can target the harness default model when no default model is configured. Claude and Grok reasoning effort map to native `--effort` flags; OpenCode reasoning effort maps to `--variant` without model validation. The Droid dry-run validates the alias, so it returns `unconfigured_model` until you replace the `reviewer` placeholder in `config.json` with a real model ID.
|
|
108
|
+
|
|
109
|
+
### OpenCode
|
|
110
|
+
|
|
111
|
+
Install OpenCode with the curl installer from [opencode.ai](https://opencode.ai).
|
|
112
|
+
The installer normally writes the binary to `~/.opencode/bin`, which is often
|
|
113
|
+
not on `PATH` in non-interactive shells. Add that directory to `PATH`, or set an
|
|
114
|
+
absolute path in Delegate config:
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"opencode": {
|
|
119
|
+
"binary": "/home/<user>/.opencode/bin/opencode"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Run `opencode auth login` before the first real launch. Delegate uses OpenCode's
|
|
125
|
+
existing global authentication state and does not manage login itself.
|
|
103
126
|
|
|
104
127
|
## Non-interactive agent setup
|
|
105
128
|
|
|
@@ -141,6 +164,8 @@ For an orchestrating agent, script, or CI job:
|
|
|
141
164
|
command -v codex >/dev/null || exit 3
|
|
142
165
|
command -v claude >/dev/null || exit 3
|
|
143
166
|
command -v grok >/dev/null || exit 3
|
|
167
|
+
command -v devin >/dev/null || exit 3
|
|
168
|
+
command -v opencode >/dev/null || exit 3
|
|
144
169
|
command -v kimi >/dev/null || exit 3
|
|
145
170
|
```
|
|
146
171
|
|
|
@@ -166,7 +191,9 @@ For an orchestrating agent, script, or CI job:
|
|
|
166
191
|
|
|
167
192
|
## CI expectations
|
|
168
193
|
|
|
169
|
-
The required test suite does not need real Cursor, Droid, Codex, Claude,
|
|
194
|
+
The required test suite does not need real Cursor, Droid, Codex, Claude, Grok,
|
|
195
|
+
Devin, OpenCode, or Kimi binaries. Tests use dry-run paths and fake binaries
|
|
196
|
+
where needed:
|
|
170
197
|
|
|
171
198
|
```bash
|
|
172
199
|
python3 -m compileall -q src tests bin
|
|
@@ -28,9 +28,9 @@ delegate droid [MODEL_ALIAS] safe [--model <alias-or-model>] [--reasoning-effort
|
|
|
28
28
|
delegate droid [MODEL_ALIAS] work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
29
29
|
delegate droid [MODEL_ALIAS] call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
|
|
30
30
|
|
|
31
|
-
delegate codex safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [--output-schema FILE] [prompt...]
|
|
32
|
-
delegate codex work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [--output-schema FILE] [prompt...]
|
|
33
|
-
delegate codex call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [--output-schema FILE] [prompt...]
|
|
31
|
+
delegate codex safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--progress] [--forbid-commit] [--prompt-file PATH] [--output-schema FILE] [prompt...]
|
|
32
|
+
delegate codex work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--progress] [--forbid-commit] [--prompt-file PATH] [--output-schema FILE] [prompt...]
|
|
33
|
+
delegate codex call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--prompt-file PATH] [--output-schema FILE] [prompt...]
|
|
34
34
|
|
|
35
35
|
delegate claude safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
36
36
|
delegate claude work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
@@ -40,13 +40,17 @@ delegate grok safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prog
|
|
|
40
40
|
delegate grok work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
41
41
|
delegate grok call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
|
|
42
42
|
|
|
43
|
+
delegate opencode safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
44
|
+
delegate opencode work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
45
|
+
delegate opencode call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--prompt-file PATH] [prompt...]
|
|
46
|
+
|
|
43
47
|
delegate kimi safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
44
48
|
delegate kimi work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
45
49
|
delegate kimi call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
|
|
46
50
|
```
|
|
47
51
|
|
|
48
52
|
Prompt sources are direct arguments, `--prompt-file`, or Delegate stdin. Raw C0 control characters other than newline, carriage return, and tab are stripped before launch; a prompt that becomes empty fails fast. After
|
|
49
|
-
Delegate resolves the prompt, Codex and
|
|
53
|
+
Delegate resolves the prompt, Codex, Claude, and OpenCode prompts are passed to the child runtime over
|
|
50
54
|
stdin. Droid and Grok prompts are written to a private temporary prompt file and passed
|
|
51
55
|
with Droid's documented `--file` option or Grok's `--prompt-file`. Cursor Agent currently only exposes
|
|
52
56
|
positional prompt input, and Kimi Code prompt mode currently uses `--prompt`,
|
|
@@ -68,10 +72,12 @@ matches an alias key; otherwise it is passed through verbatim as a raw model ID
|
|
|
68
72
|
`MODEL_ALIAS` (alias-only/strict); give either the positional or `--model`, not
|
|
69
73
|
both. With neither, Droid uses `droid.defaultModel` when set. Discover aliases
|
|
70
74
|
and advisory catalogs with `delegate models`, `delegate models <engine>`, and
|
|
71
|
-
`delegate models <engine> --live` (live probes for cursor/droid/devin; other
|
|
75
|
+
`delegate models <engine> --live` (live probes for cursor/droid/devin/opencode; other
|
|
72
76
|
engines report live unsupported).
|
|
73
77
|
|
|
74
|
-
`--reasoning-effort LEVEL` is optional and parsed only before prompt text begins.
|
|
78
|
+
`--reasoning-effort LEVEL` is optional and parsed only before prompt text begins. Engines with capability metadata reject unsupported model/effort pairs before launch with `unsupported_reasoning_effort`. It affects only model reasoning depth, cost, or latency; it does not change `safe`/`work`/`call` permissions, sandboxing, approvals, network policy, or edit capability. Cursor effort is model-selection based and requires `cursor.reasoningEffortModels`; an explicit `--model` wins over effort→model routing. Droid emits `--reasoning-effort LEVEL`; Codex emits a `model_reasoning_effort` config override for the resolved model, or for the Codex harness default model when no `codex.defaultModel` is configured and the request was explicit; Claude emits Claude Code `--effort LEVEL`; Grok emits Grok `--effort LEVEL` (`low`, `medium`, `high`, `xhigh`, `max`); OpenCode emits `--variant LEVEL` without validating it against the selected model. Kimi does not support reasoning effort in v1.
|
|
79
|
+
|
|
80
|
+
`--fast` and `--no-fast` are Codex-only, mutually exclusive per-run service-tier overrides. `--fast` emits `service_tier="fast"` plus `features.fast_mode=true` (Codex silently drops a Fast tier when that feature flag is off in the ambient config, so Delegate enables it explicitly); `--no-fast` emits `service_tier="default"` so a globally enabled Fast setting can be turned off for one child. Omitting both emits no override and inherits Codex configuration. Fast is orthogonal to model selection, reasoning effort, and Delegate safety policy. Two upstream caveats: Codex strips the service tier when authenticated with an API key (Fast is a ChatGPT-plan feature), and neither Codex nor the API fails on a tier the model does not offer — Delegate's flag validation is the only fail-closed layer, so an unsupported combination degrades silently to standard routing rather than erroring.
|
|
75
81
|
|
|
76
82
|
`--progress` enables parent progress heartbeats on stderr for tracked foreground
|
|
77
83
|
runs. `--no-progress` disables them even when `progress.enabled` is true in
|
|
@@ -133,20 +139,22 @@ auth/env selection happens.
|
|
|
133
139
|
Usage:
|
|
134
140
|
|
|
135
141
|
```bash
|
|
136
|
-
delegate [--json] [--isolation auto|none|worktree] codex {safe,work,call} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [--output-schema FILE] [prompt...]
|
|
142
|
+
delegate [--json] [--isolation auto|none|worktree] codex {safe,work,call} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--progress] [--forbid-commit] [--prompt-file PATH] [--output-schema FILE] [prompt...]
|
|
137
143
|
```
|
|
138
144
|
|
|
139
145
|
- Safe mode reviews your **current working tree** — uncommitted tracked edits and untracked, non-ignored files are mirrored into an isolated throwaway copy (only gitignored paths are excluded), so you can review local changes without committing first or pasting a diff. Codex safe always uses `--sandbox read-only`. Under `--isolation auto`, Codex safe is the only safe harness that may opt out with `--isolation none`, because Codex still keeps its read-only sandbox active.
|
|
140
146
|
- Prompt text is delivered on stdin to `codex exec`; dry-run argv and tracked run manifests do not contain the prompt.
|
|
141
147
|
- Model selection uses `--model` (alias from `codex.models` or a raw model ID), the run-input JSON `model`, or `codex.defaultModel`.
|
|
142
148
|
- `--reasoning-effort` maps to a Codex `model_reasoning_effort` config override after the model is resolved.
|
|
143
|
-
- `--
|
|
149
|
+
- `--fast` requests Codex Fast for one run; `--no-fast` explicitly requests Standard; omission inherits Codex configuration. The selected tier is recorded as `requestedFast` when explicit.
|
|
150
|
+
- `--output-schema FILE` is **codex-only**. Every other engine rejects it. `FILE` is a path to a JSON Schema that OpenAI enforces on Codex's final message, for machine-parseable output in fan-outs and JSON run input. Relative paths resolve against the process launch cwd, the same rule as `--prompt-file`. When set, Delegate suppresses the completion-report prompt injection for that run so the schema owns the whole final message. Missing or unreadable files fail fast before launch.
|
|
144
151
|
|
|
145
152
|
Examples:
|
|
146
153
|
|
|
147
154
|
```bash
|
|
148
155
|
delegate codex safe "Review this repo for regressions; report file/line/severity."
|
|
149
156
|
delegate codex safe --model gpt-5.5 "Review this repo for regressions; report file/line/severity."
|
|
157
|
+
delegate codex safe --model my-alias --reasoning-effort medium --fast "Explore likely causes."
|
|
150
158
|
delegate codex work "Implement the scoped task; report changed files and tests."
|
|
151
159
|
delegate codex call "Summarize this context in three bullets."
|
|
152
160
|
delegate --json codex safe --output-schema findings.schema.json "Return one record per finding."
|
|
@@ -202,6 +210,65 @@ delegate grok call "Summarize this context in three bullets."
|
|
|
202
210
|
delegate --isolation worktree grok work "Implement the feature in a persistent worktree."
|
|
203
211
|
```
|
|
204
212
|
|
|
213
|
+
### `delegate opencode`
|
|
214
|
+
|
|
215
|
+
Wraps OpenCode's non-interactive `run` command.
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
delegate [--json] [--isolation auto|none|worktree] opencode {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
219
|
+
delegate [--json] opencode call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--prompt-file PATH] [prompt...]
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
- Safe mode reviews the current working tree in an isolated throwaway copy. It
|
|
223
|
+
injects an `OPENCODE_CONFIG_CONTENT` permission lockdown that allows only
|
|
224
|
+
read, glob, and grep operations; OpenCode merges the override last, so a
|
|
225
|
+
repository config cannot restore write-capable tools. `call --read-only`
|
|
226
|
+
uses the same lockdown. Plain `call` has no permission lockdown.
|
|
227
|
+
- Prompt text is delivered on stdin. The child argv starts with `opencode run
|
|
228
|
+
--format json --print-logs --dir <workspace>`; work mode adds `--auto`, while
|
|
229
|
+
safe and call modes do not.
|
|
230
|
+
- Model selection uses `--model`, the run-input JSON `model`, or
|
|
231
|
+
`opencode.defaultModel`. IDs use OpenCode's `provider/model` form and pass
|
|
232
|
+
through verbatim. An `opencode.models` alias may be a model string or an
|
|
233
|
+
object that pins both model and variant:
|
|
234
|
+
|
|
235
|
+
```json
|
|
236
|
+
{
|
|
237
|
+
"opencode": {
|
|
238
|
+
"models": {
|
|
239
|
+
"sonnet": "anthropic/claude-sonnet-4-5",
|
|
240
|
+
"sonnet-high": {
|
|
241
|
+
"model": "anthropic/claude-sonnet-4-5",
|
|
242
|
+
"variant": "high"
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
- `--reasoning-effort LEVEL` maps directly to OpenCode `--variant LEVEL` and
|
|
250
|
+
overrides an alias-pinned variant. OpenCode silently ignores bogus variant
|
|
251
|
+
names, so a typo can have no effect.
|
|
252
|
+
- `--agent NAME` selects an OpenCode agent for one run. With no flag,
|
|
253
|
+
`opencode.defaultAgent` is used when configured.
|
|
254
|
+
- `delegate models opencode --live` runs `opencode --pure models`. Live discovery has
|
|
255
|
+
returned 452+ models and includes any provider in OpenCode's models.dev
|
|
256
|
+
catalog, plus configured custom or local providers.
|
|
257
|
+
- OpenCode is available to workflow `agent()` calls and
|
|
258
|
+
`workflows.engineCaps` like other engines.
|
|
259
|
+
- OpenCode currently buffers stdout until completion, so progress can remain
|
|
260
|
+
silent even though `--print-logs` stderr is visible. Sessions accumulate in
|
|
261
|
+
the user's global OpenCode state. Call mode has no Delegate timeout.
|
|
262
|
+
|
|
263
|
+
Examples:
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
delegate opencode safe "Review this repo for regressions; report file/line/severity."
|
|
267
|
+
delegate opencode work --agent build "Implement the scoped task; report changed files and tests."
|
|
268
|
+
delegate opencode call --read-only --model anthropic/claude-sonnet-4-5 --prompt-file rubric.md
|
|
269
|
+
delegate --isolation worktree opencode work "Implement the feature in a persistent worktree."
|
|
270
|
+
```
|
|
271
|
+
|
|
205
272
|
### `delegate kimi`
|
|
206
273
|
|
|
207
274
|
Usage:
|
|
@@ -375,7 +442,7 @@ Typical dry-run JSON fields:
|
|
|
375
442
|
|
|
376
443
|
When a profile is active, dry-run and completion payloads add `authProfile` (the resolved profile name) and, when a Codex fallback profile is configured, `fallbackProfile`. Dry-run also adds `profileEnv` (the injected env map, with values redacted). These keys are omitted when no profile is active.
|
|
377
444
|
|
|
378
|
-
For Cursor, Claude, Grok, Droid, and Kimi safe mode, an explicit `--isolation none`
|
|
445
|
+
For Cursor, Claude, Grok, Devin, OpenCode, Droid, and Kimi safe mode, an explicit `--isolation none`
|
|
379
446
|
is normalized to `auto` with a warning because those safe contracts depend on
|
|
380
447
|
the temporary workspace/config boundary. Codex safe can use `none` because Codex
|
|
381
448
|
still runs with its read-only sandbox.
|
|
@@ -450,6 +517,7 @@ Supported input keys:
|
|
|
450
517
|
"cwd": "/path/to/workspace",
|
|
451
518
|
"isolation": "worktree",
|
|
452
519
|
"reasoningEffort": "high",
|
|
520
|
+
"fast": false,
|
|
453
521
|
"progress": true,
|
|
454
522
|
"forbidCommit": true,
|
|
455
523
|
"includeDirty": true,
|
|
@@ -458,12 +526,13 @@ Supported input keys:
|
|
|
458
526
|
}
|
|
459
527
|
```
|
|
460
528
|
|
|
461
|
-
- `engine`: `cursor`, `droid`, `codex`, `claude`, `grok`, `devin`, or `kimi`.
|
|
529
|
+
- `engine`: `cursor`, `droid`, `codex`, `claude`, `grok`, `devin`, `opencode`, or `kimi`.
|
|
462
530
|
- `mode`: `safe`, `work`, or `call`.
|
|
463
531
|
- `model`: optional alias-or-id for every engine. Resolved against `<engine>.models` when it matches an alias; otherwise passed through as a raw model ID. For Droid, a positional alias remains alias-only/strict; JSON/`--model` is alias-or-id. Cursor honors an explicit model even when it differs from `cursor.defaultModel`.
|
|
464
532
|
- `cwd`: optional workspace path. Git directories resolve to the repo root. Omit it for `mode: "call"`, which always uses an empty temporary cwd.
|
|
465
|
-
- `isolation`: optional `auto`, `none`, or `worktree`. `null` is invalid. `mode: "call"` rejects isolation. For Cursor, Claude, Grok, Droid, and Kimi safe mode, `none` is normalized to `auto` with a warning.
|
|
533
|
+
- `isolation`: optional `auto`, `none`, or `worktree`. `null` is invalid. `mode: "call"` rejects isolation. For Cursor, Claude, Grok, Devin, OpenCode, Droid, and Kimi safe mode, `none` is normalized to `auto` with a warning.
|
|
466
534
|
- `reasoningEffort`: optional non-empty effort string. It overrides provider `defaultReasoningEffort` for that JSON run.
|
|
535
|
+
- `fast`: optional Codex-only boolean or `null`. `true` requests Fast, `false` explicitly requests Standard, and `null`/omission inherits Codex configuration.
|
|
467
536
|
- `progress`: optional boolean. `true` enables parent progress heartbeats on stderr; `false` disables them even when `progress.enabled` is true in config. When omitted, config `progress.enabled` applies (default `false`). `mode: "call"` rejects progress.
|
|
468
537
|
- `forbidCommit`: optional boolean. `true` requires `mode: "work"` with persistent worktree isolation and fails the run if the child creates commits. `mode: "call"` rejects commit policy.
|
|
469
538
|
- `includeDirty`: optional boolean. `true` requires `mode: "work"` with persistent worktree isolation and syncs tracked edits plus untracked non-ignored files into the new worktree before launch.
|
|
@@ -490,7 +559,7 @@ delegate --json capabilities refresh
|
|
|
490
559
|
delegate agent-help
|
|
491
560
|
```
|
|
492
561
|
|
|
493
|
-
`describe` reports version, engines, modes, supported isolation values, prompt transforms, effective policy, top-level profile config metadata, and representative argv shapes. It also includes a `commands` catalog derived from the help registry; each full entry includes stable `name`/`command`, usage, arguments, options, and launchOptions fields. Full `describe` is a strict superset of `describe --summary`, so fields present in summary keep the same names in the full payload. `models` reports configured Cursor, Droid, Codex, Claude, Grok, Devin, and Kimi model settings, including non-empty `<engine>.models` alias maps. `models <engine>` returns an advisory per-engine catalog (bundled + config); `--live` merges a harness probe for cursor, droid, and
|
|
562
|
+
`describe` reports version, engines, modes, supported isolation values, prompt transforms, effective policy, top-level profile config metadata, and representative argv shapes. It also includes a `commands` catalog derived from the help registry; each full entry includes stable `name`/`command`, usage, arguments, options, and launchOptions fields. Full `describe` is a strict superset of `describe --summary`, so fields present in summary keep the same names in the full payload. `models` reports configured Cursor, Droid, Codex, Claude, Grok, Devin, OpenCode, and Kimi model settings, including non-empty `<engine>.models` alias maps. `models <engine>` returns an advisory per-engine catalog (bundled + config); `--live` merges a harness probe for cursor, droid, devin, and opencode when available. Discovery output applies best-effort credential scrubbing, so secret-shaped values (including model IDs or paths that resemble credentials) are redacted; copy exact values from your config file rather than from scrubbed output. Agents should start with `--summary` for a compact inventory, then use raw output only when needed.
|
|
494
563
|
|
|
495
564
|
Both `describe` and `models` include provenance fields useful for detecting installed-runtime drift:
|
|
496
565
|
|