delegate-agent-cli 0.11.0__tar.gz → 0.13.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.
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/CHANGELOG.md +64 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/PKG-INFO +63 -11
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/README.md +62 -10
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/config.example.json +12 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/docs/agent-setup.md +29 -2
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/docs/cli-reference.md +172 -32
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/docs/configuration.md +123 -5
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/docs/development.md +5 -2
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/docs/publishing-checklist.md +5 -2
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/docs/security-model.md +16 -5
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/docs/troubleshooting.md +38 -6
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/docs/worktrees.md +2 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/pyproject.toml +1 -1
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/__init__.py +1 -1
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/argv_builders.py +65 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/argv_utils.py +2 -0
- delegate_agent_cli-0.13.0/src/delegate_agent/bundled_models.py +82 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/cli.py +135 -7
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/cli_parser.py +302 -19
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/command_help.py +311 -56
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/config.py +208 -9
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/constants.py +23 -8
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/describe_payload.py +415 -32
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/harness_events.py +167 -1
- delegate_agent_cli-0.13.0/src/delegate_agent/model_discovery.py +428 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/profile_guard.py +8 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/prompt_instructions.py +11 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/prompt_transport.py +2 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/reasoning.py +149 -7
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/redaction.py +2 -1
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/request_build.py +580 -82
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/request_models.py +16 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/run_registry.py +3 -1
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/runner.py +57 -16
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/safe_workspace.py +5 -0
- delegate_agent_cli-0.13.0/src/delegate_agent/workflows/__init__.py +5 -0
- delegate_agent_cli-0.13.0/src/delegate_agent/workflows/commands.py +634 -0
- delegate_agent_cli-0.13.0/src/delegate_agent/workflows/registry.py +178 -0
- delegate_agent_cli-0.13.0/src/delegate_agent/workflows/runtime.py +1490 -0
- delegate_agent_cli-0.13.0/src/delegate_agent/workflows/schema.py +146 -0
- delegate_agent_cli-0.13.0/src/delegate_agent/workflows/script.py +198 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/worktree_execution.py +7 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent_cli.egg-info/PKG-INFO +63 -11
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent_cli.egg-info/SOURCES.txt +13 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_capability_commands.py +59 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_command_help.py +3 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_delegate_help_cli.py +25 -5
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_delegate_parser.py +65 -1
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_delegate_validation.py +1 -1
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_engine_argv.py +431 -1
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_harness_events.py +195 -0
- delegate_agent_cli-0.13.0/tests/test_model_discovery.py +648 -0
- delegate_agent_cli-0.13.0/tests/test_model_selection_wave1a.py +368 -0
- delegate_agent_cli-0.13.0/tests/test_model_selection_wave1b.py +798 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_reasoning_capabilities.py +95 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_run_registry.py +25 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_runner_capture.py +139 -0
- delegate_agent_cli-0.13.0/tests/test_slash_passthrough.py +212 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_utility_modules.py +15 -2
- delegate_agent_cli-0.13.0/tests/test_workflow_commands.py +1793 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/CONTRIBUTING.md +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/LICENSE +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/MANIFEST.in +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/SECURITY.md +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/bin/delegate-profile-shim +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/bin/delegate.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/docs/assets/delegate-agent-header.png +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/docs/live-runtime.md +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/examples/task.claude.json +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/examples/task.codex.json +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/examples/task.cursor.json +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/examples/task.droid.json +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/examples/task.grok.json +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/examples/task.judge.json +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/setup.cfg +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/archived_logs.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/capability_commands.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/command_errors.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/config_commands.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/errors.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/git_utils.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/inspection_commands.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/isolation.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/json_types.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/log_output.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/private_io.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/profile_commands.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/profiles.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/rendering.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/retention.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/run_metadata.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/run_output_commands.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/run_status.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/snapshot_view.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/wait_cancel_commands.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/worktree_commands.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/worktree_gc.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/worktree_mgmt.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/worktree_records.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/worktree_remove.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/worktree_summary.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent/wsl.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent_cli.egg-info/dependency_links.txt +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent_cli.egg-info/entry_points.txt +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent_cli.egg-info/requires.txt +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/src/delegate_agent_cli.egg-info/top_level.txt +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_config_commands.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_delegate_isolation.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_end_to_end_tracking.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_execution_argv_and_prompt.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_execution_dry_run.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_execution_worktree_failure_cleanup.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_execution_worktree_preflight.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_execution_worktree_run.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_inspection_commands.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_kimi_commands.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_packaging.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_profiles.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_retention.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_safe_workspace_isolation.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_snapshot_redaction.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_snapshot_rendering.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_snapshot_run_output.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_snapshot_view.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_wait_cancel_commands.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_wave4_launch_features.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_worktree_list_show.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_worktree_prune_gc.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_worktree_remove.py +0 -0
- {delegate_agent_cli-0.11.0 → delegate_agent_cli-0.13.0}/tests/test_wsl_guardrails.py +0 -0
|
@@ -5,6 +5,63 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.13.0] - 2026-07-09
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Added `opencode` as a first-class engine across `safe`, `work`, `call`, and
|
|
13
|
+
workflow runs. OpenCode drives any provider/model in the models.dev catalog
|
|
14
|
+
(75+ providers, plus custom/local providers) through one harness. Safe mode
|
|
15
|
+
and `call --read-only` enforce a deny-all-but-read permission lockdown via
|
|
16
|
+
`OPENCODE_CONFIG_CONTENT` (merges last, beating hostile repo config; verified
|
|
17
|
+
live against v1.17.17 including a git-worktree write-barrier test). Live
|
|
18
|
+
model discovery via `opencode models`, string or `{"model", "variant"}`
|
|
19
|
+
object aliases that can pin a reasoning variant, `--reasoning-effort` mapped
|
|
20
|
+
to OpenCode `--variant`, and per-run `--agent` selection with
|
|
21
|
+
`opencode.defaultAgent` fallback.
|
|
22
|
+
|
|
23
|
+
## [0.12.0] - 2026-07-09
|
|
24
|
+
|
|
25
|
+
Three features in one train: Delegate Workflows (multi-agent orchestration with durable resume), per-run model selection + discovery across all seven engines, and the Devin engine. Model selection was built as the inaugural Delegate Workflows dogfood: three implementation waves plus a twelve-round two-lane adversarial review loop driven through `workflow run --resume`.
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- Per-run model selection: every engine accepts `--model <alias-or-id>` (alias
|
|
30
|
+
from `<engine>.models`, or a raw model ID passed through verbatim). Alias maps
|
|
31
|
+
are generalized beyond Droid to all engines; Droid keeps its optional
|
|
32
|
+
positional alias and gains optional `droid.defaultModel`. `delegate models
|
|
33
|
+
<engine>` merges bundled + config catalogs; `--live` probes cursor/droid/devin
|
|
34
|
+
when available. Non-droid aliases also appear in `models` / `models --summary`.
|
|
35
|
+
- Delegate Workflows: a Python DSL supervisor for multi-agent fan-out, durable
|
|
36
|
+
journaling, nested workflow calls, schema-validated `agent()` results,
|
|
37
|
+
approval gates, resume, kill, saved workflows, and workflow discovery in
|
|
38
|
+
`describe`/help/docs. Status/list report `stalled` when a supervisor died
|
|
39
|
+
without finalizing (non-blocking lock probe; `wait`/`watch` exit instead of
|
|
40
|
+
hanging), and supervisor failures record a traceback tail in the journal,
|
|
41
|
+
result, and status.
|
|
42
|
+
- Slash pass-through: launch prompts that intentionally start with a harness
|
|
43
|
+
slash command can be sent verbatim when the target mode's safety boundary does
|
|
44
|
+
not depend on Delegate's prompt preamble. `--pass-through` also suppresses the
|
|
45
|
+
skill preamble and completion-report suffix while preserving safe-mode
|
|
46
|
+
boundaries.
|
|
47
|
+
- Added `devin` as a first-class engine for Cognition's Devin CLI across
|
|
48
|
+
`safe`, `work`, and `call` modes. Devin uses prompt-file transport,
|
|
49
|
+
config-driven model selection (`devin.defaultModel`, default `swe-1.7`),
|
|
50
|
+
read-only safe/call enforcement through a Delegate-generated
|
|
51
|
+
`--agent-config`, and `--permission-mode dangerous` for work/default-call
|
|
52
|
+
print-mode runs.
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
|
|
56
|
+
- Config migration: a `<engine>.models` alias key named after a mode (`safe`,
|
|
57
|
+
`work`, or `call`) or after its own engine is now a config validation error —
|
|
58
|
+
rename the alias (aliases naming a *different* engine, like a `droid.models`
|
|
59
|
+
alias called `grok`, remain valid). Cursor input-JSON `"model"` values that differ from
|
|
60
|
+
`cursor.defaultModel` are now honored instead of rejected. Droid run-input
|
|
61
|
+
JSON `"model"` is now alias-or-id like `--model`: a `droid.models` key keeps
|
|
62
|
+
alias semantics, anything else passes through verbatim to the harness
|
|
63
|
+
(previously a hard `invalid_alias` error).
|
|
64
|
+
|
|
8
65
|
## [0.11.0] - 2026-07-05
|
|
9
66
|
|
|
10
67
|
Profile-guard calibration fix for issue #9: a shell carrying `AI_PROFILE=work|personal` with no matching `~/.delegate/config.<profile>.json` no longer presents a half-configured install as a total CLI outage.
|
|
@@ -21,6 +78,11 @@ Profile-guard calibration fix for issue #9: a shell carrying `AI_PROFILE=work|pe
|
|
|
21
78
|
|
|
22
79
|
- The fail-closed profile-crossover guarantee is now enforced inside the Python CLI (`delegate_agent.cli:main` via the new `delegate_agent.profile_guard`), classifying from the real parsed command rather than positional argv guessing. This closes a gap where the guarantee lived only in the optional shell shim: the pip console script, `python -m delegate_agent.cli`, and `bin/delegate.py` all reach `main` with no shim in front, and previously fell through to the base account on a missing overlay. The guard no-ops when `DELEGATE_CONFIG` is already exported (shim precedence) so the two layers compose without a double check. The tracked `bin/delegate-profile-shim` template applies the same check before Python starts, as an additional early gate; it scans all args for `capabilities refresh` so a mutation is never misclassified as a read-only probe.
|
|
23
80
|
|
|
81
|
+
### Packaging
|
|
82
|
+
|
|
83
|
+
- Published to PyPI as `delegate-agent-cli`: PyPI's separator-stripped name-similarity rule blocked the shorter `delegate-agent` (an existing `DelegateAgent` project collides). The installed console script is still `delegate`; only the `pip install` name changed.
|
|
84
|
+
- Hardened two tests (`test_execution_argv_and_prompt.py`, `test_wait_cancel_commands.py`) that raced child-process teardown against the isolation and cleanup assertions they were checking, which showed up as intermittent failures on the publish gate.
|
|
85
|
+
|
|
24
86
|
## [0.10.0] - 2026-07-04
|
|
25
87
|
|
|
26
88
|
Usage-audit fix wave: 82 sessions and 1,241 delegate invocations from one week of agent usage were mined for friction and failure modes, and the whole Tier 1–3 backlog was built across four decorrelated implementation waves plus live acceptance.
|
|
@@ -230,6 +292,8 @@ Usage-audit fix wave: 82 sessions and 1,241 delegate invocations from one week o
|
|
|
230
292
|
|
|
231
293
|
- Releases before 0.1.3 predate this changelog.
|
|
232
294
|
|
|
295
|
+
[0.13.0]: https://github.com/treygoff24/delegate-agent/compare/v0.12.0...v0.13.0
|
|
296
|
+
[0.12.0]: https://github.com/treygoff24/delegate-agent/compare/v0.11.0...v0.12.0
|
|
233
297
|
[0.11.0]: https://github.com/treygoff24/delegate-agent/compare/v0.10.0...v0.11.0
|
|
234
298
|
[0.10.0]: https://github.com/treygoff24/delegate-agent/compare/v0.9.0...v0.10.0
|
|
235
299
|
[0.9.0]: https://github.com/treygoff24/delegate-agent/compare/v0.8.1...v0.9.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: delegate-agent-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.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
|
|
@@ -37,7 +37,7 @@ Dynamic: license-file
|
|
|
37
37
|
|
|
38
38
|
# Delegate Agent
|
|
39
39
|
|
|
40
|
-
Delegate Agent is a small CLI for handing a bounded task to another coding-agent runtime. It normalizes common calls to Cursor Agent, Factory Droid, OpenAI Codex, Claude Code, and Kimi Code so humans or other agents can launch review, investigation, and implementation jobs without remembering each tool's flags.
|
|
40
|
+
Delegate Agent is a small CLI for handing a bounded task to another coding-agent runtime. It normalizes common calls to Cursor Agent, Factory Droid, OpenAI Codex, Claude Code, Grok Build, Devin, OpenCode, and Kimi Code so humans or other agents can launch review, investigation, and implementation jobs without remembering each tool's flags.
|
|
41
41
|
|
|
42
42
|
Use it when you want a predictable wrapper around prompts like:
|
|
43
43
|
|
|
@@ -47,19 +47,31 @@ Use it when you want a predictable wrapper around prompts like:
|
|
|
47
47
|
|
|
48
48
|
Delegate does **not** commit, push, merge, deploy, publish, or run a background service. It builds the child command, adds safety framing, launches the selected runtime, and records local run metadata for later inspection.
|
|
49
49
|
|
|
50
|
-
Prompt handling is provider-specific: Codex and
|
|
51
|
-
runtime over stdin; Droid prompts are delivered through
|
|
52
|
-
prompt
|
|
50
|
+
Prompt handling is provider-specific: Codex, Claude, and OpenCode prompts are delivered to the child
|
|
51
|
+
runtime over stdin; Droid, Grok, and Devin prompts are delivered through private
|
|
52
|
+
temporary prompt files; Cursor Agent and Kimi Code currently
|
|
53
53
|
require prompt argv. Delegate redacts Cursor and Kimi prompt argv in dry-run
|
|
54
54
|
output and run manifests, but true process-argv hiding for those harnesses
|
|
55
55
|
depends on the child CLIs exposing stdin or prompt-file transport.
|
|
56
56
|
|
|
57
|
-
## Install
|
|
57
|
+
## Install
|
|
58
58
|
|
|
59
|
-
Delegate requires Python 3.11 or newer.
|
|
59
|
+
Delegate requires Python 3.11 or newer. The PyPI package is named `delegate-agent-cli` (PyPI's name-similarity rule blocked the shorter `delegate-agent`), but it installs the same `delegate` command either way.
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
|
-
|
|
62
|
+
uv tool install delegate-agent-cli
|
|
63
|
+
# or
|
|
64
|
+
pipx install delegate-agent-cli
|
|
65
|
+
# or
|
|
66
|
+
pip install delegate-agent-cli
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Install from source
|
|
70
|
+
|
|
71
|
+
For the latest unreleased code, or to contribute:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
python3 -m pip install "delegate-agent-cli @ git+https://github.com/treygoff24/delegate-agent.git"
|
|
63
75
|
```
|
|
64
76
|
|
|
65
77
|
For local development or a checkout-only smoke test:
|
|
@@ -85,11 +97,17 @@ command -v droid # Factory Droid CLI, used by delegate droid ...
|
|
|
85
97
|
command -v codex # OpenAI Codex CLI, used by delegate codex ...
|
|
86
98
|
command -v claude # Claude Code CLI, used by delegate claude ...
|
|
87
99
|
command -v grok # xAI Grok Build CLI, used by delegate grok ...
|
|
100
|
+
command -v devin # Cognition Devin CLI, used by delegate devin ...
|
|
101
|
+
command -v opencode # OpenCode CLI, used by delegate opencode ...
|
|
88
102
|
command -v kimi # Kimi Code CLI, used by delegate kimi ...
|
|
89
103
|
```
|
|
90
104
|
|
|
91
105
|
Runtime authentication is owned by each child CLI. Delegate cannot log in for you. Dry-runs and CI tests do not require the real child binaries.
|
|
92
106
|
|
|
107
|
+
Install OpenCode from [opencode.ai](https://opencode.ai). Its curl installer
|
|
108
|
+
normally writes the binary to `~/.opencode/bin`, which may not be on `PATH`.
|
|
109
|
+
Extend `PATH` or set `opencode.binary` to the absolute binary path.
|
|
110
|
+
|
|
93
111
|
Initialize a starter config and replace placeholder Droid model IDs before real Droid runs:
|
|
94
112
|
|
|
95
113
|
```bash
|
|
@@ -110,6 +128,9 @@ delegate --json describe --summary
|
|
|
110
128
|
delegate --json models --summary
|
|
111
129
|
delegate --json describe
|
|
112
130
|
delegate --json models
|
|
131
|
+
delegate --json models codex # per-engine advisory catalog
|
|
132
|
+
delegate --json models cursor --live # merge live harness probe when supported
|
|
133
|
+
delegate --json models opencode --live # query every model visible to OpenCode
|
|
113
134
|
delegate --json capabilities
|
|
114
135
|
```
|
|
115
136
|
|
|
@@ -133,6 +154,7 @@ Preview the command without launching a child runtime:
|
|
|
133
154
|
```bash
|
|
134
155
|
delegate --json dry-run codex safe "Review this repository. Do not edit files."
|
|
135
156
|
delegate --json dry-run claude safe "Review this repository. Do not edit files."
|
|
157
|
+
delegate --json dry-run opencode safe "Review this repository. Do not edit files."
|
|
136
158
|
```
|
|
137
159
|
|
|
138
160
|
Run a read-only review in an isolated throwaway workspace:
|
|
@@ -141,6 +163,8 @@ Run a read-only review in an isolated throwaway workspace:
|
|
|
141
163
|
delegate codex safe "Review this repository for correctness risks. Do not edit files."
|
|
142
164
|
delegate claude safe "Review this repository for correctness risks. Do not edit files."
|
|
143
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
|
+
delegate opencode safe "Review this repository for correctness risks. Do not edit files."
|
|
144
168
|
delegate cursor safe "Review the current diff for regressions. Do not edit files."
|
|
145
169
|
delegate kimi safe "Review this repository for regressions. Do not edit files."
|
|
146
170
|
```
|
|
@@ -157,9 +181,21 @@ Run an edit-capable task in a workspace you trust:
|
|
|
157
181
|
```bash
|
|
158
182
|
delegate cursor work "Fix the parser bug. Run python3 -m unittest tests.test_delegate_parser. Report changed files."
|
|
159
183
|
delegate claude work "Implement the scoped change and run the named check. Report changed files."
|
|
184
|
+
delegate devin work "Implement the scoped change and run the named check. Report changed files."
|
|
185
|
+
delegate opencode work "Implement the scoped change and run the named check. Report changed files."
|
|
160
186
|
delegate kimi work "Implement the scoped change and run the named check. Report changed files."
|
|
161
187
|
```
|
|
162
188
|
|
|
189
|
+
Pin a model per run with `--model` (config alias from `<engine>.models`, or a
|
|
190
|
+
raw model ID passed through verbatim). Droid still accepts a positional alias;
|
|
191
|
+
`--model` works on every engine, including Droid:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
delegate devin safe --model claude-fable-5 "Review this repository. Do not edit files."
|
|
195
|
+
delegate droid work --model custom:my-model "Implement the scoped change."
|
|
196
|
+
delegate --json dry-run codex safe --model fast "Review this repository. Do not edit files."
|
|
197
|
+
```
|
|
198
|
+
|
|
163
199
|
For long foreground runs, add `--progress` to emit bounded parent heartbeats to
|
|
164
200
|
stderr while keeping final stdout machine-readable, or set `progress.enabled`
|
|
165
201
|
to `true` in config. Use `--no-progress` to override config for one launch.
|
|
@@ -187,7 +223,20 @@ run, use stateless `call` mode:
|
|
|
187
223
|
delegate --json codex call "Summarize this context in three bullets."
|
|
188
224
|
```
|
|
189
225
|
|
|
190
|
-
|
|
226
|
+
For multi-step fan-out or gated review flows, use Delegate Workflows. A workflow
|
|
227
|
+
is a Python script that launches normal Delegate child runs, journals progress,
|
|
228
|
+
can pause on approval gates, and can resume from cached child results:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
python3 bin/delegate.py workflow check review.py
|
|
232
|
+
python3 bin/delegate.py --json workflow run review.py --args '{"files":["src/cli.py"]}' --budget 10
|
|
233
|
+
python3 bin/delegate.py workflow approve wf_0123abcdef45
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
See [Delegate Workflows](docs/delegate-workflows.md) for the DSL, safety
|
|
237
|
+
limits, config, and gate semantics.
|
|
238
|
+
|
|
239
|
+
Reasoning effort is provider-aware. Unsupported combinations fail before launch. It changes only the requested model thinking depth/cost/latency; it does not change safe/work/call mode, sandboxing, approvals, or edit capability. Codex/Droid validate effort against model capability metadata, Cursor maps effort to configured model selection, Claude maps to Claude Code `--effort`, Grok maps to Grok `--effort` (`low`, `medium`, `high`, `xhigh`, `max`), and OpenCode passes it through as `--variant`. Devin and Kimi do not expose a Delegate reasoning-effort flag. Explicit Codex effort can target the harness default model even when `codex.defaultModel` is unset:
|
|
191
240
|
|
|
192
241
|
```bash
|
|
193
242
|
delegate --json dry-run codex safe --reasoning-effort high "Review this repository. Do not edit files."
|
|
@@ -251,8 +300,10 @@ Delegate separates three ideas:
|
|
|
251
300
|
|
|
252
301
|
Defaults are intentionally conservative for review paths:
|
|
253
302
|
|
|
254
|
-
- `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok 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.
|
|
303
|
+
- `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.
|
|
255
304
|
- 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.
|
|
305
|
+
- 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.
|
|
306
|
+
- 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.
|
|
256
307
|
- 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.
|
|
257
308
|
- `work` mode can edit. By default it runs in the real workspace for backward compatibility.
|
|
258
309
|
|
|
@@ -279,7 +330,7 @@ To carry uncommitted local work into the worktree instead of stashing it, add
|
|
|
279
330
|
the worktree through the same snapshot primitives as safe mode, and tears the
|
|
280
331
|
worktree down before launching the child if that sync fails.
|
|
281
332
|
|
|
282
|
-
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/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
|
|
333
|
+
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`.
|
|
283
334
|
|
|
284
335
|
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.
|
|
285
336
|
|
|
@@ -311,6 +362,7 @@ AI_PROFILE delegate ...` uses the base config, or set
|
|
|
311
362
|
- [Agent setup](docs/agent-setup.md): human and non-interactive setup flows.
|
|
312
363
|
- [CLI reference](docs/cli-reference.md): commands, exit codes, and JSON contracts.
|
|
313
364
|
- [Configuration](docs/configuration.md): config precedence, sections, and provider-neutral aliases.
|
|
365
|
+
- [Delegate Workflows](docs/delegate-workflows.md): workflow DSL, caps, config, and gate semantics.
|
|
314
366
|
- [Security model](docs/security-model.md): boundaries, limitations, and safe usage.
|
|
315
367
|
- [Worktrees](docs/worktrees.md): persistent-worktree lifecycle and cleanup.
|
|
316
368
|
- [Troubleshooting](docs/troubleshooting.md): common failures and checks.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# Delegate Agent
|
|
6
6
|
|
|
7
|
-
Delegate Agent is a small CLI for handing a bounded task to another coding-agent runtime. It normalizes common calls to Cursor Agent, Factory Droid, OpenAI Codex, Claude Code, and Kimi Code so humans or other agents can launch review, investigation, and implementation jobs without remembering each tool's flags.
|
|
7
|
+
Delegate Agent is a small CLI for handing a bounded task to another coding-agent runtime. It normalizes common calls to Cursor Agent, Factory Droid, OpenAI Codex, Claude Code, Grok Build, Devin, OpenCode, and Kimi Code so humans or other agents can launch review, investigation, and implementation jobs without remembering each tool's flags.
|
|
8
8
|
|
|
9
9
|
Use it when you want a predictable wrapper around prompts like:
|
|
10
10
|
|
|
@@ -14,19 +14,31 @@ Use it when you want a predictable wrapper around prompts like:
|
|
|
14
14
|
|
|
15
15
|
Delegate does **not** commit, push, merge, deploy, publish, or run a background service. It builds the child command, adds safety framing, launches the selected runtime, and records local run metadata for later inspection.
|
|
16
16
|
|
|
17
|
-
Prompt handling is provider-specific: Codex and
|
|
18
|
-
runtime over stdin; Droid prompts are delivered through
|
|
19
|
-
prompt
|
|
17
|
+
Prompt handling is provider-specific: Codex, Claude, and OpenCode prompts are delivered to the child
|
|
18
|
+
runtime over stdin; Droid, Grok, and Devin prompts are delivered through private
|
|
19
|
+
temporary prompt files; Cursor Agent and Kimi Code currently
|
|
20
20
|
require prompt argv. Delegate redacts Cursor and Kimi prompt argv in dry-run
|
|
21
21
|
output and run manifests, but true process-argv hiding for those harnesses
|
|
22
22
|
depends on the child CLIs exposing stdin or prompt-file transport.
|
|
23
23
|
|
|
24
|
-
## Install
|
|
24
|
+
## Install
|
|
25
25
|
|
|
26
|
-
Delegate requires Python 3.11 or newer.
|
|
26
|
+
Delegate requires Python 3.11 or newer. The PyPI package is named `delegate-agent-cli` (PyPI's name-similarity rule blocked the shorter `delegate-agent`), but it installs the same `delegate` command either way.
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
|
|
29
|
+
uv tool install delegate-agent-cli
|
|
30
|
+
# or
|
|
31
|
+
pipx install delegate-agent-cli
|
|
32
|
+
# or
|
|
33
|
+
pip install delegate-agent-cli
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Install from source
|
|
37
|
+
|
|
38
|
+
For the latest unreleased code, or to contribute:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
python3 -m pip install "delegate-agent-cli @ git+https://github.com/treygoff24/delegate-agent.git"
|
|
30
42
|
```
|
|
31
43
|
|
|
32
44
|
For local development or a checkout-only smoke test:
|
|
@@ -52,11 +64,17 @@ command -v droid # Factory Droid CLI, used by delegate droid ...
|
|
|
52
64
|
command -v codex # OpenAI Codex CLI, used by delegate codex ...
|
|
53
65
|
command -v claude # Claude Code CLI, used by delegate claude ...
|
|
54
66
|
command -v grok # xAI Grok Build CLI, used by delegate grok ...
|
|
67
|
+
command -v devin # Cognition Devin CLI, used by delegate devin ...
|
|
68
|
+
command -v opencode # OpenCode CLI, used by delegate opencode ...
|
|
55
69
|
command -v kimi # Kimi Code CLI, used by delegate kimi ...
|
|
56
70
|
```
|
|
57
71
|
|
|
58
72
|
Runtime authentication is owned by each child CLI. Delegate cannot log in for you. Dry-runs and CI tests do not require the real child binaries.
|
|
59
73
|
|
|
74
|
+
Install OpenCode from [opencode.ai](https://opencode.ai). Its curl installer
|
|
75
|
+
normally writes the binary to `~/.opencode/bin`, which may not be on `PATH`.
|
|
76
|
+
Extend `PATH` or set `opencode.binary` to the absolute binary path.
|
|
77
|
+
|
|
60
78
|
Initialize a starter config and replace placeholder Droid model IDs before real Droid runs:
|
|
61
79
|
|
|
62
80
|
```bash
|
|
@@ -77,6 +95,9 @@ delegate --json describe --summary
|
|
|
77
95
|
delegate --json models --summary
|
|
78
96
|
delegate --json describe
|
|
79
97
|
delegate --json models
|
|
98
|
+
delegate --json models codex # per-engine advisory catalog
|
|
99
|
+
delegate --json models cursor --live # merge live harness probe when supported
|
|
100
|
+
delegate --json models opencode --live # query every model visible to OpenCode
|
|
80
101
|
delegate --json capabilities
|
|
81
102
|
```
|
|
82
103
|
|
|
@@ -100,6 +121,7 @@ Preview the command without launching a child runtime:
|
|
|
100
121
|
```bash
|
|
101
122
|
delegate --json dry-run codex safe "Review this repository. Do not edit files."
|
|
102
123
|
delegate --json dry-run claude safe "Review this repository. Do not edit files."
|
|
124
|
+
delegate --json dry-run opencode safe "Review this repository. Do not edit files."
|
|
103
125
|
```
|
|
104
126
|
|
|
105
127
|
Run a read-only review in an isolated throwaway workspace:
|
|
@@ -108,6 +130,8 @@ Run a read-only review in an isolated throwaway workspace:
|
|
|
108
130
|
delegate codex safe "Review this repository for correctness risks. Do not edit files."
|
|
109
131
|
delegate claude safe "Review this repository for correctness risks. Do not edit files."
|
|
110
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
|
+
delegate opencode safe "Review this repository for correctness risks. Do not edit files."
|
|
111
135
|
delegate cursor safe "Review the current diff for regressions. Do not edit files."
|
|
112
136
|
delegate kimi safe "Review this repository for regressions. Do not edit files."
|
|
113
137
|
```
|
|
@@ -124,9 +148,21 @@ Run an edit-capable task in a workspace you trust:
|
|
|
124
148
|
```bash
|
|
125
149
|
delegate cursor work "Fix the parser bug. Run python3 -m unittest tests.test_delegate_parser. Report changed files."
|
|
126
150
|
delegate claude work "Implement the scoped change and run the named check. Report changed files."
|
|
151
|
+
delegate devin work "Implement the scoped change and run the named check. Report changed files."
|
|
152
|
+
delegate opencode work "Implement the scoped change and run the named check. Report changed files."
|
|
127
153
|
delegate kimi work "Implement the scoped change and run the named check. Report changed files."
|
|
128
154
|
```
|
|
129
155
|
|
|
156
|
+
Pin a model per run with `--model` (config alias from `<engine>.models`, or a
|
|
157
|
+
raw model ID passed through verbatim). Droid still accepts a positional alias;
|
|
158
|
+
`--model` works on every engine, including Droid:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
delegate devin safe --model claude-fable-5 "Review this repository. Do not edit files."
|
|
162
|
+
delegate droid work --model custom:my-model "Implement the scoped change."
|
|
163
|
+
delegate --json dry-run codex safe --model fast "Review this repository. Do not edit files."
|
|
164
|
+
```
|
|
165
|
+
|
|
130
166
|
For long foreground runs, add `--progress` to emit bounded parent heartbeats to
|
|
131
167
|
stderr while keeping final stdout machine-readable, or set `progress.enabled`
|
|
132
168
|
to `true` in config. Use `--no-progress` to override config for one launch.
|
|
@@ -154,7 +190,20 @@ run, use stateless `call` mode:
|
|
|
154
190
|
delegate --json codex call "Summarize this context in three bullets."
|
|
155
191
|
```
|
|
156
192
|
|
|
157
|
-
|
|
193
|
+
For multi-step fan-out or gated review flows, use Delegate Workflows. A workflow
|
|
194
|
+
is a Python script that launches normal Delegate child runs, journals progress,
|
|
195
|
+
can pause on approval gates, and can resume from cached child results:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
python3 bin/delegate.py workflow check review.py
|
|
199
|
+
python3 bin/delegate.py --json workflow run review.py --args '{"files":["src/cli.py"]}' --budget 10
|
|
200
|
+
python3 bin/delegate.py workflow approve wf_0123abcdef45
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
See [Delegate Workflows](docs/delegate-workflows.md) for the DSL, safety
|
|
204
|
+
limits, config, and gate semantics.
|
|
205
|
+
|
|
206
|
+
Reasoning effort is provider-aware. Unsupported combinations fail before launch. It changes only the requested model thinking depth/cost/latency; it does not change safe/work/call mode, sandboxing, approvals, or edit capability. Codex/Droid validate effort against model capability metadata, Cursor maps effort to configured model selection, Claude maps to Claude Code `--effort`, Grok maps to Grok `--effort` (`low`, `medium`, `high`, `xhigh`, `max`), and OpenCode passes it through as `--variant`. Devin and Kimi do not expose a Delegate reasoning-effort flag. Explicit Codex effort can target the harness default model even when `codex.defaultModel` is unset:
|
|
158
207
|
|
|
159
208
|
```bash
|
|
160
209
|
delegate --json dry-run codex safe --reasoning-effort high "Review this repository. Do not edit files."
|
|
@@ -218,8 +267,10 @@ Delegate separates three ideas:
|
|
|
218
267
|
|
|
219
268
|
Defaults are intentionally conservative for review paths:
|
|
220
269
|
|
|
221
|
-
- `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok 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.
|
|
270
|
+
- `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.
|
|
222
271
|
- 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.
|
|
272
|
+
- 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.
|
|
273
|
+
- 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.
|
|
223
274
|
- 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.
|
|
224
275
|
- `work` mode can edit. By default it runs in the real workspace for backward compatibility.
|
|
225
276
|
|
|
@@ -246,7 +297,7 @@ To carry uncommitted local work into the worktree instead of stashing it, add
|
|
|
246
297
|
the worktree through the same snapshot primitives as safe mode, and tears the
|
|
247
298
|
worktree down before launching the child if that sync fails.
|
|
248
299
|
|
|
249
|
-
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/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
|
|
300
|
+
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`.
|
|
250
301
|
|
|
251
302
|
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.
|
|
252
303
|
|
|
@@ -278,6 +329,7 @@ AI_PROFILE delegate ...` uses the base config, or set
|
|
|
278
329
|
- [Agent setup](docs/agent-setup.md): human and non-interactive setup flows.
|
|
279
330
|
- [CLI reference](docs/cli-reference.md): commands, exit codes, and JSON contracts.
|
|
280
331
|
- [Configuration](docs/configuration.md): config precedence, sections, and provider-neutral aliases.
|
|
332
|
+
- [Delegate Workflows](docs/delegate-workflows.md): workflow DSL, caps, config, and gate semantics.
|
|
281
333
|
- [Security model](docs/security-model.md): boundaries, limitations, and safe usage.
|
|
282
334
|
- [Worktrees](docs/worktrees.md): persistent-worktree lifecycle and cleanup.
|
|
283
335
|
- [Troubleshooting](docs/troubleshooting.md): common failures and checks.
|
|
@@ -81,6 +81,18 @@
|
|
|
81
81
|
"disableWebSearch": true,
|
|
82
82
|
"noSubagents": false
|
|
83
83
|
},
|
|
84
|
+
"devin": {
|
|
85
|
+
"binary": "devin",
|
|
86
|
+
"defaultModel": "swe-1.7",
|
|
87
|
+
"defaultReasoningEffort": null
|
|
88
|
+
},
|
|
89
|
+
"opencode": {
|
|
90
|
+
"binary": "opencode",
|
|
91
|
+
"defaultModel": null,
|
|
92
|
+
"defaultReasoningEffort": null,
|
|
93
|
+
"defaultAgent": null,
|
|
94
|
+
"models": {}
|
|
95
|
+
},
|
|
84
96
|
"kimi": {
|
|
85
97
|
"binary": "kimi",
|
|
86
98
|
"defaultModel": "kimi-code/kimi-for-coding",
|
|
@@ -36,6 +36,8 @@ This guide covers both human setup and non-interactive setup for agents or CI jo
|
|
|
36
36
|
command -v codex || echo "Codex CLI missing"
|
|
37
37
|
command -v claude || echo "Claude Code CLI missing"
|
|
38
38
|
command -v grok || echo "Grok Build CLI missing"
|
|
39
|
+
command -v devin || echo "Devin CLI missing"
|
|
40
|
+
command -v opencode || echo "OpenCode CLI missing"
|
|
39
41
|
command -v kimi || echo "Kimi Code CLI missing"
|
|
40
42
|
```
|
|
41
43
|
|
|
@@ -94,12 +96,33 @@ When running on Windows through WSL, treat Delegate as a Linux CLI:
|
|
|
94
96
|
delegate --json dry-run claude safe --reasoning-effort high "Review only. Do not edit files."
|
|
95
97
|
delegate --json dry-run grok safe "Review only. Do not edit files."
|
|
96
98
|
delegate --json dry-run grok safe --reasoning-effort high "Review only. Do not edit files."
|
|
99
|
+
delegate --json dry-run devin safe "Review only. Do not edit files."
|
|
100
|
+
delegate --json dry-run opencode safe "Review only. Do not edit files."
|
|
101
|
+
delegate --json dry-run opencode safe --reasoning-effort high "Review only. Do not edit files."
|
|
97
102
|
delegate --json dry-run cursor safe "Review only. Do not edit files."
|
|
98
103
|
delegate --json dry-run droid reviewer safe "Review only. Do not edit files."
|
|
99
104
|
delegate --json dry-run kimi safe "Review only. Do not edit files."
|
|
100
105
|
```
|
|
101
106
|
|
|
102
|
-
The Codex, Claude, Grok, Cursor, and Kimi dry-runs succeed with the unedited example config when no reasoning effort is requested. Explicit Codex reasoning-effort dry-runs can target the harness default model when no default model is configured. Claude and Grok reasoning effort map to native `--effort` flags. The Droid dry-run validates the alias, so it returns `unconfigured_model` until you replace the `reviewer` placeholder in `config.json` with a real model ID.
|
|
107
|
+
The Codex, Claude, Grok, Devin, OpenCode, Cursor, and Kimi dry-runs succeed with the unedited example config when no reasoning effort is requested. Explicit Codex reasoning-effort dry-runs can target the harness default model when no default model is configured. Claude and Grok reasoning effort map to native `--effort` flags; OpenCode reasoning effort maps to `--variant` without model validation. The Droid dry-run validates the alias, so it returns `unconfigured_model` until you replace the `reviewer` placeholder in `config.json` with a real model ID.
|
|
108
|
+
|
|
109
|
+
### OpenCode
|
|
110
|
+
|
|
111
|
+
Install OpenCode with the curl installer from [opencode.ai](https://opencode.ai).
|
|
112
|
+
The installer normally writes the binary to `~/.opencode/bin`, which is often
|
|
113
|
+
not on `PATH` in non-interactive shells. Add that directory to `PATH`, or set an
|
|
114
|
+
absolute path in Delegate config:
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"opencode": {
|
|
119
|
+
"binary": "/home/<user>/.opencode/bin/opencode"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Run `opencode auth login` before the first real launch. Delegate uses OpenCode's
|
|
125
|
+
existing global authentication state and does not manage login itself.
|
|
103
126
|
|
|
104
127
|
## Non-interactive agent setup
|
|
105
128
|
|
|
@@ -141,6 +164,8 @@ For an orchestrating agent, script, or CI job:
|
|
|
141
164
|
command -v codex >/dev/null || exit 3
|
|
142
165
|
command -v claude >/dev/null || exit 3
|
|
143
166
|
command -v grok >/dev/null || exit 3
|
|
167
|
+
command -v devin >/dev/null || exit 3
|
|
168
|
+
command -v opencode >/dev/null || exit 3
|
|
144
169
|
command -v kimi >/dev/null || exit 3
|
|
145
170
|
```
|
|
146
171
|
|
|
@@ -166,7 +191,9 @@ For an orchestrating agent, script, or CI job:
|
|
|
166
191
|
|
|
167
192
|
## CI expectations
|
|
168
193
|
|
|
169
|
-
The required test suite does not need real Cursor, Droid, Codex, Claude,
|
|
194
|
+
The required test suite does not need real Cursor, Droid, Codex, Claude, Grok,
|
|
195
|
+
Devin, OpenCode, or Kimi binaries. Tests use dry-run paths and fake binaries
|
|
196
|
+
where needed:
|
|
170
197
|
|
|
171
198
|
```bash
|
|
172
199
|
python3 -m compileall -q src tests bin
|