Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Labstep

ASecurity

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

9 stars
0 votes
0 copies
0 views
Added 9/24/2026
businesspythongobashapi

Works with

cliapi

Security Analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned 9/24/2026

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

Installs into .claude/skills of the current project.

Are you the author of Labstep?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Labstep
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/stanfish06-labstep/badge)](https://www.skillsdirectory.com/skills/stanfish06-labstep)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
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, or fall back to `.claude/settings.json`:

```python
import os, json, labstep
from pathlib import Path

def get_labstep_apikey() -> str:
    """Get Labstep API key from env var or .claude/settings.json."""
    key = os.environ.get("LABSTEP_API_KEY")
    if key:
        return key
    settings = Path(".claude/settings.json")
    if settings.exists():
        cfg = json.loads(settings.read_text())
        key = cfg.get("skillsConfig", {}).get("labstep", {}).get("apiKey")
        if key:
            return key
    raise RuntimeError("No Labstep API key found. Set LABSTEP_API_KEY or configure .claude/settings.json")

user = labstep.authenticate(apikey=get_labstep_apikey())
```

## 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 `get_labstep_apikey()` 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
```python
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
```python
protocol = user.getProtocol(id)
protocol.getVersions()
protocol.getSteps()
protocol.getDataFields()
protocol.getInventoryFields()
protocol.getTimers()
protocol.getTables()
protocol.getFiles()
```

### Resources / Inventory
```python
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

```bash
# 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

## Output Structure

```
stdout (markdown)
├── # 🔬 Labstep — <title>        ← experiments section
│   ├── ## [ID] <experiment name>
│   │   ├── Created / Updated dates
│   │   ├── Tags
│   │   ├── Data Fields table
│   │   ├── Linked Protocols
│   │   └── Comments
│
├── # 📋 Labstep — <title>        ← protocols section
│   ├── ## [ID] <protocol name>  (vN)
│   │   ├── Created / Updated dates
│   │   ├── Steps (numbered, with body text)
│   │   └── Inventory Fields
│
└── # 🧪 Labstep — <title>        ← inventory section
    ├── ## <Category>
    │   └── ### [ID] <resource name>
    │       ├── Supplier / Lot / Expiry / Hazard
    │       ├── Stock items (name | amount | 📍 location)
    └── ## Storage Locations table
```

## Example Queries

- "Show me my recent experiments"
- "What protocols are in the workspace?"
- "Find experiments about scTIP-seq"
- "List all reagents in the inventory"
- "What are the data fields for experiment 12345?"
- "Show me the protocol steps for my latest experiment"

## Common Patterns

**Search experiments:**
```python
exps = user.getExperiments(search_query='PCR', count=20)
for e in exps:
    print(e.id, e.name)
```

**Switch workspace then query:**
```python
workspaces = user.getWorkspaces()
user.setWorkspace(workspaces[0].id)
exps = user.getExperiments(count=10)
```

## Dependencies

**Required**:
- `labstep` (labstepPy — Labstep API client)

**Environment**:
- `LABSTEP_API_KEY` — API key for authentication (or configure in `.claude/settings.json`)

## Safety

- Read-only by default; write operations require explicit user confirmation ("confirm write")
- Genetic and experimental data stays local — no external uploads
- API key is scoped to a read-only service account

## Integration with Bio Orchestrator

This skill is invoked by the Bio Orchestrator when:
- The user asks about lab experiments, protocols, or inventory
- The user wants to cross-reference Labstep metadata with genomic analysis results

It can be chained with:
- **lit-synthesizer**: Find papers related to experiment protocols or results
- **scrna-orchestrator**: Link single-cell experiments in Labstep to h5ad analysis
- **seq-wrangler**: Connect sequencing QC data to Labstep experiment records

## Notes

- Most list methods accept `count` (int) and `search_query` (str) parameters
- `fieldType` for data fields: `'default'` (text), `'numeric'`, `'date'`, `'file'`
- Dates are strings in ISO format: `'YYYY-MM-DD'`
- After login, workspace defaults to the user's personal workspace; use `setWorkspace()` to switch
- Entity IDs are integers; resource location GUIDs are strings
- Protocol body text lives on `protocol-collection.last_version.state` (ProseMirror JSON), not on experiment-linked copies

Attribution

stanfish06stanfish06
View sourceSee grades on GitHubMore from stanfish06 →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Email Composer

Draft professional emails for various contexts including business, technical, and customer communication. Use when the user needs help writing emails or composing professional messages.

304952 votes

Solution Architect

Designs system architecture, component specifications, and technical integration strategy. Use when: designing solutions, system architecture, technology stack, or integration approaches.

192 votes

Akorchak:Venture Assessment

Generate a comprehensive VC investment assessment report for a company

72 votes

Telegram Compose

Compose rich, readable Telegram messages using HTML formatting via direct Telegram API. Use when: (1) Sending any Telegram message beyond a simple one-line reply, (2) Creating structured messages with sections, lists, or status updates, (3) Need formatting unavailable via Clawdbot's Markdown conversion (underline, spoilers, expandable blockquotes, user mentions by ID), (4) Sending alerts, reports, summaries, or notifications to Telegram, (5) Want professional, scannable message formatting wit...

6511 votes

Just Fucking Cancel

Find and cancel unwanted subscriptions by analyzing bank transactions. Detects recurring charges, calculates annual waste, and helps you cancel with direct URLs and browser automation. Use when: 'cancel subscriptions', 'audit subscriptions', 'find recurring charges', 'what am I paying for', 'save money', 'subscription cleanup', 'stop wasting money'. Supports CSV import (Apple Card, Chase, Amex, Citi, Bank of America, Capital One, Mint, Copilot) OR Plaid API for automatic transaction pull. Out...

6511 votes
View all in business →