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
- Архитектура — как устроена система внутри
- Паттерны — ключевые решения и почему именно так
- Живая система — реальные примеры и код
- Подводные камни — что пошло не так
- 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_bash | Shell команды |
web_fetch | HTTP запросы |
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 | Нет |
| 🟢 Green | Non-prod deploys (*.dev.ikova.ch) | Нет |
| 🟡 Yellow | Framework changes | Guard review + user |
| 🔴 Red | Prod deploys, DNS prod | Human gate |
| 🔴 Red | Destructive (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 | Фреймворки |
| Runtime | Kiro CLI (native tool calls) | Python, custom orchestration |
| Config | JSON + Markdown (no code) | Python classes, YAML, DSLs |
| Memory | Files (Obsidian) | Vector DB, Redis, custom |
| Learning | Instincts (markdown) | Usually none built-in |
| Deployment | One VM, cron | Docker, K8s, cloud services |
| Debugging | Read the markdown files | Trace frameworks, dashboards |
| Vendor lock | Low (swap LLM in config) | Often framework-locked |
| Complexity | ~500 lines of bash/JSON | Thousands 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
- Начни с одной проблемы, не с архитектуры
- Markdown > Code для конфигурации агентов
- Специализация > универсальность (router + experts)
- Guard с первого дня — иначе хаос неизбежен
- Git = undo button — агенты ошибаются, откат должен быть простым
- Автономность ≠ бесконтрольность — gradual trust
Лучший фреймворк — тот, который решает твою проблему сегодня, а не абстрактную проблему завтра.
Вопросы?
Telegram: @ikovach
LinkedIn: in/ikovach
Эта презентация создана и задеплоена AI-агентом
comoon.ikova.ch