multica-ai/multica · error
creation_studio.create_failed
Error message
creation_studio.create_failed
What it means
i18n message key (creation_studio.create_failed) thrown in use-create-agent-submit.ts when api.createAgent returned but the created agent record had no id. It marks the final agent-creation step of the creation studio as failed after the request completed with an unusable payload. Squad membership addition happens only after this guard, so it also implies no squad add was attempted.
Source
Thrown at packages/views/agents/create/use-create-agent-submit.ts:77
const { draft, runtimeId, squadId, template, duplicateSource, onCreated } =
options;
const create = async () => {
if (!runtimeId || creating) return;
setCreating(true);
setNameError(null);
setFormError(null);
try {
const agent = await api.createAgent(
buildCreateAgentRequest({
draft,
runtimeId,
template,
duplicateSource,
}),
);
if (!agent.id) throw new Error(t(($) => $.creation_studio.create_failed));
if (squadId) {
try {
await api.addSquadMember(squadId, {
member_type: "agent",
member_id: agent.id,
});
await Promise.all([
qc.invalidateQueries({
queryKey: [...workspaceKeys.squads(wsId), squadId, "members"],
}),
qc.invalidateQueries({
queryKey: [...workspaceKeys.squads(wsId), squadId],
}),
]);
} catch (error) {
toast.warning(
t(($) => $.create_dialog.squad_join_failed_toast, {View on GitHub (pinned to 2c0912b6ec)
Solutions
- Inspect the actual createAgent response in the network tab — verify whether the server returned an error envelope with HTTP 200.
- Align frontend and server versions; a missing id on a successful status is almost always schema drift.
- Check server logs for the create-agent handler to see whether the record was actually persisted.
- Retry after fixing the underlying cause; the form state (draft, template, duplicateSource) is preserved so nothing is lost.
Defensive patterns
Strategy: type-guard
Type guard
function isCreatedAgent(a: unknown): a is { id: string } {
return typeof a === "object" && a !== null && typeof (a as { id?: unknown }).id === "string" && (a as { id: string }).id.length > 0;
} Try / catch
try {
const agent = await api.createAgent(buildCreateAgentRequest({ draft, runtimeId, template, duplicateSource }));
if (!isCreatedAgent(agent)) throw new Error(t(($) => $.creation_studio.create_failed));
// squad membership add only after this guard
} catch (err) {
setFormError(err instanceof Error ? err.message : t(($) => $.creation_studio.create_failed));
} Prevention
- Pin frontend and server versions together in deploys; a missing id on success is schema drift.
- Log the raw response body when this guard fires to capture the actual server envelope.
- Keep form state (draft/template) around on failure so users can retry without re-entering.
When it happens
Trigger: POST createAgent returns 2xx with a body missing the id field; server-side validation created a partial record but response serialization dropped id; version skew where the agent response schema changed.
Common situations: Server/client version mismatch after a schema migration; a proxy or interceptor stripping response fields; the draft payload built by buildCreateAgentRequest being accepted but the server returning an error envelope the client does not parse as a failure.
Related errors
- creation_studio.builder.start_failed
- model discovery timed out
- model discovery failed (status: ${current.status})
- Team issue scope is not supported by the Table query
- Failed to load project data for export
AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15).
Data as JSON: /api/errors/56d90b23ca4f4176.
Report an issue: GitHub.