ad588542ea
HonchoClientConfig.from_global_config() only consulted top-level baseUrl / base_url / HONCHO_BASE_URL in ~/.honcho/config.json. The Honcho SDK's native config format — and what Claude Desktop writes — nests the URL at endpoint.baseUrl. Users with that config format had their self-hosted Honcho container silently ignored: every honcho_* call routed to https://api.honcho.dev with a workspace_id that does not exist there, so tools returned empty data with no error anywhere. Resolution order in from_global_config(), highest first: 1. endpoint.baseUrl (SDK-native, what Claude Desktop writes) 2. baseUrl / base_url (root-level, existing behavior) 3. HONCHO_BASE_URL (existing env var) 4. HONCHO_URL (the SDK's own env var, honcho/client.py:234) HONCHO_URL is also read in from_env(). from_global_config() delegates to from_env() whenever the config file is missing or unreadable, so an env fallback wired into only one of the two would silently do nothing for users with no config file. A non-dict endpoint value falls through cleanly rather than raising. Existing users are unaffected — the new sources are consulted only when the existing ones resolve to None. The INFO log for the base_url-unset case now says so explicitly instead of printing only the host. The SDK resolves that case from its own ENVIRONMENTS map (honcho/client.py:36-39), which for environment= production means the public cloud; a self-hosted user whose config was not picked up otherwise sees a healthy-looking startup line. Closes #43800.