The software stack has a gap.
On one end: tools that capture signal. Dovetail, Intercom, user research platforms—everything that tells you what users need. On the other end: tools that execute. Cursor, v0, Claude Code—everything that turns instructions into working software.
The middle is compressing. And that middle is where the most important work happens: deciding what gets built and why.
Most teams skip it. They go straight from customer feedback to a prompt in Cursor. The result: code that solves the wrong problem, or solves it without context.
We call this missing middle the Intent Layer.
┌─────────────────────────────────────┐
│ User Signal │ ← Feedback, friction, research
├─────────────────────────────────────┤
│ ▶ Intent Layer ◀ │ ← What gets built & why
├─────────────────────────────────────┤
│ Agentic Execution │ ← Cursor, v0, Claude Code
├─────────────────────────────────────┤
│ Shipped Software │
└─────────────────────────────────────┘
Prompts Are Not Intent
A prompt is a request. Intent is a specification.
| Prompt | Intent Spec |
|---|---|
| "Add a checkout flow" | Preconditions, expected outcomes, edge cases, traceability to user friction |
| Ephemeral—typed once, discarded | Versioned, auditable, persistent |
| Invented by the developer | Derived from user signal |
| Optimized for speed to first output | Optimized for correctness of final outcome |
When a developer opens Cursor, they shouldn't be inventing context from scratch. They should be pulling from a system that already computed what needs to be built and why.
Prompts generate code. Intent specs generate the right code.
Why the Gap Exists
Today, intent is scattered across your organization:
- Research lives in Dovetail.
- Specs live in Notion or Google Docs.
- Tasks live in Jira or Linear.
- Context lives in someone's head.
No single system synthesizes user friction into structured, machine-readable intent. Each handoff between these tools introduces drift. Each interpretation introduces error.
The fix isn't another tool in the stack. It's a layer that sits above them—synthesizing signal, structuring intent, and pushing context to every downstream agent.
The Three Layers of Intent
We see software development converging on a 3-layer architecture:
1. Intention — The Raw Signal
Unstructured information: user interviews, support tickets, analytics, NPS surveys. Scattered across disconnected silos. This is where friction surfaces—the raw evidence of where your product fails its users.
2. Structure — Computed Intent
This is the Intent Layer itself. It translates abstract friction into a formalized specification. Not by asking you to write specs from scratch, but by computing them—clustering friction signals and generating structured, evidence-backed specifications.
An IntentSpec is not a document. It's a data object:
objective:
statement: "Reduce cart abandonment at payment step"
success_criteria:
- Checkout completes in under 3 seconds on 3G
- Cart abandonment drops from 23% to below 15%
constraints:
- Must work without JavaScript enabled
- Must support existing payment provider
- Rate limited to prevent abuse
outcomes:
- observable: "Conversion rate increase at payment step"
- verification: "A/B test shows 10%+ improvement"
edge_cases:
- Payment declined → show retry with alternative method
- Session expired → preserve cart state
- Zero items in cart → redirect with explanation
This isn't prose. It's a contract. An agent can execute against it. A human can review it. Both can verify whether it was fulfilled.
3. Projection — Execution
Where the spec becomes executable artifacts: code, UI, API documentation, tests. This is where Cursor, Claude Code, and v0 live. When they receive an IntentSpec instead of a prompt, they don't guess—they execute against explicit criteria.
Why This Matters Now
AI has made execution cheap. You can prototype a working solution in the time it used to take to argue about the wireframe. This is powerful—but it creates a dangerous illusion.
When building is instant, teams skip the hard work of defining what they're building. Fast execution masks poor intent. A shiny AI-generated feature ships in a day, only to increase drop-off because no one asked whether users actually needed it.
This is what we've been calling The Vibe Coding Hangover. Solo developers can hold context in their head. Add a PM, a Designer, and three AI agents—and context fragments. Prompts become requests with no shared definition of success.
The bottleneck has shifted. It's no longer writing code. It's defining what code to write.
The PM's Role is Changing
The PM's job used to be translation: talk to customers, synthesize problems, write specs, hand them to engineers. The value was in the compression—taking noisy, qualitative input and producing structured output.
But that compression step is exactly what language models do well. When agents can take a well-formed problem and produce working code, the spec becomes the product. The PM's job shifts from writing handoff documents to forming intent clearly enough that agents can act on it directly.
This is not a demotion. Clarity is harder than verbosity. Precision is harder than prose.
What an Intent Layer Does
- Captures friction from real user signals—support tickets, research transcripts, analytics—not from intuition alone.
- Structures intent into versioned, machine-readable specs with explicit success criteria, constraints, and edge cases.
- Feeds agents exactly what they need to execute—no hallucination, no drift.
- Verifies outcomes against the defined spec after shipping. Did the friction actually decrease?
- Preserves memory so the team knows why something was built, not just that it was built.
Who Owns Intent?
John Moriarty wrote about the shift from products to systems. His framework for the new design role is "Systemic Orchestration"—designers provide the bricks, blueprints, and building codes, not the finished house.
This applies to product work broadly. Designers, PMs, and engineers are all converging on the same discipline: defining intent with enough structure that agents can execute it faithfully.
Someone has to own that layer. That's what we're building at Pathmode.
Top comments (3)
The "intent layer" is a useful abstraction - separating WHAT the user wants from HOW the system executes it is the move that lets you swap models, tools, or implementations without rewriting the user-facing contract. It's the same reason intent-based design wins elsewhere: capture the goal declaratively, let the execution layer figure out the steps, and you've decoupled the durable thing (intent) from the volatile thing (today's best implementation).
For AI systems specifically this matters more than usual because the execution layer is changing monthly - a better model, a new tool, a cheaper route. If your architecture binds tightly to a specific model/flow, every change is a rewrite; if it's intent-first, swapping the execution is a config change. That decoupling is core to how Moonshift works (a multi-agent pipeline that ships a prompt to a deployed SaaS) - the prompt is the intent, the pipeline figures out execution, so the underlying models can change without breaking the contract (and routing keeps it ~$3 flat). Thought-provoking framing. Where do you draw the boundary - is the intent layer purely declarative (user states the goal) or does it also capture constraints/preferences? That boundary shapes how much the execution layer can safely vary.
Yes, that decoupling is exactly the move.
I'd draw the boundary wider than "user states the goal." The intent layer should be declarative, but it should include constraints, preferences, success criteria, edge cases, and evidence. The execution layer can vary inside that envelope: model, tools, routing, implementation strategy, even agent decomposition.
What it should not be free to vary is the product meaning: what problem is being solved, what must not break, why it matters, and how success will be verified.
That's where I think "prompt as intent" gets fragile. A prompt can express a goal, but unless it carries the evidence behind that goal — the why, not just the what — the pipeline is still guessing.
Drawing the boundary wider is the right correction, and the part you added is the one that matters most: the intent layer has to carry the why, not just the what. A prompt that says build X is a goal; an intent that says build X because of this user problem, must not break Y, succeeds when Z, here are the edge cases and the evidence is a spec the execution layer can actually be held to. That's exactly where prompt-as-intent gets fragile, the prompt expresses the goal but drops the constraints and the evidence, so the pipeline fills the gap by guessing. In Moonshift the thing I treat as the durable contract is precisely that envelope: constraints, success criteria, and what-must-not-break travel with the intent, and the execution layer (model, tools, decomposition) is free to vary inside it as long as the product meaning is preserved and verified. Decouple the what from the how, but make the what carry its own evidence and its own definition of done. Your should-not-vary list (problem, what must not break, why, how success is verified) is the cleanest statement of that I've seen. How are you capturing the evidence-behind-the-goal in practice, structured fields, or attached source material?