Инструкция: автономная медитация с публичным логом

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. Те же шаги 1–3 (creds secondary, папка publiclogs/mail_brief/, CLI sync). Если брифинг личный и публиковать не нужно — папку положить в inbox/mail_brief/ и пропустить sync целиком.
  2. cron: "0 9 * * *" (раз в день в 9 утра) с командой «выполни instructions/meditation в роли email-брифинга»
  3. В шаге «провести действие» — вместо медитации:
    • himalaya envelope list --page-size 30 -- UNSEEN
    • сгруппировать по отправителю
    • 5-строчная сводка: «3 письма от X (тема), 1 от Y (вопрос), 2 от Z (рассылка)»
    • записать в mail_brief/YYYY-MM-DD.md
  4. 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/).

Связано