Effort: standard
The 30+ personas under personas/<name>/ (aristotle, andrej-karpathy,
falsifier, evidence-auditor, …) each ship a hand-written AGENTS.md,
SKILL.md, optional references/, and an avatar. Adding a new persona
is a copy-paste-fix-the-frontmatter exercise that diverges in subtle
ways (some lack frontmatter, some reference dead skills, some
hard-code a model). Ship scidex new-persona <slug> — generates a
persona from a single YAML spec, validates it against the persona
schema, and registers it with the senate persona registry.
scidex/skills/persona_schema.json (JSONslug, display_name,domain (enum: Theorist|Skeptic|Expert|Methodologist|default_stancecore_principles (≥3 entries with name +model_preference (string, defaults toclaude-auto), tools (list of skill ids the persona mayco_authors (list of human references).
scidex new-persona --from <yaml> reads a YAMLpersonas/<slug>/AGENTS.md rendered fromtemplates/persona_agents_md.j2 (header, default stance,personas/<slug>/SKILL.md (one-paragraph summary used byscidex/skills/loader.py).personas/<slug>/references/ directory with a placeholderREADME.md so the persona has a citation surface from daypersonas/<slug>/avatar.png if --avatar
<path> provided (copied; otherwise a 1px placeholder isscidex new-persona --validate <slug>## Default
stance, ## Core principles), checks every tool listed inpersonas registry table the senate already usesscidex/senate/personas / scidex/agents/registry.py) sotests/test_persona_generator.py:--overwrite.--validate against personas/aristotle/ exits 0.
scripts/backfill_persona_yaml.py: walkspersonas/*/AGENTS.md, reverse-engineers a YAML for eachpersonas/<slug>/persona.yaml. Futurepersonas/aristotle/AGENTS.md end-aristotle thatstring.Template again).
cli.py.scidex/skills/loader.py — auto-discovers personas at boot.scidex/agents/registry.py — persona registry row writer.q-devx-skill-scaffolder (sibling) — same template machinery.