Yeachan-Heo/oh-my-codex · critical · Error
catalog_manifest_invalid:missing_core_skill:${coreSkill}
Error message
catalog_manifest_invalid:missing_core_skill:${coreSkill} What it means
After validating all entries, the validator asserts that each of the required core skills (autopilot, ralplan, team, ultragoal) exists with status active. This error names the missing core skill and means the catalog cannot be used because a guaranteed-available skill is absent or not active.
Source
Thrown at src/catalog/schema.ts:128
? entry.canonical.trim()
: undefined;
if ((entry.status === 'alias' || entry.status === 'merged') && !canonical) {
throw new Error(`catalog_manifest_invalid:agents[${index}].canonical`);
}
return {
name,
category: entry.category as CatalogAgentCategory,
status: entry.status as CatalogEntryStatus,
canonical,
};
});
for (const coreSkill of REQUIRED_CORE_SKILLS) {
const skill = skills.find((s) => s.name === coreSkill);
if (!skill || skill.status !== 'active') {
throw new Error(`catalog_manifest_invalid:missing_core_skill:${coreSkill}`);
}
}
return {
schemaVersion: input.schemaVersion,
catalogVersion: input.catalogVersion,
skills,
agents,
};
}
export interface CatalogCounts {
skillCount: number;
promptCount: number;
activeSkillCount: number;
activeAgentCount: number;
}
View on GitHub (pinned to 3ad79a8a6f)
Solutions
- Add the named skill back as {"name":"<coreSkill>", "status":"active", ...}
- If it was renamed, keep the new active entry plus an alias, and also ensure an active entry under the required core name exists per your version's contract
- Regenerate the manifest from the canonical source that includes core skills
Example fix
// before
"skills": [ ... no "team" entry ... ]
// after
"skills": [ ..., { "name": "team", "category": "planning", "status": "active" } ] Defensive patterns
Strategy: try-catch
Validate before calling
const REQUIRED = ['autopilot','ralplan','team','ultragoal'];
const ok = REQUIRED.every((n) => raw.skills?.some((s: any) => s?.name === n && s?.status === 'active'));
if (!ok) { /* add missing core skills before shipping */ } Try / catch
try { readCatalogManifest(root); } catch (e) { if ((e as Error).message.startsWith('catalog_manifest_invalid:missing_core_skill:')) { const missing = (e as Error).message.split(':').pop(); /* re-add core skill */ } throw e; } Prevention
- Never filter core skills out of generated catalogs
- Keep autopilot/ralplan/team/ultragoal active when renaming or deprecating
- Assert core-skill presence in CI manifest checks
When it happens
Trigger: A manifest that omits one of autopilot/ralplan/team/ultragoal, or includes it with status alias/merged/deprecated/internal instead of active.
Common situations: Trimmed-down custom catalogs, filtering deprecated entries during generation, or changing a core skill's status during a rename without keeping an active entry.
Related errors
- catalog_manifest_invalid:${field}
- catalog_manifest_invalid:root
- catalog_manifest_invalid:schemaVersion
- catalog_manifest_invalid:skills
- catalog_manifest_invalid:agents
AI-assisted analysis of Yeachan-Heo/oh-my-codex@3ad79a8a6f (2026-08-27).
Data as JSON: /api/errors/0b765bad31ec7a96.
Report an issue: GitHub.