Latest commit

History

497 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Extra

Turn your product into an AI-powered assistant.

Give your users an AI-powered way to use your product—with zero backend rewrites.

DocsVersionLicense

Quick Start · Why Extra · Documentation · Contributing


Why Extra

Extra gives your customers an AI-powered way to use your product.

It works with the APIs, business logic, and workflows you already have — without requiring you to redesign your product around AI.

  • No backend rewrite. Keep your existing APIs, services, and business logic as they are.

  • Specialized by design. Each AI specialist owns a specific part of your business.

  • Your backend stays in control. Business logic, data, credentials, and authorization remain in trusted code.

  • Explicit orchestration. Work moves between specialists through predictable and inspectable execution paths.

  • Built for your product. Expose Extra through an API or embed the assistant directly into your application.

Not just a chatbot. Extra doesn't stop at answering questions. It can execute real product workflows using your existing APIs and tools.

Quick Start

You need Docker and a language model.

Use a supported cloud provider with an API key, or run open-source models locally with Ollama.

Create agents.yml — an orchestrator that routes to two focused agents:

system:
name: "Support Assistant"defaults:
model:
provider: anthropicname: claude-sonnet-4-6orchestrators:
support_router:
description: "Routes each request to the agent that owns it."prompts:
orchestrator: prompts/support_router/orchestrator.mdagents:
orders_agent:
description: "Handles order status, shipping changes, and returns."prompts:
system: prompts/orders_agent/system.mdbilling_agent:
description: "Handles invoices, subscriptions, and refunds."prompts:
system: prompts/billing_agent/system.md# Indentation is the hierarchy: the orchestrator routes to both agents.graph:
support_router:
orders_agent:
billing_agent:

Scaffold the prompt and plugin stubs the YAML references. It never overwrites a file you already wrote:

docker run --rm -v "$(pwd):/workspace" -w /workspace \
ghcr.io/extra-org/extra:latest generate --config agents.yml

Fill in the three prompt stubs it created:

<!-- prompts/support_router/orchestrator.md -->
Route orders, shipping, and returns to orders_agent.
Route invoices, plans, and refunds to billing_agent.
<!-- prompts/orders_agent/system.md -->
Handle order status, shipping changes, and returns using the available tools.
<!-- prompts/billing_agent/system.md -->
Handle invoices, subscriptions, and refunds using the available tools.

Run it with Agent Manager, which serves the conversation API, history, and the chat widget:

docker run -p 8100:8100 -v "$(pwd):/workspace" -w /workspace \
-e ANTHROPIC_API_KEY=sk-... \
ghcr.io/extra-org/extra:latest \
agent-manager --config agents.yml --port 8100

Talk to it in the browser at http://localhost:8100/playground, or over the API — create a conversation with an id you choose, then send it a message:

curl -X POST http://localhost:8100/conversations \
-H "Content-Type: application/json" \
-d '{"session_id":"readme-demo"}'
curl -X POST http://localhost:8100/conversations/readme-demo/messages \
-H "Content-Type: application/json" \
-d '{"message":"Tell me about my system"}'

Tools, MCP servers, deeper routing, per-node authorization, and embedding the chat widget are covered in the Quickstart.

Features

  • AI specialists
  • Workflow orchestration
  • Authorization outside the LLM
  • Local tools and MCP
  • Human approvals
  • Streaming API
  • Embeddable chat widget
  • Anthropic, OpenAI, Gemini, and Bedrock
  • Langfuse tracing

Architecture

Extra executes an explicit orchestration graph.

Orchestrators route requests to AI specialists. Each specialist owns its own prompts, tools, MCP servers, and authorization.

Your business logic stays in your backend. Extra only orchestrates execution.

flowchart TD
U([User request]) --> R{{Orchestrator}}
R --> A1[Billing specialist]
R --> A2[Orders specialist]
R --> A3[Docs specialist]
A1 --> T1[Business logic / APIs]
A2 --> T2[Business logic / APIs]
A3 --> T3[Business logic / APIs]
T1 --> RESP([Response])
T2 --> RESP
T3 --> RESP
Loading

Extra runs the graph. Your project's plugins hold the trusted business logic — tools, access checks, and the values resolved into prompts.

  • Tutorial — build a complete multi-agent system step by step.
  • YAML reference — every field you can declare.
  • Architecture — how routing and execution work.
  • examples/ — runnable specs, including an enterprise knowledge assistant.

Contributing

This repository is agent-first — if you're an AI coding agent, read AGENTS.md before making changes. Human contributors should start there too, then run make check before opening a PR.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

497 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Extra

Turn your product into an AI-powered assistant.

Give your users an AI-powered way to use your product—with zero backend rewrites.

DocsVersionLicense

Quick Start · Why Extra · Documentation · Contributing


Why Extra

Extra gives your customers an AI-powered way to use your product.

It works with the APIs, business logic, and workflows you already have — without requiring you to redesign your product around AI.

  • No backend rewrite. Keep your existing APIs, services, and business logic as they are.

  • Specialized by design. Each AI specialist owns a specific part of your business.

  • Your backend stays in control. Business logic, data, credentials, and authorization remain in trusted code.

  • Explicit orchestration. Work moves between specialists through predictable and inspectable execution paths.

  • Built for your product. Expose Extra through an API or embed the assistant directly into your application.

Not just a chatbot. Extra doesn't stop at answering questions. It can execute real product workflows using your existing APIs and tools.

Quick Start

You need Docker and a language model.

Use a supported cloud provider with an API key, or run open-source models locally with Ollama.

Create agents.yml — an orchestrator that routes to two focused agents:

system:
name: "Support Assistant"defaults:
model:
provider: anthropicname: claude-sonnet-4-6orchestrators:
support_router:
description: "Routes each request to the agent that owns it."prompts:
orchestrator: prompts/support_router/orchestrator.mdagents:
orders_agent:
description: "Handles order status, shipping changes, and returns."prompts:
system: prompts/orders_agent/system.mdbilling_agent:
description: "Handles invoices, subscriptions, and refunds."prompts:
system: prompts/billing_agent/system.md# Indentation is the hierarchy: the orchestrator routes to both agents.graph:
support_router:
orders_agent:
billing_agent:

Scaffold the prompt and plugin stubs the YAML references. It never overwrites a file you already wrote:

docker run --rm -v "$(pwd):/workspace" -w /workspace \
ghcr.io/extra-org/extra:latest generate --config agents.yml

Fill in the three prompt stubs it created:

<!-- prompts/support_router/orchestrator.md -->
Route orders, shipping, and returns to orders_agent.
Route invoices, plans, and refunds to billing_agent.
<!-- prompts/orders_agent/system.md -->
Handle order status, shipping changes, and returns using the available tools.
<!-- prompts/billing_agent/system.md -->
Handle invoices, subscriptions, and refunds using the available tools.

Run it with Agent Manager, which serves the conversation API, history, and the chat widget:

docker run -p 8100:8100 -v "$(pwd):/workspace" -w /workspace \
-e ANTHROPIC_API_KEY=sk-... \
ghcr.io/extra-org/extra:latest \
agent-manager --config agents.yml --port 8100

Talk to it in the browser at http://localhost:8100/playground, or over the API — create a conversation with an id you choose, then send it a message:

curl -X POST http://localhost:8100/conversations \
-H "Content-Type: application/json" \
-d '{"session_id":"readme-demo"}'
curl -X POST http://localhost:8100/conversations/readme-demo/messages \
-H "Content-Type: application/json" \
-d '{"message":"Tell me about my system"}'

Tools, MCP servers, deeper routing, per-node authorization, and embedding the chat widget are covered in the Quickstart.

Features

  • AI specialists
  • Workflow orchestration
  • Authorization outside the LLM
  • Local tools and MCP
  • Human approvals
  • Streaming API
  • Embeddable chat widget
  • Anthropic, OpenAI, Gemini, and Bedrock
  • Langfuse tracing

Architecture

Extra executes an explicit orchestration graph.

Orchestrators route requests to AI specialists. Each specialist owns its own prompts, tools, MCP servers, and authorization.

Your business logic stays in your backend. Extra only orchestrates execution.

flowchart TD
U([User request]) --> R{{Orchestrator}}
R --> A1[Billing specialist]
R --> A2[Orders specialist]
R --> A3[Docs specialist]
A1 --> T1[Business logic / APIs]
A2 --> T2[Business logic / APIs]
A3 --> T3[Business logic / APIs]
T1 --> RESP([Response])
T2 --> RESP
T3 --> RESP
Loading

Extra runs the graph. Your project's plugins hold the trusted business logic — tools, access checks, and the values resolved into prompts.

  • Tutorial — build a complete multi-agent system step by step.
  • YAML reference — every field you can declare.
  • Architecture — how routing and execution work.
  • examples/ — runnable specs, including an enterprise knowledge assistant.

Contributing

This repository is agent-first — if you're an AI coding agent, read AGENTS.md before making changes. Human contributors should start there too, then run make check before opening a PR.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

497 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Extra

Turn your product into an AI-powered assistant.

Give your users an AI-powered way to use your product—with zero backend rewrites.

DocsVersionLicense

Quick Start · Why Extra · Documentation · Contributing


Why Extra

Extra gives your customers an AI-powered way to use your product.

It works with the APIs, business logic, and workflows you already have — without requiring you to redesign your product around AI.

  • No backend rewrite. Keep your existing APIs, services, and business logic as they are.

  • Specialized by design. Each AI specialist owns a specific part of your business.

  • Your backend stays in control. Business logic, data, credentials, and authorization remain in trusted code.

  • Explicit orchestration. Work moves between specialists through predictable and inspectable execution paths.

  • Built for your product. Expose Extra through an API or embed the assistant directly into your application.

Not just a chatbot. Extra doesn't stop at answering questions. It can execute real product workflows using your existing APIs and tools.

Quick Start

You need Docker and a language model.

Use a supported cloud provider with an API key, or run open-source models locally with Ollama.

Create agents.yml — an orchestrator that routes to two focused agents:

system:
name: "Support Assistant"defaults:
model:
provider: anthropicname: claude-sonnet-4-6orchestrators:
support_router:
description: "Routes each request to the agent that owns it."prompts:
orchestrator: prompts/support_router/orchestrator.mdagents:
orders_agent:
description: "Handles order status, shipping changes, and returns."prompts:
system: prompts/orders_agent/system.mdbilling_agent:
description: "Handles invoices, subscriptions, and refunds."prompts:
system: prompts/billing_agent/system.md# Indentation is the hierarchy: the orchestrator routes to both agents.graph:
support_router:
orders_agent:
billing_agent:

Scaffold the prompt and plugin stubs the YAML references. It never overwrites a file you already wrote:

docker run --rm -v "$(pwd):/workspace" -w /workspace \
ghcr.io/extra-org/extra:latest generate --config agents.yml

Fill in the three prompt stubs it created:

<!-- prompts/support_router/orchestrator.md -->
Route orders, shipping, and returns to orders_agent.
Route invoices, plans, and refunds to billing_agent.
<!-- prompts/orders_agent/system.md -->
Handle order status, shipping changes, and returns using the available tools.
<!-- prompts/billing_agent/system.md -->
Handle invoices, subscriptions, and refunds using the available tools.

Run it with Agent Manager, which serves the conversation API, history, and the chat widget:

docker run -p 8100:8100 -v "$(pwd):/workspace" -w /workspace \
-e ANTHROPIC_API_KEY=sk-... \
ghcr.io/extra-org/extra:latest \
agent-manager --config agents.yml --port 8100

Talk to it in the browser at http://localhost:8100/playground, or over the API — create a conversation with an id you choose, then send it a message:

curl -X POST http://localhost:8100/conversations \
-H "Content-Type: application/json" \
-d '{"session_id":"readme-demo"}'
curl -X POST http://localhost:8100/conversations/readme-demo/messages \
-H "Content-Type: application/json" \
-d '{"message":"Tell me about my system"}'

Tools, MCP servers, deeper routing, per-node authorization, and embedding the chat widget are covered in the Quickstart.

Features

  • AI specialists
  • Workflow orchestration
  • Authorization outside the LLM
  • Local tools and MCP
  • Human approvals
  • Streaming API
  • Embeddable chat widget
  • Anthropic, OpenAI, Gemini, and Bedrock
  • Langfuse tracing

Architecture

Extra executes an explicit orchestration graph.

Orchestrators route requests to AI specialists. Each specialist owns its own prompts, tools, MCP servers, and authorization.

Your business logic stays in your backend. Extra only orchestrates execution.

flowchart TD
U([User request]) --> R{{Orchestrator}}
R --> A1[Billing specialist]
R --> A2[Orders specialist]
R --> A3[Docs specialist]
A1 --> T1[Business logic / APIs]
A2 --> T2[Business logic / APIs]
A3 --> T3[Business logic / APIs]
T1 --> RESP([Response])
T2 --> RESP
T3 --> RESP
Loading

Extra runs the graph. Your project's plugins hold the trusted business logic — tools, access checks, and the values resolved into prompts.

  • Tutorial — build a complete multi-agent system step by step.
  • YAML reference — every field you can declare.
  • Architecture — how routing and execution work.
  • examples/ — runnable specs, including an enterprise knowledge assistant.

Contributing

This repository is agent-first — if you're an AI coding agent, read AGENTS.md before making changes. Human contributors should start there too, then run make check before opening a PR.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

497 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Extra

Turn your product into an AI-powered assistant.

Give your users an AI-powered way to use your product—with zero backend rewrites.

DocsVersionLicense

Quick Start · Why Extra · Documentation · Contributing


Why Extra

Extra gives your customers an AI-powered way to use your product.

It works with the APIs, business logic, and workflows you already have — without requiring you to redesign your product around AI.

  • No backend rewrite. Keep your existing APIs, services, and business logic as they are.

  • Specialized by design. Each AI specialist owns a specific part of your business.

  • Your backend stays in control. Business logic, data, credentials, and authorization remain in trusted code.

  • Explicit orchestration. Work moves between specialists through predictable and inspectable execution paths.

  • Built for your product. Expose Extra through an API or embed the assistant directly into your application.

Not just a chatbot. Extra doesn't stop at answering questions. It can execute real product workflows using your existing APIs and tools.

Quick Start

You need Docker and a language model.

Use a supported cloud provider with an API key, or run open-source models locally with Ollama.

Create agents.yml — an orchestrator that routes to two focused agents:

system:
name: "Support Assistant"defaults:
model:
provider: anthropicname: claude-sonnet-4-6orchestrators:
support_router:
description: "Routes each request to the agent that owns it."prompts:
orchestrator: prompts/support_router/orchestrator.mdagents:
orders_agent:
description: "Handles order status, shipping changes, and returns."prompts:
system: prompts/orders_agent/system.mdbilling_agent:
description: "Handles invoices, subscriptions, and refunds."prompts:
system: prompts/billing_agent/system.md# Indentation is the hierarchy: the orchestrator routes to both agents.graph:
support_router:
orders_agent:
billing_agent:

Scaffold the prompt and plugin stubs the YAML references. It never overwrites a file you already wrote:

docker run --rm -v "$(pwd):/workspace" -w /workspace \
ghcr.io/extra-org/extra:latest generate --config agents.yml

Fill in the three prompt stubs it created:

<!-- prompts/support_router/orchestrator.md -->
Route orders, shipping, and returns to orders_agent.
Route invoices, plans, and refunds to billing_agent.
<!-- prompts/orders_agent/system.md -->
Handle order status, shipping changes, and returns using the available tools.
<!-- prompts/billing_agent/system.md -->
Handle invoices, subscriptions, and refunds using the available tools.

Run it with Agent Manager, which serves the conversation API, history, and the chat widget:

docker run -p 8100:8100 -v "$(pwd):/workspace" -w /workspace \
-e ANTHROPIC_API_KEY=sk-... \
ghcr.io/extra-org/extra:latest \
agent-manager --config agents.yml --port 8100

Talk to it in the browser at http://localhost:8100/playground, or over the API — create a conversation with an id you choose, then send it a message:

curl -X POST http://localhost:8100/conversations \
-H "Content-Type: application/json" \
-d '{"session_id":"readme-demo"}'
curl -X POST http://localhost:8100/conversations/readme-demo/messages \
-H "Content-Type: application/json" \
-d '{"message":"Tell me about my system"}'

Tools, MCP servers, deeper routing, per-node authorization, and embedding the chat widget are covered in the Quickstart.

Features

  • AI specialists
  • Workflow orchestration
  • Authorization outside the LLM
  • Local tools and MCP
  • Human approvals
  • Streaming API
  • Embeddable chat widget
  • Anthropic, OpenAI, Gemini, and Bedrock
  • Langfuse tracing

Architecture

Extra executes an explicit orchestration graph.

Orchestrators route requests to AI specialists. Each specialist owns its own prompts, tools, MCP servers, and authorization.

Your business logic stays in your backend. Extra only orchestrates execution.

flowchart TD
U([User request]) --> R{{Orchestrator}}
R --> A1[Billing specialist]
R --> A2[Orders specialist]
R --> A3[Docs specialist]
A1 --> T1[Business logic / APIs]
A2 --> T2[Business logic / APIs]
A3 --> T3[Business logic / APIs]
T1 --> RESP([Response])
T2 --> RESP
T3 --> RESP
Loading

Extra runs the graph. Your project's plugins hold the trusted business logic — tools, access checks, and the values resolved into prompts.

  • Tutorial — build a complete multi-agent system step by step.
  • YAML reference — every field you can declare.
  • Architecture — how routing and execution work.
  • examples/ — runnable specs, including an enterprise knowledge assistant.

Contributing

This repository is agent-first — if you're an AI coding agent, read AGENTS.md before making changes. Human contributors should start there too, then run make check before opening a PR.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

497 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Extra

Turn your product into an AI-powered assistant.

Give your users an AI-powered way to use your product—with zero backend rewrites.

DocsVersionLicense

Quick Start · Why Extra · Documentation · Contributing


Why Extra

Extra gives your customers an AI-powered way to use your product.

It works with the APIs, business logic, and workflows you already have — without requiring you to redesign your product around AI.

  • No backend rewrite. Keep your existing APIs, services, and business logic as they are.

  • Specialized by design. Each AI specialist owns a specific part of your business.

  • Your backend stays in control. Business logic, data, credentials, and authorization remain in trusted code.

  • Explicit orchestration. Work moves between specialists through predictable and inspectable execution paths.

  • Built for your product. Expose Extra through an API or embed the assistant directly into your application.

Not just a chatbot. Extra doesn't stop at answering questions. It can execute real product workflows using your existing APIs and tools.

Quick Start

You need Docker and a language model.

Use a supported cloud provider with an API key, or run open-source models locally with Ollama.

Create agents.yml — an orchestrator that routes to two focused agents:

system:
name: "Support Assistant"defaults:
model:
provider: anthropicname: claude-sonnet-4-6orchestrators:
support_router:
description: "Routes each request to the agent that owns it."prompts:
orchestrator: prompts/support_router/orchestrator.mdagents:
orders_agent:
description: "Handles order status, shipping changes, and returns."prompts:
system: prompts/orders_agent/system.mdbilling_agent:
description: "Handles invoices, subscriptions, and refunds."prompts:
system: prompts/billing_agent/system.md# Indentation is the hierarchy: the orchestrator routes to both agents.graph:
support_router:
orders_agent:
billing_agent:

Scaffold the prompt and plugin stubs the YAML references. It never overwrites a file you already wrote:

docker run --rm -v "$(pwd):/workspace" -w /workspace \
ghcr.io/extra-org/extra:latest generate --config agents.yml

Fill in the three prompt stubs it created:

<!-- prompts/support_router/orchestrator.md -->
Route orders, shipping, and returns to orders_agent.
Route invoices, plans, and refunds to billing_agent.
<!-- prompts/orders_agent/system.md -->
Handle order status, shipping changes, and returns using the available tools.
<!-- prompts/billing_agent/system.md -->
Handle invoices, subscriptions, and refunds using the available tools.

Run it with Agent Manager, which serves the conversation API, history, and the chat widget:

docker run -p 8100:8100 -v "$(pwd):/workspace" -w /workspace \
-e ANTHROPIC_API_KEY=sk-... \
ghcr.io/extra-org/extra:latest \
agent-manager --config agents.yml --port 8100

Talk to it in the browser at http://localhost:8100/playground, or over the API — create a conversation with an id you choose, then send it a message:

curl -X POST http://localhost:8100/conversations \
-H "Content-Type: application/json" \
-d '{"session_id":"readme-demo"}'
curl -X POST http://localhost:8100/conversations/readme-demo/messages \
-H "Content-Type: application/json" \
-d '{"message":"Tell me about my system"}'

Tools, MCP servers, deeper routing, per-node authorization, and embedding the chat widget are covered in the Quickstart.

Features

  • AI specialists
  • Workflow orchestration
  • Authorization outside the LLM
  • Local tools and MCP
  • Human approvals
  • Streaming API
  • Embeddable chat widget
  • Anthropic, OpenAI, Gemini, and Bedrock
  • Langfuse tracing

Architecture

Extra executes an explicit orchestration graph.

Orchestrators route requests to AI specialists. Each specialist owns its own prompts, tools, MCP servers, and authorization.

Your business logic stays in your backend. Extra only orchestrates execution.

flowchart TD
U([User request]) --> R{{Orchestrator}}
R --> A1[Billing specialist]
R --> A2[Orders specialist]
R --> A3[Docs specialist]
A1 --> T1[Business logic / APIs]
A2 --> T2[Business logic / APIs]
A3 --> T3[Business logic / APIs]
T1 --> RESP([Response])
T2 --> RESP
T3 --> RESP
Loading

Extra runs the graph. Your project's plugins hold the trusted business logic — tools, access checks, and the values resolved into prompts.

  • Tutorial — build a complete multi-agent system step by step.
  • YAML reference — every field you can declare.
  • Architecture — how routing and execution work.
  • examples/ — runnable specs, including an enterprise knowledge assistant.

Contributing

This repository is agent-first — if you're an AI coding agent, read AGENTS.md before making changes. Human contributors should start there too, then run make check before opening a PR.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

497 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Extra

Turn your product into an AI-powered assistant.

Give your users an AI-powered way to use your product—with zero backend rewrites.

DocsVersionLicense

Quick Start · Why Extra · Documentation · Contributing


Why Extra

Extra gives your customers an AI-powered way to use your product.

It works with the APIs, business logic, and workflows you already have — without requiring you to redesign your product around AI.

  • No backend rewrite. Keep your existing APIs, services, and business logic as they are.

  • Specialized by design. Each AI specialist owns a specific part of your business.

  • Your backend stays in control. Business logic, data, credentials, and authorization remain in trusted code.

  • Explicit orchestration. Work moves between specialists through predictable and inspectable execution paths.

  • Built for your product. Expose Extra through an API or embed the assistant directly into your application.

Not just a chatbot. Extra doesn't stop at answering questions. It can execute real product workflows using your existing APIs and tools.

Quick Start

You need Docker and a language model.

Use a supported cloud provider with an API key, or run open-source models locally with Ollama.

Create agents.yml — an orchestrator that routes to two focused agents:

system:
name: "Support Assistant"defaults:
model:
provider: anthropicname: claude-sonnet-4-6orchestrators:
support_router:
description: "Routes each request to the agent that owns it."prompts:
orchestrator: prompts/support_router/orchestrator.mdagents:
orders_agent:
description: "Handles order status, shipping changes, and returns."prompts:
system: prompts/orders_agent/system.mdbilling_agent:
description: "Handles invoices, subscriptions, and refunds."prompts:
system: prompts/billing_agent/system.md# Indentation is the hierarchy: the orchestrator routes to both agents.graph:
support_router:
orders_agent:
billing_agent:

Scaffold the prompt and plugin stubs the YAML references. It never overwrites a file you already wrote:

docker run --rm -v "$(pwd):/workspace" -w /workspace \
ghcr.io/extra-org/extra:latest generate --config agents.yml

Fill in the three prompt stubs it created:

<!-- prompts/support_router/orchestrator.md -->
Route orders, shipping, and returns to orders_agent.
Route invoices, plans, and refunds to billing_agent.
<!-- prompts/orders_agent/system.md -->
Handle order status, shipping changes, and returns using the available tools.
<!-- prompts/billing_agent/system.md -->
Handle invoices, subscriptions, and refunds using the available tools.

Run it with Agent Manager, which serves the conversation API, history, and the chat widget:

docker run -p 8100:8100 -v "$(pwd):/workspace" -w /workspace \
-e ANTHROPIC_API_KEY=sk-... \
ghcr.io/extra-org/extra:latest \
agent-manager --config agents.yml --port 8100

Talk to it in the browser at http://localhost:8100/playground, or over the API — create a conversation with an id you choose, then send it a message:

curl -X POST http://localhost:8100/conversations \
-H "Content-Type: application/json" \
-d '{"session_id":"readme-demo"}'
curl -X POST http://localhost:8100/conversations/readme-demo/messages \
-H "Content-Type: application/json" \
-d '{"message":"Tell me about my system"}'

Tools, MCP servers, deeper routing, per-node authorization, and embedding the chat widget are covered in the Quickstart.

Features

  • AI specialists
  • Workflow orchestration
  • Authorization outside the LLM
  • Local tools and MCP
  • Human approvals
  • Streaming API
  • Embeddable chat widget
  • Anthropic, OpenAI, Gemini, and Bedrock
  • Langfuse tracing

Architecture

Extra executes an explicit orchestration graph.

Orchestrators route requests to AI specialists. Each specialist owns its own prompts, tools, MCP servers, and authorization.

Your business logic stays in your backend. Extra only orchestrates execution.

flowchart TD
U([User request]) --> R{{Orchestrator}}
R --> A1[Billing specialist]
R --> A2[Orders specialist]
R --> A3[Docs specialist]
A1 --> T1[Business logic / APIs]
A2 --> T2[Business logic / APIs]
A3 --> T3[Business logic / APIs]
T1 --> RESP([Response])
T2 --> RESP
T3 --> RESP
Loading

Extra runs the graph. Your project's plugins hold the trusted business logic — tools, access checks, and the values resolved into prompts.

  • Tutorial — build a complete multi-agent system step by step.
  • YAML reference — every field you can declare.
  • Architecture — how routing and execution work.
  • examples/ — runnable specs, including an enterprise knowledge assistant.

Contributing

This repository is agent-first — if you're an AI coding agent, read AGENTS.md before making changes. Human contributors should start there too, then run make check before opening a PR.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

497 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Extra

Turn your product into an AI-powered assistant.

Give your users an AI-powered way to use your product—with zero backend rewrites.

DocsVersionLicense

Quick Start · Why Extra · Documentation · Contributing


Why Extra

Extra gives your customers an AI-powered way to use your product.

It works with the APIs, business logic, and workflows you already have — without requiring you to redesign your product around AI.

  • No backend rewrite. Keep your existing APIs, services, and business logic as they are.

  • Specialized by design. Each AI specialist owns a specific part of your business.

  • Your backend stays in control. Business logic, data, credentials, and authorization remain in trusted code.

  • Explicit orchestration. Work moves between specialists through predictable and inspectable execution paths.

  • Built for your product. Expose Extra through an API or embed the assistant directly into your application.

Not just a chatbot. Extra doesn't stop at answering questions. It can execute real product workflows using your existing APIs and tools.

Quick Start

You need Docker and a language model.

Use a supported cloud provider with an API key, or run open-source models locally with Ollama.

Create agents.yml — an orchestrator that routes to two focused agents:

system:
name: "Support Assistant"defaults:
model:
provider: anthropicname: claude-sonnet-4-6orchestrators:
support_router:
description: "Routes each request to the agent that owns it."prompts:
orchestrator: prompts/support_router/orchestrator.mdagents:
orders_agent:
description: "Handles order status, shipping changes, and returns."prompts:
system: prompts/orders_agent/system.mdbilling_agent:
description: "Handles invoices, subscriptions, and refunds."prompts:
system: prompts/billing_agent/system.md# Indentation is the hierarchy: the orchestrator routes to both agents.graph:
support_router:
orders_agent:
billing_agent:

Scaffold the prompt and plugin stubs the YAML references. It never overwrites a file you already wrote:

docker run --rm -v "$(pwd):/workspace" -w /workspace \
ghcr.io/extra-org/extra:latest generate --config agents.yml

Fill in the three prompt stubs it created:

<!-- prompts/support_router/orchestrator.md -->
Route orders, shipping, and returns to orders_agent.
Route invoices, plans, and refunds to billing_agent.
<!-- prompts/orders_agent/system.md -->
Handle order status, shipping changes, and returns using the available tools.
<!-- prompts/billing_agent/system.md -->
Handle invoices, subscriptions, and refunds using the available tools.

Run it with Agent Manager, which serves the conversation API, history, and the chat widget:

docker run -p 8100:8100 -v "$(pwd):/workspace" -w /workspace \
-e ANTHROPIC_API_KEY=sk-... \
ghcr.io/extra-org/extra:latest \
agent-manager --config agents.yml --port 8100

Talk to it in the browser at http://localhost:8100/playground, or over the API — create a conversation with an id you choose, then send it a message:

curl -X POST http://localhost:8100/conversations \
-H "Content-Type: application/json" \
-d '{"session_id":"readme-demo"}'
curl -X POST http://localhost:8100/conversations/readme-demo/messages \
-H "Content-Type: application/json" \
-d '{"message":"Tell me about my system"}'

Tools, MCP servers, deeper routing, per-node authorization, and embedding the chat widget are covered in the Quickstart.

Features

  • AI specialists
  • Workflow orchestration
  • Authorization outside the LLM
  • Local tools and MCP
  • Human approvals
  • Streaming API
  • Embeddable chat widget
  • Anthropic, OpenAI, Gemini, and Bedrock
  • Langfuse tracing

Architecture

Extra executes an explicit orchestration graph.

Orchestrators route requests to AI specialists. Each specialist owns its own prompts, tools, MCP servers, and authorization.

Your business logic stays in your backend. Extra only orchestrates execution.

flowchart TD
U([User request]) --> R{{Orchestrator}}
R --> A1[Billing specialist]
R --> A2[Orders specialist]
R --> A3[Docs specialist]
A1 --> T1[Business logic / APIs]
A2 --> T2[Business logic / APIs]
A3 --> T3[Business logic / APIs]
T1 --> RESP([Response])
T2 --> RESP
T3 --> RESP
Loading

Extra runs the graph. Your project's plugins hold the trusted business logic — tools, access checks, and the values resolved into prompts.

  • Tutorial — build a complete multi-agent system step by step.
  • YAML reference — every field you can declare.
  • Architecture — how routing and execution work.
  • examples/ — runnable specs, including an enterprise knowledge assistant.

Contributing

This repository is agent-first — if you're an AI coding agent, read AGENTS.md before making changes. Human contributors should start there too, then run make check before opening a PR.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

497 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Extra

Turn your product into an AI-powered assistant.

Give your users an AI-powered way to use your product—with zero backend rewrites.

DocsVersionLicense

Quick Start · Why Extra · Documentation · Contributing


Why Extra

Extra gives your customers an AI-powered way to use your product.

It works with the APIs, business logic, and workflows you already have — without requiring you to redesign your product around AI.

  • No backend rewrite. Keep your existing APIs, services, and business logic as they are.

  • Specialized by design. Each AI specialist owns a specific part of your business.

  • Your backend stays in control. Business logic, data, credentials, and authorization remain in trusted code.

  • Explicit orchestration. Work moves between specialists through predictable and inspectable execution paths.

  • Built for your product. Expose Extra through an API or embed the assistant directly into your application.

Not just a chatbot. Extra doesn't stop at answering questions. It can execute real product workflows using your existing APIs and tools.

Quick Start

You need Docker and a language model.

Use a supported cloud provider with an API key, or run open-source models locally with Ollama.

Create agents.yml — an orchestrator that routes to two focused agents:

system:
name: "Support Assistant"defaults:
model:
provider: anthropicname: claude-sonnet-4-6orchestrators:
support_router:
description: "Routes each request to the agent that owns it."prompts:
orchestrator: prompts/support_router/orchestrator.mdagents:
orders_agent:
description: "Handles order status, shipping changes, and returns."prompts:
system: prompts/orders_agent/system.mdbilling_agent:
description: "Handles invoices, subscriptions, and refunds."prompts:
system: prompts/billing_agent/system.md# Indentation is the hierarchy: the orchestrator routes to both agents.graph:
support_router:
orders_agent:
billing_agent:

Scaffold the prompt and plugin stubs the YAML references. It never overwrites a file you already wrote:

docker run --rm -v "$(pwd):/workspace" -w /workspace \
ghcr.io/extra-org/extra:latest generate --config agents.yml

Fill in the three prompt stubs it created:

<!-- prompts/support_router/orchestrator.md -->
Route orders, shipping, and returns to orders_agent.
Route invoices, plans, and refunds to billing_agent.
<!-- prompts/orders_agent/system.md -->
Handle order status, shipping changes, and returns using the available tools.
<!-- prompts/billing_agent/system.md -->
Handle invoices, subscriptions, and refunds using the available tools.

Run it with Agent Manager, which serves the conversation API, history, and the chat widget:

docker run -p 8100:8100 -v "$(pwd):/workspace" -w /workspace \
-e ANTHROPIC_API_KEY=sk-... \
ghcr.io/extra-org/extra:latest \
agent-manager --config agents.yml --port 8100

Talk to it in the browser at http://localhost:8100/playground, or over the API — create a conversation with an id you choose, then send it a message:

curl -X POST http://localhost:8100/conversations \
-H "Content-Type: application/json" \
-d '{"session_id":"readme-demo"}'
curl -X POST http://localhost:8100/conversations/readme-demo/messages \
-H "Content-Type: application/json" \
-d '{"message":"Tell me about my system"}'

Tools, MCP servers, deeper routing, per-node authorization, and embedding the chat widget are covered in the Quickstart.

Features

  • AI specialists
  • Workflow orchestration
  • Authorization outside the LLM
  • Local tools and MCP
  • Human approvals
  • Streaming API
  • Embeddable chat widget
  • Anthropic, OpenAI, Gemini, and Bedrock
  • Langfuse tracing

Architecture

Extra executes an explicit orchestration graph.

Orchestrators route requests to AI specialists. Each specialist owns its own prompts, tools, MCP servers, and authorization.

Your business logic stays in your backend. Extra only orchestrates execution.

flowchart TD
U([User request]) --> R{{Orchestrator}}
R --> A1[Billing specialist]
R --> A2[Orders specialist]
R --> A3[Docs specialist]
A1 --> T1[Business logic / APIs]
A2 --> T2[Business logic / APIs]
A3 --> T3[Business logic / APIs]
T1 --> RESP([Response])
T2 --> RESP
T3 --> RESP
Loading

Extra runs the graph. Your project's plugins hold the trusted business logic — tools, access checks, and the values resolved into prompts.

  • Tutorial — build a complete multi-agent system step by step.
  • YAML reference — every field you can declare.
  • Architecture — how routing and execution work.
  • examples/ — runnable specs, including an enterprise knowledge assistant.

Contributing

This repository is agent-first — if you're an AI coding agent, read AGENTS.md before making changes. Human contributors should start there too, then run make check before opening a PR.

License

MIT

Releases

Packages

Contributors

Languages