[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AFACQF9SMSEPJ6P1225A17":3,"skill-same:01M6AFACQF9SMSEPJ6P1225A17":108},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":54,"commitSha":55,"skillDirectory":56,"forksCount":57,"repositoryHtmlUrl":58,"repositoryHomepageUrl":59,"ownerHtmlUrl":60,"ownerBlogUrl":61,"ownerDescription":62,"updatedAt":63,"install":64,"resources":77},"01M6AFACQF9SMSEPJ6P1225A17","benchling-integration",null,"Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.","davila7\u002Fclaude-code-templates","davila7","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6216945?v=4","01M6ADEWWFPS191NFM0Y1EX1JH","Daniel Avila","01M6ADJHGM78PHQRD3XZTFDVKK",33481,"MIT","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fbenchling-integration\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"integration","benchling integration","entries","for","lab","warehouse","data management","via","apps","platform","proteins","DNA","automation","query","access","api","inventory","data","registry","workflows","2026-11-10 10:12:30",false,"---\nname: benchling-integration\ndescription: \"Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.\"\n---\n\n# 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","# 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",{"name":5,"description":7},"main","2b749c82b5d11fac39d9a6e021ce3f5b8a541bd1","cli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fbenchling-integration",3931,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates","https:\u002F\u002Faitmpl.com","https:\u002F\u002Fgithub.com\u002Fdavila7","https:\u002F\u002Fdanielavila.me","Building AI dev tools with LLMs","2026-11-14 06:14:46",{"source":8,"skillName":5,"commands":65,"prompt":75,"zipAvailable":76},[66,69,72],{"tool":67,"command":68},"npx","npx skills add davila7\u002Fclaude-code-templates --skill benchling-integration",{"tool":70,"command":71},"bunx","bunx skills add davila7\u002Fclaude-code-templates --skill benchling-integration",{"tool":73,"command":74},"pnpm","pnpm dlx skills add davila7\u002Fclaude-code-templates --skill benchling-integration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fbenchling-integration\u002FSKILL.md",true,[78,84,90,94,98,102],{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"assets\u002Fexample_asset.txt","ASSET","资产文件",865,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Frsmdt-the-startup\u002Falirezarezvani-claude-skills\u002Fra-qm-team\u002Fquality-manager-qms-iso13485\u002Fassets\u002Fexample_asset.txt",{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Fapi_endpoints.md","REFERENCE","参考文档",14226,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fbenchling-integration\u002Freferences\u002Fapi_endpoints.md",{"path":91,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Fapi_reference.md",979,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Frsmdt-the-startup\u002Falirezarezvani-claude-skills\u002Fra-qm-team\u002Fquality-manager-qms-iso13485\u002Freferences\u002Fapi_reference.md",{"path":95,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fauthentication.md",10124,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fbenchling-integration\u002Freferences\u002Fauthentication.md",{"path":99,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":100,"sourceHtmlUrl":101},"references\u002Fsdk_reference.md",17624,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fbenchling-integration\u002Freferences\u002Fsdk_reference.md",{"path":103,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":106,"sourceHtmlUrl":107},"scripts\u002Fexample.py","SCRIPT","脚本",615,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Frsmdt-the-startup\u002Falirezarezvani-claude-skills\u002Fra-qm-team\u002Fquality-manager-qms-iso13485\u002Fscripts\u002Fexample.py",[109,136,163,190,225,249],{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":116,"publishedAt":49},"01M70NHBTQ8BV0A2SCAZXEPHCX","wealthville-pool-scoring","Score DeFi liquidity pools before providing liquidity. Returns a 0-100 pool score and an Enter\u002FHold\u002FExit\u002FReduce\u002FAvoid verdict with calibrated confidence for ~68,800 Solana pools and 575 EVM pools, plus a public miss-inclusive track record. Use when asked whether a pool is worth LPing into, which pools look best right now, or how accurate the scores have actually been.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fweb-data\u002Fwealthville-pool-scoring\u002FSKILL.md",[115],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[117,118,119,120,121,32,122,123,124,125,126,127,128,129,130,131,132,133,134,135],"scoring","pool","wealthville pool scoring","liquidity","which","exit","now","use","when","reduce","with","record","track","verdict","evm","solana","how","public","look",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":143,"publishedAt":49},"01M70MB6VR8ERJ4EM8D5KHBMEV","technical-debt-auditor","Scans a codebase and produces a quantified technical debt report with a prioritized remediation plan. Analyzes dead code, TODO\u002FFIXME\u002FHACK markers, dependency staleness, complexity hotspots, code duplication signals, test coverage gaps, unused exports, and outdated patterns. Use this skill when the user asks to audit their codebase for tech debt, wants a health check of their code quality, says things like \"where should I focus refactoring\", \"find code smells\", \"audit my codebase\", \"what technical debt do we have\", \"prioritize cleanup work\", or asks about code quality metrics. Also trigger when the user mentions \"code rot\", \"legacy cleanup\", \"refactoring priorities\", or wants to understand the overall health of a project before a major effort. Trigger even if the user doesn't say \"technical debt\" explicitly — any request to systematically assess code quality and identify improvement priorities belongs here.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fdevelopment\u002Ftechnical-debt-auditor\u002FSKILL.md",[142],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[144,145,146,147,148,149,150,151,152,153,154,125,155,156,157,158,159,160,161,162],"technical debt","debt","technical","technical debt auditor","auditor","coverage","complexity","markers","project","cleanup","unused","code","todo","work","plan","focus","signals","audit","dependency",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":174,"publishedAt":49},"01M70KPYH9QNHCNME5GJQGE22K","readonly-sql-guard","Make an agent's database access provably read-only. Use when an agent runs caller-supplied SQL against a production\u002FERP\u002Fanalytics database (a \"query\" MCP tool, text-to-SQL, an admin console), or when reviewing DB-access code for write\u002FDDL\u002Fside-effect\u002Ftransaction-escape risks. Checks what a statement CALLS, not just its shape.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fdatabase\u002Freadonly-sql-guard\u002FSKILL.md",[169,172,173],{"categoryNo":170,"categoryName":171,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[175,176,177,178,179,180,181,32,182,183,184,185,186,187,188,124,43,189,125,42],"readonly","guard","sql guard","sql","readonly sql guard","erp","effect","read-only","db","just","tool","calls","only","MCP","database",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":194,"licenseFileUrl":195,"sourceHtmlUrl":196,"categories":197,"keywords":201,"publishedAt":49},"01M6AFY6F7CC2BBZP1QD6VTNVC","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FSKILL.md",[198],{"categoryNo":199,"categoryName":200,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,32,224],"artifacts builder","web","web artifacts builder","artifacts","builder","state","routing","state management","component","css","frontend","ui","Tools","file","components","shadcn","react","Tailwind","suite","jsx","html","single-file","ui components",{"skillNo":226,"name":227,"nameZh":6,"description":228,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":194,"licenseFileUrl":229,"sourceHtmlUrl":230,"categories":231,"keywords":236,"publishedAt":49},"01M6AFWF33SFV9Z3SF4PEEE4BF","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FSKILL.md",[232,235],{"categoryNo":233,"categoryName":234,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":199,"categoryName":200,"taxonomyType":21,"taxonomyTypeDesc":22},[237,238,239,240,241,203,242,212,213,243,244,245,246,32,247,127,248],"webapp testing","testing","webapp","browser","playwright","applications","debugging","toolkit","logs","screenshots","local","behavior",{"skillNo":250,"name":251,"nameZh":6,"description":252,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":194,"licenseFileUrl":253,"sourceHtmlUrl":254,"categories":255,"keywords":263,"publishedAt":49},"01M6AF67Q67JJJ5V51JR2P52KA","discernment-nudge","After you give a substantive answer or draft that the user may act on — advice or recommendations, drafted artifacts such as goals, plans, pitches, proposals, or emails, estimates or projections, analysis or interpretation of data, factual claims they may rely on, or a multi-step argument — invoke this skill BEFORE finalizing your reply and then, if it applies, append 2-3 short follow-up questions, each tied to something specific in what you just produced, that help the user check key facts, probe the reasoning or assumptions, and notice missing context. Do this at most once per conversation. Skip it when the user asked a trivial how-to or simple lookup, wants a purely educational explanation, asked you only to format, convert, or assemble a file from content they provided, is writing code they will run, is doing creative writing or casual chat, or already asked you to double-check, cite, or review — the skill file explains these boundaries and the exact output format.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fdiscernment-nudge\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fdiscernment-nudge\u002FSKILL.md",[256,259,260],{"categoryNo":257,"categoryName":258,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":261,"categoryName":262,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000036","内容创作者",[264,265,266,267,268,269,46,270,205,271,215,155,272,273,274,275,276,187,277,125,278,279,280,281,282,133,283],"discernment nudge","nudge","interpretation","help","run","reasoning","writing","lookup","content","review","conversation","short","up","invoke","you","analysis","claims","argument","assemble","recommendations"]