重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
adaptyv by k-dense-ai/claude-scientific-skills
npx skills add https://github.com/k-dense-ai/claude-scientific-skills --skill adaptyvAdaptyv Bio 是一家将蛋白质序列转化为实验数据的云端实验室。用户通过 API 或 UI 提交氨基酸序列;Adaptyv 的自动化实验室运行检测(结合、热稳定性、表达、荧光)并在约 21 天内交付结果。
基础 URL: https://foundry-api-public.adaptyvbio.com/api/v1
认证: 在 Authorization 请求头中使用 Bearer token。令牌从 foundry.adaptyvbio.com 的侧边栏获取。
编写代码时,始终从环境变量 ADAPTYV_API_KEY 或 .env 文件中读取 API 密钥——切勿硬编码令牌。首先检查项目根目录下是否存在 .env 文件;如果存在,使用像 python-dotenv 这样的库来加载它。
export FOUNDRY_API_TOKEN="abs0_..."
curl https://foundry-api-public.adaptyvbio.com/api/v1/targets?limit=3 \
-H "Authorization: Bearer $FOUNDRY_API_TOKEN"
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
除 GET /openapi.json 外的每个请求都需要认证。将令牌存储在环境变量或 .env 文件中——切勿将其提交到源代码控制。
安装: uv add adaptyv-sdk (如果不存在 pyproject.toml,则回退到 uv pip install adaptyv-sdk)
环境变量 (在 shell 或 .env 文件中设置):
ADAPTYV_API_KEY=your_api_key
ADAPTYV_API_URL=https://foundry-api-public.adaptyvbio.com/api/v1
from adaptyv import lab
@lab.experiment(target="PD-L1", experiment_type="screening", method="bli")
def design_binders():
return {"design_a": "MVKVGVNG...", "design_b": "MKVLVAG..."}
result = design_binders()
print(f"Experiment: {result.experiment_url}")
from adaptyv import FoundryClient
client = FoundryClient(api_key="...", base_url="https://foundry-api-public.adaptyvbio.com/api/v1")
# 浏览靶点
targets = client.targets.list(search="EGFR", selfservice_only=True)
# 估算成本
estimate = client.experiments.cost_estimate({
"experiment_spec": {
"experiment_type": "screening",
"method": "bli",
"target_id": "target-uuid",
"sequences": {"seq1": "EVQLVESGGGLVQ..."},
"n_replicates": 3
}
})
# 创建并提交
exp = client.experiments.create({...})
client.experiments.submit(exp.experiment_id)
# 稍后:获取结果
results = client.experiments.get_results(exp.experiment_id)
| 类型 | 方法 | 测量指标 | 需要靶点 |
|---|---|---|---|
affinity | bli 或 spr | KD, kon, koff 动力学 | 是 |
screening | bli 或 spr | 是/否结合 | 是 |
thermostability | — | 解链温度 (Tm) | 否 |
expression | — | 表达产量 | 否 |
fluorescence | — | 荧光强度 | 否 |
Draft → WaitingForConfirmation → QuoteSent → WaitingForMaterials → InQueue → InProduction → DataAnalysis → InReview → Done
| 状态 | 操作方 | 描述 |
|---|---|---|
Draft | 您 | 可编辑,无成本承诺 |
WaitingForConfirmation | Adaptyv | 审核中,正在准备报价 |
QuoteSent | 您 | 审核并确认报价 |
WaitingForMaterials | Adaptyv | 订购基因片段和靶点 |
InQueue | Adaptyv | 材料已到货,排队等待实验室处理 |
InProduction | Adaptyv | 检测运行中 |
DataAnalysis | Adaptyv | 原始数据处理和质量控制 |
InReview | Adaptyv | 最终验证 |
Done | 您 | 结果可用 |
Canceled | 任意一方 | 实验已取消 |
实验上的 results_status 字段跟踪:none、partial 或 all。
# 1. 查找靶点
targets = client.targets.list(search="EGFR", selfservice_only=True)
target_id = targets.items[0].id
# 2. 预览成本
estimate = client.experiments.cost_estimate({
"experiment_spec": {
"experiment_type": "screening",
"method": "bli",
"target_id": target_id,
"sequences": {"seq1": "EVQLVESGGGLVQ...", "seq2": "MKVLVAG..."},
"n_replicates": 3
}
})
# 3. 创建实验 (初始状态为 Draft)
exp = client.experiments.create({
"name": "EGFR binder screen batch 1",
"experiment_spec": {
"experiment_type": "screening",
"method": "bli",
"target_id": target_id,
"sequences": {"seq1": "EVQLVESGGGLVQ...", "seq2": "MKVLVAG..."},
"n_replicates": 3
}
})
# 4. 提交审核
client.experiments.submit(exp.experiment_id)
# 5. 轮询或使用 webhook 直到 Done
# 6. 获取结果
results = client.experiments.get_results(exp.experiment_id)
exp = client.experiments.create({
"name": "Auto pipeline run",
"experiment_spec": {...},
"skip_draft": True,
"auto_accept_quote": True,
"webhook_url": "https://my-server.com/webhook"
})
# Webhook 在每次状态转换时触发;轮询或等待 Done
创建实验时传递 webhook_url。Adaptyv 会在每次状态转换时向该 URL 发送 POST 请求,包含实验 ID、先前状态和新状态。
{"seq1": "EVQLVESGGGLVQPGGSLRLSCAAS"}{"seq1": {"aa_string": "EVQLVESGGGLVQ...", "control": false, "metadata": {"type": "scfv"}}}"MVLS:EVQL"Draft 的实验中所有列表端点都支持分页 (limit 1-100,默认 50;offset)、搜索(对名称字段进行自由文本搜索)和排序。
过滤 通过 filter 查询参数使用 s-表达式语法:
eq(field,value), neq, gt, gte, lt, lte, contains(field,substring)between(field,lo,hi), in(field,v1,v2,...)and(expr1,expr2,...), or(...), not(expr)is_null(field), is_not_null(field)at(field,key) — 例如, eq(at(metadata,score),42)float(), int(), text(), timestamp(), date()排序 使用 asc(field) 或 desc(field),逗号分隔 (最多 8 个):
sort=desc(created_at),asc(name)
示例: filter=and(gte(created_at,2026-01-01),eq(status,done))
所有错误返回:
{
"error": "Human-readable description",
"request_id": "req_019462a4-b1c2-7def-8901-23456789abcd"
}
request_id 也存在于 x-request-id 响应头中——联系支持时请包含它。
令牌使用基于 Biscuit 的加密衰减。您可以通过 POST /tokens/attenuate 创建受组织、资源类型、操作(读/创建/更新)和过期时间限制的令牌。撤销令牌 (POST /tokens/revoke) 会撤销该令牌及其所有后代令牌。
要查看包含请求/响应模式的所有 32 个端点的完整列表,请阅读 references/api-endpoints.md。
每周安装量
55
代码仓库
GitHub 星标
17.3K
首次出现
2026 年 1 月 20 日
安全审计
安装于
opencode48
codex47
gemini-cli47
cursor45
claude-code44
github-copilot43
Adaptyv Bio is a cloud lab that turns protein sequences into experimental data. Users submit amino acid sequences via API or UI; Adaptyv's automated lab runs assays (binding, thermostability, expression, fluorescence) and delivers results in ~21 days.
Base URL: https://foundry-api-public.adaptyvbio.com/api/v1
Authentication: Bearer token in the Authorization header. Tokens are obtained from foundry.adaptyvbio.com sidebar.
When writing code, always read the API key from the environment variable ADAPTYV_API_KEY or from a .env file — never hardcode tokens. Check for a .env file in the project root first; if one exists, use a library like python-dotenv to load it.
export FOUNDRY_API_TOKEN="abs0_..."
curl https://foundry-api-public.adaptyvbio.com/api/v1/targets?limit=3 \
-H "Authorization: Bearer $FOUNDRY_API_TOKEN"
Every request except GET /openapi.json requires authentication. Store tokens in environment variables or .env files — never commit them to source control.
Install: uv add adaptyv-sdk (falls back to uv pip install adaptyv-sdk if no pyproject.toml exists)
Environment variables (set in shell or .env file):
ADAPTYV_API_KEY=your_api_key
ADAPTYV_API_URL=https://foundry-api-public.adaptyvbio.com/api/v1
from adaptyv import lab
@lab.experiment(target="PD-L1", experiment_type="screening", method="bli")
def design_binders():
return {"design_a": "MVKVGVNG...", "design_b": "MKVLVAG..."}
result = design_binders()
print(f"Experiment: {result.experiment_url}")
from adaptyv import FoundryClient
client = FoundryClient(api_key="...", base_url="https://foundry-api-public.adaptyvbio.com/api/v1")
# Browse targets
targets = client.targets.list(search="EGFR", selfservice_only=True)
# Estimate cost
estimate = client.experiments.cost_estimate({
"experiment_spec": {
"experiment_type": "screening",
"method": "bli",
"target_id": "target-uuid",
"sequences": {"seq1": "EVQLVESGGGLVQ..."},
"n_replicates": 3
}
})
# Create and submit
exp = client.experiments.create({...})
client.experiments.submit(exp.experiment_id)
# Later: retrieve results
results = client.experiments.get_results(exp.experiment_id)
| Type | Method | Measures | Requires Target |
|---|---|---|---|
affinity | bli or spr | KD, kon, koff kinetics | Yes |
screening | bli or spr | Yes/no binding | Yes |
thermostability |
Draft → WaitingForConfirmation → QuoteSent → WaitingForMaterials → InQueue → InProduction → DataAnalysis → InReview → Done
| Status | Who Acts | Description |
|---|---|---|
Draft | You | Editable, no cost commitment |
WaitingForConfirmation | Adaptyv | Under review, quote being prepared |
QuoteSent | You | Review and confirm the quote |
WaitingForMaterials | Adaptyv | Gene fragments and target ordered |
InQueue | Adaptyv |
The results_status field on an experiment tracks: none, partial, or all.
# 1. Find a target
targets = client.targets.list(search="EGFR", selfservice_only=True)
target_id = targets.items[0].id
# 2. Preview cost
estimate = client.experiments.cost_estimate({
"experiment_spec": {
"experiment_type": "screening",
"method": "bli",
"target_id": target_id,
"sequences": {"seq1": "EVQLVESGGGLVQ...", "seq2": "MKVLVAG..."},
"n_replicates": 3
}
})
# 3. Create experiment (starts as Draft)
exp = client.experiments.create({
"name": "EGFR binder screen batch 1",
"experiment_spec": {
"experiment_type": "screening",
"method": "bli",
"target_id": target_id,
"sequences": {"seq1": "EVQLVESGGGLVQ...", "seq2": "MKVLVAG..."},
"n_replicates": 3
}
})
# 4. Submit for review
client.experiments.submit(exp.experiment_id)
# 5. Poll or use webhooks until Done
# 6. Retrieve results
results = client.experiments.get_results(exp.experiment_id)
exp = client.experiments.create({
"name": "Auto pipeline run",
"experiment_spec": {...},
"skip_draft": True,
"auto_accept_quote": True,
"webhook_url": "https://my-server.com/webhook"
})
# Webhook fires on each status transition; poll or wait for Done
Pass webhook_url when creating an experiment. Adaptyv POSTs to that URL on every status transition with the experiment ID, previous status, and new status.
{"seq1": "EVQLVESGGGLVQPGGSLRLSCAAS"}{"seq1": {"aa_string": "EVQLVESGGGLVQ...", "control": false, "metadata": {"type": "scfv"}}}"MVLS:EVQL"Draft statusAll list endpoints support pagination (limit 1-100, default 50; offset), search (free-text on name fields), and sorting.
Filtering uses s-expression syntax via the filter query parameter:
eq(field,value), neq, gt, gte, lt, lte, contains(field,substring)between(field,lo,hi), in(field,v1,v2,...)and(expr1,expr2,...), or(...), Sorting uses asc(field) or desc(field), comma-separated (max 8):
sort=desc(created_at),asc(name)
Example: filter=and(gte(created_at,2026-01-01),eq(status,done))
All errors return:
{
"error": "Human-readable description",
"request_id": "req_019462a4-b1c2-7def-8901-23456789abcd"
}
The request_id is also in the x-request-id response header — include it when contacting support.
Tokens use Biscuit-based cryptographic attenuation. You can create restricted tokens scoped by organization, resource type, actions (read/create/update), and expiry via POST /tokens/attenuate. Revoking a token (POST /tokens/revoke) revokes it and all its descendants.
For the full list of all 32 endpoints with request/response schemas, read references/api-endpoints.md.
Weekly Installs
55
Repository
GitHub Stars
17.3K
First Seen
Jan 20, 2026
Security Audits
Gen Agent Trust HubPassSocketWarnSnykWarn
Installed on
opencode48
codex47
gemini-cli47
cursor45
claude-code44
github-copilot43
Lark CLI IM 即时消息管理工具:机器人/用户身份操作聊天、消息、文件下载
47,000 周安装
| — |
| Melting temperature (Tm) |
| No |
expression | — | Expression yield | No |
fluorescence | — | Fluorescence intensity | No |
| Materials arrived, queued for lab |
InProduction | Adaptyv | Assay running |
DataAnalysis | Adaptyv | Raw data processing and QC |
InReview | Adaptyv | Final validation |
Done | You | Results available |
Canceled | Either | Experiment canceled |
not(expr)is_null(field), is_not_null(field)at(field,key) — e.g., eq(at(metadata,score),42)float(), int(), text(), timestamp(), date()