delegate-agent-cli 0.13.1__tar.gz → 0.15.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 (133) hide show
  1. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/CHANGELOG.md +88 -0
  2. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/PKG-INFO +22 -11
  3. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/README.md +21 -10
  4. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/docs/agent-setup.md +2 -2
  5. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/docs/cli-reference.md +115 -45
  6. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/docs/configuration.md +3 -2
  7. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/docs/security-model.md +42 -3
  8. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/docs/troubleshooting.md +16 -6
  9. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/docs/worktrees.md +13 -11
  10. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/pyproject.toml +1 -1
  11. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/__init__.py +1 -1
  12. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/argv_builders.py +88 -9
  13. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/argv_utils.py +9 -1
  14. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/cli.py +79 -9
  15. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/cli_parser.py +87 -4
  16. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/command_help.py +213 -73
  17. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/constants.py +38 -0
  18. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/describe_payload.py +45 -22
  19. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/git_utils.py +1 -1
  20. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/harness_events.py +28 -1
  21. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/inspection_commands.py +2 -5
  22. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/isolation.py +25 -26
  23. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/json_types.py +2 -2
  24. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/profiles.py +87 -9
  25. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/reasoning.py +3 -3
  26. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/rendering.py +10 -5
  27. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/request_build.py +125 -28
  28. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/request_models.py +7 -0
  29. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/run_output_commands.py +6 -10
  30. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/run_registry.py +74 -1
  31. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/runner.py +882 -84
  32. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/safe_workspace.py +201 -77
  33. delegate_agent_cli-0.15.0/src/delegate_agent/seatbelt.py +170 -0
  34. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/snapshot_view.py +0 -2
  35. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/wait_cancel_commands.py +58 -27
  36. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/workflows/commands.py +131 -34
  37. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/workflows/registry.py +77 -1
  38. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/workflows/runtime.py +79 -40
  39. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/workflows/schema.py +34 -4
  40. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/workflows/script.py +3 -2
  41. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/worktree_execution.py +113 -75
  42. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/worktree_remove.py +10 -1
  43. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/worktree_summary.py +1 -2
  44. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent_cli.egg-info/PKG-INFO +22 -11
  45. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent_cli.egg-info/SOURCES.txt +3 -0
  46. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_capability_commands.py +17 -0
  47. delegate_agent_cli-0.15.0/tests/test_codex_pure_sandbox.py +512 -0
  48. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_command_help.py +85 -11
  49. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_delegate_help_cli.py +119 -3
  50. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_delegate_isolation.py +59 -17
  51. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_delegate_parser.py +154 -20
  52. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_delegate_validation.py +0 -11
  53. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_end_to_end_tracking.py +6 -0
  54. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_engine_argv.py +57 -38
  55. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_execution_argv_and_prompt.py +81 -4
  56. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_execution_dry_run.py +0 -11
  57. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_execution_worktree_failure_cleanup.py +19 -13
  58. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_execution_worktree_preflight.py +76 -191
  59. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_execution_worktree_run.py +0 -8
  60. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_model_discovery.py +2 -2
  61. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_model_selection_wave1a.py +1 -1
  62. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_model_selection_wave1b.py +8 -6
  63. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_profiles.py +112 -1
  64. delegate_agent_cli-0.15.0/tests/test_pure_call.py +574 -0
  65. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_retention.py +0 -3
  66. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_run_registry.py +6 -2
  67. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_runner_capture.py +769 -8
  68. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_safe_workspace_isolation.py +238 -0
  69. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_slash_passthrough.py +8 -3
  70. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_snapshot_run_output.py +59 -0
  71. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_wait_cancel_commands.py +146 -59
  72. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_wave4_launch_features.py +157 -6
  73. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_workflow_commands.py +887 -19
  74. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_worktree_list_show.py +0 -1
  75. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_worktree_prune_gc.py +0 -1
  76. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_worktree_remove.py +17 -1
  77. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/CONTRIBUTING.md +0 -0
  78. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/LICENSE +0 -0
  79. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/MANIFEST.in +0 -0
  80. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/SECURITY.md +0 -0
  81. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/bin/delegate-profile-shim +0 -0
  82. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/bin/delegate.py +0 -0
  83. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/config.example.json +0 -0
  84. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/docs/assets/delegate-agent-header.png +0 -0
  85. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/docs/development.md +0 -0
  86. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/docs/live-runtime.md +0 -0
  87. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/docs/publishing-checklist.md +0 -0
  88. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/examples/task.claude.json +0 -0
  89. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/examples/task.codex.json +0 -0
  90. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/examples/task.cursor.json +0 -0
  91. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/examples/task.droid.json +0 -0
  92. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/examples/task.grok.json +0 -0
  93. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/examples/task.judge.json +0 -0
  94. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/setup.cfg +0 -0
  95. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/archived_logs.py +0 -0
  96. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/bundled_models.py +0 -0
  97. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/capability_commands.py +0 -0
  98. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/command_errors.py +0 -0
  99. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/config.py +0 -0
  100. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/config_commands.py +0 -0
  101. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/errors.py +0 -0
  102. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/log_output.py +0 -0
  103. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/model_discovery.py +0 -0
  104. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/private_io.py +0 -0
  105. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/profile_commands.py +0 -0
  106. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/profile_guard.py +0 -0
  107. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/prompt_instructions.py +0 -0
  108. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/prompt_transport.py +0 -0
  109. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/redaction.py +0 -0
  110. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/retention.py +0 -0
  111. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/run_metadata.py +0 -0
  112. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/run_status.py +0 -0
  113. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/workflows/__init__.py +0 -0
  114. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/worktree_commands.py +0 -0
  115. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/worktree_gc.py +0 -0
  116. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/worktree_mgmt.py +0 -0
  117. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/worktree_records.py +0 -0
  118. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent/wsl.py +0 -0
  119. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent_cli.egg-info/dependency_links.txt +0 -0
  120. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent_cli.egg-info/entry_points.txt +0 -0
  121. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent_cli.egg-info/requires.txt +0 -0
  122. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/src/delegate_agent_cli.egg-info/top_level.txt +0 -0
  123. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_config_commands.py +0 -0
  124. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_harness_events.py +0 -0
  125. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_inspection_commands.py +0 -0
  126. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_kimi_commands.py +0 -0
  127. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_packaging.py +0 -0
  128. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_reasoning_capabilities.py +0 -0
  129. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_snapshot_redaction.py +0 -0
  130. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_snapshot_rendering.py +0 -0
  131. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_snapshot_view.py +0 -0
  132. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_utility_modules.py +0 -0
  133. {delegate_agent_cli-0.13.1 → delegate_agent_cli-0.15.0}/tests/test_wsl_guardrails.py +0 -0
@@ -5,6 +5,92 @@ 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.15.0] - 2026-07-16
9
+
10
+ ### Added
11
+
12
+ - Work-mode worktree isolation now automatically carries tracked edits and
13
+ untracked, non-ignored files into the new worktree, with tracked/untracked
14
+ counts in human and JSON warnings and fail-clean teardown on sync errors.
15
+ - Child environments expose authoritative source/execution root metadata, and
16
+ Delegate-managed snapshot and worktree cleanup refuses targets that are or
17
+ contain the source workspace.
18
+ - Empty successful safe and read-only call results retry once when the prompt
19
+ can be safely extended; tracked runs retain both attempts and envelopes report
20
+ `emptyRetry` only when a retry was attempted.
21
+ - Bare Harness resolution in Snapshot, run-output, and wait now reports the
22
+ resolved Run, Alias, workspace, and age, with a stale-resolution warning after
23
+ 24 hours.
24
+
25
+ ### Changed
26
+
27
+ - `run-output --tail N` now selects stdout when no output stream or Completion
28
+ Report was requested; stderr remains opt-in.
29
+ - Devin safe mode now fails during preflight with `unsupported_mode` rather than
30
+ launching without an enforceable read-only boundary.
31
+ - Call children use their throwaway cwd as `DELEGATE_SOURCE_ROOT`; the
32
+ Registry/config workspace is not disclosed to a stateless call.
33
+
34
+ ### Fixed
35
+
36
+ - Empty-result retries now preserve cumulative duration, byte counts, usage,
37
+ truncation, stdin diagnostics, timeout budgets, and tracked launch-failure
38
+ state across primary, authentication-fallback, and retry attempts.
39
+ - Source-root cleanup guards now handle relative, symlinked, case-variant,
40
+ unresolved, and malformed paths conservatively without blocking safe cleanup
41
+ of source descendants.
42
+ - Dirty worktree sync preserves arbitrary filename bytes, rejects unsyncable
43
+ dirty submodules with escaped diagnostics, and documents the same behavior
44
+ consistently across the CLI reference and worktree guidance.
45
+ - Devin help and discovery surfaces now derive supported modes consistently and
46
+ reject unknown modes before constructing executable arguments.
47
+
48
+ ## [0.14.0] - 2026-07-15
49
+
50
+ ### Added
51
+
52
+ - `workflow result --field` for extracting a single field from a workflow
53
+ result, reliable latest-workflow selection, immutable creation ordering,
54
+ dry-run visibility, and orphan detection (PR #14).
55
+ - Schema validation for `agent()` results supports `minLength` and
56
+ `minItems`, including in retries and dry-run placeholders (PR #14).
57
+ - Grouped work runs sharing one non-isolated workspace now emit a warning
58
+ with guidance for commit boundaries and persistent worktrees (PR #13).
59
+
60
+ ### Changed
61
+
62
+ - Focused call help (`delegate <engine> call --help`) now reflects
63
+ call-mode option boundaries and documents the grouped-call tracking
64
+ exception (`--cwd` accepted only with `--group`); explicit `agent` input
65
+ is rejected on engines that do not support it (PR #13).
66
+ - Overview, dry-run, agent-help, README, CLI reference, and worktree docs
67
+ corrected from user feedback (PR #13).
68
+
69
+ ### Fixed
70
+
71
+ - Structured Codex workflows consume the child-authored completion report
72
+ (including on resume) and fail closed when it is missing; workflow resume
73
+ transitions atomically to `starting`, hides stale results, rolls back
74
+ failed launches, and releases locks on preparation errors (PR #14).
75
+ - Safe isolation re-roots exact source-workspace paths while preserving
76
+ slash-command payloads verbatim (PR #14).
77
+ - `wait`: a run matched by both `--latest HARNESS` and `--group NAME`
78
+ was emitted twice in the resolved-target list; it now appears once, with
79
+ first-selection precedence and ordering preserved.
80
+ - `git_root_for` degrades any `OSError` from the git probe (not just
81
+ `FileNotFoundError`) to the non-git fallback, so e.g. a `PermissionError`
82
+ spawning git no longer crashes workspace resolution.
83
+
84
+ ### Changed
85
+
86
+ - Internal cleanup pass across `src/` and `tests/`: removed dead code (unused
87
+ protocol types, private helpers, stale fixtures), collapsed redundant
88
+ exception tuples into their `OSError` base, replaced a hand-rolled
89
+ path-containment helper with `Path.is_relative_to`, and stripped stale
90
+ review-artifact comments. Behavior-preserving; the workflow supervisor's
91
+ broad exception boundary around child-model output is now explicitly
92
+ commented and regression-tested.
93
+
8
94
  ## [0.13.1] - 2026-07-09
9
95
 
10
96
  ### Added
@@ -304,6 +390,8 @@ Usage-audit fix wave: 82 sessions and 1,241 delegate invocations from one week o
304
390
 
305
391
  - Releases before 0.1.3 predate this changelog.
306
392
 
393
+ [0.15.0]: https://github.com/treygoff24/delegate-agent/compare/v0.14.0...v0.15.0
394
+ [0.14.0]: https://github.com/treygoff24/delegate-agent/compare/v0.13.1...v0.14.0
307
395
  [0.13.1]: https://github.com/treygoff24/delegate-agent/compare/v0.13.0...v0.13.1
308
396
  [0.13.0]: https://github.com/treygoff24/delegate-agent/compare/v0.12.0...v0.13.0
309
397
  [0.12.0]: https://github.com/treygoff24/delegate-agent/compare/v0.11.0...v0.12.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: delegate-agent-cli
3
- Version: 0.13.1
3
+ Version: 0.15.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
  ```
@@ -221,8 +220,17 @@ run, use stateless `call` mode:
221
220
 
222
221
  ```bash
223
222
  delegate --json codex call "Summarize this context in three bullets."
223
+ delegate --json claude call --pure --timeout 60 --output-schema result.schema.json < prompt.txt
224
224
  ```
225
225
 
226
+ `call --pure` is a hostile-input completion boundary available on Claude only.
227
+ It uses an empty temporary cwd, an allowlisted child environment, no Delegate
228
+ prompt framing, and no session persistence or tools according to the engine
229
+ capability contract. Claude receives the prompt only on stdin and is
230
+ schema-capable via `--output-schema`; `delegate --json describe` reports
231
+ `pureCall`, `structuredOutput`, `noSessionPersistence`, `usageEvents`, and
232
+ `promptStdin` per engine. `--timeout SECONDS` applies to every call-mode engine.
233
+
226
234
  For multi-step fan-out or gated review flows, use Delegate Workflows. A workflow
227
235
  is a Python script that launches normal Delegate child runs, journals progress,
228
236
  can pause on approval gates, and can resume from cached child results:
@@ -294,6 +302,9 @@ cancelled, and `124` on timeout. `cancel` signals the run's process group
294
302
  start-identity check against PID reuse; a cancelled run reports `cancelled`
295
303
  rather than a false success. Tag a batch of launches with `--group NAME` and
296
304
  `wait`, `runs`, and the worktree commands can select the whole group at once.
305
+ Commit between grouped feature waves that edit the same workspace. If features
306
+ need separate review or commits, give each a persistent worktree and integrate
307
+ them separately; `wait --group` warns about shared non-isolated workspaces.
297
308
 
298
309
  ## Task design: cluster related work into fewer, richer delegations
299
310
 
@@ -315,9 +326,9 @@ Delegate separates three ideas:
315
326
 
316
327
  Defaults are intentionally conservative for review paths:
317
328
 
318
- - `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok safe`, `delegate devin safe`, `delegate opencode safe`, `delegate droid ALIAS safe`, and `delegate kimi safe` run in an isolated throwaway workspace. Safe mode reviews your **current working tree** — uncommitted tracked edits and untracked, non-ignored files are mirrored into an isolated throwaway copy (only gitignored paths are excluded), so you can review local changes without committing first or pasting a diff.
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.
319
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.
320
- - Devin safe mode uses Delegate isolated copy plus a Delegate-generated `--agent-config` deny-list for edit/write/exec and `mcp__*`, with Devin `--permission-mode auto`. Work mode uses Devin `--permission-mode dangerous` because Devin print mode rejects unapproved edit/exec tools.
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.
321
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.
322
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.
323
334
  - `work` mode can edit. By default it runs in the real workspace for backward compatibility.
@@ -340,12 +351,12 @@ child where that summary is available. `--forbid-commit` fails the run if
340
351
  commits remain ahead of the creation base when the child exits, and it now
341
352
  implies `--isolation worktree`.
342
353
 
343
- To carry uncommitted local work into the worktree instead of stashing it, add
344
- `--include-dirty`: it syncs tracked edits and untracked, non-ignored files into
345
- the worktree through the same snapshot primitives as safe mode, and tears the
346
- 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.
347
358
 
348
- Safe isolation and `--include-dirty` recreate an untracked symlink only when it is relative, resolves inside the source workspace, and its target is not gitignored; any symlink that fails those checks — an absolute target, an escape out of the tree, or a target that is itself a gitignored secret — is replaced with an inert placeholder file, failing closed on any ambiguity. Delegate reports a warning listing the symlink paths it blocked. In Git repositories with no commits yet, Cursor/Codex/Claude/Droid/Grok/Devin/OpenCode/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
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`.
349
360
 
350
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.
351
362
 
@@ -387,6 +398,6 @@ AI_PROFILE delegate ...` uses the base config, or set
387
398
 
388
399
  - Delegate is an alpha CLI wrapper. Child runtimes can change their own flags or behavior.
389
400
  - Safe mode is a policy and isolation pattern, not a guarantee that a runtime cannot perform side effects outside its execution workspace.
390
- - 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`.
391
402
  - `--pass-through` is incompatible with `--json` and with persistent worktree runs.
392
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
  ```
@@ -188,8 +187,17 @@ run, use stateless `call` mode:
188
187
 
189
188
  ```bash
190
189
  delegate --json codex call "Summarize this context in three bullets."
190
+ delegate --json claude call --pure --timeout 60 --output-schema result.schema.json < prompt.txt
191
191
  ```
192
192
 
193
+ `call --pure` is a hostile-input completion boundary available on Claude only.
194
+ It uses an empty temporary cwd, an allowlisted child environment, no Delegate
195
+ prompt framing, and no session persistence or tools according to the engine
196
+ capability contract. Claude receives the prompt only on stdin and is
197
+ schema-capable via `--output-schema`; `delegate --json describe` reports
198
+ `pureCall`, `structuredOutput`, `noSessionPersistence`, `usageEvents`, and
199
+ `promptStdin` per engine. `--timeout SECONDS` applies to every call-mode engine.
200
+
193
201
  For multi-step fan-out or gated review flows, use Delegate Workflows. A workflow
194
202
  is a Python script that launches normal Delegate child runs, journals progress,
195
203
  can pause on approval gates, and can resume from cached child results:
@@ -261,6 +269,9 @@ cancelled, and `124` on timeout. `cancel` signals the run's process group
261
269
  start-identity check against PID reuse; a cancelled run reports `cancelled`
262
270
  rather than a false success. Tag a batch of launches with `--group NAME` and
263
271
  `wait`, `runs`, and the worktree commands can select the whole group at once.
272
+ Commit between grouped feature waves that edit the same workspace. If features
273
+ need separate review or commits, give each a persistent worktree and integrate
274
+ them separately; `wait --group` warns about shared non-isolated workspaces.
264
275
 
265
276
  ## Task design: cluster related work into fewer, richer delegations
266
277
 
@@ -282,9 +293,9 @@ Delegate separates three ideas:
282
293
 
283
294
  Defaults are intentionally conservative for review paths:
284
295
 
285
- - `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok safe`, `delegate devin safe`, `delegate opencode safe`, `delegate droid ALIAS safe`, and `delegate kimi safe` run in an isolated throwaway workspace. Safe mode reviews your **current working tree** — uncommitted tracked edits and untracked, non-ignored files are mirrored into an isolated throwaway copy (only gitignored paths are excluded), so you can review local changes without committing first or pasting a diff.
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.
286
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.
287
- - Devin safe mode uses Delegate isolated copy plus a Delegate-generated `--agent-config` deny-list for edit/write/exec and `mcp__*`, with Devin `--permission-mode auto`. Work mode uses Devin `--permission-mode dangerous` because Devin print mode rejects unapproved edit/exec tools.
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.
288
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.
289
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.
290
301
  - `work` mode can edit. By default it runs in the real workspace for backward compatibility.
@@ -307,12 +318,12 @@ child where that summary is available. `--forbid-commit` fails the run if
307
318
  commits remain ahead of the creation base when the child exits, and it now
308
319
  implies `--isolation worktree`.
309
320
 
310
- To carry uncommitted local work into the worktree instead of stashing it, add
311
- `--include-dirty`: it syncs tracked edits and untracked, non-ignored files into
312
- the worktree through the same snapshot primitives as safe mode, and tears the
313
- 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.
314
325
 
315
- Safe isolation and `--include-dirty` recreate an untracked symlink only when it is relative, resolves inside the source workspace, and its target is not gitignored; any symlink that fails those checks — an absolute target, an escape out of the tree, or a target that is itself a gitignored secret — is replaced with an inert placeholder file, failing closed on any ambiguity. Delegate reports a warning listing the symlink paths it blocked. In Git repositories with no commits yet, Cursor/Codex/Claude/Droid/Grok/Devin/OpenCode/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
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`.
316
327
 
317
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.
318
329
 
@@ -354,6 +365,6 @@ AI_PROFILE delegate ...` uses the base config, or set
354
365
 
355
366
  - Delegate is an alpha CLI wrapper. Child runtimes can change their own flags or behavior.
356
367
  - Safe mode is a policy and isolation pattern, not a guarantee that a runtime cannot perform side effects outside its execution workspace.
357
- - 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`.
358
369
  - `--pass-through` is incompatible with `--json` and with persistent worktree runs.
359
370
  - Delegate stores local run metadata under `.delegate/`; do not commit that directory.
@@ -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