boltzgen
BoltzGen is an all-atom diffusion model that generates antibody, nanobody, and de novo miniprotein backbones conditioned on a…
A design campaign only learns when lab outcomes are joined back to the in-silico predictions that produced them. This skill is the wet-lab feedback loop closer: it ingests lab readouts (Adaptyv batch CSVs, internal ELISA plate-reader output, BLI/Octet kinetics, expression QC),
$ npx -y skills add 001TMF/blatant-why --skill by-experiment-results --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/by-experiment-resultsContext preview
The summary Claude sees to decide when to auto-load this skill.
A design campaign only learns when lab outcomes are joined back to the in-silico predictions that produced them. This skill is the wet-lab feedback loop closer: it ingests lab readouts (Adaptyv batch CSVs, internal ELISA plate-reader output, BLI/Octet kinetics, expression QC),
id: "skill_4e182a2c2fad4dcd97f1f24db39eb949" name: "by-experiment-results" display-name: "BY Experiment Results" short-description: "Closes the wet-lab feedback loop — ingests lab readouts (Adaptyv batch CSVs, internal ELISA/BLI/Octet, expression QC), joins them to in-silico features per design_id, diagnoses which predictions matched reality, and pipes calibration findings into the optimizer and knowledge graph. Use when a lab readout file arrives, when validating round-N predictions against round-N-1 lab data, or when computing calibration metrics across an internal screening batch." category: "diagnosis" keywords: "lab readout, experimental validation, calibration, in-silico vs in-vitro, wet-lab feedback, ELISA, BLI, Octet, Adaptyv, ground truth, precision at K, Mann-Whitney, validated finding, falsified finding" version: "1.0" last-updated: "2026-05-20" mcp_tools: ["mcp__by-adaptyv__adaptyv_get_results", "mcp__by-knowledge__knowledge_store_campaign", "mcp__by-knowledge__knowledge_store_failure"]
A design campaign only learns when lab outcomes are joined back to the in-silico predictions that produced them. This skill is the wet-lab feedback loop closer: it ingests lab readouts (Adaptyv batch CSVs, internal ELISA plate-reader output, BLI/Octet kinetics, expression QC), joins them to the per-design feature table the screener emitted, and runs a calibration analysis that asks one question for every in-silico feature:
> **Did this feature actually predict whether the design worked in the lab?**
The answer for each feature is one of: **validated** (in-silico PASS correlated with lab PASS), **contradicted** (predictor pointed the opposite direction), or **inconclusive** (no signal). The diagnosis goes into the knowledge graph with that confidence label so future campaigns start from real-world-calibrated priors, not silicon-only priors.
This skill sits between **by-screening** (which produces in-silico PASS/FAIL) and **by-campaign-optimizer** (which trains the next round). It is the only skill in BY that consumes **ground-truth lab data**.
---
✅ **Use this skill when:**
❌ **Don't use this skill for:**
---
The shortest path from a lab CSV to a calibration report and knowledge-graph update is three CLI calls:
# 1) Normalize the lab readout to canonical schema
python3 scripts/ingest_lab_results.py \
--input experiments/batch_001_adaptyv.csv \
--output campaigns/<target>/<campaign_id>/lab_results.normalized.json \
--assay affinity_bli \
--aggregate median
# 2) Join with in-silico features and run calibration
python3 scripts/diagnose_silico_vs_lab.py \
--lab campaigns/<target>/<campaign_id>/lab_results.normalized.json \
--silico campaigns/<target>/<campaign_id>/screening_results.json \
--output-json campaigns/<target>/<campaign_id>/calibration.json \
--output-md campaigns/<target>/<campaign_id>/calibration_report.md
# 3) Push validated / contradicted findings to the knowledge graph
python3 scripts/update_knowledge_from_lab.py \
--calibration campaigns/<target>/<campaign_id>/calibration.json \
--campaign-id <campaign_id> \
--target <target>✅ **VERIFICATION:** `calibration.json` contains a `features[]` array where each feature has a `verdict` of `validated`, `contradicted`, or `inconclusive`, and `calibration_report.md` opens with a one-line headline like "12 / 18 lab-tested designs bound (67%); ipSAE_min was the strongest validated predictor (p=0.004, AUC=0.81)."
---
| Software | Version | License | Commercial Use | Installation | |----------|---------|---------|----------------|--------------| | Python | >= 3.10 | PSF | ✅ Permitted | system | | pandas | >= 2.0 | BSD-3 | ✅ Permitted | `pip install pandas` | | numpy | >= 1.24 | BSD-3 | ✅ Permitted | `pip install numpy` | | scipy | >= 1.11 | BSD-3 | ✅ Permitted | `pip install scipy` | | openpyxl | >= 3.1 | MIT | ✅ Permitted | `pip install openpyxl` (only for `.xlsx` ingestion) | | scikit-learn | >= 1.3 | BSD-3 | ✅ Permitted | `pip install scikit-learn` (for AUC in calibration) |
**License Compliance:** All third-party packages permit commercial use in AI applications.
**System requirements:** CPU-only; no GPU; no internet (unless pulling Adaptyv results via the MCP tool). All scripts run in seconds for batches up to ~1,000 designs.
---
**Required:**
AI-powered biologics design campaign agent — multi-agent orchestration with BoltzGen, PXDesign, Protenix, and 200+ cloud tools. Antibodies, nanobodies, de novo binders, and beyond.
BoltzGen is an all-atom diffusion model that generates antibody, nanobody, and de novo miniprotein backbones conditioned on a…
Plan, execute, monitor, and assess protein/antibody design campaigns. This skill governs how to size a campaign, track run state,…
Multi-round design campaigns generate scored designs at every iteration. This skill turns that scoring history into actionable…
Most "AI scientist" demos fake reasoning by chaining LLM calls and calling the chain a hypothesis. This skill does the opposite:…
Use the BY MCP database tools to query PDB, UniProt, and SAbDab for target characterization, antibody scaffold selection, and…
BY is a **local-first** agent. The default compute provider is `"local"` (see `.by/config.json` → `compute.default_provider`).…