Memento Flashcards
Система карточек с интервальным повторением. Создавайте карточки из фактов или текста, общайтесь с карточками, отвечая свободным текстом, который оценивается агентом, генерируйте викторины из расшифровок YouTube, просматривайте карточки, подлежащие повторению, с адаптивным расписанием, а также экспортируйте и импортируйте колоды в формате CSV.
Метаданные навыка
| Источник | Опционально — установка через vibeos skills install official/productivity/memento-flashcards |
| Путь | optional-skills/productivity/memento-flashcards |
| Версия | 1.0.0 |
| Автор | Memento AI |
| Лицензия | MIT |
| Платформы | macos, linux |
| Теги | Education, Flashcards, Spaced Repetition, Learning, Quiz, YouTube |
Справочник: полный SKILL.md
Ниже приведено полное определение навыка, которое VibeOS загружает при его активации. Это те инструкции, которые видит агент, когда навык активен.
Memento Flashcards — Навык карточек с интервальным повторением
Обзор
Memento предоставляет локальную файловую систему карточек с расписанием интервального повторения. Пользователи могут общаться со своими карточками, отвечая свободным текстом, а агент оценивает ответ, прежде чем запланировать следующее повторение. Используйте его, когда пользователь хочет:
- Запомнить факт — превратить любое утверждение в карточку «вопрос/ответ»
- Учиться с интервальным повторением — просматривать карточки, подлежащие повторению, с адаптивными интервалами и оценкой свободного текста агентом
- Пройти викторину по видео YouTube — получить расшифровку и сгенерировать викторину из 5 вопросов
- Управлять колодами — организовывать карточки в коллекции, экспортировать/импортировать CSV
Все данные карточек хранятся в одном JSON-файле. Внешние ключи API не требуются — вы (агент) генерируете содержимое карточек и вопросы викторины напрямую.
Стиль ответов пользователю для Memento Flashcards:
- Используйте только обычный текст. Не используйте форматирование Markdown в ответах пользователю.
- Делайте отзывы о повторении и викторине краткими и нейтральными. Избегайте лишних похвал, подбадриваний или длинных объяснений.
Когда использовать
Используйте этот навык, когда пользователь хочет:
- Сохранять факты в виде карточек для последующего повторения
- Просматривать карточки, подлежащие повторению, с интервальным повторением
- Сгенерировать викторину из расшифровки видео YouTube
- Импортировать, экспортировать, просматривать или удалять данные карточек
Не используйте этот навык для общих вопросов и ответов, помощи в кодинге или задач, не связанных с запоминанием.
Краткая справка
| Намерение пользователя | Действие |
|---|---|
| «Запомни, что X» / «сохрани это как карточку» | Сгенерировать карточку Q/A, вызвать memento_cards.py add |
| Пользователь отправляет факт, не упоминая карточки | Спросить: «Хотите сохранить это как карточку Memento?» — создавать только при подтверждении |
| «Создай карточку» | Спросить Q, A, коллекцию; вызвать memento_cards.py add |
| «Повтори мои карточки» | Вызвать memento_cards.py due, показывать карточки по одной |
| «Проведи викторину по [URL YouTube]» | Вызвать 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 |
Хранение карточек
Карточки хранятся в JSON-файле по адресу:
~/.vibeos/skills/productivity/memento-flashcards/data/cards.json
Никогда не редактируйте этот файл напрямую. Всегда используйте подкоманды memento_cards.py. Скрипт обрабатывает атомарные записи (запись во временный файл, затем переименование) для предотвращения повреждений.
Файл создается автоматически при первом использовании.
Процедура
Создание карточек из фактов
Правила активации
Не каждое фактическое утверждение должно становиться карточкой. Используйте трехуровневую проверку:
- Явное намерение — пользователь упоминает «memento», «карточка», «запомни это», «сохрани эту карточку», «добавь карточку» или подобные фразы, явно запрашивающие карточку → создайте карточку напрямую, подтверждение не требуется.
- Неявное намерение — пользователь отправляет фактическое утверждение, не упоминая карточки (например, «Скорость света — 299 792 км/с») → сначала спросите: «Хотите сохранить это как карточку Memento?» Создавайте карточку только при подтверждении пользователя.
- Нет намерения — сообщение является задачей по кодингу, вопросом, инструкцией, обычным разговором или чем-то, что явно не является фактом для запоминания → НЕ активируйте этот навык вообще. Позвольте другим навыкам или поведению по умолчанию обработать его.
Когда активация подтверждена (уровень 1 напрямую, уровень 2 после подтверждения), сгенерируйте карточку:
Шаг 1: Превратите утверждение в пару вопрос/ответ. Используйте этот формат внутренне:
Преврати фактическое утверждение в пару «вопрос-ответ».
Верни ровно две строки:
Q: <текст вопроса>
A: <текст ответа>
Утверждение: "{утверждение}"
Правила:
- Вопрос должен проверять запоминание ключевого факта
- Ответ должен быть кратким и прямым
Шаг 2: Вызовите скрипт для сохранения карточки:
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py add \
--question "В каком году закончилась Вторая мировая война?" \
--answer "1945" \
--collection "История"
Если пользователь не указал коллекцию, используйте "Общая" по умолчанию.
Скрипт выводит JSON с подтверждением созданной карточки.
Создание карточки вручную
Когда пользователь явно просит создать карточку, спросите его:
- Вопрос (лицевая сторона карточки)
- Ответ (обратная сторона карточки)
- Название коллекции (опционально — по умолчанию
"Общая")
Затем вызовите memento_cards.py add, как указано выше.
Просмотр карточек, подлежащих повторению
Когда пользователь хочет повторить, получите все карточки, подлежащие повторению:
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py due
Это возвращает JSON-массив карточек, где next_review_at <= now. Если нужен фильтр по коллекции:
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py due --collection "История"
Процесс повторения (оценка свободного текста):
Ниже приведен пример ТОЧНОГО шаблона взаимодействия, которому вы должны следовать. Пользователь отвечает, вы оцениваете, сообщаете правильный ответ, затем оцениваете карточку.
Пример взаимодействия:
Агент: В каком году пала Берлинская стена?
Пользователь: 1991
Агент: Не совсем. Берлинская стена пала в 1989 году. Следующее повторение — завтра. (агент вызывает: memento_cards.py rate --id ABC --rating hard --user-answer "1991")
Следующий вопрос: Кто был первым человеком, ступившим на Луну?
Правила:
- Показывайте только вопрос. Ждите ответа пользователя.
- После получения ответа сравните его с ожидаемым ответом и оцените:
- correct — пользователь правильно указал ключевой факт (даже если сформулировал иначе)
- partial — на правильном пути, но упущена ключевая деталь
- incorrect — неправильно или не по теме
- Вы ОБЯЗАНЫ сообщить пользователю правильный ответ и результат его ответа. Будьте кратки и используйте обычный текст. Используйте этот формат:
- correct: «Верно. Ответ: {answer}. Следующее повторение через 7 дней.»
- partial: «Близко. Ответ: {answer}. {что он упустил}. Следующее повторение через 3 дня.»
- incorrect: «Не совсем. Ответ: {answer}. Следующее повторение завтра.»
- Затем вызовите команду оценки: correct→easy, partial→good, incorrect→hard.
- Затем покажите следующий вопрос.
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py rate \
--id CARD_ID --rating easy --user-answer "что сказал пользователь"
Никогда не пропускайте шаг 3. Пользователь всегда должен видеть правильный ответ и обратную связь, прежде чем вы перейдете дальше.
Если карточек для повторения нет, сообщите пользователю: «Сейчас нет карточек для повторения. Загляните позже!»
Отмена повторения: В любой момент пользователь может сказать «отменить эту карточку», чтобы навсегда удалить ее из повторений. Используйте для этого --rating retire.
Алгоритм интервального повторения
Оценка определяет следующий интервал повторения:
| Оценка | Интервал | ease_streak | Изменение статуса |
|---|---|---|---|
| hard | +1 день | сброс до 0 | остается в обучении |
| good | +3 дня | сброс до 0 | остается в обучении |
| easy | +7 дней | +1 | если ease_streak >= 3 → завершена |
| retire | навсегда | сброс до 0 | → завершена |
- learning: карточка активно участвует в ротации
- retired: карточка не будет появляться в повторениях (пользователь освоил ее или вручную отменил)
- Три последовательные оценки «easy» автоматически завершают карточку
Генерация викторины по YouTube
Когда пользователь отправляет URL YouTube и хочет викторину:
Шаг 1: Извлеките ID видео из URL (например, dQw4w9WgXcQ из https://www.youtube.com/watch?v=dQw4w9WgXcQ).
Шаг 2: Получите расшифровку:
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/youtube_quiz.py fetch VIDEO_ID
Это возвращает {"title": "...", "transcript": "..."} или ошибку.
Если скрипт сообщает missing_dependency, скажите пользователю установить его:
pip install youtube-transcript-api
Шаг 3: Сгенерируйте 5 вопросов викторины из расшифровки. Используйте эти правила:
Вы создаете викторину из 5 вопросов для эпизода подкаста.
Верните ТОЛЬКО JSON-массив ровно с 5 объектами.
Каждый объект должен содержать ключи 'question' и 'answer'.
Критерии отбора:
- Отдавайте приоритет важным, удивительным или основополагающим фактам.
- Пропускайте заполнители, очевидные детали и факты, требующие большого контекста.
- Никогда не возвращайте вопросы типа «правда/ложь».
- Никогда не спрашивайте только дату.
Правила для вопросов:
- Каждый вопрос должен проверять ровно один дискретный факт.
- Используйте четкие, недвусмысленные формулировки.
- Предпочитайте Что, Кто, Сколько, Какой.
- Избегайте открытых запросов типа Опишите или Объясните.
Правила для ответов:
- Каждый ответ должен быть короче 240 символов.
- Начинайте с самого ответа, а не с предисловия.
- Добавляйте только минимальные уточняющие детали, если необходимо.
Используйте первые 15 000 символов расшифровки в качестве контекста. Сгенерируйте вопросы самостоятельно (вы — LLM).
Шаг 4: Проверьте, что вывод является валидным JSON ровно с 5 элементами, каждый из которых имеет непустые строки question и answer. Если проверка не пройдена, повторите попытку один раз.
Шаг 5: Сохраните карточки викторины:
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py add-quiz \
--video-id "VIDEO_ID" \
--questions '[{"question":"...","answer":"..."},...]' \
--collection "Викторина - Название эпизода"
Скрипт дедуплицирует по video_id — если карточки для этого видео уже существуют, он пропускает создание и сообщает о существующих карточках.
Шаг 6: Представляйте вопросы по одному, используя тот же процесс оценки свободного текста:
- Покажите «Вопрос 1/5: ...» и ждите ответа пользователя. Никогда не включайте ответ или подсказку о его раскрытии.
- Ждите, пока пользователь ответит своими словами.
- Оцените его ответ, используя подсказку для оценки (см. раздел «Просмотр карточек, подлежащих повторению»).
- ВАЖНО: Вы ОБЯЗАНЫ ответить пользователю с обратной связью, прежде чем делать что-либо еще. Покажите оценку, правильный ответ и когда карточка будет снова к повторению. Не переходите молча к следующему вопросу. Будьте кратки и используйте обычный текст. Пример: «Не совсем. Ответ: {answer}. Следующее повторение завтра.»
- После показа обратной связи вызовите команду оценки, а затем покажите следующий вопрос в том же сообщении:
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py rate \
--id CARD_ID --rating easy --user-answer "что сказал пользователь"
- Повторяйте. Каждый ответ ОБЯЗАТЕЛЬНО должен получить видимую обратную связь перед следующим вопросом.
Экспорт/Импорт CSV
Экспорт:
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py export \
--output ~/flashcards.csv
Создает CSV с 3 столбцами: question,answer,collection (без строки заголовка).
Импорт:
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py import \
--file ~/flashcards.csv \
--collection "Импортированные"
Читает CSV со столбцами: question, answer и опционально collection (столбец 3). Если столбец collection отсутствует, используется аргумент --collection.
Статистика
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py stats
Возвращает JSON с:
total: общее количество карточекlearning: карточки в активной ротацииretired: освоенные карточкиdue_now: карточки, подлежащие повторению прямо сейчасcollections: разбивка по названиям коллекций
Подводные камни
- Никогда не редактируйте
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
Проверка
Проверьте вспомогательные скрипты напрямую:
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py stats
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py add --question "Столица Франции?" --answer "Париж" --collection "Общая"
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py due
Если вы тестируете из копии репозитория, выполните:
pytest tests/skills/test_memento_cards.py tests/skills/test_youtube_quiz.py -q
Проверка на уровне агента:
- Начните повторение и убедитесь, что обратная связь представлена обычным текстом, кратко и всегда включает правильный ответ перед следующей карточкой
- Запустите процесс викторины по YouTube и убедитесь, что каждый ответ получает видимую обратную связь перед следующим вопросом