Skip to content

Commit 1e03227

Browse files
authored
docs(): Introduce docs platform (#11643)
1 parent 8570904 commit 1e03227

892 files changed

Lines changed: 40697 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/.mintignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Mintlify automatically ignores these files and directories:
2+
# .git, .github, .claude, .agents, .idea, node_modules,
3+
# README.md, LICENSE.md, CHANGELOG.md, CONTRIBUTING.md
4+
5+
# Draft content
6+
drafts/
7+
*.draft.mdx
8+
9+
# Non-documentation files
10+
skills-lock.json

docs/AGENTS.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
> **First-time setup**: Customize this file for your project. Prompt the user to customize this file for their project.
2+
> For Mintlify product knowledge (components, configuration, writing standards),
3+
> install the Mintlify skill: `npx skills add https://mintlify.com/docs`
4+
5+
# Documentation project instructions
6+
7+
## About this project
8+
9+
- This is a documentation site built on [Mintlify](https://mintlify.com)
10+
- Pages are MDX files with YAML frontmatter
11+
- Configuration lives in `docs.json`
12+
- Use the Mintlify MCP server, `https://mcp.mintlify.com`, to edit content and settings via MCP
13+
- Use the Mintlify docs MCP server, `https://www.mintlify.com/docs/mcp`, to query information about using Mintlify via MCP
14+
15+
## Terminology
16+
17+
{/* Add product-specific terms and preferred usage */}
18+
{/* Example: Use "workspace" not "project", "member" not "user" */}
19+
20+
## Style preferences
21+
22+
{/* Add any project-specific style rules below */}
23+
24+
- Use active voice and second person ("you")
25+
- Keep sentences concise — one idea per sentence
26+
- Use sentence case for headings
27+
- Bold for UI elements: Click **Settings**
28+
- Code formatting for file names, commands, paths, and code references
29+
30+
## Content boundaries
31+
32+
{/* Define what should and shouldn't be documented */}
33+
{/* Example: Don't document internal admin features */}

docs/README.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Mintlify Starter Kit
2+
3+
Use the starter kit to get your docs deployed and ready to customize.
4+
5+
Click the green **Use this template** button at the top of this repo to copy the Mintlify starter kit. The starter kit contains examples with
6+
7+
- Guide pages
8+
- Navigation
9+
- Customizations
10+
- API reference pages
11+
- Use of popular components
12+
13+
**[Follow the full quickstart guide](https://starter.mintlify.com/quickstart)**
14+
15+
## AI-assisted writing
16+
17+
Set up your AI coding tool to work with Mintlify:
18+
19+
```bash
20+
npx skills add https://mintlify.com/docs
21+
```
22+
23+
This command installs Mintlify's documentation skill for your configured AI tools like Claude Code, Cursor, Windsurf, and others. The skill includes component reference, writing standards, and workflow guidance.
24+
25+
See the [AI tools guides](/ai-tools) for tool-specific setup.
26+
27+
## Development
28+
29+
Install the [Mintlify CLI](https://www.npmjs.com/package/mint) to preview your documentation changes locally. To install, use the following command:
30+
31+
```
32+
npm i -g mint
33+
```
34+
35+
Run the following command at the root of your documentation, where your `docs.json` is located:
36+
37+
```
38+
mint dev
39+
```
40+
41+
View your local preview at `http://localhost:3000`.
42+
43+
## Publishing changes
44+
45+
Install our GitHub app from your [dashboard](https://dashboard.mintlify.com/settings/organization/github-app) to propagate changes from your repo to your deployment. Changes are deployed to production automatically after pushing to the default branch.
46+
47+
## Need help?
48+
49+
### Troubleshooting
50+
51+
- If your dev environment isn't running: Run `mint update` to ensure you have the most recent version of the CLI.
52+
- If a page loads as a 404: Make sure you are running in a folder with a valid `docs.json`.
53+
54+
### Resources
55+
- [Mintlify documentation](https://mintlify.com/docs)

docs/agents.mdx

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
---
2+
title: "Overview"
3+
description: "Connect your AI agents to chat platforms and communication channels with Novu's Agent Communication Infrastructure (ACI)."
4+
icon: "plug"
5+
---
6+
7+
8+
Novu Connect is built on the [Agent Communication Infrastructure (ACI)](/agents/get-started/what-is-aci), the infrastructure layer that handles how agents communicate, so your agents can hold real conversations across messaging platforms with users, on the channels they already use.
9+
10+
ACI draws a hard boundary between two concerns:
11+
12+
* **Communication infrastructure**: Webhook ingestion, message normalization, conversation state, identity resolution, and delivery across channels. ACI owns this layer.
13+
14+
* **Agent intelligence**: Your LLM, prompts, tools, managed agent configuration, business logic, or custom runtime. You own this layer.
15+
16+
The result is that you can create an agent once and make it available across connected channels. ACI routes messages in, sends replies out, preserves conversation context, and removes the need to rebuild communication plumbing for every platform.
17+
18+
<Card href="/agents/get-started/what-is-aci" title="What is ACI?" icon="circle-question-mark">
19+
Learn how ACI works, what it solves, and where it draws the line between infrastructure and intelligence.
20+
</Card>
21+
22+
## Connect the agent
23+
24+
Novu Connect accepts two kinds of [agent brains](/platform/additional-resources/glossary#agent-brain). You choose how you want to bring it.
25+
26+
### External connectors
27+
28+
Delegate the agent logic entirely to a managed platform such as Claude Managed Agents. You configure the agent's behavior, system prompt, tools, skills, and MCP servers and the platform runs the intelligence.
29+
30+
<Card href="/agents/managed-agent/overview" title="Managed agent" icon="sparkles">
31+
Set up a fully managed agent powered by Claude. No custom server code required.
32+
</Card>
33+
34+
### Custom code
35+
36+
Write your own agent logic. Handle events, call any LLM or API, and reply using the Novu agent SDK. Compatible with AI SDK, LangChain, OpenAI SDK, and any custom code of your choosing.
37+
38+
<Card href="/agents/custom-code-agent/quickstart" title="Custom code agent" icon="square-code">
39+
Build an agent with full control over logic, tools, and event handling.
40+
</Card>
41+
42+
## How a conversation flows
43+
44+
ACI turns channel-specific messages into a standard communication flow between the user and your agent brain.
45+
46+
1. A user sends a message on Slack, Teams, WhatsApp, or another supported channel.
47+
2. Novu ingests the webhook, normalizes the event, and resolves the user's identity.
48+
3. Novu sends the event to your agent brain with full conversation context.
49+
4. Your agent processes the message and responds.
50+
5. Novu delivers the reply back to the correct platform thread.
51+
6. Novu persists the conversation and makes it visible in the Connect dashboard.
52+
53+
## Start building
54+
55+
<Card href="/agents/managed-agent/quickstart" title="Quickstart" icon="zap">
56+
Follow the quickstart to create your first agent, connect a Slack provider, and send your first message in under 5 minutes.
57+
</Card>
58+
59+
## Learn more
60+
61+
Explore the full documentation to go deeper on any part of Novu Connect.
62+
63+
<Columns cols={2}>
64+
<Card href="/agents/get-started/what-is-aci" title="What is ACI?" icon="circle-question-mark">
65+
Understand the infrastructure layer and the problem it solves.
66+
</Card>
67+
<Card href="/agents/get-started/mental-model" title="Mental model" icon="brain-circuit">
68+
How inbound messages flow from a channel through to your agent and back.
69+
</Card>
70+
<Card href="/agents/get-started/agents-and-providers" title="Agents and providers" icon="blocks">
71+
How agents and provider connections work, and which channels are supported.
72+
</Card>
73+
<Card href="/agents/managed-agent/overview" title="Managed agent" icon="sparkles">
74+
Configure a fully-managed agent powered by Claude.
75+
</Card>
76+
<Card href="/agents/custom-code-agent/quickstart" title="Custom code quickstart" icon="zap">
77+
Connect a Slack provider and send your first message in under five minutes.
78+
</Card>
79+
<Card href="/agents/conversations" title="Conversation observability" icon="messages-square">
80+
Monitor, inspect, and manage live agent conversations.
81+
</Card>
82+
</Columns>

docs/agents/conversations.mdx

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
---
2+
title: "Agent Conversations"
3+
description: 'View agent conversations, their history, lifecycle, and observability in the Novu dashboard.'
4+
icon: "messages-square"
5+
---
6+
7+
Novu provides full observability for agent conversations across both managed agents and custom code agents. You can view and manage conversations in the Novu dashboard. Go to the Activity Feed page and switch to the **Agent Conversations** tab.
8+
9+
## Conversation lifecycle
10+
11+
Every agent conversation follows the same state machine, regardless of agent type:
12+
13+
![Agent conversation lifecycle](/images/agents/conversations/lifecycle.png)
14+
15+
| State | What it means |
16+
| --- | --- |
17+
| **Active** | The conversation is ongoing. Messages increment the count, metadata can be updated, and the last activity timestamp is refreshed. |
18+
| **Resolved** | The conversation has been closed. For custom code agents, this happens when the handler calls `ctx.resolve()` and the `onResolve` handler fires. For managed agents, the platform can resolve the conversation based on its reasoning. An optional summary is stored. |
19+
| **Reopened** | If a user sends a new message after the conversation was resolved, it automatically reopens and becomes active again. |
20+
21+
## What the dashboard shows
22+
23+
Navigate to your agent's detail page to see all conversations, their status, and a complete timeline of activity.
24+
25+
<video autoPlay loop muted playsInline src="/images/agents/conversations/manage-agent-conversations.mp4" />
26+
27+
- **Conversation list**: all conversations for the agent, with status (active / resolved), last message preview, message count, and last activity timestamp.
28+
- **Full message history**: every message exchanged between the user and the agent, including rich content (cards, markdown, files).
29+
- **Metadata**: key-value pairs stored on the conversation. In custom code agents, these are set via `ctx.metadata.set()`. In managed agents, the platform may store internal state.
30+
- **Signal activity**: a log of signals fired during the conversation (metadata changes, workflow triggers, resolve events). This applies to custom code agents that use signals.
31+
- **Tool use activity**: for managed agents, the dashboard shows which tools the agent called during each turn, including built-in tools and MCP servers.
32+
- **Participant details**: which subscribers and platform users are part of each conversation, with identity resolution status.
33+
- **Platform context**: which provider and thread the conversation is happening on.
34+
35+
## Supported platforms
36+
37+
Both managed agents and custom code agents support the same set of chat providers:
38+
39+
| Platform | Status | Notes |
40+
| --- | --- | --- |
41+
| Slack | Available | Text, markdown, files, interactive cards, reactions, typing indicators. File uploads require the `files:write` bot scope. |
42+
| Microsoft Teams | Available | Text, markdown, files, and cards via Bot Framework. Dashboard includes a guided onboarding flow with one-click app package download. |
43+
| WhatsApp | Available | Text, markdown, interactive buttons. Inbound media is surfaced via attachments; outbound file attachments are not supported yet. |
44+
| Email | Available | Text, markdown, files, interactive cards, emoji reactions (Gmail only). |
45+
| Telegram | Available | Text, markdown, files, reactions, typing indicators. |
46+
47+
<Note>
48+
Platform capabilities might vary. For example, typing indicators are only shown on platforms that support them, and message editing depends on platform adapter support.
49+
</Note>
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
---
2+
title: "Concepts"
3+
description: 'Entities, lifecycle, and handler building blocks for a custom code agent with Novu.'
4+
icon: "brain"
5+
---
6+
7+
8+
These are the ideas behind Novu for Agents (Agent Communication Infrastructure, or ACI). You write handler code; Novu handles providers, delivery, and conversation state.
9+
10+
## Inbound flow
11+
12+
Users can message your agent, and your agent can message back. When someone interacts on a connected platform, Novu resolves identity and conversation state, forwards a context object to your server, then delivers your reply to the right thread.
13+
14+
![Inbound message flow](/images/agents/custom-code-agent/concept-inbound-flow.png)
15+
16+
| Step | What Novu does |
17+
| --- | --- |
18+
| **Receive and identify** | Normalizes the platform webhook. Maps the platform user (for example a Slack user ID) to a Novu subscriber when possible. Known users get full profiles; unknown users stay anonymous until resolved. |
19+
| **Load conversation** | Creates or loads the conversation for that thread. Assembles message history, metadata, and subscriber data into one context object. |
20+
| **Your handler** | Calls your code with message, history, subscriber, and platform details. You run your LLM or business logic and call `ctx.reply()`. |
21+
| **Deliver and persist** | Sends the reply to the provider thread, stores it in history, and logs activity in the dashboard. |
22+
23+
Your server never calls Slack, Teams, or email APIs directly. It gets a context object and returns a reply; Novu handles the rest.
24+
25+
## Key entities
26+
27+
### Agent
28+
29+
The dashboard object that connects your code to one or more chat providers. Each agent has a name, identifier, and event handlers.
30+
31+
It does not define your model, prompts, tools, or business rules. It is the bridge to the app where that logic lives. The provider is where the user chats; the agent is how your app responds.
32+
33+
### Provider connection
34+
35+
Credentials and config that link an agent to a platform (Slack, Teams, WhatsApp, email, and others).
36+
37+
Setup and capabilities differ per provider (reactions, typing indicators, attachments, cards, message edits, and so on). Novu normalizes inbound events before your handler runs, so you work with one interface instead of provider-specific webhooks. Your handler code stays provider-agnostic; Novu translates outbound replies per platform.
38+
39+
### Conversation
40+
41+
The stateful thread for a chat. Novu creates or loads it when a message arrives. It holds history, metadata, participants, status, and platform context.
42+
43+
The agent is a participant, not the conversation itself (relevant when you read threads in the dashboard). A Slack thread, email thread, or similar maps to one Novu conversation.
44+
45+
**Lifecycle:** **Active** from the first message until resolved. **Resolved** when the agent emits the resolve signal (`onResolve` runs; optional summary stored). **Reopened** automatically if the user messages again after resolution.
46+
47+
### Participants and identity
48+
49+
Novu maps platform users to subscribers when it can:
50+
51+
- **Match found:** handler gets subscriber ID, name, email, and related fields.
52+
- **No match:** user is tracked as a platform user; write handlers that tolerate missing subscriber data.
53+
54+
Later resolution upgrades them to a full subscriber. Identity is provider-aware (Slack user ID vs email sender, and so on) but can resolve to one subscriber record. Use it for personalization, account lookup, and escalation rules.
55+
56+
## Bridge surface
57+
58+
The same handler API applies no matter which provider sent the event or which model you use.
59+
60+
### Event handlers
61+
62+
| Handler | When it runs | Typical use |
63+
| --- | --- | --- |
64+
| `onMessage` | User sends a message | Process text and reply |
65+
| `onAction` | User clicks a button or selects from a card | Forms, buttons, dropdowns |
66+
| `onReaction` | User adds or removes a reaction | Feedback, follow-ups |
67+
| `onResolve` | Conversation marked resolved | Cleanup, analytics, summary |
68+
69+
Handlers connect Novu's delivery layer to your app. An `onMessage` handler might pass context to an LLM and return a reply through Novu.
70+
71+
### Context object
72+
73+
Each handler receives a context with some or all of:
74+
75+
- Incoming message
76+
- Conversation state and metadata
77+
- Resolved subscriber (when available)
78+
- Recent history
79+
- Provider and platform details (thread, channel IDs)
80+
- Methods to reply, set metadata, trigger workflows, or resolve
81+
82+
That object is the only interface your code needs. You do not integrate Slack, Teams, WhatsApp, or email separately in the handler.
83+
84+
### Replies vs signals
85+
86+
**Replies** are user-visible messages: plain text, markdown with files, or interactive cards (buttons, dropdowns, links, inputs). Card interactions fire `onAction` with `actionId` and value.
87+
88+
**Signals** update state without necessarily sending another chat message:
89+
90+
| Signal | What it does |
91+
| --- | --- |
92+
| Metadata | Key-value data on the conversation, persists across turns |
93+
| Trigger | Starts a Novu workflow from the thread |
94+
| Resolve | Marks the conversation resolved, optional summary |
95+
96+
Replies talk to the user; signals update the system around the conversation. One handler turn can reply, set metadata, trigger a workflow, and resolve.
97+
98+
Signals queue in memory and batch with your next `ctx.reply()` in one request. If the handler exits without calling `ctx.reply()`, pending signals still send.
99+
100+
## Conversations and workflows
101+
102+
Conversations and Novu workflows share the same account:
103+
104+
- **Conversation to workflow:** User asks in Slack for a report by email; handler calls `ctx.trigger()` and an existing workflow sends the email.
105+
- **Workflow to conversation:** User replies to a digest email; that reply opens a new agent conversation.
106+
107+
ACI extends Novu's workflow system; it does not replace it. Transactional workflows and open-ended chat work together on one platform.
108+
109+
## Full flow (example: Slack)
110+
111+
1. User messages the agent in Slack.
112+
2. Novu receives the event via the provider connection.
113+
3. Novu maps the thread to a conversation and resolves the subscriber when possible.
114+
4. Novu calls `onMessage` with the context object.
115+
5. Your handler passes message and history to your agent logic.
116+
6. Your logic decides the next action.
117+
7. Handler sends a reply, signals, or both.
118+
8. Novu posts the reply to the Slack thread.
119+
9. Novu records messages, participants, metadata, signals, and status.
120+
121+
The same handler code works on every connected provider; adding a provider does not require changing agent logic.
122+
123+
## Next steps
124+
125+
<Columns cols={2}>
126+
<Card icon="house" href="/agents/custom-code-agent/quickstart" title="Quickstart">
127+
Create an agent, connect Slack, and get a reply in-thread.
128+
</Card>
129+
<Card icon="brain" href="/agents/custom-code-agent/connect-your-first-agent" title="Connect your first agent">
130+
Walk through a full support-bot handler file.
131+
</Card>
132+
</Columns>

0 commit comments

Comments
 (0)