Memento Flashcards
目次
間隔反復の暗記カードを作り、復習し、クイズにして、書き出します。
skill の情報
| 提供元 | 追加インストール — hermes 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 全文
Memento Flashcards — 間隔反復の暗記カード skill
概要
Memento は、間隔反復のスケジュールを持った、ファイルベースの暗記カードをローカルに用意します。 使う人は自由な文章で答えられ、エージェントがその答えを採点してから次の復習日を決めます。 次のようなときに使います。
- 事実を覚えたい — どんな文でも Q/A のカードに変えます
- 間隔反復で勉強したい — 期限が来たカードを、間隔を調整しながら、自由記述をエージェントが採点する形で復習します
- YouTube の動画からクイズを出したい — 字幕を取ってきて、5 問のクイズを作ります
- デッキを整理したい — カードをまとまりごとに分け、CSV で書き出し・読み込みします
カードのデータは、すべて1つの JSON ファイルに入ります。外部の API キーは不要です。カードの中身もクイズの問題も、エージェントであるあなたが直接作ります。
Memento Flashcards での返答の書き方:
- プレーンテキストだけを使います。返答に Markdown の書式を使ってはいけません。
- 復習やクイズのフィードバックは短く、淡々と。褒めすぎや励まし、長い説明は避けます。
使いどころ
次のようなときに使います。
- あとで復習するために事実をカードとして保存したい
- 期限の来たカードを間隔反復で復習したい
- YouTube の字幕からクイズを作りたい
- カードのデータを読み込む・書き出す・確認する・削除する
一般的な質問応答、コーディングの相談、記憶に関係のない作業には使いません。
早見表
| 相手のしたいこと | すること |
|---|---|
| 「X を覚えておいて」「これをカードにして」 | Q/A のカードを作り、memento_cards.py add を呼ぶ |
| カードに触れずに事実だけを送ってきた | 「これを Memento のカードとして保存しますか?」と聞き、了解が取れたときだけ作る |
| 「カードを作って」 | 質問・答え・まとまりの名前を聞き、memento_cards.py add を呼ぶ |
| 「カードを復習したい」 | memento_cards.py due を呼び、1枚ずつ出す |
| 「[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 を呼ぶ |
カードの保存先
カードは次の JSON ファイルに保存されます。
~/.hermes/skills/productivity/memento-flashcards/data/cards.jsonこのファイルを直接編集してはいけません。 必ず memento_cards.py のサブコマンドを使ってください。スクリプトのほうは、一時ファイルに書いてから置き換える形で、壊れないように書き込みます。
ファイルは、初回に使ったときに自動で作られます。
手順
事実からカードを作る
発動のルール
事実を述べた文が、すべてカードになるべきとは限りません。次の3段階で判断します。
- はっきりした意思 — 「memento」「フラッシュカード」「これを覚えて」「このカードを保存」「カードを追加」など、カードを求めているのが明らかな言い方 → 確認なしでそのまま作ります。
- 暗黙の意思 — カードに触れずに事実だけを送ってきた場合(例:「光の速さは秒速 299,792 km」)→ 先に聞きます。「これを Memento のカードとして保存しますか?」 了解が取れたときだけ作ります。
- 意思なし — コーディングの依頼、質問、指示、ふつうの会話など、覚えるべき事実ではないことが明らかなもの → この skill をまったく使いません。ほかの skill や通常の動きに任せます。
発動すると決まったら(1 なら直接、2 なら確認のあとで)、カードを作ります。
手順 1: その文を Q/A の組に変えます。内部では次の形式を使います。
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 を出力します。
手動でカードを作る
カードを作ってほしいとはっきり言われたときは、次を聞きます。
- 質問(カードの表)
- 答え(カードの裏)
- まとまりの名前(任意。既定は
"General")
そのうえで、上と同じように memento_cards.py add を呼びます。
期限の来たカードを復習する
復習したいと言われたら、期限の来たカードをすべて取ってきます。
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py duenext_review_at <= now のカードが JSON の配列で返ります。まとまりで絞りたいときは次のようにします。
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")* > > 次の問題です。人類で最初に月面を歩いたのは誰ですか?
ルール:
- 質問だけを見せ、相手の答えを待ちます。
- 答えを受け取ったら、想定していた答えと比べて採点します。
- correct → 肝心の事実が合っている(言い回しが違っていても可)
- partial → 方向は合っているが、核心が抜けている
- incorrect → 間違い、または的外れ
- 正解と出来ばえを必ず伝えます。 短く、プレーンテキストで。次の形式を使います。
- correct: 「正解です。答え: {answer}。次の復習は 7 日後です。」
- partial: 「惜しいです。答え: {answer}。{what they missed}。次の復習は 3 日後です。」
- incorrect: 「惜しいです。答え: {answer}。次の復習は明日です。」
- そのうえで rate コマンドを呼びます。correct→easy、partial→good、incorrect→hard です。
- それから次の問題を出します。
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py rate \
--id CARD_ID --rating easy --user-answer "what the user said"手順 3 を飛ばしてはいけません。 次に進む前に、正解とフィードバックを必ず見せます。
期限の来たカードがなければ、こう伝えます。「今すぐ復習するカードはありません。またあとで見てください。」
打ち切りの指示: 「このカードは終わりにして」と言われたら、いつでもそのカードを復習から完全に外せます。その場合は --rating retire を使います。
間隔反復のアルゴリズム
評価によって、次の復習までの間隔が決まります。
| 評価 | 間隔 | ease_streak | 状態の変化 |
|---|---|---|---|
| hard | +1 日 | 0 に戻る | learning のまま |
| good | +3 日 | 0 に戻る | learning のまま |
| easy | +7 日 | +1 | ease_streak >= 3 なら retired へ |
| retire | 恒久 | 0 に戻る | retired へ |
- learning: 復習の対象に入っているカード
- retired: 復習に出てこないカード(覚えきったか、手動で外したもの)
- 「easy」が 3 回続くと、そのカードは自動で retired になります
YouTube のクイズを作る
YouTube の URL を送られ、クイズを求められたときの手順です。
手順 1: URL から動画 ID を取り出します(例: https://www.youtube.com/watch?v=dQw4w9WgXcQ から dQw4w9WgXcQ)。
手順 2: 字幕を取得します。
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/youtube_quiz.py fetch VIDEO_ID{"title": "...", "transcript": "..."} かエラーが返ります。
スクリプトが missing_dependency を返したら、次を入れてもらうよう伝えます。
pip install youtube-transcript-api手順 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.字幕の先頭 15,000 文字を材料にします。問題を作るのは、LLM であるあなた自身です。
手順 4: 出力が正しい JSON で、ちょうど 5 件あり、それぞれの question と answer が空でない文字列かを確認します。確認に失敗したら、1 回だけやり直します。
手順 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問ずつ出します。
- 「Question 1/5: ...」と見せて、相手の答えを待ちます。答えそのものや、答えを見せてもらえそうなヒントを含めてはいけません。
- 相手が自分の言葉で答えるのを待ちます
- 採点の手引き(「期限の来たカードを復習する」の節)に沿って採点します
- 重要: 次に進む前に、必ずフィードバックを返します。 評価、正解、次の復習日を見せます。黙って次の問題に進んではいけません。短く、プレーンテキストで。例: 「惜しいです。答え: {answer}。次の復習は明日です。」
- フィードバックを見せたあとで、rate コマンドを呼び、同じメッセージの中で次の問題を出します。
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py rate \
--id CARD_ID --rating easy --user-answer "what the user said"- これを繰り返します。どの答えにも、次の問題の前に必ず目に見えるフィードバックを返します。
CSV の書き出しと読み込み
書き出し:
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py export \
--output ~/flashcards.csvquestion,answer,collection の 3 列の CSV ができます(ヘッダー行はありません)。
読み込み:
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py import \
--file ~/flashcards.csv \
--collection "Imported"question、answer、そして任意で collection(3 列目)を持つ CSV を読みます。collection の列がなければ、--collection の引数を使います。
統計
python3 ~/.hermes/skills/productivity/memento-flashcards/scripts/memento_cards.py stats次を含む JSON が返ります。
total: カードの総数learning: 復習の対象に入っているカードretired: 覚えきったカードdue_now: 今まさに期限が来ているカードcollections: まとまりごとの内訳
つまずきやすいところ
cards.jsonを直接編集しないこと — データが壊れないよう、必ずスクリプトのサブコマンドを使います- 字幕が取れないことがある — 英語の字幕がない動画や、字幕が無効になっている動画があります。そのことを伝えて、別の動画を提案してください
- 任意の依存パッケージ —
youtube_quiz.pyにはyoutube-transcript-apiが必要です。入っていなければpip install youtube-transcript-apiを実行してもらいます - 大きな読み込み — 数千行の CSV でも問題なく読めますが、JSON の出力が長くなります。結果は要約して伝えてください
- 動画 ID の取り出し —
youtube.com/watch?v=IDとyoutu.be/IDの両方の形式に対応します
動作確認
補助スクリプトを直接動かして確かめます。
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リポジトリのチェックアウトから試すときは、次を実行します。
pytest tests/skills/test_memento_cards.py tests/skills/test_youtube_quiz.py -qエージェントとしての確認:
- 復習を始めて、フィードバックがプレーンテキストで短く、次のカードの前に必ず正解が入っているかを確かめます
- YouTube のクイズを一通り流して、どの答えにも次の問題の前に目に見えるフィードバックが返るかを確かめます