Today's AI applications are powerful but fragmented. While we have excellent agent frameworks, LLM APIs, and development tools, connecting them reliably in production remains a significant challenge. It's like having all the ingredients for a gourmet meal but missing the crucial binding elements that make everything work together.

The Problem: Production Reality Hits Hard

In March 2024, while building AI agents to scale onboarding for hundreds of thousands of buyers and sellers in our marketplace startup, we hit the wall that many teams encounter: production reliability. Service coordination failed, errors cascaded, and unnecessary agent calls racked up expensive LLM costs. Our carefully crafted demo environment simply couldn't handle real-world complexity.

<aside> đź’ˇ

A crucial realisation emerged: traditional workflow systems built for deterministic processes fundamentally break down when handling cognitive software like AI agents.

Tools designed for predictable, step-by-step processes (like Temporal.io or Apache Airflow) assume you can map out every possible path beforehand. However, agent workflows are inherently dynamic—they adapt, reason, and change course based on context. You need infrastructure designed specifically for this cognitive nature.

</aside>

This experience, combined with our background in distributed systems and developer tooling (having built Kubernetes tools used by thousands of developers and Applied AI products since 2017), led us to identify a critical missing piece: the coordination layer between AI applications and their execution environment.

The Orra Hypotheses

Orra is built on three core hypotheses:

  1. Multi-agent applications need infrastructure, not frameworks
  2. Intelligent planning must be grounded in reality
  3. Tools as services reduce cognitive load

What Orra Does: The Plan Engine

orra-diagram.png

Orra's Plan Engine provides the missing coordination layer between your AI application and its execution environment. It connects:

All through language-agnostic SDKs that preserve your preferred development patterns.

Here's how it works in practice:

Python

from orra import OrraAgent

agent = OrraAgent(
    name="research-agent",
    description="Researches topics using web search and knowledge base"
)

@agent.handler()
async def research(task: Task[ResearchInput]) -> ResearchOutput:
    results = await run_research(task.input.topic)
    return ResearchOutput(summary=results)