Glasslab is a runner-first ML research system built on a home Kubernetes lab.
The product is narrower than many of the older docs imply. The goal is not general agent chat. The goal is:
- keep a bounded research session
- turn that session into a reviewable plan
- launch approved runs
- compare outcomes
- record a decision
- propose the next bounded mutation
ansible/- host bootstrap, maintenance, GPU prep
kubeadm/- cluster manifests, especially
glasslab-v2
- cluster manifests, especially
services/- backend services and bounded operators
scripts/- deploy, export, sync, smoke-test helpers
docs/- architecture notes, runbooks, current-state docs, and historical notes
Useful service buckets:
- control plane:
services/workflow-apiservices/workflow-registryservices/evaluatorservices/reporter
- command surface:
services/whatsapp-gatewayservices/research-ingressservices/research-command-router
- bounded stage agents:
services/intake-agentservices/interpretation-agentservices/assessment-agentservices/design-agent
The active product is glasslab-v2.
The canonical command path is:
whatsapp-gatewayresearch-ingressresearch-command-routerworkflow-api
The canonical control plane is:
workflow-api
The canonical bounded inference lane is:
- exo OpenAI-compatible serving
There is no supported OpenClaw path in the current product.
The intended primary loop is:
!new <goal>
!add <source|note|dataset|baseline>
!plan
!check
!run
!compare
!decide <keep|discard|revise>
!next
Compatibility aliases may still exist:
!start!status
But the docs should teach the newer session/plan-oriented loop.
If you want the current source of truth:
- docs/glasslab-v2/current/README.md
- docs/glasslab-v2/canonical-stack-2026-04.md
- docs/glasslab-v2/command-surface-spec.md
- docs/glasslab-v2/router-and-backend-contract.md
- docs/glasslab-v2/deprecation-map-2026-04.md
If you are operating the lab:
scripts/docs/glasslab-v2/runbooks/ansible/playbooks/
If you need historical context:
Important distinction:
- the canonical live environment is the provisioner at
192.168.1.44 - this laptop checkout is a working client and Git copy
- ignored secrets, runtime bundles, imported images, and some operational truth
still live only on
.44
So:
- GitHub tells you committed repo state
- docs tell you the last documented live state
- only
.44can confirm actual live state
Glasslab does not need more competing paths.
It needs:
- one canonical command surface
- one canonical record store
- one canonical bounded experiment loop
- one honest statement about what literature support currently is