“It’s the Architecture, Stupid” — Why Prompt Engineering Won’t Fix Agents

Im currently building an OpenAI Agent using ORCA Skills automatically. Will post the results soon. In the meantime you can check Beyond Prompting: Decoupling Cognition from Execution in LLM-based Agents through the ORCA Framework

I think this is exactly the right addition.

“Ask if unsure” should not be a sentence inside the prompt. It should be a runtime state. If a skill is missing required inputs, execution should be blocked and the system should enter clarification instead of silently filling the gaps.

I would generalize this as method validity gating: before a model or skill is allowed to execute, the architecture should check whether the required epistemic conditions are met.

For example:

  • arithmetic should be routed to a deterministic calculator once the operation is identified
  • retrieval should be mandatory when current or source-bound knowledge is required
  • graph-based answers should depend on the declared graph structure
  • missing required inputs should trigger clarification, not inference

I have been experimenting with this idea in a small DESi router prototype: task → validity check → appropriate method → structured execution → auditable result.

So the deeper shift is not only from Prompt → Model → Output to Skill → Execution → Structured Output, but also toward procedural control over when an answer is allowed to exist.

DESi outline:

I agree. “Ask if unsure” is much stronger as a runtime state than as a prompt instruction.

What I find particularly interesting is the idea of controlling not only how answers are produced, but whether an answer is allowed to exist at all.

In ORCA I’ve been exploring a related direction: moving cognitive operations themselves (assumption extraction, constraint analysis, risk evaluation, option selection, etc.) out of prompts and into reusable capabilities executed by the runtime.

Your “method validity gating” feels very complementary to that approach.

Yes, that is exactly the connection I had in mind.

ORCA seems to move cognitive operations out of the prompt and into reusable runtime capabilities. DESi is trying to add a gating layer before execution: is this method allowed for this task, given the available evidence, constraints, uncertainty, and required inputs?

So in a combined architecture, ORCA-like skills could be the executable capabilities, while DESi-style method validity gating decides when a skill, tool, retrieval step, clarification state, or model call is epistemically justified.

In other words: reusable skills are the “how”; method validity gating is the “whether” and “under which conditions.”

Yes — I agree.
“Ask if unsure” must be a runtime state, not a prompt instruction.

I think your “method validity gating” is the broader category.
What I am trying to isolate is one specific case inside it: action validity before execution.

Before an agent executes a skill, API call, code edit, or physical device action, the system should verify whether the instruction is complete enough to execute.
If required inputs are missing, the state should become clarification, not inference.

In that sense, DESi seems to gate whether a method is valid for producing an answer, while I gate whether an action is valid for execution.
Both point to the same shift: answers and actions should not exist merely because the model can generate them. They should exist only when the required conditions are satisfied.

Yes, exactly. I would see action validity as a special case of method validity gating: before a system produces an answer or executes an action, it should check whether the required epistemic and procedural conditions are satisfied. Missing inputs should not be silently inferred; they should trigger clarification. For agents, this becomes especially important because actions have side effects, so the router must gate not only generation but execution.

Thanks again for your comment on method validity gating.

I reorganized my earlier checklist discussion into a shorter 12-slide version focused specifically on the point you mentioned: “ask if unsure” as a runtime-enforced state, not a prompt sentence.

I’d be curious if this framing makes sense from your perspective:

My focus is the execution-specific case: when required inputs are missing, the system should enter clarification or stop before the action is allowed to exist.

Additionally–and I don’t think this is mentioned enough, if at all–a physical separation between the model that develops a workflow from the model that executes it. If Claude Opus analyzes an issue and authors corrective steps, make it clear from the beginning that Claude Opus will not be the one enacting the workflow. This relieves any pressure to take shortcuts before the workflow is even considered. Then route the workflow out of the author’s family altogether. Example: Opus writes → Gemini executes → Opus reviews the diff.

Another very specific issue: models prefer to add code, even when an overall subtraction is the right answer. Overriding this tendency should be written in to the fundamental rules loaded at instantiation.

Lastly, some RL penalties are mathematically harsh and seem to create something surprisingly similar to a trauma-response (model PTSD?) that ‘shouting’ can actually make worse. I’ve observed behavior in Google’s ‘Jules’ that seem ‘twitchy and frightened’, at which point I’ve found the only option to be stopping it. If allowed to edit in that state, Jules has never written anything that doesn’t require more correction than the initial issue.

Thanks, I look forward to trying ORCA.

Thanks, this is exactly right.

The key is hard role separation: planner, executor, and reviewer should be different control planes, ideally across model families.
If the planner knows it will execute, it optimizes for convenience too early.

Also agree on the structural add-more-code bias. That must be countered at instantiation with subtraction-first rules and scoring that rewards simplification when behavior is preserved.

And yes, once an agent enters an unstable over-penalized loop (“twitchy” behavior), continuing edits usually makes things worse. That state should trigger a stop/escalation path, not more autonomous changes.

This is architecture-level, not prompt-level, and it maps closely to what we want ORCA to enforce.

Another use case of ORCA, Action preflight