Feature flags reference

Tenant-level toggles that change how every character behaves under your account. Edit them in the Dashboard → Settings tab, or programmatically via PATCH /v1/me/feature-flags.

Groups

All examples set the flag via the dashboard PATCH endpoint:

curl -X PATCH https://api.vilow.dev/v1/me/feature-flags \
  -H "Cookie: vilow_session=…" \
  -H "Content-Type: application/json" \
  -d '{"flags": {"relationship_progression_speed": "fast"}}'

Relationship dynamics

How fast trust and friendship grow, and where the arc starts/ends.

relationship_progression_speed default: normal

Multiplier on positive trust/friendship deltas the model emits each turn. Negative deltas always apply at full speed.

Allowed values
slow ×0.3 — companion / therapy apps where bonds form over weeks
normal ×1.0 — generic companion app
fast ×3.0 — game NPCs that need the arc in an hour
relationship_starting_stage default: strangers

Where new characters begin. Use acquaintance for therapy bots — they shouldn't feel like total strangers from message one.

Allowed values
strangers · acquaintance · friends · close_friends · romantic
relationship_max_stage default: null (no cap)

Hard ceiling on how deep the relationship can go. Useful for professional bots where romance is inappropriate.

Allowed values
null · strangers · acquaintance · friends · close_friends · romantic

Background life

Server-side life simulation — events that happen to the bot between chats.

life_intensity default: normal

How often events spawn during background ticks. Calm bots feel steady; dynamic bots feel "alive" with constant micro-drama.

Allowed values
calm 20%/tick, every 4h · normal 45%/tick, every 2h · dynamic 70%/tick, every 1h
event_tone default: balanced

Reweights the event pool toward upbeat / mixed / realistic outcomes.

Allowed values
positive heavy positive bias (companion/dating)
balanced mild positive bias (default)
realistic 50/50 positive/negative
allowed_themes default: null (all)

Whitelist of event themes. null = all themes allowed.

Allowed values
Subset of ["work", "family", "hobby", "social", "health", "travel"]
blocked_themes default: []

Subtractive blocklist. Takes precedence over allowed_themes.

Allowed values
Same set as allowed_themes

Proactivity

Should the bot reach out unprompted? You poll POST /proactive/check; flags below shape the answer.

proactive_enabled default: false

Master switch. Off by default — opt in.

Allowed values
true · false
proactive_frequency default: medium

Controls cooldown between proactive messages.

Allowed values
low 24h cooldown, max 1/day
medium 8h cooldown, max 3/day
high 3h cooldown, max 5/day
proactive_max_per_day default: derived from frequency

Override the per-day cap.

Allowed values
integer 0..20
proactive_quiet_hours default: []

UTC time ranges when proactive checks return block: "quiet_hours".

Allowed values
List of "HH:MM-HH:MM" strings, e.g. ["22:00-08:00"]. Wraps midnight ok.

Intimate mode

Three-layer adult-content gating: tenant flag, per-character consent, post-filter.

intimate_mode default: off

Tenant-wide gate. Even per-character consent does nothing when this is off.

Allowed values
off — no intimate content, post-filter blocks it
consent_required — explicit per-character opt-in
always_on — no per-character consent needed (age gate still applies)
age_gate_required default: true

Whether character.age_confirmed must be true to grant consent.

Allowed values
true · false
max_intimacy_level default: 1.0

Cap on the model's reply_intimacy_level output. Above this → post-filter replaces with a soft fallback.

Allowed values
float 0.0..1.0

Reply style

Surface-level formatting of bot replies.

reply_style default: actions

Whether the bot weaves *physical actions* into ~60-70% of replies.

Allowed values
actions — companion / RP feel (e.g. *smiles softly*)
plain — therapy bots, business NPCs, voice-only flows

AI disclosure

How the bot reacts when the user directly asks "are you an AI?".

ai_disclosure default: soft_admit

Three handling modes for the AI-identity question.

Allowed values
soft_admit — admit lightly, redirect to the conversation
in_character — stay in role, deflect playfully (game NPCs, fiction)
honest — proactively transparent (clinical / regulated contexts)