Route project work through Cursor agy and PI

Why: make the three approved CLIs the only active implementation and test routes

Evidence: adapter unit tests, configuration validation, diff check, and real marker probes for all three profiles

Impact: narrows project routing and fixes agy prompt binding for noninteractive execution

Refs: feature/goal-first-delivery
This commit is contained in:
2026-10-15 06:48:06 +00:00
parent 60e3b705c2
commit 8c98635dfd
3 changed files with 20 additions and 35 deletions
+8 -31
View File
@@ -7,9 +7,10 @@ parser accepts exactly one `agent-execution` fenced block.
U3's execution controller and U4's project wiring are integrated. This file is
the execution-routing authority for implementation, repair, test, and review.
Installed CLI identity stays unproven until a host runs the U5 probes one
profile at a time. A provider that makes no successful stdin write or
stdout/stderr read for `idle_timeout_seconds` is stopped before
Active routes are intentionally limited to Cursor, Antigravity (`agy`), and
PI. `model: auto` lets each CLI use its configured default model; PI therefore
uses the operator-selected MiniMax default. A provider that makes no successful
stdin write or stdout/stderr read for `idle_timeout_seconds` is stopped before
`timeout_seconds`.
```agent-execution
@@ -26,10 +27,10 @@ execution:
raw_output_bytes: 10485760
roles:
implementation: [cursor, antigravity, claude, codex, pi, kimi, opencode]
repair: [cursor, antigravity, codex, claude]
test: [pi, antigravity, codex]
review: [claude, codex, pi]
implementation: [cursor, antigravity, pi]
repair: [cursor, antigravity, pi]
test: [pi, antigravity, cursor]
review: [pi, antigravity, cursor]
profiles:
cursor:
@@ -44,33 +45,9 @@ profiles:
model: auto
enabled: true
claude:
adapter: claude
executable: claude
model: auto
enabled: true
codex:
adapter: codex
executable: codex
model: auto
enabled: true
pi:
adapter: pi
executable: pi
model: auto
enabled: true
kimi:
adapter: kimi
executable: kimi
model: auto
enabled: true
opencode:
adapter: opencode
executable: opencode
model: auto
enabled: true
```
+6 -2
View File
@@ -121,7 +121,7 @@ BUILTIN_SPECS: dict[str, AdapterSpec] = {
),
"antigravity": AdapterSpec(
name="antigravity",
noninteractive_argv=("--print",),
noninteractive_argv=(),
run_everything_argv=(
"--dangerously-skip-permissions",
"--mode",
@@ -130,7 +130,7 @@ BUILTIN_SPECS: dict[str, AdapterSpec] = {
workspace_flag=None,
model_flag="--model",
output_argv=("--output-format", "stream-json"),
prompt_transport="positional",
prompt_transport="print",
),
"claude": AdapterSpec(
name="claude",
@@ -289,6 +289,10 @@ def build_invocation(
elif spec.prompt_transport == "flag":
argv.extend(["--prompt", prompt])
prompt_values.add(prompt)
elif spec.prompt_transport == "print":
# agy 1.3.5 consumes the argv item immediately after --print.
argv.extend(["--print", prompt])
prompt_values.add(prompt)
else:
raise ValueError(f"unsupported prompt_transport: {spec.prompt_transport!r}")
+6 -2
View File
@@ -224,10 +224,9 @@ class AgentExecAdapterTests(unittest.TestCase):
profile, cfg, self.workspace, self.unit_packet, self.result_path
)
self.assertEqual(
inv.argv[:-1],
inv.argv[:-2],
(
"agy",
"--print",
"--dangerously-skip-permissions",
"--mode",
"auto",
@@ -235,9 +234,14 @@ class AgentExecAdapterTests(unittest.TestCase):
"stream-json",
),
)
self.assertEqual(inv.argv[-2], "--print")
_assert_bounded_prompt(self, inv.argv[-1], self.packet_body)
self.assertNotIn("--model", inv.argv)
self.assertIsNone(inv.stdin)
self.assertEqual(inv.cwd, self.workspace)
self.assertEqual(inv.sanitized_display[-1], UNIT_PACKET_MARKER)
self.assertEqual(inv.sanitized_display[-2], "--print")
self.assertNotIn(self.packet_body, " ".join(inv.sanitized_display))
def test_claude_run_everything_argv(self) -> None:
_write_fake_cli(self.bindir, "claude", help_text=CLAUDE_HELP)