PickLLM reads OPENHERMES_URL/OPENHERMES_MODEL from the environment and mounts
OpenHermesClient when a URL is set, else StubLLM -- the bus wiring is identical
either way. EnvLookup helper parses Env.vars. Verified both paths compile + run.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015hmgREHNsxYCuim33yUF2c
A real model call is network/process IO, so the LLM seam is now a behaviour
with a response callback (ResponseFn), not a synchronous function. StubLLM
answers immediately; OpenHermesClient + OpenHermesConfig (OpenAI-compatible
url/model) are the real plug, swappable for the stub. CerebellumHarness chains
its passes through the async callback. Compiles on ponyc 0.64; demo green.
Next: wire the actual chat/completions call behind OpenHermesClient.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015hmgREHNsxYCuim33yUF2c
C1 integration spine as an Ichor organ. CerebellumHarness receives a turn off
the bus, sequences N passes through a swappable LLM adapter (the OpenHermes
plug; StubLLM stands in), and emits the synthesis back onto the bus toward the
Brain (crossing D1). Add Cerebellum to OrganId; wire a turn in the demo main.
Compiles on ponyc 0.64; end-to-end run green (turn -> cerebellum -> D1 -> brain).
Also: add a small read-only permission allowlist (toolchain probes/versions).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015hmgREHNsxYCuim33yUF2c