garrytan/gstack · error · Error

browse-client: cannot find daemon port + token. Either spawn

Error message

browse-client: cannot find daemon port + token. Either spawn via `$B skill run` (sets GSTACK_PORT + GSTACK_SKILL_TOKEN) or run from a project with a live daemon (.gstack/browse.json must exist).

What it means

Error "browse-client: cannot find daemon port + token. Either spawn via `$B skill run` (sets GSTACK_PORT + GSTACK_SKILL_TOKEN) or run from a project with a live daemon (.gstack/browse.json must exist)." thrown in garrytan/gstack.

Source

Thrown at browse/src/browse-client.ts:97

  // 2. State file fallback (developer running `bun run script.ts` directly).
  const stateFile = opts.stateFile ?? process.env.BROWSE_STATE_FILE ?? defaultStateFile();
  if (stateFile && fs.existsSync(stateFile)) {
    try {
      const data = JSON.parse(fs.readFileSync(stateFile, 'utf-8'));
      if (typeof data.port === 'number' && typeof data.token === 'string') {
        return {
          port: opts.port ?? data.port,
          token: opts.token ?? data.token,
          source: 'state-file',
        };
      }
    } catch {
      // fall through to error
    }
  }

  throw new Error(
    'browse-client: cannot find daemon port + token. Either spawn via `$B skill run` ' +
    '(sets GSTACK_PORT + GSTACK_SKILL_TOKEN) or run from a project with a live daemon ' +
    '(.gstack/browse.json must exist).'
  );
}

function defaultStateFile(): string | null {
  try {
    const proc = cp.spawnSync('git', ['rev-parse', '--show-toplevel'], { encoding: 'utf-8', timeout: 2000 });
    const root = proc.status === 0 ? proc.stdout.trim() : null;
    const base = root || process.cwd();
    return path.join(base, '.gstack', 'browse.json');
  } catch {
    return path.join(process.cwd(), '.gstack', 'browse.json');
  }
}

export class BrowseClientError extends Error {

View on GitHub (pinned to 94993f7401)

When it happens

Trigger: Thrown at browse/src/browse-client.ts:97 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of garrytan/gstack@94993f7401 (2026-08-12). Data as JSON: /api/errors/d6cb02b2e24ed4c7. Report an issue: GitHub.