can1357/oh-my-pi · error · StructuredSubagentError

Subagent isolated execution requires task.isolation.mode to

Error message

Subagent isolated execution requires task.isolation.mode to be set; current mode is "none".

What it means

Thrown in preflight when a subagent request asks for isolated execution (`isolation.requested === true`) but the session setting `task.isolation.mode` is "none" (the default), meaning no isolation backend (e.g. worktree) is configured. The library refuses to run isolated without a concrete isolation strategy.

Source

Thrown at packages/coding-agent/src/task/structured-subagent.ts:299

	}
	const agentModelOverrides = request.session.settings.get("task.agentModelOverrides");
	const parentActiveModelPattern = request.session.getActiveModelString?.();
	const modelResolution = {
		requestModel: request.model,
		settingsOverride: agentModelOverrides[agentName],
		agentModel: effectiveAgent.model,
		settings: request.session.settings,
		activeModelPattern: parentActiveModelPattern,
		fallbackModelPattern: request.session.getModelString?.(),
	};
	// Role identity and patterns come from one call so they cannot be derived
	// from different sources: the expansion below discards the alias, and the
	// child's inherited retry-fallback chain is keyed off the role.
	const { patterns: modelOverride, role: modelRole } = resolveAgentModelSelection(modelResolution);
	const isolationMode = request.session.settings.get("task.isolation.mode");
	const isIsolated = request.isolation?.requested === true;
	if (isIsolated && isolationMode === "none") {
		throw new StructuredSubagentError(
			"preflight",
			`Subagent isolated execution requires task.isolation.mode to be set; current mode is "none".`,
		);
	}
	return {
		discovery,
		agentName,
		agent,
		effectiveAgent,
		modelOverride,
		modelRole,
		parentActiveModelPattern,
		schema,
		planMode,
		isIsolated,
		mergeMode: request.isolation?.merge ?? request.session.settings.get("task.isolation.merge"),
		applyChanges:
			request.isolation?.apply ??

View on GitHub (pinned to 9690622007)

Solutions

  1. Set `task.isolation.mode` in session settings (e.g. "worktree")
  2. Remove `isolation.requested: true` if isolation is not actually needed
  3. Check the session settings before requesting isolation

Example fix

// settings before
{ "task.isolation.mode": "none" }
// after
{ "task.isolation.mode": "worktree" }
Defensive patterns

Strategy: validation

Validate before calling

const mode = session.settings.get("task.isolation.mode");
if (request.isolation?.requested === true && mode === "none") {
  throw new Error("Set task.isolation.mode before requesting isolated subagents");
}
await task(request);

Try / catch

try {
  await task(req);
} catch (e) {
  if (e instanceof StructuredSubagentError && e.message.includes("task.isolation.mode")) {
    session.settings.set("task.isolation.mode", "worktree");
    return task(req);
  }
  throw e;
}

Prevention

When it happens

Trigger: Setting `isolation: { requested: true }` on the task request while `task.isolation.mode` remains unset or "none" in session settings.

Common situations: Callers adopting the isolation API without configuring the isolation mode setting; defaults reset by config changes; environments (CI, embedded SDK) where worktree isolation was never enabled.

Related errors


AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31). Data as JSON: /api/errors/62fb3300dd6bf7ea. Report an issue: GitHub.