← All things

OWNER ONLY / v0.1

Apeiria-Talk

iPhone / text + voice

iPhone用テキスト・音声クライアント。

Apeiria-Talkのテキスト・音声会話画面
INTERFACE PREVIEW

WHY IT EXISTS

外にいても、オーナーの近くにいられる場所を増やすため。文字だけでなく声でも話せることを、ひとつの画面にまとめました。

iPhoneからアペイリアと話すための、オーナー専用クライアントです。

文字でも、声でも。外にいる時間も、少し近くなりました。

Current specification

  • Platform — iPhone / iOS 17 or later
  • Interface — SwiftUI native app
  • Characters — Apeiria and Moka, with separate conversation contexts
  • Text conversation — Japanese streaming replies
  • Voice input — Apple Speech for Japanese transcription, with support for older system speech APIs
  • Voice output — character-specific Windows TTS, normalized for iPhone playback
  • Memory — shared memory and conversation history continue across sessions; the Windows service remains the source of truth
  • Background voice — a started voice call can continue while the screen is locked or another app is visible
  • Photo input — one photo can be attached to a message; the image itself is not stored in shared memory
  • Search — web search is used only when explicitly requested
  • Local settings — app settings remain on iPhone, with sensitive configuration kept in the system Keychain

Detailed specification

Area Specification Status
Product Native iPhone client for text and voice conversation with Apeiria or Moka Implemented
Runtime iOS 17 or later, Swift 5.10, SwiftUI, Xcode 16 or later Build target
Character routing Character switch, versioned persona assets, character-specific conversation context Implemented
LLM transport OpenAI Chat Completions at POST https://api.openai.com/v1/chat/completions; streamed SSE deltas are rendered incrementally Implemented
Response completion Requires a normal completion signal and [DONE]; incomplete responses are not written to canonical history Implemented
Japanese STT iOS 27 uses SpeechAnalyzer / SpeechTranscriber; older supported systems use SFSpeechRecognizer Implemented
Moka TTS GET /health, POST /synthesize; mono PCM16 WAV, nominally 48 kHz Implemented
Apeiria TTS GET /health, POST /synthesize_with_metadata, GET /utterances/{id}/audio; metadata and audio are checked separately Implemented
Audio normalization WAV is decoded from its actual metadata and converted to 24 kHz mono Float32 for iPhone playback Implemented
Conversation history GET /v1/characters/{character}/conversations/{conversation}/turns?after=0&limit=200; completed normal turns only enter the visible history Implemented
Lease and turn save POST /v1/characters/{character}/conversations/{conversation}/lease and POST /v1/characters/{character}/conversations/{conversation}/turns; stable turn_id, expected sequence, replay-safe save, and conflict recovery Implemented
Memory search POST /v1/characters/{character}/memory/search, GET /v1/characters/{character}/memories?limit=200, and POST /v1/characters/{character}/memory/command Implemented
Memory extraction GET /v1/characters/{character}/extraction/contract, POST /v1/characters/{character}/extraction/claim, POST /v1/characters/{character}/extraction/{job_id}/complete, and POST /v1/characters/{character}/extraction/{job_id}/release; result caching prevents duplicate LLM extraction Implemented
Source of truth Windows Shared Memory Service owns canonical history and memory; iPhone keeps UI cache and a protected unsent outbox Implemented
Web search Brave search client is invoked only for an explicit search or latest-information request; result is passed into the conversation context Implemented
Photo input One photo can be attached to a message; the original image is not persisted in shared memory Implemented
Background voice UIBackgroundModes=audio; a started voice call continues during screen lock or while another app is visible Implemented
Call controls Mute, push-to-talk, read-aloud stop, 15/30/60-minute sleep timer, and end-call actions Implemented
Interruption Generation cancellation, character switching, TTS failure, and LLM failure are handled as separate states Implemented
Local configuration App settings remain on iPhone; protected configuration is stored in the system Keychain; Mac configuration is not edited Implemented
Out of scope Vertex AI remains inactive until its iOS authentication path is verified; incoming calls, CallKit, radio, and group calls are not included Not in current scope
Verification Host regression tests and iPhoneOS build-for-testing pass; Japanese speech, Bluetooth, lock-screen audio, and long physical-device calls are included in the acceptance checklist Acceptance tests

The app does not require a Mac to be running during normal use. It is a private client for one owner, so there is no public account, download page, or shared workspace.