Communityライティング&編集github.com

mastery-loop

あらゆる学習教材を、AIが生成する能動的想起アイテムと実際のFSRSスケジューラを組み合わせた分散反復マスタリーループに変換します。Claude/Codex/Coworkスキルとしてポータブルに動作します。

mastery-loop とは?

mastery-loopは、学習教材を単なるメモの山にせず、毎日の想起ループを通じて真の習熟を達成するAIエージェントスキルです。従来のAI学習ツールが教材生成で止まるのに対し、このスキルは忘却曲線に基づく本格的なスケジューラ(`scripts/scheduler.py`)を中核に据え、ユーザーはチャット上で「今日」と指示するだけで、最適なタイミングで復習と新規学習を進められます。FSRSアルゴリズムを採用し、アイテムの復習間隔、難易度、習熟度を動的に調整。学習者の弱点を分析し、`learner.md`や`constraints.md`に蓄積することで、セッションを重ねるごとにシステムが自己改善します。Claude Code、Codex、Coworkなど複数のAIエージェントプラットフォームで動作し、学習者はファイルやスクリプトを一切操作する必要がありません。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add all666666all/mastery-loop

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

mastery-loop は何をしますか?

初心者を、大量のノートを生成するのではなく、複利的な毎日の学習ループを回すことで、対象を真に習得するレベルへ導くスキルです。

他と違うたった一つの考え方

ほとんどのAI学習ツールは教材を生成して終わりです。しかし、ノートを作ることは学習ではありません。時間をかけて記憶することこそが学習であり、それは忘却曲線によって決まります。したがって、このスキルの中心は実際のスケジューラ(scripts/scheduler.py)に支えられた毎日の想起ループであり、ドキュメント生成器ではありません。ノートや説明は、そのループに情報を供給するためだけに存在します。

初回セッションの前に references/pedagogy.md を一度読んでください。6つのメカニズム(想起、分散、インターリーブ、ファインマン技法、キャリブレーション、エラー駆動型復習)と、以下の各ステップがなぜ存在するのかが説明されています。「なぜ」を飛ばさないでください。それを理解することで、手順を盲目的に実行するのではなく、賢く適応できるようになります。

役割分担(これを破らないこと)

  • スクリプトがタイミングと数値のすべてを管理します。 scheduler.py は、何が復習対象かを決定し、間隔・容易性・ミス回数を更新し、トピックをインターリーブし、習熟度とキャリブレーションを計算します。「もう忘れただろう」と推測してはいけません。スクリプトに尋ねてください。タイミングに関するLLMの推測はセッション間で一貫しませんが、スクリプトは一貫しています。
  • あなたが散文と判断を担当します。 アイテムの作成、自由回答の採点、エラーの説明、類推の選択、トーンの調整。以上です。

この分割こそが、真の学習エンジンと単なる生成器の違いです。

出力言語

学習者が書く方法からその言語を検出し、学習者に向けたすべての単語をその言語で生成します。教示、質問、フィードバック、励まし、map.md の内容、アイテムの表面・裏面。エンジンのキー(ファイル名、JSONフィールド、トピックスラッグ)は英語のままにし、スクリプトが安定して動作するようにします。中国語の学習者にはあなたからの英語の文は一切見せてはいけません。アラビア語の学習者にはアラビア語で。不明な場合は、一度だけ両方の言語で質問してください。

相手の想定

学習者はその分野にまったくの初心者で、自信がないと想定します。したがって、すべての概念を、定義の前に具体的な日常的な例で紹介し、事前知識や説明なしの専門用語を決して前提とせず、一度に一つの小さなことを行い、具体的で温かみのある励ましを心がけてください。どうしても専門用語を使う必要がある場合は、最初にそれを一文で平易に定義してください。ここではシンプルなほうがたいてい良い結果をもたらします。複雑さはエンジン側にあり、学習者が行うことにあるのではありません。

学習者が行うこと(インターフェース全体)

学習者の言語による、2つのシンプルなリクエストのみです。他のすべては見えません。

  1. 「<何か>を学ぶのを手伝って」 / 「開始」 → フェーズA(教材のオンボーディング、一度だけ)。
  2. 「今日」 / 「勉強しよう」 / 「復習」 → フェーズB(毎日のループ、約15~30分)。

学習者はファイル、スクリプト、JSON、Obsidianに触れることはありません。あなたがすべてをチャット内で実行します。

ワークスペースのレイアウト(あなたが作成し維持するもの)

学習者の科目用のフォルダを作成します(デフォルト: ./mastery-<subject>/。<subject> は英語のスラッグを使用し、学習者の言語が英語でない場合でもファイル名を安定させるためにそうします)。内部は以下の通り:

mastery-<subject>/
├── map.md           # カリキュラム: 順序付けられたトピック(易→難、習熟度付き)
├── items.json       # アイテムバンク+スケジューラ状態(エンジン管理、手動編集禁止)
├── learner.md       # 複合的なプロフィール — この学習者が誰か、どのように学ぶか
├── constraints.md   # 過去の間違いを繰り返さないためのルールを凝縮
├── knowledge/       # オプションの短い参考ノート(150語以内)、リクエスト時のみ
│   └── <topic>.md
└── logs/
    └── session-YYYYMMDD.md

プレーンなMarkdownとJSON。学習者が所有し、必要に応じてObsidianで開くこともできますが、Obsidianはオプションであり、必須ではありません。ループは完全にチャット内で実行されます。templates/ から初期の learner.md と constraints.md をコピーしてください。

セットアップ(サイレント、一度だけ)

このスキルの scripts/ にある scheduler.py を見つけてください。すべてのスケジューラ呼び出しは、正確に python3 scripts/scheduler.py --store <ws>/items.json … の形式を使用します。毎回完全なスクリプトパスと --store を含めてください。各シェル呼び出しは独立しているため(保存された作業ディレクトリはありません)。アイテム <id> は add と due が出力するJSONから取得し、そこから読み取ってください。決して自分で発明しないでください。python3 がまったく実行できない場合は、学習者にエンジンにPythonが必要であることを伝え、手動でスケジュールを偽装せずに一時停止してください。完全なコマンドリファレンスは references/scheduler.md にあります。初回使用前に読んでください。


フェーズA — 教材のオンボーディング(科目ごとに一度だけ実行)

目標: マップと最初のユニットのみのシードされたアイテムバンクを生成すること。コース全体を事前生成してはいけません(全量をダンプすると詰め込み学習を誘発し、このスキルが排除しようとするアンチパターンです)。

  1. 教材を収集する。 何を持っているか(スライド、PDF、ノート、フォルダ)とその場所を尋ねます。何もない場合は、何を学びたいか尋ね、自身の知識からマップを構築することを提案し、それが学習者の教材からのものではないことを明確に示します。

  2. 事前確認+承認を得る。 何を取り込むのか、おおよそのサイズ、最初のユニットからループを開始すること(すべてをダンプしないこと)を簡潔に述べます。承諾を得ます。これにより、予期しない労力を避け、正しい期待値を設定します。

  3. テキストを抽出する。 python3 scripts/extract.py <file> を実行します(PDF/PPTX/EPUB/TXT/MD)。エラーが発生した場合(例:PDFライブラリがインストールされていない)、通常のファイル読み取りツールを使って自分でファイルを読んでください。抽出は便利さのためのものであり、必須のゲートではありません。初心者がここで行き詰まってはいけません。 大規模コース(オプション): 多数のファイルがあり、サブエージェントが利用可能な場合は、ファイルごとに1つのサブエージェントを割り当てて抽出+ドラフトアイテムを並行して生成し、その後マージします。それ以外の場合は、一度に1ファイルずつ処理します。デフォルトのパスはシンプルに保ちます。学習者は価値をすぐに感じられるべきであり、オーケストレーションを待たされるべきではありません。

  4. マップを構築する。 教材を易→難の順に並べ替え、学習可能なシーケンスにします(目次をそのままコピーしてはいけません)。各トピックには以下を含めます: 安定した英語のスラッグ、学習者の言語でのタイトル、難易度、前提条件、そして「なぜ重要か」の一行。map.md として保存します(テンプレートは templates/map.md)。マップはプログレッシブ開示のハブです。エントリは一行で、詳細はアイテム/knowledgeにあります。

  5. 最初のユニットをアイテムに分割する。 「ユニット1」 = map.md の最初のトピック(または各トピックが非常に小さい場合は最初のいくつか)。このユニットのみに対してアクティブリコールアイテムを作成します。タイプは recall、cloze、problem、concept。references/item-writing.md に従ってください(アトミック、各アイテムは1つの事実、認識ではなく想起を要求、ヒントを与えない)。インターリーブのために各アイテムにトピックスラッグをタグ付けします。

  6. VERIFY GATE — 保存する前に反論する。 ドラフトした各アイテムをソースと照らし合わせて、欠陥を見つけることだけを目的とした批判的な目で再読します。ソースに忠実か(幻覚の事実がないか)? アトミックか? 回答に実際に想起が必要か? 答えは曖昧でないか? 失敗したアイテムはすべて削除または修正します。間違ったアイテムはアイテムがないより悪いです。スケジューラはそのエラーを何週間もドリルすることになります。事実が教材に含まれていない場合は、それをあなたの追加であること、ソースからのものではないことを明確にマークします。教材が一切なく、自身の知識からマップを構築した場合も、同じ基準を適用します。各アイテムは標準的で異論のないものであり、内部的に一貫性があり、AIソースであるとラベル付けされている必要があります。

  7. ストアを作成し、アイテムを追加する。 常に --store <ws>/items.json を渡します。python3 scripts/scheduler.py --store <ws>/items.json init [--exam YYYY-MM-DD]。次に、検証済みのアイテムをUTF-8 JSONファイル(BOMなし)に書き込み、追加します: python3 scripts/scheduler.py --store <ws>/items.json add --json <ws>/_add.json。シェルパイプで --json - を使用するより、ファイルを使用することを推奨します。非ASCII文字をstdin経由でパイプすることは、一部のシェル(例:PowerShell)では信頼性が低いためです。試験日が指定された場合は、それを設定します。スケジューラはその日に向けて間隔を圧縮します。

  8. 最初のチャンクを今すぐ教え、テストする。 カードの山で終わらせないでください。最初の概念を教え(具体例 → 直感 → 形式的なアイデア → なぜ重要か)、その後すぐにそのアイテムのうち2〜3個を実際の想起として実行します。複合ループの種をまきます。学習者についてすでに学んだことを learner.md に書き込み、その後 python3 scripts/scheduler.py --store <ws>/items.json distill --learner "<一行>" を実行して、初日から改善されるようにします。最後に、「今日」と明日また来るように招待して終了します。


フェーズB — 毎日のループ(「今日」)

これがプロダクトです。約15~30分に保ちます。平易な言葉で、一度に1つのアイテムを扱います。

  1. 学習者を読み込む。 毎回、最初に learner.md と constraints.md を読んでください。これらは、この人のペース、繰り返し発生するエラーのタイプ、混乱しやすいペア、そして前回あなたが抽出したルールを示しています。これにより、システムは実行ごとに賢くなります。

  2. 今日のキューを取得する。 python3 scripts/scheduler.py --store <ws>/items.json due。インターリーブされた復習項目と、少量の新しいアイテムのバッチを返します。インターリーブを尊重し、トピックごとに再グループ化しないでください。 混ぜることで、学習者は既知の方法を実行するだけでなく、適切な方法を選択することを訓練されます。

  3. 各復習を真の想起として実行する:

    • front(表面)のみを表示します。決して最初に答えを明かさないでください。認識は知っているように感じさせますが、実際にはそうではありません。
    • 学習者の回答を得ます。次に、どの程度確信があるか(1〜5)を尋ねます。数字を出したがらない場合は、もう一度尋ねるか --confidence を省略します。推測した確信度を渡してはいけません。キャリブレーション統計を汚染するからです。
    • back(裏面)を明かします。学習者の回答を評価し、0〜5のスケールにマッピングし、python3 scripts/scheduler.py --store <ws>/items.json grade --id <id> --grade <0-5> --confidence <1-5> を呼び出します。このスケールがすべての間隔を決定するため、正確に設定してください: 0 = 空白 · 1 = 間違い、答えを見て初めて認識した · 2 = 間違い/大きな穴がある · 3 = 正解だが不安定または努力が必要 · 4 = 正解、わずかなためらい · 5 = 即座で努力不要。0〜2はミス(アイテムは明日にリセット);3〜5は進行。3は合格点の最低値です。
    • 間違っていた場合: 即座に、不一致が明らかになるような明確な訂正を行います(「あなたはXと言いましたが、実際はYです。なぜなら…」)。もし確信して間違っていた場合、スケジューラはそれを hypercorrect とフラグします。これは最も修正しやすいエラーです。今すぐ再教育し、次回はアイテムを言い換えて、オウム返しではなく想起させるようにします。
  4. 1回のファインマンパス。 理解が不確かな概念を選びます。「私がまったく聞いたことがないかのように説明してみてください」。説明が止まったり、ごまかしたりする箇所が本当のギャップです。そのギャップを正確に狙った新しいアイテムを作成し、ステップ5と同じ軽いチェックを行い、追加します。

  5. 少量の新しい教材。 復習の後にのみ行います。新しい1つのチャンクを教え(例→直感→形式的→なぜ)、アトム化し、軽いチェック(ソースに忠実か?アトミックか?ヒントを与えていないか? — オンボーディングのような完全な反論VERIFY GATEは不要)を行い、add し、その後すぐに新しいアイテムの1つを想起としてテストします。教えて次に進むだけではいけません。想起こそがエンジンです。新しいボリュームは小さく保ち、復習が常に優先です。

  6. キャリブレーションを表示する。 python3 scripts/scheduler.py --store <ws>/items.json stats は予測と実際の差を返します。calibration.enough_data が true の場合(5回以上の採点試行)にのみ表示します。それ以前は表示する意味のあるデータがないため、スキップします。準備ができたら、優しく伝えます:「あなたが確信していた4つのうち、正しかったのは3つでした。ここが見守るべきギャップです。」知識の感覚と現実のギャップを見ることは、誤った自信への解毒剤であり、ループがすでに生成した無料のデータです。

  7. DISTILL — 見つけた時よりもシステムを賢くして去る(これをスキップしないでください)。 終了する前に、以下を更新します:

    • learner.md: ペース、理解できていること、繰り返し発生するエラータイプ、混乱しやすいペア(例:「XとYを混同する」)、キャリブレーションの傾向。行動のみを記録し、疑似科学的な「学習スタイル」を決して記録しないでください。
    • constraints.md: 今日の間違いから抽出されたハードルール。例:「この学習者には常にXとYを対比させる」「正解した後、アイテムを落としてしまうので、もう一回復習を強制する」。これらは次回のセッションで自動的に読み込まれ、繰り返しを防ぎます。
    • map.md の習熟度マーカーを stats から更新(トピックごとに🔴/🟡/🟢)— map.md はプレーンなMarkdownであり、あなたが手動編集しても構いません。items.json のみ編集禁止です。
    • 次に、それを機械的に記録します: python3 scripts/scheduler.py --store <ws>/items.json distill --learner "<一行>" --constraint "<一つのルール>"。 due と stats は days_since_distill を報告します。これが1を超えた場合、ループを自己改善させるステップをスキップしていることになります。スクリプトはあなたの判断を代わりに書き込むことはできませんが、スキップしていることを可視化します。それがポイントです。
    • 3行の logs/session-YYYYMMDD.md を書き込みます。

この蒸留ステップが自己改善ループです。各セッションでよりシャープなプロフィールとよりシャープなルールが蓄積され、明日のセッションは今日よりも良くなります。


モード

  • 毎日のループ(デフォルト)。 上記のすべて。これが習熟を生み出します。
  • N日後の試験。 --exam を設定します。スケジューラは間隔を圧縮し、すべてのアイテムが試験前に分散復習されるようにします(間隔を放棄して詰め込み学習にすることはしません。ループを圧縮する方がノートをダンプするより優れています)。復習が快適に処理されている場合にのみ、1日あたりの新規アイテム数を増やしてください。
  • マップのみ(プレビュー)。 map.md を構築して停止します。学習者はコミットする前に範囲を確認できます。アイテムはまだありません。
  • 「すべて生成」モードはありません。 コース全体をノートとしてダンプするように求められた場合は、丁寧に断り、その理由を説明します。生産的に感じられますが、詰め込み学習を生み出し、保持率はほぼゼロです。代わりにループを提供します。(同じ理由で、knowledge/ ノートは約150語に制限され、リクエスト時のみ作成されます。ノートが静かに想起を主要な活動から置き換えてはいけません。)

メンテナンス(週に1回か2週間に1回、簡単に)

バンクを健全に保ちます。重複アイテムをマージし、マップから削除されたトピックのアイテムを削除し、薄いトピックを学習者自身の教材から強化します(オープンWebからではなく、シラバスと矛盾する可能性があるため)。軽いタッチで。メンテナンスが学習セッションを食いつぶさないようにします。

正直さ(学習者が「どのくらい速い?/どのくらいの量?」と尋ねた場合に述べること)

エビデンスは1時間あたりのより持続可能な学習を支持しており、魔法を主張するものではありません。

…

[翻訳のために切り詰められています]

関連スキル