An ADR records a decision that was hard to make and would be expensive to reverse — what was decided, what it costs, and what would change it. These seven are the load-bearing ones: almost every surprising thing about skyl's API traces back to one of them.
The records#
ADR-0001: Two-module layout
Why the repository is several Go modules rather than one.
ADR-0002: A four-method Provider
Why the seam is exactly four methods, and not two or ten.
ADR-0003: chi belongs to the gateway
Why importing the library never pulls in a router.
ADR-0004: Model IDs are pass-through
The most consequential decision in the project.
ADR-0005: No Copilot provider
Why a package that could exist deliberately does not.
ADR-0006: Anthropic is its own module
Why Claude support is a second go get.
ADR-0007: OTel is its own module
Why observability costs you nothing unless you want it.
Why keep them#
A decision without a recorded reason gets re-litigated every six months, and eventually gets reversed by someone who did not know what it cost to make.
Three of these seven are the reason a reader is surprised by something. If you
have ever wondered why Claude needs a second go get, why skyl ships no model
constants, or why there is no provider/copilot — the answer is here rather
than in a commit message from a year ago.
Format#
Each follows the same shape: Context, Decision, Consequences (good and bad), and Alternatives considered. The alternatives section is the one worth reading — it is where you find out whether the obvious idea was missed or rejected.