Ambient Oracle — Proactive Intelligence
Instead of answering questions, it tells you things you didn't know to ask.
The Problem
Your devices collect an enormous amount of data you never look at. Calendar patterns, message frequency, location habits, weather correlations. You're always reacting — never getting ahead of what your own data could tell you.
What if an agent could mine this data continuously and tell you things before they become problems?
The Config
ambient_oracle.toml is the most complex config in the gallery. It combines local LLM inference,
iMCP device data, knowledge lifecycle, and dual scheduling — all in one agent.
Agent: local LLM + device data + knowledge
[agent] db = "/tmp/ambient_oracle.db" # Persistent knowledge store provider = "llama_cpp" model = "unsloth/Qwen3-VL-8B-Instruct-GGUF:UD-Q6_K_XL" assume_mutating = false mutating_tools = [] tools = [ "create_task", "todowrite", "todoread", "question", "mdq", # Knowledge lifecycle — learn and remember "knowledge_ingest", "knowledge_query", "knowledge_consolidate", "knowledge_list_unconsolidated", "knowledge_stats", # All Apple data tools from iMCP "iMCP.*", ]
Most systems separate the "knowledge ingestion" pipeline from the "user interaction" agent. This config puts both on the same agent. The oracle reads your data, learns patterns, and briefs you — all in one loop.
GPU parameters with massive context
[agent.parameters] n_ctx = 160000 # 160K context — essential for knowledge-heavy agents max_tokens = 8192 top_p = 0.95 top_k = 20 temperature = 0.7 # Lower temp for factual pattern mining flash_attention = "enabled"
Middleware: higher limits for mining cycles
[[middleware]] type = "limits" max_steps = 60 # More steps than standup bot — mining is deeper max_turns = 25 [[middleware]] type = "context" warn_at_percent = 80 compact_at_percent = 90 fallback_max_tokens = 128000
iMCP: on-device data access
[[mcp]] name = "iMCP" transport = "stdio" command = "/Applications/iMCP.app/Contents/MacOS/imcp-server"
Dual-Schedule Design
The oracle uses two schedules that work together: one for gathering data and producing briefings, another for consolidating accumulated knowledge into higher-level patterns.
Schedule 1: Interval briefing (every 2 hours)
# Created via dashboard UI:
Trigger: Interval, 7200 seconds (2 hours)
Prompt: "Run ambient briefing cycle: gather iMCP signals,
ingest observations, query patterns, and produce
proactive briefing." Schedule 2: Event-driven consolidation
# Triggered automatically after 12 knowledge ingestions:
event_kinds: ["knowledge_ingested"]
threshold: 12
debounce_seconds: 60
Prompt: "Run ambient consolidation cycle: list unconsolidated
entries in scope global:ambient and consolidate
recurring patterns." Instead of running on a fixed timer, the consolidation schedule fires when enough new observations have been ingested. This is more efficient than interval-based consolidation — it runs when there's actually something new to synthesize.
What Happens Over Time
Key Features
- Interval + event-driven scheduling — two schedules working in tandem
- Knowledge consolidation — merges observations into higher-level patterns
- Cross-session learning — persists across restarts via SQLite knowledge store
- Device data mining — Calendar, Contacts, Messages, Maps, Weather via iMCP
- Local LLM inference — your behavioral data never leaves your machine
- Debounced event triggers — consolidation runs only when there's enough new data
Try It Yourself
# 1. Install iMCP and enable services brew install --cask mattt/tap/iMCP # 2. Run the agent cargo run --example qmtcode --features dashboard -- \ confs/ambient_oracle.toml --dashboard # 3. Create two schedules in the dashboard: # Schedule 1: Interval, 7200s, "Run ambient briefing cycle..." # Schedule 2: Event-driven, knowledge_ingested, threshold 12, # "Run ambient consolidation cycle..."