Session 12 update: this is the S11 deliverable. S12's deliverable is theschoolofai/glc_v2 — a containerised, Modal-deployed version of this gateway, designed as the pen-test attack target for the S12 assignment. Read v2's README to see what changed and how to participate in the pen-testing assignment.
GLC v1 is the Session 11 deliverable. It absorbs the V9 LLM gateway (text chat, vision, embeddings, cost ledger, provider routing) and adds the new channel and voice layer for the first time. The S9 agent runtime and the S10 Computer-Use skill point at this gateway unchanged.
Port: 8111 (V9 stays on 8109 for older student work).
cd glc_v1
uv sync
uv run glc serveThe first boot creates ~/.glc/ with the audit log, pairing store,
gateway db, channels.yaml, and a per-installation token. The token
gates /v1/control/* and the channel WebSocket. Print it with
uv run glc token.
export LLM_GATEWAY_V9_URL=http://localhost:8111Every V9 route — /v1/chat, /v1/chat/batch, /v1/vision, /v1/embed,
/v1/cost/by_agent, /v1/providers, /v1/capabilities, /v1/status,
/v1/routers, /v1/calls, /v1/embedders — works identically against
this port. The S9 Browser skill and S10 Computer-Use skill require no
code changes.
| Route | Purpose |
|---|---|
POST /v1/transcribe |
STT dispatcher → groq_whisper / whisper_cpp / gemini_live |
POST /v1/speak |
TTS dispatcher → kokoro / elevenlabs / cartesia / gemini_live / system_fallback |
WS /v1/channels/{name} |
Channel adapter control plane |
POST /v1/control/kill |
Out-of-band kill switch (loopback only) |
POST /v1/control/pair |
Issue a rotating six-digit pairing code |
POST /v1/control/pair/confirm |
Owner confirms a pairing code |
GET /v1/control/presence |
Channels registered, paired users, uptime |
./daemon/install.sh # macOS launchd, Linux systemd, Windows NSSM
./daemon/install.sh --uninstall # remove the service
./daemon/install.sh --models # fetch Kokoro + whisper.cpp base modelThere are 22 group slots:
- 15 channel adapters under
glc/channels/catalogue/<name>/. - 7 voice providers under
glc/voice/stt/providers/<name>/andglc/voice/tts/providers/<name>/(3 STT + 4 TTS).system_fallbackships fully implemented and is not a slot.
Group → slot assignments are fixed by the instructors and listed in
GROUPS.md. There is no claim PR — the assignment table
is the source of truth. If you think your group's row is wrong, raise
it in the S11 chat (G<n> sub-channel) and a TA will correct it.
Workflow:
- Find your group's row in
GROUPS.md. Note the slot name and theOwned paths. - Read
docs/ADAPTER_GUIDE.md. - Implement
adapter.py(andschemas.pyif needed) against the mock-API fake undertests/channels/mocks/ortests/voice/{stt,tts}/mocks/. - Open your implementation PR. Include
# Group: <name>and# Slot: <slot>markers in the PR description. - The
adapter-pr.ymlworkflow runs three jobs against your PR:- boundary — fails if your diff touches files outside your
Owned pathsin GROUPS.md. - test-changed-slot — runs only the matching
test_<slot>.py, plusruffandmypyon your slot's dir. - scorecard — auto-comments a per-group rubric scorecard.
- boundary — fails if your diff touches files outside your
- Branch protection requires a CODEOWNER review. The
@theschoolofaiteam merges on green.
.github/workflows/ci.yml runs on every push and PR:
ruff check .andruff format --check .mypy glc testspytest tests/ --cov=glc --cov-fail-under=80 -m "not requires_live_api"scripts/validate_envelope.py— envelope must not be re-shaped per adapterscripts/validate_policy.py—policy.yamlmust parse and the five lecture defaults must loadscripts/validate_claims.py— no duplicate group rows inGROUPS.md
See docs/ARCHITECTURE.md. The six architectural
moves from Session 11 §7 are the operational answer to the four
documented OpenClaw incidents: ClawJacked, Summer Yue email deletion,
Moltbook DB exposure, and the malicious-skills taxonomy.
- It does not ship any working channel adapter. Every
adapter.pyinglc/channels/catalogue/raisesNotImplementedError. That is the group assignment. - It does not hold paid-API defaults. Free-tier sign-ups are linked
in
docs/VOICE_GUIDE.md. - It does not pull LangChain, CrewAI, AutoGen, or Open Interpreter.
MIT — see LICENSE.