Develop, extend, and contribute to Lobster AI — the multi-agent bioinformatics engine.
Use when working on Lobster codebase, creating agents/services, understanding architecture,
fixing bugs, adding features, or contributing to the open-source project.
Trigger phrases: "add agent", "create service", "extend lobster", "contribute",
"understand architecture", "how does X work in lobster", "fix bug", "add feature",
"write tests", "lobster development", "agent development", "bioinformatics code"
Develop, extend, and contribute to Lobster AI — the multi-agent bioinformatics engine.
Use when working on Lobster codebase, creating agents/services, understanding architecture,
fixing bugs, adding features, or contributing to the open-source project.
Trigger phrases: "add agent", "create service", "extend lobster", "contribute",
"understand architecture", "how does X work in lobster", "fix bug", "add feature",
"write tests", "lobster development", "agent development", "bioinformatics code"
Lobster AI Development Guide
Lobster AI is a multi-agent bioinformatics platform using LangGraph for orchestration.
This skill teaches you how to work with, extend, and contribute to the codebase.
# Setup (development)
make dev-install # Full dev setup with editable install
make test# Run all tests
make format # black + isort# Setup (end-user testing via uv tool)
uv tool install 'lobster-ai[full,anthropic]'# Install as users see it
uv tool upgrade lobster-ai # Upgrade to latest# Running
lobster chat # Interactive mode
lobster query "your request"# Single-turn# Testing
pytest tests/unit/ # Fast unit tests
pytest tests/integration/ # Integration tests
Service Pattern (Essential)
All services return a 3-tuple:
defanalyze(self, adata, **params) -> Tuple[AnnData, Dict, AnalysisStep]:
# Your analysis logic
stats = {"n_cells": adata.n_obs, "status": "complete"}
ir = AnalysisStep(
activity_type="analyze",
inputs={"n_obs": adata.n_obs},
outputs=stats,
params=params
)
return processed_adata, stats, ir
Tools wrap services:
@tooldefanalyze_modality(modality_name: str, **params) -> str:
result, stats, ir = service.analyze(adata, **params)
data_manager.log_tool_usage("analyze", params, stats, ir=ir) # IR mandatory!returnf"Complete: {stats}"
AGENT_CONFIG must be defined at module top (before imports):
# lobster/agents/mydomain/my_agent.pyfrom lobster.config.agent_registry import AgentRegistryConfig
AGENT_CONFIG = AgentRegistryConfig(
name="my_agent",
display_name="My Expert Agent",
description="What this agent does",
factory_function="lobster.agents.mydomain.my_agent.my_agent",
handoff_tool_name="handoff_to_my_agent",
handoff_tool_description="Assign tasks for my domain analysis",
tier_requirement="free", # All official agents are free
)
# Heavy imports AFTER configfrom lobster.core.data_manager_v2 import DataManagerV2
# ... rest of implementation
Key Files
File
Purpose
lobster/agents/graph.py
LangGraph orchestration
lobster/core/component_registry.py
Agent discovery
lobster/core/data_manager_v2.py
Data/workspace management
lobster/core/provenance.py
W3C-PROV tracking
lobster/cli.py
CLI implementation
Online Documentation
Full documentation at docs.omics-os.com (or local docs-site/):