docs/building_labagent/LAB_AGENT_GUIDE.md

151 lines
6.3 KiB
Markdown
Raw Normal View History

# Lab Agent Guide (v2)
Welcome! This guide explains how to use the **chat-driven lab management system** that lives inside this repository. It covers everyday workflows (for researchers) _and_ advanced features (for power users / maintainers).
---
## 1. What *is* the Lab Agent?
The Lab Agent is an AI assistant that turns plain-language instructions (typed in a chat window) into structured actions:
* Creating or updating YAML files in `Protocols/`, `Experiments/`, or `Projects/`
* Suggesting metadata ("Smart-Fill") using past lab records or PubMed
* Committing changes, opening GitHub Issues, or drafting Pull Requests so the PI can review
Think of it as a smart electronic lab notebook that lives entirely in this repo and **never** forgets to save or commit your work.
---
## 2. Quick-Start Checklist (⚡ _5 minutes_)
1. **Open this repo in GitHub Codespaces** (or locally with Dev Containers).
2. **Set secrets** (once per user):
`OPENAI_API_KEY` required for embeddings & Smart-Fill
`GITHUB_TOKEN` Codespaces usually injects one automatically
3. Wait for the container to build (it installs Python deps & starts the Agent runner automatically).
4. **Open the _Cursor_ / _Copilot Chat_ tab** inside VS Code.
5. Start talking! e.g. `"Create a new experiment using the cell staining protocol tomorrow at 10 AM"`.
> 💡 **Tips**
> • If chat replies look like JSON function calls, _that's expected_ the Agent is planning deterministic actions.
> • All generated files & commits appear immediately in the Explorer + Git view.
---
## 3. Everyday Workflows
### 3.1 Create a Protocol
```text
User: Create a protocol called "RNA Extraction v2" based on the existing v1 but increase incubation to 15 min.
Agent → creates `Protocols/rna_extraction_v2.yaml`, commits it, and tells you the file path.
```
### 3.2 Start an Experiment
```text
User: I'm starting an experiment tomorrow using RNA Extraction v2 on sample 123.
Agent → scaffolds an experiment YAML in `Experiments/`, auto-fills metadata, commits, and links it to the protocol.
```
### 3.3 Log Results / Update Status
```text
User: Mark experiment EXP-0005 completed and add results "Yield was 250 ng/µL".
Agent → updates the YAML, validates required fields, commits, and updates TASKS.md.
```
### 3.4 Get Smart-Fill Suggestions
```text
User: Suggest metadata for cell line HeLa in my staining experiment.
Agent → returns top suggestions from previous experiments + PubMed if needed.
```
### 3.5 Open an Issue for PI Review
```text
User: Flag experiment EXP-0005 for PI review.
Agent → `gh issue create` with a pre-filled title/body and commits reference.
```
---
## 4. Available Commands / Phrases
The Agent understands natural language, but these verbs map 1-to-1 with internal functions.
| Action | Example Phrase | Notes |
| --- | --- | --- |
| **create_protocol** | "Make a protocol for western blotting" | Will duplicate `Templates/protocol_template.yaml` |
| **create_experiment** | "Plan an experiment using XYZ protocol next Monday" | Auto IDs the file with date & researcher |
| **update_experiment** | "Add results to EXP-0007" | Triggers validation if `status: completed` |
| **suggest_metadata** | "Suggest antibody concentration for HeLa staining" | Uses embeddings + PubMed |
| **commit_and_push** | Usually automatic | Manual call: "Commit with message ..." |
| **open_issue** | "Open an issue titled ..." | Uses `gh issue` CLI |
| **open_pr** | "Open a draft PR for my changes" | Creates branch & PR |
---
## 5. Where Things Go
```
Protocols/ standard procedures (YAML)
Experiments/ individual runs / lab sessions (YAML)
Projects/ high-level grouping (YAML)
Data/ small data or links to external storage
Templates/ starting skeletons for new YAMLs
Agent/ Python code for the runner + embeddings
```
The Agent follows these conventions automatically. If you add files manually, keep the same structure so Smart-Fill can find them.
---
## 6. Logs & Task Tracking
| File | Purpose |
| --- | --- |
| **CHANGELOG.md** | Auto-appended summary of each significant action |
| **TASKS.md** | Checklist for ongoing lab or dev tasks; Agent checks boxes when done |
| **SESSION_LOG.md** (optional) | Human-readable session summaries you or the Agent can append |
You can always skim these files (or GitHub commit history) to catch up after a break.
---
## 7. Troubleshooting & FAQ
**Q 1. The Agent says it can't find my protocol.**
• Check the filename (lowercase, underscores instead of spaces).
• Run `Agent/agent_runner.py` again if you added the file manually it re-indexes on start.
**Q 2. `gh` command not found / authentication failure.**
• Inside the container run `gh auth status`. Follow prompts if unauthenticated.
• Codespaces usually sets this up, but personal tokens may expire.
**Q 3. Smart-Fill suggestions are empty.**
• Ensure `OPENAI_API_KEY` is set (`echo $OPENAI_API_KEY`).
• There may be no similar content yet add more protocols/experiments.
**Q 4. I want to edit YAML manually.**
• That's fine! The Agent will pick up changes on the next run.
• Remember to commit or ask the Agent _"Commit with message ..."_.
---
## 8. Advanced Usage
* **Branching/PR Flow** Say *"Create a branch feature/rna-cleanup and open a draft PR"*.
* **Bulk imports** Paste multiple steps; the Agent can chain actions in one go.
* **External RAG** If a term isn't in the repo, Smart-Fill queries PubMed; the Agent cites article titles in suggestions.
---
## 9. Developer Notes (for Maintainers)
* Runner entry point: `Agent/agent_runner.py`
* Add new functions by implementing `handle_<function>` then registering it in the Agent prompt.
* Embedding index lives in `Data/chroma_index/`; delete it to rebuild from scratch.
* Tests: `pytest` coming soon (stub).
---
## 10. Automated Issue Logging (NEW)
Whenever you create a GitHub issue (e.g., with `gh issue create`), you can call the hook script:
```bash
python Agent/hooks/post_issue.py <issue_number> <issue_title> <issue_url>
```
This will append the issue to both `TASKS.md` and `ISSUES_LOG.md` for easy tracking inside the repo. (You can automate this in your workflow or call it manually after each issue is created.)
---
Made with ☕ and 🤖. Enjoy streamlined, reproducible record-keeping!