delegate-agent-cli 0.13.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.13.0 → delegate_agent_cli-0.13.1}/CHANGELOG.md +13 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/PKG-INFO +16 -1
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/README.md +15 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/docs/cli-reference.md +10 -4
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/docs/configuration.md +5 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/docs/security-model.md +8 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/pyproject.toml +1 -1
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/__init__.py +1 -1
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/argv_builders.py +8 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/cli.py +4 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/cli_parser.py +33 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/command_help.py +26 -9
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/describe_payload.py +9 -2
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/request_build.py +19 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/request_models.py +3 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/run_metadata.py +12 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/runner.py +4 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/safe_workspace.py +1 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/snapshot_view.py +1 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/runtime.py +16 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_execution.py +2 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/PKG-INFO +16 -1
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_command_help.py +11 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_delegate_parser.py +69 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_end_to_end_tracking.py +13 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_engine_argv.py +29 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_execution_argv_and_prompt.py +31 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_execution_dry_run.py +23 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_execution_worktree_preflight.py +2 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_workflow_commands.py +40 -1
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/CONTRIBUTING.md +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/LICENSE +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/MANIFEST.in +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/SECURITY.md +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/bin/delegate-profile-shim +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/bin/delegate.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/config.example.json +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/docs/agent-setup.md +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/docs/assets/delegate-agent-header.png +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/docs/development.md +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/docs/live-runtime.md +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/docs/publishing-checklist.md +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/docs/troubleshooting.md +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/docs/worktrees.md +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/examples/task.claude.json +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/examples/task.codex.json +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/examples/task.cursor.json +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/examples/task.droid.json +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/examples/task.grok.json +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/examples/task.judge.json +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/setup.cfg +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/archived_logs.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/argv_utils.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/bundled_models.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/capability_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/command_errors.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/config.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/config_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/constants.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/errors.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/git_utils.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/harness_events.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/inspection_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/isolation.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/json_types.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/log_output.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/model_discovery.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/private_io.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/profile_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/profile_guard.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/profiles.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/prompt_instructions.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/prompt_transport.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/reasoning.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/redaction.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/rendering.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/retention.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/run_output_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/run_registry.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/run_status.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/wait_cancel_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/__init__.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/registry.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/schema.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/workflows/script.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_gc.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_mgmt.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_records.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_remove.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/worktree_summary.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/wsl.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/SOURCES.txt +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/dependency_links.txt +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/entry_points.txt +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/requires.txt +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent_cli.egg-info/top_level.txt +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_capability_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_config_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_delegate_help_cli.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_delegate_isolation.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_delegate_validation.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_execution_worktree_failure_cleanup.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_execution_worktree_run.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_harness_events.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_inspection_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_kimi_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_model_discovery.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_model_selection_wave1a.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_model_selection_wave1b.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_packaging.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_profiles.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_reasoning_capabilities.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_retention.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_run_registry.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_runner_capture.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_safe_workspace_isolation.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_slash_passthrough.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_snapshot_redaction.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_snapshot_rendering.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_snapshot_run_output.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_snapshot_view.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_utility_modules.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_wait_cancel_commands.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_wave4_launch_features.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_worktree_list_show.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_worktree_prune_gc.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_worktree_remove.py +0 -0
- {delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/tests/test_wsl_guardrails.py +0 -0
|
@@ -5,6 +5,18 @@ 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
|
+
|
|
8
20
|
## [0.13.0] - 2026-07-09
|
|
9
21
|
|
|
10
22
|
### Added
|
|
@@ -292,6 +304,7 @@ Usage-audit fix wave: 82 sessions and 1,241 delegate invocations from one week o
|
|
|
292
304
|
|
|
293
305
|
- Releases before 0.1.3 predate this changelog.
|
|
294
306
|
|
|
307
|
+
[0.13.1]: https://github.com/treygoff24/delegate-agent/compare/v0.13.0...v0.13.1
|
|
295
308
|
[0.13.0]: https://github.com/treygoff24/delegate-agent/compare/v0.12.0...v0.13.0
|
|
296
309
|
[0.12.0]: https://github.com/treygoff24/delegate-agent/compare/v0.11.0...v0.12.0
|
|
297
310
|
[0.11.0]: https://github.com/treygoff24/delegate-agent/compare/v0.10.0...v0.11.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: delegate-agent-cli
|
|
3
|
-
Version: 0.13.
|
|
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
|
|
@@ -243,6 +243,21 @@ delegate --json dry-run codex safe --reasoning-effort high "Review this reposito
|
|
|
243
243
|
delegate --json dry-run claude safe --reasoning-effort high "Review this repository. Do not edit files."
|
|
244
244
|
```
|
|
245
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
|
+
|
|
246
261
|
Inspect tracked output by alias:
|
|
247
262
|
|
|
248
263
|
```bash
|
|
@@ -210,6 +210,21 @@ delegate --json dry-run codex safe --reasoning-effort high "Review this reposito
|
|
|
210
210
|
delegate --json dry-run claude safe --reasoning-effort high "Review this repository. Do not edit files."
|
|
211
211
|
```
|
|
212
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
|
+
|
|
213
228
|
Inspect tracked output by alias:
|
|
214
229
|
|
|
215
230
|
```bash
|
|
@@ -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...]
|
|
@@ -77,6 +77,8 @@ engines report live unsupported).
|
|
|
77
77
|
|
|
78
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
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.
|
|
81
|
+
|
|
80
82
|
`--progress` enables parent progress heartbeats on stderr for tracked foreground
|
|
81
83
|
runs. `--no-progress` disables them even when `progress.enabled` is true in
|
|
82
84
|
config. When neither flag is set, config `progress.enabled` applies (default
|
|
@@ -137,13 +139,14 @@ auth/env selection happens.
|
|
|
137
139
|
Usage:
|
|
138
140
|
|
|
139
141
|
```bash
|
|
140
|
-
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...]
|
|
141
143
|
```
|
|
142
144
|
|
|
143
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.
|
|
144
146
|
- Prompt text is delivered on stdin to `codex exec`; dry-run argv and tracked run manifests do not contain the prompt.
|
|
145
147
|
- Model selection uses `--model` (alias from `codex.models` or a raw model ID), the run-input JSON `model`, or `codex.defaultModel`.
|
|
146
148
|
- `--reasoning-effort` maps to a Codex `model_reasoning_effort` config override after the model is resolved.
|
|
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.
|
|
147
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.
|
|
148
151
|
|
|
149
152
|
Examples:
|
|
@@ -151,6 +154,7 @@ Examples:
|
|
|
151
154
|
```bash
|
|
152
155
|
delegate codex safe "Review this repo for regressions; report file/line/severity."
|
|
153
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."
|
|
154
158
|
delegate codex work "Implement the scoped task; report changed files and tests."
|
|
155
159
|
delegate codex call "Summarize this context in three bullets."
|
|
156
160
|
delegate --json codex safe --output-schema findings.schema.json "Return one record per finding."
|
|
@@ -513,6 +517,7 @@ Supported input keys:
|
|
|
513
517
|
"cwd": "/path/to/workspace",
|
|
514
518
|
"isolation": "worktree",
|
|
515
519
|
"reasoningEffort": "high",
|
|
520
|
+
"fast": false,
|
|
516
521
|
"progress": true,
|
|
517
522
|
"forbidCommit": true,
|
|
518
523
|
"includeDirty": true,
|
|
@@ -527,6 +532,7 @@ Supported input keys:
|
|
|
527
532
|
- `cwd`: optional workspace path. Git directories resolve to the repo root. Omit it for `mode: "call"`, which always uses an empty temporary cwd.
|
|
528
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.
|
|
529
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.
|
|
530
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.
|
|
531
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.
|
|
532
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.
|
|
@@ -138,6 +138,11 @@ layers. This is read-only observability; inspecting it does not modify
|
|
|
138
138
|
|
|
139
139
|
Reasoning-effort settings are optional. A per-run `--reasoning-effort LEVEL` or JSON `reasoningEffort` overrides provider defaults. If no effort is requested or defaulted, Delegate emits no reasoning-effort argv and preserves current runtime behavior.
|
|
140
140
|
|
|
141
|
+
Codex Fast is intentionally not a Delegate config default. Use per-run
|
|
142
|
+
`--fast`, `--no-fast`, or JSON `fast`; omission inherits the active Codex CLI
|
|
143
|
+
configuration. This keeps speed selection independent from model aliases and
|
|
144
|
+
reasoning defaults.
|
|
145
|
+
|
|
141
146
|
## Sections
|
|
142
147
|
|
|
143
148
|
### `tracking`
|
|
@@ -118,6 +118,14 @@ combinations before launch. OpenCode is the exception: Delegate passes the value
|
|
|
118
118
|
through as `--variant`, and OpenCode may silently ignore an unknown variant.
|
|
119
119
|
Treat higher effort as a possible latency/cost change, not as a safety control.
|
|
120
120
|
|
|
121
|
+
## Codex Fast boundary
|
|
122
|
+
|
|
123
|
+
`--fast`, `--no-fast`, and JSON `fast` select a Codex service tier for one run.
|
|
124
|
+
They do not change the selected model, reasoning effort, sandbox, approvals,
|
|
125
|
+
isolation, network policy, credentials, or edit capability. Fast may consume
|
|
126
|
+
plan usage at a different rate; treat it as a latency/usage choice, never a
|
|
127
|
+
security control.
|
|
128
|
+
|
|
121
129
|
## Isolation boundaries
|
|
122
130
|
|
|
123
131
|
### Temporary safe isolation
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "delegate-agent-cli"
|
|
7
|
-
version = "0.13.
|
|
7
|
+
version = "0.13.1"
|
|
8
8
|
description = "A tiny CLI for delegating bounded agent tasks to Cursor, Droid, OpenAI Codex, Claude Code, Grok Build, or Kimi Code runtimes."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -424,6 +424,7 @@ def build_codex_argv(
|
|
|
424
424
|
workspace_kind: str,
|
|
425
425
|
stream_capture: bool = True,
|
|
426
426
|
reasoning_capability: reasoning.ReasoningCapability | None = None,
|
|
427
|
+
fast: bool | None = None,
|
|
427
428
|
prompt_transport: str = PROMPT_TRANSPORT_ARGV,
|
|
428
429
|
output_schema: str | None = None,
|
|
429
430
|
call_read_only: bool = False,
|
|
@@ -455,6 +456,13 @@ def build_codex_argv(
|
|
|
455
456
|
f'model_reasoning_effort="{reasoning_capability.effort}"',
|
|
456
457
|
]
|
|
457
458
|
)
|
|
459
|
+
if fast is not None:
|
|
460
|
+
service_tier = "fast" if fast else "default"
|
|
461
|
+
argv.extend(["-c", f'service_tier="{service_tier}"'])
|
|
462
|
+
if fast:
|
|
463
|
+
# Codex drops a "fast" tier silently when features.fast_mode is off
|
|
464
|
+
# in the ambient config; enable it so --fast cannot no-op.
|
|
465
|
+
argv.extend(["-c", "features.fast_mode=true"])
|
|
458
466
|
argv.append("exec")
|
|
459
467
|
argv.extend(["--cd", workspace])
|
|
460
468
|
if output_schema is not None:
|
|
@@ -22,6 +22,7 @@ from delegate_agent import (
|
|
|
22
22
|
profiles,
|
|
23
23
|
reasoning,
|
|
24
24
|
redaction,
|
|
25
|
+
run_metadata,
|
|
25
26
|
run_output_commands,
|
|
26
27
|
run_registry,
|
|
27
28
|
wait_cancel_commands,
|
|
@@ -305,6 +306,7 @@ def dry_run_payload(request: Request) -> JsonObject:
|
|
|
305
306
|
"promptInstructionMode": request.prompt_instruction_mode,
|
|
306
307
|
}
|
|
307
308
|
reasoning.add_reasoning_payload_fields(payload, request)
|
|
309
|
+
run_metadata.add_speed_payload_fields(payload, request)
|
|
308
310
|
if request.warnings:
|
|
309
311
|
payload["warnings"] = list(request.warnings)
|
|
310
312
|
if request.progress:
|
|
@@ -554,6 +556,7 @@ def make_run_context(
|
|
|
554
556
|
reasoning_effort_source=request.reasoning_effort_source,
|
|
555
557
|
reasoning_capability_source=request.reasoning_capability_source,
|
|
556
558
|
reasoning_transport=request.reasoning_transport,
|
|
559
|
+
fast=request.fast,
|
|
557
560
|
prompt_transport=request.prompt_transport,
|
|
558
561
|
forbid_commit=request.forbid_commit,
|
|
559
562
|
progress_initial_delay_sec=request.progress_initial_delay_sec,
|
|
@@ -688,6 +691,7 @@ def execute_request(
|
|
|
688
691
|
merged.append(warning)
|
|
689
692
|
payload["warnings"] = merged
|
|
690
693
|
reasoning.add_reasoning_payload_fields(payload, request)
|
|
694
|
+
run_metadata.add_speed_payload_fields(payload, request)
|
|
691
695
|
if result.exit_code != 0:
|
|
692
696
|
payload["error"] = "child_failed"
|
|
693
697
|
payload["message"] = "Child command failed."
|
|
@@ -703,6 +703,7 @@ def parse_modeless_engine(
|
|
|
703
703
|
prompt_file,
|
|
704
704
|
output_schema,
|
|
705
705
|
reasoning_effort,
|
|
706
|
+
fast,
|
|
706
707
|
progress_intent,
|
|
707
708
|
forbid_commit,
|
|
708
709
|
prompt_parts,
|
|
@@ -715,6 +716,8 @@ def parse_modeless_engine(
|
|
|
715
716
|
) = parse_prompt_tail(rest[1:], json_mode, isolation, command_prefix=[engine, mode])
|
|
716
717
|
if agent is not None and engine != "opencode":
|
|
717
718
|
raise DelegateError("unsupported_agent", "--agent is only supported by opencode.")
|
|
719
|
+
if fast is not None and engine != "codex":
|
|
720
|
+
raise DelegateError("unsupported_fast", "--fast and --no-fast are only supported by codex.")
|
|
718
721
|
forbid_commit_implied_isolation = False
|
|
719
722
|
if forbid_commit and mode == "work" and isolation is None:
|
|
720
723
|
isolation = "worktree"
|
|
@@ -743,6 +746,7 @@ def parse_modeless_engine(
|
|
|
743
746
|
prompt_file=prompt_file,
|
|
744
747
|
output_schema=output_schema,
|
|
745
748
|
reasoning_effort=reasoning_effort,
|
|
749
|
+
fast=fast,
|
|
746
750
|
progress_intent=progress_intent,
|
|
747
751
|
forbid_commit=forbid_commit,
|
|
748
752
|
forbid_commit_implied_isolation=forbid_commit_implied_isolation,
|
|
@@ -813,6 +817,7 @@ def parse_droid(
|
|
|
813
817
|
prompt_file,
|
|
814
818
|
output_schema,
|
|
815
819
|
reasoning_effort,
|
|
820
|
+
fast,
|
|
816
821
|
progress_intent,
|
|
817
822
|
forbid_commit,
|
|
818
823
|
prompt_parts,
|
|
@@ -825,6 +830,8 @@ def parse_droid(
|
|
|
825
830
|
) = parse_prompt_tail(tail, json_mode, isolation, command_prefix=command_prefix)
|
|
826
831
|
if agent is not None:
|
|
827
832
|
raise DelegateError("unsupported_agent", "--agent is only supported by opencode.")
|
|
833
|
+
if fast is not None:
|
|
834
|
+
raise DelegateError("unsupported_fast", "--fast and --no-fast are only supported by codex.")
|
|
828
835
|
forbid_commit_implied_isolation = False
|
|
829
836
|
if forbid_commit and mode == "work" and isolation is None:
|
|
830
837
|
isolation = "worktree"
|
|
@@ -855,6 +862,7 @@ def parse_droid(
|
|
|
855
862
|
prompt_file=prompt_file,
|
|
856
863
|
output_schema=output_schema,
|
|
857
864
|
reasoning_effort=reasoning_effort,
|
|
865
|
+
fast=fast,
|
|
858
866
|
progress_intent=progress_intent,
|
|
859
867
|
forbid_commit=forbid_commit,
|
|
860
868
|
forbid_commit_implied_isolation=forbid_commit_implied_isolation,
|
|
@@ -933,6 +941,7 @@ def parse_prompt_tail(
|
|
|
933
941
|
str | None,
|
|
934
942
|
str | None,
|
|
935
943
|
str | None,
|
|
944
|
+
bool | None,
|
|
936
945
|
str | None,
|
|
937
946
|
bool,
|
|
938
947
|
list[str],
|
|
@@ -946,6 +955,7 @@ def parse_prompt_tail(
|
|
|
946
955
|
prompt_file: str | None = None
|
|
947
956
|
output_schema: str | None = None
|
|
948
957
|
reasoning_effort: str | None = None
|
|
958
|
+
fast: bool | None = None
|
|
949
959
|
progress_intent: str | None = None
|
|
950
960
|
forbid_commit = False
|
|
951
961
|
include_dirty = False
|
|
@@ -1022,6 +1032,28 @@ def parse_prompt_tail(
|
|
|
1022
1032
|
raise DelegateError(exc.error, f"{exc.message}{corrected}") from exc
|
|
1023
1033
|
i += 2
|
|
1024
1034
|
continue
|
|
1035
|
+
if token == "--fast":
|
|
1036
|
+
if fast is not None:
|
|
1037
|
+
detail = (
|
|
1038
|
+
"Only one --fast flag is allowed."
|
|
1039
|
+
if fast
|
|
1040
|
+
else "--fast and --no-fast cannot be combined."
|
|
1041
|
+
)
|
|
1042
|
+
raise DelegateError("invalid_option_combination", detail)
|
|
1043
|
+
fast = True
|
|
1044
|
+
i += 1
|
|
1045
|
+
continue
|
|
1046
|
+
if token == "--no-fast":
|
|
1047
|
+
if fast is not None:
|
|
1048
|
+
detail = (
|
|
1049
|
+
"Only one --no-fast flag is allowed."
|
|
1050
|
+
if not fast
|
|
1051
|
+
else "--fast and --no-fast cannot be combined."
|
|
1052
|
+
)
|
|
1053
|
+
raise DelegateError("invalid_option_combination", detail)
|
|
1054
|
+
fast = False
|
|
1055
|
+
i += 1
|
|
1056
|
+
continue
|
|
1025
1057
|
if token == "--model":
|
|
1026
1058
|
if model is not None:
|
|
1027
1059
|
raise DelegateError(
|
|
@@ -1132,6 +1164,7 @@ def parse_prompt_tail(
|
|
|
1132
1164
|
prompt_file,
|
|
1133
1165
|
output_schema,
|
|
1134
1166
|
reasoning_effort,
|
|
1167
|
+
fast,
|
|
1135
1168
|
progress_intent,
|
|
1136
1169
|
forbid_commit,
|
|
1137
1170
|
prompt_parts,
|
|
@@ -133,6 +133,16 @@ _OUTPUT_SCHEMA_OPTION = OptionSpec(
|
|
|
133
133
|
"FILE",
|
|
134
134
|
"Codex-only JSON Schema for the final message; also suppresses the completion-report instruction.",
|
|
135
135
|
)
|
|
136
|
+
_FAST_OPTION = OptionSpec(
|
|
137
|
+
"--fast",
|
|
138
|
+
None,
|
|
139
|
+
"Codex only: request the Fast service tier for this run (higher usage).",
|
|
140
|
+
)
|
|
141
|
+
_NO_FAST_OPTION = OptionSpec(
|
|
142
|
+
"--no-fast",
|
|
143
|
+
None,
|
|
144
|
+
"Codex only: request the Standard service tier for this run, overriding inherited Fast mode.",
|
|
145
|
+
)
|
|
136
146
|
_PROGRESS_OPTION = OptionSpec(
|
|
137
147
|
"--progress",
|
|
138
148
|
None,
|
|
@@ -258,14 +268,16 @@ COMMAND_SPECS: dict[str, CommandSpec] = {
|
|
|
258
268
|
usage=(
|
|
259
269
|
"delegate [--json] [--isolation auto|none|worktree] "
|
|
260
270
|
"codex {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] "
|
|
261
|
-
"[--output-schema FILE] [--forbid-commit] [--include-dirty] [--prompt-file PATH] [prompt...]",
|
|
271
|
+
"[--fast|--no-fast] [--output-schema FILE] [--forbid-commit] [--include-dirty] [--prompt-file PATH] [prompt...]",
|
|
262
272
|
"delegate [--json] codex call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] "
|
|
263
|
-
"[--output-schema FILE] [--prompt-file PATH] [prompt...]",
|
|
273
|
+
"[--fast|--no-fast] [--output-schema FILE] [--prompt-file PATH] [prompt...]",
|
|
264
274
|
),
|
|
265
275
|
arguments=(_MODE_ARG, _PROMPT_ARG),
|
|
266
276
|
options=(
|
|
267
277
|
_MODEL_OPTION,
|
|
268
278
|
_REASONING_EFFORT_OPTION,
|
|
279
|
+
_FAST_OPTION,
|
|
280
|
+
_NO_FAST_OPTION,
|
|
269
281
|
_OUTPUT_SCHEMA_OPTION,
|
|
270
282
|
_PROGRESS_OPTION,
|
|
271
283
|
_NO_PROGRESS_OPTION,
|
|
@@ -287,6 +299,8 @@ COMMAND_SPECS: dict[str, CommandSpec] = {
|
|
|
287
299
|
"Reasoning effort is validated against the resolved model and emitted as a Codex "
|
|
288
300
|
"config override; with no codex.defaultModel, explicit --reasoning-effort applies "
|
|
289
301
|
"to the Codex harness default model.",
|
|
302
|
+
"--fast and --no-fast are per-run service-tier overrides. Omitting both inherits "
|
|
303
|
+
"the active Codex configuration; neither changes permissions or reasoning effort.",
|
|
290
304
|
"--output-schema resolves relative paths from the launch cwd and is native Codex "
|
|
291
305
|
"schema enforcement for the final message.",
|
|
292
306
|
"codex.profile is a Codex CLI config overlay; top-level profiles selects "
|
|
@@ -519,10 +533,10 @@ COMMAND_SPECS: dict[str, CommandSpec] = {
|
|
|
519
533
|
"[--prompt-file PATH] [prompt...]",
|
|
520
534
|
"delegate [--json] [--isolation auto|none|worktree] "
|
|
521
535
|
"dry-run codex {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--output-schema FILE] "
|
|
522
|
-
"[--progress] [--forbid-commit] [--include-dirty] [--prompt-file PATH] [prompt...]",
|
|
536
|
+
"[--fast|--no-fast] [--progress] [--forbid-commit] [--include-dirty] [--prompt-file PATH] [prompt...]",
|
|
523
537
|
"delegate [--json] [--isolation auto|none|worktree] "
|
|
524
538
|
"dry-run codex call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--output-schema FILE] "
|
|
525
|
-
"[--prompt-file PATH] [prompt...]",
|
|
539
|
+
"[--fast|--no-fast] [--prompt-file PATH] [prompt...]",
|
|
526
540
|
"delegate [--json] [--isolation auto|none|worktree] "
|
|
527
541
|
"dry-run droid [MODEL_ALIAS] {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] "
|
|
528
542
|
"[--progress] [--forbid-commit] [--include-dirty] [--prompt-file PATH] [prompt...]",
|
|
@@ -542,6 +556,8 @@ COMMAND_SPECS: dict[str, CommandSpec] = {
|
|
|
542
556
|
_MODEL_OPTION,
|
|
543
557
|
_REASONING_EFFORT_OPTION,
|
|
544
558
|
_AGENT_OPTION,
|
|
559
|
+
_FAST_OPTION,
|
|
560
|
+
_NO_FAST_OPTION,
|
|
545
561
|
_OUTPUT_SCHEMA_OPTION,
|
|
546
562
|
_PROGRESS_OPTION,
|
|
547
563
|
_NO_PROGRESS_OPTION,
|
|
@@ -562,6 +578,7 @@ COMMAND_SPECS: dict[str, CommandSpec] = {
|
|
|
562
578
|
notes=(
|
|
563
579
|
"dry-run shares the full engine grammar but launches no child process.",
|
|
564
580
|
"--output-schema is accepted only for codex dry-runs.",
|
|
581
|
+
"--fast and --no-fast are accepted only for codex dry-runs.",
|
|
565
582
|
"Reasoning effort is resolved from config/cache/bundled capabilities without invoking child binaries.",
|
|
566
583
|
),
|
|
567
584
|
see_also=("cursor", "codex", "droid", "kimi", "claude", "grok", "opencode", "describe"),
|
|
@@ -582,7 +599,7 @@ COMMAND_SPECS: dict[str, CommandSpec] = {
|
|
|
582
599
|
examples=("delegate run --input-json task.json",),
|
|
583
600
|
notes=(
|
|
584
601
|
"Accepted JSON keys: engine, mode, model, cwd, prompt, isolation, "
|
|
585
|
-
"reasoningEffort, outputSchema, progress, forbidCommit.",
|
|
602
|
+
"reasoningEffort, fast, outputSchema, progress, forbidCommit.",
|
|
586
603
|
"Use this for long prompts or programmatic invocation.",
|
|
587
604
|
),
|
|
588
605
|
see_also=("cursor", "codex", "droid", "claude", "grok", "agent-help"),
|
|
@@ -1376,8 +1393,8 @@ def render_overview_text() -> str:
|
|
|
1376
1393
|
f"delegate [--cwd PATH] [--json] {iso} cursor call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]",
|
|
1377
1394
|
f"delegate [--cwd PATH] [--json] {iso} droid [MODEL_ALIAS] {{safe,work}} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]",
|
|
1378
1395
|
f"delegate [--cwd PATH] [--json] {iso} droid [MODEL_ALIAS] call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]",
|
|
1379
|
-
f"delegate [--cwd PATH] [--json] {iso} codex {{safe,work}} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--output-schema FILE] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]",
|
|
1380
|
-
f"delegate [--cwd PATH] [--json] {iso} codex call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--output-schema FILE] [--prompt-file PATH] [prompt...]",
|
|
1396
|
+
f"delegate [--cwd PATH] [--json] {iso} codex {{safe,work}} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--output-schema FILE] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]",
|
|
1397
|
+
f"delegate [--cwd PATH] [--json] {iso} codex call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--output-schema FILE] [--prompt-file PATH] [prompt...]",
|
|
1381
1398
|
f"delegate [--cwd PATH] [--json] {iso} claude {{safe,work}} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]",
|
|
1382
1399
|
f"delegate [--cwd PATH] [--json] {iso} claude call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]",
|
|
1383
1400
|
f"delegate [--cwd PATH] [--json] {iso} grok {{safe,work}} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]",
|
|
@@ -1392,8 +1409,8 @@ def render_overview_text() -> str:
|
|
|
1392
1409
|
f"delegate [--cwd PATH] [--json] {iso} dry-run cursor call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]",
|
|
1393
1410
|
f"delegate [--cwd PATH] [--json] {iso} dry-run droid [MODEL_ALIAS] {{safe,work}} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]",
|
|
1394
1411
|
f"delegate [--cwd PATH] [--json] {iso} dry-run droid [MODEL_ALIAS] call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]",
|
|
1395
|
-
f"delegate [--cwd PATH] [--json] {iso} dry-run codex {{safe,work}} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--output-schema FILE] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]",
|
|
1396
|
-
f"delegate [--cwd PATH] [--json] {iso} dry-run codex call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--output-schema FILE] [--prompt-file PATH] [prompt...]",
|
|
1412
|
+
f"delegate [--cwd PATH] [--json] {iso} dry-run codex {{safe,work}} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--output-schema FILE] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]",
|
|
1413
|
+
f"delegate [--cwd PATH] [--json] {iso} dry-run codex call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--output-schema FILE] [--prompt-file PATH] [prompt...]",
|
|
1397
1414
|
f"delegate [--cwd PATH] [--json] {iso} dry-run claude {{safe,work}} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]",
|
|
1398
1415
|
f"delegate [--cwd PATH] [--json] {iso} dry-run claude call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]",
|
|
1399
1416
|
f"delegate [--cwd PATH] [--json] {iso} dry-run grok {{safe,work}} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]",
|
{delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/describe_payload.py
RENAMED
|
@@ -534,7 +534,13 @@ def _policy_field_support_matrix() -> JsonObject:
|
|
|
534
534
|
|
|
535
535
|
|
|
536
536
|
def _engine_capabilities() -> JsonObject:
|
|
537
|
-
return {
|
|
537
|
+
return {
|
|
538
|
+
engine: {
|
|
539
|
+
"outputSchema": engine == "codex",
|
|
540
|
+
"fast": engine == "codex",
|
|
541
|
+
}
|
|
542
|
+
for engine in KNOWN_ENGINES
|
|
543
|
+
}
|
|
538
544
|
|
|
539
545
|
|
|
540
546
|
def _runtime_policy(config: JsonObject, mode: str, engine: str, bypass_check) -> JsonObject:
|
|
@@ -832,11 +838,12 @@ def describe_payload(
|
|
|
832
838
|
"signature": (
|
|
833
839
|
"agent(prompt, engine=None, mode=None, model=None, effort=None, "
|
|
834
840
|
"schema=None, label=None, phase=None, isolation=None, "
|
|
835
|
-
"passthrough=False, timeout=None, retries=None)"
|
|
841
|
+
"passthrough=False, timeout=None, retries=None, fast=None)"
|
|
836
842
|
),
|
|
837
843
|
"returns": "parent-facing output string, schema object, or None",
|
|
838
844
|
"notes": [
|
|
839
845
|
"engine may be a fallback list; child runs are tagged --group <wfId>.",
|
|
846
|
+
"fast is a Codex-only per-run service-tier preference; non-Codex fallbacks ignore it.",
|
|
840
847
|
"passthrough=True is explicit and mutually exclusive with schema= and mode='call'.",
|
|
841
848
|
"cursor/kimi argv transport rejects prompts around 100KB; route large stages to codex/claude/droid/opencode.",
|
|
842
849
|
],
|
|
@@ -87,6 +87,7 @@ RUN_INPUT_KEYS = {
|
|
|
87
87
|
"prompt",
|
|
88
88
|
"isolation",
|
|
89
89
|
"reasoningEffort",
|
|
90
|
+
"fast",
|
|
90
91
|
"outputSchema",
|
|
91
92
|
"progress",
|
|
92
93
|
"forbidCommit",
|
|
@@ -925,6 +926,7 @@ def request_from_parsed(parsed: ParsedCommand, config: JsonObject, stdin: TextIO
|
|
|
925
926
|
isolation_context=None,
|
|
926
927
|
reasoning_effort=launch.reasoning_effort,
|
|
927
928
|
reasoning_effort_source="cli" if launch.reasoning_effort is not None else None,
|
|
929
|
+
fast=launch.fast,
|
|
928
930
|
progress=False,
|
|
929
931
|
forbid_commit=False,
|
|
930
932
|
auth_profile_override=global_options.auth_profile,
|
|
@@ -1042,6 +1044,7 @@ def request_from_parsed(parsed: ParsedCommand, config: JsonObject, stdin: TextIO
|
|
|
1042
1044
|
isolation_context=isolation_context,
|
|
1043
1045
|
reasoning_effort=launch.reasoning_effort,
|
|
1044
1046
|
reasoning_effort_source="cli" if launch.reasoning_effort is not None else None,
|
|
1047
|
+
fast=launch.fast,
|
|
1045
1048
|
progress=effective_progress,
|
|
1046
1049
|
progress_initial_delay_sec=progress_initial_delay_sec,
|
|
1047
1050
|
progress_interval_sec=progress_interval_sec,
|
|
@@ -1113,6 +1116,12 @@ def request_from_input_json(parsed: ParsedCommand, config: JsonObject) -> Reques
|
|
|
1113
1116
|
raise DelegateError(exc.error, "reasoningEffort must be a non-empty string.") from exc
|
|
1114
1117
|
else:
|
|
1115
1118
|
reasoning_effort = None
|
|
1119
|
+
if "fast" in raw and engine != "codex":
|
|
1120
|
+
raise DelegateError("unsupported_fast", "fast is only supported by codex.")
|
|
1121
|
+
raw_fast = raw.get("fast")
|
|
1122
|
+
if raw_fast is not None and not isinstance(raw_fast, bool):
|
|
1123
|
+
raise DelegateError("invalid_fast", "fast must be true, false, null, or omitted.")
|
|
1124
|
+
fast = raw_fast if isinstance(raw_fast, bool) else None
|
|
1116
1125
|
raw_progress_intent: ProgressIntent
|
|
1117
1126
|
if "progress" in raw:
|
|
1118
1127
|
raw_progress = raw["progress"]
|
|
@@ -1211,6 +1220,7 @@ def request_from_input_json(parsed: ParsedCommand, config: JsonObject) -> Reques
|
|
|
1211
1220
|
isolation_context=None,
|
|
1212
1221
|
reasoning_effort=reasoning_effort,
|
|
1213
1222
|
reasoning_effort_source="input-json" if reasoning_effort is not None else None,
|
|
1223
|
+
fast=fast,
|
|
1214
1224
|
progress=False,
|
|
1215
1225
|
forbid_commit=False,
|
|
1216
1226
|
auth_profile_override=global_options.auth_profile,
|
|
@@ -1348,6 +1358,7 @@ def request_from_input_json(parsed: ParsedCommand, config: JsonObject) -> Reques
|
|
|
1348
1358
|
isolation_context=isolation_context,
|
|
1349
1359
|
reasoning_effort=reasoning_effort,
|
|
1350
1360
|
reasoning_effort_source="input-json" if reasoning_effort is not None else None,
|
|
1361
|
+
fast=fast,
|
|
1351
1362
|
progress=effective_progress,
|
|
1352
1363
|
progress_initial_delay_sec=progress_initial_delay_sec,
|
|
1353
1364
|
progress_interval_sec=progress_interval_sec,
|
|
@@ -1377,6 +1388,7 @@ def build_request(
|
|
|
1377
1388
|
isolation_context: IsolationContext | None = None,
|
|
1378
1389
|
reasoning_effort: str | None = None,
|
|
1379
1390
|
reasoning_effort_source: str | None = None,
|
|
1391
|
+
fast: bool | None = None,
|
|
1380
1392
|
progress: bool = False,
|
|
1381
1393
|
progress_initial_delay_sec: float = delegate_runner.PROGRESS_INITIAL_DELAY_SEC,
|
|
1382
1394
|
progress_interval_sec: float = delegate_runner.PROGRESS_HEARTBEAT_INTERVAL_SEC,
|
|
@@ -1405,6 +1417,8 @@ def build_request(
|
|
|
1405
1417
|
reasoning_effort,
|
|
1406
1418
|
reasoning_effort_source=reasoning_effort_source,
|
|
1407
1419
|
)
|
|
1420
|
+
if fast is not None and engine != "codex":
|
|
1421
|
+
raise DelegateError("unsupported_fast", "fast is only supported by codex.")
|
|
1408
1422
|
output_schema = resolve_output_schema(engine, output_schema)
|
|
1409
1423
|
|
|
1410
1424
|
return _build_request_for_workspace(
|
|
@@ -1419,6 +1433,7 @@ def build_request(
|
|
|
1419
1433
|
isolation_context=isolation_context,
|
|
1420
1434
|
requested_effort=requested_effort,
|
|
1421
1435
|
effort_source=effort_source,
|
|
1436
|
+
fast=fast,
|
|
1422
1437
|
progress=progress,
|
|
1423
1438
|
progress_initial_delay_sec=progress_initial_delay_sec,
|
|
1424
1439
|
progress_interval_sec=progress_interval_sec,
|
|
@@ -1612,6 +1627,7 @@ def _codex_request_parts(build: EngineBuildInput) -> EngineRequestParts:
|
|
|
1612
1627
|
workspace_kind=build.resolved.kind,
|
|
1613
1628
|
stream_capture=build.stream_capture,
|
|
1614
1629
|
reasoning_capability=capability,
|
|
1630
|
+
fast=build.fast,
|
|
1615
1631
|
prompt_transport=PROMPT_TRANSPORT_STDIN,
|
|
1616
1632
|
output_schema=build.output_schema,
|
|
1617
1633
|
call_read_only=build.call_read_only,
|
|
@@ -1874,6 +1890,7 @@ def _build_request_for_workspace(
|
|
|
1874
1890
|
isolation_context: IsolationContext | None,
|
|
1875
1891
|
requested_effort: str | None,
|
|
1876
1892
|
effort_source: str | None,
|
|
1893
|
+
fast: bool | None,
|
|
1877
1894
|
progress: bool,
|
|
1878
1895
|
progress_initial_delay_sec: float,
|
|
1879
1896
|
progress_interval_sec: float,
|
|
@@ -1912,6 +1929,7 @@ def _build_request_for_workspace(
|
|
|
1912
1929
|
requested_effort=requested_effort,
|
|
1913
1930
|
effort_source=effort_source,
|
|
1914
1931
|
cache=cache,
|
|
1932
|
+
fast=fast,
|
|
1915
1933
|
output_schema=output_schema,
|
|
1916
1934
|
call_read_only=call_read_only,
|
|
1917
1935
|
model_override=model_override,
|
|
@@ -1935,6 +1953,7 @@ def _build_request_for_workspace(
|
|
|
1935
1953
|
reasoning_effort_source=parts.reasoning_effort_source,
|
|
1936
1954
|
reasoning_capability_source=parts.reasoning_capability_source,
|
|
1937
1955
|
reasoning_transport=parts.reasoning_transport,
|
|
1956
|
+
fast=fast,
|
|
1938
1957
|
progress=progress,
|
|
1939
1958
|
progress_initial_delay_sec=progress_initial_delay_sec,
|
|
1940
1959
|
progress_interval_sec=progress_interval_sec,
|
{delegate_agent_cli-0.13.0 → delegate_agent_cli-0.13.1}/src/delegate_agent/request_models.py
RENAMED
|
@@ -47,6 +47,7 @@ class LaunchOptions:
|
|
|
47
47
|
prompt_file: str | None = None
|
|
48
48
|
output_schema: str | None = None
|
|
49
49
|
reasoning_effort: str | None = None
|
|
50
|
+
fast: bool | None = None
|
|
50
51
|
progress_intent: str | None = None
|
|
51
52
|
forbid_commit: bool = False
|
|
52
53
|
forbid_commit_implied_isolation: bool = False
|
|
@@ -149,6 +150,7 @@ class Request:
|
|
|
149
150
|
reasoning_effort_source: str | None = None
|
|
150
151
|
reasoning_capability_source: str | None = None
|
|
151
152
|
reasoning_transport: str | None = None
|
|
153
|
+
fast: bool | None = None
|
|
152
154
|
progress: bool = False
|
|
153
155
|
progress_initial_delay_sec: float = 30.0
|
|
154
156
|
progress_interval_sec: float = 60.0
|
|
@@ -201,6 +203,7 @@ class EngineBuildInput:
|
|
|
201
203
|
requested_effort: str | None
|
|
202
204
|
effort_source: str | None
|
|
203
205
|
cache: JsonObject | None
|
|
206
|
+
fast: bool | None = None
|
|
204
207
|
output_schema: str | None = None
|
|
205
208
|
call_read_only: bool = False
|
|
206
209
|
model_override: str | None = None
|
|
@@ -30,6 +30,8 @@ REASONING_METADATA_KEYS: MetadataKeyGroup = (
|
|
|
30
30
|
"reasoningTransport",
|
|
31
31
|
)
|
|
32
32
|
|
|
33
|
+
SPEED_METADATA_KEYS: MetadataKeyGroup = ("requestedFast",)
|
|
34
|
+
|
|
33
35
|
SNAPSHOT_STATE_FALLBACK_KEYS: MetadataKeyGroup = (
|
|
34
36
|
"worktreeStatus",
|
|
35
37
|
"safeWorkspaceMethod",
|
|
@@ -40,9 +42,19 @@ SNAPSHOT_MANIFEST_FALLBACK_KEYS: MetadataKeyGroup = (
|
|
|
40
42
|
*PERSISTENT_WORKTREE_METADATA_KEYS,
|
|
41
43
|
"worktreeCleanupCommands",
|
|
42
44
|
*REASONING_METADATA_KEYS,
|
|
45
|
+
*SPEED_METADATA_KEYS,
|
|
43
46
|
)
|
|
44
47
|
|
|
45
48
|
|
|
49
|
+
class SpeedMetadataCarrier(Protocol):
|
|
50
|
+
fast: bool | None
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def add_speed_payload_fields(payload: JsonObject, carrier: SpeedMetadataCarrier) -> None:
|
|
54
|
+
if carrier.fast is not None:
|
|
55
|
+
payload["requestedFast"] = carrier.fast
|
|
56
|
+
|
|
57
|
+
|
|
46
58
|
class RunMetadataCarrier(Protocol):
|
|
47
59
|
isolated_workspace: bool
|
|
48
60
|
isolation_mode: str
|