How dockndevai/otto-assist works
Orrin is a macOS voice-and-dashboard interface around the user’s existing Claude Code setup. The main path is user input (wake word, Talk, or dashboard) → the always-on orchestrator → Claude → spoken response and live dashboard updates. Separate branches provide persistent memory, project/chat switching, timers, background research and opt-in autonomous work, MCP access, and a token-secured mobile remote. Relationships are grounded in the excerpts, SOURCE INDEX references, or README; some capabilities are documented but their detailed implementations were not sampled.
Main entry points: orchestrator.py Turn orchestrator · app.py Dashboard and API · menubar.py Menu bar app · native_ears.py Native microphone
Components 22
App and control
- Menu bar app
otto/menubar.py - Settings
otto/config.py - Readiness checks
otto/preflight.py - Turn orchestrator
otto/orchestrator.py
Voice interaction
- Native microphone
otto/voice/native_ears.py - Speech recognition
otto/voice/stt.py - Voice enrollment
otto/voice/speaker.py - Speech output
otto/voice/tts.py
Claude and context
- Claude agent
otto/brain/agent.py - Persistent memory
otto/memory.py - Local actions
otto/local_actions.py - Project discovery
otto/projects.py - Chat sessions
otto/sessions.py
Background services
- Timers and reminders
otto/scheduler.py - Research and teammate
otto/steward.py - Conversation store
otto/store.py
Remote and dashboard
- Event bus
otto/server/events.py - Dashboard and API
otto/server/app.py - Dashboard UI
otto/server/web/app.js - MCP interface
otto/mcpserver.py - Mobile remote
mobile
Other components
- User
Connections 26
- User → Menu bar app: starts and controls
- Menu bar app → Turn orchestrator: starts
otto/menubar.py - Menu bar app → Dashboard and API: serves dashboard
otto/menubar.py - Menu bar app → Settings: loads settings
otto/menubar.py - Menu bar app → Readiness checks: runs readiness checks
otto/menubar.py - Turn orchestrator → Native microphone: starts microphone
otto/orchestrator.py - Native microphone → Speech recognition: transcribes audio
otto/voice/native_ears.py - Turn orchestrator → Claude agent: runs turns
otto/orchestrator.py - Claude agent → Persistent memory: reads and writes context
otto/brain/agent.py - Turn orchestrator → Speech output: speaks replies
otto/orchestrator.py - Turn orchestrator → Voice enrollment: checks enrolled voices
otto/orchestrator.py - Turn orchestrator → Local actions: dispatches actions
otto/local_actions.py - Turn orchestrator → Event bus: publishes turn events
otto/orchestrator.py - Dashboard and API → Turn orchestrator: routes user requests
otto/server/app.py - Dashboard and API → Event bus: streams events
otto/server/app.py - Dashboard UI → Dashboard and API: uses dashboard API
- Dashboard and API → Project discovery: switches projects
otto/server/app.py - Dashboard and API → Chat sessions: supports chat switching
otto/server/app.py - Turn orchestrator → Project discovery: manages active project
otto/orchestrator.py - Turn orchestrator → Chat sessions: switches chats
otto/orchestrator.py - Turn orchestrator → Timers and reminders: runs scheduled reminders
otto/orchestrator.py - Turn orchestrator → Research and teammate: coordinates background work
otto/orchestrator.py - Turn orchestrator → Conversation store: persists conversation data
otto/orchestrator.py - Dashboard and API → MCP interface: mounts MCP endpoint
otto/server/app.py - User → Mobile remote: checks in remotely
- Mobile remote → Dashboard and API: connects over secure link