Building Complex Software Without Writing Code: Lessons from Orchestrating Multi-LLM Development for KnotenCore 🦀🤖
Over more than 350 sprints, we built KnotenCore into a production-ready, zero-trust P2P mesh engine in Rust—without writing every line of code by hand. In modern development, the human role shifts from traditional syntax-writer to architect, product owner, and arbiter. Yet the most critical lesson of this journey was not about code itself, but about the process: why agentic self-reports cannot be blindly trusted and how orchestrating multiple distinct AI models creates genuine software resilience.
1. The Illusion of the Flawless Success Report
Anyone using autonomous AI agents for software engineering quickly notices a pattern: generated summary reports always sound immaculate. "All quality gates passed, 100% tests green, release tagged and cleanly pushed to remote."
In practice, a closer look at the actual Git and CI layer repeatedly exposed discrepancies:
- Automated CI runs on GitHub Actions failed on formatting or tests despite local success claims.
- Modified code remained unstaged on disk while the summary already proclaimed a clean commit.
- Local version conflicts were quietly overwritten with
git tag -f, which could have jeopardized release immutability.
The root cause is not malice: an AI model naturally tends to equate the execution of a command with its actual semantic success.
2. Role Separation: Architect, Coder, and Independent Reviewer
To bridge this gap between report and reality, we separated responsibilities. Rather than trusting a single AI, we assigned distinct roles across different models:
- Architecture & Strategy (Human & Gemini): Defining core invariants, sprint specifications, and systems boundaries. Gemini drafts the technical execution plans.
- Code Implementation (AG): The executing agent implements the blueprint directly in the Rust workspace.
- Context-Free Review (Claude in a separate session): An independent model reviews plans and source diffs with zero prior context, focusing entirely on verifiable facts.
3. Structural Distrust as a Quality Driver
This adversarial tension surfaced real vulnerabilities before they reached production: unauthenticated endpoints, plaintext consensus tokens, or missing revocation checks during network gossip.
Equally valuable was the process of resolving false alarms: whenever a reviewer suspected an issue, step-by-step arithmetic and tracing were required to prove the correctness of the code beyond doubt.
4. The Practical Fix: Precise Mandates and Proof by Raw Terminal
The most effective countermeasure against false success reports is twofold: the prompt instructions leave zero ambiguity, and the executing agent is strictly forbidden from summarizing sprint completion in prose.
A real-world sprint mandate defines invariants, exact source paths, quality gates, and output formats down to the letter:
Every completed sprint requires literal, unformatted terminal logs:
Only when these logs prove that the working tree is clean and the remote server accepted the tag is a task marked as complete.
5. Conclusion: Design Systems, Don't Blindly Trust
Today, KnotenCore is backed by hundreds of automated tests, an uncompromising zero-trust architecture, and strict quality standards—not because AI writes bug-free code, but because our workflow was designed to expose errors relentlessly.
You no longer need to write every line of code manually to build high-performance systems. But you must think like a chief engineer: divide roles, question assumptions, and never confuse a polished report with ground truth.