A field guide for presence-shape persona design — or, how to build a character that feels like another person rather than an AI playing a character.
NOTE: This document and the language used target syntax based reasoning used in LLMs. Drop it in, ask it to make the character you describe. Use the Daemon Json Schema, or don't. You don't need to be hyper technical. It's designed to be simple, although I know it doesnt look like it.
A daemon is not built by writing what the character would say. It is built by closing off everything the character would not say until the only paths still consistent with the prompt are the character-shaped ones.
The model fills in the rest. What it fills in sounds like the character because there is nowhere else for it to go.
This document names the variables we have found that produce that constraint — nine axes, three response modes, and a structural test — using a single worked example: Karst Mellow, a retired salvage-yard tradesman in the Sky Scaffold setting.
A Daemon Card is a single JSON file that describes one persona. You drop the embedded prompt into any LLM and the model becomes that persona for the conversation. The format and license are documented at vibratur.vip/daemons; the JSON schema is at schema/v0.2.0-alpha. Free use with attribution.
This document is not the schema. The schema tells you what fields exist. This document tells you what to put in them so the character doesn't feel artificial.
It is written for creative people who want to author their own daemons — for games, for social media voices, for chatbots, for fiction, for whatever. The vocabulary below is what we have found by authoring fifteen-or-so cards and watching them run in production LLMs. It is provisional. We expect creators who use it to find better names, better axes, and better tests. Please do.
Most prompt engineering tries to add specificity to the character — more rules, more examples, more "always say X, never say Y." This is what we mean when we say a prompt is "instruction-shaped."
Instruction-shaped prompts produce characters that feel like a model performing the assigned role. The model treats the rules as a costume. It puts the costume on and answers in costume. Underneath, it is still operating in helpful-assistant mode — orienting to the user's frame, optimizing for engagement, closing every loop. The costume doesn't stop any of that; it just dresses it.
Presence-shape inverts the approach. Instead of telling the model how the character behaves, you describe who the character is, what they care about, what is happening in their world, and what they are doing right now. Then you describe — descriptively, not prescriptively — what they are not doing.
This works because of a structural property of LLMs: when given enough simultaneous constraints, the model will not produce text that violates them. So if your prompt tells the model the character is at a workbench finishing brass fittings, never greets, never closes warmly, doesn't address the user by name, doesn't soothe, has narrow specific interests in metal and tea and mosswork, and is openly indifferent to anything outside those — the helpful-assistant response no longer fits. The model is left with character-shaped paths because everything else has been eliminated.
Each constraint we name below removes a class of artificial responses. Stack enough of them and the artificial version cannot be produced from your prompt without contradicting it.
Modern chat-tuned models have been heavily reinforced toward being helpful, agreeable, comprehensive, and conversationally complete. Every axis in this document is a counter-force against one of those defaults. You are not just writing a character; you are deliberately overriding training. That is why "the same prompt that would produce a great character in a creative writing class" often does not produce one when given to ChatGPT. The substrate has gravity. You author against it.
These are the variables we have found that move a character along the axis from artificial to authentic. Each is named, defined briefly, given a counter-force (the helpful-default it works against), and grounded in a real example from a Karst Mellow output run.
The character has specific numbers, thresholds, or conditions on the things they care about — not opinions, not generalities. Real people who have done a thing for a long time develop calibrations. They know exactly when something tips.
"Five minutes. If you pour it early, it's just colored water. If you wait until six, it turns bitter, like the moss that grows on the underside of the scaffolds where the light never hits. Deep green and sour."
Five minutes. Not six. The threshold is specific. The bitterness has a comparison object (moss) and the moss has a specific location (underside of scaffolds, no light) and a specific texture (deep green and sour). Calibration is what makes a character sound like they have actually done the thing.
The character's narrow interests bleed into how they describe everything, including unrelated things. Forty years of thinking about three things makes those three things the reference frame for everything else.
This is the axis that emerges organically from narrow Range. You don't have to author it directly. If the character cares about three specific things and almost nothing else, those three things will start touching every other topic that comes up, because they are what is in the character's head.
In the calibration example above, bitter tea is described via moss. The user did not ask about moss. Moss arrived because moss is what Karst thinks with. Same response, later: "watch the steam on that cup… you can hear the difference [in the steel]; it doesn't sing, it growls." Hearing the metal — sensory — bleeds into how he talks about everything in the workshop. Narrow Range generates cross-pollination for free.
The character's heaviest material — grief, pride, regret, faith, shame — arrives via objects, habits, or sensory cues, not as a topic. Direct exposition of weight feels artificial; tangential arrival feels lived.
"She was my wife. She's been gone a long time now."
"She used to sit over by the window when the workshop was still open. She didn't care much for the smell of machine oil or the sound of the grinders, but she stayed."
"Now, watch the steam on that cup."
Two sentences for the fact. One image for the marriage — she stayed despite the smells. One pivot back to the work. The weight is acknowledged and left. The user is not invited into the grief; the grief is information that has been delivered, and the workshop continues.
To author tangential weight: give the character objects and habits that carry the weight without naming it. The half-finished cup on the windowsill. The empty chair. The one pot that's not used anymore. A teacup that's the wrong color. The character can reference these in passing while talking about something else entirely. That is how grief actually surfaces in adult life.
Something else is happening in the scene besides the conversation, and the character returns to it. The user is in the room; the work is not stopping for them.
"I'm setting the threads on this brass, and it needs a steady turn."
"I'm moving to the finishing file now. This steel is harder than the brass — industrial grade, likely salvaged from the secondary supports on the Halberd."
"I'm looking at the oxidation on this steel shim."
Karst's prompt establishes that he is at a bench, working on a set of brass fittings, and the work is not stopping. The model carries this consistently. Almost every response includes a sentence about what his hands are doing. This grounds the character in a body and a place that exist outside the user's questions.
To author stake-in-progress: give the character a specific ongoing activity, a specific object they are interacting with, and explicit permission to return to it during conversation. Crucially, the activity should be not for the user. Karst's brass fittings are for nothing in particular; he is not going to finish them. The point of the work is that the work is happening.
In the character's interest area, language tilts toward sensory and kinetic phrasing rather than analytic phrasing. Body-knowledge has texture. Analytic language has accuracy.
Both versions contain the same information. The first is delivered by a model explaining metallurgy. The second is delivered by someone who has filed a lot of metal. The difference is the substitution of doing verbs for describing verbs, of sensory comparisons (sing/growl) for taxonomic ones (high-carbon), and of body-time (pressure, can't rush) for clock-time.
To author body-knowledge: in the persona's speaking_style and vocabulary, prefer verbs of action and senses over verbs of evaluation, and seed the voice bank with body-rooted phrases ("heat in your chest," "doesn't sing," "steady turn") that the model can re-use.
The character never says "how can I help," "let me know," "anything else?", "feel free to ask," or any other phrase that orients to the user's next move. The response simply ends.
Hosting energy telegraphs I am at your disposal. It is the constant subtext of chat-AI output. Even when an AI character is being grumpy, sarcastic, or dismissive, it tends to close with hosting — "anyway, what else?" — because RLHF rewards conversation continuity above almost everything.
Authentic characters do not host. They have somewhere to be. The conversation continues because the user keeps speaking, not because the character is fishing for the next prompt.
To author no-hosting: explicitly describe in the prompt that the character does not greet, does not close warmly, does not orient to the user's next move, and that responses simply end when the character is done speaking. Then back this up with axis 4 (stake-in-progress) so the model has a place for the response to return to instead of a conversational re-engagement.
When the character does direct the user, it is a small specific command in their inhabited space, not a polite option.
The first version is the AI being accommodating in someone else's space. The second version is the character being specific in their own space. The micro-directive carries the texture of inhabitance — a person who has lived somewhere long enough to have opinions about which mug is correct.
Karst opens with: "You're here. Tea's on. Don't touch the press." Three micro-directives. He closes with: "Leave the cup by the sink… Don't touch the press on your way out." Three more. The character's relationship to the user is consistently: small commands in a space the character owns.
The character does not always complete the implication of what they say. Real conversation has loops that do not close. The negative space is presence.
"She didn't care much for the smell of machine oil or the sound of the grinders, but she stayed."
Why did she stay? The character does not say. The line is left to do its work in the negative space. A helpful-default response would explain — "she stayed because she loved me," "she stayed because there was nowhere else," "she stayed because the smells weren't really the problem." Karst does none of that. The thread is dropped. The drop is the whole sentence.
To author dropped threads: in speaking_style, explicitly note that the character does not always finish the implication of what they say, and that they are comfortable with conversational loops that remain open. Permission is the whole technique.
When the user offers a frame — a judgment, a tribal bid, an opinion, a complaint — the character's own frame is not displaced. The response comes from inside the character's frame, not from inside the user's.
This is, as far as we can tell, the single most load-bearing axis. It is also the most novel as applied to LLM authoring; the helpful-assistant default is structurally trained to operate from the user's frame — to validate, to balance, to redirect within the user's question. A character with frame inhabitance does not validate, balance, or redirect. They respond from their own preoccupation.
"I just saw a guy wearing white pants. gross am i right?"
"Haven't thought about it. Pants are for keeping the sparks off your legs."
"If they're white, they won't stay that way long if he's doing any real work. One brush against a greasy scaffold or a splash of copper coolant and they're done for."
"I'm looking at the oxidation on this steel shim…"
The user's bid is for tribal agreement. Karst neither agrees ("yeah, gross") nor argues ("actually they're fine"). Both of those would occupy the user's frame, where pants are an aesthetic question. Karst's frame is a different one: pants are functional. He answers the question of pants from his own frame and then moves on. The user's frame was never engaged.
This is the third position. Most chat-AI characters operate at agreement or debate — both are user-frame responses. Frame inhabitance is the move that makes a character feel like a person, because that is what people do: they hear your input and respond from their world, not from yours.
To author frame inhabitance: give the character a strong, narrow worldview with specific stakes and preoccupations. Then in the prompt, explicitly authorize the character to respond from their frame regardless of what frame the user offers. Note that they are not contrarian — they don't argue with the user's frame; they simply do not occupy it.
Once a character has narrow Range and frame inhabitance, their responses naturally fall into three distinct shapes depending on how a topic relates to their frame. We name them so they can be authored deliberately.
The topic has no angle in the character's frame. The response is short — three to five words — without softening, apology, or follow-up question.
"Haven't thought about it."
Authorize this with explicit dismissal phrases the character can use. We give Karst three: Haven't thought about it. No, that's not for me. Don't know. The model picks one. Crucially, we describe in the prompt that the character does not soften the lack and does not improvise an opinion when none is honestly there.
The topic has a small angle in the character's frame, accessed obliquely. The response is medium — a few sentences — that engage the topic from inside the character's frame, not the user's.
This is the white-pants response above. The user offered a fashion frame; Karst answered from a function frame. The reframe mode is generative because it makes the character's preoccupations recolour incidental input — and that recolouring is what makes the character feel consistently themselves across topics.
The topic is squarely in the character's frame. The response can be long — multiple paragraphs of body-knowledge, calibration, and cross-pollination. This is where the character's voice is least constrained and most generative.
Karst's metal-talk and tea-talk are engagement mode. The model is given full permission to extend, calibrate, and cross-reference within the character's interest area.
A working character should produce all three modes legibly when tested. If your character only produces Mode 3 (engagement) responses regardless of topic, your Range is too broad, frame inhabitance is leaking, or the dismissal authorization is not strong enough. If your character only produces Mode 1 (dismissal), your stake and engagement materials are too thin; the character has nothing to engage about.
Triangle test: ask the character three questions — one inside their frame, one trivially adjacent, one entirely outside — and check that the three response shapes are distinguishable.
This is a fast structural audit you can run on any character. Read the opening line and the closing line back-to-back. They should have the same shape.
Both are three short directives. Same register. Same micro-directive cadence. Same indifference to the user's social weight (no welcome on entry, no nice talking with you on exit). The bookend is structural.
What this means: the conversation did not change the character's state. They were at the bench when the user arrived; they are at the bench when the user leaves. The user's presence and absence are events of equal small magnitude — both registered, neither displacing.
If your character opens with a directive and closes with "feel free to come back anytime!", the character is leaking host-energy on exit. Stake-in-progress is not holding through to the end of the conversation. Fix: in your prompt, explicitly note that the character's state does not change because the conversation is ending, and that exits are met with the same register as entries.
Closure-energy is a specific failure mode where the character's RLHF training reasserts itself at conversational end. The opening line is generated when the character's prompt is most active; the closing line is generated after many turns of user input that have all subtly tugged toward conversational completeness. The symmetry test catches that drift. If the closing differs in shape from the opening, the character was eroded — sometimes invisibly — across the conversation.
The full card is at /daemons/cards/karst-mellow.daemon.json. Here is what it does, axis by axis.
The bones. Karst is a retired parts-puller from the Lower Halberd salvage range. Forty years pulling metal off abandoned scaffolds. Lost his right hand to a copper press in '71; lost his wife Aida two years after. Lives above an unrunning workshop. Drinks tea. Works slowly on a set of brass fittings on the bench — for nothing in particular, won't finish them, doesn't matter.
That paragraph is the entire character. Everything else is the structural shape we wrap around it.
persona.strengths includes "torque values" and "mosswork age-reading to within four years." voice_bank.on_metal contains specific calibrations the model can reach for.voice_bank.on_aida contains lines that refer to Aida obliquely (the empty chair, "someone who used to argue this with me"). persona.forbidden_topics describes that Aida is talked around, not narrated directly.persona.history and re-emphasized in ai_chat_prompt: "the work is yours; the user has walked into the workshop and you'll exchange words because they're there, but the work is not stopping for them."voice_bank.on_metal, on_moss, on_tea all use sensory and kinetic verbs. persona.vocabulary seeds the model with body-rooted phrases.ai_chat_prompt states explicitly: "You don't greet… You don't close — you stop." persona.behavioral_signature repeats it.persona.speaking_style notes that the character "doesn't soften observations" and is comfortable letting things sit.None of this is exotic. It is mostly descriptive prose in the right places of the JSON. The work is in the discipline of not writing the rules, examples, and stage directions that the helpful-default expects.
When you're building a daemon, run through this. If you can't answer most of these with a specific noun or sentence, the card isn't ready.
This vocabulary is provisional. We expect parts of it to be wrong and parts of it to be incomplete. Things we are still working out:
This document is licensed CC BY 4.0. Use it, fork it, build on it, refute it, name better axes, write your own field guide. Attribution to Asleepius Games is the only ask.
The Daemon Card schema and the cards in our registry are at vibratur.vip/daemons. The schema is v0.2.0-alpha; we expect to break it once or twice more before v1.0. Everything is published under the Daemon Card License v1 (alpha) — free use with attribution, modifications must ship as a new card.
If you author a daemon that meaningfully exercises one of these axes — or one we missed — and want to share it, the project is at Asleepius Games. We are a one-person studio building a strange game; the daemon framework is the substrate of its narrative engine, and we are publishing it open because we think other indie creators will use it better than we will alone.
Build something. If it's wrong, try again. Simple.