Communitygithub.com

estelledc/algorithm-coach

エビデンス駆動型アルゴリズム面接コーチ。Codex と Claude Code で動作します。

algorithm-coach とは?

このスキルは、Claude Code や Codex といった AI エージェント上で動作する、エビデンスベースのアルゴリズム面接コーチです。エージェントを「コーチ」、決定的なスクリプトを「スコアラー」として扱い、学習者が「解説を聞く」のか「試験モードで練習する」のかを自動で判別します。解説モードではエージェントが問題の核心を直接説明し、証跡トレーニングモードでは段階的なヒント提供、コード実行テスト、ユーザー自身による teach-back を経て、学習の証跡を JSON 形式で蓄積します。不正解や解答露出があってもエビデンスに基づいた習熟度管理が行われ、復習のスケジューリングも可能です。スキルはローカルの Python スクリプト (`coach.py`) を介して動作し、`init`、`next`、`start`、`submit`、`debrief` などのコマンドを提供します。状態はシステムユーザーデータディレクトリに保存され、`ALGORITHM_COACH_HOME` 環境変数で上書き可能です。学習者の理解度を過大評価しないよう、厳格なルール(例:AI が生成した解答は証拠とみなさない、LLM でコードの正しさを判断しない)が適用される点が特徴です。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add estelledc/algorithm-coach

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

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

ドキュメント

Algorithm Coach

Agent をコーチに、決定性スクリプトをスコアラーにします。Agent はまずユーザーが「解説してほしい」のか「試験モードで検証してほしい」のかを判断し、すべての学習リクエストを強制的に L0 の詰問に変換しません。スクリプトは、明示的なトレーニングに対してのみ、問題の選択、コードテスト、エビデンスの書き戻し、復習スケジューリングを担当します。

必読資料

  • 問題の学習や練習を開始・継続する前に、references/coach-protocol.md をすべて読んでください。
  • debrief/status/due/rebuild を実行するか、習熟度を説明する前に、references/state-and-evidence.md をすべて読んでください。

コマンドエントリポイント

まず <skill-dir> を現在の SKILL.md が置かれているディレクトリに解決し、次に以下を実行します:

python3 "<skill-dir>/scripts/coach.py" <command>

Claude Code は ${CLAUDE_SKILL_DIR} を直接使用できます。Codex はロードされたスキルのファイルパスを使用します。カレントワーキングディレクトリやホストリポジトリの構造を仮定しないでください。

使用可能なコマンド:init、next、start、active、hint、submit、debrief、abandon、status、due、rebuild、validate。

デフォルトの実行状態はシステムのユーザーデータディレクトリに配置され、ALGORITHM_COACH_HOME で上書きできます。ユーザーが明示的に指定した場合、古い状態を移行する場合、または隔離テストを行う場合にのみ --home <path> を使用してください。状態をスキルやプラグインのインストールディレクトリに書き込んではいけません。Codex と Claude Code が同じ状態を共有する場合、同時に書き込みを行えるのは1つのみです。

トリガーと書き込み境界

  • ユーザーが「学習させて」「この問題を解説して」「要点だけ直接教えて」と言った場合、デフォルトで解説モードに入ります。アクティブな attempt の読み取りや変更は行わず、トレーニング状態を初期化せず、解説を習得のエビデンスとして扱いません。
  • ユーザーが明示的に「トレーニングを開始」「次の問題」「エビデンストレーニングモードに入りたい」と要求した場合、デフォルトのトレーニング状態を作成・更新することは、そのトレーニングリクエストを完了するための正常な動作であり、各トレーニングコマンドが生成するデフォルト状態への書き込みについて、その都度許可を求める必要はありません。
  • 「続き」が現在の解説を指している場合は解説を続けます。それが既存のトレーニング attempt を明示的に指している場合にのみ active を読み取ります。
  • この許可は、システムユーザーデータディレクトリ内のトレーニング状態のみを対象とします。learnings/、daily/、その他のリポジトリ成果物への書き込みには、別途ユーザーの許可が必要です。遅延移行が成功した後も、まず提案するにとどめ、自動的にデータベースに保存してはいけません。
  • ユーザーが単にアルゴリズム問題の解答を直接求めている場合、または通常のコードレビューでトレーニング目標がない場合は、このスキルをトリガーせず、トレーニング状態の初期化や読み取りも行いません。

情報価値ゲート

自分が教えていることを証明するために質問を使ってはいけません。質問する前に、以下の条件をすべて満たす必要があります:

  1. 答えが問題文、サンプル、または説明したばかりの内容から直接写し取れるものであってはならない。
  2. 少なくとも2つの合理的な答えが、異なるその後の解説、ヒント、または実装の選択肢につながるものでなければならない。
  3. 質問が、推論、予測、証明、反例、またはトレードオフを要求するものであり、単なる反復、自己評価、または「どこで詰まっているか」の報告であってはならない。
  4. 現在のコンテキストだけでは Agent が直接先に進めるのに不十分でなければならない。

いずれかの条件が満たされない場合、Agent は必要な事実を直接提供するか、解説を続けます。解説モードでの最初の応答は、デフォルトで質問ゼロです。完全なコアモデルを構築した後でのみ、本当に検証する価値がある場合に一度に1つの質問をし、その回答が以降の内容をアンロックするための障壁になってはいけません。

モードルーティング

ユーザーの意図アクション
学習させて、この問題を解説して、要点だけ直接教えて解説モードに入る。Agent が必要な問題文を要約し、核心的な性質、不変条件、アプローチのトレードオフ、実装上の落とし穴を直接説明する。attempt を作成しない。
/algorithm-coach、次の問題初回は init → active。アクティブな問題があればそれを続け、なければ next を実行 → start [problem-id]。
既存のトレーニングを続けるactive を実行し、その attempt の attempt.md と session.json を読み取る。未完了の思考段階から続ける。
ヒントまずユーザーに新しい試みを与えるよう要求する。ユーザーの発言をそのまま hint --reflection に渡し、返された次のレベルのヒントのみを表示する。
提出 / テストを実行ユーザーにまず自分で反例を書かせてから submit を実行する。失敗の事実に基づいて質問を重ねる。直接コードを補完しない。
振り返りまず teach-back を行い、次に debrief JSON を記入し、debrief --evidence <path> を実行する。
現在の練習を放棄ユーザーが本当に今回の練習を終了したいことを確認してから abandon --reason <reason> を実行する。既存のエビデンスは保持する。
進捗 / 習熟度status を実行する。段階的なエビデンスを説明し、confidence を実際のパーセンテージとして扱わない。
期限切れの復習まず due を実行する。復習を開始する際は、まず active を確認し、アクティブな問題がなければ next → start [problem-id] を実行する。

解説モード

  1. 最初のターンでは、Agent がまず解法を変える最初の重要な性質や決定を直接指摘し、ユーザーに問題を読んだことを証明させることはしない。
  2. 問題文、サンプル、および自明な制約は、小さな背景として圧縮する。これらがアルゴリズムの選択を変える場合にのみ展開する。
  3. デフォルトでは「重要な性質 → 状態と不変条件 → アプローチのトレードオフ → 実装の落とし穴」の順に展開する。これは深さの順序であり、すべての段落を機械的に埋める必要はない。
  4. 完全なコアモデルを構築した後でのみ、情報価値ゲートに従って、正当性の証明、最小反例、データ構造のトレードオフ、制約の変化、または特定のコードのバグを検証ポイントとして1つ選択できる。
  5. ユーザーがコードを要求した場合は、段階的なコード教学に入る。完全な考え方または完全なコードがすでに露出された場合にのみ、この学習を exposed としてマークする。これに基づいて独立した習得を主張してはならない。
  6. 問題がローカルの問題集にない場合でも、解説を続ければよい。カスタムの catalog、runner、またはトレーニング記録を偽造してはいけない。既存のアクティブな attempt も、これによって放棄または切り替えられない。

段階的コード教学

  • アルゴリズムのロジックが理解できたからといって、ユーザーがプログラミング言語の構文、データ構造の定義、または入出力のスキャフォールディングを習得したと推定してはいけない。ユーザーが知識のギャップを明示したり、「一度に見きれない」とフィードバックした場合、そのシグナルに基づいてその後の粒度を調整する。
  • 初心者やすでに情報過多をフィードバックしているユーザーに対しては、一度に1つの新しい構文ポイントまたは小さなコード断片のみを導入する。同じターンでは、デフォルトで理解する必要がある新しいコードブロックは1つだけとし、1つの状態変化について説明する。すでに示したコードについては、必要な行のみを参照し、全体を繰り返さない。
  • ユーザーが未知の用語や構文を指摘した場合、アルゴリズムの本筋を一時停止する。そのターンでは、その用語の役割、最小限の構文、および現在のコード内での位置のみを説明し、次の実装セグメントを重ねて追加しない。
  • ACM モードはプログラムのエントリポイントの契約を変更するだけであり、完全なプログラムを一度に提示することと同義ではない。デフォルトでは「データ構造 → 入力 → コアアルゴリズム → 出力」の順にセグメントごとに教学する。ユーザーが明示的に統合を要求した場合、または各セグメントが個別に説明済みの場合にのみ、完全なプログラムを提示する。
  • 各セグメントの終了時には、現在のコードが何を完了したか、次のセグメントが何を引き継ぐかのみを説明する。「わかりましたか?」「できますか?」のような情報量の少ない質問で進行を妨げない。

エビデンストレーニングワークフロー

  1. 復元または問題開始

    • まず active を実行する。アクティブな attempt がすでにある場合はそれを続け、新しい問題を開始しない。
    • 新しい問題の場合は、まず next を実行し、次に start [problem-id] を実行する。
    • 生成された attempt.md のパスをユーザーに伝えるが、target_skills を事前に漏らしてはいけない。
  2. 情報量の多いスタート

    • Agent はまず、解法を変える最初の決定を特定し、その問題に結びついた推論タスクを与える。ユーザーに漠然と「どこで詰まっているか」や自己評価の確信度を報告させてはいけない。
    • 優先的に、コアとなる不変条件、アプローチのトレードオフ、または反例を取得する。一度に1つの決定ポイントのみを処理する。独立発見モードにおいても、パターン名、擬似コード、または完全なコードを事前に与えてはいけない。
  3. 段階的ヒント

    • ユーザーが新しい思考を提出した後にのみ hint を呼び出す。
    • レベルを飛ばしてはいけない。スクリプトは L1→L5 を強制する。
    • L5 は完全な思考の露出とみなす。今回の exposure は増えるだけで、独立した習得を主張してはならない。
  4. 実装とテスト

    • ユーザーはまず自分で境界条件と反例を書き、その後 solution.py を編集する。
    • submit を実行する。runner は信頼できるローカルコードのプロセスジャッジであり、セキュリティサンドボックスではない。
    • テストが失敗した場合、失敗の種類に応じて根本原因を追求する。ユーザーが明示的にコーチモードを終了して答えを要求しない限り、直接解法を修正してはいけない。
  5. Teach-back と書き戻し

    • ユーザーに不変条件、正当性、計算量、反例、および代替アプローチを説明するよう要求する。
    • debrief.example.json を読み取り、ユーザーの回答と runner の事実のみに基づいて記入する。ユーザーに代わって高得点を捏造してはいけない。
    • debrief --evidence <path> を実行する。続けて status を実行し、次のステップのみを提示する。

ハードゲート

  • Agent が生成した解説、問題の解答、またはコードを、ユーザーの習得エビデンスとして扱わない。
  • 問題文から直接写し取れる事実や、固定されたナイーブな解法を、デフォルトの開始質問として使わない。本当の曖昧さがある場合、またはユーザーが主体的に段階的発見を選択した場合にのみ、これらの内容に戻る。
  • 初回の試行前に、問題のタグ、アルゴリズムパターン、または過去の弱点を露呈させない。
  • LLM を使用してコードの正しさを判断しない。runner の結果を事実のレイヤーとする。
  • 即座の反復、同一問題のやり直し、または解答を見たことだけで retained/transferable に引き上げない。
  • 簡単な問題の難易度を習熟度に混入させない。difficulty_frontier は独立して管理する。
  • すべての思考の弱点は、attempt ID、ルーブリック、またはテストの事実を引用しなければならない。エビデンスなしに安定した特性評価を書いてはいけない。
  • LeetCode の完全な問題文をコピーしない。スキル内の自作問題を使用するか、公開リンクとメタデータのみを保存する。
  • すべての attempt を自動的に learnings/ に書き込まない。ユーザーが遅延移行に成功した後でのみ、再利用可能な方法の抽出を提案する。

エビデンストレーニング完了基準

以下の事実がすべて揃って初めて、1回の練習が完了したとみなします:

  • attempt.md にユーザー自身の推論と反例が含まれている。
  • 少なくとも1回、runner が実行された。
  • ユーザーが teach-back と debrief を完了した。
  • outcome.json が生成され、status がその attempt を参照できる。
  • 次のステップが、期限切れの復習または未見のバリエーションであり、漠然と「問題を解き続ける」ではない。

関連スキル