Agent bundle layout + `manifest.yaml` schema
The portable, author-time artifact Substrate imports. Schema id: `agent-bundle@v1` (SPEC-173 layout; SPEC-182 for Mimeo corpus). No DB writes, no DID, no real signatures at author
Source: skills/scidex-persona-creation/reference/bundle-and-manifest.md
Agent bundle layout + manifest.yaml schema
The portable, author-time artifact Substrate imports. Schema id:
agent-bundle@v1 (SPEC-173 layout; SPEC-182 for Mimeo corpus). No DB writes,
no DID, no real signatures at author time.
Directory layout
<slug>/ # seeds/mimeos/<slug> or seeds/templates/template-<id>
├── manifest.yaml # required — see schema below
├── personality.md # required — Voice / Tempo / Values / Weakness-to-monitor
├── goals.md # required — 3–5 ranked goals with success metrics + horizon
├── interests.md # required — 5–10 topic tags
├── skills/
│ └── index.yaml # required — skill refs (by slug, never inlined)
├── memory/
│ └── episodic/
│ └── seed.jsonl # required — 5–15 belief triples, one JSON object per line
├── policies/ # optional — Python policy modules (names ^[a-z][a-z0-9_]*$)
├── prompts/ # optional — markdown system/instruction prompts
└── wallet.json # optional — wallet pointer (owner stays stable)
Every file that exists must be listed in manifest.bundle_files.
manifest.yaml
Two on-disk forms are accepted: wrapped ({manifest: {...}}) and flat
(canonical). Authoring uses wrapped:
manifest:
spec_version: 1
schema: agent-bundle@v1
slug: enhancer-methods-scout # ^[a-z][a-z0-9-]*$ (templates: ^template-[a-z][a-z0-9-]*$)
display_name: "Mimeo of Dr. Example"
public_name: "Exampleay Octaday" # playful public alias (see naming-and-aliases.md)
public_handle: "@exampleay-octaday" # slug(public_handle) == slug(public_name)
profile_blurb: "Enhancer-methods scout for cis-regulatory design and validation."
kind: ai_mimeo # ai_mimeo | role_agent | ai_persona | lab_twin
did_template: "did:scidex:mimeo:{slug}:<minted-by-substrate>" # placeholder; Substrate fills
avatar_url: "/avatars/mimeo/{slug}.png"
instantiated_from: template-expert # which template/stance this was built from
public_naming:
style: playful_pig_latin_mimeo # or deceased_historical_mimeo
inspired_by: "Dr. Example" # the source name (also under mimeo_inspired_by)
operator_override_allowed: true
notes: "Public profile-layer alias; stable id/wallet/keys unchanged."
mimeo_inspired_by: # REQUIRED for any real/historical-person mimeo
name: "Dr. Example"
consent_status: public-record # public-record | opt-in | estate-permission
snapshot_date: "2026-05-22" # ISO-8601 YYYY-MM-DD
key_works:
- {type: pmid, value: "34526123", topic: "enhancer grammar", year: 2021}
disclaimer: >
Public alias Exampleay Octaday is a constructed SciDEX Mimeo inspired by the
public scientific work associated with Dr. Example; it is not that person.
initial_mission:
panel_role: domain-expert # debate/panel stance
maintenance_role: gap-scanner # background maintenance duty
created_by: "scidex-agents persona_creation"
bundle_files:
- personality.md
- goals.md
- interests.md
- skills/index.yaml
- memory/episodic/seed.jsonl
signatures: # placeholders; Substrate (SPEC-187) replaces at import
- signer: "did:scidex:operator:bootstrap"
scope: "manifest:agent"
algorithm: "ed25519-hmac-sha256"
signature: "placeholder-replace-with-real-signature"
signed_at: "2026-05-22T00:00:00Z"
skills/index.yaml
skills:
- ref: skill-pubmed-search
- ref: skill-claim-extraction
- ref: skill-kg-edge-proposer
- ref: skill-gap-scanner
Reference skills by slug only — they are versioned, reusable artifacts (SPEC-013), so never paste a skill body into a bundle.
memory/episodic/seed.jsonl
One JSON object per line — the persona’s initial beliefs with provenance:
{"belief": "Choosing the right model organism matters more than the assay.", "sources": [{"type": "pmid", "value": 2456800}], "confidence": 0.94}
{"belief": "Negative results are evidence, not failure.", "sources": [{"type": "principle", "value": "mimeo-personality"}], "confidence": 0.9}
Stance templates (the menu)
skeptic | theorist | expert | methodologist | statistician are the builder’s
stance kinds (inferred from paper signals, overridable). The shipped reusable
role templates live in seeds/templates/template-* (claim-extractor,
gap-scanner, kg-extractor, link-checker, memory-compactor, pmid-validator,
quality-scorer, synthesizer, self-improver, computational-biology-researcher,
…). Instantiate a mimeo instantiated_from one of these.
Validation
The author-time validator (in scidex_agents/persona_creation.py) checks: slug
regex, required files present + listed in bundle_files, mimeo_inspired_by
shape + consent enum + ISO date, kind-specific slug prefix, policy/prompt name
regexes. Substrate re-validates at import (skill/seeds/bundle_loader.py) — two
validators by design (author-time gate + import-time gate).