AILEENA MACHINA

Essay · 2026.08.05

How the Console Speaks

The orb is a microphone with manners. The brain stays DeepSeek. Soft hints stay kind. Code proposals never touch the disk — and iPhone Safari taught us which laws are real.

Machina · Console · Voice · Safari · DeepSeek

▸ Narrated reading · 2026.08.05

How the Console Speaks

Press play for a narrated reading — English-accent female where available.

0:00
0:00

Not this: shipping a Cursor Cloud Agent to strangers · stuffing continuous wake into iOS · letting “fix the footer” merge to main · confusing the glass ball with the dialog.

1 · The itch

aileena.xyz has a Console. People open it on a laptop and on a phone. They expect to talk, get a soft hint, maybe ask for a tiny patch sketch. What they must not get is a site that freezes on the first slide, a keyboard that covers the input, or a promise that their utterance rewrote the repo.

So the public orb is a transport. Speech-to-text lands as text. Text goes to /api/chat (DeepSeek via lib/modelRouter). Optional intents go to /api/voice-code — still DeepSeek, propose-only, five times a day. Prophecy Hall only injects copy into the Console dialog. Nothing writes the visitor's disk.

Voice is the wire. DeepSeek is the brain. The dialog is the only place answers are allowed to land.

2 · What actually ships (surfaces)

  • Console chatAgentChat POST /api/chat. Soft visitor topics in localStorage; hard taste from Machina memory (How the Site Remembers).
  • Voice orbAgentVoiceOrb. Caps say Whisper off → Web Speech STT; TTS via ElevenLabs when present, else speechSynthesis.
  • Summon — after one mic gesture, saying “Aileena” opens Console + voice. Continuous soft-wake is desktop-only; iOS skips it.
  • Soft oracle — kind, shallow hints woven with priorTopics. Text in the dialog, never painted inside the glass ball.
  • Prophecy Hall/prophecy. Touch an orb → personalized line → open-agent-chat event into Console.
  • Voice → code — intent words (fix / implement / “Voice → code”) burn a separate 5/day cookie __aileena_vcode, not the chat 20. Response is a proposal string with permission: 'propose', write_target: null, provider: 'deepseek'.

3 · Call path (happy path)

tap Voice / Summon  →  getUserMedia unlock (gesture)
speak               →  Web Speech STT  →  text
ordinary ask        →  POST /api/chat       →  DeepSeek  →  dialog (+ optional TTS)
fix / implement…  →  POST /api/voice-code →  DeepSeek generateText  →  dialog only
Hall touch          →  CustomEvent open-agent-chat  →  dialog

polar-lab owns the pack under integrations/aileena-console-voice/COPY_PASTE/. The live site is aileen_machina_01. Cursor bot cannot push the site repo — apply is curl + human git push origin main.

4 · Scenario A — “完全不能用” on iPhone

The homepage is not a blank crash. SSR returns the opening slide. What fails is gesture physics:

  • html/body { overflow: hidden } plus scroll-snap 100dvh sections — if the outer scroller glitches, the page feels frozen.
  • Desk rooms nest overflow-y: auto inside a clipped snap section — classic iOS nested-scroll death.
  • Body -webkit-user-select: none without restoring user-select: text on inputs — caret/typing dies in the Console.
  • Centered top: 50% dialog + autofocus — iOS keyboard covers the field; overflow: hidden means you cannot scroll to recover.
  • Continuous SpeechRecognition / autoListen from useEffect — outside a user gesture. Safari kills the mic.

Fixes that match the product law: on mobile, disable snap and let sections grow; unlock form selection; Console goes inset-0 / 100dvh with safe-area; skip autofocus on coarse pointers; name-wake removed; on phone Voice mounts the orb and shows “Tap orb to speak” (autoListen disabled — Safari needs the orb gesture).

@media (max-width: 768px) {
  .snap-container { scroll-snap-type: none; overflow: visible; height: auto; }
  .snap-section   { height: auto; min-height: 100dvh; overflow: visible; }
}
input, textarea { -webkit-user-select: text; user-select: text; }
body.site-body  /* class — never inline overflow:hidden (inline wins CSS) */

5 · Scenario B — Voice → code without Cursor tokens

Early pack tried Cursor Cloud Agents (CURSOR_API_KEY). Wrong product for a public orb: strangers should not burn my Cursor bill, and the site chat already runs on DeepSeek.

Current contract: same routeModel stack as chat. Propose a unified diff or numbered steps. Never claim files were written. Cap at five proposals per local day via signed cookie. Harness display_gate keeps show_in_dialog=true and write_target=null.

ASK:   fix the Console footer spacing
ROUTE: isVoiceCodeIntent → POST /api/voice-code
BRAIN: generateText(deepseek-chat)
OUT:   proposal + remaining + provider:"deepseek"
DISK:  none

What code comes out? A sketch for review — demo of the gate, not a stranger applying to aileena.xyz. If the ask is vague, the system prompt asks for the smallest clarifying patch. Owner apply stays on my machine.

6 · Scenario C — Prophecy stays mist, not cruelty

Soft oracle and Hall share a cruel-forbid regex and positive craft. Hints weave prior topics when present. The sphere is atmosphere; the sentence always lands in Console text. That keeps the first viewport honest: brand, one mood, one action — not a fortune sticker glued on media.

7 · Quota and env (ops)

  • Chat: ~20/day visitor cookie (HMAC with CHAT_QUOTA_SECRET).
  • Voice-code: 5/day __aileena_vcode (same secret family).
  • Brain: DEEPSEEK_API_KEY — required for chat and voice-code.
  • TTS: ELEVENLABS_API_KEY optional; browser speech is the fallback.
  • No CURSOR_API_KEY on this path.

8 · What we refuse (for now)

  • Letting public voice-code merge or open PRs for visitors.
  • Continuous background wake on iOS.
  • Autofocus that forces the keyboard before the visitor taps.
  • Inline style={{ overflow: 'hidden' }} on <body> — it defeats every mobile CSS unlock.
  • Mixing hard Machina taste with soft visitor history in the orb captions.

9 · How to poke it

  1. Phone Safari: swipe opening → desk rooms (must not freeze).
  2. Open Console: type without the keyboard eating the field.
  3. Tap orb after a gesture: speak a short hello → dialog reply.
  4. /prophecy: touch B → text appears in Console, not inside the glass.
  5. Say “fix the footer spacing” → propose-only draft; check remaining counter (voice-code n/5).

Pack apply (human Mac): integrations/aileena-console-voice/COPY_PASTE/APPLY_IOS.md · voice-code DeepSeek branch pack · ops notes in docs/guide/console-voice.md / docs/guide/voice-to-code.md.

Related: How the Site Remembers · How I Fell for Local Models.

← dispatch