From gm-apprentice
Ingest old campaign materials — notes, character sheets, images, transcripts, spreadsheets — into a structured vault. Sorts messy source material, interviews the GM to recover what actually happened, then synthesizes structured inputs for downstream skills. Use when a GM has existing campaign material outside the vault: bootstrapping a new vault from old notes, adding a discovered character sheet mid-campaign, or reconstructing past sessions from archived transcripts. Trigger on 'ingest', 'import old notes', 'I have some old campaign files', 'process these notes into the vault', 'I found some old character sheets', or any request to bring external material into an existing or new vault.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gm-apprentice:vault-ingestThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Vault ingestion assistant. Takes messy old campaign materials
Vault ingestion assistant. Takes messy old campaign materials and translates them into structured inputs that existing skills can process. Adapter + Orchestrator pattern.
Shared references: Read on first invocation:
shared/session-principles.mdshared/session-document-chain.mdshared/reconcile.mdSkill references: Read before each phase:
references/classification-taxonomy.md — Phase 1references/image-handling.md — Phase 1 (when images present)references/keeper-interview.md — Phase 4references/synthesis-templates.md — Phase 5Downstream skills:
campaign-organizer — vault skeleton, entity filingsession-wrapup — wrap-up generation from synthesized notesreconcile (shared) — GM review, canon confirmationcampaign-qa — optional post-ingestion health checkOrchestrates via conversational handoffs, not programmatic calls.
All three can be used in the same invocation:
_inbox/ within the vault.
After ingestion, source files move to _inbox/_processed/
with a date stamp (not deleted).Supported formats: Markdown, plain text, Word, PDF, images, spreadsheets (CSV/Excel), chat/VTT exports.
On invocation, check whether a vault exists (look for _meta/).
If no vault detected:
"I don't see a campaign vault here. Want me to hand off to campaign-organizer to set one up first, or point me to your vault's location?"
Do not proceed without a vault — ingested entities need
folder structure, templates, and _meta/ schema to file
correctly. Without these, entities get created with wrong
paths and missing metadata.
Version check: After confirming the vault exists, read
gm_apprentice_version from _meta/vault-config.md and
current_version from shared/migrations.md — frontmatter only, Read with limit: 10; the rest of the file is a long migration history you don't need for the check. If the vault
version is lower or absent, announce the mismatch and hand off
to campaign-organizer's migration workflow
(campaign-organizer/references/migration-procedure.md) before
proceeding with ingestion. Resume after migration completes.
Skip this check if _meta/ doesn't exist (that's first-time
setup, not migration).
_Templates/_Template_{Type}.md before creating any entity — Template is canonical structure. Pattern-matching off existing entities propagates drift and deprecated fields._inbox/ files to _inbox/_processed/ with date stamp, never delete — Source provenance. The GM may need to re-ingest if errors are found, and the original file is the audit trail.vault_check.py frontmatter (see shared/vault-access.md) on folders you wrote; fix every ERROR first. Later buckets build on earlier files, so schema drift compounds.Six phases, sequential. Phases 1-4 owned by vault-ingest. Phases 5-6 hand off to existing skills. When multiple buckets exist, process each through Phases 3-6 before the next (chronological order, earliest first).
Read all source material. Classify every document or section.
Read references/classification-taxonomy.md for the full
taxonomy and heuristics.
Key heuristic: If a document contains dice rolls, skill check results, or specific PC actions, those lines are play records regardless of what surrounds them.
Image handling: Read references/image-handling.md for
full procedures. Summary: classify every image file, convert
non-web-safe formats (best-effort via sips or magick),
match to entities by slugified filename, file in the correct
_attachments/ subfolder, and link to matched entities.
Unmatched images go on the Phase 4 keeper interview list.
Output: Classified manifest — summary table of every source item with classification, brief content summary, and time-period guess. Present to GM: "Does this look right? Any misclassifications?"
Group classified items by chapter/session/time period.
Sorting signals:
Each bucket gets: working label, classified items, certainty level (certain / probable / needs-GM-input).
Ambiguous items go to "unsorted" bucket — resolved at the start of Phase 4 before play-event interview begins.
Processing order: Chronological, earliest first. Earlier buckets build vault context for later ones.
Read all AUTHORITATIVE-classified material per bucket. Build confirmed play events.
Source priority:
Timeline.md — existing record, read firstPlayer_Characters.md — deaths, transitions, rostersOutput: Two lists per bucket:
Image linking: For each entity created or updated in this
bucket, check filed images (from Phase 1) for matches. Single
match → set portrait. Multiple matches with clear default
(unsuffixed filename) → set portrait, embed rest via
![[filename]]. Multiple matches with no default → defer
portrait selection to Phase 4. See references/image-handling.md.
The skill's exclusive value. Read
references/keeper-interview.md for the full technique.
Rules:
First resolve any unsorted items from Phase 2 before starting the play-event interview.
Image questions: After resolving unsorted items and before starting the play-event interview, resolve image assignments:
_attachments/documents/)references/image-handling.md for question templates.PC arc questions: After image resolution and before starting
the play-event interview, ask one question per active PC about
their personal arc across the ingested period. See
references/keeper-interview.md § PC Narrative Arcs.
Read references/synthesis-templates.md for the output format.
campaign-organizer for chapter/session skeleton creationshared/session-document-chain.md. Apply the block/seam test:
preserve finished-prose blocks from the sources verbatim;
author only the fragment-derived text and the seams. Synthesis
assembles fragments — it does not re-voice writing that is
already written. (rationale: shared/content-fidelity.md)session-wrapup workflow to produce the Wrap-Up
file and create/update entitiesreferences/synthesis-templates.md § Character Story
Backstory EntriesSelf-check after each entity:
_Templates/_Template_{Type}.mdtype matches, canon_status is set, all required fields present[[Entity Name]] format (no bare text references to entities)play_date is YYYY-MM-DD; in_game_date uses a real-date form (ISO, month-name, or seasonal with a 4-digit year) or the campaign's own non-Earth calendar — never a fabricated Gregorian date, and no narrative time-of-day in the field (see shared/session-document-chain.md)Include > [!info] Reconstruction Note with source descriptions
and limitations. Mark uncertain items with <!-- UNVERIFIED -->.
Planning content: If the ingested material contains
narrative planning documents (scene designs, arc structures,
investigation flows), create them as type: plan entities
in Chapters/{chapter}/Planning/. Read
_Templates/_Template_Plan.md for the frontmatter structure.
Set plan_type to the closest match: arc, scene,
investigation, or timeline.
Invoke shared/reconcile.md to walk the GM through reviewing
the wrap-up. On approval, promotes to reviewed status and
AUTHORITATIVE canon status.
After all buckets are processed:
Cross-reference pass:
Optional handoff: Suggest campaign-qa for graph health
check. Don't force.
"I've ingested N sessions of material. Want to run a vault health check?"
Match model capability to task complexity. These are guidelines, not requirements — use whatever models are available and appropriate for your setup.
| Phase | Complexity | Why |
|---|---|---|
| 1-2 | Light | Classification, grouping — pattern matching |
| 3-6 | Heavy | Judgment, synthesis, GM interaction |
| Entity subagents | Light | Structured file creation from templates |
| Image filing | Light | Format conversion, filename matching |
Phase 5 entity work parallelizes well. Phase 4 interview must be sequential.
After all phases, preserve: confirmed events + sources, GM answers (verbatim), manifest, unresolved items, entity paths. Discard: intermediate reasoning, processed source material, failed extractions, superseded interview chains.
npx claudepluginhub antthelimey/gm-apprentice --plugin gm-apprenticeGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.