Skip to content
Back to skills

Assistant Lab

ASecurity

Self-improvement workbench for /assistant. All the tools needed to diagnose, train, evaluate, and promote models in a continuous loop. The "warm pond" where /assistant evolves its own inference stack.

  • 6 stars
  • 0 votes
  • 0 copies
  • 6 views
  • Added September 11, 2026
ai-agentspythongobashdockerapi

Works with

  • cli
  • api

Security analysis

A100/100

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

Scanned September 11, 2026

npx -y skills add grahama1970/agent-skills --skill assistant-lab --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Assistant Lab?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Assistant Lab
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/grahama1970-assistant-lab/badge)](https://www.skillsdirectory.com/skills/grahama1970-assistant-lab)

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

Download with Pro
SKILL.md
---
name: assistant-lab
description: >
  Self-improvement workbench for /assistant. All the tools needed to
  diagnose, train, evaluate, and promote models in a continuous loop.
  The "warm pond" where /assistant evolves its own inference stack.
triggers:
  - assistant lab
  - assistant-lab
  - improve assistant
  - train assistant model
  - assistant self-improve
  - warm pond
  - model factory
  - auto improve
  - train remote
  - train on runpod
  - remote training
  - train larger model
  - runpod training cost
  - train on flash
  - flash training
  - runpod flash training
  - flash assistant training
allowed-tools:
  - Bash
  - Python
metadata:
  short-description: Self-improvement workbench for /assistant
env:
  - ASSISTANT_MODELS_DIR (default: ~/.pi/models)
  - ASSISTANT_METRICS_DIR (default: ~/.pi/assistant)

provides:
  - assistant-self-improvement
  - remote-training-orchestration
composes:
  - create-gpt
  - create-classifier
  - create-regressor
  - gpt-lab
  - classifier-lab
  - prompt-lab
  - assistant
  - scillm
  - ops-runpod
  - task-monitor
  - agentic-evals
disciplines:
  - ml-training
  - evaluation-quality
---

# assistant-lab

Self-improvement workbench for `/assistant`. This is the **lab** where
/assistant diagnoses problems, trains new models, evaluates them, and
promotes passing models into the live registry.

**Not to be confused with `/monitor-skills`** which is the observability
daemon that watches ALL skills for health, drift, and sync issues.
`/assistant-lab` is specifically the self-improvement toolbox.

## The Self-Improvement Loop

```
/monitor-skills detects problem    ← observability
    ↓
/assistant-lab diagnoses root cause ← this skill
    ↓
Shadow mode: teacher (scillm) labels flow into shadow.jsonl
    ↓
ModelFactory.auto_improve(task)
    ├─ reads shadow agreement rate
    ├─ >= 90%: promote → update model_registry.json
    ├─ 80-90%: plateau → /prompt-lab redesign
    ├─ 70-80%: retrain → /create-gpt or /create-classifier
    └─ < 70%: aggressive retrain + architecture change
    ↓
/gpt-lab benchmark or /classifier-lab evaluate
    ↓ passing? → promote to live registry
    ↓
/assistant uses the improved model at inference time
```

## Tools Available

| Tool | Purpose | When Used |
|------|---------|-----------|
| `/create-gpt` | Train QLoRA/SFT/GRPO GPT (Tier 1.5) | Agreement < 80% or no model exists |
| `/create-classifier` | Train DistilBERT/sklearn classifier (Tier 0.5) | Text classification tasks |
| `/create-regressor` | Train sklearn/XGB regressor (Tier 0.75) | Continuous prediction tasks |
| RunPod Flash | Serverless GPU training via Python SDK (7B–70B) | Model too large for local A5000 — replaces `/ops-runpod` for training |
| `/gpt-lab` | Benchmark GPT against teacher baseline | After training, before promotion |
| `/classifier-lab` | Evaluate classifier accuracy/F1 | After classifier training |
| `/prompt-lab` | Redesign prompts when plateau detected | Agreement stuck at 80-90% |
| `/scillm` | Tier 2 teacher — creates labels | Always (teacher is ground truth) |

## Usage

### CLI

```bash
# Diagnose what a task needs
./run.sh diagnose --task stress-test-grader

# Full autonomous improvement loop
./run.sh auto-improve --task stress-test-grader

# Train specific model type
./run.sh train --task stress-test-grader --type gpt
./run.sh train --task sparta-ambiguity --type classifier

# Evaluate a model
./run.sh evaluate --task stress-test-grader --type gpt

# Promote a passing model (disables shadow mode)
./run.sh promote --task stress-test-grader --type gpt

# Harvest teacher labels from shadow.jsonl
./run.sh harvest --task stress-test-grader --since 24h

# Show shadow agreement stats for all tasks
./run.sh status

# Run full self-test (train → eval → promote cycle on test data)
./run.sh self-test
```

### Python API

```python
from assistant_lab import AssistantLab

lab = AssistantLab()

# Diagnose: what does this task need?
diagnosis = lab.diagnose("stress-test-grader")
# → {"has_gpt": False, "has_classifier": False, "shadow_agreement": 0.0, ...}

# Auto-improve: decide + train + eval + promote
result = lab.auto_improve("stress-test-grader")
# → {"actions": ["trained gpt", "evaluated (passing=True)", "promoted"]}

# Manual steps
lab.train("stress-test-grader", model_type="gpt")
lab.evaluate("stress-test-grader", model_type="gpt")
lab.promote("stress-test-grader", model_type="gpt")
```

## Model Factory

The core engine is `ModelFactory` (from `/common/model_factory.py`).
`/assistant-lab` wraps it with CLI + diagnostics + reporting.

### Shadow Agreement Thresholds

| Agreement Rate | Action | Rationale |
|----------------|--------|-----------|
| >= 90% | **Promote** | Student reliably matches teacher |
| 80-90% | **/prompt-lab** redesign | Plateau — prompts may be the ceiling |
| 70-80% | **Retrain** with more labels | More data likely helps |
| < 70% | **Aggressive retrain** | Change architecture or base model |
| < 50 samples | **Wait** | Not enough data to decide |

### Minimum Training Data (NON-NEGOTIABLE)

**Do NOT call `/create-gpt train` or `/create-classifier train` with insufficient data.**

| Model Type | Minimum Samples | Rule |
|------------|----------------|------|
| GPT (QLoRA SFT) | 1,000+ total | < 1,000 → stays at Tier 2 teacher |
| Classifier (sklearn/SetFit) | 200 per class | `n_samples / n_classes >= 200` |
| Regressor | 100+ total | Standard sklearn guidance |

Evidence: `sparta_stress_grading` was trained on 246 samples → 33.7% agreement.
That's 4 months of wasted shadow labels because the model was trained too early.
**Collect first, train when ready.**

### Training Data Flow

```
Tier 2 teacher (scillm via persona)
    ↓ labels saved to shadow.jsonl
    ↓
/assistant-lab harvest --task X
    ↓ extracts input+output pairs
    ↓
/create-gpt train --task X --data labels.jsonl
    ↓ QLoRA on Qwen2.5-1.5B (default)
    ↓
/gpt-lab benchmark --task X
    ↓ compare student vs teacher
    ↓
/assistant-lab promote --task X --type gpt
    ↓ updates model_registry.json, shadow_mode=false
```

## Remote Training (RunPod Flash)

For models too large for the local RTX A5000 (24GB VRAM, max ~1.7B with LoRA),
`assistant-lab` uses **RunPod Flash** — the serverless Python SDK with no Docker,
no SSH, and no rsync overhead. Flash **replaces `/ops-runpod`** for all training
paths. `/ops-runpod` is retained for persistent inference servers only.

### When to Use Flash

| Model Size | Local A5000 | Flash Needed | GPU |
|-----------|-------------|--------------|-----|
| 0.5–1.7B | LoRA fits | No | `./run.sh train` (local) |
| 3–7B | Can't fit | **Yes** | B200 (preferred) or H200 |
| 8–13B | Impossible | **Yes** | B200 (preferred) or H200 |

### Flash GPU Types

| GPU | VRAM | Notes |
|-----|------|-------|
| `B200` | 192 GB HBM3e | Fastest; 3–5× H200 on MoE / long-context |
| `H200` | 192 GB HBM3 | Good availability; solid baseline |

Billing: pay-per-second, 7-day execution maximum per job.

### Flash cost estimates (approximate)

| Model Size | GPU | Est. Training Time | Est. Cost |
|------------|-----|--------------------|-----------|
| 7B QLoRA SFT | B200 | ~1–2 hrs | ~$5–15 |
| 7B QLoRA SFT | H200 | ~2–3 hrs | ~$8–20 |
| 13B QLoRA SFT | B200 | ~2–4 hrs | ~$10–25 |
| 13B QLoRA SFT | H200 | ~3–5 hrs | ~$12–30 |

### Commands

```bash
# Step 1: Always estimate cost first
./run.sh estimate --task taxonomy-assessor --target flash --gpu B200 --size 7B

# Step 2: Train on Flash B200 (requires --confirm for safety)
./run.sh train --task taxonomy-assessor --target flash --gpu B200 --size 7B --confirm

# Train on Flash H200
./run.sh train --task taxonomy-assessor --target flash --gpu H200 --size 13B --confirm

# With custom base model
./run.sh train --task taxonomy-assessor --target flash --gpu B200 --size 8B \
  --base-model meta-llama/Llama-3.1-8B-Instruct --confirm

# With different quantization
./run.sh train --task qra-validator --target flash --gpu B200 --size 7B \
  --quantize Q5_K_M --confirm
```

### Flash Training Pipeline

```
estimate --target flash --gpu B200 --size 7B
    ↓
train --target flash --gpu B200 --confirm
    ├─ 1. Cost estimate + budget gate
    ├─ 2. Flash serverless job submitted (Python SDK — no Docker/SSH)
    ├─ 3. Dataset streamed to Flash worker
    ├─ 4. QLoRA / SFT training runs on B200/H200 (192GB VRAM)
    ├─ 5. Pull model weights to /mnt/storage12tb/models/
    ├─ 6. create-gpt export --quantize Q4_K_M (GGUF)
    └─ 7. Evaluate + auto-promote if passing
```

### Safety Gates

- **Budget cap**: `--max-cost` (default $15.00) blocks training if estimate exceeds limit
- **Confirmation**: Must pass `--confirm` — without it, shows cost and exits
- **Auto-teardown**: Flash job is cancelled on exit (even on error, via trap)
- **Metrics logging**: Every Flash training run logged to `lab_metrics.jsonl`

### Integration with Self-Improvement Loop

Remote-trained models integrate with the same cascade as local models:

```
Tier 0:   Heuristic (free, instant)
Tier 0.5: Classifier (local, free)
Tier 1.5: Local GPT ≤1.7B (create-gpt, free after training)
Tier 1.5: Remote GPT 3-13B (train-remote, free after training)  ← NEW
Tier 2:   scillm/DeepSeek V3 (Chutes, $0.12/1K calls)
```

A 7-13B model at Tier 1.5 can significantly reduce Tier 2 (Chutes) escalations,
potentially paying for its training cost in reduced overages.

## Relationship to Other Skills

```
/monitor-skills ──→ "skill X is unhealthy"
                         ↓
/assistant-lab ──→ diagnose → train → eval → promote
                         ↓
/assistant ──────→ uses promoted model at inference time
```

- **`/monitor-skills`**: Observes ALL skills. Detects problems. Reports health.
- **`/assistant-lab`**: Fixes /assistant's models. Trains, evaluates, promotes.
- **`/assistant`**: Runs inference. Uses whatever models the lab has produced.

## Contract

- **Input**: Task name + optional model type
- **Output**: Diagnosis, training results, evaluation results, promotion status
- **Dependencies**: model_factory.py (from /common), create-* and *-lab skills
- **Metrics**: Appends to `~/.pi/assistant/lab_metrics.jsonl`

Files in this skill

  • SKILL.md10.1 KB
  • app.py1.3 KB
  • bridge.py11.7 KB
  • fixtures/agentic_eval.json491 B
  • pyproject.toml243 B
  • run.sh19.2 KB
  • sanity.sh1.3 KB
  • synthesis_eval.py5.5 KB

Attribution

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

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.