A note about this build log entry: I published this after the week it covers. DevNitro reconstructed a draft from work-related entries in my journal, Git commit history, and time tracking. I reviewed, edited, and approved the final post. The story reflects what I knew and built at the time.
From the Backlog to the Build Log
Week of December 12 - December 18, 2025
What I Worked On
The big bet this week was provider independence: letting a developer point DevNitro at their own AI subscription instead of forcing them onto mine. If you already pay for Claude Max or an OpenAI Codex plan, DevNitro should use it.
That meant getting DevNitro's CLI to drive AI agent tool calls through each provider. Claude Code through the Claude Agent SDK, and OpenAI through its own OAuth and endpoints. They are not the same shape. I did not realize until I was in it that they use different endpoints and different auth, so half the work was building an abstraction that hides that difference from the rest of the app. By the end of the week, tool calling worked through Codex cleanly and through Claude Code, slower but functional.
I also refactored the Visual Studio extension to drop its .NET Framework 4.8 dependency and move to .NET 8, and swapped the old Claude Agent SDK for the C# SDK so the extension and the CLI share one code path.
What the AI Did Well
Porting the autonomous coding agent to C# and wiring up the agent runner, so a user can kick off a sub-agent like the xUnit test agent, went well once the provider abstraction was in place. I had it work three issues around tool calling and agent invocation in a row, and the write-a-test-then-make-it-pass loop kept it honest.
What Needed Correction
The security lockdown from two weeks ago bit me. I had set the API to deny anonymous access by default, which is correct, except one endpoint genuinely needed to be reachable without a login. So instead of returning JSON, it redirected to the HTML login page, and the callers silently failed. I found it by digging into a poison-message queue full of stuck requests. The fix was to allow anonymous access on that one endpoint and redeploy. Default-deny is right. It also means you have to remember which doors are supposed to stay open.
I also spent a few hours on a decision, not code. I got obfuscation working in GCT and then backed it out. It barely obfuscated anything and it would add friction for enterprise customers running DevNitro in their own environment. I went with licensing instead, which protects the work without getting in the customer's way.
What Shipped
DevNitro drives tool calls through both Claude Code and OpenAI Codex using the developer's own subscription. The agent runner can launch sub-agents. The VS extension runs on .NET 8 with the C# SDK instead of .NET Framework 4.8 and TypeScript. GCT got a data-layer extension-method design and API key auth, a legacy compatibility layer for the pre-2.0 migration path, and multi-targeting so the Domain and SharedKernel build for both .NET 8 and .NET 10.
The Numbers
| Category | Hours |
|---|---|
| Product / Features | 46h 35m |
| Content | 3h 44m |
| Community | 1h 3m |
| Total | 51h 21m |
Almost the whole week was tool calling and the VS extension refactor, with a few hours each on agents and licensing.
Letting developers bring their own AI subscription sounds simple and turns into two providers, two auth flows, and two endpoints pretending to be one. It is also what lets a team keep the AI relationship they already have, instead of renting mine.
Curious how this site was built?
Watch the 5-minute walkthrough at devnitro.com →
0 Comments
No comments yet. Be the first to share your thoughts!
Leave a comment