Autograph — типизированный слой памяти для always-on агентов в Obsidian
📂 Исходный код на GitHubТипизированный слой памяти для always-on агентов (Claude Code, OpenClaw, Hermes, Codex). Schema-as-code для любого Obsidian-хранилища: движок забывания, health-score, ремонт ссылок, генерация MOC.
Проблема 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.py → graph.py health → graph.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 init → enforce.py --apply → enrich.py tags --apply → enrich.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, формула decaydiscover.py— фаза 1: сканирование vault, перечисление кандидатовgenerate_schema.py— фаза 2A: discovery → драфт схемыswarm_prepare.py/swarm_reduce.py— фаза 2B: bin-pack vault в пачки агентов и консолидацияresearch.py— хелпер для/research: gate + manifests + reduceenforce.py— фаза 4: валидация и авто-фикс по схемеlink_cleanup.py— фаза 5: удаление фантомных вики-ссылокenrich.py— фазы 6/8: теги + каталог swarm-ссылок через LLMdedup.py— фаза 7: безопасное слияние +.trash/graph.py— health-score, repair, backlinks, orphansmoc.py— генерация Map-of-Contentengine.py— decay, touch, creative recall, stats, initdaily.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