delegate-agent-cli 0.16.0__tar.gz → 0.17.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.16.0 → delegate_agent_cli-0.17.0}/CHANGELOG.md +40 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/MANIFEST.in +1 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/PKG-INFO +54 -11
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/README.md +51 -8
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/config.example.json +12 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/docs/agent-setup.md +22 -2
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/docs/cli-reference.md +74 -10
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/docs/configuration.md +77 -8
- delegate_agent_cli-0.17.0/docs/delegate-workflows.md +213 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/docs/development.md +4 -3
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/docs/publishing-checklist.md +2 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/docs/security-model.md +20 -8
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/docs/troubleshooting.md +35 -6
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/pyproject.toml +3 -3
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/__init__.py +1 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/argv_builders.py +110 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/bundled_models.py +10 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/cli.py +71 -12
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/cli_parser.py +46 -9
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/command_help.py +121 -8
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/config.py +96 -9
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/constants.py +27 -6
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/describe_payload.py +125 -4
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/harness_events.py +91 -5
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/model_discovery.py +83 -0
- delegate_agent_cli-0.17.0/src/delegate_agent/private_io.py +215 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/profiles.py +2 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/prompt_transport.py +1 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/reasoning.py +83 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/request_build.py +138 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/run_registry.py +18 -4
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/runner.py +4 -2
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/workflows/registry.py +3 -4
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/worktree_execution.py +2 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent_cli.egg-info/PKG-INFO +54 -11
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent_cli.egg-info/SOURCES.txt +2 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_capability_commands.py +12 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_command_help.py +2 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_delegate_help_cli.py +35 -2
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_delegate_parser.py +68 -28
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_delegate_validation.py +36 -10
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_end_to_end_tracking.py +1 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_engine_argv.py +304 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_execution_argv_and_prompt.py +46 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_harness_events.py +197 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_model_discovery.py +106 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_model_selection_wave1a.py +134 -2
- delegate_agent_cli-0.17.0/tests/test_omp_read_only_behavior.py +88 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_packaging.py +4 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_profiles.py +9 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_pure_call.py +52 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_reasoning_capabilities.py +28 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_run_registry.py +70 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_runner_capture.py +120 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_slash_passthrough.py +2 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_utility_modules.py +1 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_wave4_launch_features.py +8 -3
- delegate_agent_cli-0.16.0/src/delegate_agent/private_io.py +0 -109
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/CONTRIBUTING.md +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/LICENSE +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/SECURITY.md +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/bin/delegate-profile-shim +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/bin/delegate.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/docs/assets/delegate-agent-header.png +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/docs/live-runtime.md +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/docs/worktrees.md +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/examples/task.claude.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/examples/task.codex.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/examples/task.cursor.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/examples/task.droid.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/examples/task.grok.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/examples/task.judge.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/examples/task.kimi.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/setup.cfg +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/archived_logs.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/argv_utils.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/capability_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/command_errors.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/config_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/errors.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/git_utils.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/inspection_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/isolation.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/json_types.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/log_output.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/profile_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/profile_guard.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/prompt_instructions.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/redaction.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/rendering.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/request_models.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/retention.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/run_metadata.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/run_output_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/run_status.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/safe_workspace.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/seatbelt.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/snapshot_view.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/wait_cancel_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/workflows/__init__.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/workflows/commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/workflows/runtime.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/workflows/schema.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/workflows/script.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/worktree_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/worktree_gc.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/worktree_mgmt.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/worktree_records.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/worktree_remove.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/worktree_summary.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent/wsl.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent_cli.egg-info/dependency_links.txt +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent_cli.egg-info/entry_points.txt +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent_cli.egg-info/requires.txt +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/src/delegate_agent_cli.egg-info/top_level.txt +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_codex_pure_sandbox.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_config_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_delegate_isolation.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_execution_dry_run.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_execution_worktree_failure_cleanup.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_execution_worktree_preflight.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_execution_worktree_run.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_inspection_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_kimi_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_model_selection_wave1b.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_retention.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_safe_workspace_isolation.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_snapshot_redaction.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_snapshot_rendering.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_snapshot_run_output.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_snapshot_view.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_tracked_timeout.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_wait_cancel_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_workflow_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_worktree_list_show.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_worktree_prune_gc.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_worktree_remove.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.17.0}/tests/test_wsl_guardrails.py +0 -0
|
@@ -5,7 +5,45 @@ 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
|
-
## [
|
|
8
|
+
## [0.17.0] - 2026-07-18
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Pi is now a first-class `safe`/`work`/`call` engine with stateless JSON
|
|
13
|
+
execution, stdin prompt transport, model aliases, reasoning-effort mapping,
|
|
14
|
+
live model discovery, normalized JSON events, and a native read-only policy
|
|
15
|
+
for safe mode and `call --read-only`.
|
|
16
|
+
- Oh My Pi is now a first-class `omp` engine with matching mode, model alias,
|
|
17
|
+
reasoning, discovery, and event support. Its verified 17.0.4 prompt path uses
|
|
18
|
+
a redacted positional argument because piped stdin exits without processing.
|
|
19
|
+
- Child processes now receive an authoritative `WORKSPACE_ROOT`; run metadata
|
|
20
|
+
exposes the same path as `workspaceRoot`, with source and isolated execution
|
|
21
|
+
roots available through `DELEGATE_SOURCE_ROOT` and
|
|
22
|
+
`DELEGATE_EXECUTION_ROOT` where applicable.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- Repository-local `.delegate/config.json` is no longer loaded automatically.
|
|
27
|
+
Delegate reports it as an unapplied layer; operators must explicitly select
|
|
28
|
+
a trusted file with `DELEGATE_CONFIG`.
|
|
29
|
+
- Stateless calls now preserve child-created files under
|
|
30
|
+
`.delegate/artifacts/<runId>/` instead of deleting successful deliverables,
|
|
31
|
+
and report `artifactsPath` plus `preservedArtifacts` in the response.
|
|
32
|
+
- Unknown launch flags now fail as `unknown_option` before they can be absorbed
|
|
33
|
+
as prompt text, and corrected-command suggestions are emitted only after the
|
|
34
|
+
real parser validates them.
|
|
35
|
+
|
|
36
|
+
### Security
|
|
37
|
+
|
|
38
|
+
- Oh My Pi safe mode and `omp call --read-only` now add
|
|
39
|
+
`--approval-mode always-ask`, which denies write and exec tools in headless
|
|
40
|
+
mode even when project config requests `yolo`. A gated real-binary behavioral
|
|
41
|
+
test verifies writes and shell commands are denied while reads remain
|
|
42
|
+
available, and positional prompt guards reject flag- and include-shaped
|
|
43
|
+
injection prefixes.
|
|
44
|
+
- Private `.delegate` run, workflow, and cache state I/O now traverses from the
|
|
45
|
+
workspace anchor with descriptor-relative, no-follow opens, rejecting
|
|
46
|
+
symlinked path components to prevent symlink-swap races.
|
|
9
47
|
|
|
10
48
|
## [0.16.0] - 2026-07-16
|
|
11
49
|
|
|
@@ -425,6 +463,7 @@ Usage-audit fix wave: 82 sessions and 1,241 delegate invocations from one week o
|
|
|
425
463
|
|
|
426
464
|
- Releases before 0.1.3 predate this changelog.
|
|
427
465
|
|
|
466
|
+
[0.17.0]: https://github.com/treygoff24/delegate-agent/compare/v0.16.0...v0.17.0
|
|
428
467
|
[0.16.0]: https://github.com/treygoff24/delegate-agent/compare/v0.15.0...v0.16.0
|
|
429
468
|
[0.15.0]: https://github.com/treygoff24/delegate-agent/compare/v0.14.0...v0.15.0
|
|
430
469
|
[0.14.0]: https://github.com/treygoff24/delegate-agent/compare/v0.13.1...v0.14.0
|
|
@@ -9,6 +9,7 @@ include bin/delegate-profile-shim
|
|
|
9
9
|
include docs/agent-setup.md
|
|
10
10
|
include docs/cli-reference.md
|
|
11
11
|
include docs/configuration.md
|
|
12
|
+
include docs/delegate-workflows.md
|
|
12
13
|
include docs/development.md
|
|
13
14
|
include docs/live-runtime.md
|
|
14
15
|
include docs/publishing-checklist.md
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: delegate-agent-cli
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: A tiny CLI for delegating bounded agent tasks
|
|
3
|
+
Version: 0.17.0
|
|
4
|
+
Summary: A tiny CLI for delegating bounded agent tasks across coding-agent runtimes.
|
|
5
5
|
Author: Trey Goff
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/treygoff24/delegate-agent
|
|
@@ -9,7 +9,7 @@ Project-URL: Repository, https://github.com/treygoff24/delegate-agent
|
|
|
9
9
|
Project-URL: Issues, https://github.com/treygoff24/delegate-agent/issues
|
|
10
10
|
Project-URL: Documentation, https://github.com/treygoff24/delegate-agent/tree/main/docs
|
|
11
11
|
Project-URL: Security, https://github.com/treygoff24/delegate-agent/security/policy
|
|
12
|
-
Keywords: agents,cli,claude,codex,delegation,cursor,droid,kimi
|
|
12
|
+
Keywords: agents,cli,claude,codex,delegation,cursor,droid,kimi,omp,pi
|
|
13
13
|
Classifier: Development Status :: 3 - Alpha
|
|
14
14
|
Classifier: Environment :: Console
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
@@ -37,7 +37,7 @@ Dynamic: license-file
|
|
|
37
37
|
|
|
38
38
|
# Delegate Agent
|
|
39
39
|
|
|
40
|
-
Delegate Agent is a small CLI for handing a bounded task to another coding-agent runtime. It normalizes common calls to Cursor Agent, Factory Droid, OpenAI Codex, Claude Code, Grok Build, Devin, OpenCode, 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, Pi, Oh My Pi, 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,11 +47,11 @@ 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, Claude, and
|
|
50
|
+
Prompt handling is provider-specific: Codex, Claude, OpenCode, and Pi prompts are delivered to the child
|
|
51
51
|
runtime over stdin; Droid, Grok, and Devin prompts are delivered through private
|
|
52
|
-
temporary prompt files; Cursor Agent and Kimi Code currently
|
|
53
|
-
require prompt argv. Delegate redacts Cursor and Kimi prompt argv in
|
|
54
|
-
output and run manifests, but true process-argv hiding for those
|
|
52
|
+
temporary prompt files; Cursor Agent, Oh My Pi, and Kimi Code currently
|
|
53
|
+
require prompt argv. Delegate redacts Cursor, Oh My Pi, and Kimi prompt argv in
|
|
54
|
+
dry-run 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
57
|
## Install
|
|
@@ -99,9 +99,31 @@ command -v claude # Claude Code CLI, used by delegate claude ...
|
|
|
99
99
|
command -v grok # xAI Grok Build CLI, used by delegate grok ...
|
|
100
100
|
command -v devin # Cognition Devin CLI, used by delegate devin ...
|
|
101
101
|
command -v opencode # OpenCode CLI, used by delegate opencode ...
|
|
102
|
+
command -v pi # Pi coding agent, used by delegate pi ...
|
|
103
|
+
command -v omp # Oh My Pi, used by delegate omp ...
|
|
102
104
|
command -v kimi # Kimi Code CLI, used by delegate kimi ...
|
|
103
105
|
```
|
|
104
106
|
|
|
107
|
+
Supported modes:
|
|
108
|
+
|
|
109
|
+
| Harness | Command | `safe` | `work` | `call` |
|
|
110
|
+
| --- | --- | --- | --- | --- |
|
|
111
|
+
| Cursor Agent | `cursor` | Yes | Yes | Yes |
|
|
112
|
+
| Factory Droid | `droid` | Yes | Yes | Yes |
|
|
113
|
+
| OpenAI Codex | `codex` | Yes | Yes | Yes |
|
|
114
|
+
| Claude Code | `claude` | Yes | Yes | Yes |
|
|
115
|
+
| Grok Build | `grok` | Yes | Yes | Yes |
|
|
116
|
+
| Devin | `devin` | No | Yes | Yes |
|
|
117
|
+
| OpenCode | `opencode` | Yes | Yes | Yes |
|
|
118
|
+
| Pi | `pi` | Yes | Yes | Yes |
|
|
119
|
+
| Oh My Pi | `omp` | Yes | Yes | Yes |
|
|
120
|
+
| Kimi Code | `kimi` | Yes | Yes | Yes |
|
|
121
|
+
|
|
122
|
+
Devin `safe` is rejected because Delegate cannot enforce a read-only filesystem
|
|
123
|
+
survey through Devin's generic execution tool. See the
|
|
124
|
+
[security model](docs/security-model.md) for the strength and limits of each
|
|
125
|
+
Harness's `safe` and `call --read-only` boundary.
|
|
126
|
+
|
|
105
127
|
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.
|
|
106
128
|
|
|
107
129
|
Install OpenCode from [opencode.ai](https://opencode.ai). Its curl installer
|
|
@@ -131,6 +153,8 @@ delegate --json models
|
|
|
131
153
|
delegate --json models codex # per-engine advisory catalog
|
|
132
154
|
delegate --json models cursor --live # merge live harness probe when supported
|
|
133
155
|
delegate --json models opencode --live # query every model visible to OpenCode
|
|
156
|
+
delegate --json models pi --live # query every model visible to Pi
|
|
157
|
+
delegate --json models omp --live # query every model visible to Oh My Pi
|
|
134
158
|
delegate --json capabilities
|
|
135
159
|
```
|
|
136
160
|
|
|
@@ -155,6 +179,8 @@ Preview the command without launching a child runtime:
|
|
|
155
179
|
delegate --json dry-run codex safe "Review this repository. Do not edit files."
|
|
156
180
|
delegate --json dry-run claude safe "Review this repository. Do not edit files."
|
|
157
181
|
delegate --json dry-run opencode safe "Review this repository. Do not edit files."
|
|
182
|
+
delegate --json dry-run pi safe "Review this repository. Do not edit files."
|
|
183
|
+
delegate --json dry-run omp safe "Review this repository. Do not edit files."
|
|
158
184
|
```
|
|
159
185
|
|
|
160
186
|
Run a read-only review in an isolated throwaway workspace:
|
|
@@ -164,6 +190,8 @@ delegate codex safe "Review this repository for correctness risks. Do not edit f
|
|
|
164
190
|
delegate claude safe "Review this repository for correctness risks. Do not edit files."
|
|
165
191
|
delegate grok safe "Review this repository for correctness risks. Do not edit files."
|
|
166
192
|
delegate opencode safe "Review this repository for correctness risks. Do not edit files."
|
|
193
|
+
delegate pi safe "Review this repository for correctness risks. Do not edit files."
|
|
194
|
+
delegate omp safe "Review this repository for correctness risks. Do not edit files."
|
|
167
195
|
delegate cursor safe "Review the current diff for regressions. Do not edit files."
|
|
168
196
|
delegate kimi safe "Review this repository for regressions. Do not edit files."
|
|
169
197
|
```
|
|
@@ -182,6 +210,8 @@ delegate cursor work "Fix the parser bug. Run python3 -m unittest tests.test_del
|
|
|
182
210
|
delegate claude work "Implement the scoped change and run the named check. Report changed files."
|
|
183
211
|
delegate devin work "Implement the scoped change and run the named check. Report changed files."
|
|
184
212
|
delegate opencode work "Implement the scoped change and run the named check. Report changed files."
|
|
213
|
+
delegate pi work "Implement the scoped change and run the named check. Report changed files."
|
|
214
|
+
delegate omp work "Implement the scoped change and run the named check. Report changed files."
|
|
185
215
|
delegate kimi work "Implement the scoped change and run the named check. Report changed files."
|
|
186
216
|
```
|
|
187
217
|
|
|
@@ -223,6 +253,12 @@ delegate --json codex call "Summarize this context in three bullets."
|
|
|
223
253
|
delegate --json claude call --pure --timeout 60 --output-schema result.schema.json < prompt.txt
|
|
224
254
|
```
|
|
225
255
|
|
|
256
|
+
Use `delegate --cwd /path/to/workspace <engine> work ...` when the deliverable
|
|
257
|
+
is a file; `call` is optimized for text results. If a call creates files in its throwaway cwd,
|
|
258
|
+
Delegate preserves that cwd under `.delegate/artifacts/<runId>/` and reports
|
|
259
|
+
`preservedArtifacts` in the JSON result instead of deleting the files. Artifact
|
|
260
|
+
cleanup is manual.
|
|
261
|
+
|
|
226
262
|
`call --pure` is a hostile-input completion boundary available on Claude only.
|
|
227
263
|
It uses an empty temporary cwd, an allowlisted child environment, no Delegate
|
|
228
264
|
prompt framing, and no session persistence or tools according to the engine
|
|
@@ -244,7 +280,7 @@ python3 bin/delegate.py workflow approve wf_0123abcdef45
|
|
|
244
280
|
See [Delegate Workflows](docs/delegate-workflows.md) for the DSL, safety
|
|
245
281
|
limits, config, and gate semantics.
|
|
246
282
|
|
|
247
|
-
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
|
|
283
|
+
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 and Grok map to native `--effort`, OpenCode passes it through as `--variant`, and Pi/Oh My Pi map `low|medium|high|xhigh|max` directly to `--thinking`. 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:
|
|
248
284
|
|
|
249
285
|
```bash
|
|
250
286
|
delegate --json dry-run codex safe --reasoning-effort high "Review this repository. Do not edit files."
|
|
@@ -324,12 +360,19 @@ Delegate separates three ideas:
|
|
|
324
360
|
| Isolation | The child runtime can run in the source workspace, a temporary copy/worktree, or a persistent Git worktree. |
|
|
325
361
|
| Runtime policy | Extra flags passed to the child runtime, such as Codex `--sandbox read-only`. |
|
|
326
362
|
|
|
363
|
+
Every child receives `WORKSPACE_ROOT`, the resolved execution workspace shown as
|
|
364
|
+
`workspaceRoot` in run metadata. Use it to anchor workspace-relative commands
|
|
365
|
+
after changing into a toolchain directory. Source-backed runs also expose
|
|
366
|
+
`DELEGATE_SOURCE_ROOT`; isolated runs expose `DELEGATE_EXECUTION_ROOT`.
|
|
367
|
+
|
|
327
368
|
Defaults are intentionally conservative for review paths:
|
|
328
369
|
|
|
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.
|
|
370
|
+
- `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok safe`, `delegate opencode safe`, `delegate pi safe`, `delegate omp 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.
|
|
330
371
|
- 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.
|
|
331
372
|
- 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.
|
|
332
373
|
- 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.
|
|
374
|
+
- Pi safe mode and `pi call --read-only` use only the built-in `read` tool and disable extension, skill, prompt-template, and project-approval discovery. All Pi modes use `--no-session`; Delegate's run registry is the durable record.
|
|
375
|
+
- Oh My Pi safe mode and `omp call --read-only` use only `read`, disable extension, skill, rules, and LSP discovery, and enforce `--approval-mode always-ask` so headless write and exec requests are denied. All Oh My Pi modes use `--no-session`; Delegate passes prompts as positional arguments because the verified 17.0.4 stdin path exited without processing piped input.
|
|
333
376
|
- 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.
|
|
334
377
|
- `work` mode can edit. By default it runs in the real workspace for backward compatibility.
|
|
335
378
|
|
|
@@ -356,7 +399,7 @@ non-ignored files from a dirty source checkout before launch, report the counts
|
|
|
356
399
|
in a `dirty_source_auto_included` warning, and tear down the worktree if syncing
|
|
357
400
|
fails. `--include-dirty` remains an explicit, harmless no-op on a clean source.
|
|
358
401
|
|
|
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`.
|
|
402
|
+
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/Pi/Oh My Pi/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
|
|
360
403
|
|
|
361
404
|
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.
|
|
362
405
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# Delegate Agent
|
|
6
6
|
|
|
7
|
-
Delegate Agent is a small CLI for handing a bounded task to another coding-agent runtime. It normalizes common calls to Cursor Agent, Factory Droid, OpenAI Codex, Claude Code, Grok Build, Devin, OpenCode, 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, Pi, Oh My Pi, 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,11 +14,11 @@ 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, Claude, and
|
|
17
|
+
Prompt handling is provider-specific: Codex, Claude, OpenCode, and Pi prompts are delivered to the child
|
|
18
18
|
runtime over stdin; Droid, Grok, and Devin prompts are delivered through private
|
|
19
|
-
temporary prompt files; Cursor Agent and Kimi Code currently
|
|
20
|
-
require prompt argv. Delegate redacts Cursor and Kimi prompt argv in
|
|
21
|
-
output and run manifests, but true process-argv hiding for those
|
|
19
|
+
temporary prompt files; Cursor Agent, Oh My Pi, and Kimi Code currently
|
|
20
|
+
require prompt argv. Delegate redacts Cursor, Oh My Pi, and Kimi prompt argv in
|
|
21
|
+
dry-run 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
24
|
## Install
|
|
@@ -66,9 +66,31 @@ command -v claude # Claude Code CLI, used by delegate claude ...
|
|
|
66
66
|
command -v grok # xAI Grok Build CLI, used by delegate grok ...
|
|
67
67
|
command -v devin # Cognition Devin CLI, used by delegate devin ...
|
|
68
68
|
command -v opencode # OpenCode CLI, used by delegate opencode ...
|
|
69
|
+
command -v pi # Pi coding agent, used by delegate pi ...
|
|
70
|
+
command -v omp # Oh My Pi, used by delegate omp ...
|
|
69
71
|
command -v kimi # Kimi Code CLI, used by delegate kimi ...
|
|
70
72
|
```
|
|
71
73
|
|
|
74
|
+
Supported modes:
|
|
75
|
+
|
|
76
|
+
| Harness | Command | `safe` | `work` | `call` |
|
|
77
|
+
| --- | --- | --- | --- | --- |
|
|
78
|
+
| Cursor Agent | `cursor` | Yes | Yes | Yes |
|
|
79
|
+
| Factory Droid | `droid` | Yes | Yes | Yes |
|
|
80
|
+
| OpenAI Codex | `codex` | Yes | Yes | Yes |
|
|
81
|
+
| Claude Code | `claude` | Yes | Yes | Yes |
|
|
82
|
+
| Grok Build | `grok` | Yes | Yes | Yes |
|
|
83
|
+
| Devin | `devin` | No | Yes | Yes |
|
|
84
|
+
| OpenCode | `opencode` | Yes | Yes | Yes |
|
|
85
|
+
| Pi | `pi` | Yes | Yes | Yes |
|
|
86
|
+
| Oh My Pi | `omp` | Yes | Yes | Yes |
|
|
87
|
+
| Kimi Code | `kimi` | Yes | Yes | Yes |
|
|
88
|
+
|
|
89
|
+
Devin `safe` is rejected because Delegate cannot enforce a read-only filesystem
|
|
90
|
+
survey through Devin's generic execution tool. See the
|
|
91
|
+
[security model](docs/security-model.md) for the strength and limits of each
|
|
92
|
+
Harness's `safe` and `call --read-only` boundary.
|
|
93
|
+
|
|
72
94
|
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.
|
|
73
95
|
|
|
74
96
|
Install OpenCode from [opencode.ai](https://opencode.ai). Its curl installer
|
|
@@ -98,6 +120,8 @@ delegate --json models
|
|
|
98
120
|
delegate --json models codex # per-engine advisory catalog
|
|
99
121
|
delegate --json models cursor --live # merge live harness probe when supported
|
|
100
122
|
delegate --json models opencode --live # query every model visible to OpenCode
|
|
123
|
+
delegate --json models pi --live # query every model visible to Pi
|
|
124
|
+
delegate --json models omp --live # query every model visible to Oh My Pi
|
|
101
125
|
delegate --json capabilities
|
|
102
126
|
```
|
|
103
127
|
|
|
@@ -122,6 +146,8 @@ Preview the command without launching a child runtime:
|
|
|
122
146
|
delegate --json dry-run codex safe "Review this repository. Do not edit files."
|
|
123
147
|
delegate --json dry-run claude safe "Review this repository. Do not edit files."
|
|
124
148
|
delegate --json dry-run opencode safe "Review this repository. Do not edit files."
|
|
149
|
+
delegate --json dry-run pi safe "Review this repository. Do not edit files."
|
|
150
|
+
delegate --json dry-run omp safe "Review this repository. Do not edit files."
|
|
125
151
|
```
|
|
126
152
|
|
|
127
153
|
Run a read-only review in an isolated throwaway workspace:
|
|
@@ -131,6 +157,8 @@ delegate codex safe "Review this repository for correctness risks. Do not edit f
|
|
|
131
157
|
delegate claude safe "Review this repository for correctness risks. Do not edit files."
|
|
132
158
|
delegate grok safe "Review this repository for correctness risks. Do not edit files."
|
|
133
159
|
delegate opencode safe "Review this repository for correctness risks. Do not edit files."
|
|
160
|
+
delegate pi safe "Review this repository for correctness risks. Do not edit files."
|
|
161
|
+
delegate omp safe "Review this repository for correctness risks. Do not edit files."
|
|
134
162
|
delegate cursor safe "Review the current diff for regressions. Do not edit files."
|
|
135
163
|
delegate kimi safe "Review this repository for regressions. Do not edit files."
|
|
136
164
|
```
|
|
@@ -149,6 +177,8 @@ delegate cursor work "Fix the parser bug. Run python3 -m unittest tests.test_del
|
|
|
149
177
|
delegate claude work "Implement the scoped change and run the named check. Report changed files."
|
|
150
178
|
delegate devin work "Implement the scoped change and run the named check. Report changed files."
|
|
151
179
|
delegate opencode work "Implement the scoped change and run the named check. Report changed files."
|
|
180
|
+
delegate pi work "Implement the scoped change and run the named check. Report changed files."
|
|
181
|
+
delegate omp work "Implement the scoped change and run the named check. Report changed files."
|
|
152
182
|
delegate kimi work "Implement the scoped change and run the named check. Report changed files."
|
|
153
183
|
```
|
|
154
184
|
|
|
@@ -190,6 +220,12 @@ delegate --json codex call "Summarize this context in three bullets."
|
|
|
190
220
|
delegate --json claude call --pure --timeout 60 --output-schema result.schema.json < prompt.txt
|
|
191
221
|
```
|
|
192
222
|
|
|
223
|
+
Use `delegate --cwd /path/to/workspace <engine> work ...` when the deliverable
|
|
224
|
+
is a file; `call` is optimized for text results. If a call creates files in its throwaway cwd,
|
|
225
|
+
Delegate preserves that cwd under `.delegate/artifacts/<runId>/` and reports
|
|
226
|
+
`preservedArtifacts` in the JSON result instead of deleting the files. Artifact
|
|
227
|
+
cleanup is manual.
|
|
228
|
+
|
|
193
229
|
`call --pure` is a hostile-input completion boundary available on Claude only.
|
|
194
230
|
It uses an empty temporary cwd, an allowlisted child environment, no Delegate
|
|
195
231
|
prompt framing, and no session persistence or tools according to the engine
|
|
@@ -211,7 +247,7 @@ python3 bin/delegate.py workflow approve wf_0123abcdef45
|
|
|
211
247
|
See [Delegate Workflows](docs/delegate-workflows.md) for the DSL, safety
|
|
212
248
|
limits, config, and gate semantics.
|
|
213
249
|
|
|
214
|
-
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
|
|
250
|
+
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 and Grok map to native `--effort`, OpenCode passes it through as `--variant`, and Pi/Oh My Pi map `low|medium|high|xhigh|max` directly to `--thinking`. 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:
|
|
215
251
|
|
|
216
252
|
```bash
|
|
217
253
|
delegate --json dry-run codex safe --reasoning-effort high "Review this repository. Do not edit files."
|
|
@@ -291,12 +327,19 @@ Delegate separates three ideas:
|
|
|
291
327
|
| Isolation | The child runtime can run in the source workspace, a temporary copy/worktree, or a persistent Git worktree. |
|
|
292
328
|
| Runtime policy | Extra flags passed to the child runtime, such as Codex `--sandbox read-only`. |
|
|
293
329
|
|
|
330
|
+
Every child receives `WORKSPACE_ROOT`, the resolved execution workspace shown as
|
|
331
|
+
`workspaceRoot` in run metadata. Use it to anchor workspace-relative commands
|
|
332
|
+
after changing into a toolchain directory. Source-backed runs also expose
|
|
333
|
+
`DELEGATE_SOURCE_ROOT`; isolated runs expose `DELEGATE_EXECUTION_ROOT`.
|
|
334
|
+
|
|
294
335
|
Defaults are intentionally conservative for review paths:
|
|
295
336
|
|
|
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.
|
|
337
|
+
- `delegate cursor safe`, `delegate codex safe`, `delegate claude safe`, `delegate grok safe`, `delegate opencode safe`, `delegate pi safe`, `delegate omp 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.
|
|
297
338
|
- 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.
|
|
298
339
|
- 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.
|
|
299
340
|
- 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.
|
|
341
|
+
- Pi safe mode and `pi call --read-only` use only the built-in `read` tool and disable extension, skill, prompt-template, and project-approval discovery. All Pi modes use `--no-session`; Delegate's run registry is the durable record.
|
|
342
|
+
- Oh My Pi safe mode and `omp call --read-only` use only `read`, disable extension, skill, rules, and LSP discovery, and enforce `--approval-mode always-ask` so headless write and exec requests are denied. All Oh My Pi modes use `--no-session`; Delegate passes prompts as positional arguments because the verified 17.0.4 stdin path exited without processing piped input.
|
|
300
343
|
- 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.
|
|
301
344
|
- `work` mode can edit. By default it runs in the real workspace for backward compatibility.
|
|
302
345
|
|
|
@@ -323,7 +366,7 @@ non-ignored files from a dirty source checkout before launch, report the counts
|
|
|
323
366
|
in a `dirty_source_auto_included` warning, and tear down the worktree if syncing
|
|
324
367
|
fails. `--include-dirty` remains an explicit, harmless no-op on a clean source.
|
|
325
368
|
|
|
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`.
|
|
369
|
+
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/Pi/Oh My Pi/Kimi safe isolation falls back to a directory copy because Git cannot create a detached worktree from an unborn `HEAD`.
|
|
327
370
|
|
|
328
371
|
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.
|
|
329
372
|
|
|
@@ -93,6 +93,18 @@
|
|
|
93
93
|
"defaultAgent": null,
|
|
94
94
|
"models": {}
|
|
95
95
|
},
|
|
96
|
+
"pi": {
|
|
97
|
+
"binary": "pi",
|
|
98
|
+
"defaultModel": null,
|
|
99
|
+
"defaultReasoningEffort": null,
|
|
100
|
+
"models": {}
|
|
101
|
+
},
|
|
102
|
+
"omp": {
|
|
103
|
+
"binary": "omp",
|
|
104
|
+
"defaultModel": null,
|
|
105
|
+
"defaultReasoningEffort": null,
|
|
106
|
+
"models": {}
|
|
107
|
+
},
|
|
96
108
|
"kimi": {
|
|
97
109
|
"binary": "kimi",
|
|
98
110
|
"defaultModel": "kimi-code/k3",
|
|
@@ -38,6 +38,8 @@ This guide covers both human setup and non-interactive setup for agents or CI jo
|
|
|
38
38
|
command -v grok || echo "Grok Build CLI missing"
|
|
39
39
|
command -v devin || echo "Devin CLI missing"
|
|
40
40
|
command -v opencode || echo "OpenCode CLI missing"
|
|
41
|
+
command -v pi || echo "Pi coding agent missing"
|
|
42
|
+
command -v omp || echo "Oh My Pi missing"
|
|
41
43
|
command -v kimi || echo "Kimi Code CLI missing"
|
|
42
44
|
```
|
|
43
45
|
|
|
@@ -99,12 +101,14 @@ When running on Windows through WSL, treat Delegate as a Linux CLI:
|
|
|
99
101
|
delegate --json dry-run devin work "Describe the planned work invocation."
|
|
100
102
|
delegate --json dry-run opencode safe "Review only. Do not edit files."
|
|
101
103
|
delegate --json dry-run opencode safe --reasoning-effort high "Review only. Do not edit files."
|
|
104
|
+
delegate --json dry-run pi safe --reasoning-effort high "Review only. Do not edit files."
|
|
105
|
+
delegate --json dry-run omp safe --reasoning-effort high "Review only. Do not edit files."
|
|
102
106
|
delegate --json dry-run cursor safe "Review only. Do not edit files."
|
|
103
107
|
delegate --json dry-run droid reviewer safe "Review only. Do not edit files."
|
|
104
108
|
delegate --json dry-run kimi safe "Review only. Do not edit files."
|
|
105
109
|
```
|
|
106
110
|
|
|
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
|
|
111
|
+
The Codex, Claude, Grok, Devin work, OpenCode, Pi, Oh My Pi, 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 maps to `--variant`; Pi and Oh My Pi map to `--thinking`. 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
112
|
|
|
109
113
|
### OpenCode
|
|
110
114
|
|
|
@@ -124,6 +128,20 @@ absolute path in Delegate config:
|
|
|
124
128
|
Run `opencode auth login` before the first real launch. Delegate uses OpenCode's
|
|
125
129
|
existing global authentication state and does not manage login itself.
|
|
126
130
|
|
|
131
|
+
### Pi
|
|
132
|
+
|
|
133
|
+
Install [Pi](https://github.com/badlogic/pi-mono) and authenticate its selected
|
|
134
|
+
provider. Delegate uses Pi's existing `~/.pi/agent/auth.json`; it never reads,
|
|
135
|
+
prints, or forwards that file and never emits Pi's `--api-key` flag. Configure
|
|
136
|
+
an absolute `pi.binary` when `pi` is not on the non-interactive `PATH`.
|
|
137
|
+
|
|
138
|
+
### Oh My Pi setup
|
|
139
|
+
|
|
140
|
+
Install Oh My Pi and authenticate its selected provider. Delegate uses the
|
|
141
|
+
runtime's existing profile without reading or forwarding credentials and never
|
|
142
|
+
emits `--api-key` or Oh My Pi's role flags. Configure an absolute `omp.binary`
|
|
143
|
+
when `omp` is not on the non-interactive `PATH`.
|
|
144
|
+
|
|
127
145
|
## Non-interactive agent setup
|
|
128
146
|
|
|
129
147
|
For an orchestrating agent, script, or CI job:
|
|
@@ -166,6 +184,8 @@ For an orchestrating agent, script, or CI job:
|
|
|
166
184
|
command -v grok >/dev/null || exit 3
|
|
167
185
|
command -v devin >/dev/null || exit 3
|
|
168
186
|
command -v opencode >/dev/null || exit 3
|
|
187
|
+
command -v pi >/dev/null || exit 3
|
|
188
|
+
command -v omp >/dev/null || exit 3
|
|
169
189
|
command -v kimi >/dev/null || exit 3
|
|
170
190
|
```
|
|
171
191
|
|
|
@@ -192,7 +212,7 @@ For an orchestrating agent, script, or CI job:
|
|
|
192
212
|
## CI expectations
|
|
193
213
|
|
|
194
214
|
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
|
|
215
|
+
Devin, OpenCode, Pi, Oh My Pi, or Kimi binaries. Tests use dry-run paths and fake binaries
|
|
196
216
|
where needed:
|
|
197
217
|
|
|
198
218
|
```bash
|
|
@@ -44,17 +44,26 @@ delegate opencode safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--
|
|
|
44
44
|
delegate opencode work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
45
45
|
delegate opencode call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--agent NAME] [--prompt-file PATH] [prompt...]
|
|
46
46
|
|
|
47
|
+
delegate pi safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
48
|
+
delegate pi work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
49
|
+
delegate pi call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
|
|
50
|
+
|
|
51
|
+
delegate omp safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
52
|
+
delegate omp work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
53
|
+
delegate omp call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
|
|
54
|
+
|
|
47
55
|
delegate kimi safe [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
48
56
|
delegate kimi work [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
49
57
|
delegate kimi call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
|
|
50
58
|
```
|
|
51
59
|
|
|
52
60
|
Prompt sources are direct arguments, `--prompt-file`, or Delegate stdin. Raw C0 control characters other than newline, carriage return, and tab are stripped before launch; a prompt that becomes empty fails fast. After
|
|
53
|
-
Delegate resolves the prompt, Codex, Claude, and
|
|
54
|
-
stdin.
|
|
61
|
+
Delegate resolves the prompt, Codex, Claude, OpenCode, and Pi prompts are passed to the child runtime over
|
|
62
|
+
stdin. Oh My Pi receives a positional prompt because 17.0.4 did not consume piped stdin in the verified
|
|
63
|
+
non-interactive invocation. Droid and Grok prompts are written to a private temporary prompt file and passed
|
|
55
64
|
with Droid's documented `--file` option or Grok's `--prompt-file`. Cursor Agent currently only exposes
|
|
56
65
|
positional prompt input, and Kimi Code prompt mode currently uses `--prompt`,
|
|
57
|
-
so those
|
|
66
|
+
so those Harnesses also use argv transport; Delegate redacts Cursor, Oh My Pi, and Kimi
|
|
58
67
|
prompt argv in dry-run output and run manifests.
|
|
59
68
|
|
|
60
69
|
Temporary safe isolation also re-roots absolute paths under the source workspace
|
|
@@ -79,10 +88,10 @@ matches an alias key; otherwise it is passed through verbatim as a raw model ID
|
|
|
79
88
|
`MODEL_ALIAS` (alias-only/strict); give either the positional or `--model`, not
|
|
80
89
|
both. With neither, Droid uses `droid.defaultModel` when set. Discover aliases
|
|
81
90
|
and advisory catalogs with `delegate models`, `delegate models <engine>`, and
|
|
82
|
-
`delegate models <engine> --live` (live probes for cursor/droid/devin/opencode; other
|
|
91
|
+
`delegate models <engine> --live` (live probes for cursor/droid/devin/opencode/pi/omp; other
|
|
83
92
|
engines report live unsupported).
|
|
84
93
|
|
|
85
|
-
`--reasoning-effort LEVEL` is optional and parsed only before prompt text begins. Engines with capability metadata reject unsupported model/effort pairs before launch with `unsupported_reasoning_effort`. It affects only model reasoning depth, cost, or latency; it does not change `safe`/`work`/`call` permissions, sandboxing, approvals, network policy, or edit capability. Cursor effort is model-selection based and requires `cursor.reasoningEffortModels`; an explicit `--model` wins over effort→model routing. Droid emits `--reasoning-effort LEVEL`; Codex emits a `model_reasoning_effort` config override for the resolved model, or for the Codex harness default model when no `codex.defaultModel` is configured and the request was explicit; Claude emits Claude Code `--effort LEVEL`; Grok emits Grok `--effort LEVEL` (`low`, `medium`, `high`, `xhigh`, `max`); OpenCode emits `--variant LEVEL` without validating it against the selected model. The Kimi CLI exposes no effort flag; k3 supports effort internally via `~/.kimi-code/config.toml`, so Delegate rejects `--reasoning-effort` for Kimi.
|
|
94
|
+
`--reasoning-effort LEVEL` is optional and parsed only before prompt text begins. Engines with capability metadata reject unsupported model/effort pairs before launch with `unsupported_reasoning_effort`. It affects only model reasoning depth, cost, or latency; it does not change `safe`/`work`/`call` permissions, sandboxing, approvals, network policy, or edit capability. Cursor effort is model-selection based and requires `cursor.reasoningEffortModels`; an explicit `--model` wins over effort→model routing. Droid emits `--reasoning-effort LEVEL`; Codex emits a `model_reasoning_effort` config override for the resolved model, or for the Codex harness default model when no `codex.defaultModel` is configured and the request was explicit; Claude emits Claude Code `--effort LEVEL`; Grok emits Grok `--effort LEVEL` (`low`, `medium`, `high`, `xhigh`, `max`); OpenCode emits `--variant LEVEL` without validating it against the selected model; Pi and Oh My Pi emit `--thinking LEVEL` and accept the same five Delegate levels. The Kimi CLI exposes no effort flag; k3 supports effort internally via `~/.kimi-code/config.toml`, so Delegate rejects `--reasoning-effort` for Kimi.
|
|
86
95
|
|
|
87
96
|
`--fast` and `--no-fast` are Codex-only, mutually exclusive per-run service-tier overrides. `--fast` emits `service_tier="fast"` plus `features.fast_mode=true` (Codex silently drops a Fast tier when that feature flag is off in the ambient config, so Delegate enables it explicitly); `--no-fast` emits `service_tier="default"` so a globally enabled Fast setting can be turned off for one child. Omitting both emits no override and inherits Codex configuration. Fast is orthogonal to model selection, reasoning effort, and Delegate safety policy. Two upstream caveats: Codex strips the service tier when authenticated with an API key (Fast is a ChatGPT-plan feature), and neither Codex nor the API fails on a tier the model does not offer — Delegate's flag validation is the only fail-closed layer, so an unsupported combination degrades silently to standard routing rather than erroring.
|
|
88
97
|
|
|
@@ -284,6 +293,55 @@ delegate opencode call --read-only --model reviewer --prompt-file rubric.md
|
|
|
284
293
|
delegate --isolation worktree opencode work "Implement the feature in a persistent worktree."
|
|
285
294
|
```
|
|
286
295
|
|
|
296
|
+
### `delegate pi`
|
|
297
|
+
|
|
298
|
+
Wraps Pi's headless print mode.
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
delegate [--json] [--isolation auto|none|worktree] pi {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
302
|
+
delegate [--json] pi call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
- Delegate launches `pi -p --no-session --mode json` and sends the resolved prompt over stdin.
|
|
306
|
+
- Safe mode and `call --read-only` add `--tools read --no-extensions --no-skills --no-prompt-templates --no-approve`; safe mode also uses Delegate's isolated throwaway workspace.
|
|
307
|
+
- Model aliases accept either a Pi `provider/model` string or `{ "model": "provider/model", "thinking": "LEVEL" }`.
|
|
308
|
+
- `--reasoning-effort` maps directly to `--thinking` for `low`, `medium`, `high`, `xhigh`, and `max`. Structured aliases may select Pi's additional `off` or `minimal` levels.
|
|
309
|
+
- All modes are stateless at Pi's session layer; Delegate's run registry remains the durable record.
|
|
310
|
+
- JSON call responses retain the standard `text` field and also populate `assistantText`, matching tracked safe/work envelopes.
|
|
311
|
+
- `delegate models pi --live` queries Pi's visible provider/model catalog.
|
|
312
|
+
|
|
313
|
+
Examples:
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
delegate pi safe --reasoning-effort high "Review this repo for regressions."
|
|
317
|
+
delegate pi work --model reviewer "Implement the scoped task and run its checks."
|
|
318
|
+
delegate pi call --read-only --prompt-file rubric.md
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### `delegate omp`
|
|
322
|
+
|
|
323
|
+
Wraps Oh My Pi's headless print mode.
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
delegate [--json] [--isolation auto|none|worktree] omp {safe,work} [--model <alias-or-model>] [--reasoning-effort LEVEL] [--progress] [--timeout SECONDS] [--forbid-commit] [--prompt-file PATH] [prompt...]
|
|
327
|
+
delegate [--json] omp call [--read-only] [--timeout SECONDS] [--model <alias-or-model>] [--reasoning-effort LEVEL] [--prompt-file PATH] [prompt...]
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
- Delegate launches `omp -p --no-session --mode json` and passes the resolved prompt as a positional argument.
|
|
331
|
+
- Safe mode and `call --read-only` add `--tools read --no-extensions --no-skills --no-rules --no-lsp --approval-mode always-ask`; the approval mode is the load-bearing write/exec denial in headless mode, and safe mode also uses Delegate's isolated throwaway workspace.
|
|
332
|
+
- Model aliases accept either a `provider/model` string or `{ "model": "provider/model", "thinking": "LEVEL" }`.
|
|
333
|
+
- `--reasoning-effort` maps directly to `--thinking` for `low`, `medium`, `high`, `xhigh`, and `max`. Structured aliases may select `off` or `minimal`.
|
|
334
|
+
- Delegate never emits Oh My Pi's `--smol`, `--slow`, `--plan`, `--prewalk*`, or `--plan-yolo*` role flags.
|
|
335
|
+
- `delegate models omp --live` uses `omp models --json --no-extensions`.
|
|
336
|
+
|
|
337
|
+
Examples:
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
delegate omp safe --reasoning-effort high "Review this repo for regressions."
|
|
341
|
+
delegate omp work --model reviewer "Implement the scoped task and run its checks."
|
|
342
|
+
delegate omp call --read-only --prompt-file rubric.md
|
|
343
|
+
```
|
|
344
|
+
|
|
287
345
|
### `delegate kimi`
|
|
288
346
|
|
|
289
347
|
Usage:
|
|
@@ -446,6 +504,12 @@ Because the child call is stateless, `--isolation`, `--pass-through`,
|
|
|
446
504
|
`--progress`, `--forbid-commit`, and markdown completion reports are rejected.
|
|
447
505
|
An ordinary call also rejects `--cwd`.
|
|
448
506
|
|
|
507
|
+
Use `delegate --cwd /path/to/workspace <engine> work ...` for file deliverables;
|
|
508
|
+
`call` is intended for text results. If a child nevertheless creates files in the call cwd,
|
|
509
|
+
Delegate moves the cwd to `.delegate/artifacts/<runId>/` at teardown and lists
|
|
510
|
+
the retained files in `preservedArtifacts`. The artifacts directory has manual,
|
|
511
|
+
bounded-by-operator retention; Delegate does not run artifact GC.
|
|
512
|
+
|
|
449
513
|
**Grouped calls preserve workflow tracking without exposing the workspace to the
|
|
450
514
|
child.** `--group NAME` registers the call in the invocation workspace so
|
|
451
515
|
workflow kill/adopt and group selectors can find it. In that one combination,
|
|
@@ -504,7 +568,7 @@ Typical dry-run JSON fields:
|
|
|
504
568
|
|
|
505
569
|
When a profile is active, dry-run and completion payloads add `authProfile` (the resolved profile name) and, when a Codex fallback profile is configured, `fallbackProfile`. Dry-run also adds `profileEnv` (the injected env map, with values redacted). These keys are omitted when no profile is active.
|
|
506
570
|
|
|
507
|
-
For Cursor, Claude, Grok, OpenCode, Droid, and Kimi safe mode, an explicit `--isolation none`
|
|
571
|
+
For Cursor, Claude, Grok, OpenCode, Pi, Oh My Pi, Droid, and Kimi safe mode, an explicit `--isolation none`
|
|
508
572
|
is normalized to `auto` with a warning because those safe contracts depend on
|
|
509
573
|
the temporary workspace/config boundary. Codex safe can use `none` because Codex
|
|
510
574
|
still runs with its read-only sandbox.
|
|
@@ -589,12 +653,12 @@ Supported input keys:
|
|
|
589
653
|
}
|
|
590
654
|
```
|
|
591
655
|
|
|
592
|
-
- `engine`: `cursor`, `droid`, `codex`, `claude`, `grok`, `devin`, `opencode`, or `kimi`.
|
|
656
|
+
- `engine`: `cursor`, `droid`, `codex`, `claude`, `grok`, `devin`, `opencode`, `pi`, `omp`, or `kimi`.
|
|
593
657
|
- `mode`: `safe`, `work`, or `call`.
|
|
594
658
|
- The `devin` engine rejects `safe` with `unsupported_mode` during preflight. Devin filesystem surveys may require generic `exec`, which Delegate cannot allow without weakening the read-only boundary; use another safe Harness for filesystem review.
|
|
595
659
|
- `model`: optional alias-or-id for every engine. Resolved against `<engine>.models` when it matches an alias; otherwise passed through as a raw model ID. For Droid, a positional alias remains alias-only/strict; JSON/`--model` is alias-or-id. Cursor honors an explicit model even when it differs from `cursor.defaultModel`.
|
|
596
660
|
- `cwd`: optional workspace path. Git directories resolve to the repo root. Omit it for `mode: "call"`, which always uses an empty temporary cwd.
|
|
597
|
-
- `isolation`: optional `auto`, `none`, or `worktree`. `null` is invalid. `mode: "call"` rejects isolation. For Cursor, Claude, Grok, OpenCode, Droid, and Kimi safe mode, `none` is normalized to `auto` with a warning.
|
|
661
|
+
- `isolation`: optional `auto`, `none`, or `worktree`. `null` is invalid. `mode: "call"` rejects isolation. For Cursor, Claude, Grok, OpenCode, Pi, Oh My Pi, Droid, and Kimi safe mode, `none` is normalized to `auto` with a warning.
|
|
598
662
|
- `reasoningEffort`: optional non-empty effort string. It overrides provider `defaultReasoningEffort` for that JSON run.
|
|
599
663
|
- `fast`: optional Codex-only boolean or `null`. `true` requests Fast, `false` explicitly requests Standard, and `null`/omission inherits Codex configuration.
|
|
600
664
|
- `progress`: optional boolean. `true` enables parent progress heartbeats on stderr; `false` disables them even when `progress.enabled` is true in config. When omitted, config `progress.enabled` applies (default `false`). `mode: "call"` rejects progress.
|
|
@@ -624,7 +688,7 @@ delegate --json capabilities refresh
|
|
|
624
688
|
delegate agent-help
|
|
625
689
|
```
|
|
626
690
|
|
|
627
|
-
`describe` reports version, engines, modes, supported isolation values, prompt transforms, effective policy, top-level profile config metadata, and representative argv shapes. It also includes a `commands` catalog derived from the help registry; each full entry includes stable `name`/`command`, usage, arguments, options, and launchOptions fields. Full `describe` is a strict superset of `describe --summary`, so fields present in summary keep the same names in the full payload. `models` reports configured Cursor, Droid, Codex, Claude, Grok, Devin, OpenCode, and Kimi model settings, including non-empty `<engine>.models` alias maps. `models <engine>` returns an advisory per-engine catalog (bundled + config); `--live` merges a harness probe for cursor, droid, devin, and
|
|
691
|
+
`describe` reports version, engines, modes, supported isolation values, prompt transforms, effective policy, top-level profile config metadata, and representative argv shapes. It also includes a `commands` catalog derived from the help registry; each full entry includes stable `name`/`command`, usage, arguments, options, and launchOptions fields. Full `describe` is a strict superset of `describe --summary`, so fields present in summary keep the same names in the full payload. `models` reports configured Cursor, Droid, Codex, Claude, Grok, Devin, OpenCode, Pi, Oh My Pi, and Kimi model settings, including non-empty `<engine>.models` alias maps. `models <engine>` returns an advisory per-engine catalog (bundled + config); `--live` merges a harness probe for cursor, droid, devin, opencode, pi, and omp when available. Discovery output applies best-effort credential scrubbing, so secret-shaped values (including model IDs or paths that resemble credentials) are redacted; copy exact values from your config file rather than from scrubbed output. Agents should start with `--summary` for a compact inventory, then use raw output only when needed.
|
|
628
692
|
|
|
629
693
|
Both `describe` and `models` include provenance fields useful for detecting installed-runtime drift:
|
|
630
694
|
|
|
@@ -771,7 +835,7 @@ Codex usage-limit fallback fires, the completion payload also includes
|
|
|
771
835
|
`codexAuthFallback` metadata (reason, the primary and fallback profile names,
|
|
772
836
|
both exit codes, and a redacted primary stderr tail).
|
|
773
837
|
|
|
774
|
-
Snapshot JSON uses schema `delegate.snapshot.v1` and includes fields such as `alias`, `runId`, `harness`, `status`, `rawStatus`, `effectiveStatus`, `staleReason`, `nextActions`, `cwd`, `executionCwd`, `assistantText`, `recentEvents`, `warnings`, `exitCode`, reasoning metadata, terminal metadata, and isolation/worktree metadata when applicable. Inspection commands do not rewrite a stale run's recorded state; they expose the raw recorded status plus the effective status computed from the current PID check. Run-output and worktree show output include `requestedHandle`, `resolvedHandle`, and `resolutionKind` (`literal`, `latest`, or `latest_model`) when a handle resolves indirectly. For bare harness handles, snapshot, run-output, and wait also report `resolvedRunId`, `resolvedAlias`, `resolvedWorkspace`, `resolvedAge`, and `resolvedAgeSeconds`. Resolutions older than 24 hours add a `bare_handle_stale` warning suggesting `--cwd` or an explicit handle.
|
|
838
|
+
Snapshot JSON uses schema `delegate.snapshot.v1` and includes fields such as `alias`, `runId`, `harness`, `status`, `rawStatus`, `effectiveStatus`, `staleReason`, `nextActions`, `cwd`, `executionCwd`, `workspaceRoot`, `assistantText`, `recentEvents`, `warnings`, `exitCode`, reasoning metadata, terminal metadata, and isolation/worktree metadata when applicable. `workspaceRoot` is also exported to the child as `WORKSPACE_ROOT`, so commands can anchor workspace-relative paths after changing directories. Inspection commands do not rewrite a stale run's recorded state; they expose the raw recorded status plus the effective status computed from the current PID check. Run-output and worktree show output include `requestedHandle`, `resolvedHandle`, and `resolutionKind` (`literal`, `latest`, or `latest_model`) when a handle resolves indirectly. For bare harness handles, snapshot, run-output, and wait also report `resolvedRunId`, `resolvedAlias`, `resolvedWorkspace`, `resolvedAge`, and `resolvedAgeSeconds`. Resolutions older than 24 hours add a `bare_handle_stale` warning suggesting `--cwd` or an explicit handle.
|
|
775
839
|
|
|
776
840
|
Tracked run envelopes include `completionReportWritten`, `completionReportSource`
|
|
777
841
|
(`child`, `delegate_synthesized`, `stdout_recovery`, or `null`), and
|