← All posts

Provider Auth Recovery, Voice Defaults, and Release Guardrails

Keating now recovers more cleanly when provider credentials are missing, the voice path has saner defaults, provider-aware web search behavior is less surprising, and the dev shell finally carries versioning and hook guardrails instead of relying on memory.

This update is about making Keating less brittle around the edges. The teaching engine did not change direction, but the setup path, speech path, and provider defaults were tightened so the product behaves more predictably when credentials are missing or a provider has special capabilities.

Provider Auth Recovery

Recent CLI, runtime, and settings work makes provider credential resolution fail earlier and explain itself more clearly. That matters because setup friction is not a cosmetic problem for a tutoring tool: if the shell or web app quietly starts with unusable credentials, the learner experiences the failure as product instability. The goal here is straightforward: missing auth should be explicit, recoverable, and consistent across surfaces.

Voice Defaults

The voice stack also got a correctness pass. Keating now does a better job of choosing sane defaults for speech providers and avoiding the feeling that voice is available in principle but misconfigured in practice. That keeps speech as an optional enhancement instead of a source of confusing half-on states.

Provider-Aware Search

Provider-specific web search and grounding defaults were cleaned up so the browser side is less surprising. The important part is not a new toggle; it is that the toggle now follows provider capability more closely, which makes searches and grounded responses easier to reason about when switching models.

Release Guardrails

At the time of this release, the repo gained a proper devenv.nix path for release hygiene. It exposed bumpy when the pinned nixpkgs revision provided it, added a small bump-version helper that ran just sync-version afterwards, and wired repo-local git hooks so version drift was checked before commit while root and web tests ran before push. Those command names describe the release-era workflow rather than today's task interface.