delegate-agent-cli 0.14.0__tar.gz → 0.16.0__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.
Files changed (135) hide show
  1. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/CHANGELOG.md +77 -0
  2. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/PKG-INFO +11 -12
  3. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/README.md +10 -11
  4. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/config.example.json +1 -1
  5. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/docs/agent-setup.md +2 -2
  6. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/docs/cli-reference.md +81 -63
  7. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/docs/configuration.md +6 -5
  8. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/docs/security-model.md +13 -3
  9. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/docs/troubleshooting.md +17 -7
  10. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/docs/worktrees.md +9 -11
  11. delegate_agent_cli-0.16.0/examples/task.kimi.json +7 -0
  12. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/pyproject.toml +1 -1
  13. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/__init__.py +1 -1
  14. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/argv_builders.py +12 -4
  15. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/bundled_models.py +2 -1
  16. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/cli.py +43 -5
  17. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/cli_parser.py +18 -5
  18. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/command_help.py +137 -75
  19. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/config.py +1 -1
  20. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/constants.py +13 -0
  21. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/describe_payload.py +37 -108
  22. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/harness_events.py +92 -2
  23. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/inspection_commands.py +2 -5
  24. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/isolation.py +24 -25
  25. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/profiles.py +20 -0
  26. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/rendering.py +10 -5
  27. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/request_build.py +10 -4
  28. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/request_models.py +1 -0
  29. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/run_output_commands.py +6 -10
  30. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/run_registry.py +74 -1
  31. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/runner.py +693 -164
  32. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/safe_workspace.py +118 -60
  33. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/wait_cancel_commands.py +207 -141
  34. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/workflows/runtime.py +8 -0
  35. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/worktree_execution.py +157 -48
  36. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/worktree_remove.py +10 -1
  37. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent_cli.egg-info/PKG-INFO +11 -12
  38. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent_cli.egg-info/SOURCES.txt +2 -0
  39. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_codex_pure_sandbox.py +1 -0
  40. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_delegate_help_cli.py +47 -2
  41. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_delegate_isolation.py +56 -14
  42. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_delegate_parser.py +29 -2
  43. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_engine_argv.py +54 -37
  44. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_execution_argv_and_prompt.py +71 -0
  45. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_execution_worktree_failure_cleanup.py +19 -2
  46. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_execution_worktree_preflight.py +76 -187
  47. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_harness_events.py +342 -0
  48. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_kimi_commands.py +2 -1
  49. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_model_discovery.py +5 -0
  50. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_model_selection_wave1b.py +5 -3
  51. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_profiles.py +48 -1
  52. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_pure_call.py +7 -3
  53. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_run_registry.py +6 -0
  54. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_runner_capture.py +1391 -0
  55. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_safe_workspace_isolation.py +95 -0
  56. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_slash_passthrough.py +8 -3
  57. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_snapshot_run_output.py +59 -0
  58. delegate_agent_cli-0.16.0/tests/test_tracked_timeout.py +377 -0
  59. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_utility_modules.py +1 -0
  60. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_wait_cancel_commands.py +460 -1
  61. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_wave4_launch_features.py +157 -6
  62. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_workflow_commands.py +15 -0
  63. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_worktree_remove.py +17 -0
  64. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/CONTRIBUTING.md +0 -0
  65. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/LICENSE +0 -0
  66. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/MANIFEST.in +0 -0
  67. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/SECURITY.md +0 -0
  68. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/bin/delegate-profile-shim +0 -0
  69. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/bin/delegate.py +0 -0
  70. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/docs/assets/delegate-agent-header.png +0 -0
  71. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/docs/development.md +0 -0
  72. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/docs/live-runtime.md +0 -0
  73. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/docs/publishing-checklist.md +0 -0
  74. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/examples/task.claude.json +0 -0
  75. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/examples/task.codex.json +0 -0
  76. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/examples/task.cursor.json +0 -0
  77. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/examples/task.droid.json +0 -0
  78. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/examples/task.grok.json +0 -0
  79. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/examples/task.judge.json +0 -0
  80. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/setup.cfg +0 -0
  81. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/archived_logs.py +0 -0
  82. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/argv_utils.py +0 -0
  83. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/capability_commands.py +0 -0
  84. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/command_errors.py +0 -0
  85. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/config_commands.py +0 -0
  86. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/errors.py +0 -0
  87. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/git_utils.py +0 -0
  88. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/json_types.py +0 -0
  89. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/log_output.py +0 -0
  90. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/model_discovery.py +0 -0
  91. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/private_io.py +0 -0
  92. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/profile_commands.py +0 -0
  93. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/profile_guard.py +0 -0
  94. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/prompt_instructions.py +0 -0
  95. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/prompt_transport.py +0 -0
  96. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/reasoning.py +0 -0
  97. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/redaction.py +0 -0
  98. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/retention.py +0 -0
  99. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/run_metadata.py +0 -0
  100. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/run_status.py +0 -0
  101. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/seatbelt.py +0 -0
  102. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/snapshot_view.py +0 -0
  103. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/workflows/__init__.py +0 -0
  104. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/workflows/commands.py +0 -0
  105. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/workflows/registry.py +0 -0
  106. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/workflows/schema.py +0 -0
  107. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/workflows/script.py +0 -0
  108. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/worktree_commands.py +0 -0
  109. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/worktree_gc.py +0 -0
  110. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/worktree_mgmt.py +0 -0
  111. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/worktree_records.py +0 -0
  112. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/worktree_summary.py +0 -0
  113. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent/wsl.py +0 -0
  114. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent_cli.egg-info/dependency_links.txt +0 -0
  115. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent_cli.egg-info/entry_points.txt +0 -0
  116. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent_cli.egg-info/requires.txt +0 -0
  117. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/src/delegate_agent_cli.egg-info/top_level.txt +0 -0
  118. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_capability_commands.py +0 -0
  119. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_command_help.py +0 -0
  120. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_config_commands.py +0 -0
  121. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_delegate_validation.py +0 -0
  122. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_end_to_end_tracking.py +0 -0
  123. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_execution_dry_run.py +0 -0
  124. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_execution_worktree_run.py +0 -0
  125. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_inspection_commands.py +0 -0
  126. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_model_selection_wave1a.py +0 -0
  127. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_packaging.py +0 -0
  128. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_reasoning_capabilities.py +0 -0
  129. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_retention.py +0 -0
  130. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_snapshot_redaction.py +0 -0
  131. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_snapshot_rendering.py +0 -0
  132. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_snapshot_view.py +0 -0
  133. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_worktree_list_show.py +0 -0
  134. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_worktree_prune_gc.py +0 -0
  135. {delegate_agent_cli-0.14.0 → delegate_agent_cli-0.16.0}/tests/test_wsl_guardrails.py +0 -0
@@ -5,6 +5,81 @@ 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
+ ## [Unreleased]
9
+
10
+ ## [0.16.0] - 2026-07-16
11
+
12
+ ### Added
13
+
14
+ - `--timeout` is now accepted and enforced on tracked `safe` and `work` runs
15
+ across engines. It remains rejected with `--pass-through`, and deadline
16
+ failures keep the historical `call_timeout` error code.
17
+ - Kimi tool-call activity is normalized into `tool.started`/`tool.completed`
18
+ events with id correlation; `status` stays unset because Kimi tool results
19
+ carry no result-status signal.
20
+
21
+ ### Changed
22
+
23
+ - Persistent-worktree runs that fail after the worktree is realized
24
+ (child-launch errors, timeouts) now keep `worktreeStatus: present`,
25
+ `executionCwd`, `branch`, and `worktreeCleanupCommands` in the failed-run
26
+ record, so the preserved worktree stays inspectable and removable via
27
+ `delegate worktree show|remove` instead of being orphaned.
28
+ - The Kimi default model is now `kimi-code/k3`, and the bundled Kimi catalog
29
+ lists exactly the three real model IDs (`kimi-code/k3`,
30
+ `kimi-code/kimi-for-coding`, `kimi-code/kimi-for-coding-highspeed`); the
31
+ stale `kimi-k2.7` entry was removed.
32
+ - Docs clarifications: Kimi reasoning-effort wording now states that the Kimi
33
+ CLI exposes no effort flag (k3 supports effort internally via
34
+ `~/.kimi-code/config.toml`) and that Delegate rejects `--reasoning-effort`
35
+ for Kimi; the CLI reference notes that `usage: unavailable` in Kimi run JSON
36
+ is expected because the Kimi CLI emits no usage/token lines in stream-json
37
+ output.
38
+ - Kimi work-mode docs restate current behavior: Delegate emits no `--yolo` —
39
+ Kimi prompt mode auto-approves tool actions, and work mode edits the real
40
+ workspace by default. Temporary safe isolation or explicit worktree
41
+ isolation provides a workspace boundary, not a complete host sandbox.
42
+
43
+ ## [0.15.0] - 2026-07-16
44
+
45
+ ### Added
46
+
47
+ - Work-mode worktree isolation now automatically carries tracked edits and
48
+ untracked, non-ignored files into the new worktree, with tracked/untracked
49
+ counts in human and JSON warnings and fail-clean teardown on sync errors.
50
+ - Child environments expose authoritative source/execution root metadata, and
51
+ Delegate-managed snapshot and worktree cleanup refuses targets that are or
52
+ contain the source workspace.
53
+ - Empty successful safe and read-only call results retry once when the prompt
54
+ can be safely extended; tracked runs retain both attempts and envelopes report
55
+ `emptyRetry` only when a retry was attempted.
56
+ - Bare Harness resolution in Snapshot, run-output, and wait now reports the
57
+ resolved Run, Alias, workspace, and age, with a stale-resolution warning after
58
+ 24 hours.
59
+
60
+ ### Changed
61
+
62
+ - `run-output --tail N` now selects stdout when no output stream or Completion
63
+ Report was requested; stderr remains opt-in.
64
+ - Devin safe mode now fails during preflight with `unsupported_mode` rather than
65
+ launching without an enforceable read-only boundary.
66
+ - Call children use their throwaway cwd as `DELEGATE_SOURCE_ROOT`; the
67
+ Registry/config workspace is not disclosed to a stateless call.
68
+
69
+ ### Fixed
70
+
71
+ - Empty-result retries now preserve cumulative duration, byte counts, usage,
72
+ truncation, stdin diagnostics, timeout budgets, and tracked launch-failure
73
+ state across primary, authentication-fallback, and retry attempts.
74
+ - Source-root cleanup guards now handle relative, symlinked, case-variant,
75
+ unresolved, and malformed paths conservatively without blocking safe cleanup
76
+ of source descendants.
77
+ - Dirty worktree sync preserves arbitrary filename bytes, rejects unsyncable
78
+ dirty submodules with escaped diagnostics, and documents the same behavior
79
+ consistently across the CLI reference and worktree guidance.
80
+ - Devin help and discovery surfaces now derive supported modes consistently and
81
+ reject unknown modes before constructing executable arguments.
82
+
8
83
  ## [0.14.0] - 2026-07-15
9
84
 
10
85
  ### Added
@@ -350,6 +425,8 @@ Usage-audit fix wave: 82 sessions and 1,241 delegate invocations from one week o
350
425
 
351
426
  - Releases before 0.1.3 predate this changelog.
352
427
 
428
+ [0.16.0]: https://github.com/treygoff24/delegate-agent/compare/v0.15.0...v0.16.0
429
+ [0.15.0]: https://github.com/treygoff24/delegate-agent/compare/v0.14.0...v0.15.0
353
430
  [0.14.0]: https://github.com/treygoff24/delegate-agent/compare/v0.13.1...v0.14.0
354
431
  [0.13.1]: https://github.com/treygoff24/delegate-agent/compare/v0.13.0...v0.13.1
355
432
  [0.13.0]: https://github.com/treygoff24/delegate-agent/compare/v0.12.0...v0.13.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: delegate-agent-cli
3
- Version: 0.14.0
3
+ Version: 0.16.0
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
@@ -163,7 +163,6 @@ Run a read-only review in an isolated throwaway workspace:
163
163
  delegate codex safe "Review this repository for correctness risks. Do not edit files."
164
164
  delegate claude safe "Review this repository for correctness risks. Do not edit files."
165
165
  delegate grok safe "Review this repository for correctness risks. Do not edit files."
166
- delegate devin safe "Review this repository for correctness risks. Do not edit files."
167
166
  delegate opencode safe "Review this repository for correctness risks. Do not edit files."
168
167
  delegate cursor safe "Review the current diff for regressions. Do not edit files."
169
168
  delegate kimi safe "Review this repository for regressions. Do not edit files."
@@ -191,7 +190,7 @@ raw model ID passed through verbatim). Droid still accepts a positional alias;
191
190
  `--model` works on every engine, including Droid:
192
191
 
193
192
  ```bash
194
- delegate devin safe --model claude-fable-5 "Review this repository. Do not edit files."
193
+ delegate devin work --model implementer "Implement the scoped change and report it."
195
194
  delegate droid work --model custom:my-model "Implement the scoped change."
196
195
  delegate --json dry-run codex safe --model fast "Review this repository. Do not edit files."
197
196
  ```
@@ -230,7 +229,7 @@ prompt framing, and no session persistence or tools according to the engine
230
229
  capability contract. Claude receives the prompt only on stdin and is
231
230
  schema-capable via `--output-schema`; `delegate --json describe` reports
232
231
  `pureCall`, `structuredOutput`, `noSessionPersistence`, `usageEvents`, and
233
- `promptStdin` per engine. `--timeout SECONDS` applies to every call-mode engine.
232
+ `promptStdin` per engine. `--timeout SECONDS` applies to every engine in any mode (calls and tracked safe/work runs, but not `--pass-through`).
234
233
 
235
234
  For multi-step fan-out or gated review flows, use Delegate Workflows. A workflow
236
235
  is a Python script that launches normal Delegate child runs, journals progress,
@@ -327,9 +326,9 @@ Delegate separates three ideas:
327
326
 
328
327
  Defaults are intentionally conservative for review paths:
329
328
 
330
- - `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.
329
+ - `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok 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.
331
330
  - 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.
332
- - 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.
331
+ - Devin safe mode is unsupported: Devin may implement filesystem surveys through the generic `exec` tool, which Delegate cannot permit without weakening the read-only boundary. Use another safe Harness for filesystem review. Devin work mode uses `--permission-mode dangerous` because Devin print mode rejects unapproved edit/exec tools.
333
332
  - 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.
334
333
  - 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.
335
334
  - `work` mode can edit. By default it runs in the real workspace for backward compatibility.
@@ -352,12 +351,12 @@ child where that summary is available. `--forbid-commit` fails the run if
352
351
  commits remain ahead of the creation base when the child exits, and it now
353
352
  implies `--isolation worktree`.
354
353
 
355
- To carry uncommitted local work into the worktree instead of stashing it, add
356
- `--include-dirty`: it syncs tracked edits and untracked, non-ignored files into
357
- the worktree through the same snapshot primitives as safe mode, and tears the
358
- worktree down before launching the child if that sync fails.
354
+ Work-mode worktree runs automatically sync tracked edits and untracked,
355
+ non-ignored files from a dirty source checkout before launch, report the counts
356
+ in a `dirty_source_auto_included` warning, and tear down the worktree if syncing
357
+ fails. `--include-dirty` remains an explicit, harmless no-op on a clean source.
359
358
 
360
- 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`.
359
+ 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/OpenCode/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
361
360
 
362
361
  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.
363
362
 
@@ -399,6 +398,6 @@ AI_PROFILE delegate ...` uses the base config, or set
399
398
 
400
399
  - Delegate is an alpha CLI wrapper. Child runtimes can change their own flags or behavior.
401
400
  - Safe mode is a policy and isolation pattern, not a guarantee that a runtime cannot perform side effects outside its execution workspace.
402
- - Persistent worktrees require a Git repository with a valid `HEAD`; work-mode worktree runs require a clean source checkout.
401
+ - Persistent worktrees require a Git repository with a valid `HEAD`.
403
402
  - `--pass-through` is incompatible with `--json` and with persistent worktree runs.
404
403
  - Delegate stores local run metadata under `.delegate/`; do not commit that directory.
@@ -130,7 +130,6 @@ Run a read-only review in an isolated throwaway workspace:
130
130
  delegate codex safe "Review this repository for correctness risks. Do not edit files."
131
131
  delegate claude safe "Review this repository for correctness risks. Do not edit files."
132
132
  delegate grok safe "Review this repository for correctness risks. Do not edit files."
133
- delegate devin safe "Review this repository for correctness risks. Do not edit files."
134
133
  delegate opencode safe "Review this repository for correctness risks. Do not edit files."
135
134
  delegate cursor safe "Review the current diff for regressions. Do not edit files."
136
135
  delegate kimi safe "Review this repository for regressions. Do not edit files."
@@ -158,7 +157,7 @@ raw model ID passed through verbatim). Droid still accepts a positional alias;
158
157
  `--model` works on every engine, including Droid:
159
158
 
160
159
  ```bash
161
- delegate devin safe --model claude-fable-5 "Review this repository. Do not edit files."
160
+ delegate devin work --model implementer "Implement the scoped change and report it."
162
161
  delegate droid work --model custom:my-model "Implement the scoped change."
163
162
  delegate --json dry-run codex safe --model fast "Review this repository. Do not edit files."
164
163
  ```
@@ -197,7 +196,7 @@ prompt framing, and no session persistence or tools according to the engine
197
196
  capability contract. Claude receives the prompt only on stdin and is
198
197
  schema-capable via `--output-schema`; `delegate --json describe` reports
199
198
  `pureCall`, `structuredOutput`, `noSessionPersistence`, `usageEvents`, and
200
- `promptStdin` per engine. `--timeout SECONDS` applies to every call-mode engine.
199
+ `promptStdin` per engine. `--timeout SECONDS` applies to every engine in any mode (calls and tracked safe/work runs, but not `--pass-through`).
201
200
 
202
201
  For multi-step fan-out or gated review flows, use Delegate Workflows. A workflow
203
202
  is a Python script that launches normal Delegate child runs, journals progress,
@@ -294,9 +293,9 @@ Delegate separates three ideas:
294
293
 
295
294
  Defaults are intentionally conservative for review paths:
296
295
 
297
- - `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.
296
+ - `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok 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.
298
297
  - 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.
299
- - 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.
298
+ - Devin safe mode is unsupported: Devin may implement filesystem surveys through the generic `exec` tool, which Delegate cannot permit without weakening the read-only boundary. Use another safe Harness for filesystem review. Devin work mode uses `--permission-mode dangerous` because Devin print mode rejects unapproved edit/exec tools.
300
299
  - 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.
301
300
  - 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.
302
301
  - `work` mode can edit. By default it runs in the real workspace for backward compatibility.
@@ -319,12 +318,12 @@ child where that summary is available. `--forbid-commit` fails the run if
319
318
  commits remain ahead of the creation base when the child exits, and it now
320
319
  implies `--isolation worktree`.
321
320
 
322
- To carry uncommitted local work into the worktree instead of stashing it, add
323
- `--include-dirty`: it syncs tracked edits and untracked, non-ignored files into
324
- the worktree through the same snapshot primitives as safe mode, and tears the
325
- worktree down before launching the child if that sync fails.
321
+ Work-mode worktree runs automatically sync tracked edits and untracked,
322
+ non-ignored files from a dirty source checkout before launch, report the counts
323
+ in a `dirty_source_auto_included` warning, and tear down the worktree if syncing
324
+ fails. `--include-dirty` remains an explicit, harmless no-op on a clean source.
326
325
 
327
- 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`.
326
+ 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/OpenCode/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
328
327
 
329
328
  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.
330
329
 
@@ -366,6 +365,6 @@ AI_PROFILE delegate ...` uses the base config, or set
366
365
 
367
366
  - Delegate is an alpha CLI wrapper. Child runtimes can change their own flags or behavior.
368
367
  - Safe mode is a policy and isolation pattern, not a guarantee that a runtime cannot perform side effects outside its execution workspace.
369
- - Persistent worktrees require a Git repository with a valid `HEAD`; work-mode worktree runs require a clean source checkout.
368
+ - Persistent worktrees require a Git repository with a valid `HEAD`.
370
369
  - `--pass-through` is incompatible with `--json` and with persistent worktree runs.
371
370
  - Delegate stores local run metadata under `.delegate/`; do not commit that directory.
@@ -95,7 +95,7 @@
95
95
  },
96
96
  "kimi": {
97
97
  "binary": "kimi",
98
- "defaultModel": "kimi-code/kimi-for-coding",
98
+ "defaultModel": "kimi-code/k3",
99
99
  "defaultReasoningEffort": null
100
100
  },
101
101
  "isolation": {
@@ -96,7 +96,7 @@ When running on Windows through WSL, treat Delegate as a Linux CLI:
96
96
  delegate --json dry-run claude safe --reasoning-effort high "Review only. Do not edit files."
97
97
  delegate --json dry-run grok safe "Review only. Do not edit files."
98
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."
99
+ delegate --json dry-run devin work "Describe the planned work invocation."
100
100
  delegate --json dry-run opencode safe "Review only. Do not edit files."
101
101
  delegate --json dry-run opencode safe --reasoning-effort high "Review only. Do not edit files."
102
102
  delegate --json dry-run cursor safe "Review only. Do not edit files."
@@ -104,7 +104,7 @@ When running on Windows through WSL, treat Delegate as a Linux CLI:
104
104
  delegate --json dry-run kimi safe "Review only. Do not edit files."
105
105
  ```
106
106
 
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.
107
+ The Codex, Claude, Grok, Devin work, OpenCode, Cursor, and Kimi dry-runs succeed with the unedited example config when no reasoning effort is requested. Devin safe mode is intentionally rejected because filesystem surveys may require generic `exec`, which cannot be allowed without weakening the read-only boundary. 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
108
 
109
109
  ### OpenCode
110
110
 
@@ -20,33 +20,33 @@ Use `delegate --help` for the exact command list from the installed version. Glo
20
20
  ### Direct runtime commands
21
21
 
22
22
  ```bash
23
- delegate cursor safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
24
- delegate cursor work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
25
- delegate cursor call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
23
+ delegate cursor safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
24
+ delegate cursor work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
25
+ delegate cursor call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
26
26
 
27
- delegate droid [MODEL_ALIAS] safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
28
- delegate droid [MODEL_ALIAS] work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
29
- delegate droid [MODEL_ALIAS] call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
27
+ delegate droid [MODEL_ALIAS] safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
28
+ delegate droid [MODEL_ALIAS] work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
29
+ delegate droid [MODEL_ALIAS] call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
30
30
 
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...]
31
+ delegate codex safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [--output-schema FILE] [prompt...]
32
+ delegate codex work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [--output-schema FILE] [prompt...]
33
+ delegate codex call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--prompt-file PATH] [--output-schema FILE] [prompt...]
34
34
 
35
- delegate claude safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
36
- delegate claude work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
37
- delegate claude call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
35
+ delegate claude safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
36
+ delegate claude work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
37
+ delegate claude call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
38
38
 
39
- delegate grok safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
40
- delegate grok work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
41
- delegate grok call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
39
+ delegate grok safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
40
+ delegate grok work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
41
+ delegate grok call [--read-only] [--timeout SECONDS] [--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...]
43
+ delegate opencode safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
44
+ delegate opencode work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
45
+ delegate opencode call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--prompt-file PATH] [prompt...]
46
46
 
47
- delegate kimi safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
48
- delegate kimi work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
49
- delegate kimi call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
47
+ delegate kimi safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
48
+ delegate kimi work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
49
+ delegate kimi call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
50
50
  ```
51
51
 
52
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
@@ -82,7 +82,7 @@ and advisory catalogs with `delegate models`, `delegate models <engine>`, and
82
82
  `delegate models <engine> --live` (live probes for cursor/droid/devin/opencode; other
83
83
  engines report live unsupported).
84
84
 
85
- `--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.
85
+ `--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. The Kimi CLI exposes no effort flag; k3 supports effort internally via `~/.kimi-code/config.toml`, so Delegate rejects `--reasoning-effort` for Kimi.
86
86
 
87
87
  `--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.
88
88
 
@@ -103,12 +103,13 @@ warning plus suggested review commands, but does not fail solely because commits
103
103
  exist. Validation rejects `--forbid-commit` outside `work` mode, and explicit
104
104
  `--isolation none --forbid-commit` remains invalid.
105
105
 
106
- `--include-dirty` is an opt-in launch flag for `work` mode with persistent
107
- worktree isolation. It copies uncommitted tracked changes and untracked
108
- non-ignored files from the source checkout into the new persistent worktree
109
- before the child starts. Gitignored files remain excluded, and external symlinks
110
- are blocked with the same protections used by safe-mode workspace sync. Without
111
- the flag, persistent worktree launches still require a clean source checkout.
106
+ Work-mode persistent worktrees automatically copy uncommitted tracked changes
107
+ and untracked non-ignored files from a dirty source checkout before the child
108
+ starts. Gitignored files remain excluded, and external symlinks are blocked with
109
+ the same protections used by safe-mode workspace sync. Automatic sync emits a
110
+ `dirty_source_auto_included` warning with tracked-modified and untracked counts.
111
+ `--include-dirty` remains an explicit launch flag and is a no-op when the source
112
+ is already clean.
112
113
  JSON and text completion output report `includeDirty: true` / `syncedFiles`.
113
114
  `run --input-json` accepts the equivalent boolean field `includeDirty`.
114
115
 
@@ -118,11 +119,9 @@ A few boundaries are worth stating explicitly:
118
119
  repo history but also matched by a `.gitignore` rule is part of the repository
119
120
  and is synced like any other tracked file; `--include-dirty` excludes only
120
121
  untracked gitignored paths, not tracked ones.
121
- - **`--include-dirty` skips the submodule-cleanliness portion of the clean
122
- check.** Without the flag, the preflight requires a clean source checkout
123
- including submodule state; with the flag, the entire clean-source check is
124
- skipped, so dirty submodules do not block the launch and submodule
125
- working-tree state is not mirrored.
122
+ - **Dirty submodules fail preflight.** Delegate auto-syncs ordinary tracked and
123
+ untracked non-ignored source changes, but cannot safely reproduce dirty
124
+ submodule state, so it refuses the launch until that submodule is clean.
126
125
  - **Keep secrets out of hardlinks.** A hardlink at a non-ignored path to
127
126
  gitignored content is indistinguishable from a regular file and will sync by
128
127
  content; `--include-dirty` trusts every non-ignored path. Path-based exclusion
@@ -151,8 +150,8 @@ auth/env selection happens.
151
150
  Usage:
152
151
 
153
152
  ```bash
154
- delegate [--json] [--isolation auto|none|worktree] codex {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--progress] [--forbid-commit] [--prompt-file PATH] [--output-schema FILE] [prompt...]
155
- delegate [--json] codex call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--prompt-file PATH] [--output-schema FILE] [prompt...]
153
+ delegate [--json] [--isolation auto|none|worktree] codex {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [--output-schema FILE] [prompt...]
154
+ delegate [--json] codex call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--fast|--no-fast] [--prompt-file PATH] [--output-schema FILE] [prompt...]
156
155
  ```
157
156
 
158
157
  - 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.
@@ -166,7 +165,7 @@ Examples:
166
165
 
167
166
  ```bash
168
167
  delegate codex safe "Review this repo for regressions; report file/line/severity."
169
- delegate codex safe --model gpt-5.5 "Review this repo for regressions; report file/line/severity."
168
+ delegate codex safe --model reviewer "Review this repo for regressions; report file/line/severity."
170
169
  delegate codex safe --model my-alias --reasoning-effort medium --fast "Explore likely causes."
171
170
  delegate codex work "Implement the scoped task; report changed files and tests."
172
171
  delegate codex call "Summarize this context in three bullets."
@@ -179,8 +178,8 @@ delegate --isolation worktree codex work "Implement the feature in a persistent
179
178
  Usage:
180
179
 
181
180
  ```bash
182
- delegate [--json] [--isolation auto|none|worktree] claude {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
183
- delegate [--json] claude call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
181
+ delegate [--json] [--isolation auto|none|worktree] claude {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
182
+ delegate [--json] claude call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
184
183
  ```
185
184
 
186
185
  - 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. Under `--isolation auto`, Claude safe uses `--permission-mode plan`, `--strict-mcp-config`, Read/Grep/Glob, and selected read-only Bash tools such as `git diff`/`git status`.
@@ -195,7 +194,7 @@ Examples:
195
194
 
196
195
  ```bash
197
196
  delegate claude safe "Review this repo for regressions; report file/line/severity."
198
- delegate claude work --model claude-opus-4-6 "Implement the scoped task; report changed files and tests."
197
+ delegate claude work --model implementer "Implement the scoped task; report changed files and tests."
199
198
  delegate claude call "Summarize this context in three bullets."
200
199
  delegate --isolation worktree claude work "Implement the feature in a persistent worktree."
201
200
  ```
@@ -205,8 +204,8 @@ delegate --isolation worktree claude work "Implement the feature in a persistent
205
204
  Usage:
206
205
 
207
206
  ```bash
208
- delegate [--json] [--isolation auto|none|worktree] grok {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
209
- delegate [--json] grok call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
207
+ delegate [--json] [--isolation auto|none|worktree] grok {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
208
+ delegate [--json] grok call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
210
209
  ```
211
210
 
212
211
  - Safe mode reviews your **current working tree** in an isolated throwaway copy plus Grok read-only controls (`--sandbox read-only`, `--permission-mode dontAsk` by default). Delegate does not use Grok `plan` mode for safe review.
@@ -230,8 +229,8 @@ delegate --isolation worktree grok work "Implement the feature in a persistent w
230
229
  Wraps OpenCode's non-interactive `run` command.
231
230
 
232
231
  ```bash
233
- 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...]
234
- delegate [--json] opencode call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--prompt-file PATH] [prompt...]
232
+ delegate [--json] [--isolation auto|none|worktree] opencode {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
233
+ delegate [--json] opencode call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--prompt-file PATH] [prompt...]
235
234
  ```
236
235
 
237
236
  - Safe mode reviews the current working tree in an isolated throwaway copy. It
@@ -251,9 +250,9 @@ delegate [--json] opencode call [--read-only] [--model <alias-or-model>] [--reas
251
250
  {
252
251
  "opencode": {
253
252
  "models": {
254
- "sonnet": "anthropic/claude-sonnet-4-5",
255
- "sonnet-high": {
256
- "model": "anthropic/claude-sonnet-4-5",
253
+ "reviewer": "provider/model",
254
+ "reviewer-high": {
255
+ "model": "provider/model",
257
256
  "variant": "high"
258
257
  }
259
258
  }
@@ -273,14 +272,15 @@ delegate [--json] opencode call [--read-only] [--model <alias-or-model>] [--reas
273
272
  `workflows.engineCaps` like other engines.
274
273
  - OpenCode currently buffers stdout until completion, so progress can remain
275
274
  silent even though `--print-logs` stderr is visible. Sessions accumulate in
276
- the user's global OpenCode state. Call mode has no Delegate timeout.
275
+ the user's global OpenCode state. Call mode has no Delegate timeout unless
276
+ `--timeout` is set.
277
277
 
278
278
  Examples:
279
279
 
280
280
  ```bash
281
281
  delegate opencode safe "Review this repo for regressions; report file/line/severity."
282
282
  delegate opencode work --agent build "Implement the scoped task; report changed files and tests."
283
- delegate opencode call --read-only --model anthropic/claude-sonnet-4-5 --prompt-file rubric.md
283
+ delegate opencode call --read-only --model reviewer --prompt-file rubric.md
284
284
  delegate --isolation worktree opencode work "Implement the feature in a persistent worktree."
285
285
  ```
286
286
 
@@ -289,15 +289,16 @@ delegate --isolation worktree opencode work "Implement the feature in a persiste
289
289
  Usage:
290
290
 
291
291
  ```bash
292
- delegate [--json] [--isolation auto|none|worktree] kimi {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--forbid-commit] [--prompt-file PATH] [prompt...]
293
- delegate [--json] kimi call [--read-only] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
292
+ delegate [--json] [--isolation auto|none|worktree] kimi {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
293
+ delegate [--json] kimi call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
294
294
  ```
295
295
 
296
296
  - 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. Under `--isolation auto`, Kimi safe uses a read-only safety prompt. Delegate intentionally avoids Kimi `--plan` in safe mode. Kimi prompt mode auto-approves tool actions, so the isolation is the effective write boundary; the safety prompt is advisory.
297
297
  - Work mode uses Kimi prompt mode and runs in the real workspace unless you opt into worktree isolation. Delegate does not emit `--yolo` because Kimi rejects combining `--yolo` with `--prompt`.
298
298
  - Model selection uses `--model` (alias from `kimi.models` or a raw model ID), the run-input JSON `model`, or `kimi.defaultModel`.
299
- - `--reasoning-effort` is unsupported for Kimi in v1.
299
+ - `--reasoning-effort` is rejected for Kimi: the Kimi CLI exposes no effort flag, and k3 supports effort internally via `~/.kimi-code/config.toml`.
300
300
  - Kimi prompt text is passed via argv.
301
+ - Run JSON reports `usage: unavailable` for Kimi — expected: the Kimi CLI (verified 0.26.0) emits no usage/token lines in stream-json output, so there is nothing to parse.
301
302
 
302
303
  Examples:
303
304
 
@@ -431,12 +432,16 @@ and ambient customization, disables session persistence, and receives the prompt
431
432
  only on stdin. Use `--output-schema FILE` with Claude (schema contents inline)
432
433
  or with ordinary Codex call mode (schema path).
433
434
 
434
- `--timeout SECONDS` is a positive integer available on every call-mode engine.
435
- On expiry Delegate terminates the whole child process group and returns
436
- `call_timeout` with exit code 1.
435
+ `--timeout SECONDS` is a positive integer accepted in every mode. It bounds
436
+ calls and tracked `safe`/`work` runs alike: on expiry Delegate terminates the
437
+ whole child process group and returns `call_timeout` (a historical error-code
438
+ name kept for API stability) with exit code 1. `--timeout` is not supported
439
+ with `--pass-through`, which streams the child without a tracked deadline.
437
440
 
438
- `--read-only`, `--pure`, and `--timeout` apply only to `call`; passing them with
439
- `safe`/`work` is rejected.
441
+ `--read-only` and `--pure` apply only to `call`; passing them with
442
+ `safe`/`work` is rejected. Empty-result retry applies to safe runs and read-only
443
+ calls when the prompt can be safely extended; write-capable, pure, and verbatim
444
+ calls are not retried.
440
445
  Because the child call is stateless, `--isolation`, `--pass-through`,
441
446
  `--progress`, `--forbid-commit`, and markdown completion reports are rejected.
442
447
  An ordinary call also rejects `--cwd`.
@@ -451,7 +456,7 @@ delegate --cwd /path/to/project --group wf_0123abcdef45 codex call "Summarize th
451
456
  ```
452
457
 
453
458
  The child still executes in an empty temporary cwd; `--cwd` does not give it the
454
- project tree. Dry-run accepts the same combination for faithful planning but
459
+ project tree or leak it through Delegate root metadata. Dry-run accepts the same combination for faithful planning but
455
460
  creates no run entry. Use `safe` or `work` when the child should see the project
456
461
  tree.
457
462
 
@@ -499,7 +504,7 @@ Typical dry-run JSON fields:
499
504
 
500
505
  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.
501
506
 
502
- For Cursor, Claude, Grok, Devin, OpenCode, Droid, and Kimi safe mode, an explicit `--isolation none`
507
+ For Cursor, Claude, Grok, OpenCode, Droid, and Kimi safe mode, an explicit `--isolation none`
503
508
  is normalized to `auto` with a warning because those safe contracts depend on
504
509
  the temporary workspace/config boundary. Codex safe can use `none` because Codex
505
510
  still runs with its read-only sandbox.
@@ -578,6 +583,7 @@ Supported input keys:
578
583
  "progress": true,
579
584
  "forbidCommit": true,
580
585
  "includeDirty": true,
586
+ "timeout": 30,
581
587
  "outputSchema": "/path/to/schema.json",
582
588
  "prompt": "Implement the scoped task and report changed files."
583
589
  }
@@ -585,14 +591,16 @@ Supported input keys:
585
591
 
586
592
  - `engine`: `cursor`, `droid`, `codex`, `claude`, `grok`, `devin`, `opencode`, or `kimi`.
587
593
  - `mode`: `safe`, `work`, or `call`.
594
+ - The `devin` engine rejects `safe` with `unsupported_mode` during preflight. Devin filesystem surveys may require generic `exec`, which Delegate cannot allow without weakening the read-only boundary; use another safe Harness for filesystem review.
588
595
  - `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`.
589
596
  - `cwd`: optional workspace path. Git directories resolve to the repo root. Omit it for `mode: "call"`, which always uses an empty temporary cwd.
590
- - `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.
597
+ - `isolation`: optional `auto`, `none`, or `worktree`. `null` is invalid. `mode: "call"` rejects isolation. For Cursor, Claude, Grok, OpenCode, Droid, and Kimi safe mode, `none` is normalized to `auto` with a warning.
591
598
  - `reasoningEffort`: optional non-empty effort string. It overrides provider `defaultReasoningEffort` for that JSON run.
592
599
  - `fast`: optional Codex-only boolean or `null`. `true` requests Fast, `false` explicitly requests Standard, and `null`/omission inherits Codex configuration.
593
600
  - `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.
594
601
  - `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.
595
602
  - `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.
603
+ - `timeout`: optional positive integer seconds, with the same semantics as `--timeout`. Non-integer, boolean, or non-positive values fail with `invalid_timeout`; combining it with pass-through is rejected.
596
604
  - `outputSchema`: optional path to a JSON Schema for the final message. Supported for Codex and Claude call mode (same semantics as `--output-schema`). Other engines fail with `unsupported_output_schema`.
597
605
  - `prompt`: required task prompt.
598
606
 
@@ -763,7 +771,7 @@ Codex usage-limit fallback fires, the completion payload also includes
763
771
  `codexAuthFallback` metadata (reason, the primary and fallback profile names,
764
772
  both exit codes, and a redacted primary stderr tail).
765
773
 
766
- Snapshot JSON uses schema `delegate.snapshot.v1` and includes fields such as `alias`, `runId`, `harness`, `status`, `rawStatus`, `effectiveStatus`, `staleReason`, `nextActions`, `cwd`, `executionCwd`, `assistantText`, `recentEvents`, `warnings`, `exitCode`, reasoning metadata, terminal metadata, and isolation/worktree metadata when applicable. Inspection commands do not rewrite a stale run's recorded state; they expose the raw recorded status plus the effective status computed from the current PID check. Run-output and worktree show output include `requestedHandle`, `resolvedHandle`, and `resolutionKind` (`literal`, `latest`, or `latest_model`) when a handle resolves indirectly.
774
+ Snapshot JSON uses schema `delegate.snapshot.v1` and includes fields such as `alias`, `runId`, `harness`, `status`, `rawStatus`, `effectiveStatus`, `staleReason`, `nextActions`, `cwd`, `executionCwd`, `assistantText`, `recentEvents`, `warnings`, `exitCode`, reasoning metadata, terminal metadata, and isolation/worktree metadata when applicable. Inspection commands do not rewrite a stale run's recorded state; they expose the raw recorded status plus the effective status computed from the current PID check. Run-output and worktree show output include `requestedHandle`, `resolvedHandle`, and `resolutionKind` (`literal`, `latest`, or `latest_model`) when a handle resolves indirectly. For bare harness handles, snapshot, run-output, and wait also report `resolvedRunId`, `resolvedAlias`, `resolvedWorkspace`, `resolvedAge`, and `resolvedAgeSeconds`. Resolutions older than 24 hours add a `bare_handle_stale` warning suggesting `--cwd` or an explicit handle.
767
775
 
768
776
  Tracked run envelopes include `completionReportWritten`, `completionReportSource`
769
777
  (`child`, `delegate_synthesized`, `stdout_recovery`, or `null`), and
@@ -773,6 +781,15 @@ exit-code-derived status.
773
781
 
774
782
  Run-output JSON uses schema `delegate.run-output.v1` and returns selected completion report, stdout, and/or stderr content. By default, secret-like strings are redacted unless `--no-redact` is supplied. Tracked runs finish in one of the terminal statuses `succeeded`, `failed`, or `cancelled`; explicit harness cancellation/error terminal events override an exit-zero child status.
775
783
 
784
+ Safe runs and read-only call runs that exit successfully with `resultQuality=empty`
785
+ retry once with the original prompt plus a plain-text final-answer instruction.
786
+ Pure and slash pass-through prompts, and write-capable calls, do not retry. Retried
787
+ envelopes add `emptyRetry: {attempted, resolved}`; runs that do not retry omit the
788
+ field. If the second attempt is also empty, the run remains successful and honest
789
+ with `resultQuality=empty`, and emits an
790
+ `empty_success_retry` warning. Tracked safe runs retain both attempts in their
791
+ stdout/stderr logs.
792
+
776
793
  `delegate wait` blocks until every selected run reaches terminal state. Defaults:
777
794
  `--interval 3`, minimum interval `1`, and `--timeout 3600`. Exit codes are `0`
778
795
  when all runs succeeded, `1` when any run failed or was cancelled, and `124` on
@@ -819,9 +836,10 @@ selectors are preserved. `--stdout` or `--stderr` without `--tail` or `--raw`
819
836
  defaults to a bounded `--tail 80` and a character cap (default 60000); use
820
837
  `--max-chars N` to override the cap. `--raw` returns the full stream with no
821
838
  line or character bounds, includes `rawOutputBytes` in JSON metadata, and cannot
822
- be combined with `--tail` or `--max-chars`. `--tail` and `--max-chars` require
823
- `--stdout` or `--stderr`; Delegate rejects them when only `--completion-report`
824
- is selected.
839
+ be combined with `--tail` or `--max-chars`. A bare `--tail N` implies
840
+ `--stdout` when no output selector is supplied; it never includes stderr.
841
+ `--max-chars` still requires `--stdout` or `--stderr`, and Delegate rejects
842
+ either bound when only `--completion-report` is selected.
825
843
 
826
844
  When `completion-report.md` is absent, `run-output --completion-report` makes a
827
845
  bounded best-effort attempt to recover an explicit final response from the