Приклади / Scheduled + Desktop MCP

Ambient Oracle — проактивний інтелект

Замість відповідати на питання, він говорить те, про що ви не знали, що треба спитати.

ambient_oracle.toml

Проблема

Ваші пристрої збирають величезну кількість даних, на які ви ніколи не дивитеся. Патерни календаря, частота повідомлень, звички переміщення, кореляції з погодою. Ви постійно реагуєте — і ніколи не випереджаєте те, що ваші власні дані могли б вам підказати.

Що, якби агент міг безперервно видобувати ці дані й повідомляти вам про речі до того, як вони стануть проблемами?

Конфіг

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."
Планування за подіями

Замість запуску за фіксованим таймером консолідаційний розклад спрацьовує, коли накопичується достатньо нових спостережень. Це ефективніше за інтервальну консолідацію — він запускається тоді, коли справді є що синтезувати.

Що відбувається з часом

День 1
Агент читає ваш календар, повідомлення й локацію. Зберігає спостереження: "Користувач мав сьогодні 4 зустрічі, переважно вранці. Дорога зайняла 35 хвилин. Останнє повідомлення надіслано о 22:14."
День 3
Після 12 ingestions спрацьовує консолідація. Агент синтезує: "Користувач схильний скасовувати вечірні плани в дні з кількома ранковими зустрічами поспіль. Впевненість у патерні: 2/2 випадки."
День 7
Агент проактивно брифить вас о 8 ранку: "Завтра у вас 6 зустрічей, усі до 14:00. Ваші дані показують, що цей патерн корелює з низькою енергією та скасованими вечірніми планами. Варто заблокувати 30 хвилин на відновлення після зустрічі №4."
День 14+
Патерни стають точнішими. Агент відстежує кореляції між погодою, щільністю календаря, тоном повідомлень і часом у дорозі. Брифінги стають гострішими.

Ключові можливості

  • Інтервальне + подієве планування — два розклади працюють у парі
  • Консолідація знань — об'єднує спостереження в патерни вищого рівня
  • Навчання між сесіями — зберігається між перезапусками через 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..."