delegate-agent-cli 0.18.0__tar.gz → 0.20.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 (148) hide show
  1. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/CHANGELOG.md +151 -1
  2. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/PKG-INFO +36 -12
  3. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/README.md +35 -11
  4. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/bin/delegate-profile-shim +92 -1
  5. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/docs/agent-setup.md +35 -9
  6. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/docs/cli-reference.md +165 -16
  7. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/docs/configuration.md +70 -16
  8. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/docs/delegate-workflows.md +5 -1
  9. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/docs/security-model.md +49 -8
  10. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/docs/troubleshooting.md +91 -21
  11. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/pyproject.toml +1 -1
  12. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/__init__.py +1 -1
  13. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/bundled_models.py +2 -1
  14. delegate_agent_cli-0.20.0/src/delegate_agent/capability_commands.py +280 -0
  15. delegate_agent_cli-0.20.0/src/delegate_agent/child_failures.py +93 -0
  16. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/cli.py +45 -1
  17. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/cli_parser.py +90 -16
  18. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/command_help.py +64 -14
  19. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/config.py +27 -41
  20. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/config_commands.py +2 -0
  21. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/describe_payload.py +123 -46
  22. delegate_agent_cli-0.20.0/src/delegate_agent/harness_discovery.py +1444 -0
  23. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/model_discovery.py +121 -230
  24. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/private_io.py +69 -0
  25. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/profile_guard.py +6 -3
  26. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/profiles.py +12 -29
  27. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/reasoning.py +566 -174
  28. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/redaction.py +61 -0
  29. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/rendering.py +2 -0
  30. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/request_build.py +513 -151
  31. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/request_models.py +10 -0
  32. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/run_metadata.py +27 -0
  33. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/run_status.py +8 -4
  34. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/runner.py +441 -64
  35. delegate_agent_cli-0.20.0/src/delegate_agent/setup_commands.py +492 -0
  36. delegate_agent_cli-0.20.0/src/delegate_agent/structured_output.py +177 -0
  37. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/worktree_execution.py +5 -0
  38. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent_cli.egg-info/PKG-INFO +36 -12
  39. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent_cli.egg-info/SOURCES.txt +9 -0
  40. delegate_agent_cli-0.20.0/tests/test_capability_commands.py +959 -0
  41. delegate_agent_cli-0.20.0/tests/test_child_failures.py +73 -0
  42. delegate_agent_cli-0.20.0/tests/test_codex_thread_resilience.py +410 -0
  43. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_command_help.py +2 -0
  44. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_config_commands.py +69 -0
  45. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_delegate_help_cli.py +35 -0
  46. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_delegate_parser.py +120 -5
  47. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_delegate_validation.py +96 -0
  48. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_engine_argv.py +672 -113
  49. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_execution_argv_and_prompt.py +3 -1
  50. delegate_agent_cli-0.20.0/tests/test_harness_discovery.py +1135 -0
  51. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_kimi_commands.py +3 -3
  52. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_model_discovery.py +354 -33
  53. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_model_selection_wave1b.py +183 -20
  54. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_pure_call.py +24 -1
  55. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_reasoning_capabilities.py +390 -9
  56. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_runner_capture.py +28 -6
  57. delegate_agent_cli-0.20.0/tests/test_setup_commands.py +759 -0
  58. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_snapshot_run_output.py +11 -0
  59. delegate_agent_cli-0.20.0/tests/test_structured_output.py +212 -0
  60. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_utility_modules.py +181 -0
  61. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_wait_cancel_commands.py +1 -1
  62. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_workflow_commands.py +19 -0
  63. delegate_agent_cli-0.18.0/src/delegate_agent/capability_commands.py +0 -99
  64. delegate_agent_cli-0.18.0/tests/test_capability_commands.py +0 -370
  65. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/CONTRIBUTING.md +0 -0
  66. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/LICENSE +0 -0
  67. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/MANIFEST.in +0 -0
  68. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/SECURITY.md +0 -0
  69. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/bin/delegate.py +0 -0
  70. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/config.example.json +0 -0
  71. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/docs/assets/delegate-agent-header.png +0 -0
  72. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/docs/development.md +0 -0
  73. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/docs/live-runtime.md +0 -0
  74. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/docs/publishing-checklist.md +0 -0
  75. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/docs/worktrees.md +0 -0
  76. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/examples/task.claude.json +0 -0
  77. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/examples/task.codex.json +0 -0
  78. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/examples/task.cursor.json +0 -0
  79. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/examples/task.droid.json +0 -0
  80. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/examples/task.grok.json +0 -0
  81. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/examples/task.judge.json +0 -0
  82. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/examples/task.kimi.json +0 -0
  83. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/setup.cfg +0 -0
  84. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/archived_logs.py +0 -0
  85. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/argv_builders.py +0 -0
  86. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/argv_utils.py +0 -0
  87. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/command_errors.py +0 -0
  88. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/constants.py +0 -0
  89. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/errors.py +0 -0
  90. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/git_utils.py +0 -0
  91. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/harness_events.py +0 -0
  92. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/inspection_commands.py +0 -0
  93. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/isolation.py +0 -0
  94. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/json_types.py +0 -0
  95. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/log_output.py +0 -0
  96. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/profile_commands.py +0 -0
  97. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/prompt_instructions.py +0 -0
  98. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/prompt_transport.py +0 -0
  99. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/retention.py +0 -0
  100. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/run_output_commands.py +0 -0
  101. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/run_registry.py +0 -0
  102. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/safe_workspace.py +0 -0
  103. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/seatbelt.py +0 -0
  104. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/snapshot_view.py +0 -0
  105. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/wait_cancel_commands.py +0 -0
  106. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/workflows/__init__.py +0 -0
  107. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/workflows/commands.py +0 -0
  108. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/workflows/registry.py +0 -0
  109. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/workflows/runtime.py +0 -0
  110. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/workflows/schema.py +0 -0
  111. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/workflows/script.py +0 -0
  112. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/worktree_commands.py +0 -0
  113. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/worktree_gc.py +0 -0
  114. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/worktree_mgmt.py +0 -0
  115. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/worktree_records.py +0 -0
  116. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/worktree_remove.py +0 -0
  117. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/worktree_summary.py +0 -0
  118. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent/wsl.py +0 -0
  119. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent_cli.egg-info/dependency_links.txt +0 -0
  120. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent_cli.egg-info/entry_points.txt +0 -0
  121. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent_cli.egg-info/requires.txt +0 -0
  122. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/src/delegate_agent_cli.egg-info/top_level.txt +0 -0
  123. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_codex_pure_sandbox.py +0 -0
  124. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_delegate_isolation.py +0 -0
  125. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_end_to_end_tracking.py +0 -0
  126. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_execution_dry_run.py +0 -0
  127. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_execution_worktree_failure_cleanup.py +0 -0
  128. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_execution_worktree_preflight.py +0 -0
  129. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_execution_worktree_run.py +0 -0
  130. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_harness_events.py +0 -0
  131. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_inspection_commands.py +0 -0
  132. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_model_selection_wave1a.py +0 -0
  133. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_omp_read_only_behavior.py +0 -0
  134. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_packaging.py +0 -0
  135. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_profiles.py +0 -0
  136. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_retention.py +0 -0
  137. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_run_registry.py +0 -0
  138. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_safe_workspace_isolation.py +0 -0
  139. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_slash_passthrough.py +0 -0
  140. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_snapshot_redaction.py +0 -0
  141. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_snapshot_rendering.py +0 -0
  142. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_snapshot_view.py +0 -0
  143. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_tracked_timeout.py +0 -0
  144. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_wave4_launch_features.py +0 -0
  145. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_worktree_list_show.py +0 -0
  146. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_worktree_prune_gc.py +0 -0
  147. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_worktree_remove.py +0 -0
  148. {delegate_agent_cli-0.18.0 → delegate_agent_cli-0.20.0}/tests/test_wsl_guardrails.py +0 -0
@@ -5,6 +5,155 @@ All notable changes to this project are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.20.0] - 2026-07-25
9
+
10
+ ### Added
11
+
12
+ - Added typed child-failure reporting for usage/quota limits (including reset
13
+ details when present), expired or rejected auth tokens, and Codex thread/state
14
+ lookup loss. Run state, snapshots, listings, completion envelopes, and
15
+ synthesized reports now carry the specific error and message. The existing
16
+ generic public error remains `child_failed`; `usage_limit`, `auth_failed`, and
17
+ `codex_thread_lost` are additive typed codes. Classification reads only stderr
18
+ and normalized harness error/terminal events, never assistant/model output.
19
+ - Added `delegate ps` as the first-class active-run view, equivalent to
20
+ `delegate runs --active`.
21
+ - Added `delegate setup` for first-run harness discovery. It fingerprints all
22
+ supported installed harnesses, records available model/reasoning metadata in
23
+ a profile-scoped user cache, creates a minimal selector-only config when no
24
+ config exists, and reports discovery readiness separately from launchability.
25
+ - Cached `models`/`capabilities` views now project profile discovery with source
26
+ and evidence metadata. `models <engine> --live` provides a non-persistent
27
+ one-off probe; `capabilities refresh` persists a full refresh for the selected
28
+ profile, and `capabilities refresh <engine> [...]` re-probes only the named
29
+ harnesses while the rest keep their last-known-good records.
30
+ - Runtime model and reasoning metadata now distinguish the requested model,
31
+ argv-resolved model, capability-validation model, requested effort, resolved
32
+ effort, source, evidence strength, and transport.
33
+
34
+ ### Changed
35
+
36
+ - Codex output schemas are now linted before launch. Delegate recursively
37
+ supplies missing `additionalProperties: false` on object schemas with a loud
38
+ warning, rejects partial `required` lists precisely, and passes a normalized
39
+ temporary copy without modifying the source schema. Object-bearing `allOf`,
40
+ `patternProperties`, and external or unresolvable `$ref` values fail closed
41
+ rather than being rewritten unsafely. Workflow Codex stages and direct
42
+ `--output-schema`/`outputSchema` launches share the same preflight. The
43
+ normalized copy preserves the source schema's property order, so
44
+ think-before-answer schemas keep their intended generation order.
45
+ - On retry-safe paths, Codex thread/state lookup failures now retry once and,
46
+ only if the same typed failure repeats, retry through an ephemeral
47
+ `--ignore-user-config` launch. Retry-safe paths are read-only calls and
48
+ pre-tool attempts whose workspace remains unchanged; work mode also requires
49
+ a clean captured baseline. Envelopes and events record fallback engagement.
50
+ - `--prompt-file /dev/stdin` and equivalent stdin descriptors now consume the
51
+ piped prompt once instead of conflicting with stdin as a second source.
52
+ - Model and reasoning resolution now prefers explicit CLI/config choices and
53
+ exact discovered evidence before legacy workspace or bundled fallbacks.
54
+ Exact negative menus fail closed; partial harness evidence and Cursor inferred
55
+ routes remain visibly labeled rather than being promoted to model-exact facts.
56
+ - Discovery refresh is last-known-good per harness. Successful records update
57
+ independently, failed probes retain the prior record and report staleness,
58
+ and selector drift invalidates only the affected harness without probing on
59
+ an ordinary launch.
60
+ - `capabilities refresh` now writes the selected profile's private discovery
61
+ cache. The old workspace reasoning cache remains a lower-precedence read-only
62
+ compatibility source. The cached `capabilities` read reports the discovery
63
+ cache location in `cachePath`; the previous workspace path, when present, is
64
+ reported under `legacyWorkspaceCachePath`.
65
+ - `reasoning.capabilities` config entries are now accepted for `grok` in
66
+ addition to `codex` and `droid`.
67
+ - `--auth-profile` is now accepted on cached `capabilities` reads (previously
68
+ rejected as an invalid option combination) and on `models` and `setup`.
69
+ - Cursor reasoning-effort routing now defers to a pinned selector when discovery
70
+ has no same-family route for it: the run proceeds on the pinned model and
71
+ records a bypass warning. When discovery does carry exact same-family routes,
72
+ the requested effort still routes to the matching selector, and a family that
73
+ omits the requested effort still fails closed.
74
+ - Grok reasoning-effort support is once again governed by the documented CLI
75
+ enum (low, medium, high, xhigh, max); a bundled `grok-4.5` declaration that
76
+ narrowed it to low/medium/high was removed, since `grok --help` enumerates no
77
+ per-model efforts. Config, discovery-exact, and cached grok declarations
78
+ still take precedence.
79
+ - Embedded Devin and Kimi `defaultModel` values are now `null`, deferring model
80
+ selection to each harness. The editable `config init` example may still pin
81
+ an explicit default.
82
+ - Claude and Grok `defaultReasoningEffort` config values are now only
83
+ format-checked at load time instead of validated against the static enum; an
84
+ unsupported configured default degrades to a launch-time warning so that
85
+ discovery, not a hardcoded table, decides which levels are accepted.
86
+
87
+ ### Security
88
+
89
+ - Discovery probes use fingerprinted allowlisted selectors, fixed argv with no
90
+ shell, closed stdin, neutral temporary working directories, bounded output,
91
+ timeouts, normalized cache schemas, atomic owner-only writes, and scrubbed
92
+ model/warning projections. Config and cache source paths remain intentionally
93
+ visible diagnostics. Automatic Devin discovery remains prompt-free; only the
94
+ explicitly requested `models devin --live` path uses its bounded prompt-like
95
+ invalid-model probe.
96
+ - Setup never overwrites an existing config and refuses unsafe selectors,
97
+ final-component symlinks, and concurrent config races rather than mixing
98
+ discovery results across config states.
99
+
100
+ ### Fixed
101
+
102
+ - Credentials appearing in a child harness quota or reset message are now
103
+ redacted before they reach `state.json`, `snapshot.json`, the completion
104
+ report, or the run envelope; Codex reports quota walls as stdout events,
105
+ which bypassed the stderr-tail redaction. The in-progress activity label is
106
+ likewise redacted when persisted, matching the progress heartbeat.
107
+ - A Codex output schema that omits `required` entirely is now repaired to list
108
+ every property (in declaration order) instead of being rejected, matching how
109
+ a missing `additionalProperties` is handled. A partial `required` is still an
110
+ error.
111
+ - The `primary` attempt banner is written once in the run's stderr log even
112
+ when several retry paths run in sequence.
113
+ - `delegate ps` now reports argument errors in its own terms — unknown options,
114
+ `--limit`, `--harness`, and `--group` failures name `ps` instead of the
115
+ `runs` command it delegates to, and `ps --recent` gets the same tailored
116
+ redirect as `--running` and `--stale`.
117
+ - `delegate capabilities refresh` exits 3 (missing binary) when no supported
118
+ harness is installed — including when an engine subset such as
119
+ `capabilities refresh codex` names only uninstalled harnesses — matching
120
+ `delegate setup` on identical machine state instead of returning the generic
121
+ usage code 2.
122
+ - `delegate capabilities` no longer advertises harnesses whose configured
123
+ selector has drifted from the cached record, on both the cached read and
124
+ after a refresh — a subset refresh returns the full snapshot, so engines it
125
+ never probed could otherwise surface stale catalogs the launch path would
126
+ refuse. Excluded harnesses are named in a new `driftedHarnesses` payload
127
+ field and in the text output.
128
+ - Pi catalog rows whose column count does not match the header are skipped
129
+ instead of being read by shifted column position, which could cache a
130
+ thinking-capable model as having no reasoning support (unrecoverable, since
131
+ Pi has no config override) or hand a non-thinking model the full effort enum.
132
+ - A configured harness binary or argv prefix that no longer resolves while the
133
+ CLI is still on PATH is now reported as a stale config setting rather than an
134
+ uninstalled harness, and `delegate setup` names the config key and file to
135
+ fix instead of telling you to install a CLI you already have.
136
+ - An unreadable `~/.factory/settings.json` (permissions or I/O error) is
137
+ reported as a read failure instead of being misreported as invalid JSON.
138
+ - Two Cursor selectors that normalize to the same route family and effort now
139
+ drop just the ambiguous routes with a warning, instead of turning the entire
140
+ Cursor discovery record into an error record.
141
+ - OpenCode catalog parsing resumes past a malformed entry's whole object, so a
142
+ `provider/model`-shaped line nested inside the rejected body can no longer be
143
+ re-read as a real selector.
144
+ - `capabilities refresh` now hints "global options before the subcommand" for a
145
+ misplaced global option instead of mislabeling it `invalid_engine`, and a
146
+ subset refresh whose requested harnesses are all uninstalled reports
147
+ `requested_harnesses_not_installed` instead of the misleading
148
+ `no_harnesses_installed`.
149
+
150
+ ## [0.19.0] - 2026-07-20
151
+
152
+ ### Added
153
+
154
+ - Codex `--reasoning-effort max` support for `gpt-5.6-sol`; other Codex models
155
+ still fail closed unless config or workspace capability-cache overrides opt them in.
156
+
8
157
  ## [0.18.0] - 2026-07-19
9
158
 
10
159
  ### Added
@@ -137,7 +286,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
137
286
  consistently across the CLI reference and worktree guidance.
138
287
  - Devin help and discovery surfaces now derive supported modes consistently and
139
288
  reject unknown modes before constructing executable arguments.
140
-
141
289
  ## [0.14.0] - 2026-07-15
142
290
 
143
291
  ### Added
@@ -483,6 +631,8 @@ Usage-audit fix wave: 82 sessions and 1,241 delegate invocations from one week o
483
631
 
484
632
  - Releases before 0.1.3 predate this changelog.
485
633
 
634
+ [0.20.0]: https://github.com/treygoff24/delegate-agent/compare/v0.19.0...v0.20.0
635
+ [0.19.0]: https://github.com/treygoff24/delegate-agent/compare/v0.18.0...v0.19.0
486
636
  [0.18.0]: https://github.com/treygoff24/delegate-agent/compare/v0.17.0...v0.18.0
487
637
  [0.17.0]: https://github.com/treygoff24/delegate-agent/compare/v0.16.0...v0.17.0
488
638
  [0.16.0]: https://github.com/treygoff24/delegate-agent/compare/v0.15.0...v0.16.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: delegate-agent-cli
3
- Version: 0.18.0
3
+ Version: 0.20.0
4
4
  Summary: A tiny CLI for delegating bounded agent tasks across coding-agent runtimes.
5
5
  Author: Trey Goff
6
6
  License-Expression: MIT
@@ -130,22 +130,28 @@ Install OpenCode from [opencode.ai](https://opencode.ai). Its curl installer
130
130
  normally writes the binary to `~/.opencode/bin`, which may not be on `PATH`.
131
131
  Extend `PATH` or set `opencode.binary` to the absolute binary path.
132
132
 
133
- Initialize a starter config and replace placeholder Droid model IDs before real Droid runs:
133
+ Let Delegate discover the supported harnesses already on your `PATH`:
134
134
 
135
135
  ```bash
136
- delegate config init
137
- $EDITOR ~/.delegate/config.json
136
+ delegate setup
138
137
  ```
139
138
 
140
- `config init` also writes missing `~/.delegate/config.work.json` and
141
- `~/.delegate/config.personal.json` profile overlays. For an existing install,
142
- run `env -u AI_PROFILE delegate config sync-profiles` to materialize any missing
143
- overlays without overwriting ones you already edited.
139
+ `setup` fingerprints installed harnesses, reads their model and reasoning metadata where
140
+ the harness exposes it, and writes a private discovery cache for the active auth profile.
141
+ On a clean install it creates only the absolute binary selectors needed to launch the
142
+ detected harnesses. It never rewrites an existing config, installs a harness, logs in, or
143
+ submits a model prompt.
144
+
145
+ Use `delegate config init` instead when you want the editable example config and profile
146
+ overlays. Replace its placeholder Droid model IDs before real Droid runs. For an existing
147
+ install, `env -u AI_PROFILE delegate config sync-profiles` creates missing overlays without
148
+ overwriting ones you already edited.
144
149
 
145
150
  Inspect what Delegate sees:
146
151
 
147
152
  ```bash
148
153
  delegate --version # installed version — include this in bug reports
154
+ delegate --json setup
149
155
  delegate --json describe --summary
150
156
  delegate --json models --summary
151
157
  delegate --json describe
@@ -156,9 +162,10 @@ delegate --json models opencode --live # query every model visible to OpenCode
156
162
  delegate --json models pi --live # query every model visible to Pi
157
163
  delegate --json models omp --live # query every model visible to Oh My Pi
158
164
  delegate --json capabilities
165
+ delegate --json capabilities refresh # refresh the active profile's discovery cache
159
166
  ```
160
167
 
161
- Discover commands as you go: `delegate <command> --help` prints focused help for any command path, and `delegate --json <command> --help` returns an agent-friendly spec of its usage, arguments, and options. For launch and `dry-run` commands, `--json` and `--isolation` may also appear before inline prompt text begins, for example `delegate codex work --prompt-file task.md --json`. `delegate --json describe` includes a `commands` catalog of the whole surface. `delegate --json capabilities` reports reasoning-effort support without launching a child runtime.
168
+ Discover commands as you go: `delegate <command> --help` prints focused help for any command path, and `delegate --json <command> --help` returns an agent-friendly spec of its usage, arguments, and options. For launch and `dry-run` commands, `--json` and `--isolation` may also appear before inline prompt text begins, for example `delegate codex work --prompt-file task.md --json`. `delegate --json describe` includes a `commands` catalog of the whole surface. Cached `models` and `capabilities` reads launch no child process. `models <engine> --live` performs a one-off probe without updating the cache; rerun `delegate setup` or `delegate capabilities refresh` when ordinary launches should consume newly discovered models or effort levels.
162
169
 
163
170
  From this development checkout, use `python3 bin/delegate.py ...` instead of an installed `delegate` shim.
164
171
 
@@ -243,7 +250,12 @@ $EDITOR /tmp/delegate-task.json
243
250
  delegate --json run --input-json /tmp/delegate-task.json
244
251
  ```
245
252
 
246
- For Codex fan-outs that must return machine-parseable records, add `--output-schema` (or JSON `outputSchema`); Delegate suppresses completion-report injection so the schema owns the final message.
253
+ For Codex fan-outs that must return machine-parseable records, add
254
+ `--output-schema` (or JSON `outputSchema`); Delegate suppresses completion-report
255
+ injection so the schema owns the final message. Codex schemas are
256
+ strict-preflighted recursively: every property must be required, and a missing
257
+ `additionalProperties: false` is supplied in a warned temporary copy without
258
+ changing the source file.
247
259
 
248
260
  For a one-hop prompt that should not see the current repo or create a tracked
249
261
  run, use stateless `call` mode:
@@ -280,7 +292,16 @@ python3 bin/delegate.py workflow approve wf_0123abcdef45
280
292
  See [Delegate Workflows](docs/delegate-workflows.md) for the DSL, safety
281
293
  limits, config, and gate semantics.
282
294
 
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:
295
+ Reasoning effort is provider-aware. Unsupported combinations fail before launch.
296
+ It changes only the requested model thinking depth/cost/latency; it does not
297
+ change safe/work/call mode, sandboxing, approvals, or edit capability.
298
+ Codex/Droid validate exact model metadata, Cursor selects an explicit configured
299
+ or corroborated discovered effort route, Claude and Grok map to native
300
+ `--effort`, OpenCode validates discovered exact variants when present and
301
+ otherwise warns on pass-through, and Pi/Oh My Pi map to `--thinking` with
302
+ evidence-aware validation. Devin and Kimi do not expose a Delegate
303
+ reasoning-effort flag. Explicit Codex effort can target the harness default model
304
+ even when `codex.defaultModel` is unset:
284
305
 
285
306
  ```bash
286
307
  delegate --json dry-run codex safe --reasoning-effort high "Review this repository. Do not edit files."
@@ -291,7 +312,9 @@ Codex model routing is deliberately model-first rather than aliasing every
291
312
  model/effort pair: define model aliases in `codex.models`, then set effort per
292
313
  run with `--reasoning-effort`. Per-model effort menus (including any efforts
293
314
  newer than the bundled data) belong in the private `reasoning.capabilities`
294
- config block, which overrides the bundled defaults.
315
+ config block, which overrides the bundled defaults. Codex `max` is bundled only
316
+ for `gpt-5.6-sol` as of 2026-07; other Codex models require an exact config or
317
+ profile-discovery declaration, or legacy workspace-cache declaration.
295
318
 
296
319
  Fast mode is an independent per-run serving choice. `--fast` requests Codex's
297
320
  Fast service tier, `--no-fast` explicitly requests Standard, and omitting both
@@ -306,6 +329,7 @@ Inspect tracked output by alias:
306
329
 
307
330
  ```bash
308
331
  delegate runs --recent
332
+ delegate ps # active and stale tracked runs
309
333
  delegate snapshot <alias-or-runId>
310
334
  delegate run-output <alias-or-runId>
311
335
  ```
@@ -97,22 +97,28 @@ Install OpenCode from [opencode.ai](https://opencode.ai). Its curl installer
97
97
  normally writes the binary to `~/.opencode/bin`, which may not be on `PATH`.
98
98
  Extend `PATH` or set `opencode.binary` to the absolute binary path.
99
99
 
100
- Initialize a starter config and replace placeholder Droid model IDs before real Droid runs:
100
+ Let Delegate discover the supported harnesses already on your `PATH`:
101
101
 
102
102
  ```bash
103
- delegate config init
104
- $EDITOR ~/.delegate/config.json
103
+ delegate setup
105
104
  ```
106
105
 
107
- `config init` also writes missing `~/.delegate/config.work.json` and
108
- `~/.delegate/config.personal.json` profile overlays. For an existing install,
109
- run `env -u AI_PROFILE delegate config sync-profiles` to materialize any missing
110
- overlays without overwriting ones you already edited.
106
+ `setup` fingerprints installed harnesses, reads their model and reasoning metadata where
107
+ the harness exposes it, and writes a private discovery cache for the active auth profile.
108
+ On a clean install it creates only the absolute binary selectors needed to launch the
109
+ detected harnesses. It never rewrites an existing config, installs a harness, logs in, or
110
+ submits a model prompt.
111
+
112
+ Use `delegate config init` instead when you want the editable example config and profile
113
+ overlays. Replace its placeholder Droid model IDs before real Droid runs. For an existing
114
+ install, `env -u AI_PROFILE delegate config sync-profiles` creates missing overlays without
115
+ overwriting ones you already edited.
111
116
 
112
117
  Inspect what Delegate sees:
113
118
 
114
119
  ```bash
115
120
  delegate --version # installed version — include this in bug reports
121
+ delegate --json setup
116
122
  delegate --json describe --summary
117
123
  delegate --json models --summary
118
124
  delegate --json describe
@@ -123,9 +129,10 @@ delegate --json models opencode --live # query every model visible to OpenCode
123
129
  delegate --json models pi --live # query every model visible to Pi
124
130
  delegate --json models omp --live # query every model visible to Oh My Pi
125
131
  delegate --json capabilities
132
+ delegate --json capabilities refresh # refresh the active profile's discovery cache
126
133
  ```
127
134
 
128
- Discover commands as you go: `delegate <command> --help` prints focused help for any command path, and `delegate --json <command> --help` returns an agent-friendly spec of its usage, arguments, and options. For launch and `dry-run` commands, `--json` and `--isolation` may also appear before inline prompt text begins, for example `delegate codex work --prompt-file task.md --json`. `delegate --json describe` includes a `commands` catalog of the whole surface. `delegate --json capabilities` reports reasoning-effort support without launching a child runtime.
135
+ Discover commands as you go: `delegate <command> --help` prints focused help for any command path, and `delegate --json <command> --help` returns an agent-friendly spec of its usage, arguments, and options. For launch and `dry-run` commands, `--json` and `--isolation` may also appear before inline prompt text begins, for example `delegate codex work --prompt-file task.md --json`. `delegate --json describe` includes a `commands` catalog of the whole surface. Cached `models` and `capabilities` reads launch no child process. `models <engine> --live` performs a one-off probe without updating the cache; rerun `delegate setup` or `delegate capabilities refresh` when ordinary launches should consume newly discovered models or effort levels.
129
136
 
130
137
  From this development checkout, use `python3 bin/delegate.py ...` instead of an installed `delegate` shim.
131
138
 
@@ -210,7 +217,12 @@ $EDITOR /tmp/delegate-task.json
210
217
  delegate --json run --input-json /tmp/delegate-task.json
211
218
  ```
212
219
 
213
- For Codex fan-outs that must return machine-parseable records, add `--output-schema` (or JSON `outputSchema`); Delegate suppresses completion-report injection so the schema owns the final message.
220
+ For Codex fan-outs that must return machine-parseable records, add
221
+ `--output-schema` (or JSON `outputSchema`); Delegate suppresses completion-report
222
+ injection so the schema owns the final message. Codex schemas are
223
+ strict-preflighted recursively: every property must be required, and a missing
224
+ `additionalProperties: false` is supplied in a warned temporary copy without
225
+ changing the source file.
214
226
 
215
227
  For a one-hop prompt that should not see the current repo or create a tracked
216
228
  run, use stateless `call` mode:
@@ -247,7 +259,16 @@ python3 bin/delegate.py workflow approve wf_0123abcdef45
247
259
  See [Delegate Workflows](docs/delegate-workflows.md) for the DSL, safety
248
260
  limits, config, and gate semantics.
249
261
 
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:
262
+ Reasoning effort is provider-aware. Unsupported combinations fail before launch.
263
+ It changes only the requested model thinking depth/cost/latency; it does not
264
+ change safe/work/call mode, sandboxing, approvals, or edit capability.
265
+ Codex/Droid validate exact model metadata, Cursor selects an explicit configured
266
+ or corroborated discovered effort route, Claude and Grok map to native
267
+ `--effort`, OpenCode validates discovered exact variants when present and
268
+ otherwise warns on pass-through, and Pi/Oh My Pi map to `--thinking` with
269
+ evidence-aware validation. Devin and Kimi do not expose a Delegate
270
+ reasoning-effort flag. Explicit Codex effort can target the harness default model
271
+ even when `codex.defaultModel` is unset:
251
272
 
252
273
  ```bash
253
274
  delegate --json dry-run codex safe --reasoning-effort high "Review this repository. Do not edit files."
@@ -258,7 +279,9 @@ Codex model routing is deliberately model-first rather than aliasing every
258
279
  model/effort pair: define model aliases in `codex.models`, then set effort per
259
280
  run with `--reasoning-effort`. Per-model effort menus (including any efforts
260
281
  newer than the bundled data) belong in the private `reasoning.capabilities`
261
- config block, which overrides the bundled defaults.
282
+ config block, which overrides the bundled defaults. Codex `max` is bundled only
283
+ for `gpt-5.6-sol` as of 2026-07; other Codex models require an exact config or
284
+ profile-discovery declaration, or legacy workspace-cache declaration.
262
285
 
263
286
  Fast mode is an independent per-run serving choice. `--fast` requests Codex's
264
287
  Fast service tier, `--no-fast` explicitly requests Standard, and omitting both
@@ -273,6 +296,7 @@ Inspect tracked output by alias:
273
296
 
274
297
  ```bash
275
298
  delegate runs --recent
299
+ delegate ps # active and stale tracked runs
276
300
  delegate snapshot <alias-or-runId>
277
301
  delegate run-output <alias-or-runId>
278
302
  ```
@@ -33,6 +33,75 @@ _delegate_subcommand() {
33
33
  done
34
34
  }
35
35
 
36
+ _delegate_launch_help_request() {
37
+ _delegate_launch_cmd="${1:-}"
38
+ [ "$#" -gt 0 ] && shift
39
+
40
+ if [ "$_delegate_launch_cmd" = "dry-run" ]; then
41
+ case "${1:-}" in
42
+ --help|-h)
43
+ return 0
44
+ ;;
45
+ esac
46
+ _delegate_launch_cmd="${1:-}"
47
+ [ "$#" -gt 0 ] && shift
48
+ fi
49
+
50
+ case "$_delegate_launch_cmd" in
51
+ cursor|codex|kimi|claude|grok|devin|opencode|pi|omp)
52
+ # Parser parity: help is diagnostic only before the mode or immediately
53
+ # after it. Once inline prompt text starts, a later help token is data.
54
+ case "${1:-}" in
55
+ --help|-h)
56
+ return 0
57
+ ;;
58
+ safe|work|call)
59
+ case "${2:-}" in
60
+ --help|-h)
61
+ return 0
62
+ ;;
63
+ esac
64
+ ;;
65
+ esac
66
+ return 1
67
+ ;;
68
+ droid)
69
+ # Droid may place a model alias before the mode, so its last diagnostic
70
+ # help position is one token later than the modeless harnesses.
71
+ case "${1:-}" in
72
+ --help|-h)
73
+ return 0
74
+ ;;
75
+ safe|work|call)
76
+ case "${2:-}" in
77
+ --help|-h)
78
+ return 0
79
+ ;;
80
+ esac
81
+ ;;
82
+ *)
83
+ case "${2:-}" in
84
+ --help|-h)
85
+ return 0
86
+ ;;
87
+ safe|work|call)
88
+ case "${3:-}" in
89
+ --help|-h)
90
+ return 0
91
+ ;;
92
+ esac
93
+ ;;
94
+ esac
95
+ ;;
96
+ esac
97
+ return 1
98
+ ;;
99
+ *)
100
+ return 1
101
+ ;;
102
+ esac
103
+ }
104
+
36
105
  _delegate_is_readonly_request() {
37
106
  while [ "$#" -gt 0 ]; do
38
107
  case "$1" in
@@ -51,7 +120,29 @@ _delegate_is_readonly_request() {
51
120
  _cmd="${1:-}"
52
121
  [ "$#" -gt 0 ] && shift
53
122
  case "$_cmd" in
54
- profiles|runs|run-output|describe|models|snapshot|agent-help|help|--help|-h|--version)
123
+ cursor|droid|codex|kimi|claude|grok|devin|opencode|pi|omp|dry-run)
124
+ _delegate_launch_help_request "$_cmd" "$@" && return 0
125
+ return 1
126
+ ;;
127
+ esac
128
+ # Non-launch command parsers treat help as diagnostic wherever accepted.
129
+ for _delegate_help_arg in "$@"; do
130
+ case "$_delegate_help_arg" in
131
+ --help|-h)
132
+ return 0
133
+ ;;
134
+ esac
135
+ done
136
+ case "$_cmd" in
137
+ profiles|runs|ps|run-output|describe|snapshot|agent-help|help|--help|-h|--version)
138
+ return 0
139
+ ;;
140
+ models)
141
+ for _delegate_model_arg in "$@"; do
142
+ if [ "$_delegate_model_arg" = "--live" ]; then
143
+ return 1
144
+ fi
145
+ done
55
146
  return 0
56
147
  ;;
57
148
  capabilities)
@@ -47,18 +47,25 @@ This guide covers both human setup and non-interactive setup for agents or CI jo
47
47
 
48
48
  The Claude harness requires Claude Code 2.1.x or newer (verified on 2.1.181) for `--effort`, `--permission-mode auto`, and `--no-session-persistence`.
49
49
 
50
- 4. Initialize and edit config:
50
+ 4. Discover installed harnesses and initialize Delegate:
51
51
 
52
52
  ```bash
53
- delegate config init
54
- $EDITOR ~/.delegate/config.json
53
+ delegate --json setup
55
54
  ```
56
55
 
57
- Replace placeholder Droid model IDs. Use local aliases such as `reviewer` and `implementer`; the alias names are yours and do not need to reveal the provider.
58
- `config init` also writes missing `config.work.json` and
59
- `config.personal.json` profile overlays next to the base config. For an
60
- existing install, run `env -u AI_PROFILE delegate config sync-profiles` to
61
- create missing overlays without overwriting existing ones.
56
+ Setup checks all supported harnesses, records normalized model and reasoning
57
+ metadata in the active auth profile's private cache, and reports which
58
+ harnesses are launchable. If no config exists, it creates a minimal config
59
+ containing safe absolute binary selectors. It never changes an existing
60
+ config. Setup does not install or authenticate a harness, edit harness-native
61
+ config, or submit a model prompt.
62
+
63
+ Use `delegate config init` when you want the editable example config and
64
+ profile overlays instead. Replace its placeholder Droid model IDs. Local
65
+ alias names such as `reviewer` and `implementer` are yours and need not reveal
66
+ the provider. For an existing install, run
67
+ `env -u AI_PROFILE delegate config sync-profiles` to create missing overlays
68
+ without overwriting existing ones.
62
69
 
63
70
  In a development checkout, `cp config.example.json ~/.delegate/config.json`
64
71
  is still fine. Installed users should prefer `delegate config init`.
@@ -87,7 +94,22 @@ When running on Windows through WSL, treat Delegate as a Linux CLI:
87
94
  delegate --json worktree remove --help
88
95
  ```
89
96
 
90
- `delegate --json capabilities` reports reasoning-effort support from config, workspace cache, and bundled fallback data without launching a child runtime. Run `delegate --json capabilities refresh` only when you explicitly want Delegate to call child CLIs and update the workspace-local `.delegate/capabilities/reasoning.json` cache.
97
+ `delegate --json capabilities` reports reasoning-effort support from config,
98
+ the active profile's discovery cache, the legacy workspace cache, and bundled
99
+ fallback data without launching a child runtime.
100
+
101
+ Rediscover after a harness upgrade, account change, or new model release:
102
+
103
+ ```bash
104
+ delegate --json models --summary
105
+ delegate --json models <engine> --live
106
+ delegate --json capabilities refresh
107
+ delegate --json capabilities
108
+ ```
109
+
110
+ `models <engine> --live` is a one-off view and never writes Delegate config or
111
+ cache. `capabilities refresh` and `setup` update the selected profile's cache,
112
+ preserving the last good record for a harness whose current probe fails.
91
113
 
92
114
  6. Run a dry-run smoke test. Dry-run does not require the real child binary and does not launch the runtime:
93
115
 
@@ -167,6 +189,10 @@ For an orchestrating agent, script, or CI job:
167
189
  a temporary `HOME` avoids inheriting nested maps such as user-level Droid
168
190
  aliases.
169
191
 
192
+ For a persistent user installation, run `delegate --json setup` once before
193
+ the first launch. Do not add setup to every CI invocation: it calls installed
194
+ harness metadata commands and writes the selected profile's user cache.
195
+
170
196
  4. Start with dry-run JSON:
171
197
 
172
198
  ```bash