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.
Files changed (138) hide show
  1. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/CHANGELOG.md +61 -1
  2. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/MANIFEST.in +1 -0
  3. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/PKG-INFO +54 -11
  4. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/README.md +51 -8
  5. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/config.example.json +13 -0
  6. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/agent-setup.md +22 -2
  7. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/cli-reference.md +75 -11
  8. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/configuration.md +79 -8
  9. delegate_agent_cli-0.18.0/docs/delegate-workflows.md +213 -0
  10. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/development.md +4 -3
  11. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/publishing-checklist.md +2 -0
  12. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/security-model.md +20 -8
  13. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/troubleshooting.md +35 -6
  14. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/worktrees.md +1 -1
  15. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/pyproject.toml +3 -3
  16. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/__init__.py +1 -1
  17. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/argv_builders.py +110 -0
  18. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/bundled_models.py +10 -0
  19. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/cli.py +71 -12
  20. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/cli_parser.py +46 -9
  21. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/command_help.py +125 -9
  22. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/config.py +103 -9
  23. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/constants.py +27 -6
  24. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/describe_payload.py +126 -4
  25. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/harness_events.py +91 -5
  26. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/model_discovery.py +83 -0
  27. delegate_agent_cli-0.18.0/src/delegate_agent/private_io.py +215 -0
  28. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/profiles.py +2 -1
  29. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/prompt_transport.py +1 -0
  30. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/reasoning.py +83 -0
  31. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/rendering.py +9 -2
  32. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/request_build.py +138 -0
  33. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/run_registry.py +18 -4
  34. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/runner.py +4 -2
  35. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/registry.py +3 -4
  36. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_execution.py +46 -1
  37. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_gc.py +56 -8
  38. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/PKG-INFO +54 -11
  39. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/SOURCES.txt +2 -0
  40. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_capability_commands.py +12 -0
  41. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_command_help.py +2 -0
  42. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_delegate_help_cli.py +35 -2
  43. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_delegate_parser.py +68 -28
  44. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_delegate_validation.py +50 -10
  45. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_end_to_end_tracking.py +1 -1
  46. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_engine_argv.py +304 -1
  47. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_execution_argv_and_prompt.py +46 -0
  48. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_execution_worktree_run.py +65 -0
  49. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_harness_events.py +197 -0
  50. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_model_discovery.py +106 -0
  51. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_model_selection_wave1a.py +134 -2
  52. delegate_agent_cli-0.18.0/tests/test_omp_read_only_behavior.py +88 -0
  53. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_packaging.py +4 -0
  54. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_profiles.py +9 -1
  55. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_pure_call.py +52 -0
  56. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_reasoning_capabilities.py +28 -0
  57. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_run_registry.py +70 -0
  58. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_runner_capture.py +120 -0
  59. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_slash_passthrough.py +2 -0
  60. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_snapshot_rendering.py +25 -0
  61. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_utility_modules.py +1 -1
  62. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_wave4_launch_features.py +8 -3
  63. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_worktree_prune_gc.py +80 -0
  64. delegate_agent_cli-0.16.0/src/delegate_agent/private_io.py +0 -109
  65. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/CONTRIBUTING.md +0 -0
  66. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/LICENSE +0 -0
  67. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/SECURITY.md +0 -0
  68. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/bin/delegate-profile-shim +0 -0
  69. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/bin/delegate.py +0 -0
  70. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/assets/delegate-agent-header.png +0 -0
  71. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/docs/live-runtime.md +0 -0
  72. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.claude.json +0 -0
  73. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.codex.json +0 -0
  74. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.cursor.json +0 -0
  75. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.droid.json +0 -0
  76. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.grok.json +0 -0
  77. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.judge.json +0 -0
  78. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/examples/task.kimi.json +0 -0
  79. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/setup.cfg +0 -0
  80. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/archived_logs.py +0 -0
  81. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/argv_utils.py +0 -0
  82. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/capability_commands.py +0 -0
  83. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/command_errors.py +0 -0
  84. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/config_commands.py +0 -0
  85. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/errors.py +0 -0
  86. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/git_utils.py +0 -0
  87. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/inspection_commands.py +0 -0
  88. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/isolation.py +0 -0
  89. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/json_types.py +0 -0
  90. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/log_output.py +0 -0
  91. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/profile_commands.py +0 -0
  92. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/profile_guard.py +0 -0
  93. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/prompt_instructions.py +0 -0
  94. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/redaction.py +0 -0
  95. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/request_models.py +0 -0
  96. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/retention.py +0 -0
  97. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/run_metadata.py +0 -0
  98. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/run_output_commands.py +0 -0
  99. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/run_status.py +0 -0
  100. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/safe_workspace.py +0 -0
  101. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/seatbelt.py +0 -0
  102. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/snapshot_view.py +0 -0
  103. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/wait_cancel_commands.py +0 -0
  104. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/__init__.py +0 -0
  105. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/commands.py +0 -0
  106. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/runtime.py +0 -0
  107. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/schema.py +0 -0
  108. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/workflows/script.py +0 -0
  109. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_commands.py +0 -0
  110. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_mgmt.py +0 -0
  111. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_records.py +0 -0
  112. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_remove.py +0 -0
  113. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/worktree_summary.py +0 -0
  114. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent/wsl.py +0 -0
  115. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/dependency_links.txt +0 -0
  116. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/entry_points.txt +0 -0
  117. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/requires.txt +0 -0
  118. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/src/delegate_agent_cli.egg-info/top_level.txt +0 -0
  119. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_codex_pure_sandbox.py +0 -0
  120. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_config_commands.py +0 -0
  121. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_delegate_isolation.py +0 -0
  122. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_execution_dry_run.py +0 -0
  123. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_execution_worktree_failure_cleanup.py +0 -0
  124. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_execution_worktree_preflight.py +0 -0
  125. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_inspection_commands.py +0 -0
  126. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_kimi_commands.py +0 -0
  127. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_model_selection_wave1b.py +0 -0
  128. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_retention.py +0 -0
  129. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_safe_workspace_isolation.py +0 -0
  130. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_snapshot_redaction.py +0 -0
  131. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_snapshot_run_output.py +0 -0
  132. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_snapshot_view.py +0 -0
  133. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_tracked_timeout.py +0 -0
  134. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_wait_cancel_commands.py +0 -0
  135. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_workflow_commands.py +0 -0
  136. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_worktree_list_show.py +0 -0
  137. {delegate_agent_cli-0.16.0 → delegate_agent_cli-0.18.0}/tests/test_worktree_remove.py +0 -0
  138. {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
- ## [Unreleased]
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.16.0
4
- Summary: A tiny CLI for delegating bounded agent tasks to Cursor, Droid, OpenAI Codex, Claude Code, Grok Build, or Kimi Code runtimes.
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 OpenCode prompts are delivered to the child
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 dry-run
54
- output and run manifests, but true process-argv hiding for those harnesses
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 maps to Claude Code `--effort`, Grok maps to Grok `--effort` (`low`, `medium`, `high`, `xhigh`, `max`), and OpenCode passes it through as `--variant`. Devin and Kimi do not expose a Delegate reasoning-effort flag. Explicit Codex effort can target the harness default model even when `codex.defaultModel` is unset:
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 OpenCode prompts are delivered to the child
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 dry-run
21
- output and run manifests, but true process-argv hiding for those harnesses
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 maps to Claude Code `--effort`, Grok maps to Grok `--effort` (`low`, `medium`, `high`, `xhigh`, `max`), and OpenCode passes it through as `--variant`. Devin and Kimi do not expose a Delegate reasoning-effort flag. Explicit Codex effort can target the harness default model even when `codex.defaultModel` is unset:
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 reasoning effort maps to `--variant` without model validation. The Droid dry-run validates the alias, so it returns `unconfigured_model` until you replace the `reviewer` placeholder in `config.json` with a real model ID.
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