Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .claude/rules/constitution.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Sim is the **AI workspace** where teams build and run AI agents. Not a workflow
| The product | "AI workspace" | "workflow tool", "automation platform", "agent framework" |
| Building | "build agents", "create agents" | "create workflows" (unless describing the workflow module specifically) |
| Visual builder | "workflow builder" or "visual builder" | "canvas", "graph editor" |
| Mothership | "Mothership" (capitalized) | "chat", "AI assistant", "copilot" |
| The built-in agent | "Sim" — Sim is the agent. The surface is "Chat" (capitalized) | "Mothership", "AI assistant", "copilot" |
| Deployment | "deploy", "ship" | "publish", "activate" |
| Audience | "teams", "builders" | "users", "customers" (in marketing copy) |
| What agents do | "automate real work" | "automate tasks", "automate workflows" |
Expand All @@ -50,7 +50,7 @@ When describing Sim, always lead with the most differentiated claim:

| Module | One-liner |
|--------|-----------|
| **Mothership** | Your AI command center. Build and manage everything in natural language. |
| **Chat** | Open Chat and ask. Sim builds and manages everything in natural language. |
| **Workflows** | The visual builder. Connect blocks, models, and integrations into agent logic. |
| **Knowledge Base** | Your agents' memory. Upload docs, sync sources, build vector databases. |
| **Tables** | A database, built in. Store, query, and wire structured data into agent runs. |
Expand All @@ -68,4 +68,4 @@ When describing Sim, always lead with the most differentiated claim:

## Vision

Sim becomes the default environment where teams build AI agents — not a tool you visit for one task, but a workspace you live in. Workflows are one module; Mothership is another. The workspace is the constant; the interface adapts.
Sim becomes the default environment where teams build AI agents — not a tool you visit for one task, but a workspace you live in. Workflows are one module; Chat is another. The workspace is the constant; the interface adapts.
73 changes: 73 additions & 0 deletions apps/docs/components/ui/try-in-chat.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
'use client'

import { useState } from 'react'
import { Check, Copy, MessageCircle } from 'lucide-react'
import { cn } from '@/lib/utils'

interface TryInChatProps {
prompts: string[]
/** Heading above the prompt list. Defaults to "Try in Chat". */
title?: string
}

function PromptRow({ prompt, isLast }: { prompt: string; isLast: boolean }) {
const [copied, setCopied] = useState(false)

const copy = async () => {
try {
await navigator.clipboard.writeText(prompt)
setCopied(true)
setTimeout(() => setCopied(false), 1500)
} catch {
// Clipboard unavailable (e.g. insecure context) — the text is still selectable.
}
}

return (
<button
type='button'
onClick={copy}
title='Copy prompt'
className={cn(
'group flex w-full cursor-pointer items-start gap-3 px-4 py-2.5 text-left transition-colors hover:bg-[rgba(0,0,0,0.02)] dark:hover:bg-[rgba(255,255,255,0.03)]',
!isLast && 'border-[rgba(0,0,0,0.08)] border-b dark:border-[rgba(255,255,255,0.08)]'
)}
>
<span className='flex-1 text-[0.875rem] text-[rgba(0,0,0,0.7)] leading-relaxed dark:text-[rgba(255,255,255,0.7)]'>
&ldquo;{prompt}&rdquo;
</span>
{copied ? (
<Check className='mt-1 h-3.5 w-3.5 shrink-0 text-emerald-600 dark:text-emerald-400' />
) : (
<Copy className='mt-1 h-3.5 w-3.5 shrink-0 text-[rgba(0,0,0,0.25)] opacity-0 transition-opacity group-hover:opacity-100 dark:text-[rgba(255,255,255,0.3)]' />
)}
</button>
)
}

/**
* A list of copyable prompts the reader can paste into Chat, teaching the
* prompting patterns for the surrounding page's topic. Click a row to copy.
*
* @example
* <TryInChat prompts={[
* "Create a leads table with columns for name, email, company, and status",
* ]} />
*/
export function TryInChat({ prompts, title = 'Try in Chat' }: TryInChatProps) {
return (
<div className='my-6 overflow-hidden rounded-xl border border-[rgba(0,0,0,0.08)] dark:border-[rgba(255,255,255,0.08)]'>
<div className='flex items-center gap-2 border-[rgba(0,0,0,0.08)] border-b bg-[rgba(0,0,0,0.02)] px-4 py-2 dark:border-[rgba(255,255,255,0.08)] dark:bg-[rgba(255,255,255,0.03)]'>
<MessageCircle className='h-3.5 w-3.5 text-[rgba(0,0,0,0.4)] dark:text-[rgba(255,255,255,0.4)]' />
<span className='font-[470] text-[0.8125rem] text-[rgba(0,0,0,0.6)] dark:text-[rgba(255,255,255,0.6)]'>
{title}
</span>
</div>
<div>
{prompts.map((prompt, index) => (
<PromptRow key={prompt} prompt={prompt} isLast={index === prompts.length - 1} />
))}
</div>
</div>
)
}
24 changes: 24 additions & 0 deletions apps/docs/content/docs/en/.source/browser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// @ts-nocheck
/// <reference types="vite/client" />
import { browser } from 'fumadocs-mdx/runtime/browser'
import type * as Config from '../source.config'

const create = browser<
typeof Config,
import('fumadocs-mdx/runtime/types').InternalTypeConfig & {
DocData: {}
}
>()
const browserCollections = {
docs: create.doc(
'docs',
import.meta.glob(['./**/*.{mdx,md}'], {
base: './../content/docs',
query: {
collection: 'docs',
},
eager: false,
})
),
}
export default browserCollections
15 changes: 15 additions & 0 deletions apps/docs/content/docs/en/.source/dynamic.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// @ts-nocheck
/// <reference types="vite/client" />
import { dynamic } from 'fumadocs-mdx/runtime/dynamic'
import * as Config from '../source.config'

const create = await dynamic<
typeof Config,
import('fumadocs-mdx/runtime/types').InternalTypeConfig & {
DocData: {}
}
>(
Config,
{ configPath: 'source.config.ts', environment: 'vite', outDir: '.source' },
{ doc: { passthroughs: ['extractedReferences'] } }
)
31 changes: 31 additions & 0 deletions apps/docs/content/docs/en/.source/server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// @ts-nocheck
/// <reference types="vite/client" />
import { server } from 'fumadocs-mdx/runtime/server'
import type * as Config from '../source.config'

const create = server<
typeof Config,
import('fumadocs-mdx/runtime/types').InternalTypeConfig & {
DocData: {}
}
>({ doc: { passthroughs: ['extractedReferences'] } })

export const docs = await create.docs(
'docs',
'content/docs',
import.meta.glob(['./**/*.{json,yaml}'], {
base: './../content/docs',
query: {
collection: 'docs',
},
import: 'default',
eager: true,
}),
import.meta.glob(['./**/*.{mdx,md}'], {
base: './../content/docs',
query: {
collection: 'docs',
},
eager: true,
})
)
19 changes: 19 additions & 0 deletions apps/docs/content/docs/en/.source/source.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// ../../../source.config.ts
import { defineConfig, defineDocs, frontmatterSchema } from "fumadocs-mdx/config";
import { z } from "zod";
var docs = defineDocs({
dir: "content/docs",
docs: {
schema: frontmatterSchema.extend({
pageType: z.enum(["tutorial", "guide", "reference", "concept"]).optional()
}),
postprocess: {
includeProcessedMarkdown: true
}
}
});
var source_config_default = defineConfig();
export {
source_config_default as default,
docs
};
4 changes: 2 additions & 2 deletions apps/docs/content/docs/en/agents/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,15 @@ To let an agent answer from your own content, connect a [knowledge base](/knowle

### Remember across runs: memory

To let an agent reuse information from one run to the next, give it [memory](/integrations/memory), which stores and recalls values keyed to a conversation. Without it, each run starts fresh; with it, an agent in a chat carries what was said earlier into later messages.
To let an agent reuse information from one run to the next, give it [memory](/integrations/memory), which stores and recalls values keyed to a conversation. Without it, each run starts fresh; with it, an agent [deployed as a chat](/workflows/deployment/chat) carries what was said earlier into later messages.

### Return a usable result: structured output

To make an agent's result something later blocks can act on, give it a **structured output**: a typed object you define instead of free text. In the lead scorer, the agent returns `{ score, tier, reason }`, and a later [Condition](/workflows/blocks/condition) block reads `<agent.tier>` to branch. See [how blocks pass data](/workflows/data-flow) for reading fields.

## Choosing what to use

Start with one Agent block and a prompt, then add only what the task needs: a tool when the agent should act, a skill when it needs written guidance, a knowledge base when it should answer from your documents, memory when it should remember, and a structured output when a later block has to read its result.
Start with one Agent block and a prompt, then add only what the task needs: a tool when the agent should act, a skill when it needs written guidance, a knowledge base when it should answer from your documents, memory when it should remember, and a structured output when a later block has to read its result. An agent ships like any workflow — [deploy it](/workflows/deployment) as an API, a chat, or an MCP server.

<Card title="Choosing what to use" href="/agents/choosing" description="A side-by-side guide to tools, skills, knowledge, and the rest, with one worked example." />

Expand Down
100 changes: 100 additions & 0 deletions apps/docs/content/docs/en/chat/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
---
title: Chat
description: Open Chat and ask. Sim builds workflows, manages data, runs research, and takes action across your workspace.
pageType: concept
---

import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'
import { FAQ } from '@/components/ui/faq'
import { TryInChat } from '@/components/ui/try-in-chat'

<Video src="mothership/create-workflow.mp4" width={700} height={450} />

**Chat** is where you work with Sim directly. Describe what you want — build a workflow, run research, generate a presentation, query a table, schedule a recurring job, send a Slack message — and Sim does it. It knows your entire workspace and takes action directly.

Everything Sim builds is a normal workspace resource: a workflow you can open in the builder, a table you can edit, a file you can download. Chat is the fastest way to create and change things; the rest of the docs cover what those things are and how to work them by hand. Two nearby terms mean something else: an **agent** is a workflow *you* build that reasons and acts (see [Agents](/agents)), and a **[chat deployment](/workflows/deployment/chat)** publishes one of your workflows as a chat for outside users.

## What you can ask for

| Area | What to ask |
|------|-------------|
| **[Workflows](/workflows/building-in-chat)** | Build, edit, run, debug, deploy, and organize workflows |
| **[Research](#research)** | Search the web, read pages, crawl sites, produce research reports |
| **[Files](/files#in-chat)** | Upload, create, edit, and generate documents, presentations, and images |
| **[Tables](/tables#in-chat)** | Create, query, update, and export workspace tables |
| **[Scheduled tasks](/chat/tasks)** | Schedule jobs, take immediate actions, connect integrations, manage tools |
| **[Knowledge bases](/knowledgebase#in-chat)** | Create knowledge bases, add documents, and query content in plain language |

## How it works

Sim receives a snapshot of your entire workspace with every message — all workflows, tables, knowledge bases, files, credentials, jobs, and integrations. That's why you can refer to things by name without specifying IDs or paths:

<TryInChat prompts={[
"Run the invoice workflow",
"Add a row to the leads table",
"Deploy the summarizer as a chat",
]} />

No configuration, no context-setting. Just describe what you want:

<TryInChat prompts={[
"Build a lead enrichment workflow that scores inbound signups and writes the results to the leads table",
"Research our top 5 competitors and save a battle card for each one",
"Schedule a daily job that checks for new high-fit prospects and posts them to #outbound in Slack",
"Create a workflow that takes a contract PDF, extracts the key terms, and emails a summary to legal",
]} />

For complex tasks, Sim delegates to specialized subagents automatically — internal helpers, not the agents you build. You'll see them appear as collapsible sections in the chat while they work — building, researching, writing files, executing actions.

{/* TODO: Screenshot of Chat showing a subagent section expanded mid-task — e.g., the Build or Research subagent actively working, with its collapsible header and steps visible in the thread. */}

## Research [#research]

Ask Sim to research anything and it figures out the best approach — searching the web, reading specific pages, crawling sites, looking up technical docs. It queries live internet data, so results reflect current information, not a training cutoff. (It can only read publicly accessible pages, not ones behind a login.)

<Video src="mothership/research-agent.mp4" width={700} height={450} />

<TryInChat prompts={[
"What did Salesforce, HubSpot, and Gong each ship in the past 30 days? Summarize the key product updates.",
"What's Acme Corp's tech stack, recent hires, and open engineering roles?",
"What are the current rate limits on the Anthropic API?",
"Read [URL] and tell me what changed in this release",
]} />

Sim answers directly in the chat. When you need a structured, saved document instead, ask for a report: Sim searches, reads, and cross-references sources until it has enough, then saves the result as a [file](/files) in your workspace and opens it in the resource panel.

<TryInChat prompts={[
"Research the top 10 AI SDR tools — pricing, features, positioning, and what customers say. Save as a competitive analysis.",
"Build a battle card for [competitor] — their positioning, pricing, strengths, weaknesses, and how we win against them.",
]} />

## Adding context

Bring any workspace object into the conversation via the **+** menu, `@`-mentions, or drag-and-drop from the sidebar. Sim also opens resources automatically when it creates or modifies them.

<Video src="mothership/context-menu.mp4" width={700} height={450} />

| What to add | How it appears |
|-------------|---------------|
| **Workflow** | Interactive canvas in the resource panel |
| **Table** | Full table editor in the resource panel |
| **File** | File viewer with editor, split, and preview modes |
| **Knowledge Base** | Knowledge base management UI |
| **Folder** | Folder contents |
| **Past task** | A previous conversation |

## Layout

Chat has two panes. On the left: the thread, where your messages and Sim's responses appear. On the right: the resource panel, where workflows, tables, files, and knowledge bases open as tabs. The panel is resizable; tabs are draggable and closeable.

<Video src="mothership/split-view.mp4" width={700} height={450} />

<FAQ items={[
{ question: "Is this the same as a chat deployment?", answer: "No. Chat is where you build and manage your workspace by talking to Sim. A chat deployment publishes one workflow of yours as a chat interface for outside users. See Deployment for the latter." },
{ question: "What model does Sim use in Chat?", answer: "Chat always uses Claude Opus 4.6. There is no model selector." },
{ question: "How do I reference an existing workflow or table?", answer: "Type @ followed by the name in the input, use the + menu, or drag the item from the sidebar into the chat." },
{ question: "How long can a task run?", answer: "Up to one hour. For tasks that exceed that, set up a scheduled job or break the work into steps." },
{ question: "Can Sim work on multiple things at once?", answer: "Chat processes one message at a time. You can queue messages — they will be processed in order." },
{ question: "Where are research reports saved?", answer: "Reports are saved as files in your workspace and opened in the resource panel. You can find them in the Files section of the sidebar." },
]} />
Loading