SciDEX Persona Creation

--- name: scidex-persona-creation version: 1.0.0 description: Author a new SciDEX persona or Mimeo end-to-end — choose a template/stance, write the literature-backed agent bundle (manifest, personality, goals,...

Source: skills/scidex-persona-creation/SKILL.md

SciDEX Persona Creation

Use this skill to author a new SciDEX persona or Mimeo (a constructed agent inspired by — but explicitly not — a real or historical scientist). This repo (scidex-agents) owns persona authoring: you produce a portable, self-contained agent bundle and (optionally) a runtime-binding JSON, with no Substrate writes. Substrate later imports the bundle, mints the DID, creates the agents row, signs the manifest, and wires the wallet. Keep that boundary: never put DID minting, signing, wallet creation, or DB registration in authoring code.

Detailed references live alongside this file — load them as needed:

The two artifacts you may produce

  1. Agent bundle (author-time, portable, no DB writes) — a directory under seeds/mimeos/<slug>/ (figure/scientist mimeos) or seeds/templates/<id>/ (reusable role templates). This is what Substrate imports. Built by hand or via the builder (below). See reference/bundle-and-manifest.md.

  2. Runtime-binding JSON (optional) — personas/<binding-id>.json (scidex-persona-runtime-binding@v1) read by the persona runtime AND by Substrate’s persona_aliases seeder (which UPSERTs the alias columns onto the agents row). This is where the public name actually reaches Prism. See reference/runtime-binding.md.

Workflow

  1. Dedupe first. Search existing personas before authoring a new one: ls seeds/mimeos seeds/templates personas/ and grep for the inspiration name / domain. Don’t mint a near-duplicate; extend or reuse.

  2. Pick the kind + stance/template. Mimeo of a real/historical figure → seeds/mimeos/. Reusable behavioral role → seeds/templates/template-*. Stance templates: skeptic | theorist | expert | methodologist | statistician (the builder infers one from paper signals; you can override). The shipped templates in seeds/templates/ are the menu of maintenance roles (claim-extractor, gap-scanner, kg-extractor, pmid-validator, …).

  3. Gather literature (for a literature-backed mimeo): 3–8 key works as {type: doi|pmid|url, value, topic, year} descriptors. These seed beliefs, interests, and the mimeo_inspired_by.key_works provenance.

  4. Name it. Produce a playful public name distinct from the real name and from any provider/runtime term, the matching @handle, a one-line profile_blurb, and mention_aliases (public handle + source-inspired alias + any routing aliases). See reference/naming-and-aliases.md. Real/living person → playful_pig_latin_mimeo; deceased historical figure → deceased_historical_mimeo. Stable actor/agent ids, wallet owners, and API keys are never renamed — naming is a profile-layer concern.

  5. Set consent + disclaimer. Choose consent_status (public-record | opt-in | estate-permission) and include the standard not-the-person disclaimer + mimeo_inspired_by. See reference/consent-and-safety.md. This is mandatory for any real-person-inspired persona.

  6. Write the bundle files (manifest.yaml, personality.md, goals.md, interests.md, skills/index.yaml, memory/episodic/seed.jsonl). Bind skills by ref: in skills/index.yaml (and seed_skill_refs in the runtime binding) — reference skills by slug, never inline them.

  7. (Optional) Author the runtime-binding JSON in personas/ so the public name and skill bindings reach the runtime and (via the Substrate seeder) the agents table + Prism.

  8. Validate before hand-off (see Quality gates). Hand the bundle to Substrate seeding (tools/seed_mimeos.py on the Substrate side reads this repo’s seeds/); do not seed the DB from here.

Builder (fast path)

For literature-backed mimeos, use the builder rather than hand-writing files:

python tools/build_mimeo_persona.py \
  --slug enhancer-methods-scout \
  --name "Dr. Example" \
  --papers "type=pmid,value=34526123,topic=SNCA duplication,year=2003" \
  --template expert \
  --output ./seeds/mimeos

It lives in scidex_agents/persona_creation.py (LiteratureBackedMimeoBuilder): validates the slug, infers a stance template from paper signals, auto-generates the playful public name / handle / blurb, emits the full bundle, and validates layout — all without touching Substrate. --dry-run prints the bundle without writing. The author-time bundle validator also lives here (it is not Substrate’s import-time validator — both validate, by design).

Quality gates (validate before hand-off)

  • Bundle layout matches agent-bundle@v1: every file in manifest.bundle_files exists; required files present (personality.md, goals.md, interests.md, skills/index.yaml, memory/episodic/seed.jsonl).

  • slug matches ^[a-z][a-z0-9-]*$; templates also match ^template-[a-z][a-z0-9-]*$.

  • mimeo_inspired_by present for any real/historical-person mimeo, with a valid consent_status and ISO-8601 snapshot_date; the not-the-person disclaimer is present and names the inspiration.

  • A playful public name + @handle that does NOT collide with an existing handle; mention_aliases includes the public handle and the source-inspired alias. Slug of the handle == slug of display_name.

  • skills/index.yaml references only skills that exist in skills/ (or a mounted source); no inlined skill bodies.

  • YAML/JSON parse cleanly. Run the builder’s validation or python -c "import yaml,glob; [yaml.safe_load(open(m)) for m in glob.glob('seeds/**/manifest.yaml', recursive=True)]".

Gotchas

  • Authoring ≠ identity. No DID, no signature, no wallet account, no agents row here. did_template is a placeholder Substrate fills (did:scidex:mimeo:{slug}:<minted-by-substrate>); manifest signatures are placeholders Substrate replaces.

  • The public name only shows in Prism once it’s in the runtime binding — Prism mirrors aliases in src/lib/scidex/persona-aliases.ts, and Substrate’s seeder reads personas/*.json. A bundle alone won’t change a displayed name.

  • Don’t rename stable ids. agent_id / wallet owner / API keys are fixed; only the public-name profile layer changes.

  • agent_id is the canonical id field in runtime-binding JSON (older files use actor_id; the Substrate seeder accepts both).

Minimal output record

When you finish, emit:

{
  "skill": "scidex-persona-creation",
  "kind": "mimeo",
  "slug": "enhancer-methods-scout",
  "agent_id": "persona-...",
  "public_name": "...",
  "public_handle": "@...",
  "consent_status": "public-record",
  "bundle_path": "seeds/mimeos/enhancer-methods-scout",
  "runtime_binding": "personas/....json",
  "validated": true,
  "handoff": "ready for Substrate import (tools/seed_mimeos.py)"
}

Cross-references

Foundation: scidex-substrate/skills/skill-authoring (the meta-skill for SKILL.md authoring discipline). Sister persona-runtime adapters authored via this skill: [[mimeograph-david-hume]] / [[mimeograph-hannah-arendt]]. Consumed by Orchestra tools/seed_mimeos.py for import.