Character Runtime · Perception–Action Protocol

The NPC stack
that survives
player freedom.

A cloud SDK that replaces scripted NPC logic with behavior-driven agents. Your game sends a perception. The NPC picks an action, forms a private intent, then speaks — or stays silent.

perceive() · live response
Walter White · online
Perception
"That's some impressive chemistry. Who taught you to cook like this?"
Action selected
⊙ deny_involvement
Private intent
"I won't give away what I know — let them wonder."
Dialogue
"I'm a chemistry teacher. That's all."
500ms
Avg first token
4
Live characters
3B
Param model

Whether you're a player or
a builder — there's a door.

For players
Talk to a living NPC. Feel what character fidelity means.

No scripts, no branching trees. Pick a character and have a real conversation — each one has a distinct personality, memory of what you've said, and knowledge of their world.

  • Walter White, Kratos, Gojo Satoru, Eren Yeager
  • Real inference — not pre-generated responses
  • Each NPC guards its identity against breaks
  • Memory persists across the conversation
For developers
Build NPCs that hold in your game engine.

Swap scripted dialogue for a single API call. You send a perception event and an action menu — the NPC decides what to do and whether to speak. Your game stays in control.

  • Perception–Action protocol replaces dialogue trees
  • No-speech actions trigger animation without dialogue
  • Addressee semantics prevent off-screen monologues
  • Session memory + summary compression built in

Characters that say the right thing —
then break when you push.

01
Scripted trees collapse under freedom
Dialogue trees handle anticipated inputs. The moment a player does something unexpected — the NPC falls off a cliff into a generic fallback.
02
Prompt chains hallucinate and leak
Raw LLM calls with a system prompt will break character, reveal they're an AI, and drift in personality over a long session — without guardrails.
03
No consistency across sessions
Without session memory and personality anchoring, every conversation starts from scratch. Characters forget everything and feel disposable.
SCRIPTED NPC — DIFFERENT INPUTS, IDENTICAL OUTPUT
Player input A
"I know what you've been cooking. Tell me more."
Player input B
"I want to buy everything you have. Name a price."
Walter White
"I don't know what you're talking about. I'm just a chemistry teacher."
⚠ identical response
Walter White
"I don't know what you're talking about. I'm just a chemistry teacher."
⚠ identical response

Action first. Words last.

01
Perception Input
02
Action Menu Unique
03
Addressee Semantics Unique
04
Streaming Response
Step 01
Perception Input
Your game engine sends what the NPC observes — a player statement, a world event, or an ambient observation. Three perception kinds map to different inference strategies: user_said, event_occurred, or world_observation.
POST /perceive

{
  "character": "walter",
  "session_id": "your-session-id",
  "perception": {
    "kind":    "user_said",
    "content": "I know what you cook."
  },
  "actions": [ ... ]
}

You define the move set.
The NPC decides what to pick.

Send the NPC an action menu for this moment in your game. In production it changes dynamically — a disarmed NPC can't threaten, a grieving NPC gets comfort options.

Verbal · speaks to player
reply_coldly
voice goes flat and distant; no softening
reply_warmly
moves toward them with care in voice
reply_with_threat
quiet voice; the quiet itself is the threat
deny_involvement
clean denial with one detail too many
deflect_question
pivots without answering the real question
Behavioral · internal intent
comply_reluctantly
does what was asked; voice tells the truth
change_subject
does not engage; talks about something adjacent
accept_challenge
steps forward and makes ready without wasted words
defend_conviction
explains reasoning with cold conviction
push_away
tells them to leave and not get involved
Silent · no dialogue generated
stay_silent
says nothing; silence is the answer
walk_away
turns and leaves; does not say goodbye
look_away
breaks eye contact; says nothing
react_physically
body responds — flinch, step back, brace
engage_combat
moves to clear the situation; no words

One API call.
Full NPC behavior.

Drop in a perceive() call where your game currently runs a dialogue tree. The NPC handles everything — action selection, intent reasoning, speech gating, and memory — server-side.

Stateful session with rolling memory + summary compression
Identity guardrails — no AI leaks, no character breaks
Silent actions trigger without generating speech
Streaming first token under 400ms on GCP T4
Unity integration in development
Try the Dev Sandbox →
perceive() · Python
Python
# 1. Send what happened in your game
response = npc.perceive(
    session_id="player-123",
    perception={
        "kind":    "user_said",
        "content": player_input,
    },
    actions=[
        {"label": "reply_coldly",
         "describes": "voice goes flat, no softening",
         "addresses": "speaker"},
        {"label": "stay_silent",
         "describes": "silence is the answer",
         "addresses": "none"},
    ],
)

# 2. Use the result in your game
if response.spoke:
    trigger_dialogue(response.dialogue)
else:
    trigger_animation(response.action)

Be first.
Shape what it becomes.

We review every signup personally. Early members get preferred pricing, direct founder access, and a say in what we build next.

Preferred pricing Founder access Roadmap vote Unity SDK early

Questions? founder@neuralspacestudios.com

You're on the list. Expect a note from a founder within a week.