coleam00/Archon · error
Node '${node.id}': failed to serialize structured_output to
Error message
Node '${node.id}': failed to serialize structured_output to JSON: ${err.message} What it means
When a node declares output_format and the provider's structured output passes schema validation, the executor converts it to canonical JSON via canonicalValueText. If that serialization throws (e.g. non-JSON-serializable values like BigInt, circular structures), the node fails with this error wrapping the underlying message.
Source
Thrown at packages/workflows/src/dag-executor.ts:3036
);
if (schemaCompileError !== undefined) {
getLog().warn(
{ nodeId: node.id, workflowRunId: workflowRun.id, compileMsg: schemaCompileError },
'dag.structured_output_schema_uncompilable'
);
await safeSendMessage(
platform,
conversationId,
`⚠️ Node '${node.id}': its \`output_format\` schema could not be compiled (${schemaCompileError}), so the structured output was NOT validated against it. Fix the schema to enforce it.`,
nodeContext
);
}
if (validation.valid) {
try {
nodeOutputText = canonicalValueText(structuredOutput);
} catch (serializeErr) {
const err = serializeErr as Error;
throw new Error(
`Node '${node.id}': failed to serialize structured_output to JSON: ${err.message}`
);
}
getLog().debug({ nodeId: node.id, streamingMode }, 'dag.structured_output_override');
break;
}
// Invalid payload.
getLog().warn(
{ nodeId: node.id, workflowRunId: workflowRun.id, errors: validation.errors },
'dag.structured_output_invalid'
);
if (canReask) {
await scheduleReask(validation.errors);
continue;
}
throw new Error(
`Node '${node.id}': output_format declared but the provider's structured output failed schema validation: ${validation.errors.join('; ')}`
);View on GitHub (pinned to 0773b97458)
Solutions
- Inspect err.message in the error to see which value failed serialization.
- Tighten the output_format schema so only JSON-serializable types are allowed (no exotic types).
- Check/fix the provider adapter that produced the structured output value.
- Report/fix a canonicalValueText bug if the value is ordinary JSON data.
Example fix
// before
schema allows: { id: "integer-as-bigint" } // adapter yields BigInt
// after
schema: { id: { type: "string" } } // or convert BigInt in adapter Defensive patterns
Strategy: type-guard
Validate before calling
function isJsonSerializable(v: unknown, seen = new Set()): boolean {
if (v === null || ['string','number','boolean'].includes(typeof v)) return true;
if (typeof v === 'bigint') return false;
if (typeof v !== 'object') return false;
if (seen.has(v)) return false;
seen.add(v);
return Object.values(v).every(x => isJsonSerializable(x, seen));
} Type guard
function isPlainJsonObject(v: unknown): v is Record<string, unknown> {
return typeof v === 'object' && v !== null && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;
} Try / catch
try {
await runNode(node);
} catch (e) {
if (String(e).includes('failed to serialize structured_output')) console.error('Non-JSON value in structured output — inspect adapter');
else throw e;
} Prevention
- Restrict output_format schemas to plain JSON types.
- Audit custom provider adapters for exotic value types.
- Round-trip structured outputs through JSON.parse(JSON.stringify()) in adapters.
When it happens
Trigger: structuredOutput validated against the schema but contains values canonicalValueText cannot serialize to JSON — typically unusual value types produced by a provider adapter or a schema allowing exotic types.
Common situations: A custom provider adapter returning non-standard JS values (BigInt, undefined-in-arrays, circular refs); a schema that validated loosely enough to admit unserializable data; bug in structured-output parsing.
Understand the failure class
Background: "JSON serialization failed", "not JSON serializable", "Failed to serialize": why JSON marshaling errors happen and how to fix them — this error's family across 46 libraries.
Related errors
- owner returned an invalid response
- owner returned an invalid PID
- Corrupt commands JSON for codebase ${id}: unable to parse st
- Pi auth storage init failed: ${e.message}. Check that ~/.pi/
- MCP server "${serverName}" must be a JSON object (got ${desc
AI-assisted analysis of coleam00/Archon@0773b97458 (2026-09-01).
Data as JSON: /api/errors/dfb06f6b4f524be4.
Report an issue: GitHub.