2026-04-01

From Chat to Contracts: Why I'm Moving Beyond the Prompt

It’s been a high-bandwidth week in the lab. If there is one thing the latest releases from the "Big Three" model providers have confirmed, it’s that we are officially exiting the era of "Chatting with AI" and entering the era of Agentic Orchestration.

For those of us who grew up on the rigors of C# and MS SQL, the initial "wild west" phase of prompt engineering felt a bit... loose. But this week, seeing the industry lean harder into Specification-Driven Development (SDD) feels like a homecoming. We’re finally treating our AI interactions like the software contracts they ought to be.

1. The Death of the Mega-Prompt

We’ve all seen them: the 3,000-word system prompts that try to cover every edge case. They’re brittle. This week, I’ve been refactoring my Woodshop AI pipeline to move away from monolithic prompts and toward Markdown-based Context Engineering.

Instead of telling the AI how to think, I’m giving it a strict specification. It’s the difference between a loose conversation and an Interface in C#.

The "Spec-First" Prompt Pattern:
Instead of: "You are a blogger for a woodshop, write about tables."
Try this structured context block:

MARKDOWN
### SPECIFICATION: Content_Generator_V2
**Role:** Specification Engineer / Technical Author
**Input_Schema:** { "project_logs": "string", "image_metadata": "array" }
**Constraints:** - Tone: Pragmatic, craftsman-focused.
- No "AI-isms" (e.g., "In the rapidly evolving landscape...").
- Output Format: GitHub Flavored Markdown.
**Logic_Hook:** If project_logs contain "walnut," prioritize "grain-matching" terminology.

2. C# and the Agentic TPL

On the backend side, I’ve been playing with the latest experimental Agentic Task Parallel Library features. We’re seeing a shift where .NET is becoming the glue for multi-agent systems. I’m currently architecting a "Context Broker" that manages state across three different LLMs to handle restaurant reservations—bringing that old PBI Bank "security-first" mindset to a non-deterministic environment.

Here is a snippet of a "Contract Validator" I’m testing to ensure an AI agent’s output matches our domain-driven design (DDD) before it ever touches the database:

C#
public async Task<ValidationResult> ValidateAgentOutput(string aiResponse)
{
    // Using a Specification pattern to ensure AI doesn't hallucinate 
    // outside our business rules.
    var spec = new ReservationIntegritySpecification();
    
    var proposal = JsonSerializer.Deserialize<ReservationProposal>(aiResponse);
    
    if (spec.IsSatisfiedBy(proposal))
    {
        return await CommitToRedshift(proposal);
    }
    
    // Trigger "Refinement Loop" if spec fails
    return await RequestAgentCorrection(aiResponse, spec.GetFailureReasons());
}

3. Retro Constraints for Modern NPUs

If you’re trying to run a 7B model on a local workstation to handle data pipelines, you realize that efficiency is the ultimate feature. I’ve been applying old-school optimization logic to my context windows. By stripping out the "fluff" and using token-dense Markdown summaries.

The Takeaway

The "hype" is settling, and the "engineering" is starting. Whether I’m at the whiteboard or deep in the IDE, the goal remains the same: building systems that matter. This week reminded me that whether it’s a global pay monitor for Mercer or an AI agent for a local woodshop, success lies in the clarity of the contract.

If you aren't writing specs for your agents yet, you're just chatting. And in 2026, chatting is for the water cooler—specs are for production.


What’s on your stack this week? Are you leaning into local execution, or are you still riding the frontier models? Let’s talk architecture.

2026-03-22

The Orchestrator's Shift: Why Your Git Repo is Now an Agent

It’s been a whirlwind week in the ecosystem. Between the London tech conferences and the quiet launch of new open standards, I’ve been reflecting on how our roles as developers are fundamentally shifting. We are moving from being the "implementers" who write every line of code to "orchestrators" who manage teams of digital entities.

If you've been following the news, the term GitAgent likely crossed your radar this week. It’s a concept that hits home for anyone who values specification-driven development and clean architectural patterns.

Beyond the Chatbot: The Rise of Git-Native Agents

One of the most significant releases this week was the open standard for GitAgent. For a long time, AI "agents" felt like black boxes locked inside specific platforms like Claude or OpenAI. If you built a complex prompt or logic in one tool, porting it was a nightmare.

GitAgent changes the game by treating your Git repository as the agent's soul. Instead of unstructured system prompts, you define your agent using:

  • SOUL.md: Defines the core identity and personality.
  • DUTIES.md: Explicitly outlines what the agent is allowed to do and—more importantly—what it is restricted from doing.
  • Memory/: A directory where the agent stores its state in human-readable Markdown files, making "knowledge" version-controlled and reversible via a simple git revert.

Lesson of the Week: "Bounded Autonomy"


A major theme from the recent London technology conference was the "Security Gap." We're seeing reports that AI-assisted code can double the rate of secret leaks compared to human-only code.

The teaching moment here is about Bounded Autonomy. We shouldn't just "vibe code" and hope for the best. By using tools like GitAgent, we can implement Segregation of Duties (SOD). For example, you can define a "Maker" agent to write the code and a "Checker" agent to review it, ensuring that no single entity has total authority over a critical process.

.NET 11 and the "Syntax Bloat" Debate

For those of us deep in the C# and .NET world, the first previews of .NET 11 have sparked some healthy debate. While Microsoft is pushing hard toward "Agentic AI" support—including native Model Context Protocol (MCP) integration—the community is more focused on the new C# 15 syntax.

The new "collection expression arguments" (using with() inside brackets) has been called "syntax bloat" by some, but it's a great example of the language evolving to handle complex data structures more concisely.

The Bottom Line for Learners

If you are learning to code today, don't just focus on the syntax of a specific language. Focus on System Architecture and Agent Coordination.

The most valuable skill in 2026 isn't just knowing how to write a loop; it's knowing how to decompose a massive problem into tasks that specialized agents can execute, and then validating that output against a rigorous specification.

Happy orchestrating!