Agent-almanac athanor
git clone https://github.com/pjt222/agent-almanac
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/ja/skills/athanor" ~/.claude/skills/pjt222-agent-almanac-athanor-101285 && rm -rf "$T"
i18n/ja/skills/athanor/SKILL.mdアタノール
コードまたはデータの四段階錬金術的変容を実行する — プリマ・マテリアを分解し、その本質を浄化し、目標形態を照明し、精製された出力を合成する。アタノールはすべての段階にわたって安定した熱を維持する炉である。
使用タイミング
- レガシーコードを現代的で構造の良い同等物に変換する時
- 段階的修正が失敗し続ける深く絡み合ったモジュールをリファクタリングする時
- コードベースをあるパラダイムから別のパラダイムに変換する時(手続き型から関数型、モノリスからモジュラー)
- 生の乱雑なデータをクリーンな分析データセットに処理する時
- より単純なリファクタリングアプローチが行き詰まって完全なサイクル変換が必要な時
入力
- 必須: 変換する素材(ファイルパス、モジュール名、またはデータソース)
- 必須: 望ましい最終状態(目標アーキテクチャ、パラダイム、またはフォーマット)
- 任意: 既知の制約(APIを保持しなければならない、データベーススキーマを変更できないなど)
- 任意: 過去の失敗した変換試みとそれが行き詰まった理由
手順
ステップ1: ニグレド — 分解
プリマ・マテリアを構成要素に分解する。神聖なものは何もない; すべてがカタログ化される。
- 素材を完全にインベントリする:
- すべての関数、クラス、モジュール、データエンティティをリストする
- すべての依存関係をマッピングする(インポート、呼び出し、データフロー)
- 隠れた結合を特定する(共有グローバル、暗黙の状態、副作用)
- 隠れた前提を表面化する:
- コードが依存する文書化されていない動作は何か?
- どのエラー条件が暗黙のうちに飲み込まれているか?
- どの順序依存が存在するか?
- アンチパターンと技術的負債をカタログ化する:
- 神オブジェクト、循環依存、コピー&ペーストの重複
- デッドコードパス、到達不能ブランチ、残存機能
- ハードコードされた値、マジックナンバー、埋め込み設定
- ニグレドインベントリを作成する: すべての要素、依存関係、前提、アンチパターンの構造化されたカタログ
期待結果: 素材の完全で容赦ないインベントリ。インベントリは不快に感じるべき — そうでなければ分解が十分に徹底されていない。すべての隠れた前提が明示的になっている。
失敗時: 素材が大きすぎて完全にインベントリできない場合、モジュール境界で分解し、各モジュールを別々のアタノール実行として扱う。依存関係が絡み合いすぎてマッピングできない場合、ドキュメントに頼るのではなく
grep/Grepで実際の呼び出しサイトを追跡する。
ステップ2: メディテート — 焼成チェックポイント
ニグレド中に蓄積された前提をクリアするために
meditateスキルを実行する。
- ニグレドインベントリを脇に置き、精神的コンテキストをクリアする
- 入力で述べた変換目標にアンカーする
- ニグレドがどのようなバイアスを導入したか観察する — 分解が特定のアプローチを不可避に見せたか?
- 早すぎるソリューションのアイデアを「タンジェント」とラベル付けし、目標に戻る
期待結果: 素材を現在の形態に固定されずに評価する準備ができた、クリアで偏りのない状態。目標は現在の形態に制約されるのではなく、新鮮に感じられる。
失敗時: ニグレドの発見が注意を引き続ける場合(特にひどいアンチパターン、保持したくなる巧妙なハック)、書き留めて明示的に脇に置く。目標が現在の形態よりも明確になった時のみ進む。
ステップ3: アルベド — 浄化
本質的なものと偶発的なものを分離する。目標形態に寄与しないものをすべて取り除く。
- ニグレドインベントリから各要素を分類する:
- 本質的: コアビジネスロジック、置き換え不可能なアルゴリズム、重要なデータ変換
- 偶発的: フレームワークのボイラープレート、古いバグへの回避策、互換性シム
- 有毒: アンチパターン、セキュリティ脆弱性、デッドコード
- 本質的な要素を分離して抽出する:
- フレームワークラッパーからコアロジックを引き出す
- データ変換をI/Oから分離する
- 実装からインターフェースを抽出する
- 有毒な要素を完全に削除する — 削除したものとその理由を文書化する
- 偶発的な要素について、目標形態に同等物が存在するか判定する
- アルベドエキストラクトを作成する: クリーンなインターフェースを持つ浄化された本質的ロジック
期待結果: 元の素材のコア価値を表す純粋で分離された関数/モジュールのセット。各ピースは分離してテスト可能。エキストラクトはオリジナルよりも大幅に小さい。
失敗時: 本質的なものと偶発的なものが絡み合いすぎて分離できない場合、まずシームポイント(インターフェース)を導入する。素材が浄化に抵抗する場合、アタノールを続行する前に
dissolve-formが必要かもしれない。
ステップ4: ヒール — 浄化評価
浄化が十分であったか評価するために
healスキルを実行する。
- アルベドエキストラクトをトリアージする: 有毒な残留物がまだ残っているものはないか?
- ドリフトを確認する: 浄化が元の変換目標からドリフトしていないか?
- 完全性を評価する: すべての本質的要素が考慮されているか、早すぎる段階で廃棄されたものはないか?
- 必要に応じてリバランスする: 偶発的と誤って分類された本質的要素を復元する
期待結果: アルベドエキストラクトが完全でクリーンで、照明の準備ができているという確信。本質的なロジックは失われておらず、有毒なパターンは残っていない。
失敗時: 評価で重大なギャップが明らかになった場合、特定されたギャップとともにステップ3に戻る。不完全な素材でキトリニタスに進まない。
ステップ5: キトリニタス — 照明
目標形態を見る。浄化された要素を最適な構造にマッピングする。
- パターン認識: 浄化された要素に適したデザインパターンを特定する
- データフローはパイプ/フィルター、イベントソーシング、CQRSを示唆するか?
- インターフェースはストラテジー、アダプター、ファサードを示唆するか?
- モジュール構造はヘキサゴナル、レイヤード、マイクロカーネルを示唆するか?
- 目標アーキテクチャを設計する:
- 各本質的要素を新しい場所にマッピングする
- コンポーネント間のインターフェースを定義する
- 新しい構造を通じたデータフローを指定する
- 新たに作成する必要があるもの(オリジナルに同等物がないもの)を特定する:
- 重複ロジックを統一する新しい抽象化
- 暗黙の結合を置き換える新しいインターフェース
- サイレントな失敗を置き換える新しいエラーハンドリング
- キトリニタスブループリントを作成する: アルベドエキストラクトから目標形態への完全なマッピング
期待結果: すべての本質的要素に居場所があり、すべてのインターフェースが定義された明確で詳細なブループリント。ブループリントは必然的に感じるべき — 浄化された要素を前提として、この構造が自然にフィットする。
失敗時: 複数の有効なアーキテクチャが競合する場合、入力の制約に対して各アーキテクチャを評価する。明確な勝者が現れない場合、最もシンプルなオプションを選択し、代替案を将来のオプションとして文書化する。
ステップ6: メディテート — 合成前チェックポイント
最終合成の準備のために
meditateスキルを実行する。
- キトリニタスの分析的コンテキストをクリアする
- 合成ガイドとしてキトリニタスブループリントにアンカーする
- 変革についての不安を観察する — 何かが急がされていないか?
- 準備完了を確認する: ブループリントは明確で、素材は浄化され、制約は既知
期待結果: 何を構築する必要があるかについての穏やかな明晰さ。合成フェーズは設計ではなく実行であるべき。
失敗時: ブループリントへの疑念が残る場合、具体的な懸念とともにステップ5を再訪する。不確実性を伴って合成を開始するよりも、ブループリントを洗練する方が良い。
ステップ7: ルベド — 合成
浄化された要素を目標形態に構成する。賢者の石: 動作する最適化されたコード。
- キトリニタスブループリントに従って新しい構造を構築する:
- 指定されたファイル、モジュール、インターフェースを作成する
- 各本質的要素を新しい場所に移行する
- 新しい抽象化とインターフェースを実装する
- コンポーネントを接続する:
- 設計通りにデータフローを接続する
- 新しいパスを通じたエラー伝播を実装する
- 依存性注入またはモジュールローディングを設定する
- 合成を検証する:
- 各コンポーネントは分離して動作するか?(ユニットテスト)
- コンポーネントは正しく構成されるか?(統合テスト)
- 完全なシステムはオリジナルと同じ出力を生成するか?(回帰テスト)
- スキャフォールディングを削除する:
- 一時的な互換性シムを削除する
- 移行補助を削除する
- 古い構造への残りの参照をクリーンアップする
- ルベドアウトプットを作成する: 新しい形態で完全に機能する変容されたコード
期待結果: オリジナルより測定可能に優れた動作するコード: より少ない行数、より明確な構造、より良いテストカバレッジ、より少ない依存関係。変換が完了し、古い形態は引退できる。
失敗時: 合成がブループリントのギャップを明らかにした場合、パッチを当てない — ステップ5(キトリニタス)に戻って設計を修正する。個々のコンポーネントが失敗する場合、完全な統合を試みる前に分離して修正する。ルベドは半変容のキメラを生成してはならない。
バリデーション
- ニグレドインベントリが完了している(すべての要素、依存関係、前提がカタログ化)
- ニグレド/アルベド間のメディテートチェックポイントに合格(前提がクリア)
- アルベドエキストラクトがクリーンなインターフェースを持つ本質的要素のみを含む
- ヒール評価が浄化の完全性を確認
- キトリニタスブループリントがすべての本質的要素を目標形態にマッピング
- キトリニタス/ルベド間のメディテートチェックポイントに合格(合成の準備完了)
- ルベドアウトプットがオリジナルの動作に対する回帰テストに合格
- ルベドアウトプットが測定可能に改善されている(複雑さ、結合、テストカバレッジ)
- 有毒な要素が最終出力に生き残っていない
- 入力からの変換制約が満たされている
よくある落とし穴
- ニグレドの深さのスキップ: 分解を急ぐと、合成中に隠れた結合が表面化する。インベントリに十分に投資する
- 偶発的な複雑さの保持: 巧妙な回避策や「動いているから触れない」コードへの執着。本質的でなければ除去する
- メディテートチェックポイントのスキップ: ある段階からの認知的慣性が次の段階にバイアスをかける。一時停止は構造的であり、任意ではない
- ブループリントなしの合成: キトリニタスが完了する前にコーディングを開始すると、変容ではなくパッチワークが生まれる
- 不完全な回帰テスト: ルベドはオリジナルの動作を再現しなければならない。テストされていないパスはサイレントに壊れる
- キトリニタス中のスコープクリープ: 照明フェーズは元の目標を超える改善の機会を明らかにする。記録するが追求しない — アタノールは仮説的な理想ではなく、述べられた変換に奉仕する
関連スキル
— 単一関数や小さなモジュールの軽量な変換transmute
— 価値の抽出と最適化(ベースコードをゴールドに変える)chrysopoeia
— ステージゲートチェックポイントとして使用されるメタ認知クリアリングmeditate
— 浄化検証に使用されるサブシステム評価heal
— 素材がアタノールには剛性すぎる場合、まず溶解するdissolve-form
— システムレベルの移行パターンのための補完的アプローチadapt-architecture
— 合成後のアーキテクチャレビューreview-software-architecture