Autograph — типизированный слой памяти для always-on агентов в Obsidian

· 3 мин чтения
ai-agents claude-code memory knowledge-graph obsidian
📂 Исходный код на GitHub

Типизированный слой памяти для always-on агентов (Claude Code, OpenClaw, Hermes, Codex). Schema-as-code для любого Obsidian-хранилища: движок забывания, health-score, ремонт ссылок, генерация MOC.

Autograph — типизированный слой памяти для always-on агентов в Obsidian

Проблема always-on агента

Always-on агент, ведущий Obsidian-хранилище, через месяц работы накапливает типичный хаос: 800 файлов, битые [[wiki-links]], дубликаты заметок, противоречивые статусы вроде status: ongoing и status: active без понимания, эквивалентны ли они. Свободный Markdown превращается в свалку, где агенту уже не разобраться.

Autograph — это слой поверх Obsidian, который держит порядок автоматически. Вы описываете таксономию один раз в schema.json: какие типы карточек существуют, в каких папках живут разные домены, как быстро каждый вид знаний забывается, какие статусы разрешены. Дальше движок сам раскладывает новые файлы, чинит ссылки, забывает карточки, к которым не прикасались месяцами, сливает дубликаты и считает health-score. Один schema.json читается всеми агентами сразу — Claude Code, OpenClaw, Hermes, Codex.

Установка

Плагин ставится через маркетплейс или напрямую:

/plugin marketplace add smixs/autograph
/plugin install autograph@autograph

Без регистрации маркетплейса:

/plugin install github:smixs/autograph

Для OpenClaw достаточно склонировать репозиторий и подключить через openclaw plugins install. Для Hermes команда hermes skills install кладёт скилл в ~/.hermes/skills/autograph/. Codex подключается симлинком на .claude-plugin в Codex-формате.

Быстрый старт

# 1. Указать на хранилище — пустое, хаотичное или уже заполненное
/autograph:research /path/to/vault

# 2. Ежедневная проверка здоровья
uv run skills/autograph/scripts/graph.py health /path/to/vault

# 3. Проход забывания: пересчитать relevance и tier для всех карточек
uv run skills/autograph/scripts/engine.py decay /path/to/vault

# 4. Перегенерировать Map-of-Content индексы
uv run skills/autograph/scripts/moc.py generate /path/to/vault

10-фазный бутстрап (discover → generate → swarm → enforce → cleanup → tag → dedup → link → MOC → verify) описан в skills/autograph/references/bootstrap-workflow.md. Команда /autograph:research ведёт через бутстрап интерактивно: вопросы по структуре, swarm агентов-исследователей, драфт схемы и явное подтверждение перед применением.

Сценарии использования

Задача Команды Зачем
Аудит чужого хранилища discover.pygraph.py healthgraph.py fix --apply Понять состояние до изменений
Бутстрап пустого или хаотичного vault /autograph:research <vault> Q&A + swarm агентов → драфт схемы → апрув
Создание карточки со связями Workflow 3 из SKILL.md: type → path → frontmatter → ## Related (hub + 2 siblings) → engine.py touch Карточки-сироты — мёртвое знание, скилл не закроет задачу без связей
Импорт из CRM/внешнего источника engine.py initenforce.py --applyenrich.py tags --applyenrich.py swarm-links --apply Экспорт из HubSpot, Notion, OneNote или Apple Notes становится неотличим от карточек, написанных вручную
Spaced repetition забытого engine.py creative 5 <vault> + cron 5 самых старых карточек всплывают в warm для повторения

Расписание

Decay + health запускаются ночью, dedup + MOC — по воскресеньям. Целевые метрики: health ≥ 90, broken_links = 0, покрытие описаний ≥ 80%, доля устаревших (>90 дней) меньше 20%.

OpenClaw cron:

openclaw cron add --name "autograph-daily" \
  --cron "0 3 * * *" --tz "Europe/Amsterdam" \
  --session isolated --tools exec,read \
  --message "uv run ~/.openclaw/skills/autograph/scripts/engine.py decay /path/to/vault && uv run ~/.openclaw/skills/autograph/scripts/graph.py health /path/to/vault"

openclaw cron add --name "autograph-weekly" \
  --cron "0 4 * * 0" --tz "Europe/Amsterdam" \
  --session isolated --tools exec,read \
  --message "uv run ~/.openclaw/skills/autograph/scripts/dedup.py /path/to/vault --apply && uv run ~/.openclaw/skills/autograph/scripts/moc.py generate /path/to/vault"

Системный cron работает аналогично через crontab:

0 3 * * *  cd /path/to/vault && uv run ~/dev/autograph/skills/autograph/scripts/engine.py decay . >/tmp/autograph-decay.log 2>&1
5 3 * * *  cd /path/to/vault && uv run ~/dev/autograph/skills/autograph/scripts/graph.py health . >/tmp/autograph-health.log 2>&1
0 4 * * 0  cd /path/to/vault && uv run ~/dev/autograph/skills/autograph/scripts/moc.py generate . >/tmp/autograph-moc.log 2>&1

Как работает забывание

Модель забывания построена на трёх механизмах и настраивается через schema.decay.

1. Счётчик обращений (spacing effect). Каждый touch увеличивает access_count. Чем чаще карточку открывали, тем медленнее она забывается:

strength = 1 + ln(access_count)
effective_rate = base_rate / strength
relevance = max(floor, 1.0 − effective_rate × days_since_access)

Карточка, к которой обращались 5 раз, забывается примерно в 2.6 раза медленнее той, к которой обратились один раз.

2. Доменно-специфичные скорости. У разных типов знаний разная скорость устаревания:

Тип Rate Half-life Обоснование
contact 0.005 ~100 дней Люди редко «протухают»
crm 0.008 ~62 дня Сделки имеют средний цикл
learning 0.010 ~50 дней Знания тускнеют умеренно
project 0.012 ~42 дня У проектов есть дедлайны
daily 0.020 ~25 дней Дневные заметки быстро теряют актуальность
default 0.015 ~33 дня Фолбэк для всего остального

3. Постепенное всплывание. touch повышает карточку на один tier: archive → cold → warm → active. Поле last_accessed выставляется на середину интервала — без повторного касания карточка естественно съезжает обратно вниз.

Что внутри

autograph/
├── .claude-plugin/
│   ├── plugin.json         # Manifest (Claude Code, OpenClaw)
│   └── marketplace.json    # Marketplace entry
├── commands/research.md    # /autograph:research slash command
├── skills/autograph/
│   ├── SKILL.md            # Skill instructions for the model
│   ├── schema.example.json # Generic starting template
│   ├── references/         # Bootstrap workflow, card templates, schema docs
│   ├── scripts/            # 14 engine scripts (stdlib only)
│   ├── tests/              # 220 self-contained tests
│   └── evals/evals.json    # Skill-creator eval cases
└── LICENSE

Скрипты движка:

  • common.py — парсер FM, walk, domain inference, формула decay
  • discover.py — фаза 1: сканирование vault, перечисление кандидатов
  • generate_schema.py — фаза 2A: discovery → драфт схемы
  • swarm_prepare.py / swarm_reduce.py — фаза 2B: bin-pack vault в пачки агентов и консолидация
  • research.py — хелпер для /research: gate + manifests + reduce
  • enforce.py — фаза 4: валидация и авто-фикс по схеме
  • link_cleanup.py — фаза 5: удаление фантомных вики-ссылок
  • enrich.py — фазы 6/8: теги + каталог swarm-ссылок через LLM
  • dedup.py — фаза 7: безопасное слияние + .trash/
  • graph.py — health-score, repair, backlinks, orphans
  • moc.py — генерация Map-of-Content
  • engine.py — decay, touch, creative recall, stats, init
  • daily.py — извлечение сущностей из дневных/memory файлов

Требования: Python 3.11+, uv, Obsidian-хранилище (папка с .md + YAML frontmatter). Опционально: OPENROUTER_API_KEY для enrich.py. Никаких pip install — только stdlib.

Тесты запускаются так:

cd skills/autograph && uv run tests/test_autograph.py

Происхождение

Autograph вырос из smixs/agent-second-brain — Telegram-бота «вторая память», который классифицировал голосовые транскрипты в Obsidian-хранилище и делал вечерний отчёт в 21:00. Движок забывания, health-score и граф-инструменты оказались нужны не только этому боту, а вообще любому агенту, пишущему в vault. Autograph вынес их в общий слой памяти, не зависящий от рантайма.

Итог

Если вы ведёте Obsidian через always-on агента, autograph решает три задачи разом: единая схема для всех рантаймов, автоматическое забывание по модели Эббингауза и поддержание графа связей в порядке. 220 тестов, 14 скриптов на stdlib, MIT-лицензия, плагин для маркетплейса Claude Code. Стоит попробовать, если текущий vault уже перевалил за пару сотен заметок и поиск по нему перестал работать.

Источник: https://github.com/smixs/autograph