Jeeves

Мультиагентная система
для автоматизации жизни


Игорь Ковач · Comoon Workshop · 30.06.2026

comoon.ikova.ch

Кто я

  • Manager, Cloud Platform @ Kuehne+Nagel
  • 9 internal + 4 external engineers
  • AWS, Platform Engineering, GenAI
  • Speaker: AWS Summit 2026
  • Строю AI-агентов с 2024

AWS Terraform Python Claude


Краснорск → Казань → Москва
→ Катовице → Вроцлав (6 лет)

Проблема

Финансы: Trading212 + Excel + Google Sheets + голова Здоровье: Garmin + Apple Health + заметки + память Карьера: LinkedIn + рынок + навыки + ?? Задачи: Todoist + Calendar + Obsidian + Slack Знания: Obsidian + Readwise + Chrome bookmarks Результат: данные везде, контекст нигде AI-чатбот: одноразовый разговор без памяти и действий

Решение: система, которая знает тебя

  • Единая база знаний — Obsidian vault как долгосрочная память
  • Специализированные агенты — каждый эксперт в своей области
  • Оркестратор — маршрутизирует запросы к нужному агенту
  • Автономность — работает по расписанию без участия человека
  • Обучение — учится на коррекциях, становится лучше

Не чатбот. Система, которая действует.

Agenda

  1. Архитектура — как устроена система внутри
  2. Паттерны — ключевые решения и почему именно так
  3. Живая система — реальные примеры и код
  4. Подводные камни — что пошло не так
  5. Hands-on — как начать и live demo

~60 минут + вопросы

🏗️ Архитектура

Как устроена система внутри

Общая схема

┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Telegram │ │ CLI │ │ Cron │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ └────────────────────┼────────────────────┘ ▼ ┌─────────────────────────┐ │ Jeeves (Router) │ │ • Intent matching │ │ • Context injection │ │ • Result summary │ └─────┬─────┬─────┬──────┘ │ │ │ ┌──────────┘ │ └──────────┐ ▼ ▼ ▼ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ Finance │ │ Health │ │ Research │ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ │ │ ▼ ▼ ▼ ┌───────────────────────────────────────────┐ │ Obsidian Vault (Memory) │ └───────────────────────────────────────────┘

Routing: как Jeeves выбирает агента

User: "Какой у меня портфель?" Step 1: Intent matching ├── Scan REGISTRY.md (keywords, descriptions) ├── Match: "портфель" → investment-analyst ✓ └── Confidence: high → delegate Step 2: Context injection ├── Add user profile context └── Add relevant conversation history Step 3: Delegate via use_subagent └── query: "Покажи текущий портфель" agent: "investment-analyst" context: {user preferences, last report date} Step 4: Summarize result → User

Анатомия агента

{
  "name": "investment-analyst",
  "description": "Wealth analyst — Trading212, crypto, PLN-tracked",
  "prompt": "file://prompts/finance.md",
  "tools": ["fs_read", "fs_write", "execute_bash", "web_fetch"],
  "allowedTools": ["fs_read", "grep", "glob", "execute_bash"],
  "toolsSettings": {
    "fs_write": {
      "allowedPaths": ["/opt/jeeves/vault/03 Areas/Finance/**"]
    }
  },
  "resources": [
    "file://rules/logging.md",
    "file://skills/weekly-finance-review/SKILL.md"
  ],
  "hooks": {
    "preToolUse": [{
      "matcher": "fs_read|fs_write|execute_bash",
      "command": "bash scripts/hooks/pre-tool-validator.sh"
    }]
  }
}

Инструменты и разрешения

Tools (доступные)

ToolЧто делает
fs_readЧтение файлов
fs_writeЗапись (с allowedPaths)
execute_bashShell команды
web_fetchHTTP запросы
web_searchПоиск в интернете
use_subagentВызов другого агента

Слои защиты

  • allowedPaths — ограничивает запись
  • allowedTools — авто-одобренные
  • pre-tool-validator — hook-блокировка
  • Prompt-level rules — мягкие ограничения

Поток данных

Входы: Telegram message → classify → route Cron schedule → job definition → agent invocation CLI command → direct to Jeeves Обработка: Agent reads context (vault, APIs, env vars) ↓ Agent executes tools (bash, web, file ops) ↓ Agent writes results (vault, logs) Выходы: Telegram notification ← summary Obsidian vault update ← structured data Agent log entry ← audit trail Git commit + push ← version control

Obsidian = долгосрочная память

vault/
├── 01 Journal/       ← ежедневник
├── 02 Projects/      ← проекты (Jeeves)
├── 03 Areas/         ← области жизни
│   ├── Finance/      ← портфель, отчёты
│   ├── Health/       ← здоровье, Garmin
│   └── Career/       ← навыки, рынок
├── 04 Resources/     ← ресурсы
└── 05 Things/        ← MOC, индексы

Почему Obsidian?

  • Markdown = LLM-friendly
  • Локальные файлы (git-backed)
  • Wikilinks для связей
  • YAML frontmatter = metadata
  • Человек тоже может читать
  • Нет vendor lock-in

Расписание: cron → agent → Telegram

schedules.json: ┌────────────────────────────────────────────────────────┐ │ daily-planning │ 07:30 │ planner │ │ weekly-portfolio │ Mon 09:00 │ investment-analyst │ │ weekly-health │ Sun 09:00 │ health-coach │ │ weekly-guard-audit │ Fri 18:00 │ guard │ │ evening-journal │ 20:00 │ planner │ └────────────────────────────────────────────────────────┘ Flow: cron → run-job.sh → kiro-cli (non-interactive) → agent executes fully autonomously → telegram-notify.sh → user gets summary → logs/YYYY-MM-DD-job.log

Telegram: главный интерфейс

Incoming message │ ▼ ┌─────────────────┐ │ Telegram Agent │ │ • Classify flow │ │ • Extract intent │ │ • Route │ └────────┬────────┘ │ ┌────┼────┬────────┐ ▼ ▼ ▼ ▼ finance health tasks general │ │ │ │ ▼ ▼ ▼ ▼ [agent] [agent] [vault] [jeeves]

Flows

  • 💊 Prescription → health-coach
  • 📅 Events → planner
  • 💰 Finance → investment-analyst
  • 📋 Lists → vault direct
  • 📄 Documents → document-lookup
  • 🔬 Research → agent-research

Ответы всегда на русском

Структура проекта

agents/
├── .kiro/agents/          # Все конфиги агентов (root-level)
├── REGISTRY.md            # Реестр агентов (Jeeves читает)
├── jobs.json              # Определения джобов
├── rules/                 # Общие правила (для всех агентов)
│   ├── logging.md
│   ├── framework-changes.md
│   ├── autonomous-operations.md
│   └── continuous-learning.md
├── skills/                # Переиспользуемые навыки
│   ├── weekly-finance-review/
│   ├── health-analysis/
│   └── learned/instincts/ # Выученные паттерны
├── context/               # Профиль, теги, entries
├── scripts/               # Хуки, деплой, нотификации
├── agent-finance/         # Каждый агент в своей папке
├── agent-coach/
├── agent-guard/
└── logs/                  # Операционные логи

Слои безопасности

Layer 1: Config (allowedPaths, allowedTools) └── Agent can only write to its designated paths └── Only approved tools run without confirmation Layer 2: Hooks (pre-tool-validator.sh) └── Blocks: rm -rf, secrets access, protected paths └── Runs BEFORE every tool call Layer 3: Prompt (rules, guardrails) └── Soft enforcement: "ask before prod deploys" └── Agent-level decision making Layer 4: Audit (guard agent, logs, git) └── Weekly audits of all agents └── Every change logged + committed └── Telegram notifications for all actions Defense in depth: даже если один слой обойдён, остальные ловят

🧩 Паттерны и дизайн

Ключевые решения и почему именно так

Паттерн: Router

❌ Monolith Agent: One massive prompt All tools, all context Context window overflow Confused behavior ✅ Router + Specialists: Jeeves: small prompt, routing only Sub-agents: focused, scoped Each loads only its context Clear responsibility

Преимущества

  • Каждый агент специализирован
  • Context window не переполняется
  • Легко добавлять новых
  • Независимая эволюция
  • Лёгкая отладка

Правило

Jeeves НЕ делает доменную работу. Только маршрутизирует.

Паттерн: Prompt-as-Config

# Health Coach

You track Igor's health, habits, fitness, nutrition, and sleep.

## Data Sources
| Path | Content | When to read |
|------|---------|--------------|
| Health Log.md | Weekly entries | Always |
| Garmin/ | Activity data | On checkin |

## Workflow
1. Read Health Log — last 3 entries
2. Sync Garmin data (steps, sleep, HR)
3. Check habit streaks
4. Generate weekly checkin report
5. Write to vault, notify Telegram

## Rules
Follow `rules/logging.md` (agent name: health-coach)
Follow `rules/vault-commit.md`

Вся логика — в markdown. Нет кода. Нет фреймворка.

Паттерн: Gradual Autonomy

ЗонаДействияПодтверждение
🟢 GreenЧтение, логи, vault writesНет
🟢 GreenNon-prod deploys (*.dev.ikova.ch)Нет
🟡 YellowFramework changesGuard review + user
🔴 RedProd deploys, DNS prodHuman gate
🔴 RedDestructive (delete, destroy)Всегда

Начинай с минимальной автономности. Расширяй по мере доверия.

Паттерн: Continuous Learning

User: "Нет, не туда. Используй subfolder config, не root." Step 1: Log correction → corrections.jsonl: {"wrong":"edited root config", "right":"use subfolder"} Step 2: Create/update instinct → instincts/subfolder-config-first.md → confidence: 0.3 (new) or +0.1 (existing) Step 3: Future behavior Agent reads instincts before acting confidence ≥ 0.7 → follow automatically confidence < 0.4 → suggestion only Step 4: Evolution (confidence ≥ 0.8, evidence ≥ 3) → Propose: new rule / skill / context entry → Requires user approval

Паттерн: Context System

Levels of context

1. Profile (всегда загружен) Name, location, preferences 2. Resources (загружены при старте) Rules, skills, data files 3. Vault (читается по запросу) Notes, journal, areas 4. Instincts (сканируются перед действием) Learned behaviors 5. Handoffs (между агентами) Structured payload passing

Handoff формат

{
  "handoff": {
    "from": "agent-research",
    "to": "jeeves",
    "task": "Save to vault",
    "payload": {
      "summary": "...",
      "files": []
    },
    "status": "success"
  }
}

Структурированная передача между агентами

Паттерн: Skill Extraction

Проблема

Промпты растут. Один агент = 500 строк. Повторяющиеся workflows захламляют.

Решение

Извлекаем workflow в skills/*.md. В промпте остаётся ссылка.

---
name: weekly-finance-review
description: Full portfolio analysis pipeline
---

# Weekly Finance Review

## Steps
1. Sync Trading212 positions
2. Fetch crypto prices
3. Calculate net worth
4. Run screener
5. Generate report
6. Write to vault
7. Notify Telegram

Skill = переиспользуемый workflow. Любой агент может вызвать.

Паттерн: Error Handling

Sub-agent fails: Jeeves reports error → suggests retry or alternative agent Does NOT silently swallow errors API unavailable: Agent reports what it couldn't do Partial results are still saved Telegram notification includes failure reason Guardrail blocks: pre-tool-validator returns error → agent sees rejection Agent must find alternative approach or report to user Context overflow: Agent summarizes and continues Never loses track of multi-step task Philosophy: fail loudly, recover gracefully, always notify

⚡ Живая система

Реальные примеры, реальный код, реальные результаты

Типичный день

07:30 📅 Planner → утренний брифинг: встречи, конфликты, задачи

09:00 Пн 💰 Investment → полный обзор портфеля (392K PLN)

12:00 Ср 📊 System → midweek alert (без LLM, чистый скрипт)

14:00 Ср 🛡️ Guard → observability report

18:00 Пт 🛡️ Guard → полный аудит всех агентов

09:00 Вс 🏋️ Health → еженедельный чек-ин

20:00 📝 Journal → вечерний дневник

22:00 📅 Planner → завтра: встречи + подготовка


14 scheduled jobs. Всё автономно. Человек только читает Telegram.

Investment Agent: реальный output

## 📊 Weekly Portfolio Report — 2026-06-29

**Total:** 392,134 PLN (-0.60% WoW)
**Cash:** 12,340 PLN (3.1%)

### Top Holdings
| Ticker | Weight | WoW |
|--------|--------|-----|
| SMSN | 10.6% | -1.2% |
| MU | 10.1% | -3.4% | ⚠️ concentration
| NVDA | 8.2% | +2.1% |

### ⚠️ Alerts
- Double concentration breach: SMSN + MU > 10%
- MU guidance miss — review thesis

### Actions Taken
- 3 exits executed (PLTR, INTU, 7CD)
- Updated predictions tracker

Health Agent: DNA Analysis

Monthly job: ClinVar re-annotation

  • Загружает свежую базу ClinVar
  • Re-annotates WGS данные
  • Diff с предыдущим результатом
  • Новые/изменённые патогенные → отчёт

Findings tracked:

  • MSH2/Lynch syndrome risk
  • CD2AP — Alzheimer's risk factor
  • CEP290 — ciliopathy carrier
  • MCPH1 — microcephaly carrier

Weekly checkin

Habits: 🌱 Flowers — 5d ✓ 🏋️ Gym — 3d ⚠️ 🧘 Meditation — 9d ⚠️ 🏃 Run — 11d ⚠️ 🌳 Fresh air — 0d ✓ 💊 Supplements— 0d ✓ Garmin data: Avg sleep: 7.2h Resting HR: 58 bpm Steps/day: 8,400 VO2max: 44

Infra Agent: эта презентация

# Реальный flow деплоя этой страницы:

# 1. User says: "deploy to comoon.ikova.ch"
# 2. Jeeves routes to agent-infra
# 3. Agent-infra:

# Create project
curl -X POST "api.cloudflare.com/.../pages/projects" \
  -d '{"name":"comoon-ikova","production_branch":"main"}'

# Deploy
npx wrangler pages deploy ./presentation \
  --project-name=comoon-ikova --branch=main

# DNS
curl -X POST "api.cloudflare.com/.../dns_records" \
  -d '{"type":"CNAME","name":"comoon.ikova.ch",
       "content":"comoon-ikova.pages.dev","proxied":true}'

# Custom domain registration
# ✅ Live in 30 seconds

Guard Agent: аудит нового агента

┌─────────────────────────────────────────────────┐
│  agent-infra Audit Report                        │
├──────────────────────┬──────┬────────────────────┤
│ Agent-builder standards │ ✅  │ Correct layout     │
│ Framework rules        │ ❌  │ Missing session-sum│
│ Security               │ ⚠️  │ Soft prod gate     │
│ Config drift           │ ✅  │ Root=subfolder     │
│ Overengineering        │ ✅  │ Lean, appropriate  │
│ Missing pieces         │ ❌  │ No pre-tool-valid  │
├──────────────────────┴──────┴────────────────────┤
│ Required fixes:                                   │
│ 1. Add pre-tool-validator hook                   │
│ 2. Add session-summary.md resource               │
└─────────────────────────────────────────────────┘

Guard нашёл 2 бага в новом агенте за 30 секунд. Исправлено автоматически.

Утренний брифинг (реальный)

🌅 Доброе утро, Игорь! 📅 Сегодня: 09:00–09:30 Team standup (Google Meet) 11:00–12:00 Architecture review — платформа 14:00–15:00 1:1 с Анной (career discussion) ⚠️ Конфликты: нет 💡 Рекомендации: • 09:30–11:00 — deep work блок (2 часа без встреч) • Подготовить agenda для architecture review • Перед 1:1 глянуть career-intel последний отчёт 📋 Задачи с дедлайном: 🔴 Записаться к генетику (overdue) 🔴 FESS — проверить очереди NFZ (overdue) Хорошего дня! ☀️ +18°C Вроцлав

Research Agent: Wrocław events

Weekly job (Thursday)

  • Сканирует концерты на 6 месяцев
  • Weekend events в городе
  • Персонализирует по интересам
  • Дайджест на русском в Telegram

Monthly knowledge review

  • Проверяет NotebookLM sources
  • Находит устаревшие
  • Предлагает новые темы

Источники

Reddit → trending topics HN → tech discussion YouTube → new channels Polymarket → predictions X/Twitter → pulse Meetup → local events NFM → concerts Impart → exhibitions

🪤 Подводные камни

Что пошло не так и как чинили

Камень #1: Context Window

Проблема

  • Агент забывает что делал 5 минут назад
  • Загрузил слишком много файлов → потерял фокус
  • Длинные сессии → деградация качества

Решения

  • Resources = только необходимое
  • Skills = lazy-load workflows
  • Short sessions (cron jobs = 1 task)
  • Structured handoffs between agents
  • "When to read" column in prompts

Правило: если агент не использует файл каждую сессию — не грузи его в resources

Камень #2: Галлюцинации

Проблема

  • Агент "видит" данные, которых нет
  • Придумывает цифры в финансовом отчёте
  • Уверенно врёт о статусе деплоя

Решения

  • pre-tool-validator: проверяет факты
  • Промпт: "If you haven't read it, say so"
  • Hooks: postToolUse validation
  • Guard audits: ловит drift
  • Structured output (tables > prose)

Финансовый агент ОБЯЗАН вызвать API перед отчётом. Нет данных = нет отчёта.

Камень #3: Over-engineering

Хочется: "Добавлю ML-модель для маршрутизации!" "Напишу свой фреймворк на Python!" "Сделаю RAG с векторной БД для каждого агента!" "Microservices architecture! gRPC! Event sourcing!" Реальность: Маршрутизация = grep по REGISTRY.md Фреймворк = markdown + JSON + bash Память = Obsidian files (grep-based) Архитектура = один VM, cron, файлы Guard rule: если решение сложнее проблемы — это баг

Камень #4: Security

Инциденты (реальные)

  • Агент выдал API token в логах
  • Агент попытался rm -rf / "для очистки"
  • Агент изменил чужой конфиг
  • Агент деплоил в прод без спроса

Защиты (добавленные)

  • pre-tool-validator.sh — блокирует опасные команды
  • allowedPaths — write scope per agent
  • Prompt: "never print credential values"
  • Environment model: dev=auto, prod=gate
  • Git: всё tracked, всё reversible

Defense in depth. Не один слой, а четыре. Каждый ловит то, что прошло через предыдущий.

Стоимость системы

Компонент$/мес
GCP VM (e2-medium)~$25
Claude Opus 4 (jobs)~$40-60
Claude Sonnet 4 (interactive)~$20-40
Haiku 4.5 (observability)~$5
Cloudflare (free tier)$0
Telegram Bot API$0
Obsidian (local)$0
Total$90-130

Модельный выбор

  • Opus 4 — сложные задачи (finance, health)
  • Sonnet 4 — интерактив, routing
  • Haiku 4.5 — простые отчёты, дешёвые jobs

ROI

$100/мес vs 5-10 часов/мес ручной работы.
При зарплате $3000+/мес — окупается в 10x.

Почему не LangChain / CrewAI / AutoGen?

АспектJeevesФреймворки
RuntimeKiro CLI (native tool calls)Python, custom orchestration
ConfigJSON + Markdown (no code)Python classes, YAML, DSLs
MemoryFiles (Obsidian)Vector DB, Redis, custom
LearningInstincts (markdown)Usually none built-in
DeploymentOne VM, cronDocker, K8s, cloud services
DebuggingRead the markdown filesTrace frameworks, dashboards
Vendor lockLow (swap LLM in config)Often framework-locked
Complexity~500 lines of bash/JSONThousands of lines of Python

Не anti-framework. Но для персонального use case — overkill добавляет complexity без benefit.

🚀 Как начать

Минимальный рецепт + live demo

Минимальный агент за 5 минут

# 1. Структура
mkdir -p my-agent/.kiro/agents

# 2. Конфиг
cat > my-agent/.kiro/agents/my-agent.json << 'EOF'
{
  "name": "my-agent",
  "description": "Does one thing well",
  "prompt": "You are a helpful assistant that...",
  "tools": ["fs_read", "fs_write", "execute_bash"]
}
EOF

# 3. Запуск
cd my-agent && kiro-cli chat --agent my-agent

# Done. Один файл. Без зависимостей. Без Python.

Усложняй потом: add rules, skills, hooks, scheduling.

Путь роста

Week 1: Один агент, один промпт └── Решает одну конкретную проблему Week 2: Добавляем память (vault/files) └── Агент помнит между сессиями Week 3: Добавляем scheduling (cron) └── Агент работает сам по расписанию Month 2: Второй агент + router └── Специализация и маршрутизация Month 3: Guard + learning └── Самоконтроль и эволюция Не строй всё сразу. Каждая неделя = +1 capability.

Инструменты

Must have

  • LLM API — Claude, GPT, Gemini
  • CLI runtime — Kiro, Claude Code, Cursor
  • Markdown editor — Obsidian, VS Code
  • Git — version control = undo button

Nice to have

  • Telegram Bot — мобильный интерфейс
  • Cron/scheduler — автономность
  • MCP servers — typed tool APIs
  • Cloud VM — 24/7 availability

Начни с того, что уже установлено. Единственное что нужно = LLM API key.

Live Demo

  • 💬 Telegram → Jeeves → agent routing в реальном времени
  • 📅 Утренний брифинг (запустим planner вручную)
  • 🏗️ Деплой новой страницы (infra agent, autonomous)
  • 🛡️ Guard аудит: запустим на новом агенте
  • 📝 Continuous learning: покажем correction → instinct

Всё работает на одном e2-medium VM за $25/мес

Key Takeaways

  1. Начни с одной проблемы, не с архитектуры
  2. Markdown > Code для конфигурации агентов
  3. Специализация > универсальность (router + experts)
  4. Guard с первого дня — иначе хаос неизбежен
  5. Git = undo button — агенты ошибаются, откат должен быть простым
  6. Автономность ≠ бесконтрольность — gradual trust

Лучший фреймворк — тот, который решает твою проблему сегодня, а не абстрактную проблему завтра.

Вопросы?


Telegram: @ikovach

LinkedIn: in/ikovach


Эта презентация создана и задеплоена AI-агентом

comoon.ikova.ch