Vapora/docs/architecture/task-agent-doc-manager.html
Jesús Pérez 7110ffeea2
Some checks failed
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled
chore: extend doc: adr, tutorials, operations, etc
2026-01-12 03:32:47 +00:00

560 lines
27 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Task, Agent &amp; Doc Manager - VAPORA Platform Documentation</title>
<!-- Custom HTML head -->
<meta name="description" content="Comprehensive documentation for VAPORA, an intelligent development orchestration platform built entirely in Rust.">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "dark";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">VAPORA Platform Documentation</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
<a href="https://github.com/vapora-platform/vapora" title="Git repository" aria-label="Git repository">
<i id="git-repository-button" class="fa fa-github"></i>
</a>
<a href="https://github.com/vapora-platform/vapora/edit/main/docs/src/../architecture/task-agent-doc-manager.md" title="Suggest an edit" aria-label="Suggest an edit">
<i id="git-edit-button" class="fa fa-edit"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="task-agent--documentation-manager"><a class="header" href="#task-agent--documentation-manager">Task, Agent &amp; Documentation Manager</a></h1>
<h2 id="multi-agent-task-orchestration--documentation-sync"><a class="header" href="#multi-agent-task-orchestration--documentation-sync">Multi-Agent Task Orchestration &amp; Documentation Sync</a></h2>
<p><strong>Status</strong>: Production Ready (v1.2.0)
<strong>Date</strong>: January 2026</p>
<hr />
<h2 id="-overview"><a class="header" href="#-overview">🎯 Overview</a></h2>
<p>System that:</p>
<ol>
<li><strong>Manages tasks</strong> in multi-agent workflow</li>
<li><strong>Assigns agents</strong> automatically based on expertise</li>
<li><strong>Coordinates execution</strong> in parallel with approval gates</li>
<li><strong>Extracts decisions</strong> as Architecture Decision Records (ADRs)</li>
<li><strong>Maintains documentation</strong> automatically synchronized</li>
</ol>
<hr />
<h2 id="-task-structure"><a class="header" href="#-task-structure">📋 Task Structure</a></h2>
<h3 id="task-metadata"><a class="header" href="#task-metadata">Task Metadata</a></h3>
<p>Tasks are stored in SurrealDB with the following structure:</p>
<pre><code class="language-toml">[task]
id = "task-089"
type = "feature" # feature | bugfix | enhancement | tech-debt
title = "Implement learning profiles"
description = "Agent expertise tracking with recency bias"
[status]
state = "in-progress" # todo | in-progress | review | done | archived
progress = 60 # 0-100%
created_at = "2026-01-11T10:15:30Z"
updated_at = "2026-01-11T14:30:22Z"
[assignment]
priority = "high" # high | medium | low
assigned_agent = "developer" # Or null if unassigned
assigned_team = "infrastructure"
[estimation]
estimated_hours = 8
actual_hours = null # Updated when complete
[context]
related_tasks = ["task-087", "task-088"]
blocking_tasks = []
blocked_by = []
</code></pre>
<h3 id="task-lifecycle"><a class="header" href="#task-lifecycle">Task Lifecycle</a></h3>
<pre><code>┌─────────┐ ┌──────────────┐ ┌────────┐ ┌──────────┐
│ TODO │────▶│ IN-PROGRESS │────▶│ REVIEW │────▶│ DONE │
└─────────┘ └──────────────┘ └────────┘ └──────────┘
△ │
│ │
└───────────── ARCHIVED ◀───────────┘
</code></pre>
<hr />
<h2 id="-agent-assignment"><a class="header" href="#-agent-assignment">🤖 Agent Assignment</a></h2>
<h3 id="automatic-selection"><a class="header" href="#automatic-selection">Automatic Selection</a></h3>
<p>When a task is created, SwarmCoordinator assigns the best agent:</p>
<ol>
<li><strong>Capability Matching</strong>: Filter agents by role matching task type</li>
<li><strong>Learning Profile Lookup</strong>: Get expertise scores for task-type</li>
<li><strong>Load Balancing</strong>: Check current agent load (tasks in progress)</li>
<li><strong>Scoring</strong>: <code>final_score = 0.3*load + 0.5*expertise + 0.2*confidence</code></li>
<li><strong>Notification</strong>: Agent receives job via NATS JetStream</li>
</ol>
<h3 id="agent-roles"><a class="header" href="#agent-roles">Agent Roles</a></h3>
<div class="table-wrapper"><table><thead><tr><th>Role</th><th>Specialization</th><th>Primary Tasks</th></tr></thead><tbody>
<tr><td><strong>Architect</strong></td><td>System design</td><td>Feature planning, ADRs, design reviews</td></tr>
<tr><td><strong>Developer</strong></td><td>Implementation</td><td>Code generation, refactoring, debugging</td></tr>
<tr><td><strong>Reviewer</strong></td><td>Quality assurance</td><td>Code review, test coverage, style checks</td></tr>
<tr><td><strong>Tester</strong></td><td>QA &amp; Benchmarks</td><td>Test suite, performance benchmarks</td></tr>
<tr><td><strong>Documenter</strong></td><td>Documentation</td><td>Guides, API docs, README updates</td></tr>
<tr><td><strong>Marketer</strong></td><td>Marketing content</td><td>Blog posts, case studies, announcements</td></tr>
<tr><td><strong>Presenter</strong></td><td>Presentations</td><td>Slides, deck creation, demo scripts</td></tr>
<tr><td><strong>DevOps</strong></td><td>Infrastructure</td><td>CI/CD setup, deployment, monitoring</td></tr>
<tr><td><strong>Monitor</strong></td><td>Health &amp; Alerting</td><td>System monitoring, alerts, incident response</td></tr>
<tr><td><strong>Security</strong></td><td>Compliance &amp; Audit</td><td>Code security, access control, compliance</td></tr>
<tr><td><strong>ProjectManager</strong></td><td>Coordination</td><td>Roadmap, tracking, milestone management</td></tr>
<tr><td><strong>DecisionMaker</strong></td><td>Conflict Resolution</td><td>Tie-breaking, escalation, ADR creation</td></tr>
</tbody></table>
</div>
<hr />
<h2 id="-multi-agent-workflow-execution"><a class="header" href="#-multi-agent-workflow-execution">🔄 Multi-Agent Workflow Execution</a></h2>
<h3 id="sequential-workflow-phases"><a class="header" href="#sequential-workflow-phases">Sequential Workflow (Phases)</a></h3>
<pre><code>Phase 1: Design
└─ Architect creates ADR
└─ Move to Phase 2 (auto on completion)
Phase 2: Development
└─ Developer implements
└─ (Parallel) Documenter writes guide
└─ Move to Phase 3
Phase 3: Review
└─ Reviewer checks code quality
└─ Security audits for compliance
└─ If approved: Move to Phase 4
└─ If rejected: Back to Phase 2
Phase 4: Testing
└─ Tester creates test suite
└─ Tester runs benchmarks
└─ If passing: Move to Phase 5
└─ If failing: Back to Phase 2
Phase 5: Completion
└─ DevOps deploys
└─ Monitor sets up alerts
└─ ProjectManager marks done
</code></pre>
<h3 id="parallel-coordination"><a class="header" href="#parallel-coordination">Parallel Coordination</a></h3>
<p>Multiple agents work simultaneously when independent:</p>
<pre><code>Task: "Add learning profiles"
├─ Architect (ADR) ▶ Created in 2h
├─ Developer (Code) ▶ Implemented in 8h
│ ├─ Reviewer (Review) ▶ Reviewed in 1h (parallel)
│ └─ Documenter (Guide) ▶ Documented in 2h (parallel)
└─ Tester (Tests) ▶ Tests in 3h
└─ Security (Audit) ▶ Audited in 1h (parallel)
</code></pre>
<h3 id="approval-gates"><a class="header" href="#approval-gates">Approval Gates</a></h3>
<p>Critical decision points require manual approval:</p>
<ul>
<li><strong>Security Gate</strong>: Must approve if code touches auth/secrets</li>
<li><strong>Breaking Changes</strong>: Architect approval required</li>
<li><strong>Production Deployment</strong>: DevOps + ProjectManager approval</li>
<li><strong>Major Refactoring</strong>: Architect + Lead Developer approval</li>
</ul>
<hr />
<h2 id="-decision-extraction-adrs"><a class="header" href="#-decision-extraction-adrs">📝 Decision Extraction (ADRs)</a></h2>
<p>Every design decision is automatically captured:</p>
<h3 id="adr-template"><a class="header" href="#adr-template">ADR Template</a></h3>
<pre><code class="language-markdown"># ADR-042: Learning-Based Agent Selection
## Context
Previous agent assignment used simple load balancing (min tasks),
ignoring historical performance data. This led to poor agent-task matches.
## Decision
Implement per-task-type learning profiles with recency bias.
### Key Points
- Success rate weighted by recency (7-day window, 3× weight)
- Confidence scoring prevents small-sample overfitting
- Supports adaptive recovery from temporary degradation
## Consequences
**Positive**:
- 30-50% improvement in task success rate
- Agents improve continuously
**Negative**:
- Requires KG data collection (startup period)
- Learning period ~20 tasks per task-type
## Alternatives Considered
1. Rule-based routing (rejected: no learning)
2. Pure random assignment (rejected: no improvement)
3. Rolling average (rejected: no recency bias)
## Decision Made
Option A: Learning profiles with recency bias
</code></pre>
<h3 id="adr-extraction-process"><a class="header" href="#adr-extraction-process">ADR Extraction Process</a></h3>
<ol>
<li><strong>Automatic</strong>: Each task completion generates execution record</li>
<li><strong>Learning</strong>: If decision had trade-offs, extract as ADR candidate</li>
<li><strong>Curation</strong>: ProjectManager/Architect reviews and approves</li>
<li><strong>Archival</strong>: Stored in docs/architecture/adr/ (numbered, immutable)</li>
</ol>
<hr />
<h2 id="-documentation-synchronization"><a class="header" href="#-documentation-synchronization">📚 Documentation Synchronization</a></h2>
<h3 id="automatic-updates"><a class="header" href="#automatic-updates">Automatic Updates</a></h3>
<p>When tasks complete, documentation is auto-updated:</p>
<div class="table-wrapper"><table><thead><tr><th>Task Type</th><th>Auto-Updates</th></tr></thead><tbody>
<tr><td>Feature</td><td>CHANGELOG.md, feature overview, API docs</td></tr>
<tr><td>Bugfix</td><td>CHANGELOG.md, troubleshooting guide</td></tr>
<tr><td>Tech-Debt</td><td>Architecture docs, refactoring guide</td></tr>
<tr><td>Enhancement</td><td>Feature docs, user guide</td></tr>
<tr><td>Documentation</td><td>Indexed in RAG, updated in search</td></tr>
</tbody></table>
</div>
<h3 id="documentation-lifecycle"><a class="header" href="#documentation-lifecycle">Documentation Lifecycle</a></h3>
<pre><code>Task Created
Documentation Context Extracted
├─ Decision/ADR created
├─ Related docs identified
└─ Change summary prepared
Task Execution
├─ Code generated
├─ Tests created
└─ Examples documented
Task Complete
├─ ADR finalized
├─ Docs auto-generated
├─ CHANGELOG entry created
└─ Search index updated (RAG)
Archival (if stale)
└─ Moved to docs/archive/
(kept for historical reference)
</code></pre>
<hr />
<h2 id="-search--retrieval-rag-integration"><a class="header" href="#-search--retrieval-rag-integration">🔍 Search &amp; Retrieval (RAG Integration)</a></h2>
<h3 id="document-indexing"><a class="header" href="#document-indexing">Document Indexing</a></h3>
<p>All generated documentation is indexed for semantic search:</p>
<ul>
<li><strong>Architecture decisions</strong> (ADRs)</li>
<li><strong>Feature guides</strong> (how-tos)</li>
<li><strong>Code examples</strong> (patterns)</li>
<li><strong>Execution history</strong> (knowledge graph)</li>
</ul>
<h3 id="query-examples"><a class="header" href="#query-examples">Query Examples</a></h3>
<p>User asks: "How do I implement learning profiles?"</p>
<p>System searches:</p>
<ol>
<li>ADRs mentioning "learning"</li>
<li>Implementation guides with "learning"</li>
<li>Execution history with similar task type</li>
<li>Code examples for "learning profiles"</li>
</ol>
<p>Returns ranked results with sources.</p>
<hr />
<h2 id="-metrics--monitoring"><a class="header" href="#-metrics--monitoring">📊 Metrics &amp; Monitoring</a></h2>
<h3 id="task-metrics"><a class="header" href="#task-metrics">Task Metrics</a></h3>
<ul>
<li><strong>Success Rate</strong>: % of tasks completed successfully</li>
<li><strong>Cycle Time</strong>: Average time from todo → done</li>
<li><strong>Agent Utilization</strong>: Tasks per agent per role</li>
<li><strong>Decision Quality</strong>: ADRs implemented vs. abandoned</li>
</ul>
<h3 id="agent-metrics-per-role"><a class="header" href="#agent-metrics-per-role">Agent Metrics (per role)</a></h3>
<ul>
<li><strong>Task Success Rate</strong>: % tasks completed successfully</li>
<li><strong>Learning Curve</strong>: Expert improvement over time</li>
<li><strong>Cost per Task</strong>: Average LLM spend per completed task</li>
<li><strong>Task Coverage</strong>: Breadth of task-types handled</li>
</ul>
<h3 id="documentation-metrics"><a class="header" href="#documentation-metrics">Documentation Metrics</a></h3>
<ul>
<li><strong>Coverage</strong>: % of features documented</li>
<li><strong>Freshness</strong>: Days since last update</li>
<li><strong>Usage</strong>: Search queries hitting each doc</li>
<li><strong>Accuracy</strong>: User feedback on doc correctness</li>
</ul>
<hr />
<h2 id="-implementation-details"><a class="header" href="#-implementation-details">🏗️ Implementation Details</a></h2>
<h3 id="surrealdb-schema"><a class="header" href="#surrealdb-schema">SurrealDB Schema</a></h3>
<pre><code class="language-sql">-- Tasks table
DEFINE TABLE tasks SCHEMAFULL;
DEFINE FIELD id ON tasks TYPE string;
DEFINE FIELD type ON tasks TYPE string;
DEFINE FIELD state ON tasks TYPE string;
DEFINE FIELD assigned_agent ON tasks TYPE option&lt;string&gt;;
-- Executions (for learning)
DEFINE TABLE executions SCHEMAFULL;
DEFINE FIELD task_id ON executions TYPE string;
DEFINE FIELD agent_id ON executions TYPE string;
DEFINE FIELD success ON executions TYPE bool;
DEFINE FIELD duration_ms ON executions TYPE number;
DEFINE FIELD cost_cents ON executions TYPE number;
-- ADRs table
DEFINE TABLE adrs SCHEMAFULL;
DEFINE FIELD id ON adrs TYPE string;
DEFINE FIELD task_id ON adrs TYPE string;
DEFINE FIELD title ON adrs TYPE string;
DEFINE FIELD status ON adrs TYPE string; -- draft|approved|archived
</code></pre>
<h3 id="nats-topics"><a class="header" href="#nats-topics">NATS Topics</a></h3>
<ul>
<li><code>tasks.{type}.{priority}</code> — Task assignments</li>
<li><code>agents.{role}.ready</code> — Agent heartbeats</li>
<li><code>agents.{role}.complete</code> — Task completion</li>
<li><code>adrs.created</code> — New ADR events</li>
<li><code>docs.updated</code> — Documentation changes</li>
</ul>
<hr />
<h2 id="-key-design-patterns"><a class="header" href="#-key-design-patterns">🎯 Key Design Patterns</a></h2>
<h3 id="1-event-driven-coordination"><a class="header" href="#1-event-driven-coordination">1. Event-Driven Coordination</a></h3>
<ul>
<li>Task creation → Agent assignment (async via NATS)</li>
<li>Task completion → Documentation update (eventual consistency)</li>
<li>No direct API calls between services (loosely coupled)</li>
</ul>
<h3 id="2-learning-from-execution-history"><a class="header" href="#2-learning-from-execution-history">2. Learning from Execution History</a></h3>
<ul>
<li>Every task stores execution metadata (success, duration, cost)</li>
<li>Learning profiles updated from execution data</li>
<li>Better assignments improve continuously</li>
</ul>
<h3 id="3-decision-extraction"><a class="header" href="#3-decision-extraction">3. Decision Extraction</a></h3>
<ul>
<li>Design decisions captured as ADRs</li>
<li>Immutable record of architectural rationale</li>
<li>Serves as organizational memory</li>
</ul>
<h3 id="4-graceful-degradation"><a class="header" href="#4-graceful-degradation">4. Graceful Degradation</a></h3>
<ul>
<li>NATS offline: In-memory queue fallback</li>
<li>Agent unavailable: Task re-assigned to next best</li>
<li>Doc generation failed: Manual entry allowed</li>
</ul>
<hr />
<h2 id="-related-documentation"><a class="header" href="#-related-documentation">📚 Related Documentation</a></h2>
<ul>
<li><strong><a href="vapora-architecture.html">VAPORA Architecture</a></strong> — System overview</li>
<li><strong><a href="agent-registry-coordination.html">Agent Registry &amp; Coordination</a></strong> — Agent patterns</li>
<li><strong><a href="multi-agent-workflows.html">Multi-Agent Workflows</a></strong> — Workflow execution</li>
<li><strong><a href="multi-ia-router.html">Multi-IA Router</a></strong> — LLM provider selection</li>
<li><strong><a href="roles-permissions-profiles.html">Roles, Permissions &amp; Profiles</a></strong> — RBAC</li>
</ul>
<hr />
<p><strong>Status</strong>: ✅ Production Ready
<strong>Version</strong>: 1.2.0
<strong>Last Updated</strong>: January 2026</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../../architecture/multi-agent-workflows.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../../architecture/roles-permissions-profiles.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../../architecture/multi-agent-workflows.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../../architecture/roles-permissions-profiles.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>