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 createdCore 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_messageWhy 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 Type | Response |
|---|---|
| Timeout | Retry with longer timeout |
| Rate limit | Exponential backoff |
| Network error | Retry with backoff |
| Validation error | Fix and retry once |
| Not found | Skip step, continue |
| Auth error | Fail gracefully, alert user |
Using the Orchestrator
Starting a Conversation
- Go to Agents → Fabric AI (Orchestrator)
- Type your request naturally
- 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:
| Mode | Max Steps | Use Case |
|---|---|---|
| Lite | 10 | Quick tasks, simple queries |
| Balanced | 20 | Standard workflows (default) |
| Deep | 25 | Complex 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:
- High-risk operations — Delete, bulk updates
- External actions — First-time tool usage
- Expensive operations — Large API calls
- 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 listedMCP 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
| Scenario | Use Tool | Use 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' }]