Mintlify docs (#217)

* add the new docs

* Update to latest comprehensive docs from mintlify2 branch - Add conversations, jobs, triggers guides - Complete tools documentation - Enhanced RAG and agents docs - Add UI screenshots and images - Update contribution guide and quickstart

* added intro gif

* Update introduction.mdx with intro gif

* Add public/videos folder with Intro-Video.gif for proper Next.js/Mintlify serving

* updated gif

* Update introduction.mdx to have a working intro gif
This commit is contained in:
Tushar 2025-08-23 16:26:35 +05:30 committed by GitHub
parent 8f40b5fb33
commit daaac23f76
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
45 changed files with 1972 additions and 0 deletions

83
apps/docs/docs.json Normal file
View file

@ -0,0 +1,83 @@
{
"$schema": "https://mintlify.com/docs.json",
"theme": "maple",
"name": "Rowboat",
"description": "Rowboat is an open-source platform for building multi-agent systems. It helps you orchestrate tools, RAG, memory, and deployable agents with ease.",
"colors": {
"primary": "#6366F1",
"light": "#6366F1",
"dark": "#6366F1"
},
"icons": {
"library": "fontawesome"
},
"navigation": {
"groups": [
{
"group": "Getting Started",
"pages": [
"docs/getting-started/introduction",
"docs/getting-started/quickstart",
"docs/getting-started/license"
]
},
{
"group": "Using Rowboat",
"pages": [
"docs/using-rowboat/rowboat-studio",
"docs/using-rowboat/agents",
"docs/using-rowboat/tools",
"docs/using-rowboat/rag",
"docs/using-rowboat/triggers",
"docs/using-rowboat/jobs",
"docs/using-rowboat/conversations",
{
"group": "Customise",
"icon": "sliders",
"pages": [
"docs/using-rowboat/customise/custom-llms"
]
}
]
},
{
"group": "API & SDK",
"pages": ["docs/api-sdk/using_the_api", "docs/api-sdk/using_the_sdk"]
},
{
"group": "Development",
"pages": ["docs/development/contribution-guide", "docs/development/roadmap"]
}
]
},
"background": {
"decoration": "gradient",
"color": {
"light": "#FFFFFF",
"dark": "#0D0A09"
}
},
"navbar": {
"primary": {
"type": "button",
"label": "Try Rowboat",
"href": "https://app.rowboatlabs.com"
}
},
"footer": {
"socials": {
"github": "https://github.com/rowboatlabs/rowboat",
"linkedin": "https://www.linkedin.com/company/rowboat-labs",
"discord": "https://discord.gg/PCkH9TWC"
}
},
"contextual": {
"options": [
"copy",
"view",
"chatgpt",
"claude"
]
}
}

View file

@ -0,0 +1,27 @@
## Add tools to agents
Copilot can help you add tools to agents. You can (a) add a mock tool, (b) add a tool from an MCP server, (c) integrate with you own tools using a webhook.
### Adding mock tools
You can mock any tool you have created by checking the 'Mock tool responses' option.
![Example Tool](img/mock-tool.png)
### Adding MCP tools
You can add a running MCP server in Settings -> Tools.
![Example Tool](img/add-mcp-server.png)
You can use [supergateway](https://github.com/supercorp-ai/supergateway) to expose any MCP stdio server as an SSE server.
Now, you can import the tools from the MCP server in the Build view.
![Example Tool](img/import-mcp-tools.png)
### Debug tool calls in the playground
When agents call tools during a chat in the playground, the tool call parameters and response are available for debugging real-time. For testing purposes, the platform can produce mock tool responses in the playground, without integrating actual tools.
![Mock Tool Responses](img/mock-response.png)

29
apps/docs/docs/agents.mdx Normal file
View file

@ -0,0 +1,29 @@
# Agents
## Overview
- Agents carry out a specific part of the conversation and / or perform tasks like orchestrating between other agents, triggering internal processes and fetching information.
- Agents carry out tasks through tools provided to them.
- Agents can be connected to other agents through a mention in the agent's instruction.
## Agent Configurations
### Description
The description conveys the agent's role in the multi-agent system. Writing a good description is important for other agents to know when to pass control of the conversation to an agent.
### Instructions
Agent instructions are the backbone of an agent, defining its behavior. RowBoat Studio's copilot produces a good framework for agent instructions, involving Role, Steps to Follow, Scope and Guidelines. Since agents are powered by LLMs, general best practices while writing prompts apply.
### Examples
The agent uses examples as a reference for behavior in different scenarios. While there are no prescribed formats to provide examples in, examples should include what the user might say, what the agent should respond with as well as indications of any tool calls to be made.
### Prompts
Prompts attached to an agent will be used by the agent in addition to instructions.
### Tools
Tools attached to an agent will be put out as tool calls. The behavior of when to invoke tools can be fine-tuned by specifying corresponding instructions or prompts. Adding examples to agents can also be useful in controlling tool call behavior.
### Connected Agents
In the agent instructions, the connected agents are shown with an '@mention'. If the agent mentioned in an instruction (connected agent) does not actually exist, the connected agent's name would show up with an '!' to call to attention.
### Model
RowBoat currently supports OpenAI LLMs. Agents can be configured to use GPT-4o or GPT-4o-mini.

View file

@ -0,0 +1,173 @@
---
title: "Using the API"
description: "This is a guide on using the HTTP API to power conversations with the assistant created in Studio."
icon: "code"
---
## Deploy your assistant to production on Studio
<Frame>
<img src="/docs/img/prod-deploy.png" alt="Prod Deploy" />
</Frame>
## Obtain API key and Project ID
Generate API keys via the developer configs in your project. Copy the Project ID from the same page.
<Frame>
<img src="/docs/img/dev-config.png" alt="Developer Configs" />
</Frame>
## API Endpoint
```
POST <HOST>/api/v1/<PROJECT_ID>/chat
```
Where:
- For self-hosted: `<HOST>` is `http://localhost:3000`
## Authentication
Include your API key in the Authorization header:
```
Authorization: Bearer <API_KEY>
```
## Examples
### First Turn
```bash
curl --location '<HOST>/api/v1/<PROJECT_ID>/chat' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_KEY>' \
--data '{
"messages": [
{
"role": "user",
"content": "Hello, can you help me?"
}
],
"state": null
}'
```
Response:
```json
{
"messages": [
{
"role": "assistant",
"content": "Hello! Yes, I'd be happy to help you. What can I assist you with today?",
"agenticResponseType": "external"
}
],
"state": {
"last_agent_name": "MainAgent"
}
}
```
### Subsequent Turn
Notice how we include both the previous messages and the state from the last response:
```bash
curl --location '<HOST>/api/v1/<PROJECT_ID>/chat' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_KEY>' \
--data '{
"messages": [
{
"role": "user",
"content": "Hello, can you help me?"
},
{
"role": "assistant",
"content": "Hello! Yes, I'd be happy to help you. What can I assist you with today?",
"agenticResponseType": "external"
},
{
"role": "user",
"content": "What services do you offer?"
}
],
"state": {
"last_agent_name": "MainAgent"
}
}'
```
## API Specification
### Request Schema
```typescript
{
// Required fields
messages: Message[]; // Array of message objects representing the conversation history
state: any; // State object from previous response, or null for first message
// Optional fields
workflowId?: string; // Specific workflow ID to use (defaults to production workflow)
testProfileId?: string; // Test profile ID for simulation
}
```
### Message Types
Messages can be one of the following types:
1. System Message
```typescript
{
role: "system";
content: string;
}
```
2. User Message
```typescript
{
role: "user";
content: string;
}
```
3. Assistant Message
```typescript
{
role: "assistant";
content: string;
agenticResponseType: "internal" | "external";
agenticSender?: string | null;
}
```
### Response Schema
```typescript
{
messages: Message[]; // Array of new messages from this turn
state: any; // State object to pass in the next request
}
```
## Important Notes
1. Always pass the complete conversation history in the `messages` array
2. Always include the `state` from the previous response in your next request
3. The last message in the response's `messages` array will be a user-facing assistant message (`agenticResponseType: "external"`)
## Rate Limiting
The API has rate limits per project. If exceeded, you'll receive a 429 status code.
## Error Responses
- 400: Invalid request body or missing/invalid Authorization header
- 403: Invalid API key
- 404: Project or workflow not found
- 429: Rate limit exceeded

View file

@ -0,0 +1,101 @@
---
title: "Using the SDK"
description: "This is a guide on using the RowBoat Python SDK as an alternative to the [RowBoat HTTP API](/using_the_api) to power conversations with the assistant created in Studio."
icon: "toolbox"
---
## Prerequisites
- ``` pip install rowboat ```
- [Deploy your assistant to production](/using_the_api/#deploy-your-assistant-to-production-on-studio)
- [Obtain your `<API_KEY>` and `<PROJECT_ID>`](/using_the_api/#obtain-api-key-and-project-id)
### API Host
- For the open source installation, the `<HOST>` is [http://localhost:3000](http://localhost:3000)
- When using the hosted app, the `<HOST>` is [https://app.rowboatlabs.com](https://app.rowboatlabs.com)
## Usage
### Basic Usage with StatefulChat
The easiest way to interact with Rowboat is using the `StatefulChat` class, which maintains conversation state automatically:
```python
from rowboat import Client, StatefulChat
# Initialize the client
client = Client(
host="<HOST>",
project_id="<PROJECT_ID>",
api_key="<API_KEY>"
)
# Create a stateful chat session
chat = StatefulChat(client)
# Have a conversation
response = chat.run("What is the capital of France?")
print(response)
# The capital of France is Paris.
# Continue the conversation - the context is maintained automatically
response = chat.run("What other major cities are in that country?")
print(response)
# Other major cities in France include Lyon, Marseille, Toulouse, and Nice.
response = chat.run("What's the population of the first city you mentioned?")
print(response)
# Lyon has a population of approximately 513,000 in the city proper.
```
### Advanced Usage
#### Using a specific workflow
You can specify a workflow ID to use a particular conversation configuration:
```python
chat = StatefulChat(
client,
workflow_id="<WORKFLOW_ID>"
)
```
#### Using a test profile
You can specify a test profile ID to use a specific test configuration:
```python
chat = StatefulChat(
client,
test_profile_id="<TEST_PROFILE_ID>"
)
```
### Low-Level Usage
For more control over the conversation, you can use the `Client` class directly:
```python
from rowboat.schema import UserMessage
# Initialize the client
client = Client(
host="<HOST>",
project_id="<PROJECT_ID>",
api_key="<API_KEY>"
)
# Create messages
messages = [
UserMessage(role='user', content="Hello, how are you?")
]
# Get response
response = client.chat(messages=messages)
print(response.messages[-1].content)
# For subsequent messages, you need to manage the message history and state manually
messages.extend(response.messages)
messages.append(UserMessage(role='user', content="What's your name?"))
response = client.chat(messages=messages, state=response.state)
```

View file

@ -0,0 +1,14 @@
## Create the set of initial agents
Copilot can set up agents for you from scratch.
### Instruct copilot
First, tell it about the initial set of agents that make up your assistant.
![Agent Config](img/create-agents-delivery.png)
Using copilot to create your initial set of agents helps you leverage best practices in formatting agent instructions and connecting agents to each other as a graph, all of which have been baked into copilot.
### Inspect the agents
Once you apply changes, inspect the agents to see how copilot has built them. Specifically, note the Instructions, and Examples in each agent.
![Agent Config](img/agent-instruction.png)

View file

@ -0,0 +1 @@
Coming soon.

View file

@ -0,0 +1,59 @@
---
title: "Contribution Guide"
description: "Learn how to contribute to the Rowboat project and help improve our platform."
icon: "github"
---
# Join the Rowboat Voyage
We're building Rowboat as an open-source, community-powered platform — and we'd love for you to hop aboard! Whether you're fixing typos, suggesting a new tool integration, or designing your dream multi-agent workflow, your contributions are valuable and welcome.
<Frame>
<img src="/docs/img/contribution-guide-hero.png" className="w-full max-w-[600px] rounded-xl" alt="Contribution guide hero image showing community collaboration" />
</Frame>
---
## How You Can Contribute
- **Tackle Open Issues**
Browse our [GitHub Issues](https://github.com/rowboatlabs/rowboat/issues) for tags like `good first issue`, `help wanted`, or `bug` to find a spot that fits your skillset.
- **Join the Community**
Our [Discord](https://discord.gg/PCkH9TWC) is the go-to hub for brainstorming, feedback, and finding contributors for bigger efforts.
- **Propose Something New**
Have a new tool integration idea or found a bug? Open an issue and lets discuss it!
---
## Contribution Workflow & Best Practices
Whether it's your first contribution or your fiftieth, here's what a great contribution looks like:
| Step / Tip | Description |
|-------------------------------|-----------------------------------------------------------------------------------------------|
| **1. Fork the Repository** | Create a personal copy of [rowboatlabs/rowboat](https://github.com/rowboatlabs/rowboat) to start contributing. |
| **2. Create a New Branch** | Use a descriptive name like `fix-tool-crash` or `feature-new-mcp`. Avoid committing to `main`. |
| **3. Make Your Changes** | Focus your PR on a single issue or feature to keep things clean and reviewable. |
| **4. Write Tests if Needed** | If you change logic, add relevant tests so your contribution is future-proof. |
| **5. Run Tests & Lint Locally**| Make sure your branch passes all tests and code quality checks before pushing. |
| **6. Document or Demo It** | Add helpful context: screenshots, example scripts, or a short video/gif to demonstrate your changes. |
| **7. Submit a Pull Request** | Open a PR with a clear description of your changes and any context reviewers should know. |
| **8. Collaborate on Feedback** | Our maintainers may leave comments — its all part of the process. Lets improve it together. |
| **9. Dont Be Shy to Follow Up** | Feel free to ping the PR/issue if you're waiting on feedback. We appreciate polite nudges. |
| **10. Celebrate the Merge!** | You just made Rowboat better. Thanks for contributing 🚀 |
<Tip>If you're fixing typos, spacing, or small tweaks — try bundling those into a related PR instead of sending them standalone. It helps keep reviews focused. </Tip>
---
## Come Build With Us
We believe great ideas come from the community — and that means **you**. Whether you're an engineer, designer, AI tinkerer, or curious beginner, theres room on this boat for everyone.
Lets build the future of AI workflows — together. 🫶

View file

@ -0,0 +1,7 @@
---
icon: "road"
---
# Roadmap
Explore the future development plans and upcoming features for Rowboat.

View file

@ -0,0 +1,78 @@
---
title: "Introduction"
description: "Welcome to the official Rowboat documentation! Rowboat is a low-code AI IDE to build MCP tools connected multi-agent assistants. Rowboat copilot builds the agents for you based on your requirements with the option do everything manually as well."
icon: "book-open"
---
<Frame>
<img src="../videos/Intro-Video.gif" alt="Intro Video" />
</Frame>
## What is RowBoat?
**RowBoat is a state-of-art platform to build multi-agent AI systems in a visual interface, with the help of a copilot.**
RowBoat enables you to build, manage and deploy user-facing assistants. An assistant is made up of multiple agents, each having access to a set of tools and working together to interact with the user as a single assistant. You can connect any MCP tools to the agents.
For example, you can build a *credit card assistant*, where each agent handles a workflow such as *outstanding payments*, *balance inquiries* and *transaction disputes*. You can equip agents with tools to carry out tasks such as *fetching payment options*, *checking outstanding balance* and *updating user information*. The assistant would help your end-users their credit card-related needs without having to talk to a human agent on your end.
---
## How RowBoat works
### RowBoat Studio
RowBoat Studio lets you create AI agents in minutes, using a visual interface and plain language.
There are key components that you will work with:
- Agents
- Playground
- Copilot
<Card title="Using Rowboat" icon="puzzle-piece" horizontal href="/docs/using-rowboat/rowboat-studio">
Learn about Rowboat Studio and key concepts used in building assistants
</Card>
### RowBoat Chat API & SDK
- [RowBoat Chat API](/docs/api-sdk/using_the_api) is a stateless HTTP API to interface with the assistant created on RowBoat Studio. You can use the API to drive end-user facing conversations in your app or website.
- [RowBoat Chat SDK](/docs/api-sdk/using_the_sdk) is a simple SDK (currently available in Python) which wraps the HTTP API under the hood. It offers both stateful and stateless (OpenAI-style) implementations.
---
## Why RowBoat?
Rowboat is the fastest way to build and deploy MCP connected multi-agents
<Steps>
<Step title="Build complex assistants">
Use plain language and a powerful visual interface to design and orchestrate multi-agent assistants with ease.
</Step>
<Step title="Integrate tools and MCP servers">
Add tools and connect to MCP servers in just minutes — no complex setup required.
</Step>
<Step title="Expedite your AI roadmap">
Accelerate development with battle-tested tooling tailored for building production-ready, multi-agent AI systems.
</Step>
</Steps>
---
## Contributing
Want to contribute to Rowboat? Please consider checking out our [Contribution Guide](/docs/development/contribution-guide)
<Card
title="GitHub"
icon="github"
horizontal href="https://github.com/rowboatlabs/rowboat"
>
Star us on github!
</Card>
## Community
Need help using Rowboat? Join our community!
<Card
title="Discord"
icon="discord"
horizontal href="https://discord.gg/PCkH9TWC"
>
Join our growing discord community and interact with hundreds of developer using Rowboat!
</Card>

View file

@ -0,0 +1,212 @@
---
title: "License"
icon: "file"
mode: "center"
# url: "https://github.com/rowboatlabs/rowboat/blob/main/LICENSE" ## An alternate display we could use
---
RowBoat is available under the [Apache 2.0 License](https://github.com/rowboatlabs/rowboat/blob/main/LICENSE):
----
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [2024] [RowBoat Labs]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View file

@ -0,0 +1,94 @@
---
title: "Quickstart"
description: "guide to getting started with rowboat"
icon: "rocket"
---
---
# Cloud Setup
Using the open-source version of Rowboat requires more technical skill to set up and navigate. For the smoothest experience, we recommend using our [hosted version](https://dev.rowboatlabs.com/)
---
# Local Setup
<Note>Pre-requisite: Ensure Docker is installed on your machine. You'll also need an OpenAI account and API key to use the Copilot and agents.</Note>
<Steps>
<Step title="Set your OpenAI key">
Export your OpenAI API key in your terminal:
```bash
export OPENAI_API_KEY=your-openai-api-key
```
</Step>
<Step title="Set up Composio for tools and triggers (optional)">
To use external tools and triggers, export your Composio API key:
```bash
export COMPOSIO_API_KEY=your-composio-api-key
export COMPOSIO_TRIGGERS_WEBHOOK_SECRET=your-webhook-secret
```
<Note>For more detailed setup instructions, see the [Triggers](/docs/using-rowboat/triggers#local-setup) page.</Note>
</Step>
<Step title="Clone the repository and start Rowboat Docker">
Clone the Rowboat repository and start the app using Docker:
```bash
git clone git@github.com:rowboatlabs/rowboat.git
cd rowboat
docker-compose up --build
```
</Step>
<Step title="Access the app">
Once Docker is running, open your browser and go to:
[http://localhost:3000](http://localhost:3000)
</Step>
</Steps>
<Info>See the [Using custom LLM providers](#using-custom-llm-providers) section below for using custom providers like OpenRouter and LiteLLM. </Info>
---
## Demo
{/* (would be better to change this to a Getiing Started Tutorial) */}
#### Create a multi-agent assistant with MCP tools by chatting with Rowboat
[![Screenshot 2025-04-23 at 00 25 31](https://github.com/user-attachments/assets/c8a41622-8e0e-459f-becb-767503489866)](https://youtu.be/YRTCw9UHRbU)
---
## Integrate with Rowboat agents
There are 2 ways to integrate with the agents you create in Rowboat
<Columns cols={2}>
<Card title="Using the API" icon="code" horizontal href="/docs/api-sdk/using_the_api">
Guide on using the HTTP API
</Card>
<Card title="Using the SDK" icon="toolbox" horizontal href="/docs/api-sdk/using_the_sdk">
Guide on using the Python SDK
</Card>
</Columns>
---
## Using custom LLM providers
By default, Rowboat uses OpenAI LLMs (gpt-4o, gpt-4.1, etc.) for both agents and copilot, when you export your OPENAI_API_KEY.
However, you can also configure custom LLM providers (e.g. LiteLLM, OpenRouter) to use any of the hundreds of available LLMs beyond OpenAI, such as Claude, DeepSeek, Ollama LLMs and so on.
Check out our page on customising
<Card title="Customise" icon="sliders" horizontal href="/docs/using-rowboat/customise">
Learn more about customising your Rowboat experience here
</Card>

23
apps/docs/docs/graph.mdx Normal file
View file

@ -0,0 +1,23 @@
# Graph-based Framework
## Overview
- Multi-agent systems are popularly represented as graphs, where each agent is a node in the graph.
- In RowBoat, agents are connected to each other as Directed Acyclic Graphs (DAG).
- The graph is also called a workflow, which defines agents, tools, and their connections.
- Since the graph is directed, the control of conversation flows from "parent" agents to their "children" agents
- Every agent is responsible for carrying out a specific part of the workflow, which can involve conversing with the user and / or carrying out tasks such as directing the conversation to other agents.
- [Langgraph](https://www.langchain.com/langgraph) and [Swarm](https://github.com/openai/swarm) are examples of open-source frameworks used to define multi-agent graphs. RowBoat currently supports a Swarm implementation and will extend to Langgraph too in the future.
## Control Passing
- While defining the workflow, an agent is designated as the Start agent, to which the first turn of chat will be directed. Typically the Start agent is responsible for triaging the user's query at a high-level and passing control to relevant specific agents which can address the user's needs.
- In any turn of chat, the agent currently in control of the chat has one of 3 options: a) respond to the user (or put out tool calls), b) transfer the chat to any of its children agents or c) transfer the chat back to its parent agent.
- Agents use internal tool calls to transfer the chat to other agents.
- Thus, control passing is achieved by allowing agents to decide flow of control autonomously.
- To the user, the assistant will appear as a unified system, while agents work under the hood.
## Pipelines
- RowBoat also has the concept of pipelines - specialized agents invoked sequentially after an agent in the graph has produced a user-facing response.
- E.g. a pipeline with a post processing agent and a guardrail agent will ensure that every response is post processed and guardrailed for appropriateness before presenting it to the user.

View file

@ -0,0 +1,156 @@
# Using the Hosted App
- This is the developers guide to self-hosting the open-source version of RowBoat.
- Please see our [Introduction](/) page before referring to this guide.
- For direct installation steps, please head to the README of RowBoat's Github repo: [@rowboatlabs/rowboat](https://github.com/rowboatlabs/rowboat/). This page provides more context about the installation process and the different components involved.
## Overview
RowBoat's codebase has three main components:
| Component | Description |
|--------------|---------------|
| **Agents** | Python framework responsible for carrying out multi-agent conversations |
| **Copilot** | Python framework powering the copilot in RowBoat Studio |
| **RowBoat** | Frontend and backend services to power RowBoat Studio and Chat APIs |
These components are structured as separate services, each containerized with Docker. Running `docker-compose up --build` enables you to use the Studio in your browser, as well as stands up the APIs and SDK.
## Prerequisites
All of these prerequistes have open-source or free versions.
| Prerequisite | Description |
|--------------|---------------|
| **Docker** | Bundles and builds all services |
| **OpenAI API Key** | Agents and Copilot services are powered by OpenAI LLMs |
| **MongoDB** | Stores workflow versions, chats and RAG embeddings |
| **Auth0 Account** | Handles user authentication and identity management for Studio |
Refer to our [Github Readme for Prerequisites](https://github.com/rowboatlabs/rowboat/?tab=readme-ov-file#prerequisites) to set up prerequisites.
## Setting up
Refer to our [Github Readme for Local Development](https://github.com/rowboatlabs/rowboat/?tab=readme-ov-file#local-development-setup) to set up Studio, Chat API and SDK via `docker-compose`.
### Testing Studio
1. Once you are set up, you should be able to login to the Studio (default local URL: [http://localhost:3000](http://localhost:8000)) via Auth0's login options (Gmail, Github etc.)
<br />
2. Once in Studio, create a new blank project or use one of the example templates:
![Create Project](img/project-page.png)
<br />
3. Use the copilot to help you build agents:
![Use Copilot](img/use-copilot.png)
<br />
4. Ensure that the correct agent is set as the "start agent":
![Set Start Agent](img/start-agent.png)
<br />
5. Test out a chat in the playground to verify the agents' behavior:
![Testing Chat](img/testing-chat.png)
<br />
### Testing the Chat API
You can use the API directly at [http://localhost:3000/api/v1/](http://localhost:3000/api/v1/)
- Project ID is available in the URL of the project page
- API Key can be generated from the project config page at `/projects/<PROJECT_ID>/config`
Below is an example request and response. Modify the user message in the request, based on your example project.
**Request:**
```bash
curl --location 'http://localhost:3000/api/v1/<PROJECT_ID>/chat' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_KEY>' \
--data '{
"messages": [
{
"role": "user",
"content": "What is my pending payment amount?"
}
]
}'
```
**Response:**
The last message in `messages` is either a user-facing response or a tool call by the assistant.
```json
{
"messages": [
{
"sender": "Credit Card Hub",
"role": "assistant",
"response_type": "internal",
"content": null,
"created_at": "2025-02-01T06:55:47.843909",
"current_turn": true,
"tool_calls": [
{
"function": {
"arguments": "{\"args\":\"\",\"kwargs\":\"\"}",
// Internal tool calls are used to transfer between agents
"name": "transfer_to_outstanding_payment"
},
"id": "call_7jGpwpVvzhZFOyRgxHFkdOdU",
"type": "function"
}
]
},
{
"tool_name": "transfer_to_outstanding_payment",
"role": "tool",
"content": "{\"assistant\": \"Outstanding Payment\"}",
"tool_call_id": "call_7jGpwpVvzhZFOyRgxHFkdOdU"
},
{
"sender": "Outstanding Payment",
"role": "assistant",
// Response is not user-facing, to enable further post processing
"response_type": "internal",
"content": "Sure, could you provide the last four digits of your card or your registered mobile number so I can look up your pending payment amount?",
"created_at": "2025-02-01T06:55:49.648008",
"current_turn": true
},
{
"sender": "Outstanding Payment >> Post process",
"role": "assistant",
// Response is user-facing
"response_type": "external",
"content": "Sure, please provide the last four digits of your card or your registered mobile number so I can check your pending payment amount.",
"created_at": "2025-02-01T06:55:49.648008",
"current_turn": true
}
],
"state": {
// .. state data
}
}
```
### Testing the Python Chat SDK
```bash
pip install rowboat
```
Modify the user message in `messages`, based on your example project.
```python
from rowboat import Client
client = Client(
host="http://localhost:3000",
project_id="<PROJECT_ID>",
api_key="<API_KEY>" # Generate this from /projects/<PROJECT_ID>/config
)
# Simple chat interaction
messages = [{"role": "user", "content": "What is my pending payment amount?"}]
response_messages, state = client.chat(messages=messages)
```
The last message in `response_messages` is either a user-facing response or a tool call by the assistant.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 919 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 906 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 KiB

View file

@ -0,0 +1,32 @@
# Open Source Installation
- This is the developers guide to self-hosting the open-source version of RowBoat. To get started with the hosted app, please see [Using the Hosted App](/hosted_setup)
- Please see our [Introduction](/) page before referring to this guide.
- For direct installation steps, please head to the README of RowBoat's Github repo: [@rowboatlabs/rowboat](https://github.com/rowboatlabs/rowboat/). This page provides more context about the installation process and the different components involved.
## Overview
RowBoat's codebase has three main components:
| Component | Description |
|--------------|---------------|
| **Agents** | Python framework responsible for carrying out multi-agent conversations |
| **Copilot** | Python framework powering the copilot in RowBoat Studio |
| **RowBoat** | Frontend and backend services to power RowBoat Studio and Chat APIs |
These components are structured as separate services, each containerized with Docker. Running `docker-compose up --build` enables you to use the Studio in your browser, as well as stands up the APIs and SDK.
## Prerequisites
All of these prerequisites have open-source or free versions.
| Prerequisite | Description |
|--------------|---------------|
| **Docker** | Bundles and builds all services |
| **OpenAI API Key** | Agents and Copilot services are powered by OpenAI LLMs |
| **MongoDB** | Stores workflow versions, chats and RAG embeddings |
Refer to our [Github Readme for Prerequisites](https://github.com/rowboatlabs/rowboat/?tab=readme-ov-file#prerequisites) to set up prerequisites.
## Setting up
Refer to our [Github Readme for Local Development](https://github.com/rowboatlabs/rowboat/?tab=readme-ov-file#local-development-setup) to set up Studio, Chat API and SDK via `docker-compose`.

View file

@ -0,0 +1,7 @@
## Try an example chat in the playground
### Chat with the assistant
The playground is intended to test out the assistant as you build it. The User and Assistant messages represent the conversation that your end-user will have if your assistant is deployed in production. The playground also has debug elements which show the flow of control between different agents in your system, as well as which agent finally responded to the user.
![Try Chat](img/chat-delivery.png)

View file

@ -0,0 +1,5 @@
# Prompts
- Prompts are reusable pieces of agent instructions in Studio.
- Prompts can be defined once and reused across multiple agents.
- Common examples of prompts are style prompts which indicate brand voice and structured output prompts which specify a format for the agent to provide its output in (e.g. ReAct)

View file

@ -0,0 +1,6 @@
## Simulate real-world user scenarios
Create a test-bench of real-world scenarios in the simulator.
![Scenarios](img/scenarios.png)
Run the scenarios as simulated chats betweeen a user (role-played) and the assistant, in the playground.
![Simulation](img/simulate.png)

View file

@ -0,0 +1,7 @@
# Building Assistants in Studio
This is a guide to building your first assistant on RowBoat Studio, with examples.<br />
Prerequisite:
1. **Open Source Users:** Complete the [open-source installation steps](/oss_installation/) to set up RowBoat Studio.
2. **Hosted App Users:** Sign in to [https://app.rowboatlabs.com/](https://app.rowboatlabs.com/)

132
apps/docs/docs/testing.mdx Normal file
View file

@ -0,0 +1,132 @@
# Testing Your Setup
## Testing Studio
1. Once you are set up, you should be able to login to the Studio via Auth0's login options (Gmail, Github etc.).
- For the open source installation, the URL for Studio is [http://localhost:3000](http://localhost:3000)
- To use our hosted app, the URL for Studio is [https://app.rowboatlabs.com](https://app.rowboatlabs.com/)
<br />
2. Once in Studio, create a new blank project or browse through one of the example projects:
![Create Project](img/project-page.png)
<br />
3. Use the copilot to help you build agents:
![Use Copilot](img/use-copilot.png)
<br />
4. Ensure that the correct agent is set as the "start agent":
![Set Start Agent](img/start-agent.png)
<br />
5. Test out a chat in the playground to verify the agents' behavior:
![Testing Chat](img/testing-chat.png)
<br />
### Testing the Chat API
- For the open source installation, the `<HOST>` is [http://localhost:3000](http://localhost:3000)
- When using the hosted app, the `<HOST>` is [https://app.rowboatlabs.com](https://app.rowboatlabs.com)
- `<PROJECT_ID>` is available in the URL of the project page
- API Key can be generated from the project config page at `<HOST>/projects/<PROJECT_ID>/config`
Below is an example request and response. Modify the user message in the request, based on your example project.
**Request:**
```bash
curl --location 'http://<HOST>/api/v1/<PROJECT_ID>/chat' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_KEY>' \
--data '{
"messages": [
{
"role": "user",
"content": "What is my pending payment amount?"
}
]
}'
```
**Response:**
The last message in `messages` is either a user-facing response or a tool call by the assistant.
```json
{
"messages": [
{
"sender": "Credit Card Hub",
"role": "assistant",
"response_type": "internal",
"content": null,
"created_at": "2025-02-01T06:55:47.843909",
"current_turn": true,
"tool_calls": [
{
"function": {
"arguments": "{\"args\":\"\",\"kwargs\":\"\"}",
// Internal tool calls are used to transfer between agents
"name": "transfer_to_outstanding_payment"
},
"id": "call_7jGpwpVvzhZFOyRgxHFkdOdU",
"type": "function"
}
]
},
{
"tool_name": "transfer_to_outstanding_payment",
"role": "tool",
"content": "{\"assistant\": \"Outstanding Payment\"}",
"tool_call_id": "call_7jGpwpVvzhZFOyRgxHFkdOdU"
},
{
"sender": "Outstanding Payment",
"role": "assistant",
// Response is not user-facing, to enable further post processing
"response_type": "internal",
"content": "Sure, could you provide the last four digits of your card or your registered mobile number so I can look up your pending payment amount?",
"created_at": "2025-02-01T06:55:49.648008",
"current_turn": true
},
{
"sender": "Outstanding Payment >> Post process",
"role": "assistant",
// Response is user-facing
"response_type": "external",
"content": "Sure, please provide the last four digits of your card or your registered mobile number so I can check your pending payment amount.",
"created_at": "2025-02-01T06:55:49.648008",
"current_turn": true
}
],
"state": {
// .. state data
}
}
```
### Testing the Python Chat SDK
- For the open source installation, the `<HOST>` is [http://localhost:3000](http://localhost:3000)
- When using the hosted app, the `<HOST>` is [https://app.rowboatlabs.com](https://app.rowboatlabs.com)
- `<PROJECT_ID>` is available in the URL of the project page
- API Key can be generated from the project config page at `<HOST>/projects/<PROJECT_ID>/config`
```bash
pip install rowboat
```
Modify the user message in `messages`, based on your example project.
```python
from rowboat import Client
client = Client(
host="<HOST>",
project_id="<PROJECT_ID>",
api_key="<API_KEY>" # Generate this from /projects/<PROJECT_ID>/config
)
# Simple chat interaction
messages = [{"role": "user", "content": "What is my pending payment amount?"}]
response_messages, state = client.chat(messages=messages)
```
The last message in `response_messages` is either a user-facing response or a tool call by the assistant.

6
apps/docs/docs/tools.mdx Normal file
View file

@ -0,0 +1,6 @@
# Tools
- Tools are used to carry out specific tasks such as fetching or updating information.
- Tools can be defined once in RowBoat Studio and reused across different agents.
- RowBoat uses OpenAI style tools with name, description and parameters.
- For the purposes of quick testing in the Playground, RowBoat Studio can mock tool responses based on tool descriptions.
- Developers can easily connect tools to APIs by configuring MCP servers or Webhook URL in Settings.

View file

@ -0,0 +1,19 @@
## Update agent behavior
There are three ways for you to update the agent's behavior:
### 1. With help of Copilot
Copilot can help you update agent behavior. It is also aware of the current chat in the playground so you can make references to the current chat while instructing copilot to update agents.
![Update Agent Behavior](img/update-agent-copilot.png)
### 2. Using the Generate button
![Update Agent Behavior](img/update-agent-generate.png)
### 3. By manually editing the instructions
You can manually edit the agent instructions anytime.
![Update Agent Behavior](img/update-agent-manual.png)

View file

@ -0,0 +1,141 @@
---
title: "Agents"
description: "Learn about creating and configuring individual agents within your multi-agent system"
icon: "robot"
---
## Overview
Agents are the core building blocks of Rowboat's multi-agent system. Each agent carries out a specific part of a conversation, handles tasks via tools, and can collaborate with other agents to orchestrate complex workflows.
They are powered by LLMs and can:
- Respond to user input
- Trigger tools or APIs
- Pass control to other agents using @mentions
- Fetch or process internal data
- Execute RAG (Retrieval-Augmented Generation) queries
- Participate in sequential pipeline workflows
---
## Agent Types
Rowboat supports several types of agents, each designed for specific use cases:
| Name | Purpose | Characteristics |
|------|---------|-----------------|
| **Conversational Agents** (`conversation`) | Primary user-facing agents that interact directly with users and orchestrate workflows. | • Can respond to users and orchestrate workflows<br />• Typically serve as the start agent (Hub Agent)|
| **Task Agents** (`internal`) | Specialized agents that perform specific tasks without direct user interaction. | • Focused on specific functions<br />• Return results to parent agents|
| **Pipeline Agents** (`pipeline`) | Sequential workflow execution agents that process data in a chain. | • Execute in sequence within a pipeline<br />• Cannot transfer to other agents directly|
---
## Agent Configuration
Agents are configured through two main tabs in the Rowboat Studio interface:
### **Instructions Tab**
#### Description
A clear description of the agent's role and responsibilities
#### Instructions
Instructions are the backbone of the agent's behavior. Use the Copilot's structured format for consistency:
**Recommended Structure:**
```
## 🧑‍💼 Role:
[Clear description of the agent's role]
## ⚙️ Steps to Follow:
1. [Step 1]
2. [Step 2]
3. [Step 3]
## 🎯 Scope:
✅ In Scope:
- [What the agent should handle]
❌ Out of Scope:
- [What the agent should NOT handle]
## 📋 Guidelines:
✔️ Dos:
- [Positive behaviors]
🚫 Don'ts:
- [Negative behaviors]
```
#### Examples
These help agents behave correctly in specific situations. Each example can include:
- A sample user message
- The expected agent response
- Any tool calls (if applicable)
### **Configurations Tab**
#### Name
Name of the agent
#### Behaviour
- **Agent Type**: Choose from `conversation`, `internal`, or `pipeline`
- **Model**: Select the LLM model (GPT-4o, GPT-4o-mini, google/gemini-2.5-flash, etc.)
#### RAG
- **Add Source**: Connect data sources to enable RAG capabilities for the agent
---
## Creating Your Initial Set of Agents
Let Copilot bootstrap your agent graph.
### Instruct Copilot
Start by telling Copilot what your assistant is meant to do — it'll generate an initial set of agents with best-practice instructions, role definitions, and connected agents.
<Frame>
<img src="/docs/img/create-agents-delivery.png" className="w-full max-w-[400px] rounded-xl" alt="Creating agents with Copilot" />
</Frame>
### Inspect the Output
After applying the suggested agents, take a close look at each one's:
- **Instructions**: Define how the agent behaves
- **Examples**: Guide agent responses and tool use
<Frame>
<img src="/docs/img/agent-instruction.png" alt="Inspect agent instructions" />
</Frame>
---
## Updating Agent Behavior
There are three ways to update an agent:
### 1. With Copilot
Copilot understands the current chat context and can help rewrite or improve an agent's behavior based on how it performed.
<Frame>
<img src="/docs/img/update-agent-copilot.png" className="w-full max-w-[400px] rounded-xl" alt="Update agent using Copilot" />
</Frame>
### 2. Manual Edits
You can always manually edit the agent's instructions.
<Frame>
<img src="/docs/img/update-agent-manual.png" alt="Manually edit agent" />
</Frame>
---

View file

@ -0,0 +1,52 @@
---
title: "Conversations"
description: "View and manage all conversations with your Rowboat agents"
icon: "list-check"
---
## Overview
The Conversations page in Rowboat shows you all the interactions between users and your agents. Here you can monitor conversations, view detailed message exchanges, and understand how your agents are performing.
<Frame>
<img src="/docs/img/conversations-ui.png" className="w-full max-w-[800px] rounded-xl" alt="Conversations page UI showing list of conversations" />
</Frame>
## What You'll See
The Conversations page displays a list of all conversations organized by time:
- **Today**: Recent conversations from today
- **This week**: Conversations from the current week
- **This month**: Conversations from the current month
- **Older**: Conversations from previous months
Each conversation shows:
- **Conversation ID**: Unique identifier for the conversation
- **Created time**: When the conversation started
- **Reason**: What triggered the conversation (chat or job)
## Viewing Conversation Details
Click on any conversation to see the detailed view with all the message exchanges:
<Frame>
<img src="/docs/img/conversations-inside-run.png" className="w-full max-w-[800px] rounded-xl" alt="Conversation details showing expanded view of a conversation with turns and messages" />
</Frame>
**Conversation Metadata**: Shows the Conversation ID, creation time, and last update time.
**Workflow**: Shows the workflow JSON
**Turns**: Each conversation is made up of turns, where:
- **Turn #1, #2, etc.**: Numbered sequence of interactions
- **Reason badge**: Shows why each turn happened (chat, API, job, etc.)
- **Timestamp**: When each turn occurred
- **Input messages**: What was sent to your agents
- **Output messages**: What your agents responded with
### Turn Details
Each turn displays:
- **Input**: The messages sent to your agents (user messages, system messages)
- **Output**: The responses from your agents
- **Error information**: Any issues that occurred during processing

View file

@ -0,0 +1,53 @@
---
title: "Custom LLMs"
description: "How to use and configure custom LLMs in Rowboat."
---
<Note> This is currently only possible in the self hosted version of Rowboat</Note>
## Using custom LLM providers
By default, Rowboat uses OpenAI LLMs (gpt-4o, gpt-4.1, etc.) for both agents and copilot, when you export your OPENAI_API_KEY.
However, you can also configure custom LLM providers (e.g. LiteLLM, OpenRouter) to use any of the hundreds of available LLMs beyond OpenAI, such as Claude, DeepSeek, Ollama LLMs and so on.
<Steps>
<Step title="Set up your LLM provider">
Configure your environment variables to point to your preferred LLM backend. Example using LiteLLM:
```bash
export PROVIDER_BASE_URL=http://host.docker.internal:4000/
export PROVIDER_API_KEY=sk-1234
```
Rowboat uses <code>gpt-4.1</code> as the default model for agents and copilot. You can override these:
```bash
export PROVIDER_DEFAULT_MODEL=claude-3-7-sonnet-latest
export PROVIDER_COPILOT_MODEL=gpt-4o
```
**Notes:**
- Copilot is optimized for <code>gpt-4o</code>/<code>gpt-4.1</code>. We strongly recommend using these models for best results.
- You can use different models for the copilot and each agent, but all must be from the same provider (e.g., LiteLLM).
- Rowboat is provider-agnostic — any backend implementing the OpenAI messages format should work.
- OpenAI-specific tools (like <code>web_search</code>) will not function with non-OpenAI providers. Remove such tools to avoid errors.
</Step>
<Step title="Clone the repository and start Rowboat Docker">
Clone the Rowboat repo and spin it up locally:
```bash
git clone git@github.com:rowboatlabs/rowboat.git
cd rowboat
docker-compose up --build
```
</Step>
<Step title="Access the app">
Once Docker is running, navigate to:
[http://localhost:3000](http://localhost:3000)
</Step>
</Steps>

View file

@ -0,0 +1,45 @@
---
title: "Jobs"
description: "Monitor and inspect all your trigger executions and job runs"
icon: "message"
---
## Overview
The Jobs page in Rowboat provides a comprehensive view of all your automated job executions. Here you can monitor the status of your triggers, inspect what happened during each run, and troubleshoot any issues that may have occurred.
<Frame>
<img src="/docs/img/jobs-ui.png" className="w-full max-w-[800px] rounded-xl" alt="Jobs page showing list of all job runs with status indicators" />
</Frame>
## What You'll See
The Jobs page displays a list of all job runs from your triggers, including:
- **External trigger executions** from webhook events
- **One-time trigger runs** from scheduled jobs
- **Recurring trigger executions** from cron-based schedules
Each job run displays the following key information:
- **Job ID**: Unique identifier for the job run
- **Status**: Indicates if the job succeeded, failed, or is in progress
- **Reason**: The trigger or cause for the job (e.g., external trigger, scheduled, cron)
- **Created Time**: When the job was executed
## Viewing Job Details
### Expand a Job Run
Click on any job run to expand it and see detailed information about what happened during execution:
<Frame>
<img src="/docs/img/jobs-inside-run.png" className="w-full max-w-[800px] rounded-xl" alt="Job run details showing expanded information for a specific job" />
</Frame>
**Basic job details**: Job ID, Status, creation time, Updated time, Conversation ID and Turn ID. By clicking on the Conversation ID, you can view more in-depth details about the run.
**Job Reason**: Why the job triggered - either external trigger, scheduled, or cron.
**Job Input**: The input data sent to your assistant.
**Job Output**: The final output produced by your agents.

View file

@ -0,0 +1,68 @@
---
title: "RAG (Data)"
description: "How to use our inbuilt RAG"
icon: "database"
---
# Using RAG in Rowboat
Rowboat provides multiple ways to enhance your agents' context with Retrieval-Augmented Generation (RAG). This guide will help you set up and use each RAG feature.
<Info>RAG is called "Data" on the build view in the Rowboat UI. </Info>
---
## Types of RAG
| RAG Type | Description | Configuration Required |
|----------|-------------|------------------------|
| **Text RAG** | Process and reason over text content directly | No configuration needed |
| **File Uploads** | Upload PDF files directly from your device | No configuration needed |
| **URL Scraping** | Scrape content from web URLs using Firecrawl | Requires API key setup |
<Note> URL Scraping does not require any setup in the managed version of Rowboat. </Note>
<Frame>
<img src="/docs/img/rag-adding-data.png" className="w-full max-w-[800px] rounded-xl" alt="Adding data sources for RAG in Rowboat" />
</Frame>
## RAG Features
### 1. Text RAG
Process and reason over text content directly
### 2. File Uploads
- Upload PDF files directly from your device
- **Open Source Version**: Files are stored locally on your machine
- **Managed Version**: Files are stored in cloud S3 storage
- Files are parsed using OpenAI by default
<Note> You can also use Google's Gemini model for parsing as it is better at parsing larger files. </Note>
#### 2.1 Using Gemini for File Parsing
To use Google's Gemini model for parsing uploaded PDFs, set the following variables:
```bash
# Enable Gemini for file parsing
export USE_GEMINI_FILE_PARSING=true
export GOOGLE_API_KEY=your_google_api_key
```
### 3. URL Scraping
Rowboat uses Firecrawl for URL scraping. You can have a maximum of 100 URLs.
**Open Source Version**: To enable URL scraping, set the following variables:
```bash
export USE_RAG_SCRAPING=true
export FIRECRAWL_API_KEY=your_firecrawl_api_key
```
**Managed Version**: No configuration required - URL scraping is handled automatically.

View file

@ -0,0 +1,60 @@
---
title: "Rowboat Studio"
description: "Visual interface to build, test, and deploy multi-agent AI assistants using plain language"
icon: "puzzle-piece"
---
## Overview
**Rowboat Studio** is your visual interface for building AI assistants — powered by agents, tools, and workflows — using plain language and minimal setup. It brings the process of creating multi-agent systems down to just a few clicks.
Workflows created within Rowboat are known as **assistants**, and each assistant is composed of:
- One or more **agents**
- Attached **tools** and **MCP servers**
Once built, assistants can be tested live in the **playground** and deployed in real-world products using the [API](/docs/api-sdk/using_the_api) or [SDK](/docs/api-sdk//using_the_sdk).
---
## Key Components
Heres what youll interact with in Studio:
| Component | Description | Highlights |
|------------|-------------|------------|
| **Agent** | Core building blocks of your assistant.<br />Each agent handles a specific part of the conversation and performs tasks using tools and instructions. | • Define behavior in plain language<br />• Connect agents into a graph<br />• Attach tools and RAG sources |
| **Playground** | Interactive testbed for conversations.<br />Lets you simulate end-user chats with your assistant and inspect agent behavior in real time. | • Real-time feedback and debugging<br />• See tool calls and agent handoffs<br />• Test individual agents or the whole system |
| **Copilot** | Your AI assistant for building assistants.<br />Copilot creates and updates agents, tools, and instructions based on your plain-English prompts. | • Understands full system context<br />• Improves agents based on playground chat<br />• Builds workflows intelligently and fast |
> **Agents are the heart of every assistant.** Learn more about how they work in the Agents page.
<Card title="Agents" icon="robot" horizontal href="/docs/using-rowboat/agents">
Learn about creating and configuring individual agents within your multi-agent system
</Card>
---
## Building in Rowboat
<Steps>
<Step title="Describe your assistant to Copilot">
Use plain language to tell Copilot what you want your assistant to do. Copilot will auto-generate the agents, instructions, and tools that form the base of your assistant.
</Step>
<Step title="Review and apply Copilot suggestions">
Inspect the created agents — especially their instructions and examples — and refine or approve them before moving forward.
</Step>
<Step title="Connect MCP servers and tools">
Integrate external services, tools, and backend logic into your agents using Rowboat's modular system. Tools are tied to agents and triggered through instructions.
</Step>
<Step title="Test in the Playground">
Use the chat playground to simulate real-world conversations. Youll see which agent takes control, what tools are triggered, and how your assistant flows.
</Step>
<Step title="Deploy via API or SDK">
Assistants can be deployed into production using the **Rowboat Chat API** or the **Rowboat Chat SDK**. Both support stateless and stateful conversation flows.
</Step>
</Steps>

View file

@ -0,0 +1,48 @@
---
title: "Tools"
description: "Add and configure tools for your agents to interact with external services"
icon: "wrench"
---
## Overview
The Tools page in Rowboat lets you add and configure tools that your agents can use to interact with external services, APIs, and systems. Tools enable your agents to perform real-world actions like sending emails, managing calendars, or processing payments.
<Frame>
<img src="/docs/img/tools-ui.png" alt="Screenshot of the Tools UI in Rowboat" className="w-full max-w-[800px] rounded-xl shadow" />
</Frame>
## Tool Types
| Tool Type | Description | Use Case | Availability |
|-----------|-------------|----------|--------------|
| **Library Tools** | Pre-built integrations with popular services | Quick setup, no configuration needed | Managed and open source |
| **MCP Tools** | Custom tools from MCP servers | Custom functionality, specialized APIs | Managed and open source |
| **Webhook Tools** | HTTP endpoints for custom integrations | Your own systems, custom workflows | Open source only |
## Library (Composio Tools)
- Browse a library of 500+ toolkits from popular services
- With 3000+ tools to choose from!
- Click on a service to see available tools and add them to your workflow
- Users must create a Composio account and add their API key
- Tools require authorization to work properly
<Note>Users can visit [Composio's toolkit documentation](https://docs.composio.dev/toolkits/introduction) for a deep dive into all the tools available.</Note>
## Custom MCP Servers
- Add your own MCP (Model Context Protocol) servers
- Connect to custom tools and APIs you've built
- Configure server URLs and authentication
- Import tools from your MCP servers
## Webhook
<Note>Webhook tools are only available in the open source (local) version of Rowboat.</Note>
- Create custom webhook tools
- Configure HTTP endpoints for your agents to call
- Set up custom authentication and parameters
- Build integrations with your own systems

View file

@ -0,0 +1,131 @@
---
title: "Triggers"
description: "Learn about setting up automated triggers for your Rowboat agents"
icon: "bolt"
---
## Overview
Triggers in Rowboat are automated mechanisms that activate your agents when specific events occur or conditions are met. They form the foundation of your automated workflow system, enabling your agents to respond to external events, scheduled times, and system conditions without manual intervention.
## Trigger Types
Rowboat supports three main categories of triggers, each designed for different automation scenarios:
| Trigger Type | Purpose | Execution | Use Cases |
|--------------|---------|-----------|-----------|
| **External Triggers** | Connect to external services and events | Real-time via webhooks | Slack messages, GitHub events, email processing |
| **One-Time Triggers** | Execute at specific predetermined times | Single execution at set time | Delayed responses, time-sensitive actions |
| **Recurring Triggers** | Execute on repeating schedules | Continuous via cron expressions | Daily reports, periodic maintenance, regular syncs |
---
## External Triggers (Composio Integration)
External triggers are powered by **Composio** and allow users to use triggers from across 30+ services including Slack, GitHub, Gmail, Notion, Google Calendar, and more.
<Frame>
<img src="/docs/img/triggers-external-ui.png" className="w-full max-w-[800px] rounded-xl" alt="External Triggers UI showing available toolkits and services" />
</Frame>
### Creating External Triggers
1. **Click New External Trigger**: Start the trigger creation process
2. **Select a Toolkit**: Browse available toolkits or search for specific services
3. **Choose Trigger Type**: Select the specific trigger from available options, click configure
4. **Authenticate**: Complete OAuth2 flow or enter API keys for the selected service (your preferred method)
5. **Configure**: Set up event filters and data mapping if required
6. **Deploy**: Activate the trigger to start listening for events
### Local Setup
If you're running the open source version of Rowboat, you'll need to set up external triggers manually. In the managed version, this is all handled automatically for you.
<Steps>
<Step title="Create a Composio project">
Sign into [Composio](https://composio.dev/) and create a new project for your Rowboat instance.
</Step>
<Step title="Get your Composio API key">
Go to your project settings and copy the project API key. Export it in your Rowboat environment:
```bash
export COMPOSIO_API_KEY=your-composio-api-key
```
</Step>
<Step title="Expose your Rowboat port">
Use ngrok to expose your local Rowboat instance:
```bash
ngrok http 3000
```
Copy the generated ngrok URL (e.g., `https://a5fe8c0d45b8.ngrok-free.app`).
</Step>
<Step title="Configure webhook URL">
In Composio, go to Events & Triggers section and set the Trigger Webhook URL to:
```
{ngrok_url}/api/composio/webhook
```
Example: `https://a5fe8c0d45b8.ngrok-free.app/api/composio/webhook`
</Step>
<Step title="Set webhook secret">
Copy the Webhook Secret from Composio and export it in Rowboat:
```bash
export COMPOSIO_TRIGGERS_WEBHOOK_SECRET=your-webhook-secret
```
</Step>
<Step title="Restart Rowboat">
Restart your Rowboat instance to load the new environment variables. You're now ready to use external triggers!
</Step>
</Steps>
<Note>Make sure your Rowboat assistant is deployed before receiving trigger calls</Note>
---
## One-Time Triggers (Scheduled Jobs)
One-time triggers execute your agents at a specific, predetermined time. They're useful for delayed responses, batch processing, time-sensitive actions, or coordinating with external schedules.
<Frame>
<img src="/docs/img/triggers-onetime-ui.png" className="w-full max-w-[800px] rounded-xl" alt="One-Time Triggers UI showing scheduled job configuration" />
</Frame>
### Creating One-Time Triggers
1. Set the exact execution time (date and time)
2. Configure the input messages for your agents
3. Deploy to schedule the execution
---
## Recurring Triggers (Cron-based Jobs)
Recurring triggers execute your agents on a repeating schedule using cron expressions. They're ideal for daily reports, periodic maintenance, regular data syncs, and continuous monitoring tasks.
<Frame>
<img src="/docs/img/triggers-recurring-ui.png" className="w-full max-w-[800px] rounded-xl" alt="Recurring Triggers UI showing cron-based job configuration" />
</Frame>
### Creating Recurring Triggers
1. Define the cron expression (e.g., `0 9 * * *` for daily at 9 AM)
2. Configure the recurring message structure
3. Enable the trigger to start the recurring schedule
### Common Cron Patterns
```cron
0 9 * * * # Daily at 9:00 AM
0 8 * * 1 # Every Monday at 8:00 AM
*/15 * * * * # Every 15 minutes
0 0 1 * * # First day of month at midnight
```

View file

@ -0,0 +1,103 @@
# Using RAG in Rowboat
Rowboat provides multiple ways to enhance your agents' context with Retrieval-Augmented Generation (RAG). This guide will help you set up and use each RAG features.
## Quick Start
Text RAG and local file uploads are enabled by default - no configuration needed! Just start using them right away.
## RAG Features
### 1. Text RAG
✅ Enabled by default:
- Process and reason over text content directly
- No configuration required
### 2. Local File Uploads
✅ Enabled by default:
- Upload PDF files directly from your device
- Files are stored locally
- No configuration required
- Files are parsed using OpenAI by default
- For larger files, we recommend using Gemini models - see section below.
#### 2.1 Using Gemini for File Parsing
To use Google's Gemini model for parsing uploaded PDFs, set the following variable:
```bash
# Enable Gemini for file parsing
export USE_GEMINI_FILE_PARSING=true
export GOOGLE_API_KEY=your_google_api_key
```
### 3. URL Scraping
Rowboat uses Firecrawl for URL scraping. To enable URL scraping, set the following variables:
```bash
export USE_RAG_SCRAPING=true
export FIRECRAWL_API_KEY=your_firecrawl_api_key
```
## Advanced RAG features
### 1. File Uploads Backed by S3
To enable S3 file uploads, set the following variables:
```bash
# Enable S3 uploads
export USE_RAG_S3_UPLOADS=true
# S3 Configuration
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export RAG_UPLOADS_S3_BUCKET=your_bucket_name
export RAG_UPLOADS_S3_REGION=your_region
```
### 2. Changing Default Parsing Model
By default, uploaded PDF files are parsed using `gpt-4o`. You can customize this by setting the following:
```bash
# Override the default parsing model
export FILE_PARSING_MODEL=your-preferred-model
```
You can also change the model provider like so:
```bash
# Optional: Override the parsing provider settings
export FILE_PARSING_PROVIDER_BASE_URL=your-provider-base-url
export FILE_PARSING_PROVIDER_API_KEY=your-provider-api-key
```
### 3. Embedding Model Options
By default, Rowboat uses OpenAI's `text-embedding-3-small` model for generating embeddings. You can customize this by setting the following:
```bash
# Override the default embedding model
export EMBEDDING_MODEL=your-preferred-model
export EMBEDDING_VECTOR_SIZE=1536
```
**Important NOTE**
The default size for the vectors index is 1536. If you change this value, then you must delete the index and set it up again:
```bash
docker-compose --profile delete_qdrant --profile qdrant up --build delete_qdrant qdrant
```
followed by:
```bash
./start # this will recreate the index
```
You can also change the model provider like so:
```bash
# Optional: Override the embedding provider settings
export EMBEDDING_PROVIDER_BASE_URL=your-provider-base-url
export EMBEDDING_PROVIDER_API_KEY=your-provider-api-key
```
If you don't specify the provider settings, Rowboat will use OpenAI as the default provider.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB