summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrea Alberti <[email protected]>2026-03-03 23:30:16 +0100
committerGitHub <[email protected]>2026-03-03 22:30:16 +0000
commit109ea1709bf5036fb2bc6edc847758bede5467a1 (patch)
tree4d57a58014395cbe65c910f21adcdf52010bbe85
parent9a4292726875e89f3614ba70f27d4cac1c153eed (diff)
downloadopencode-109ea1709bf5036fb2bc6edc847758bede5467a1.tar.gz
opencode-109ea1709bf5036fb2bc6edc847758bede5467a1.zip
fix: `run --attach` agent validation (#11812)
Co-authored-by: LukeParkerDev <[email protected]>
-rw-r--r--packages/opencode/src/cli/cmd/run.ts39
1 files changed, 39 insertions, 0 deletions
diff --git a/packages/opencode/src/cli/cmd/run.ts b/packages/opencode/src/cli/cmd/run.ts
index f3781f1ab..61bc609bb 100644
--- a/packages/opencode/src/cli/cmd/run.ts
+++ b/packages/opencode/src/cli/cmd/run.ts
@@ -555,6 +555,45 @@ export const RunCommand = cmd({
// Validate agent if specified
const agent = await (async () => {
if (!args.agent) return undefined
+
+ // When attaching, validate against the running server instead of local Instance state.
+ if (args.attach) {
+ const modes = await sdk.app
+ .agents(undefined, { throwOnError: true })
+ .then((x) => x.data ?? [])
+ .catch(() => undefined)
+
+ if (!modes) {
+ UI.println(
+ UI.Style.TEXT_WARNING_BOLD + "!",
+ UI.Style.TEXT_NORMAL,
+ `failed to list agents from ${args.attach}. Falling back to default agent`,
+ )
+ return undefined
+ }
+
+ const agent = modes.find((a) => a.name === args.agent)
+ if (!agent) {
+ UI.println(
+ UI.Style.TEXT_WARNING_BOLD + "!",
+ UI.Style.TEXT_NORMAL,
+ `agent "${args.agent}" not found. Falling back to default agent`,
+ )
+ return undefined
+ }
+
+ if (agent.mode === "subagent") {
+ UI.println(
+ UI.Style.TEXT_WARNING_BOLD + "!",
+ UI.Style.TEXT_NORMAL,
+ `agent "${args.agent}" is a subagent, not a primary agent. Falling back to default agent`,
+ )
+ return undefined
+ }
+
+ return args.agent
+ }
+
const entry = await Agent.get(args.agent)
if (!entry) {
UI.println(