All notable changes to eyrie are documented here.
Format: Keep a Changelog · Versioning: SemVer
0.2.1 (2026-05-16)
- flaky test TestOpenAIStreamChat_MultipleToolCalls order assertion (f5e7f3b)
- gofumpt formatting (7de54e3)
- gofumpt formatting + go mod tidy (8bd58dc)
- remaining errcheck issues (a0a746a)
- resolve all lint errors (bodyclose, errcheck, gocritic, noctx, unlambda) (566980f)
- syntax errors in test files (51809bc)
- upgrade Go from 1.26.1 to 1.26.3 to patch stdlib vulnerabilities (f4a6594)
- fix flaky TestBackoffDelay by accounting for jitter (5fa573f)
- Version re-baselined to
0.2.0ineyrie.go(const Version) andclient/client.go(var Version, used in theUser-Agentheader). Aligns eyrie with the rest of the hawk-eco ecosystem (hawk,tok,yaad,sight,inspect).
- Same-style hardening pass already on this branch:
strict
golangci-lintv2 config, unchecked-error fixes acrossobservability.go,sdk/go/client.go,storage/dag.go,storage/sqlite.go, dead-code removal, and gofmt cleanup of the residual blank-line drift inclient/client.go. CONTRIBUTING.md— development setup, branch flow, conventional commits, test/lint requirements.CODE_OF_CONDUCT.md— Contributor Covenant 2.1..gitattributes— LF line-ending normalization, binary detection, GitHub linguist hints..github/dependabot.yml— weeklygomod+github-actionsupdates..github/PULL_REQUEST_TEMPLATE.md— Summary / Changes / Testing / Checklist..github/ISSUE_TEMPLATE/bug_report.yml— structured bug report..github/ISSUE_TEMPLATE/feature_request.yml— feature request with solo-developer fit checks..github/ISSUE_TEMPLATE/config.yml— routes security reports to GitHub Security Advisories, questions to Discussions, blocks blank issues.
Initial release.
Clients
Providerinterface —Chat,StreamChat,Ping,Name— composable and mockableAnthropicClient— Anthropic Messages API with full content block supportOpenAIClient— OpenAI and all OpenAI-compatible providersMockProvider— testing without API keys (echo / fixed / tool_use / error / max_tokens modes)EyrieClient— thread-safe universal client with cached provider instances
Streaming
- SSE parser for Anthropic and OpenAI formats
- Tool call streaming —
input_json_deltaaccumulation (Anthropic), index-based accumulation (OpenAI) - Thinking block streaming (
thinking_delta) StreamResultwithClose()— no goroutine leaks- Buffered channels (64) with goroutine-owned close
Reliability
- Retry — exponential backoff, full jitter,
Retry-Afterheader support ChatWithContinuation— auto-retry onmax_tokens(up to 3 continuations)WithRateLimit— token bucket rate limiter decorator- Fallback provider chains with automatic failover on retriable errors
- Provider health checking and success/failure stat tracking
Caching
AddCacheBreakpoints— Anthropiccache_controlon system prompt and conversation prefix- Semantic caching for repeated queries
- Cache analytics (hit/miss stats)
Catalog
- Embedded model catalog — pricing, context windows, max output for 8 providers
- Live fetch from OpenRouter and CanopyWave
- Model tier resolution — opus / sonnet / haiku → concrete model IDs
- Model name canonicalization and marketing display names
- Deprecation warnings per provider
Config
- Provider detection from env vars (priority order)
~/.hawk/provider.jsonconfig file I/OApplyProviderConfigToEnv— applies config toos.Environ- OpenAI-compatible runtime resolution
- Provider profile management
Advanced
- Call metrics collector for provider usage tracking
- Role merge utility for message optimization
- Dynamic provider registration with registry freezing
- Weighted provider selection for load balancing
- Batch API support (Anthropic Message Batches)
- Cost estimator for pre-call cost prediction
- Embedding support
Quality
User-Agent: eyrie/0.1.0on all HTTP requests- Request ID captured from response headers
- 4 KB error body cap — prevents OOM on large error responses
"eyrie: "prefix on all errors with%wwrapping- Zero external dependencies · Go 1.26