tinyhumansai/openhuman · error · Error

--isolated-workspace requires --spawn-core

Error message

--isolated-workspace requires --spawn-core

What it means

main() rejects the combination --isolated-workspace without --spawn-core. An isolated workspace means 'create a throwaway temp workspace under $TMPDIR and point a freshly spawned core at it' — an already-running external core cannot be given a new workspace after the fact, so the flag is meaningless without a spawn. The check runs before any temp dir is created.

Source

Thrown at scripts/debug/goals-live.mjs:543

    const toShow = goalsRuns.length ? goalsRuns : changed;
    if (toShow.length === 0)
      console.log("\n  (no goals_agent transcript found — run may not persist transcripts)");
    for (const t of toShow) printThoughts(t);
  } else if (goalsRuns.length) {
    console.log("\n  (re-run with --show-thoughts to see the agent's reasoning + tool calls)");
  }
}

// ── main ────────────────────────────────────────────────────────────────────

async function main() {
  const opts = parseArgs(process.argv.slice(2));
  if (!opts.workspace) opts.workspace = await defaultWorkspace();

  let tempWorkspace = "";
  let spawned;
  if (opts.isolatedWorkspace) {
    if (!opts.spawnCore) throw new Error("--isolated-workspace requires --spawn-core");
    tempWorkspace = await mkdtemp(path.join(tmpdir(), "openhuman-goals-live-"));
    opts.workspace = path.join(tempWorkspace, "workspace");
    await mkdir(opts.workspace, { recursive: true });
  }

  if (opts.spawnCore) {
    if (!opts.coreUrlExplicit) {
      const port = await pickFreePort();
      opts.coreUrl = `http://127.0.0.1:${port}/rpc`;
    }
    spawned = await startCore(opts);
    opts.token = spawned.token;
  } else {
    opts.token = await readToken(opts);
  }

  console.log("[goals-live] starting");
  console.log(`  rpc:        ${opts.coreUrl}`);

View on GitHub (pinned to a221052e0d)

Solutions

  1. Add --spawn-core: `node scripts/debug/goals-live.mjs --spawn-core --isolated-workspace`
  2. Or drop --isolated-workspace and pass --workspace <dir> to target a specific existing workspace against the external core
  3. If wrapping the script, assert the flag implication when composing argv

Example fix

# before
node scripts/debug/goals-live.mjs --isolated-workspace
# Error: --isolated-workspace requires --spawn-core

# after
node scripts/debug/goals-live.mjs --spawn-core --isolated-workspace --keep-workspace
Defensive patterns

Strategy: validation

Validate before calling

if (argv.includes("--isolated-workspace") && !argv.includes("--spawn-core")) {
  console.error("--isolated-workspace only means something with --spawn-core; add it or drop the flag");
  process.exit(2);
}

Prevention

When it happens

Trigger: Running `node scripts/debug/goals-live.mjs --isolated-workspace` while intending to talk to an external core at --core-url; shell alias/history carrying the flag from a previous --spawn-core invocation where it was later dropped; boolean-flag copy-paste from the usage text.

Common situations: Developer adds --keep-workspace/--isolated-workspace for a repro case but forgets --spawn-core; scripts/CI wrapper assembling flags conditionally and emitting the isolated flag without the spawn flag.

Related errors


AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16). Data as JSON: /api/errors/6e0c679079fb83a0. Report an issue: GitHub.