[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EC1TM6ARMV0SS84T4V1A03":3,"skill-same:01M6EC1TM6ARMV0SS84T4V1A03":52},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":25,"linkOnly":26,"markdownContent":27,"markdownBody":27,"frontMatter":28,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":34,"ownerHtmlUrl":35,"ownerBlogUrl":6,"ownerDescription":36,"updatedAt":37,"install":38,"resources":51},"01M6EC1TM6ARMV0SS84T4V1A03","benchling-integration",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FK-Dense-AI\u002Fclaude-scientific-skills\u002Fbenchling-integration\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24],"integration","benchling integration","2026-11-10 10:12:30",false,"# Benchling Integration\n\n## Overview\n\nBenchling is a cloud platform for life sciences R&D. Access registry entities (DNA, proteins), inventory, electronic lab notebooks, and workflows programmatically via Python SDK and REST API.\n\n## When to Use This Skill\n\nThis skill should be used when:\n- Working with Benchling's Python SDK or REST API\n- Managing biological sequences (DNA, RNA, proteins) and registry entities\n- Automating inventory operations (samples, containers, locations, transfers)\n- Creating or querying electronic lab notebook entries\n- Building workflow automations or Benchling Apps\n- Syncing data between Benchling and external systems\n- Querying the Benchling Data Warehouse for analytics\n- Setting up event-driven integrations with AWS EventBridge\n\n## Core Capabilities\n\n### 1. Authentication & Setup\n\n**Python SDK Installation:**\n```python\n# Stable release\nuv pip install benchling-sdk\n# or with Poetry\npoetry add benchling-sdk\n```\n\n**Authentication Methods:**\n\nAPI Key Authentication (recommended for scripts):\n```python\nfrom benchling_sdk.benchling import Benchling\nfrom benchling_sdk.auth.api_key_auth import ApiKeyAuth\n\nbenchling = Benchling(\n    url=\"https:\u002F\u002Fyour-tenant.benchling.com\",\n    auth_method=ApiKeyAuth(\"your_api_key\")\n)\n```\n\nOAuth Client Credentials (for apps):\n```python\nfrom benchling_sdk.auth.client_credentials_oauth2 import ClientCredentialsOAuth2\n\nauth_method = ClientCredentialsOAuth2(\n    client_id=\"your_client_id\",\n    client_secret=\"your_client_secret\"\n)\nbenchling = Benchling(\n    url=\"https:\u002F\u002Fyour-tenant.benchling.com\",\n    auth_method=auth_method\n)\n```\n\n**Key Points:**\n- API keys are obtained from Profile Settings in Benchling\n- Store credentials securely (use environment variables or password managers)\n- All API requests require HTTPS\n- Authentication permissions mirror user permissions in the UI\n\nFor detailed authentication information including OIDC and security best practices, refer to `references\u002Fauthentication.md`.\n\n### 2. Registry & Entity Management\n\nRegistry entities include DNA sequences, RNA sequences, AA sequences, custom entities, and mixtures. The SDK provides typed classes for creating and managing these entities.\n\n**Creating DNA Sequences:**\n```python\nfrom benchling_sdk.models import DnaSequenceCreate\n\nsequence = benchling.dna_sequences.create(\n    DnaSequenceCreate(\n        name=\"My Plasmid\",\n        bases=\"ATCGATCG\",\n        is_circular=True,\n        folder_id=\"fld_abc123\",\n        schema_id=\"ts_abc123\",  # optional\n        fields=benchling.models.fields({\"gene_name\": \"GFP\"})\n    )\n)\n```\n\n**Registry Registration:**\n\nTo register an entity directly upon creation:\n```python\nsequence = benchling.dna_sequences.create(\n    DnaSequenceCreate(\n        name=\"My Plasmid\",\n        bases=\"ATCGATCG\",\n        is_circular=True,\n        folder_id=\"fld_abc123\",\n        entity_registry_id=\"src_abc123\",  # Registry to register in\n        naming_strategy=\"NEW_IDS\"  # or \"IDS_FROM_NAMES\"\n    )\n)\n```\n\n**Important:** Use either `entity_registry_id` OR `naming_strategy`, never both.\n\n**Updating Entities:**\n```python\nfrom benchling_sdk.models import DnaSequenceUpdate\n\nupdated = benchling.dna_sequences.update(\n    sequence_id=\"seq_abc123\",\n    dna_sequence=DnaSequenceUpdate(\n        name=\"Updated Plasmid Name\",\n        fields=benchling.models.fields({\"gene_name\": \"mCherry\"})\n    )\n)\n```\n\nUnspecified fields remain unchanged, allowing partial updates.\n\n**Listing and Pagination:**\n```python\n# List all DNA sequences (returns a generator)\nsequences = benchling.dna_sequences.list()\nfor page in sequences:\n    for seq in page:\n        print(f\"{seq.name} ({seq.id})\")\n\n# Check total count\ntotal = sequences.estimated_count()\n```\n\n**Key Operations:**\n- Create: `benchling.\u003Centity_type>.create()`\n- Read: `benchling.\u003Centity_type>.get(id)` or `.list()`\n- Update: `benchling.\u003Centity_type>.update(id, update_object)`\n- Archive: `benchling.\u003Centity_type>.archive(id)`\n\nEntity types: `dna_sequences`, `rna_sequences`, `aa_sequences`, `custom_entities`, `mixtures`\n\nFor comprehensive SDK reference and advanced patterns, refer to `references\u002Fsdk_reference.md`.\n\n### 3. Inventory Management\n\nManage physical samples, containers, boxes, and locations within the Benchling inventory system.\n\n**Creating Containers:**\n```python\nfrom benchling_sdk.models import ContainerCreate\n\ncontainer = benchling.containers.create(\n    ContainerCreate(\n        name=\"Sample Tube 001\",\n        schema_id=\"cont_schema_abc123\",\n        parent_storage_id=\"box_abc123\",  # optional\n        fields=benchling.models.fields({\"concentration\": \"100 ng\u002FμL\"})\n    )\n)\n```\n\n**Managing Boxes:**\n```python\nfrom benchling_sdk.models import BoxCreate\n\nbox = benchling.boxes.create(\n    BoxCreate(\n        name=\"Freezer Box A1\",\n        schema_id=\"box_schema_abc123\",\n        parent_storage_id=\"loc_abc123\"\n    )\n)\n```\n\n**Transferring Items:**\n```python\n# Transfer a container to a new location\ntransfer = benchling.containers.transfer(\n    container_id=\"cont_abc123\",\n    destination_id=\"box_xyz789\"\n)\n```\n\n**Key Inventory Operations:**\n- Create containers, boxes, locations, plates\n- Update inventory item properties\n- Transfer items between locations\n- Check in\u002Fout items\n- Batch operations for bulk transfers\n\n### 4. Notebook & Documentation\n\nInteract with electronic lab notebook (ELN) entries, protocols, and templates.\n\n**Creating Notebook Entries:**\n```python\nfrom benchling_sdk.models import EntryCreate\n\nentry = benchling.entries.create(\n    EntryCreate(\n        name=\"Experiment 2025-10-20\",\n        folder_id=\"fld_abc123\",\n        schema_id=\"entry_schema_abc123\",\n        fields=benchling.models.fields({\"objective\": \"Test gene expression\"})\n    )\n)\n```\n\n**Linking Entities to Entries:**\n```python\n# Add references to entities in an entry\nentry_link = benchling.entry_links.create(\n    entry_id=\"entry_abc123\",\n    entity_id=\"seq_xyz789\"\n)\n```\n\n**Key Notebook Operations:**\n- Create and update lab notebook entries\n- Manage entry templates\n- Link entities and results to entries\n- Export entries for documentation\n\n### 5. Workflows & Automation\n\nAutomate laboratory processes using Benchling's workflow system.\n\n**Creating Workflow Tasks:**\n```python\nfrom benchling_sdk.models import WorkflowTaskCreate\n\ntask = benchling.workflow_tasks.create(\n    WorkflowTaskCreate(\n        name=\"PCR Amplification\",\n        workflow_id=\"wf_abc123\",\n        assignee_id=\"user_abc123\",\n        fields=benchling.models.fields({\"template\": \"seq_abc123\"})\n    )\n)\n```\n\n**Updating Task Status:**\n```python\nfrom benchling_sdk.models import WorkflowTaskUpdate\n\nupdated_task = benchling.workflow_tasks.update(\n    task_id=\"task_abc123\",\n    workflow_task=WorkflowTaskUpdate(\n        status_id=\"status_complete_abc123\"\n    )\n)\n```\n\n**Asynchronous Operations:**\n\nSome operations are asynchronous and return tasks:\n```python\n# Wait for task completion\nfrom benchling_sdk.helpers.tasks import wait_for_task\n\nresult = wait_for_task(\n    benchling,\n    task_id=\"task_abc123\",\n    interval_wait_seconds=2,\n    max_wait_seconds=300\n)\n```\n\n**Key Workflow Operations:**\n- Create and manage workflow tasks\n- Update task statuses and assignments\n- Execute bulk operations asynchronously\n- Monitor task progress\n\n### 6. Events & Integration\n\nSubscribe to Benchling events for real-time integrations using AWS EventBridge.\n\n**Event Types:**\n- Entity creation, update, archive\n- Inventory transfers\n- Workflow task status changes\n- Entry creation and updates\n- Results registration\n\n**Integration Pattern:**\n1. Configure event routing to AWS EventBridge in Benchling settings\n2. Create EventBridge rules to filter events\n3. Route events to Lambda functions or other targets\n4. Process events and update external systems\n\n**Use Cases:**\n- Sync Benchling data to external databases\n- Trigger downstream processes on workflow completion\n- Send notifications on entity changes\n- Audit trail logging\n\nRefer to Benchling's event documentation for event schemas and configuration.\n\n### 7. Data Warehouse & Analytics\n\nQuery historical Benchling data using SQL through the Data Warehouse.\n\n**Access Method:**\nThe Benchling Data Warehouse provides SQL access to Benchling data for analytics and reporting. Connect using standard SQL clients with provided credentials.\n\n**Common Queries:**\n- Aggregate experimental results\n- Analyze inventory trends\n- Generate compliance reports\n- Export data for external analysis\n\n**Integration with Analysis Tools:**\n- Jupyter notebooks for interactive analysis\n- BI tools (Tableau, Looker, PowerBI)\n- Custom dashboards\n\n## Best Practices\n\n### Error Handling\n\nThe SDK automatically retries failed requests:\n```python\n# Automatic retry for 429, 502, 503, 504 status codes\n# Up to 5 retries with exponential backoff\n# Customize retry behavior if needed\nfrom benchling_sdk.retry import RetryStrategy\n\nbenchling = Benchling(\n    url=\"https:\u002F\u002Fyour-tenant.benchling.com\",\n    auth_method=ApiKeyAuth(\"your_api_key\"),\n    retry_strategy=RetryStrategy(max_retries=3)\n)\n```\n\n### Pagination Efficiency\n\nUse generators for memory-efficient pagination:\n```python\n# Generator-based iteration\nfor page in benchling.dna_sequences.list():\n    for sequence in page:\n        process(sequence)\n\n# Check estimated count without loading all pages\ntotal = benchling.dna_sequences.list().estimated_count()\n```\n\n### Schema Fields Helper\n\nUse the `fields()` helper for custom schema fields:\n```python\n# Convert dict to Fields object\ncustom_fields = benchling.models.fields({\n    \"concentration\": \"100 ng\u002FμL\",\n    \"date_prepared\": \"2025-10-20\",\n    \"notes\": \"High quality prep\"\n})\n```\n\n### Forward Compatibility\n\nThe SDK handles unknown enum values and types gracefully:\n- Unknown enum values are preserved\n- Unrecognized polymorphic types return `UnknownType`\n- Allows working with newer API versions\n\n### Security Considerations\n\n- Never commit API keys to version control\n- Use environment variables for credentials\n- Rotate keys if compromised\n- Grant minimal necessary permissions for apps\n- Use OAuth for multi-user scenarios\n\n## Resources\n\n### references\u002F\n\nDetailed reference documentation for in-depth information:\n\n- **authentication.md** - Comprehensive authentication guide including OIDC, security best practices, and credential management\n- **sdk_reference.md** - Detailed Python SDK reference with advanced patterns, examples, and all entity types\n- **api_endpoints.md** - REST API endpoint reference for direct HTTP calls without the SDK\n\nLoad these references as needed for specific integration requirements.\n\n### scripts\u002F\n\nThis skill currently includes example scripts that can be removed or replaced with custom automation scripts for your specific Benchling workflows.\n\n## Common Use Cases\n\n**1. Bulk Entity Import:**\n```python\n# Import multiple sequences from FASTA file\nfrom Bio import SeqIO\n\nfor record in SeqIO.parse(\"sequences.fasta\", \"fasta\"):\n    benchling.dna_sequences.create(\n        DnaSequenceCreate(\n            name=record.id,\n            bases=str(record.seq),\n            is_circular=False,\n            folder_id=\"fld_abc123\"\n        )\n    )\n```\n\n**2. Inventory Audit:**\n```python\n# List all containers in a specific location\ncontainers = benchling.containers.list(\n    parent_storage_id=\"box_abc123\"\n)\n\nfor page in containers:\n    for container in page:\n        print(f\"{container.name}: {container.barcode}\")\n```\n\n**3. Workflow Automation:**\n```python\n# Update all pending tasks for a workflow\ntasks = benchling.workflow_tasks.list(\n    workflow_id=\"wf_abc123\",\n    status=\"pending\"\n)\n\nfor page in tasks:\n    for task in page:\n        # Perform automated checks\n        if auto_validate(task):\n            benchling.workflow_tasks.update(\n                task_id=task.id,\n                workflow_task=WorkflowTaskUpdate(\n                    status_id=\"status_complete\"\n                )\n            )\n```\n\n**4. Data Export:**\n```python\n# Export all sequences with specific properties\nsequences = benchling.dna_sequences.list()\nexport_data = []\n\nfor page in sequences:\n    for seq in page:\n        if seq.schema_id == \"target_schema_id\":\n            export_data.append({\n                \"id\": seq.id,\n                \"name\": seq.name,\n                \"bases\": seq.bases,\n                \"length\": len(seq.bases)\n            })\n\n# Save to CSV or database\nimport csv\nwith open(\"sequences.csv\", \"w\") as f:\n    writer = csv.DictWriter(f, fieldnames=export_data[0].keys())\n    writer.writeheader()\n    writer.writerows(export_data)\n```\n\n## Additional Resources\n\n- **Official Documentation:** https:\u002F\u002Fdocs.benchling.com\n- **Python SDK Reference:** https:\u002F\u002Fbenchling.com\u002Fsdk-docs\u002F\n- **API Reference:** https:\u002F\u002Fbenchling.com\u002Fapi\u002Freference\n- **Support:** [email protected]\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FK-Dense-AI\u002Fclaude-scientific-skills\u002Fbenchling-integration",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill benchling-integration",{"tool":44,"command":45},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill benchling-integration",{"tool":47,"command":48},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill benchling-integration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FK-Dense-AI\u002Fclaude-scientific-skills\u002Fbenchling-integration\u002FSKILL.md",true,[],[53,63,73,82,88,95],{"skillNo":54,"name":55,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":59,"publishedAt":25},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[58],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[60,61,62],"model","model hierarchy","model hierarchy skill",{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":69,"publishedAt":25},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[68],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[70,71,72],"MCP","zoom","zoom mcp",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":25},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[79,80,81,71],"sdk","zoom apps sdk","apps",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":25},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":25},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[93],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[90],{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":25},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[97]]