garrytan/gstack · error · Error
Save failed: empty body. Cause: no content provided via --fr
Error message
Save failed: empty body. Cause: no content provided via --from-file or stdin. Action: pipe markdown into $B domain-skill save, or pass --from-file <path>.
What it means
Error "Save failed: empty body. Cause: no content provided via --from-file or stdin. Action: pipe markdown into $B domain-skill save, or pass --from-file <path>." thrown in garrytan/gstack.
Source
Thrown at browse/src/domain-skill-commands.ts:113
}
if (list.global.length > 0) {
if (lines.length > 0) lines.push('');
lines.push('Global (cross-project):');
for (const r of list.global) {
lines.push(` ${r.host} — v${r.version}, ${r.body.length} bytes`);
}
}
return lines.join('\n');
}
// ─── Subcommand handlers ────────────────────────────────────────
async function handleSave(args: string[], bm: BrowserManager): Promise<string> {
const page = bm.getPage();
const host = await deriveHostFromActiveTab(page);
const body = await readBodyFromArgs(args);
if (!body || !body.trim()) {
throw new Error(
'Save failed: empty body.\n' +
'Cause: no content provided via --from-file or stdin.\n' +
'Action: pipe markdown into $B domain-skill save, or pass --from-file <path>.'
);
}
// L1-L3 content filters (datamarking, hidden-element strip, ARIA regex,
// URL blocklist). The full L4 ML classifier runs at sidebar-agent prompt
// injection time, not here (CLAUDE.md: classifier can't import in compiled binary).
const filterResult = runContentFilters(body, page.url(), 'domain-skill-save');
if (filterResult.blocked) {
logTelemetry({ event: 'domain_skill_save_blocked', host, reason: filterResult.message });
throw new Error(
`Save blocked: ${filterResult.message}\n` +
'Cause: skill body trips L1-L3 content filters (likely contains URL blocklist match or ARIA injection patterns).\n' +
'Action: review the body for suspicious instruction-like content; rewrite and retry.'
);
}
// L1-L3 score is binary (passed or not). For the L4 score field we leave 0View on GitHub (pinned to 94993f7401)
When it happens
Trigger: Thrown at browse/src/domain-skill-commands.ts:113 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/f241259537f439d0.
Report an issue: GitHub.