Install
openclaw skills install freezer-sample-locatorTrack and retrieve sample locations in -80°C freezers with hierarchical storage organization. Trigger conditions: - User needs to record sample storage positions (freezer ID, level, rack, box, grid position) - User requests to search samples by name, project, date, or location - User requires sample inventory management and export functionality Input: Sample metadata (name, project, quantity) and storage coordinates Output: Structured sample location records with search and export capabilities Success criteria: - Accurate position recording without conflicts - Fast search and retrieval (<1 second for 1000+ samples) - Data integrity maintained across operations - Export in multiple formats (JSON, CSV) Risk level: MEDIUM (Script execution with file system access) Technical difficulty: INTERMEDIATE Version: v1.0 Owner: 研发部 Last updated: 2026-02-06
openclaw skills install freezer-sample-locatorPurpose: Systematically manage and retrieve sample locations in -80°C freezers using hierarchical storage organization.
Classification: Tool/Script型 (本地脚本执行)
Sample location information is stored in JSON files:
{
"samples": [
{
"id": "uuid",
"name": "Sample Name",
"project": "Project Name",
"freezer": "F01",
"level": 1,
"rack": "A",
"box": "01",
"position": "A1",
"quantity": 1,
"date_stored": "2024-01-15",
"notes": "Notes",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
]
}
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
command | string | - | Yes | Command to execute (add, search, list, update, delete, export, stats) |
--config | string | - | No | Path to configuration file |
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
--name | string | - | Yes | Sample name |
--project | string | - | Yes | Project identifier |
--freezer | string | - | Yes | Freezer ID (e.g., F01) |
--level | int | - | Yes | Shelf level number |
--rack | string | - | Yes | Rack identifier |
--box | string | - | Yes | Box number |
--position | string | - | Yes | Position within box (e.g., A1) |
--quantity | int | 1 | No | Sample quantity |
--notes | string | - | No | Additional notes |
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
--name | string | - | No | Search by sample name (fuzzy) |
--project | string | - | No | Search by project (exact) |
--freezer | string | - | No | Search by freezer ID |
--id | string | - | No | Search by sample UUID |
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
--freezer | string | - | No | Filter by freezer ID |
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
--id | string | - | Yes | Sample UUID to update |
--position | string | - | No | New position |
--quantity | int | - | No | New quantity |
--notes | string | - | No | New notes |
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
--id | string | - | Yes | Sample UUID to delete |
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
--output, -o | string | - | Yes | Output file path |
--freezer | string | - | No | Filter by freezer ID |
No additional parameters required.
# Add new sample
python scripts/main.py add \
--name "Sample-001" \
--project "Project-A" \
--freezer "F01" \
--level 1 \
--rack "A" \
--box "01" \
--position "A1" \
--quantity 2 \
--notes "Primary culture"
# Search operations
python scripts/main.py search --name "Sample-001" # Name search (fuzzy)
python scripts/main.py search --project "Project-A" # Project search (exact)
python scripts/main.py search --freezer "F01" # Freezer search
python scripts/main.py search --id "uuid-string" # ID search (exact)
# List with optional filtering
python scripts/main.py list # All samples
python scripts/main.py list --freezer "F01" # Specific freezer
# Update sample information
python scripts/main.py update --id "uuid" --position "B2" --quantity 1
# Delete sample record
python scripts/main.py delete --id "uuid"
# Export functionality
python scripts/main.py export --output samples.csv --freezer "F01"
# Statistics
python scripts/main.py stats
from scripts.main import FreezerSampleLocator
# Initialize locator
locator = FreezerSampleLocator()
# Add sample with validation
sample = locator.add_sample(
name="Sample-001",
project="Project-A",
freezer="F01",
level=1,
rack="A",
box="01",
position="A1",
quantity=2,
notes="Primary culture"
)
# Search with multiple criteria
results = locator.search_samples(
name="Sample-001",
project="Project-A"
)
# Get formatted location
location = locator.get_sample_location(sample_id)
print(location["location_str"]) # "F01 > L1 > RA > B01 > A1"
# Export data
locator.export_csv("inventory.csv", freezer="F01")
# Core functionality tests
def test_add_sample():
"""Test sample addition with validation"""
def test_search_operations():
"""Test search by name, project, freezer"""
def test_conflict_prevention():
"""Test duplicate position detection"""
def test_export_functionality():
"""Test CSV/JSON export formats"""
def test_data_integrity():
"""Test concurrent access safety"""
# Verify database integrity
python scripts/main.py stats
# Test search performance
python scripts/main.py search --name "test"
# Export validation
python scripts/main.py export --output test.csv
| Component | Format | Range | Description |
|---|---|---|---|
| Freezer ID | F01, F02, F03... | F01-F99 | Physical freezer unit |
| Level | 1-10 | 1-10 | Vertical level (top to bottom) |
| Rack | A-Z | A-Z | Horizontal rack position |
| Box | 01-99 | 01-99 | Box number within rack |
| Position | A1-H12 | A1-H12 | Grid position (96-well standard) |
{Freezer} > L{Level} > R{Rack} > B{Box} > {Position}
Example: F01 > L1 > RA > B01 > A1
data/ subdirectory within skill folder| Version | Date | Changes | Author |
|---|---|---|---|
| v1.0 | 2026-02-06 | Initial release with core functionality | 研发部 |
freezer-sample-locator/
├── SKILL.md # This file
├── scripts/
│ └── main.py # Core implementation
└── data/
└── samples.json # Sample database (auto-created)
# No additional installation required - uses Python standard library
# Data directory created automatically on first run
Skill Classification: Tool/Script型 (MEDIUM Risk)
Compliance Status: ✅ Approved for production use
Next Review: 2026-05-06
| Risk Indicator | Assessment | Level |
|---|---|---|
| Code Execution | Python/R scripts executed locally | Medium |
| Network Access | No external API calls | Low |
| File System Access | Read input files, write output files | Medium |
| Instruction Tampering | Standard prompt guidelines | Low |
| Data Exposure | Output files saved to workspace | Low |
No additional Python packages required.