Ambient Oracle — проактивний інтелект
Замість відповідати на питання, він говорить те, про що ви не знали, що треба спитати.
Проблема
Ваші пристрої збирають величезну кількість даних, на які ви ніколи не дивитеся. Патерни календаря, частота повідомлень, звички переміщення, кореляції з погодою. Ви постійно реагуєте — і ніколи не випереджаєте те, що ваші власні дані могли б вам підказати.
Що, якби агент міг безперервно видобувати ці дані й повідомляти вам про речі до того, як вони стануть проблемами?
Конфіг
ambient_oracle.toml — найскладніший конфіг у галереї. Він поєднує локальний LLM inference, дані пристрою через iMCP, життєвий цикл знань і подвійне планування — все в одному агенті.
Агент: локальна LLM + дані пристрою + знання
[agent] db = "/tmp/ambient_oracle.db" # Постійне сховище знань 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_ingest", "knowledge_query", "knowledge_consolidate", "knowledge_list_unconsolidated", "knowledge_stats", # Усі інструменти Apple-даних з iMCP "iMCP.*", ]
Більшість систем відокремлюють pipeline "ingestion знань" від агента для взаємодії з користувачем. У цьому конфізі обидві частини живуть в одному агенті. Oracle читає ваші дані, вивчає патерни й брифить вас — все в одному циклі.
GPU-параметри з великим контекстом
[agent.parameters] n_ctx = 160000 # 160K контексту — критично для knowledge-heavy агентів max_tokens = 8192 top_p = 0.95 top_k = 20 temperature = 0.7 # Нижча температура для фактичного пошуку патернів flash_attention = "enabled"
Middleware: вищі ліміти для циклів майнінгу
[[middleware]] type = "limits" max_steps = 60 # Більше кроків, ніж у standup bot — майнінг глибший max_turns = 25 [[middleware]] type = "context" warn_at_percent = 80 compact_at_percent = 90 fallback_max_tokens = 128000
iMCP: доступ до даних на пристрої
[[mcp]] name = "iMCP" transport = "stdio" command = "/Applications/iMCP.app/Contents/MacOS/imcp-server"
Дизайн з двома розкладами
Oracle використовує два розклади, які працюють разом: один збирає дані й готує брифінги, інший консолідує накопичені знання у патерни вищого рівня.
Розклад 1: інтервальний брифінг (кожні 2 години)
# Створюється через UI dashboard:
Trigger: Interval, 7200 seconds (2 hours)
Prompt: "Run ambient briefing cycle: gather iMCP signals,
ingest observations, query patterns, and produce
proactive briefing." Розклад 2: консолідація за подіями
# Автоматично запускається після 12 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." Замість запуску за фіксованим таймером консолідаційний розклад спрацьовує, коли накопичується достатньо нових спостережень. Це ефективніше за інтервальну консолідацію — він запускається тоді, коли справді є що синтезувати.
Що відбувається з часом
Ключові можливості
- Інтервальне + подієве планування — два розклади працюють у парі
- Консолідація знань — об'єднує спостереження в патерни вищого рівня
- Навчання між сесіями — зберігається між перезапусками через SQLite knowledge store
- Майнінг даних пристрою — Calendar, Contacts, Messages, Maps, Weather через iMCP
- Локальний LLM inference — ваші поведінкові дані не залишають ваш комп'ютер
- Debounced event triggers — консолідація запускається лише коли з'являється достатньо нових даних
Спробуйте самі
# 1. Встановіть iMCP і ввімкніть сервіси brew install --cask mattt/tap/iMCP # 2. Запустіть агента cargo run --example qmtcode --features dashboard -- \ confs/ambient_oracle.toml --dashboard # 3. Створіть у dashboard два розклади: # Schedule 1: Interval, 7200s, "Run ambient briefing cycle..." # Schedule 2: Event-driven, knowledge_ingested, threshold 12, # "Run ambient consolidation cycle..."