Communitygithub.com

研究用ハードウェアCAD

カスタム研究用ハードウェアをパラメトリックなbuild123dモデルとして設計し、製造可能なSTEP、STL、DXFファイルをエクスポートします。マイクロ流体チップや金型、光学マウントやブレッドボードアダプター、キュベットやマイクロプレートホルダー、チューブラック、動物行動実験装置、3Dプリント機器用治具などに対応。研究タスクで標準化された実験器具、光学テーブル、ケージシステム、または3Dプリンター・CNC・レーザー加工機と組み合わせる物理部品が必要な場合に使用します。

研究用ハードウェアCAD とは?

このスキルは、研究者やエンジニアが実験用ハードウェアを設計するためのものです。従来のGUIベースのCADツールとは異なり、設計を**パラメトリックなPythonソースコード**として記述し、バージョン管理と自動チェックを可能にします。コアとなる設計プロセスは、まずパーツの接合インターフェース(例えば、マイクロプレートのフットプリントや光学ブレッドボードの穴パターン)の寸法を標準データベースから正確に特定し、その後で実際の形状設計に進むことです。すべての設計は、build123dライブラリを使用してPythonモデルファイル(`*_model.py`)として作成されます。生成プロセスでは、`gen.py`がモデルからSTEP(標準的なCAD交換形式)、STL(3D印刷用)、マニフェストファイルを出力します。その後、`check.py`を使用した数値検証(インターフェース寸法の適合性、幾何学的妥当性、干渉チェック)と、`snapshot.py`を使用した視覚的な確認が必須となります。このスキルは主にコマンドライン環境で動作し、Claude CodeやCursorなどのAIエージェントと連携して、設計指示を実行可能なパラメトリックモデルに変換します。重要な点として、設計ソース(Pythonコード)が一次的な成果物であり、エクスポートされたSTEPファイルを手動で編集することは禁止されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/K-Dense-AI/scientific-agent-skills/tree/main/skills/lab-hardware-cad

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

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

ドキュメント

研究用ハードウェアCAD は何をしますか?

物理的な研究用ハードウェアをパラメトリックなPythonソースとして設計し、STEPを信頼できる成果物としてエクスポートし、製作前に数値的および視覚的に結果を検証します。

研究用ハードウェアの難しい部分は、ほとんどの場合、形状そのものではありません。部品が、公開された標準規格やベンダーの図面で寸法が固定された機器と組み合わされなければならないことです。0.5 mm広すぎるホルダーはプレートリーダーに収まりません。アスペクト比が間違ったチャネルは接合中に潰れます。ボルトパターンが25.0 mmではなく25.4 mmのマウントは光学テーブルに届きません。このスキルは、それらの数値を正しく保ち、チェックするために存在します。

使用するタイミング

実験室用の物理部品(チップ、金型、マウント、アダプター、ホルダー、ラック、ブラケット、エンクロージャー、ジグ、治具、アリーナ、迷路)の設計、モデリング、製作の依頼に使用します。また、既存のSTEPファイルの検査や修正にも使用します。

有限要素解析、流体力学、分子構造、科学プロットには使用しないでください。これらは別のスキルです。

セットアップ

uv venv --python 3.12 .venv-labcad
uv pip install --python .venv-labcad/bin/python "build123d==0.11.1" "matplotlib>=3.8"

build123d 0.11.1 には Python >=3.10,<3.15 が必要で、cadquery-ocp-novtk を通じて OpenCascade カーネルを取り込みます。ホイールは大きいです。プロジェクトごとに一度インストールして再利用してください。

バンドルされているすべてのスクリプトは --help を受け付けます。check.py standards は build123d がインストールされていなくても実行できます。

モデルファイルは解析されるのではなく実行されます。 gen.py、check.py、snapshot.py は *_model.py をインポートし、その build() を呼び出します。これは現在の環境で任意のPythonコードを実行します。これはパラメトリックCADに固有のものです——ソースが設計そのものです。このセッションで作成されたモデルファイル、またはユーザーから信頼できる場所から提供されたモデルファイルのみを実行してください。モデルがインターネット、共有ドライブ、信頼できない同僚から入手したものである場合は、実行する前に読み、そのように伝えてください。

必須ワークフロー

以下の手順を順に実行します。ステップ5と6は必須であり、ステップ5が合格してもステップ6は省略できません。

1. デバイスファミリーへのルーティング

リクエストを読み、分類し、正確に1つのファミリーリファレンスを読み込みます。4つすべてを読み込まないでください。それらは長く、ファミリー間で規則を混在させるとエラーの一般的な原因になります。

部品が以下の場合読み込むもの
チップ、金型、チャネルネットワーク、フローセル、ガスケット、または流体ポートを持つものreferences/microfluidics.md
マウント、ポスト、ブレッドボードアダプター、ケージシステム部品、ビームパス内のフィルターまたはサンプルホルダーreferences/optomechanics.md
プレート、キュベット、チューブ、スライド、またはディッシュ用のアダプター、インサート、ラック、またはホルダーreferences/labware-adapters.md
動物実験用のアリーナ、迷路、頭部固定部品、スパウト、テザー、または押し出し材で取り付けられたエンクロージャーreferences/behavior-rigs.md

部品が真に2つのファミリーにまたがる場合(光学テーブルにボルトで固定するマイクロ流体チップ)は、重要なインターフェースを担当するファミリーを読み込み、次に2つ目のファミリーのインターフェースセクションのみを読みます。応答の中で、どのファミリーにルーティングしたかを述べてください。

2. 形状よりも先にインターフェース寸法を確立する

すべての部品には少なくとも1つの嵌合インターフェースがあります。コードを書く前に、各インターフェースについて以下を書き留めてください。

  • 寸法のソース: 公開標準規格、ベンダー図面、またはユーザーによる測定値。
  • 公称値と公差。
  • 意図するクリアランスまたはインターフェアランスとその理由。

assets/standards.json またはファミリーリファレンスで数値を確認してください。インターフェース寸法を記憶から書かないでください。 数値が標準ファイルまたはリファレンスにない場合は、推測するのではなく、ユーザーにベンダー図面または測定値を尋ねてください。推測されたインターフェース寸法は、このスキルにおいて最もコストのかかる障害モードです。

標準化されたコンポーネントを受け入れる必要があるフィーチャーは、そのコンポーネントの最大実体状態——公称値にそのプラス公差を加えたもの——に対してサイズ設定され、その後でのみクリアランスが与えられます。公称値からサイズ設定された場合、適合するコンポーネントの小さい方の半分にしか適合しません。

python scripts/check.py standards --list
python scripts/check.py standards --show slas-microplate-footprint

バンドルされている標準ID(正確な文字列。バリエーションを推測しないでください): slas-microplate-footprint、slas-microplate-height、slas-microplate-flange、slas-well-positions-96、slas-well-positions-384、slas-well-positions-1536、cuvette-standard-10mm、optical-breadboard-metric、optical-breadboard-imperial、cage-system-30mm、sm1-lens-tube-thread。

部品がこのリストのいずれとも嵌合しない場合、それは一般的で問題ありません。インターフェースがないと宣言し、すべてのインターフェース寸法をそのソース(ユーザー仕様、ベンダー図面、測定値)とともにレポートで未チェックとして名前を付けてください。ギャップを埋めるために関連のない標準に対して宣言しないでください——捏造された宣言は、正直な「誰もこれをチェックしていない」よりも悪いです。

3. 形状よりも先にプロセスを選択する

references/fabrication-limits.md を読んでください。プロセスによって、最小壁厚、最小フィーチャーサイズ、達成可能な公差、および部品がオートクレーブや溶剤との接触に耐えられるかどうかが決まります。FDMは±0.05 mmを保持できません。SLA樹脂は、一般的に後硬化と試験なしでは細胞接触には安全ではありません。プロセスと材料をモデルのdocstringに記録してください。

4. パラメトリックモデルを作成する

<part>_model.py を書いてください。ソースが信頼できる成果物です——エクスポートされたSTEPファイルを手動で編集しないでください。また、メッシュから再生成しないでください。

要件:

  • ユーザーが変更する可能性のあるすべての寸法は、モジュールレベルの名前付き定数であり、名前に単位を含めてください: bore_d_mm、wall_t_mm、post_h_mm。0、1、2を除いて、本体に裸の数値を使用しないでください。
  • build() -> Part を公開してください。gen.py がそれを呼び出します。
  • パラメータを INTERFACE ブロック(標準規格で固定された寸法。標準IDを注釈として付ける)と DESIGN ブロック(自由に選択できる寸法)にグループ化してください。
  • すべての計算された寸法は関数内で導出してください。モジュールレベルでは決して行わないでください。これにより、--param の上書きが実際に適用されるようになります。
  • 部品が適合しなければならない寸法を、それぞれの標準IDと意図とともに返す interfaces() 関数を宣言してください。これにより、ステップ5でインターフェースを機械的にチェック可能にします。intent は、フィーチャーが適合する任意の部品を受け入れなければならない場合(ポケット、ボア、スロット——最大実体状態にクリアランスを加えたもので片側チェック)は "envelope"、この部品自体が適合しなければならない場合(対称バンド)は "match" です。clearance は意図する総クリアランス(mm)であり、非負でなければなりません。この部品の嵌合フィーチャーを制約する寸法のみを宣言してください——嵌合機器のプロパティ(テーブルの縁の境界、典型的なプレートの厚さ)はあなたのインターフェースではありません。バンドルされた標準が適用されない場合は、[] を返してください。
  • 構築されたソリッドから測定されるGO/NO-GOゲージの checks() 関数を宣言してください: 通過または収まる必要があるすべてのもの(ネジ軸、ビーム経路、ポケットに落ちる最大実体状態の嵌合部品)の clear 領域、残らなければならないすべてのもの(リッジ、レッジ、ネジ座)の material 領域、およびユーザーが述べたすべてのサイズ制限の bbox_* 境界。リクエスト内のすべての幾何学的要件を1つのエントリにマッピングしてください。これらは、is_valid、境界ボックス、および宣言された数値では見つけられないエラーを捕捉します。gen.py は生成のたびにこれらを実行し、失敗した場合はビルドを失敗させます。スキーマと実例: references/build123d-patterns.md。
  • プロセス、材料、およびすべてのインターフェースソースをモジュールのdocstringに記述してください。
"""カスタムステージインサート用SLASマイクロプレートキャリア。

プロセス: FDM, PETG, 0.2 mm レイヤー。公差予算 +/-0.3 mm。
インターフェース:
  - プレートポケット: ANSI/SLAS 1-2004 (R2012) フットプリント 127.76 x 85.48 mm, +/-0.25。
  - ステージボルト: ユーザー測定、40.0 mm センター (図面は docs/stage.pdf)。
"""
from build123d import *

# --- インターフェース (標準規格で固定。調整しない) ---
plate_l_mm = 127.76   # ANSI/SLAS 1-2004 公称値
plate_w_mm = 85.48    # ANSI/SLAS 1-2004 公称値
plate_tol_mm = 0.25   # ANSI/SLAS 1-2004; ポケットは公称値+これでサイズ設定
# --- デザイン (自由) ---
pocket_clearance_mm = 0.40   # 片側; FDM, fabrication-limits.md 参照
wall_t_mm = 3.0
floor_t_mm = 2.5
body_h_mm = 12.0


def pocket_mm() -> tuple[float, float]:
    """プレートの最大実体状態に片側クリアランスを加えたポケット。

    公称値からサイズ設定されたポケットは、適合するプレートの約半分で詰まります。
    """
    growth = plate_tol_mm + 2 * pocket_clearance_mm
    return plate_l_mm + growth, plate_w_mm + growth


def interfaces() -> list[dict]:
    """この部品が適合しなければならないもの。`check.py interfaces` がすべてのエントリを検証します。"""
    pocket_l, pocket_w = pocket_mm()
    return [
        {"feature": "プレートポケット長さ", "standard": "slas-microplate-footprint",
         "dimension": "footprint_length", "value": pocket_l,
         "intent": "envelope", "clearance": 2 * pocket_clearance_mm},
        {"feature": "プレートポケット幅", "standard": "slas-microplate-footprint",
         "dimension": "footprint_width", "value": pocket_w,
         "intent": "envelope", "clearance": 2 * pocket_clearance_mm},
    ]


def checks() -> list[dict]:
    """構築されたソリッドから測定されるゲージ。要件の数値(プレートMMC、ユーザーの高さ制限)からサイズ設定され、
    ポケットパラメータからではないため、間違ったパラメータがゲージを間違った形状に合わせて縮小することはありません。"""
    depth = body_h_mm - floor_t_mm
    return [
        {"feature": "MMCのプレートがポケットに落ちる",
         "clear": {"box": (plate_l_mm + plate_tol_mm, plate_w_mm + plate_tol_mm, depth),
                   "at": [(0.0, 0.0, floor_t_mm + depth / 2)]}},
        {"feature": "ステージ用に15 mm未満", "bbox_z": {"max": 15.0}},
    ]


def build() -> Part:
    pocket_l, pocket_w = pocket_mm()
    with BuildPart() as carrier:
        Box(pocket_l + 2 * wall_t_mm, pocket_w + 2 * wall_t_mm, body_h_mm,
            align=(Align.CENTER, Align.CENTER, Align.MIN))
        with Locations((0, 0, floor_t_mm)):
            Box(pocket_l, pocket_w, body_h_mm, mode=Mode.SUBTRACT,
                align=(Align.CENTER, Align.CENTER, Align.MIN))
    return carrier.part

ビルダー vs 代数の選択、interfaces() 契約、スケッチ、セレクター、フィレット、ねじ切りインサートボアについては references/build123d-patterns.md を参照してください。

5. チェックを生成して実行する

python scripts/gen.py carrier_model.py --outdir out/
python scripts/check.py facts out/carrier.step
python scripts/check.py interfaces out/carrier.manifest.json
python scripts/check.py geometry out/carrier.step --model carrier_model.py

gen.py は、構築したばかりのソリッドに対してモデルの checks() ゲージも評価し、各 PASS/FAIL を出力し、マニフェストに記録し、失敗した場合は非ゼロで終了します。これにより、自身の宣言された幾何学に違反する部品が黙って成果物になることがありません。check.py geometry は、エクスポートされたSTEP(信頼できる成果物)に対して同じゲージを再実行します。

out/ は便宜上の規則であり、要件ではありません。ユーザーが特定の場所に納品物を要求した場合は、そこに生成するか(--outdir .)、またはSTEP、マニフェスト、DXFをそこにコピーしてから終了してください。out/ の中にのみ存在する納品物は、納品されたことになりません。

gen.py は carrier.step(信頼できる成果物)、carrier.stl(メッシュプレビューと印刷用)、および carrier.manifest.json(ソースハッシュ、解決されたパラメータ、宣言されたインターフェース、ライブラリバージョン、測定された境界ボックス、体積、有効性を記録)を書き出します。マニフェストは来歴記録です——成果物と一緒に保管してください。

check.py facts は is_valid、境界ボックス、体積、表面積、重心、ソリッド数を報告します。is_valid: false を報告する部品は壊れたジオメトリです。先に進む前にソースを修正してください。

check.py interfaces は、モデルが宣言したすべてのエントリを標準データベースに対して評価し、失敗した場合は非ゼロで終了します。何を検証し、何を検証しないかを明確にしてください: 宣言された数値をチェックします——転記された寸法、間違った標準、公称値の代わりにMMCを使用したサイズ設定を捕捉します——しかし、構築されたジオメトリを測定することは決してなく、同じ定数から計算された値は、それに対してチェックされると、設計上ゼロの余裕で合格します。これをジオメトリが正しいという証拠として引用しないでください。facts とスナップショットがジオメトリチェックです。空の宣言リストは合格します。バンドルされたデータベースのいずれとも嵌合しない部品は宣言するものがなく、そのインターフェース寸法は代わりにレポートで未チェックとして名前が付けられます。

内部的なものには、check.py fit ではなく interfaces を使用してください。ポケット、ボア、スロットは部品の外部境界ボックスに現れません。fit はそれを測定します。fit に頼るのは、1つの数値を手動でチェックする場合(--value footprint_length=128.81)か、ガスケットがプレートフットプリントにカットされる場合など、部品自体の輪郭がインターフェースである場合のみです。

アセンブリの場合、部品が干渉しないことを確認してください:

python scripts/check.py clearance out/carrier.step out/lid.step --min 0.3

6. スナップショットを撮り、実際に確認する

python scripts/snapshot.py out/carrier.step --out out/carrier.png

そしてPNGを読んでください。このステップは、すべての生成後およびすべての修正後に必須です。決定論的なチェックが合格しても、それをスキップする理由にはなりません。is_valid と正しい境界ボックスはどちらも、間違った面でカットされたポケット、本体の外側に配置されたボス、またはフィレットがフィーチャーを食い尽くした場合と完全に一致します。これらのエラーは画像では明らかですが、数値では見えません。

レンダリングの限界も理解してください。フレームよりもはるかに小さいフィーチャー——40 mmの部品上の0.3 mmの金型リッジ、プレート上の皿穴段差——は、ビューからまったく判別できない場合があります。画像が解決できないものを見たと報告しないでください。それは見ないことよりも悪いです。そのようなフィーチャーには、スキルに check.py bores などの計測器があります。これはすべての円筒面(直径、軸、位置、スパン、スイープ)を出力するため、再調整できます。

Individual skills in this repo

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

adaptyv

How to use the Adaptyv Bio Foundry API and Python SDK for protein experiment design, submission, and results retrieval. Use this skill whenever the user mentions Adaptyv, Foundry API, protein binding assays, protein screening experiments, BLI/SPR assays, thermostability assays, or wants to submit protein sequences for experimental characterization. Also trigger when code imports `adaptyv`, `adaptyv_sdk`, or `FoundryClient`, or references `foundry-api-public.adaptyvbio.com`.

aeon

This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations requiring specialized algorithms beyond standard ML approaches. Particularly suited for univariate and multivariate time series analysis with scikit-learn compatible APIs.

alphagenome

Look up precomputed AlphaGenome Atlas effects for any GRCh38 single-nucleotide variant (AVI score with Phred and 18 SHAP feature attributions, plus raw and quantile scores for RNA-seq, DNase, ATAC, ChIP-TF, ChIP-histone, CAGE, PRO-cap, splicing, polyadenylation and contact-map tracks), score variants or scan windows on demand with the AlphaGenome model for human and mouse (variant scoring, in silico mutagenesis, REF-versus-ALT track prediction), and build Atlas website deep links. Use when the user mentions AlphaGenome, AlphaGenome Atlas, AVI or AlphaGenome Variant Impact, DeepMind variant effect prediction, or wants to prioritise or mechanistically interpret non-coding, regulatory, splicing, enhancer, promoter, or chromatin-accessibility effects of SNVs from a VCF, credible set, or region. Research use only; not a clinical tool.

analytical-method-validation

Plan, execute, and document validation, verification, and transfer of analytical procedures under the governing framework - ICH Q2(R2) and Q14, USP <1220>/<1225>/<1226>, ICH M10 bioanalytical, CLSI EP, or ISO/IEC 17025. Use for HPLC, LC-MS/MS, GC, CE, ICP-MS, dissolution, qNMR, qPCR, NIR, and ligand binding or cell-based assays whenever the question is whether a procedure is fit for its intended purpose. Triggers include

anndata

Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.

arbor

Autonomously improve a real artifact (code, training recipe, agent harness, data pipeline, prompt) against an objective and an evaluator, using Hypothesis Tree Refinement (HTR) from the Arbor paper. Use this whenever someone wants to iteratively optimize something over many experiments without overfitting — e.g.

arboreto

Infer gene regulatory networks (GRNs) from gene expression data using scalable algorithms (GRNBoost2, GENIE3). Use when analyzing transcriptomics data (bulk RNA-seq, single-cell RNA-seq) to identify transcription factor-target gene relationships and regulatory interactions. Supports distributed computation for large-scale datasets.

astropy

Core Python library for astronomy and astrophysics workflows that need Astropy APIs, including units/quantities, coordinates, FITS I/O, tables, time systems, WCS, and cosmology. Use when implementing or debugging astronomical data analysis code with Astropy.

autoskill

Observe the user

benchling-integration

Benchling Python SDK and REST API integration for registry entities, inventory, ELN entries, workflows, Benchling Apps, and Data Warehouse queries. Use when automating lab data with benchling-sdk or the v2 API.

bgpt-paper-search

Search scientific papers and retrieve structured experimental data extracted from full-text studies via the BGPT MCP server. Returns 25+ fields per paper including methods, results, sample sizes, quality scores, and conclusions. Use for literature reviews, evidence synthesis, and finding experimental details not available in abstracts alone.

bids

>

biopython

Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.

bioservices

Unified Python interface to 40+ bioinformatics services. Use when querying multiple databases (UniProt, KEGG, ChEMBL, Reactome) in a single workflow with consistent API. Best for cross-database analysis, ID mapping across services. For quick single-database lookups use gget; for sequence/file manipulation use biopython.

bulk-rnaseq

End-to-end bulk RNA-seq orchestrator — takes raw FASTQ reads through QC and trimming (FastQC, fastp/Trim Galore), alignment and quantification (STAR, Salmon, featureCounts), assembles a gene-level counts matrix, then hands off to differential expression (pydeseq2), pathway/GSEA enrichment (pathway-enrichment), and publication figures (scientific-visualization). Use whenever the user has bulk RNA-seq reads or quant output and wants a complete, reproducible differential-expression workflow — e.g.

cellxgene-census

Query the CZ CELLxGENE Census programmatically for versioned public single-cell and spatial transcriptomics data. Use when you need population-scale cell metadata, gene expression slices, Census summary counts, source H5AD URIs/downloads, embeddings, spatial Census data, or reference atlas comparisons across organisms, tissues, diseases, assays, and cell types. For analyzing your own local single-cell data use scanpy, anndata, or scvi-tools.

cirq

Google quantum computing framework. Use when targeting Google Quantum AI hardware, designing noise-aware circuits, or running quantum characterization experiments. Best for Google hardware, noise modeling, and low-level circuit design. For IBM hardware use qiskit; for quantum ML with autodiff use pennylane; for physics simulations use qutip.

citation-management

Comprehensive citation management for academic research. Search OpenAlex, PubMed, and Google Scholar for papers, extract accurate metadata, validate citations, and generate properly formatted BibTeX entries. This skill should be used when you need to find papers, verify citation information, convert DOIs to BibTeX, or ensure reference accuracy in scientific writing.

clinical-decision-support

Prepare and validate research-only clinical decision-support evaluation, evidence-profile, cohort, survival, biomarker/model, privacy, and governance artifacts. Use for aggregate or synthetic research documentation and traceability—not patient care or live clinical operation.

clinical-reports

Create safety-bounded draft structures and run local deterministic checks for clinical case, diagnostic, trial, safety, and aggregate research reports. Use only with synthetic, de-identified, or aggregate inputs and verified source-fact manifests; every output requires qualified review.

関連スキル