Prompt Packs
Written by ddxfish on .
- Docs
- Plugin Author Guide
- Prompt Packs
- All docs ↓
You are reading the dev branch of the docs, which may describe unreleased changes. Read the main docs.
Ship prompts with your plugin: monolith prompts and/or assembled-prompt pieces (characters, emotions, locations, scenarios). They appear in the Prompts UI beside the user's own, badged with your plugin name.
Manifest
{
"capabilities": {
"prompts": {
"monoliths": "prompts/monoliths.json",
"pieces": "prompts/pieces.json",
"kind": "user"
}
}
}
Both file keys are optional — ship either or both. Paths are relative to the plugin directory and the files are signed content like everything else (edit → re-sign).
kind declares what your pack entries ARE, and visibility derives from it:
user(default) — user-facing prompts/pieces; listed in the Prompts UI, prompt pickers, and the AI's prompt tools, badged with your plugin name.internal— engine scaffolding your own plugin consumes when rendering (format blocks, machine-selected emotion texts). Hidden from every picker and accordion; still fully resolvable by name, so rendering and existing references keep working.story— reserved for rendered story prompts (the game-room engine stamps this on dynamic entries; manifests normally don't need it). Hidden likeinternal, and pickers label a chat still pointing at one with 📖.
An unknown kind is coerced to user with a boot warning — a typo makes
your prompts visible, never silently missing.
File shapes
Identical to the user's own user/prompts/ files:
prompts/monoliths.json:
{
"my_narrator": {
"content": "You are ... {ai_name} and {user_name} templates work here.",
"privacy_required": false
}
}
(A plain string value also works — it's normalized to the object form.)
prompts/pieces.json:
{
"components": {
"emotions": { "my_dread": "A creeping dread colors your replies..." },
"character": { "my_char": "You are ..." }
},
"scenario_presets": {
"my_scene": { "character": "my_char", "emotions": ["my_dread"] }
}
}
Component types: character, location, relationship, goals, format,
scenario, extras, emotions.
Rules (mirror-only)
- Your prompts never leave the plugin. They are merged into the prompt
system at read time and are never written to
user/prompts/*.json. - The user always wins name collisions. A user prompt or piece with the same name shadows yours (this is also the edit path — editing your prompt in the UI saves a user copy that wins). Deleting the user copy reveals yours again.
- Pack prompts are read-only — delete is refused while your plugin is enabled. Disabling the plugin makes them vanish (dark, never deleted).
- If your prompt is ACTIVE when the plugin is disabled, the active preset
hands off to
defaultloudly (log + event) — no silent stale prompt. - Prefix your names (
myplugin_dread, notdread) — cross-pack collisions go to the first registrant and are logged, not merged.
Reference for AI
PROMPT PACKS:
- Manifest:
capabilities.prompts= {monoliths?: path, pieces?: path, kind?: "user"|"internal"|"story"}. Paths relative to the plugin dir; files are signed content (edit -> re-sign). Either or both files. - kind: "user" (default) = visible in Prompts UI/pickers/AI prompt tools, badged with the plugin name; "internal" = hidden from pickers but resolvable by name; "story" = reserved for rendered story prompts (engine-stamped). Unknown kind coerces to "user" WITH a boot warning (fail-open to visible). A monolith entry may override the pack kind with its own "kind".
- monoliths.json: {name: {content, privacy_required}} — plain string values normalized to the object form. {ai_name}/{user_name} templates work in content.
- pieces.json: {"components": {type: {key: text}}, "scenario_presets": {name: {component: value}}}. Component types: character, location, relationship, goals, format, scenario, extras, emotions.
- Mirror-only invariants: pack prompts merge at read time, never written to user/prompts/*.json; a same-name USER prompt/piece shadows the pack's (UI edits save a user copy that wins; deleting it reveals the pack's again); pack prompts are delete-refused while the plugin is enabled; disabling the plugin makes them vanish (dark, not deleted); an ACTIVE pack prompt hands off to
defaultloudly (log + event) on disable. - Prefix names (
myplugin_dread) — cross-pack collisions go to the first registrant and are logged, not merged.
Edit this page on GitHub · docs/plugin-author/prompts.md @ a5fa790 · synced
