Communitygithub.com

AlemTuzlak/skills

ユーザーが新しいトピックをゼロから深く学びたいときに使用します。事前インタビュー、調査、エビデンスベースの学習科学に基づいた構造化マークダウンコースと自己完結型のインタラクティブHTMLミニコースを生成します。

skills とは?

このスキルは、成人学習者が新しいトピックをゼロから体系的に、かつ認知心理学の研究に基づいて深く学べるように設計されています。ユーザーが「/teach-me <トピック>」と指示するか、「Xについて教えて」「Xを深く掘り下げて」といった表現を使うと、まず現在の知識レベルや目標、学習スタイルを把握するための事前インタビューを実施します。次に、4つの並列エージェントがオンラインで権威ある記事、ニッチなインフルエンサーのブログ、公式ドキュメント、サブトピックマップを調査します。これらの情報を基に、Pedagogy Foundationに基づく学習科学の原則(具体から抽象への展開、検索練習、分散学習、ワーキングメモリへの配慮、図解ファースト、比喩の健全性、専門用語ゲートなど)を厳格に守った、マークダウン形式のコースと、ブラウザで動作するインタラクティブなHTMLミニコースを生成します。このスキルは、Claude CodeやCursorなど、Claude Codeのスキル定義をサポートするプラットフォームで動作し、深く体系的な学習体験を提供します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AlemTuzlak/skills/tree/HEAD/skills/teach-me

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

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

ドキュメント

/teach-me — エビデンスベースのコースジェネレーター

ユーザーが学びたい任意のトピックについて、自己学習用のマークダウンコース+自己完結型のHTMLミニコースを生成します。成人学習者(CEFR B1読解レベル、事前知識不要)向けに設計され、認知心理学と教育設計研究に基づいています。

使用するタイミング

  • ユーザーが /teach-me <トピック> を呼び出した場合(引数なしの場合はトピックを尋ねる)
  • ユーザーが「Xについて教えて」「Xを学びたい」「Xを深く掘り下げて」「Xのコースを作成して」「Xを一緒に勉強しよう」と言った場合
  • 以下の場合は使用しないでください: 簡単な事実を尋ねる質問(「Xとは何か」— 単に答える)、コードヘルプ、デバッグ、ドキュメント検索、ライブラリAPIの質問(代わりに context7 を使用)

教育法の基盤(作業を開始する前に読むこと)

このスキルは、よく再現性のある学習科学に基づいています。以下のルールは交渉可能なデフォルトではなく、ユーザーが求めているものです:

  1. 具体から抽象へ (Goldstone, Fyfe et al.)。各章は、抽象的な定義の前に、具体的で観察可能なインスタンスで始まります。
  2. 再読よりも検索練習 (Roediger & Karpicke; Rowland 2014 メタ分析)。各章の最後に、3~5個の自由再生プロンプトと1個の章をまたぐコールバックがあります。
  3. 意図的なコールバックによる分散学習 (Cepeda et al. 2006)。主要な概念はすべて、後の少なくとも2つの章で(再定義ではなく)使用されます。
  4. ワーキング例+後方フェーディング (Sweller, Renkl & Atkinson)。初期の章: 完全なワーキング例。中期: 段階的に空白を埋めていく。後期: プロンプトのみ。
  5. 認知負荷理論 (Sweller, Mayer)。1章あたり新しく名前付けられる概念は最大約4つ。一度に導入する難易度の次元は1つ。
  6. セグメント化/カード (Mayer & Pilegard)。各章は250~500語のカードのデッキで、カード1枚につき概念1つ、図1つです。
  7. 図解ファーストの視覚的一貫性 (Mayer マルチメディア原則)。関係概念には図が必須です。装飾的な画像はなし。ラベルは図の上にインラインで、別の凡例にはしないでください。
  8. 比喩の健全性 (Gentner 構造マッピング)。すべての比喩の後に、2文以内に「ここで比喩が通用しなくなる点」を明示する免責事項を記載してください。
  9. 専門用語ゲート (Nathan/Koedinger エキスパートブラインドスポット研究)。すべての専門用語は、初出時に定義するか、以前の章の用語集エントリにリンクしてください。「一般的な」用語であっても例外はありません。
  10. 制約付き自己説明プロンプト (Chi et al.; Bisra et al. 2018 g≈0.55)。カード間に: 「次の文を完成させてください: Xが機能する理由は___」というプロンプトと、トグルで表示される模範解答。
  11. B1読者向けの平易な言葉遣い。平均文長18語以下、最大25語。従属節は1文あたり最大1つ。受動態は10%以下。能動態。二人称。イディオムなし。
  12. 学習者が既に知っていることに基づいて構築する (Ausubel)。事前インタビューでユーザーの既知のドメインを把握し、ライティングガイドがそれらを比喩バンクに変換します。
  13. 状態変化を表示し、説明しない (Larkin & Simon 1987; Tversky & Morrison 2002 把握原則; Wong/Leahy/Marcus/Sweller 2012 一時的情報効果; Tufte スモールマルチプル; Mayer のセグメント化)。散文が連続する状態を説明する場合(「最初にこれ、次にそれ、クラッシュした後は…」)、代わりに2~5パネルの <div class="state-sequence"> を使用してください。すべてのパネルで同じ形状、変化部分に注釈、キャプション=トリガー+不変条件。読者は進化を見るのであって、それについての物語を読むのではありません。

否定されたもの — 決して使用しないでください: 学習スタイル(VAK)、10,000時間ルール、ゲーミフィケーションの連続ログインボーナス/バッジ、「エンゲージメント」のための装飾画像、「右脳/左脳」、「デジタルネイティブ」。

プロセスフロー

digraph teach_me {
  rankdir=TB;
  "呼び出しの解析" [shape=box];
  "既存フォルダ?" [shape=diamond];
  "出力場所" [shape=box];
  "事前インタビュー" [shape=box];
  "調査(4つの並列エージェント)" [shape=box];
  "統合 + OUTLINE.md 作成" [shape=box];
  "ユーザーが章を選択" [shape=box];
  "WRITING_GUIDE.md 作成" [shape=box];
  "章の生成(並列バッチ)" [shape=box];
  "一貫性パス" [shape=box];
  "index.html 構築" [shape=box];
  "フォルダとブラウザを開く" [shape=doublecircle];

  "呼び出しの解析" -> "既存フォルダ?";
  "既存フォルダ?" -> "出力場所" [label="いいえ"];
  "既存フォルダ?" -> "出力場所" [label="拡張 / 新規 / キャンセル"];
  "出力場所" -> "事前インタビュー";
  "事前インタビュー" -> "調査(4つの並列エージェント)";
  "調査(4つの並列エージェント)" -> "統合 + OUTLINE.md 作成";
  "統合 + OUTLINE.md 作成" -> "ユーザーが章を選択";
  "ユーザーが章を選択" -> "WRITING_GUIDE.md 作成";
  "WRITING_GUIDE.md 作成" -> "章の生成(並列バッチ)";
  "章の生成(並列バッチ)" -> "一貫性パス";
  "一貫性パス" -> "index.html 構築";
  "index.html 構築" -> "フォルダとブラウザを開く";
}

フェーズをスキップしないでください。 進捗をTaskCreateで追跡し、ユーザーが現在地を確認できるようにしてください。


フェーズ0 — 呼び出しの解析

  1. 引数からトピックを取得します。引数がない場合は、次のように返信します: 「どのトピックを学びたいですか?技術的なもの(ライブラリ、言語、概念)でも、非技術的なもの(哲学、分野、スキル)でも構いません。」 そして待機します。
  2. トピック検証ガード:
    • トピックが有害な場合(兵器の合成、悪意のあるハッキングの対象、違法行為)— 簡潔に拒否して停止します。説教はしません。
    • トピックが不可能なほど広い場合(プログラミング、科学、すべて)— ユーザーに2~3の具体的な例で絞り込むよう依頼します: 「それは非常に広いですね。'TypeScriptの非同期プログラミングパターン'や'コンパイラの仕組み'のように絞り込みませんか?」 より狭い回答を待ちます。
    • トピックが曖昧だが扱える場合(AI、データベース)— そのまま進みます。インタビューの自由形式の範囲質問でさらに絞り込まれます。
  3. スラッグを計算します: 小文字にし、英数字以外を - に置換し、連続する - を1つにまとめ、先頭と末尾の - を削除します。例: Asynchronous Programming → asynchronous-programming。

フェーズ1 — 既存フォルダの確認

  1. メモリから出力場所を読み取ります(その保存方法についてはフェーズ2を参照)。メモリに場所がない場合、この確認はフェーズ2で場所を収集するまで延期します。
  2. <output-location>/learn-<slug>/ が既に存在するか確認します。
  3. 存在する場合、AskUserQuestion を使用して3つのオプションを提示します:
    • 拡張 — 新しい章を追加したり、特定の章を新しいスタイルノートで再生成したり、調査をリフレッシュして再度選択します。
    • 新規作成 — 既存のフォルダを learn-<slug>-archived-YYYY-MM-DD/ にリネームし、新しいコースを進めます。
    • キャンセル — 停止します。
  4. 拡張の場合: サブオプション — (a) 新しいサブトピックに関する章を追加(以前の OUTLINE.md をコンテキストとして調査にスキップ)、(b) 特定の章番号を新しいノートで再生成(該当する章の作成フェーズにスキップ)、(c) 調査をリフレッシュして章を再選択(以前の OUTLINE.md をマージして完全に再実行)。
  5. 以前のコースを破壊的に上書きしないでください。

フェーズ2 — 出力場所

  1. teach-me-output-location または類似のタグが付いたエントリをメモリで検索します。C:/Users/AlemTuzlak/.claude/projects/F--projects/memory/*.md で Glob を使用し、Grep で teach-me を検索します。
  2. 見つかり、そのパスがまだ存在する場合は、それを使用します。簡潔に表示: 「<path> に書き込みます。」
  3. 見つからない場合、AskUserQuestion で尋ねます:
    • F:/projects/learning/ を使用(フォルダがない場合は作成)— 推奨。
    • 現在の作業ディレクトリを使用 (./)。
    • 別のパスを指定 — ユーザーが「その他」で指定します。
  4. ユーザーが回答した後、尋ねます: 「この場所を今後の /teach-me 実行のデフォルトとして保存しますか?」 — AskUserQuestion で yes/no。
  5. yes の場合、フロントマター type: user と本文にパスを記載したメモリファイル teach_me_output_location.md を作成します。MEMORY.md に1行追加します。
  6. 解決した場所でフェーズ1の既存フォルダ確認を再試行します。

フェーズ3 — 事前インタビュー

2回のラウンドトリップで尋ねます:

ラウンド1 — 4つの構造化質問を含む1つの AskUserQuestion

Q1 [現在の知識]: <トピック>についてどの程度知っていますか?
  - 聞いたことがない
  - 用語は知っているが、実践経験はない
  - 基本的なものを作ったことがある
  - 中級レベルの実践者

Q2 [目標とする習熟度]: 最終的にどのレベルになりたいですか?
  - 概念的な概要のみ
  - 基本的なものを作れるようになりたい
  - 本番品質のものを作れるようになりたい
  - 他人に教えられるようになりたい

Q3 [深さの予算]: どの程度の深さを希望しますか?
  - クイックプライマー(約3~5章)
  - 標準(約6~10章)
  - ディープダイブ(調査したすべて、10~15章以上)

Q4 [練習量]: どの程度の実践練習を希望しますか?
  - 軽め(読書中心)
  - 標準(読書+検索+時々練習問題)
  - 多め(すべての章にワーキング例と練習問題あり)

ラウンド2 — 1つのプレーンテキストメッセージ返信

次のメッセージを正確に送信します(<トピック> を置き換える):

調査を開始する前に、あと2つお聞きします:

1. 既に得意としていることは何ですか? 言語、フレームワーク、分野、趣味など、真剣に取り組んだことのあるものをすべて挙げてください(例: 「TypeScript、React、音楽理論、料理、チェス」)。これらを比喩のソースとして使用し、新しい概念をあなたが既に知っていることに結び付けます。

2. <トピック>内で特定の角度はありますか? それとも広くカバーすべきですか?「任せる」と答えると、全範囲をカバーします。

両方を含む1つの返信を待ちます。カンマ区切りリスト、箇条書き、自由形式など、緩く解析します。

回答を作業用構造体に保存します(後で OUTLINE.md と WRITING_GUIDE.md に書き込みます)。

フェーズ4 — 調査(4つの並列エージェント)

1つのバッチ化された Agent 呼び出し をディスパッチし、4つの general-purpose サブエージェントを含めます。それらは並列に実行されます。各エージェントは自己完結した指示を受け取り、構造化されたレポートを返します。

レーンA — 権威あるコンテンツ。 <トピック> に関するトップ記事、チュートリアル、カンファレンストーク、論文を見つけます。最もシグナルの高い結果を WebSearch + WebFetch します。8~15件を、それぞれの「読む理由」を1行で返し、[article|tutorial|talk|paper] でタグ付けします。

レーンB — ニッチなインフルエンサーと実践者。 <トピック> で知られている特定の人々を見つけます — テクノロジーセレブではなく、このニッチに深く切り込む独自のブログ/ニュースレター/Twitterを持っている実践者。4~8人を、名前、個人アウトレット(ブログURL)、シグネチャーポストURL、フォローする価値がある理由を1行で返します。アウトプットが企業マーケティングだけの人はスキップします。

レーンC — 公式リファレンス。 公式ドキュメント、仕様、リファレンス実装、決定版テキスト。<トピック> がライブラリ/フレームワーク/CLIツールの場合、context7 MCP(resolve-library-id してから query-docs)を使用して現在の公式ドキュメントを取得します。3~8のソースをバージョン情報とともに返します。

レーンD — サブトピックマップと標準言語。 トピックを調査して、1行の説明付きのサブトピックのツリーを生成します(通常8~15のサブトピック)。前提条件を最初に、発展的な内容を最後にした、指導上の順序を提案します。トピックが技術的な場合、公式ドキュメント/本番で最も一般的に使用される標準言語を特定します(例: Temporal → TypeScript または Go; LangGraph → Python)。明示的に次のように述べます: 「標準言語: X、理由はY。」

各エージェントは800語未満で、構造化されて報告します。4つすべてが戻ってきたら、統合します。

フェーズ5 — アウトラインと章の選択

  1. <output-location>/learn-<slug>/OUTLINE.md を次の構造で作成します:
# <トピック>を学ぶ

## あなたの目標(記録済み)
- **現在のレベル**: <Q1の回答>
- **目標習熟度**: <Q2の回答>
- **深さ**: <Q3の回答>
- **練習量**: <Q4の回答>
- **既知のドメイン(比喩バンク)**: <ラウンド2のカンマ区切り>
- **範囲/角度**: <ラウンド2の回答>

## サブトピックマップ(調査より)
1. <サブトピック1> — <1行説明>
2. <サブトピック2> — <1行説明>
...

## 推奨順序
前提条件を考慮し、各ステップの根拠を示した順序。

## 推奨される章(深さの予算に基づく約N章)
提案された章の番号付きリスト。各エントリ: 短いタイトル+カバー内容の1行+推定カード数(1章あたり5~9枚)。

## 標準言語(技術トピックのみ)
<言語と1行の根拠>

## 推奨ソース
- [ソース1](url) — [タイプ] — 読む理由
...

## フォローする価値のあるニッチインフルエンサー
- **名前** — [ブログURL] — シグネチャーポスト: [ポストURL] — フォローする価値がある理由を1行
...
  1. ファイルを自動的に開きます: Bash code --new-window "<OUTLINE.mdの絶対パス>"
  2. 次のメッセージを適宜置き換えてユーザーに返信します:

アウトラインを <絶対パス> に作成し、開きました。

どの章を作成するか返信してください:

  • all — 推奨されるすべての章を作成
  • 1,3,5-7 — 特定の章または範囲
  • 自由形式 — 自分の言葉で焦点を当てる内容を説明
  • reshape — 確定前に追加、削除、マージ、並べ替えを指示

reshape を選択した場合、OUTLINE.md を修正し、再度尋ねます。

  1. ユーザーが reshape と言った場合、メモを取り、OUTLINE.md を修正し、保存し、再度開き、再度尋ねます。確定するまでループします。
  2. 選択を解析して、最終的な順序付けられた章リスト picks = [...] にします。

フェーズ6 — WRITING_GUIDE.md の作成

<output-location>/learn-<slug>/WRITING_GUIDE.md を作成します。このファイルは、すべての章作成エージェントと一貫性パスエージェントの共有ブリーフです。包括的かつ具体的である必要があります。

<skill-dir>/assets/templates/WRITING_GUIDE.template.md のテンプレートを出発点として使用し、ユーザーの記録されたインタビュー回答をプレースホルダー({{TOPIC}}、{{CURRENT_LEVEL}}、{{TARGET_PROFICIENCY}}、{{PRACTICE_LOAD}}、{{KNOWN_DOMAINS}}、{{SCOPE}}、{{CANONICAL_LANGUAGE}})に置き換えます。

また、章作成者には <skill-dir>/assets/COMPONENTS.md のコンポーネントライブラリリファレンスを参照するよう指示します — 作成前にざっと目を通す必要があります。コールアウト、図カード、比較ブロック、タブ、統計カード、プラットフォームピル、ステップリストがすべて利用可能です。一部はマークダウン規約から自動生成され、残りはマークダウン内の明示的なHTMLです。

生成されたファイルが、この SKILL.md の上部にある「教育法の基盤」セクションにリストされている12の教育ルールすべてを適用していることを確認します。ルールがガイドに表現されていない場合は、続行する前に追加します。

フェーズ7 — 章の生成(並列バッチ)

選択された章を、ラウンドごとに3~5の作成サブエージェントの並列バッチで生成します。ラウンドは順次実行されます。

各ラウンドについて:

  1. バッチ内の各章に対して、WRITING_GUIDE.md が共有ブリーフとなる general-purpose Agent サブエージェントをディスパッチします。各サブエージェントは次の指示を受け取ります:
    • 章番号とタイトル
    • アウトラインからの内容
    • 生成のための特定の指示
  2. 各サブエージェントは、フェーズ6の教育ルールに従って、章コンテンツをマークダウンで生成します。
  3. すべてのサブエージェントが完了したら、出力を収集し、<output-location>/learn-<slug>/chapters/ に保存します。
  4. 進行状況をユーザーに報告します。

フェーズ8 — 一貫性パス

すべての章が生成されたら、単一の general-purpose Agent をディスパッチして一貫性パスを実行します。このエージェントはすべての章を読み、以下を確認します:

  • 用語の一貫性
  • 相互参照の正確性
  • 教育ルールの適用
  • 章間のコールバックの存在
  • 比喩の健全性

必要に応じて章を修正します。

フェーズ9 — index.html の構築

  1. <output-location>/learn-<slug>/index.html を作成します。これは、すべての章を1つのページに結合し、ブラウザで表示できる自己完結型のHTMLファイルです。
  2. HTMLファイルには以下を含める必要があります:
    • 目次
    • すべての章のコンテンツ(マークダウンからHTMLに変換)
    • 図のインラインSVG
    • スタイル(CSS)
    • インタラクティブ要素(トグル、クイズなど)のためのJavaScript
  3. ファイルを <output-location>/learn-<slug>/ に保存します。
  4. AskUserQuestion で許可を求めた後、Start を使用してデフォルトブラウザで開きます。

フェーズ10 — フォルダとブラウザを開く

  1. Bash start "<output-location>/learn-<slug>" でフォルダを開きます。
  2. 許可があれば、ブラウザで index.html を開きます。

付録: コンポーネントリファレンス

利用可能なコンポーネントの詳細については、<skill-dir>/assets/COMPONENTS.md を参照してください。

図カード

:::diagram
**図: [タイトル]**

[SVGまたはASCIIアート]

*キャプション: [説明]*
:::

コールアウト

:::tip[覚えておきましょう]
重要なポイント。
:::

:::warning[注意]
よくある間違い。
:::

状態シーケンス

<div class="state-sequence">
  <div class="panel">
    <div class="panel-label">開始</div>
    [状態1の図]
  </div>
  <div class="panel">
    <div class="panel-label">トリガー後</div>
    [状態2の図、変化部分に注釈]
  </div>
</div>
<p class="caption">キャプション: トリガー + 不変条件</p>

Individual skills in this repo

This repo contains 14 individual skills — each has its own dedicated page.

AlemTuzlak/skills

Use when the user wants to write a blog post about a feature, product change, PR, git diff, or any technical topic - accepts marketing briefs, PRs, git refs, codebase paths, or freeform descriptions as input

AlemTuzlak/skills

Use when the user wants to generate a changelog, release notes, or document what changed between versions, tags, or PRs

AlemTuzlak/skills

Use when writing, editing, or organizing documentation, when planning what docs a feature needs, and whenever planning or implementing a new feature or change in a repo (docs ship with the code). Also use when tempted to write docs without showing the discovered readers to the user, without asking for tone, or without loading simple-english and i-have-adhd. Triggers on "write docs for X", "document this feature", "add a guide", "update the docs", "reorganize the docs", "plan feature X", "implement X", or /docs.

AlemTuzlak/skills

Use when a bug is in play: a test fails, CI is red, an API returns the wrong result, a stack trace appears, or the user says it is broken or fix this. Don't use for a new feature with no failure, for types-only work, or for docs.

AlemTuzlak/skills

Use when the user invokes /i-have-adhd, says they have ADHD, or asks for ADHD-friendly output. Also used as a required writing filter by the docs skill. Don't use for marketing copy or after the user says "stop adhd mode" or "normal mode".

AlemTuzlak/skills

Use when a settled change must be turned into an ordered stack of small blocks before anyone implements. Don't use for unsettled intent, typos, comments, formatting, docs-only work, or writing the implementation itself.

AlemTuzlak/skills

Use when the user wants to write a product update email, feature announcement newsletter, or digest email for users or subscribers

AlemTuzlak/skills

Use when the user wants to turn a raw talking-head / screen-share recording into a finished, edited, annotated video plus a full content package. Removes silences, flags mistakes for the user to cut, transcribes, adds transcript-synced overlays (code, on-screen code highlights, word highlights, lists, comparisons, diagrams, section labels, punch-in zooms), renders with original audio, then generates blog/socials/YouTube content. Triggers on "produce a video", "edit my video", "annotate my recording", "/produce-video".

AlemTuzlak/skills

Use when the user runs /prove-it or says prove it, prove the changes, show me in the browser, or asks to prove a UI or API change. Don't use only because the agent is about to say done, for types-only work, or for docs with no behavior to prove.

AlemTuzlak/skills

Use when the user wants to write, draft, or author an RFC (Request for Comments) / technical design doc for a feature, change, or architectural decision. Interactively interviews the user, grounds the proposal in the actual codebase, presents 2-3 concrete API/code-snippet approaches to choose from, then writes a review-ready RFC. Triggers on "write an RFC", "draft an RFC", "RFC for X", "design doc for X", or /rfc.

AlemTuzlak/skills

Use when the change intent is already settled and the agent must map what a behavior change touches before an implementation plan or any code. Use for new features, bug fixes, and refactors that move a boundary. Don't use for typos, comments, formatting, lockfile-only diffs, docs with no code, or while the user is still deciding what they want.

AlemTuzlak/skills

Use when the user wants to transcribe a video or audio file to text with word-level timestamps — spins up a self-contained local Whisper (whisper.cpp) Docker service bundled in this skill and returns transcript.txt, transcript.srt, and word-level transcript.words.json. Also used as a building block by /produce-video. Triggers on "transcribe this video", "get a transcript", "transcribe-video".

AlemTuzlak/skills

Use when the user wants to write a video script for a product demo, feature walkthrough, launch video, or social media video about a feature or product change

AlemTuzlak/skills

Use when the user wants YouTube metadata for a video — a click-worthy title, an SEO/above-the-fold description, tags, and timestamped chapters. Accepts a transcript (ideally timestamped SRT), a topic, a PR, or a freeform description. Used standalone and by /produce-video. Triggers on "youtube title", "youtube description", "youtube chapters", "youtube tags", "youtube metadata", "youtube-copy".

関連スキル