garrytan/gstack · error · Error
Usage: browse tab-each <command> [args...] Example: browse t
Error message
Usage: browse tab-each <command> [args...] Example: browse tab-each snapshot -i
What it means
Thrown by the 'tab-each' meta-command when called with zero arguments. tab-each fans out a single inner command across all open tabs, so it requires at least the inner command name plus optional arguments.
Source
Thrown at browse/src/meta-commands.ts:314
case 'closetab': {
const id = args[0] ? parseInt(args[0], 10) : undefined;
await bm.closeTab(id);
return `Closed tab${id ? ` ${id}` : ''}`;
}
case 'tab-each': {
// Fan out a single command across every open tab. Returns a JSON
// object: { results: [{tabId, url, title, status, output}], total }.
// Restores the originally active tab when done so the user's view
// doesn't shift under them.
//
// Usage: $B tab-each <command> [args...]
// $B tab-each snapshot -i → snapshot every tab
// $B tab-each text → grab clean text from every tab
// $B tab-each goto https://x.y → load the same URL in every tab
if (args.length === 0) {
throw new Error(
'Usage: browse tab-each <command> [args...]\n' +
'Example: browse tab-each snapshot -i'
);
}
const innerRaw = args[0];
const innerName = canonicalizeCommand(innerRaw);
const innerArgs = args.slice(1);
// Scope check the inner command before fanning out, so a single
// permission failure aborts the whole batch instead of partially
// mutating tabs.
if (tokenInfo && tokenInfo.clientId !== 'root' && !checkScope(tokenInfo, innerName)) {
throw new Error(
`tab-each rejected: subcommand "${innerRaw}" not allowed by your token scope (${tokenInfo.scopes.join(', ')}).`
);
}
View on GitHub (pinned to 94993f7401)
Solutions
- Provide the inner command and its arguments, e.g., 'browse tab-each snapshot -i' or 'browse tab-each text'
- Consult the usage example in the error message for valid patterns
Example fix
# before $B tab-each # after $B tab-each snapshot -i
Defensive patterns
Strategy: validation
Validate before calling
if (args.length === 0) {
throw new Error('tab-each requires a command. Example: tab-each snapshot -i');
} Prevention
- Always specify the inner command when calling tab-each
- Reference the usage example in the error message for valid command patterns
When it happens
Trigger: Calling 'browse tab-each' with an empty args array.
Common situations: User runs tab-each without specifying which command to fan out, or a script constructs the command with an empty arguments list.
Related errors
- Usage: browse tab <id>
- tab-each rejected: subcommand "${innerRaw}" not allowed by y
- pdf: --from-file requires a path
- Unknown pdf flag: ${a}
- pdf: --margins is mutex with --margin-top/--margin-right/--m
AI-assisted analysis of garrytan/gstack@94993f7401 (2026-08-12).
Data as JSON: /api/errors/3d5aa3f52ea1424b.
Report an issue: GitHub.