Dialogical Chatbot
Frontier Psychology research prototype

1) Trajectory-first

Trajectory-first means prioritising temporal attunement - how signals and meaning shift over time - rather than pushing endpoints. Trauma recovery is not linear; oscillation is expected.

Signals are used to guide how the system responds (pace, stance, grounding, escalation) - not to measure or diagnose the individual.

Signals, trajectory, and presence

A single message can look better or worse without meaning recovery or deterioration. What matters is context: patterns of activation, recurring themes, and shifts in meaning. Trajectory provides temporal context so the chatbot can remain a safe, responsive presence.

Signals (moment-level)

Language cues related to stress, arousal, moral strain, withdrawal, or overload.

Trajectory (over time)

Temporal patterns: oscillation, persistence, repetition, stabilisation, or sudden shifts.

Presence (system behaviour)

Adjust pace and stance, propose grounding, invite Council, or route to human help.

Example: oscillation is expected

User language
  • "I was OK yesterday, today it feels heavy again."
  • "I thought I was past this, now I'm back there."

This is not failure. Fluctuation is a normal feature of trauma recovery.

System response (presence-first)
  • Slow pace, reduce intensity, offer grounding.
  • Reflect normalisation: "swings can happen without meaning you're going backwards."
  • Invite choice: continue, pause, or shift topic.

Sequence-aware monitoring (conceptual)

Sequence-aware models can support temporal attunement by noticing how meaning shifts across turns. The purpose is not classification of the user, but calibration of stance and safety behaviour. In production, any model outputs would be constrained by transparency, user control, and human oversight.

Pseudo-flow (system behaviour)
signals = infer_signals_from_language(turns)
context = infer_temporal_pattern(turns, signals)

if context.high_arousal:
  stance = "grounding"
  pace = "slow"
elif context.moral_strain_persistent:
  stance = "values_reflection"
  invite = "Council: Spirit Guide"
else:
  stance = "steady_presence"

explain_choice_to_user(stance, pace)
offer_user_controls(memory_edit=True, pace_controls=True, opt_out=True)