delegate-agent-cli 0.16.0__tar.gz → 0.18.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.18.0}/CHANGELOG.md +61 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/MANIFEST.in +1 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/PKG-INFO +54 -11
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/README.md +51 -8
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/config.example.json +13 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/agent-setup.md +22 -2
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/cli-reference.md +75 -11
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/configuration.md +79 -8
- delegate_agent_cli-0.18.0/docs/delegate-workflows.md +213 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/development.md +4 -3
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/publishing-checklist.md +2 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/security-model.md +20 -8
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/troubleshooting.md +35 -6
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/worktrees.md +1 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/pyproject.toml +3 -3
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/__init__.py +1 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/argv_builders.py +110 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/bundled_models.py +10 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/cli.py +71 -12
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/cli_parser.py +46 -9
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/command_help.py +125 -9
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/config.py +103 -9
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/constants.py +27 -6
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/describe_payload.py +126 -4
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/harness_events.py +91 -5
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/model_discovery.py +83 -0
- delegate_agent_cli-0.18.0/src/delegate_agent/private_io.py +215 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/profiles.py +2 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/prompt_transport.py +1 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/reasoning.py +83 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/rendering.py +9 -2
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/request_build.py +138 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/run_registry.py +18 -4
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/runner.py +4 -2
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/registry.py +3 -4
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_execution.py +46 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_gc.py +56 -8
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/PKG-INFO +54 -11
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/SOURCES.txt +2 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_capability_commands.py +12 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_command_help.py +2 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_delegate_help_cli.py +35 -2
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_delegate_parser.py +68 -28
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_delegate_validation.py +50 -10
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_end_to_end_tracking.py +1 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_engine_argv.py +304 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_execution_argv_and_prompt.py +46 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_execution_worktree_run.py +65 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_harness_events.py +197 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_model_discovery.py +106 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_model_selection_wave1a.py +134 -2
- delegate_agent_cli-0.18.0/tests/test_omp_read_only_behavior.py +88 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_packaging.py +4 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_profiles.py +9 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_pure_call.py +52 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_reasoning_capabilities.py +28 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_run_registry.py +70 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_runner_capture.py +120 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_slash_passthrough.py +2 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_snapshot_rendering.py +25 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_utility_modules.py +1 -1
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_wave4_launch_features.py +8 -3
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_worktree_prune_gc.py +80 -0
- delegate_agent_cli-0.16.0/src/delegate_agent/private_io.py +0 -109
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/CONTRIBUTING.md +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/LICENSE +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/SECURITY.md +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/bin/delegate-profile-shim +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/bin/delegate.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/assets/delegate-agent-header.png +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/live-runtime.md +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.claude.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.codex.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.cursor.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.droid.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.grok.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.judge.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.kimi.json +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/setup.cfg +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/archived_logs.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/argv_utils.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/capability_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/command_errors.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/config_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/errors.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/git_utils.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/inspection_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/isolation.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/json_types.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/log_output.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/profile_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/profile_guard.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/prompt_instructions.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/redaction.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/request_models.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/retention.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/run_metadata.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/run_output_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/run_status.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/safe_workspace.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/seatbelt.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/snapshot_view.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/wait_cancel_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/__init__.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/runtime.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/schema.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/script.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_mgmt.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_records.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_remove.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_summary.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/wsl.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/dependency_links.txt +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/entry_points.txt +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/requires.txt +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/top_level.txt +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_codex_pure_sandbox.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_config_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_delegate_isolation.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_execution_dry_run.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_execution_worktree_failure_cleanup.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_execution_worktree_preflight.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_inspection_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_kimi_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_model_selection_wave1b.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_retention.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_safe_workspace_isolation.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_snapshot_redaction.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_snapshot_run_output.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_snapshot_view.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_tracked_timeout.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_wait_cancel_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_workflow_commands.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_worktree_list_show.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_worktree_remove.py +0 -0
- {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_wsl_guardrails.py +0 -0
|
@@ -5,7 +5,65 @@ 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.18.0] - 2026-07-19
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `worktree gc --dry-run` now reports `wouldPruneSourceRoots` and classifies
|
|
13
|
+
un-prunable worktrees with structured orphan reasons (`source_root_missing`,
|
|
14
|
+
`worktree_metadata_missing`, `branch_missing`, `detached_backlink`), each
|
|
15
|
+
with a `safeAction`. GC remains non-destructive and never deletes worktree
|
|
16
|
+
directories.
|
|
17
|
+
- New `worktrees.poolWarnCount` config knob (default 20): persistent
|
|
18
|
+
work-mode launches emit a stderr warning when the shared worktree pool
|
|
19
|
+
holds more worktrees than the threshold. Warn-only; nothing is blocked or
|
|
20
|
+
deleted.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- Text rendering for `worktree gc --dry-run` prints
|
|
25
|
+
`would prune source roots` instead of a constant zero, and orphan lines now
|
|
26
|
+
include the worktree path alongside the reason.
|
|
27
|
+
|
|
28
|
+
## [0.17.0] - 2026-07-18
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- Pi is now a first-class `safe`/`work`/`call` engine with stateless JSON
|
|
33
|
+
execution, stdin prompt transport, model aliases, reasoning-effort mapping,
|
|
34
|
+
live model discovery, normalized JSON events, and a native read-only policy
|
|
35
|
+
for safe mode and `call --read-only`.
|
|
36
|
+
- Oh My Pi is now a first-class `omp` engine with matching mode, model alias,
|
|
37
|
+
reasoning, discovery, and event support. Its verified 17.0.4 prompt path uses
|
|
38
|
+
a redacted positional argument because piped stdin exits without processing.
|
|
39
|
+
- Child processes now receive an authoritative `WORKSPACE_ROOT`; run metadata
|
|
40
|
+
exposes the same path as `workspaceRoot`, with source and isolated execution
|
|
41
|
+
roots available through `DELEGATE_SOURCE_ROOT` and
|
|
42
|
+
`DELEGATE_EXECUTION_ROOT` where applicable.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- Repository-local `.delegate/config.json` is no longer loaded automatically.
|
|
47
|
+
Delegate reports it as an unapplied layer; operators must explicitly select
|
|
48
|
+
a trusted file with `DELEGATE_CONFIG`.
|
|
49
|
+
- Stateless calls now preserve child-created files under
|
|
50
|
+
`.delegate/artifacts/<runId>/` instead of deleting successful deliverables,
|
|
51
|
+
and report `artifactsPath` plus `preservedArtifacts` in the response.
|
|
52
|
+
- Unknown launch flags now fail as `unknown_option` before they can be absorbed
|
|
53
|
+
as prompt text, and corrected-command suggestions are emitted only after the
|
|
54
|
+
real parser validates them.
|
|
55
|
+
|
|
56
|
+
### Security
|
|
57
|
+
|
|
58
|
+
- Oh My Pi safe mode and `omp call --read-only` now add
|
|
59
|
+
`--approval-mode always-ask`, which denies write and exec tools in headless
|
|
60
|
+
mode even when project config requests `yolo`. A gated real-binary behavioral
|
|
61
|
+
test verifies writes and shell commands are denied while reads remain
|
|
62
|
+
available, and positional prompt guards reject flag- and include-shaped
|
|
63
|
+
injection prefixes.
|
|
64
|
+
- Private `.delegate` run, workflow, and cache state I/O now traverses from the
|
|
65
|
+
workspace anchor with descriptor-relative, no-follow opens, rejecting
|
|
66
|
+
symlinked path components to prevent symlink-swap races.
|
|
9
67
|
|
|
10
68
|
## [0.16.0] - 2026-07-16
|
|
11
69
|
|
|
@@ -425,6 +483,8 @@ Usage-audit fix wave: 82 sessions and 1,241 delegate invocations from one week o
|
|
|
425
483
|
|
|
426
484
|
- Releases before 0.1.3 predate this changelog.
|
|
427
485
|
|
|
486
|
+
[0.18.0]: https://github.com/treygoff24/delegate-agent/compare/v0.17.0...v0.18.0
|
|
487
|
+
[0.17.0]: https://github.com/treygoff24/delegate-agent/compare/v0.16.0...v0.17.0
|
|
428
488
|
[0.16.0]: https://github.com/treygoff24/delegate-agent/compare/v0.15.0...v0.16.0
|
|
429
489
|
[0.15.0]: https://github.com/treygoff24/delegate-agent/compare/v0.14.0...v0.15.0
|
|
430
490
|
[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.18.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",
|
|
@@ -104,6 +116,7 @@
|
|
|
104
116
|
},
|
|
105
117
|
"worktrees": {
|
|
106
118
|
"dataHome": null,
|
|
119
|
+
"poolWarnCount": 20,
|
|
107
120
|
"autoPrune": {
|
|
108
121
|
"enabled": false,
|
|
109
122
|
"mergedOlderThanDays": 7
|
|
@@ -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
|