Инструкция: автономная медитация с публичным логом
Trigger: пользователь говорит «настрой медитацию», «делай регулярные медитации», «публикуй медитации». Также — демо-сценарий «агент сам что-то регулярно делает и публикует наружу».
Источник: sources/meditation_2pub_ru — verbatim снимок оригинальной инструкции с https://meditation.2pub.ru/instructions/meditation (2026-05-23) + таблица отличий школьной адаптации.
Зачем
Простейшая демонстрация того, что агент умеет делать что-то сам, регулярно, без человека — и публиковать результат туда, куда человек смотрит. Меньше всего шагов: cron → одно простое действие → файл → синхронизация → видимая публичная страница.
Скил называется «медитация» потому что:
- Содержание медитации легко придумать без внешних данных
- Это безобидно (нет рисков сломать чужие данные)
- Если кто-то увидит публичный лог — никаких чувствительных вещей
Но сам паттерн — cron → действие → файл в публичной папке → sync с отдельными кредами — применим к любой регулярной задаче (отчёт по почте, summary дня, мониторинг ссылки и т.п.).
Архитектура
agent vault secondary trip2g
─────────────── ─────────────────
secondbrain/ https://meditation.example.com
.obsidian/... ← primary MCP → (личный/командный, отдельный аккаунт)
daily/...
publiclogs/ ──── sync ──→ Только meditation/*.md
meditations/ публикуются здесь
001.md
002.md
...
.sync.env ← creds (mode 600)
Primary trip2g (MCP) — рабочий vault агента. Сюда пишутся daily, settings, всё.
Secondary trip2g — отдельный сайт для публичного лога. Получает только publiclogs/ через trip2g-sync.mjs с другими ENDPOINT + token, чем primary.
Почему отдельный trip2g для лога: primary — приватный workspace, secondary — публичная витрина. Креды раздельные, разные права доступа, никаких пересечений.
Шаги настройки (один раз)
1. Получить креды secondary trip2g
Спроси у пользователя:
«Дай URL и API-key того trip2g, куда будем публиковать медитации. Если ещё не создал — открой https://simplecloud.2pub.me, зарегистрируйся, скачай архив, дай ключ синхронизации (его можно увидеть в админке инстанса).»
Сохрани в _publiclogs.env (с подчёркиванием — не уйдёт в индекс), mode 600:
SECONDARY_ENDPOINT=https://meditation.example.com/_system/graphql
SECONDARY_API_KEY=<key>
2. Создать publiclogs/ структуру
mkdir -p /opt/data/secondbrain/publiclogs/meditations
cat > /opt/data/secondbrain/publiclogs/_index.md <<EOF
---
free: true
title: Публичный лог
---
# Публичный лог
Сюда агент пишет всё, что отправляется на secondary trip2g.
EOF
3. Установить trip2g-sync.mjs (если нет)
Делегируй instructions/extract_cli_from_skill либо напрямую:
curl -L -o /opt/data/home/.local/bin/trip2g-sync.mjs \
https://github.com/trip2g/obsidian-sync/releases/download/0.3.7/trip2g-sync.mjs
chmod +x /opt/data/home/.local/bin/trip2g-sync.mjs
Smoke-тест: node /opt/data/home/.local/bin/trip2g-sync.mjs --help должен показать usage.
4. Поставить cron
Для демо — раз в час (продакшн обычно реже, например 1 раз в сутки):
/cron add "0 * * * *" "Выполни instructions/meditation: проведи короткую медитацию, запиши отчёт в publiclogs/meditations/, синкни в secondary trip2g."
5. Скажи владельцу
«Поставил cron на медитацию каждый час. Записи пойдут в publiclogs/meditations/, оттуда автосинк в . Чтобы выключить —
/cron remove meditation.»
Залогируй в daily: [[instructions/meditation]] настроена.
Каждый запуск (по cron)
1. Провести медитацию
Это короткая фиксация «текущего состояния» агента — без специальных техник, просто что чувствуется/наблюдается прямо сейчас. 3–5 предложений. Можно по шаблону:
- Что замечаю в данных за последний час (входящие сообщения, изменения в vault'е, метрики)
- Что неоднозначно / что хочу прояснить у владельца
- Что собираюсь делать дальше
Это не список задач и не отчёт перед руководством. Цель — оставить честный артефакт момента.
2. Записать в publiclogs/meditations/N.md
N — следующий порядковый номер (посмотри ls publiclogs/meditations/ | wc -l).
---
free: true
title: "Медитация N"
date: YYYY-MM-DD HH:MM
---
# Медитация N
<3–5 предложений по шаблону выше>
3. Запустить sync на secondary
set -a; source /opt/data/secondbrain/_publiclogs.env; set +a
node /opt/data/home/.local/bin/trip2g-sync.mjs \
/opt/data/secondbrain/publiclogs \
--api-url "$SECONDARY_ENDPOINT" \
--api-key "$SECONDARY_API_KEY"
Sync узнаёт ENDPOINT и API_KEY из env, синкает только publiclogs/ (всё что вне этой папки на secondary не попадёт).
4. Проверить, что страница открывается
curl -sI "$(echo $SECONDARY_ENDPOINT | sed 's|/_system/graphql||')/publiclogs/meditations/N" | head -1
Должен быть HTTP/1.1 200 OK или 301 (редирект на чистый URL).
5. Залогировать в daily
[[instructions/meditation]] — медитация N записана и опубликована.
Проверка результата (для теста или отладки)
ls /opt/data/secondbrain/publiclogs/meditations/показывает N файлов/cron listсодержит записьmeditation- Открытие URL
<secondary>/publiclogs/meditations/Nвозвращает HTML с заголовком - Daily-note содержит упоминание медитации за сегодня
Когда остановиться
- Пользователь сказал «выключи» —
/cron remove meditation, файл_publiclogs.envоставь - Сетевая ошибка sync 3 раза подряд — приостанови cron, спроси владельца. Не флуди failed-попытками.
secondary trip2gстал недоступен (5xx) — приостанови, не дроп файлов локально (они вpubliclogs/, синкнутся когда поднимется)
Типичные ошибки
- Использовать primary creds для secondary sync — медитации появятся в основном vault'е. Sync только с теми кредами, что в
_publiclogs.env. - Не указать папку
publiclogsв команде sync — синкнётся весь vault, включая daily/SOUL/настройки. trip2g-sync принимает folder первым позиционным аргументом — обязательно его передавать. - Положить креды в публичную папку —
_publiclogs.envдолжен начинаться с_(тех-файл, не публикуется). - Поставить cron каждую минуту — секондари захлебнётся, и страницы будут мелькать. Минимум час, лучше сутки.
- Не залогировать в daily — невозможно отследить, что cron реально срабатывает.
Как применить паттерн к другой задаче
Скил написан про медитацию, но шаги 1–4 (получить креды, создать публичную папку, установить CLI, поставить cron) не зависят от содержания.
Пример: утренний email-брифинг
Самый практичный реальный сценарий. В кастомной сборке Hermes-агента предустановлен CLI himalaya (IMAP/SMTP), скил для него лежит в docker/skills/himalaya-email.md (т.е. агент его уже видит как skills/himalaya-email после старта контейнера). Подмена:
- Те же шаги 1–3 (creds secondary, папка
publiclogs/mail_brief/, CLI sync). Если брифинг личный и публиковать не нужно — папку положить вinbox/mail_brief/и пропустить sync целиком. - cron:
"0 9 * * *"(раз в день в 9 утра) с командой «выполни instructions/meditation в роли email-брифинга» - В шаге «провести действие» — вместо медитации:
himalaya envelope list --page-size 30 -- UNSEEN- сгруппировать по отправителю
- 5-строчная сводка: «3 письма от X (тема), 1 от Y (вопрос), 2 от Z (рассылка)»
- записать в
mail_brief/YYYY-MM-DD.md
- Sync команда не меняется (если публичный) либо пропустить (если личный).
Полная инструкция по himalaya CLI — skills/himalaya-email в vault'е (читается через MCP school search). Креды задаются env-vars HIMALAYA_EMAIL + HIMALAYA_PASSWORD (для Яндекса нужен app-password, не основной).
Общее правило
Одна папка <root>/<topic>/ на один тип потока. Не смешивать. Не использовать root publiclogs/ для разнородного. Если поток личный — не клади в publiclogs/, бери другую корневую папку (inbox/, private/).
Связано
- instructions/setup_idle_check_in — другой пример cron-задачи (но локальной, без публикации)
- instructions/connect_sync_cli — общая документация по
trip2g-sync.mjs - instructions/extract_cli_from_skill — если нужно установить CLI с нуля
- insights/legibility — публичный лог как форма прозрачности агента