On this page Система флеш-карточек с интервальными повторениями. Создавайте карточки из фактов или текста, общайтесь с флеш-карточками через ответы свободным текстом с оценкой агента, генерируйте викторины из транскриптов YouTube, просматривайте карточки по расписанию, экспортируйте и импортируйте колоды в CSV.
Skill metadata¶
| Source | Опционально — установка hermes skills install official/productivity/memento-flashcards |
| Path | optional-skills/productivity/memento-flashcards |
| Version | 1.0.0 |
| Author | Memento AI |
| License | MIT |
| Platforms | macos, linux |
| Tags | Education, Flashcards, Spaced Repetition, Learning, Quiz, YouTube |
| ## Reference: full SKILL.md | |
| > [!info] | |
| > Ниже приведено полное определение навыка, которое Hermes загружает при активации этого навыка. Именно эти инструкции видит агент, когда навык активен. |
Memento Flashcards — Spaced-Repetition Flashcard Skill¶
Overview¶
Memento предоставляет локальную файловую систему флеш-карточек с интервальными повторениями. Пользователи могут общаться со своими флеш-карточками, отвечая свободным текстом, а агент оценивает ответ перед планированием следующего повторения. Используйте навык, когда пользователь хочет: * Запомнить факт — превратить любое утверждение в карточку Вопрос/Ответ * Учиться с интервальными повторениями — просматривать карточки с адаптивными интервалами и оценкой ответов агентом * Пройти викторину по видео YouTube — получить транскрипт и сгенерировать викторину из 5 вопросов * Управлять колодами — организовывать карточки в коллекции, экспортировать/импортировать CSV
Все данные карточек хранятся в одном JSON-файле. Внешние API-ключи не требуются — вы (агент) генерируете содержимое флеш-карточек и вопросы викторин напрямую. Стиль ответа пользователю в Memento Flashcards: * Используйте только обычный текст. Не используйте Markdown-форматирование в ответах пользователю. * Делайте отзывы и комментарии к викторинам краткими и нейтральными. Избегайте лишних похвал, подбадриваний или длинных объяснений.
When to Use¶
Используйте этот навык, когда пользователь хочет: * Сохранять факты как флеш-карточки для последующего повторения * Просматривать карточки с интервальными повторениями * Сгенерировать викторину из транскрипта видео YouTube * Импортировать, экспортировать, просматривать или удалять данные флеш-карточек
Не используйте этот навык для общих вопросов и ответов, помощи с кодом или задач, не связанных с памятью.
Quick Reference¶
| Намерение пользователя | Действие |
|---|---|
| «Запомни, что X» / «сохрани это как флеш-карточку» | Сгенерировать карточку В/О, вызвать memento_cards.py add |
| Пользователь отправляет факт, не упоминая флеш-карточки | Спросить «Хотите сохранить это как флеш-карточку Memento?» — создавать только после подтверждения |
| «Создай флеш-карточку» | Спросить В, О, коллекцию; вызвать memento_cards.py add |
| «Покажи мои карточки» | Вызвать memento_cards.py due, показывать карточки по одной |
| «Проведи викторину по [YouTube URL]» | Вызвать youtube_quiz.py fetch VIDEO_ID, сгенерировать 5 вопросов, вызвать memento_cards.py add-quiz |
| «Экспортируй мои карточки» | Вызвать memento_cards.py export --output PATH |
| «Импортируй карточки из CSV» | Вызвать memento_cards.py import --file PATH --collection NAME |
| «Покажи мою статистику» | Вызвать memento_cards.py stats |
| «Удали карточку» | Вызвать memento_cards.py delete --id ID |
| «Удали коллекцию» | Вызвать memento_cards.py delete-collection --collection NAME |
| ## Card Storage | |
| Карточки хранятся в JSON-файле по пути: | |
Никогда не редактируйте этот файл напрямую. Всегда используйте подкоманды memento_cards.py. Скрипт обрабатывает атомарные записи (запись во временный файл, затем переименование) для предотвращения повреждений. |
|
| Файл создаётся автоматически при первом использовании. | |
| ## Procedure | |
| ### Creating Cards from Facts | |
| ### Activation Rules | |
| Не каждое фактическое утверждение должно стать флеш-карточкой. Используйте трёхуровневую проверку: | |
| 1. Явное намерение — пользователь упоминает «memento», «флеш-карточка», «запомни это», «сохрани эту карточку», «добавь карточку» или аналогичные фразы, явно запрашивающие флеш-карточку → создайте карточку напрямую, подтверждение не требуется. | |
| 2. Неявное намерение — пользователь отправляет фактическое утверждение без упоминания флеш-карточек (например, «Скорость света — 299 792 км/с») → сначала спросите: «Хотите сохранить это как флеш-карточку Memento?» Создавайте карточку только после подтверждения пользователя. | |
| 3. Нет намерения — сообщение является задачей по программированию, вопросом, инструкцией, обычным разговором или чем-то, что явно не является фактом для запоминания → НЕ активируйте этот навык. Пусть другие навыки или поведение по умолчанию обработают запрос. |
Когда активация подтверждена (уровень 1 напрямую, уровень 2 после подтверждения), создайте флеш-карточку: Шаг 1: Превратите утверждение в пару Вопрос/Ответ. Используйте этот формат внутри:
Turn the factual statement into a front-back pair.
Return exactly two lines:
Q: <question text>
A: <answer text>
Statement: "{statement}"
Шаг 2: Вызовите скрипт для сохранения карточки:
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py add \
--question "What year did World War 2 end?" \
--answer "1945" \
--collection "History"
"General" по умолчанию.
Скрипт выводит JSON с подтверждением созданной карточки.
Manual Card Creation¶
Когда пользователь явно просит создать флеш-карточку, спросите у него:
1. Вопрос (лицевая сторона карточки)
2. Ответ (обратная сторона карточки)
3. Название коллекции (опционально — по умолчанию "General")
Затем вызовите memento_cards.py add, как показано выше.
Reviewing Due Cards¶
Когда пользователь хочет повторить, получите все карточки, подлежащие повторению:
Это возвращает JSON-массив карточек, гдеnext_review_at <= now. Если нужен фильтр по коллекции:
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py due --collection "History"
Агент: В каком году пала Берлинская стена? Пользователь: 1991 Агент: Почти. Берлинская стена пала в 1989. Следующее повторение — завтра. (агент вызывает: memento_cards.py rate --id ABC --rating hard --user-answer "1991") Следующий вопрос: Кто был первым человеком, ступившим на Луну? Правила: 1. Показывайте только вопрос. Ждите ответа пользователя. 2. Получив ответ, сравните его с ожидаемым ответом и оцените: * correct — пользователь правильно назвал ключевой факт (даже если сформулировал иначе) * partial — правильное направление, но не хватает ключевой детали * incorrect — неправильно или не по теме 3. Вы ОБЯЗАНЫ сообщить пользователю правильный ответ и результат. Будьте краткими, используйте обычный текст. Формат: * correct: «Верно. Ответ: {answer}. Следующее повторение через 7 дней.» * partial: «Почти. Ответ: {answer}. {что он упустил}. Следующее повторение через 3 дня.» * incorrect: «Не совсем. Ответ: {answer}. Следующее повторение завтра.» 4. Затем вызовите команду оценки: correct→easy, partial→good, incorrect→hard. 5. Затем покажите следующий вопрос.
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py rate \
--id CARD_ID --rating easy --user-answer "what the user said"
--rating retire для этого.
Spaced Repetition Algorithm¶
Оценка определяет следующий интервал повторения: | Оценка | Интервал | ease_streak | Изменение статуса | |---|---|---|---| | hard | +1 день | сброс на 0 | остаётся learning | | good | +3 дня | сброс на 0 | остаётся learning | | easy | +7 дней | +1 | если ease_streak >= 3 → retired | | retire | навсегда | сброс на 0 | → retired | * learning : карточка активно в ротации * retired : карточка не будет появляться в повторениях (пользователь её освоил или вручную убрал) * Три последовательных оценки «easy» автоматически отправляют карточку в retired
YouTube Quiz Generation¶
Когда пользователь отправляет URL YouTube и хочет викторину:
Шаг 1: Извлеките ID видео из URL (например, dQw4w9WgXcQ из https://www.youtube.com/watch?v=dQw4w9WgXcQ).
Шаг 2: Получите транскрипт:
{"title": "...", "transcript": "..."} или ошибку.
Если скрипт сообщает missing_dependency, скажите пользователю установить зависимость:
Шаг 3: Сгенерируйте 5 вопросов для викторины из транскрипта. Используйте следующие правила:
You are creating a 5-question quiz for a podcast episode.
Return ONLY a JSON array with exactly 5 objects.
Each object must contain keys 'question' and 'answer'.
Selection criteria:
- Prioritize important, surprising, or foundational facts.
- Skip filler, obvious details, and facts that require heavy context.
- Never return true/false questions.
- Never ask only for a date.
Question rules:
- Each question must test exactly one discrete fact.
- Use clear, unambiguous wording.
- Prefer What, Who, How many, Which.
- Avoid open-ended Describe or Explain prompts.
Answer rules:
- Each answer must be under 240 characters.
- Lead with the answer itself, not preamble.
- Add only minimal clarifying detail if needed.
question и answer. Если проверка не пройдена, повторите попытку один раз.
Шаг 5: Сохраните карточки викторины:
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py add-quiz \
--video-id "VIDEO_ID" \
--questions '[{"question":"...","answer":"..."},...]' \
--collection "Quiz - Episode Title"
video_id — если карточки для этого видео уже существуют, он пропускает создание и сообщает о существующих карточках.
Шаг 6: Представляйте вопросы по одному, используя тот же процесс оценки свободного текста:
1. Покажите «Вопрос 1/5: ...» и ждите ответа пользователя. Никогда не включайте ответ или подсказку о его раскрытии.
2. Ждите, пока пользователь ответит своими словами
3. Оцените ответ, используя промпт для оценки (см. раздел «Просмотр карточек по расписанию»)
4. ВАЖНО: Вы ОБЯЗАНЫ ответить пользователю с обратной связью, прежде чем делать что-либо ещё. Покажите оценку, правильный ответ и когда карточка будет в следующий раз к повторению. Не переходите молча к следующему вопросу. Будьте краткими, используйте обычный текст. Пример: «Не совсем. Ответ: {answer}. Следующее повторение завтра.»
5. После показа обратной связи вызовите команду оценки, а затем покажите следующий вопрос в том же сообщении:
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py rate \
--id CARD_ID --rating easy --user-answer "what the user said"
Export/Import CSV¶
Экспорт:
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py export \
--output ~/flashcards.csv
question,answer,collection (без строки заголовка).
Импорт:
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py import \
--file ~/flashcards.csv \
--collection "Imported"
--collection.
Statistics¶
Возвращает JSON с: *total: общее количество карточек
* learning: карточки в активной ротации
* retired: освоенные карточки
* due_now: карточки, ожидающие повторения прямо сейчас
* collections: разбивка по названиям коллекций
Pitfalls¶
- Никогда не редактируйте
cards.jsonнапрямую — всегда используйте подкоманды скрипта, чтобы избежать повреждений - Сбои транскрипции — некоторые видео YouTube не имеют английского транскрипта или транскрипты отключены; сообщите пользователю и предложите другое видео
- Опциональная зависимость —
youtube_quiz.pyтребуетyoutube-transcript-api; если отсутствует, скажите пользователю выполнитьpip install youtube-transcript-api - Большие импорты — импорт CSV с тысячами строк работает нормально, но вывод JSON может быть объёмным; суммируйте результат для пользователя
- Извлечение ID видео — поддерживаются оба формата URL:
youtube.com/watch?v=IDиyoutu.be/ID
Verification¶
Проверьте вспомогательные скрипты напрямую:
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py stats
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py add --question "Capital of France?" --answer "Paris" --collection "General"
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py due