Projects / IRIS

Tools

IRIS

A laptop-native AI assistant that talks, remembers, and acts on macOS. LangGraph runs the agent. Ollama, or Anthropic and OpenAI, powers replies. SQLite stores facts and searchable conversation turns. Voice is optional: wake word, Whisper speech-to-text, and text-to-speech through macOS say, OpenAI, or ElevenLabs. Tools let IRIS open apps, search files, manage Reminders, and read system info, with folder allowlists and Automation permissions.

PythonLangGraphFastAPIOllamaWhisper

01 Walkthrough

One short demo and two screens from the product.

Screenshot 01
Screenshot 02

02 Stack layers

Interfaces

CLI (Rich)FastAPI HTTPVoice session

Agent core

LangGraphLangChain toolsLLM providers

Memory & voice

SQLite facts/turnsWhisper STTTTS engines

03 Architecture

REQUESTPOST /chat { message, thread_id }tracing
messagerecallcompletetool callSTT/TTSstreamCLI / VoiceRich · micCLIENTFastAPI:8420EDGELangGraphAgent loopSVCMemoryFacts · turnsDATAMac ToolsApps · files · remindersSVCLLMOllama · cloudEXTSQLiteiris.db · checkpointsDATAVoice I/OWhisper · TTSEXT

CLI, HTTP, or voice enters the LangGraph agent. Memory loads facts and relevant turns from SQLite. The LLM may call macOS tools, then streams a reply. The voice path adds Whisper speech-to-text and text-to-speech on the way out.

  • Local Ollama (or Anthropic/OpenAI) with LangGraph agent loop
  • SQLite facts + turn archive with optional embeddings
  • macOS tools + optional wake word, Whisper, and multi-engine TTS

04 Engineering challenges

01

Local-first privacy

The default stack is Ollama on the device, so no cloud is required. Cloud providers are opt-in through config and env overrides.

02

Durable, forgettable memory

Facts inject into every prompt; turns stay searchable. /forget and purge APIs remove facts and related archive text when you mean it.

03

Safe Mac actions

Tools are gated by settings and folder allowlists. Spotlight and AppleScript need explicit macOS Automation access.

04

Voice without bloating chat

Voice deps stay optional. Whisper, wake word, and TTS engines plug in without weighing down the core REPL and API.

05 Trade-offs & decisions

Ollama defaultvsCloud-only LLM

Offline and private by default; Anthropic/OpenAI remain one config switch away.

SQLite + FTS5vsHosted vector DB

Zero ops on a laptop; optional nomic-embed-text upgrades recall without a network service.

LangGraphvsAd-hoc prompt loop

Checkpoints, tool routing, and streaming stay structured, which matters once voice and tools are both in play.