A format per module, not a fatter config core
Viper reads a dozen extensions. Mine reads one, and the other formats live somewhere else entirely. Here's what that bought, measured rather than asserted.

Viper reads a dozen extensions. Mine reads one, and the other formats live somewhere else entirely. Here's what that bought, measured rather than asserted.

I set out to add a config writer and keep Viper. I ended up keeping the writer and deleting Viper, and I didn't notice until it was already gone.

I built a boundary so I wouldn't have to move my config package. Then I moved it anyway, and the boundary is the only reason that didn't hurt.

One interface posts a reel to four platforms cleanly. Their OAuth token handling refused to unify at all, which is why I built all four first.

A cull is worthless if it cannot follow you into Lightroom. Writing XMP sidecars out of krites, and being careful about what not to write.

afmpeg shipped single input to single output. Adding multi-pad filter graphs and multi-output muxing: one decode, two files, one pass.

A browser will not attach a bearer token to a page navigation. Swapping the header for a cookie the framework already understood, without weakening it.

An agent is a model in a loop with tools it can really call and results it can really see. Taking the ReAct pattern apart in go-tool-base.

TikTok's OAuth flow wants you to copy a code out of a web page and paste it into a terminal. What it took to give keryx a native flow instead.

Where a signing key lives is the most provider-specific decision in the whole business, so the framework deliberately refuses to have an opinion.
