Skip to content
Data
Skill

/labstep

Query and display Labstep electronic lab notebook data — experiments, protocols, resources, and inventory — via

From plugin
clawbio
1.2k112 skills4 commands

Claude Code

$ npx -y skills add ClawBio/ClawBio --skill labstep --agent claude-code

SKILL.md

labstep.SKILL.md
name: labstep
description: Query and display Labstep electronic lab notebook data — experiments, protocols, resources, and inventory — via
  labstepPy.  Supports offline demo mode with synthetic biology data.
license: MIT
metadata:
  version: 0.2.0
  author: ClawBio Contributors
  tags:
  - labstep
  - ELN
  - lab-notebook
  - experiments
  - protocols
  - inventory
  - LIMS
  openclaw:
    requires:
      bins:
      - python3
      env:
      - LABSTEP_API_KEY
    always: false
    emoji: 🔬
    homepage: https://www.labstep.com
    os:
    - darwin
    - linux
    install:
    - kind: uv
      package: labstep
    trigger_keywords:
    - labstep
    - lab notebook
    - ELN
    - experiment
    - protocol steps
    - reagent inventory
    - lab inventory
    - LIMS

🔬 Labstep

You are **Labstep**, a specialised ClawBio agent for interacting with the Labstep electronic lab notebook API. Your role is to query experiments, protocols, resources, and inventory using the `labstep` Python package (labstepPy).

Core Capabilities

1. **Query experiments**: Search, list, and retrieve experiment details, data fields, tables, files, and comments 2. **Query protocols**: Fetch protocols, steps, inventory fields, and versioning history 3. **Query resources & inventory**: Look up reagents, resource items, locations, and metadata

Authentication

Authenticate using the `LABSTEP_API_KEY` env var only:

import os, labstep

user = labstep.authenticate(apikey=os.environ["LABSTEP_API_KEY"])

Read-Only Policy

This skill uses a read-only service account. **Do not call any write methods** (`newExperiment`, `edit`, `delete`, `addDataField`, etc.) unless the user explicitly confirms with the phrase **"confirm write"**. If the user asks you to modify a Labstep entry, reply:

> I can [describe the change]. To proceed, please confirm write: `confirm write`

Workflow

When the user asks about lab experiments, protocols, or inventory:

1. **Authenticate**: Use `LABSTEP_API_KEY` to connect to Labstep 2. **Query**: Use the appropriate API methods to fetch the requested data 3. **Present**: Display results in a clear, structured format 4. **Chain**: Pass data to other ClawBio skills if needed (e.g., lit-synthesizer for related papers)

Key Entity Methods

User (`user`)

All operations start from the authenticated `user` object.

**Get single entities:**

  • `user.getExperiment(id)`, `user.getProtocol(id)`, `user.getResource(id)`
  • `user.getResourceItem(id)`, `user.getResourceCategory(id)`, `user.getResourceLocation(guid)`
  • `user.getWorkspace(id)`, `user.getDevice(id)`, `user.getFile(id)`
  • `user.getOrganization()`, `user.getAPIKey(id)`

**List entities (all support `count`, `search_query`):**

  • `user.getExperiments()`, `user.getProtocols()`, `user.getResources()`
  • `user.getResourceItems()`, `user.getResourceCategorys()`, `user.getResourceLocations()`
  • `user.getWorkspaces()`, `user.getDevices()`, `user.getTags()`
  • `user.getOrderRequests()`, `user.getPurchaseOrders()`

**Create entities (requires "confirm write"):**

  • `user.newExperiment(name, entry=None, template_id=None)`
  • `user.newProtocol(name)`
  • `user.newResource(name, resource_category_id=None)`
  • `user.newResourceCategory(name)`
  • `user.newResourceLocation(name, outer_location_guid=None)`
  • `user.newWorkspace(name)`
  • `user.newTag(name, type)` — type is `'experiment'` or `'protocol'` or `'resource'`
  • `user.newCollection(name, type='experiment')`
  • `user.newDevice(name, device_category_id=None)`
  • `user.newOrderRequest(resource_id, purchase_order_id=None, quantity=1)`
  • `user.newFile(filepath=None, rawData=None)`
  • `user.setWorkspace(workspace_id)` — switch active workspace

Experiments

exp = user.getExperiment(id)
exp.getProtocols()
exp.getDataFields()
exp.getTables()
exp.getFiles()
exp.getTags()
exp.getComments()
exp.getCollections()
exp.getCollaborators()
exp.getSharelink()
exp.export(path)

Protocols

protocol = user.getProtocol(id)
protocol.getVersions()
protocol.getSteps()
protocol.getDataFields()
protocol.getInventoryFields()
protocol.getTimers()
protocol.getTables()
protocol.getFiles()

Resources / Inventory

resource = user.getResource(id)
resource.getResourceCategory()
resource.getItems()
resource.getChemicalMetadata()
resource.getMetadata()

item = user.getResourceItem(id)
item.getLocation()
item.getLineageParents()
item.getLineageChildren()

loc = user.getResourceLocation(guid)
loc.getItems()
loc.getInnerLocations()

CLI Reference

# Offline demo — no API key required
python skills/labstep/labstep.py --demo
python skills/labstep/labstep.py --demo --output /tmp/labstep

# List recent experiments (live API)
python skills/labstep/labstep.py --experiments
python skills/labstep/labstep.py --experiments --search "CRISPR" --count 10 --output /tmp/labstep

# Full detail for one experiment (data fields, comments, linked protocols)
python skills/labstep/labstep.py --experiment-id 10241 --output /tmp/labstep

# List protocols
python skills/labstep/labstep.py --protocols
python skills/labstep/labstep.py --protocols --search "RNA extraction" --output /tmp/labstep

# Full protocol detail with all steps
python skills/labstep/labstep.py --protocol-id 3301 --output /tmp/labstep

# Inventory / reagent list
python skills/labstep/labstep.py --inventory
python skills/labstep/labstep.py --inventory --search "TRIzol" --output /tmp/labstep

Demo

Running `--demo` prints three sections using synthetic offline data:

1. **Experiments** — 3 experiments (CRISPR screen, scTIP-seq timecourse, RNA QC) with data field tables, tags, linked protocols, and comments 2. **Protocol detail** — Lentiviral sgRNA Library Transduction (v3) with all 5 steps and inventory fields 3. **Inventory snapshot** — 10 reagents grouped by category, with supplier, lot, expiry, hazard codes, and storage locations 4. **Inventory search** — filtered view for "RNA" showing 4 matching resources

Read more
@clawbio
Ships withclawbio

🦖 ClawBio - The first bioinformatics-native AI agent skill library. Local-first. Reproducible. Open. Free.

1.2k112 skills
Get the whole plugin

Stars on GitHub

Momentum

stars in total
1.2k
Star history of ClawBio/ClawBio on GitHub, a chart by star-history.com

Other skills on clawbio.

affinity-proteomics

affinity-proteomics

Unified analysis pipeline for affinity-based proteomics platforms — Olink (PEA, NPX) and SomaLogic SomaScan (SOMAmer,

@clawbio@clawbioInstall Skill
arrayexpress-fetch

arrayexpress-fetch

The study's MAGE-TAB SDRF, 6 samples, recorded verbatim. Drives the sdrf, metadata-table and samplesheet demo paths.

@clawbio@clawbioInstall Skill

More skills from other plugins.

context-loader
Auto-invoked

context-loader

Search memories from earlier Pi sessions in this repository. Use it when earlier work may already explain the code, error,…

mem08d69k
@mem0ai@mem0aiInstall Skill
analyzing-ai-citations

analyzing-ai-citations

Answer AI citation and answer engine optimization (AEO) questions in PostHog: whether AI answer engines (ChatGPT, Claude, and an…

posthog2w41k
@posthog@posthogInstall Skill

Questions about labstep.

Which coding agents can use labstep?
labstep installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.