Documentation

Fabric Orchestrator

The intelligent coordinator that routes tasks, manages workflows, and learns from experience.

The Fabric Orchestrator is the brain of Fabric AI. It intelligently routes your requests to the right agents and tools, manages complex multi-step workflows, and learns from every interaction to get better over time.

What Makes the Orchestrator Special?

Before the Orchestrator

User: "Create a PRD and add stories to Jira"


┌─────────────────────────────────────────┐
│           Manual Process                 │
│  1. Open Document Generator              │
│  2. Generate PRD                         │
│  3. Copy PRD content                     │
│  4. Open Jira                            │
│  5. Manually create stories              │
│  6. Hope nothing fails                   │
└─────────────────────────────────────────┘

With the Orchestrator

User: "Create a PRD and add stories to Jira"


┌─────────────────────────────────────────┐
│           Orchestrator                   │
│  1. Analyze request                      │
│  2. Create execution plan                │
│  3. Generate PRD (auto-route to agent)   │
│  4. Extract stories from PRD             │
│  5. Create Jira tickets (MCP tool)       │
│  6. Handle errors automatically          │
│  7. Learn for next time                  │
└─────────────────────────────────────────┘


    PRD + Jira stories created

Core Capabilities

1. Semantic Routing

The Orchestrator uses AI embeddings to find the best executor for your task:

Request: "Post this update to our team Slack"


┌─────────────────────────────────────────┐
│        Semantic Search                   │
│  Query: "post update slack"              │
│                                          │
│  Results:                                │
│  • slack-mcp: send_message (0.94)       │
│  • notification-agent (0.71)             │
│  • email-workflow (0.45)                 │
└─────────────────────────────────────────┘


      Use slack-mcp send_message

Why this matters:

  • No need to remember which tool does what
  • Works with 100+ tools without confusion
  • Natural language understanding

2. Task Planning

Complex requests are automatically decomposed:

Request: "Create a PRD for auth, generate stories, post to Slack"


┌─────────────────────────────────────────────────────────────┐
│                        Task Plan                             │
├─────────────────────────────────────────────────────────────┤
│ Step 1: Generate PRD                                         │
│   Executor: document-generator                               │
│   Outputs: prd_document                                      │
│                                                              │
│ Step 2: Extract Stories                                      │
│   Executor: task-planner                                     │
│   Inputs: prd_document                                       │
│   Outputs: story_list                                        │
│                                                              │
│ Step 3: Create Jira Tickets                                  │
│   Executor: jira-mcp                                         │
│   Inputs: story_list                                         │
│   Outputs: ticket_ids                                        │
│                                                              │
│ Step 4: Post Summary to Slack                                │
│   Executor: slack-mcp                                        │
│   Inputs: prd_document, ticket_ids                           │
│   Outputs: message_sent                                      │
└─────────────────────────────────────────────────────────────┘

3. Context Flow

Each step can use outputs from previous steps:

Step 1 Output: { prd_document: "## Authentication PRD..." }


Step 2 Input:  Uses prd_document
Step 2 Output: { stories: [{ title: "Login flow" }, ...] }


Step 3 Input:  Uses stories
Step 3 Output: { ticket_ids: ["AUTH-1", "AUTH-2", ...] }


Step 4 Input:  Uses prd_document AND ticket_ids
Step 4 Output: { message: "Posted to #engineering" }

4. Trust-Based Approvals

The Orchestrator learns what you approve:

Week 1:
┌────────────────────────────────────────────────────────────┐
│ "Post to Slack?"  [Approve] [Reject]                       │
│ "Create Jira ticket?"  [Approve] [Reject]                  │
│ "Post to Slack?"  [Approve] [Reject]                       │
│ "Create Jira ticket?"  [Approve] [Reject]                  │
└────────────────────────────────────────────────────────────┘

Week 4:
┌────────────────────────────────────────────────────────────┐
│ Post to Slack: ✅ Auto-approved (100% approval history)    │
│ Create Jira: ✅ Auto-approved (100% approval history)      │
│ Delete 50 records: ⚠️ [Approve] [Reject] (always ask)     │
└────────────────────────────────────────────────────────────┘

5. Memory System

The Orchestrator remembers what works and what doesn't:

Positive Memory:

  • Successful routing patterns
  • Effective tool combinations
  • Working prompts and parameters

Negative Memory:

  • Failed approaches
  • Rate-limited operations
  • Error-prone patterns
New request similar to past failure:
"⚠️ Similar task failed 3 days ago due to rate limiting.
 Automatically batching operations with delays."

6. Graceful Recovery

When things go wrong, the Orchestrator handles it:

Error TypeResponse
TimeoutRetry with longer timeout
Rate limitExponential backoff
Network errorRetry with backoff
Validation errorFix and retry once
Not foundSkip step, continue
Auth errorFail gracefully, alert user

Using the Orchestrator

Starting a Conversation

  1. Go to Agents → Fabric AI (Orchestrator)
  2. Type your request naturally
  3. The Orchestrator handles the rest

Example Requests

Simple:

"Create a PRD for user authentication"

Multi-step:

"Create a PRD for the payment feature, then generate
user stories and create them in Jira"

With context:

"Based on our Q4 roadmap, create a technical spec
for the new API gateway and post a summary to #engineering"

Execution Modes

Choose the right mode for your task:

ModeMax StepsUse Case
Lite10Quick tasks, simple queries
Balanced20Standard workflows (default)
Deep25Complex multi-agent tasks

Attaching Context

Improve results by attaching:

  • Workspaces — Documents for RAG context
  • Projects — Previous project documents
  • Specific files — Upload directly

Workflow Visualization

Watch your workflow execute in real-time:

┌──────────────────────────────────────────────────────────┐
│                  Workflow Progress                        │
├──────────────────────────────────────────────────────────┤
│ Step 1: Generate PRD                    ✓ Complete       │
│   └── Using document-generator                           │
│   └── 3.2 seconds                                        │
│                                                          │
│ Step 2: Extract Stories                 ● In Progress    │
│   └── Using task-planner                                 │
│   └── Processing...                                      │
│                                                          │
│ Step 3: Create Jira Tickets             ○ Pending        │
│                                                          │
│ Step 4: Post to Slack                   ○ Pending        │
└──────────────────────────────────────────────────────────┘

Approval Workflows

When Approvals Are Needed

The Orchestrator requests approval for:

  1. High-risk operations — Delete, bulk updates
  2. External actions — First-time tool usage
  3. Expensive operations — Large API calls
  4. Unknown patterns — New types of requests

Approval Interface

┌──────────────────────────────────────────────────────────┐
│                  Approval Required                        │
├──────────────────────────────────────────────────────────┤
│                                                          │
│  The workflow wants to:                                   │
│                                                          │
│  ✓ Create PRD document (auto-approved)                   │
│  ✓ Generate 5 user stories (auto-approved)               │
│  ⚠️ Create 5 Jira tickets                                │
│                                                          │
│  Affected resources:                                      │
│  • Jira project: AUTH                                    │
│  • 5 new tickets                                         │
│                                                          │
│  [Approve All]  [Approve Without Jira]  [Reject]         │
│                                                          │
└──────────────────────────────────────────────────────────┘

Consolidated Prompts

Multiple approvals are grouped into one:

Before: 5 separate approval prompts
After:  1 consolidated prompt with all actions listed

MCP Tool Integration

The Orchestrator can execute MCP tools directly:

Available Tools

  • GitHub — Issues, PRs, repositories
  • Jira — Tickets, sprints, projects
  • Slack — Messages, channels
  • Notion — Pages, databases
  • Linear — Issues, projects
  • And many more...

Tool Selection

The Orchestrator automatically selects tools:

Request: "Create a Jira ticket for the login bug"


┌─────────────────────────────────────────┐
│  Tool Selection                          │
│  • Search: "create jira ticket"          │
│  • Match: jira-mcp → create_issue (0.96) │
│  • Decision: Use MCP tool directly       │
└─────────────────────────────────────────┘

Tool vs. Agent Delegation

ScenarioUse ToolUse Agent
Direct API call
Simple CRUD
Needs reasoning
Complex generation
Multi-step logic

Advanced Features

Follow-up Handling

The Orchestrator understands context:

You: "Create a PRD for auth"
Orchestrator: [Generates PRD]

You: "Actually, also include OAuth support"
Orchestrator: "Updating PRD to include OAuth..."
[Modifies existing document, not starting over]

Journey Tracking

Full context is maintained:

  • Current phase of execution
  • Decisions made and why
  • Assumptions with confidence levels
  • All artifacts generated
  • Complete conversation history

Real-time Signals

Query workflow state anytime:

// Get current progress
const progress = await orchestrator.query('progress');
// { currentStep: 2, totalSteps: 5, status: 'executing' }

// Get generated artifacts
const artifacts = await orchestrator.query('artifacts');
// [{ type: 'prd', name: 'Auth PRD', status: 'complete' }]

Next Steps