The model call was the easy part: keeping an agent stack replaceable
Getting an agent to answer was the easy part.
The architecture became difficult later. Model-specific types started crossing boundaries. Tool calls depended on one SDK. Chat state lived inside UI comp
agentskit.hashnode.dev7 min read