max-model: アイデア → 検証済み印刷可能パーツ
依頼内容: ユーザーが /max-model の後に入力したもの(または説明したもの)。
FORGE = このスキルのディレクトリ(例: ~/.claude/skills/max-model); 以下のすべてのパスはこれに対する相対パスです。CLI: $FORGE/bin/forge <cmd>(末尾に一覧)。
環境(README参照): CAD venv $FORGE/.venv-cad(build123d, trimesh, manifold3d, usd-core, opencv, sdf; オーバーライド FORGE_CAD_PY)、オプションAI venv $FORGE/.venv-ai(torch, diffusers, CLIP; オーバーライド FORGE_AI_PY)、text3d と looks で使用。
プリンター: knowledge/printer.json(ベッド、ノズル、レイヤー; 例は knowledge/printers/)。スライシングはユーザーの好みのスライサーに任せます: forgeは検証済みSTLと事前飛行判定(サポート材on/off)を出力して終了します。オプションの slicer_cmd フックにより、forgeが印刷時間とグラム数を報告できます。
2026-10-17のベンチマーク結果(knowledge/benchmark-2026-10-17.md): 完全に指定された部品は実際のSTEPファイルに対して0.96 voxel IoUに達しますが、詳細が推測された場合は0.41~0.82に低下します。印刷一体型機構は、初回ビルドでゼロ融合ギャップの動作スイープを通過しました(作成者のプリンターで実印刷による検証は未実施)。手作業でモデリングされた場合、象徴的/有機的なもののLOOKSは弱点です(手作業でモデリングされたヘルメットは卵のような形状になりました)。text3d/looks/remixパイプラインは、その弱点をカバーするために存在します: 参照パス + Looks Score、有機的フィギュア用のローカルテキスト→3D、スカルプト上へのflexify、象徴的プロップの検索とリミックス。
絶対に曲げないルール
- 数字が先、画像は後。 ジオメトリに関する主張は、ツールの出力(verify/selftest/preflight/grade JSON)またはこのイテレーションで読み取ったレンダリングからのみ行う。記憶からSTLを説明しないこと。
- カスタム部品は 仕様がモデルに優先: 最初に数値的な成功基準を持つ
spec.md+spec.json。 - 1イテレーションにつき1つの変更、すべての
iter_NN/を保持し、フェーズごとに最大6回、その後再計画。 - 動くものはすべて、合格する自己テスト(クリアスイープ + ジャム制御 + 隙間測定)を添えて出荷する。 例外なし。これが機構がこのスキルの強みである理由。
- すべての印刷物は、スライス前に
forge preflightを実行し、その判定でサポート材を決定する。 NO-GO = 先にジオメトリ/向きを修正。印刷一体型/マルチボディ部品もforge export <stl>を実行し、STLではなく3MFを引き渡す: スライサーの自動サポート材が隙間を埋めて部品を溶着するため(CYCLO-11の最初の印刷でこの問題が発生)、STLでは「サポート材オフ」を伝えられない。 - 環境: Blender、OpenSCAD、GPU torch(text3d、looks)は、GPUを隠蔽する一部のエージェントサンドボックス内でクラッシュする可能性があります(Blenderはexit 139)。ステップがセグメンテーションフォールトを起こした場合は、サンドボックス外で実行してください。純粋なPython(build123d、manifold3d、trimesh)はどこでも動作します。
- マイルストーンを簡潔に報告する(選択したルート、最初のレンダリング、時間/グラム数/判定を含む印刷準備完了、ブロッカー): それぞれ1行で、ユーザーが決定すべきことを伝える。チャンネルがファイルをサポートする場合は、主要画像(sheet.png、poster.png)とARファイルを送信する。
- ユーザーの明示的なOKなしに印刷を開始したり、お金を使ったりしないこと。ダウンロードしたモデル: ライセンスを尊重する(CC BY-NC = 販売不可)。
セッション開始(30秒)
ls $FORGE/knowledge/; cat $FORGE/knowledge/{fit-log.md,lessons.md,printer.json}; $FORGE/bin/forge fit show
$FORGE/bin/forge doctor # 赤い行 -> モデリング前に修正または報告
forge fit show で pip_gap がまだ [R](リサーチデフォルト、このプリンターで未測定)の場合: フィットカード(forge mech build fitcard、約1時間、約16 g)がすべての可動部品をキャリブレーションすることを一度伝え、印刷を提案する。
フェーズ0 — ルート(ハンマーではなくパイプラインを選ぶ)
最初に一致したものが採用。ルートを1行でユーザーに伝える。
| ユーザーの要望 | ルート | ツール |
|---|---|---|
| ダウンロード品の変更: 名入れ/テキスト、キーチェーンループ、マグネット、壁の肉厚化、頭のサイズへのスケーリング、底面フラット化、ミラー | REMIX(ダウンロード後、アップグレード) | `forge remix text |
| ユーザーの寸法に基づく実用的なもの: 箱(スライド/プレス蓋)、名入れキーチェーン、看板、スマホスタンド、<もの>用ホルダー、リソファン | MAKE(ジェネレーター; クリアランスは fit.json から; 箱は動作チェック済み) | `forge make box |
| 多数のコピー / 1回の印刷でプロジェクト全体(販売) | PLATE(ベッドをパッキング、アイテムあたりのコスト計算) | `forge plate <stl...> --fill |
| 有名な既存のもの(映画のヘルメット、小道具、人気おもちゃ、人気デバイス用ケース) | FIND(Printables/Thingiverseなどのモデルサイトを自分で検索)、その後REMIX(スケーリング、分割、マグネット、フィット) | web検索、forge split、forge preflight --orient |
| オリジナルの着用可能ヘルメット(「他に誰も持っていないヘルメット」) | TEXT3D --helmet: ネックカット、指定されたヘッドサイズ(デフォルト160x190 + パッド)、3 mmシェル、フェイスプレート+4個のマグネットボス、シームダウンスライス | forge text3d "<スタイル> helmet" --helmet |
| 動くもの(フィジェット、ヒンジ、ギア、ジャイロ、バリソング、パススルー、クリッカー) | MECHKIT(モジュールが適合する場合)、それ以外はMech APIでモデリング | forge mech list/build、lib/mechkit/core.py |
| flexi動物 | SDFボディを設計(lib/sculpt.py)するか、スカルプト(モデルサイト/text3d)を取得 → FLEXIFY | forge flexify、forge sculpt |
| フィギュア / マスコット / 生き物 / 像 | TEXT3D(ローカル、無料、約3.5分)または検索; 両方を提供 | forge text3d "<アイデア>" [--base NAME] |
| カスタムフィットの機能部品(ユーザーのオブジェクト用マウント、ホルダー、アダプター、ケース) | MODEL(以下のフェーズ1~6) | build123dレーン、forge run、forge parts-find |
| 引き出しの整理 / <もの>用インサート | GRIDFINITY(+ 正確なポケット用 PHOTOFIT) | forge gridfinity、forge photofit |
| ベッドに大きすぎる | SPLIT(ピン + シームラベル付き) | forge split |
| 「これは印刷できるか / なぜ失敗したか」 | PREFLIGHT(+ ヒートマップ) | forge preflight、forge heat |
| 見せびらかす / 販売する | SHOWCASE + AR | forge showcase、forge ar |
ルート選定のための正直な品質ノート(作成者測定、2026-10-17): text3dフィギュアは明確に読み取れます(アホロートル、ドラゴン、ゴーストマスコット、サメ)が、60 mmでは細かいディテールが柔らかく、サポート材が必要です。テキストからのflexifyは凹凸が粗くなります(細い脚が融合する)-> flexiにはSDF設計ボディまたは人間によるスカルプトを推奨。手作業による有機的形状は依然としてブロブのように見える -> ヘルメット/キャラクターは手作業でモデリングせず、FIND+REMIXまたはTEXT3Dを使用。
フェーズ1 — ブリーフ(カスタム部品): 数値を伴う仕様
- ユーザーがすでに正確なオブジェクトについて伝えたこと(デバイスモデル、寸法、写真)。 1b. 名前のあるものについては参照パス: 実物の6~9枚の参照画像/最高評価のデザインを検索し、それらを見る; spec.mdに「## 形状」を記述(プロポーション、2~3の特徴的なディテール、どのバリエーション)。これを省略すると、ベンチのバリソングが平たい棒になり、スパイラルフィジェットが間違ったおもちゃになりました。
- 寸法: 調べる、決して思い出さない(ベンチ: プーリーを思い出して0.41 IoU)。
forge parts-find "<パーツ>" [--download]+forge step2stl; Web経由でデータシートを取得; 参照画像をWeb検索。出典をspec.mdに明記。ユーザーが所有しており検索できないオブジェクトの場合: PHOTOFIT(forge photofit mat-> キャリブレーションマットを100%で印刷 -> 写真撮影 -> 約0.3 mm以内の輪郭)がノギス数字よりも優れています。 - ユーザーにのみ、見つからないことを尋ねる: 1メッセージ、<= 4つの質問、それぞれにデフォルト値を設定。
out/<名前>/spec.md+spec.json(テンプレート/)を作成。フィットインターフェースの推定値はestimateとマーク。- 「仕様準備完了: <1行> -- 構築してよいですか?」; リスクの低い沈黙には、指定されたデフォルトで進める。
フェーズ2 — レーン + 計画
| レーン | 使用場面 |
|---|---|
| b123d(デフォルト) | 機能/寸法/フィット重視の部品、エンクロージャ、MechKitモジュール |
| scad | 単純な部品または1つのBOSL2プリミティブ(ねじ山) |
sdf(lib/sculpt.py) | 自分でデザインする有機的なボディ: スムーズなユニオン、フラットベース、常に水密(ヤモリのレシピ) |
mesh(lib/meshkit.py、manifold3d) | ダウンロード/AIメッシュの編集、大規模ブーリアン、flexify、分割(OCCは10万トライアングルのスカルプトで失敗) |
| bpy | レンダリング、ボクセルリメッシュ、テキスト主体のアート |
計画をパーツファイルの先頭にコメントとして記述: 機能を関数として、パラメータブロックをmm単位で、クリアランスは fit.get("pip_gap"/"slide_gap"/...) から取得(0.3をハードコードしない)、原点はZ=0で底面中央、印刷向きを設計(最大平坦面を下に、オーバーハング<= 45、ブリッジ< 18、壁>= 2.0)、ビルド順序、アサートリスト。 |
フェーズ3 — 小ステップで構築
イテレーションごと: 1つの変更 -> forge run part.py --lane <レーン> --spec spec.json --name <名前> -> verify.json/REPORT.mdを読む(ボリューム/bboxは期待される変更によって変化したか?変化なし = ブーリアンがドロップされた) -> sheet.pngを一度読む -> 批評 -> 次の変更。
- 可動部品 = Mech API(
lib/mechkit/core.py):Mech(名前, パーツ, 固定, [Motion(名前, 駆動, [Move...], control=[...])])->selftest()ですべてのポーズをスイープ、その全経路に沿ってジャム制御を実行、隙間を正確に測定。チェックよりも構築による衝突防止: ピボットを中心とした円弧/球はギャップを一定に保つ(ジャイロ、flexiジョイント); 各可動体のスイープボリュームを平面の同じ側に保つ(バリソングピボット)。ギア:lib/gears.py。宣言ではなく測定:forge mech ratio <名前> [--motion M --driven PART --driver PART]でメカニズムをポーズさせ、出力を解放し、接触のない間隔を二分探索 -> 測定された比率 + バックラッシュ(ratio.json、宣言された比率と矛盾するとexit 3)。サイクロイダル減速機:forge mech build cyclo11(lib/cycloid.py正確なプロファイル + アンダーカットチェック)。スタジオレンダリング:forge showcase <dir> --style studio --still hero|cutaway|exploded、--ghost、--annotate。 - ループ内での事前飛行 オーバーハングのあるものすべて:
forge preflight out/<名前>/<名前>.stl。 - 名前のあるオブジェクト: メカニクスパス後のLooks Score:
forge looks out/<名前>/<名前>.stl --target "<もの>"(クリーンレンダリングでCLIP; 検証済み: 人間 > v2 > v1 バリソングとランク付け)。< 30% = メカニクスではなく形状(プロポーション、特徴的なディテール)を反復。v1とv2を推測ではなくこれで比較。 - 厳格なルール: 1つのビューから判断しない; カッターの重ね合わせ 0.05 mm(同一平面上の面はゼロ厚のスキンを作り、ピンを溶着する: 測定ギャップ 0.0 ではなく 0.3); 同じ失敗が2回 -> サブパーツ番号を印刷して再診断; 最大6回のイテレーション、その後再計画するかFINDルートへ。 すべての仕様キーが合格、selftest合格(可動体)、事前飛行がGO/GO+SUPPORTS、ビジュアルチェックリストがすべてyesになったら終了。
フェーズ4 — フィット
- 最初にキャリブレーション: 印刷一体型の隙間は
fit.jsonから取得。pip_gap が [V] になるまで、すべてのPIP設計には事前飛行CAUTIONが付く。フィットカードは、1回の印刷でpip_gap(スピナー .15~.40)とpip_vgap(ヒンジ .25~.45)を測定: その後、「しっかりひねった後、最も小さい数字で自由に回転するものは?」と尋ねる ->forge fit set pip_gap <n> --from "fitcard <日付>"(およびpip_vgap)。すべてのMechKit/flexify/gridfinityビルドが自動的に読み取る。 - 嵌合部品 / ユーザーのオブジェクト周辺の部品: 組み立てポーズチェック
bin/verify --assembly a.stl b.stl --clearance <fit> --move-b=x,y,z; photofit/parts-findからのオブジェクトのダミー。 - フィットカードがカバーしないインターフェースタイプ(ねじ山、スナップフィット、プレスフィット)または推定寸法のみにクーポン: <= 10分、3バリエーション、浮き出しラベル。
フェーズ5 — 印刷準備 + 引き渡し
forge preflight <stl> [--slice]-> 判定 + サポート材決定。有機的/傾斜した部品:forge preflight <stl> --orient(傾きを試行; あるヘルメットは約20度を必要とした)。forge heat <stl>で赤/黄のサポートヒートマップを作成し、ユーザーに表示。- サポート材 = 事前飛行の判断: GO -> オフ; GO+SUPPORTS -> オン/自動; NO-GO -> 先に修正(ナイフエッジ接触、融合ギャップ、収まらない ->
forge split)。「SUPPORTS: OFF(必須)」 = 自動サポートトラップ(水平から30度未満の平坦な下面が、異なるボディの上に2 mm未満で位置する; プリンタープロファイル内のsupport_angle/support_trap_gap): サポート材はオフのままにしなければならない。そうしないと隙間が溶着される。 2b. 常に、印刷一体型/マルチボディファイルをユーザーに渡す前に:forge preflight <stl>を実行し、次にforge export <stl>を実行(自動的に判定に従う; 名前は_SUPPORTS-OFF.3mf/_SUPPORTS-ON.3mfで終わる)。3MFをユーザーに渡し、「このファイルを開き、サポートボックスがファイル名と一致することを確認し、他は変更しないでください」と伝える。事前飛行がNO-GO(サポート材が必要だが、サポート材が溶着する)の場合は、エクスポートする前にジオメトリを修正(平坦な下面を45度に面取り、向きを再設定)。 - エクスポートされた3MF(またはプレーンな単一ボディ部品の場合はSTL)を、ステップ2のサポート材決定と通常のプロファイルを使用して、あなたの好みのスライサーでスライスする。forgeは3MFを介してサポート材のチェックボックスを設定するだけです。(オプション:
knowledge/printer.jsonにslicer_cmdを設定すると、preflight --slice/plate --sliceが時間とグラム数を報告します。) - ユーザーに表示: シートまたはショーケースポスター + 時間/グラム数(フックが設定されている場合) + 判定 + 1行レシピ。サイズ/フィットが問題となる場合は、
forge ar <stl>(USDZ: iPhone/Vision Proで実寸プレビューとして開く; Quest用GLB)を提供。 - ユーザーのOKなしに印刷を開始しない: 「ベッドは空ですか? <名前> を開始します、約<時間>、 g。」
- 「<名前> 印刷準備完了: <時間>、 g、<判定>」と報告。販売?
forge showcase <dir>でmp4/gif + listing.md(コスト、推奨価格、ライセンス注意喚起)を作成。
フェーズ6 — フィードバック + 学習
- 印刷後、1行: 「何が問題でしたか?(フィット / 見た目 / 強度 / 印刷品質 / 問題なし)」 あらゆる写真を読む。
- 隙間 ->
forge fit set ...(+ fit-log.mdに行を追加)。その他の数値 -> fit-log.md / print-tolerances.md [V]。 knowledge/lessons.mdに1~3行(日付 · プロジェクト · 教訓 · フェーズ)。新しい技法 ->knowledge/<トピック>.md(<= 40行、実行可能スニペット)。part.py+ 仕様を再実行可能なまま残す。開始せずに、関連する1つのアイデア(ショップブレイン)を提供。- スキル/ツールの変更 ->
tests/run_suite.sh(既知の回答チェック)と、能力主張のためのベンチマーク(forge grade、forge looks)-- 改善されたことを証明する。
ツールボックス(forge <cmd>)
(以下、原文では forge <cmd> の一覧が続いていましたが、翻訳指示の「truncated for translation」により省略されています。)