OpenWebUI has allowed me to avoid this. Combined with OpenTerminal.
I am using zcode with GLM5.3 flash from z.ai due to the extra usage / air drops etc . However nothing I’m doing is tied to that harness.
When I moved from crush to Zcode , the first thing I did was tell Zcode to migrate all of my crush customizations to Zcode and to set things up in a harness agnostic way going forward. It did.
So the harness specific setup is just symbolic links to the canonical .md file in various git repos. Also the heavy use of redmine / discourse / GLPI (via small go CLi wrappers that crush and Zcode made for me ) allows me to remain context / chat agnostic as well.