Перейти к основному содержимому

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. Скрипт обрабатывает атомарные записи (запись во временный файл, затем переименование) для предотвращения повреждений.

Файл создается автоматически при первом использовании.

Процедура​

Создание карточек из фактов​

Правила активации​

Не каждое фактическое утверждение должно становиться карточкой. Используйте трехуровневую проверку:

  1. Явное намерение — пользователь упоминает «memento», «карточка», «запомни это», «сохрани эту карточку», «добавь карточку» или подобные фразы, явно запрашивающие карточку → создайте карточку напрямую, подтверждение не требуется.
  2. Неявное намерение — пользователь отправляет фактическое утверждение, не упоминая карточки (например, «Скорость света — 299 792 км/с») → сначала спросите: «Хотите сохранить это как карточку Memento?» Создавайте карточку только при подтверждении пользователя.
  3. Нет намерения — сообщение является задачей по кодингу, вопросом, инструкцией, обычным разговором или чем-то, что явно не является фактом для запоминания → НЕ активируйте этот навык вообще. Позвольте другим навыкам или поведению по умолчанию обработать его.

Когда активация подтверждена (уровень 1 напрямую, уровень 2 после подтверждения), сгенерируйте карточку:

Шаг 1: Превратите утверждение в пару вопрос/ответ. Используйте этот формат внутренне:

Преврати фактическое утверждение в пару «вопрос-ответ».
Верни ровно две строки:
Q: <текст вопроса>
A: <текст ответа>

Утверждение: "{утверждение}"

Правила:

  • Вопрос должен проверять запоминание ключевого факта
  • Ответ должен быть кратким и прямым

Шаг 2: Вызовите скрипт для сохранения карточки:

python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py add \
--question "В каком году закончилась Вторая мировая война?" \
--answer "1945" \
--collection "История"

Если пользователь не указал коллекцию, используйте "Общая" по умолчанию.

Скрипт выводит JSON с подтверждением созданной карточки.

Создание карточки вручную​

Когда пользователь явно просит создать карточку, спросите его:

  1. Вопрос (лицевая сторона карточки)
  2. Ответ (обратная сторона карточки)
  3. Название коллекции (опционально — по умолчанию "Общая")

Затем вызовите 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")

Следующий вопрос: Кто был первым человеком, ступившим на Луну?

Правила:

  1. Показывайте только вопрос. Ждите ответа пользователя.
  2. После получения ответа сравните его с ожидаемым ответом и оцените:
    • correct — пользователь правильно указал ключевой факт (даже если сформулировал иначе)
    • partial — на правильном пути, но упущена ключевая деталь
    • incorrect — неправильно или не по теме
  3. Вы ОБЯЗАНЫ сообщить пользователю правильный ответ и результат его ответа. Будьте кратки и используйте обычный текст. Используйте этот формат:
    • correct: «Верно. Ответ: {answer}. Следующее повторение через 7 дней.»
    • partial: «Близко. Ответ: {answer}. {что он упустил}. Следующее повторение через 3 дня.»
    • incorrect: «Не совсем. Ответ: {answer}. Следующее повторение завтра.»
  4. Затем вызовите команду оценки: correct→easy, partial→good, incorrect→hard.
  5. Затем покажите следующий вопрос.
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. Покажите «Вопрос 1/5: ...» и ждите ответа пользователя. Никогда не включайте ответ или подсказку о его раскрытии.
  2. Ждите, пока пользователь ответит своими словами.
  3. Оцените его ответ, используя подсказку для оценки (см. раздел «Просмотр карточек, подлежащих повторению»).
  4. ВАЖНО: Вы ОБЯЗАНЫ ответить пользователю с обратной связью, прежде чем делать что-либо еще. Покажите оценку, правильный ответ и когда карточка будет снова к повторению. Не переходите молча к следующему вопросу. Будьте кратки и используйте обычный текст. Пример: «Не совсем. Ответ: {answer}. Следующее повторение завтра.»
  5. После показа обратной связи вызовите команду оценки, а затем покажите следующий вопрос в том же сообщении:
python3 ~/.vibeos/skills/productivity/memento-flashcards/scripts/memento_cards.py rate \
--id CARD_ID --rating easy --user-answer "что сказал пользователь"
  1. Повторяйте. Каждый ответ ОБЯЗАТЕЛЬНО должен получить видимую обратную связь перед следующим вопросом.

Экспорт/Импорт 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 и убедитесь, что каждый ответ получает видимую обратную связь перед следующим вопросом