feat(turbo): restructured repo to be a standard turborepo monorepo (#341)

* added turborepo

* finished turbo migration

* updated gitignore

* use dotenv & run format

* fixed error in docs

* remove standalone deployment in prod

* fix ts error, remove ignore ts errors during build

* added formatter to the end of the docs generator
This commit is contained in:
Waleed Latif
2025-05-09 21:45:49 -07:00
committed by GitHub
parent 1438028982
commit a92ee8bf46
1072 changed files with 39956 additions and 22581 deletions

View File

@@ -18,14 +18,20 @@ alias pgc="PGPASSWORD=postgres psql -h db -U postgres -d simstudio"
alias check-db="PGPASSWORD=postgres psql -h db -U postgres -c '\l'"
# Sim Studio specific aliases
alias logs="cd /workspace/sim && tail -f logs/*.log 2>/dev/null || echo 'No log files found'"
alias sim-start="cd /workspace/sim && npm run dev"
alias sim-migrate="cd /workspace/sim && npx drizzle-kit push"
alias sim-generate="cd /workspace/sim && npx drizzle-kit generate"
alias sim-rebuild="cd /workspace/sim && npm run build && npm start"
alias logs="cd /workspace/apps/sim && tail -f logs/*.log 2>/dev/null || echo 'No log files found'"
alias sim-start="cd /workspace && npm run dev"
alias sim-migrate="cd /workspace/apps/sim && npx drizzle-kit push"
alias sim-generate="cd /workspace/apps/sim && npx drizzle-kit generate"
alias sim-rebuild="cd /workspace && npm run build && npm run dev"
alias docs-dev="cd /workspace/apps/docs && npm run dev"
# Default to sim directory
cd /workspace/sim 2>/dev/null || true
# Turbo related commands
alias turbo-build="cd /workspace && npx turbo run build"
alias turbo-dev="cd /workspace && npx turbo run dev"
alias turbo-test="cd /workspace && npx turbo run test"
# Default to workspace directory
cd /workspace 2>/dev/null || true
# Welcome message - only show once per session
if [ -z "$SIM_WELCOME_SHOWN" ]; then
@@ -36,10 +42,16 @@ if [ -z "$SIM_WELCOME_SHOWN" ]; then
echo "🚀 Welcome to Sim Studio development environment!"
echo ""
echo "Available commands:"
echo " sim-start - Start the development server"
echo " sim-migrate - Push schema changes to the database"
echo " sim-generate - Generate new migrations"
echo " sim-rebuild - Build and start the production server"
echo " sim-start - Start all apps in development mode"
echo " sim-migrate - Push schema changes to the database for sim app"
echo " sim-generate - Generate new migrations for sim app"
echo " sim-rebuild - Build and start all apps"
echo " docs-dev - Start only the docs app in development mode"
echo ""
echo "Turbo commands:"
echo " turbo-build - Build all apps using Turborepo"
echo " turbo-dev - Start development mode for all apps"
echo " turbo-test - Run tests for all packages"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
fi

View File

@@ -23,7 +23,7 @@ RUN echo "$USERNAME ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USERNAME \
RUN npm install -g npm@latest
# Install global packages
RUN npm install -g drizzle-kit
RUN npm install -g drizzle-kit turbo
# Switch back to dialog for any ad-hoc use of apt-get
ENV DEBIAN_FRONTEND=dialog
@@ -31,4 +31,5 @@ ENV DEBIAN_FRONTEND=dialog
WORKDIR /workspace
# Expose the ports we're interested in
EXPOSE 3000
EXPOSE 3000
EXPOSE 3001

View File

@@ -18,8 +18,9 @@ services:
db:
condition: service_healthy
ports:
- "3000:3000"
working_dir: /workspace/sim
- '3000:3000'
- '3001:3001'
working_dir: /workspace
db:
image: postgres:16
@@ -31,12 +32,12 @@ services:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=simstudio
ports:
- "5432:5432"
- '5432:5432'
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 5s
timeout: 5s
retries: 5
volumes:
postgres-data:
postgres-data:

View File

@@ -5,8 +5,8 @@ set -e
echo "🔧 Setting up Sim Studio development environment..."
# Change to the sim directory
cd /workspace/sim
# Change to the workspace root directory
cd /workspace
# Setup .bashrc
echo "📄 Setting up .bashrc with aliases..."
@@ -19,6 +19,8 @@ echo "📦 Cleaning and reinstalling npm dependencies..."
if [ -d "node_modules" ]; then
echo "Removing existing node_modules to ensure platform compatibility..."
rm -rf node_modules
rm -rf apps/sim/node_modules
rm -rf apps/docs/node_modules
fi
# Install dependencies with platform-specific binaries
@@ -26,16 +28,22 @@ npm install || {
echo "⚠️ npm install had issues but continuing setup..."
}
# Set up environment variables if .env doesn't exist
if [ ! -f ".env" ]; then
# Set up environment variables if .env doesn't exist for the sim app
if [ ! -f "apps/sim/.env" ]; then
echo "📄 Creating .env file from template..."
cp .env.example .env 2>/dev/null || echo "DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio" > .env
if [ -f "apps/sim/.env.example" ]; then
cp apps/sim/.env.example apps/sim/.env
else
echo "DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio" > apps/sim/.env
fi
fi
# Generate schema and run database migrations
echo "🗃️ Running database schema generation and migrations..."
echo "Generating schema..."
cd apps/sim
npx drizzle-kit generate
cd ../..
echo "Waiting for database to be ready..."
# Try to connect to the database, but don't fail the script if it doesn't work
@@ -44,7 +52,9 @@ echo "Waiting for database to be ready..."
while [ $timeout -gt 0 ]; do
if PGPASSWORD=postgres psql -h db -U postgres -c '\q' 2>/dev/null; then
echo "Database is ready!"
cd apps/sim
DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio npx drizzle-kit push
cd ../..
break
fi
echo "Database is unavailable - sleeping (${timeout}s remaining)"
@@ -61,13 +71,13 @@ echo "Waiting for database to be ready..."
cat << EOF >> ~/.bashrc
# Additional Sim Studio Development Aliases
alias migrate="cd /workspace/sim && DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio npx drizzle-kit push"
alias generate="cd /workspace/sim && npx drizzle-kit generate"
alias dev="cd /workspace/sim && npm run dev"
alias build="cd /workspace/sim && npm run build"
alias start="cd /workspace/sim && npm run start"
alias lint="cd /workspace/sim && npm run lint"
alias test="cd /workspace/sim && npm run test"
alias migrate="cd /workspace/apps/sim && DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio npx drizzle-kit push"
alias generate="cd /workspace/apps/sim && npx drizzle-kit generate"
alias dev="cd /workspace && npm run dev"
alias build="cd /workspace && npm run build"
alias start="cd /workspace && npm run dev"
alias lint="cd /workspace/apps/sim && npm run lint"
alias test="cd /workspace && npm run test"
EOF
# Source the .bashrc to make aliases available immediately

View File

@@ -14,22 +14,22 @@ appearance, race, religion, or sexual identity and orientation.
Examples of behaviour that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologising to those affected by our mistakes,
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologising to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
- Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behaviour include:
* The use of sexualised language or imagery, and sexual attention or advances
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
- The use of sexualised language or imagery, and sexual attention or advances
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
@@ -112,4 +112,4 @@ the community.
This Code of Conduct is adapted from the [Contributor Covenant](https://contributor-covenant.org/), version
[1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct/code_of_conduct.md) and
[2.0](https://www.contributor-covenant.org/version/2/0/code_of_conduct/code_of_conduct.md),
and was generated by [contributing.md](https://contributing.md/generator).
and was generated by [contributing.md](https://contributing.md/generator).

View File

@@ -3,7 +3,7 @@
Thank you for your interest in contributing to Sim Studio! Our goal is to provide developers with a powerful, user-friendly platform for building, testing, and optimizing agentic workflows. We welcome contributions in all forms—from bug fixes and design improvements to brand-new features.
> **Project Overview:**
> Sim Studio is a monorepo containing the main application (`sim/`) and documentation (`docs/`). The main application is built with Next.js (app router), ReactFlow, Zustand, Shadcn, and Tailwind CSS. Please ensure your contributions follow our best practices for clarity, maintainability, and consistency.
> Sim Studio is a monorepo using Turborepo, containing the main application (`apps/sim/`), documentation (`apps/docs/`), and shared packages (`packages/`). The main application is built with Next.js (app router), ReactFlow, Zustand, Shadcn, and Tailwind CSS. Please ensure your contributions follow our best practices for clarity, maintainability, and consistency.
---
@@ -269,26 +269,26 @@ Sim Studio is built in a modular fashion where blocks and tools extend the platf
### Where to Add Your Code
- **Blocks:** Create your new block file under the `/sim/blocks/blocks` directory. The name of the file should match the provider name (e.g., `pinecone.ts`).
- **Tools:** Create a new directory under `/sim/tools` with the same name as the provider (e.g., `/sim/tools/pinecone`).
- **Blocks:** Create your new block file under the `/apps/sim/blocks/blocks` directory. The name of the file should match the provider name (e.g., `pinecone.ts`).
- **Tools:** Create a new directory under `/apps/sim/tools` with the same name as the provider (e.g., `/apps/sim/tools/pinecone`).
In addition, you will need to update the registries:
- **Block Registry:** Update the blocks index (`/sim/blocks/index.ts`) to include your new block.
- **Tool Registry:** Update the tools registry (`/sim/tools/index.ts`) to add your new tool.
- **Block Registry:** Update the blocks index (`/apps/sim/blocks/index.ts`) to include your new block.
- **Tool Registry:** Update the tools registry (`/apps/sim/tools/index.ts`) to add your new tool.
### How to Create a New Block
1. **Create a New File:**
Create a file for your block named after the provider (e.g., `pinecone.ts`) in the `/sim/blocks/blocks` directory.
Create a file for your block named after the provider (e.g., `pinecone.ts`) in the `/apps/sim/blocks/blocks` directory.
2. **Create a New Icon:**
Create a new icon for your block in the `/sim/components/icons.tsx` file. The icon should follow the same naming convention as the block (e.g., `PineconeIcon`).
Create a new icon for your block in the `/apps/sim/components/icons.tsx` file. The icon should follow the same naming convention as the block (e.g., `PineconeIcon`).
3. **Define the Block Configuration:**
Your block should export a constant of type `BlockConfig`. For example:
```typescript:/sim/blocks/blocks/pinecone.ts
```typescript:/apps/sim/blocks/blocks/pinecone.ts
import { PineconeIcon } from '@/components/icons'
import { PineconeResponse } from '@/tools/pinecone/types'
import { BlockConfig } from '../types'
@@ -313,11 +313,11 @@ In addition, you will need to update the registries:
```
4. **Register Your Block:**
Add your block to the blocks registry (`/sim/blocks/registry.ts`):
Add your block to the blocks registry (`/apps/sim/blocks/registry.ts`):
```typescript:/sim/blocks/registry.ts
```typescript:/apps/sim/blocks/registry.ts
import { PineconeBlock } from './blocks/pinecone'
// Registry of all available blocks
export const registry: Record<string, BlockConfig> = {
// ... existing blocks
@@ -333,7 +333,7 @@ In addition, you will need to update the registries:
### How to Create a New Tool
1. **Create a New Directory:**
Create a directory under `/sim/tools` with the same name as the provider (e.g., `/sim/tools/pinecone`).
Create a directory under `/apps/sim/tools` with the same name as the provider (e.g., `/apps/sim/tools/pinecone`).
2. **Create Tool Files:**
Create separate files for each tool functionality with descriptive names (e.g., `fetch.ts`, `generate_embeddings.ts`, `search_text.ts`) in your tool directory.
@@ -344,7 +344,7 @@ In addition, you will need to update the registries:
4. **Create an Index File:**
Create an `index.ts` file in your tool directory that imports and exports all tools:
```typescript:/sim/tools/pinecone/index.ts
```typescript:/apps/sim/tools/pinecone/index.ts
import { fetchTool } from './fetch'
import { generateEmbeddingsTool } from './generate_embeddings'
import { searchTextTool } from './search_text'
@@ -355,7 +355,7 @@ In addition, you will need to update the registries:
5. **Define the Tool Configuration:**
Your tool should export a constant with a naming convention of `{toolName}Tool`. The tool ID should follow the format `{provider}_{tool_name}`. For example:
```typescript:/sim/tools/pinecone/fetch.ts
```typescript:/apps/sim/tools/pinecone/fetch.ts
import { ToolConfig, ToolResponse } from '../types'
import { PineconeParams, PineconeResponse } from './types'
@@ -384,9 +384,9 @@ In addition, you will need to update the registries:
```
6. **Register Your Tool:**
Update the tools registry in `/sim/tools/index.ts` to include your new tool:
Update the tools registry in `/apps/sim/tools/index.ts` to include your new tool:
```typescript:/sim/tools/index.ts
```typescript:/apps/sim/tools/index.ts
import { fetchTool, generateEmbeddingsTool, searchTextTool } from './pinecone'
// ... other imports

View File

@@ -1,7 +1,7 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]"
title: '[BUG]'
labels: bug
assignees: ''
---
@@ -11,6 +11,7 @@ A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
@@ -23,4 +24,4 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.
Add any other context about the problem here.

View File

@@ -1,7 +1,7 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[REQUEST]"
title: '[REQUEST]'
labels: feature
assignees: ''
---
@@ -16,4 +16,4 @@ A clear and concise description of what you want to happen.
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
Add any other context or screenshots about the feature request here.

4
.github/SECURITY.md vendored
View File

@@ -6,7 +6,6 @@
| ------- | ------------------ |
| 0.1.x | :white_check_mark: |
## Reporting a Vulnerability
We take the security of Sim Studio seriously. If you believe you've found a security vulnerability, please follow these steps:
@@ -16,6 +15,7 @@ We take the security of Sim Studio seriously. If you believe you've found a secu
2. **Email us directly** at security@simstudio.ai with details of the vulnerability.
3. **Include the following information** in your report:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
@@ -23,4 +23,4 @@ We take the security of Sim Studio seriously. If you believe you've found a secu
4. We will acknowledge receipt of your vulnerability report within 48 hours and provide an estimated timeline for a fix.
5. Once the vulnerability is fixed, we will notify you and publicly acknowledge your contribution (unless you prefer to remain anonymous).
5. Once the vulnerability is fixed, we will notify you and publicly acknowledge your contribution (unless you prefer to remain anonymous).

View File

@@ -1,98 +1,98 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/sim"
- package-ecosystem: 'npm'
directory: '/sim'
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
interval: 'weekly'
day: 'monday'
time: '09:00'
# Disable version updates
open-pull-requests-limit: 0
labels:
- "dependencies"
- "security"
- 'dependencies'
- 'security'
commit-message:
prefix: "fix(deps)"
prefix-development: "chore(deps)"
include: "scope"
prefix: 'fix(deps)'
prefix-development: 'chore(deps)'
include: 'scope'
groups:
dependencies:
applies-to: security-updates
patterns:
- "*"
- '*'
# Documentation site dependencies (/docs)
- package-ecosystem: "npm"
directory: "/docs"
- package-ecosystem: 'npm'
directory: '/docs'
schedule:
interval: "weekly"
day: "wednesday"
interval: 'weekly'
day: 'wednesday'
# Disable version updates
open-pull-requests-limit: 0
labels:
- "dependencies"
- "security"
- 'dependencies'
- 'security'
commit-message:
prefix: "docs(deps)"
include: "scope"
prefix: 'docs(deps)'
include: 'scope'
groups:
docs-dependencies:
applies-to: security-updates
patterns:
- "*"
- '*'
# Root-level dependencies (if any)
- package-ecosystem: "npm"
directory: "/"
- package-ecosystem: 'npm'
directory: '/'
schedule:
interval: "weekly"
day: "friday"
interval: 'weekly'
day: 'friday'
# Disable version updates
open-pull-requests-limit: 0
labels:
- "dependencies"
- "security"
- 'dependencies'
- 'security'
commit-message:
prefix: "chore(deps)"
include: "scope"
prefix: 'chore(deps)'
include: 'scope'
groups:
root-dependencies:
applies-to: security-updates
patterns:
- "*"
- '*'
# GitHub Actions workflows
- package-ecosystem: "github-actions"
directory: "/"
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: "monthly"
interval: 'monthly'
# Disable version updates
open-pull-requests-limit: 0
labels:
- "dependencies"
- "security"
- 'dependencies'
- 'security'
commit-message:
prefix: "ci(deps)"
prefix: 'ci(deps)'
groups:
actions:
applies-to: security-updates
patterns:
- "*"
- '*'
# Docker containers (if applicable)
- package-ecosystem: "docker"
directory: "/"
- package-ecosystem: 'docker'
directory: '/'
schedule:
interval: "monthly"
interval: 'monthly'
# Disable version updates
open-pull-requests-limit: 0
labels:
- "dependencies"
- "security"
- 'dependencies'
- 'security'
commit-message:
prefix: "docker(deps)"
prefix: 'docker(deps)'
groups:
docker:
applies-to: security-updates
patterns:
- "*"
- '*'

View File

@@ -10,51 +10,45 @@ jobs:
test:
name: Test and Build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: './sim/package-lock.json'
cache-dependency-path: './package-lock.json'
- name: Install dependencies
working-directory: ./sim
run: npm ci
- name: Fix Rollup module issue
working-directory: ./sim
run: |
rm -rf node_modules package-lock.json
npm install
- name: Install Turbo globally
run: npm install -g turbo
- name: Run tests with coverage
working-directory: ./sim
env:
NODE_OPTIONS: "--no-warnings"
run: npm run test:coverage
NODE_OPTIONS: '--no-warnings'
run: npx turbo run test
- name: Build application
working-directory: ./sim
env:
NODE_OPTIONS: "--no-warnings"
NEXT_PUBLIC_APP_URL: "https://www.simstudio.ai"
STRIPE_SECRET_KEY: "dummy_key_for_ci_only"
STRIPE_WEBHOOK_SECRET: "dummy_secret_for_ci_only"
RESEND_API_KEY: "dummy_key_for_ci_only"
AWS_REGION: "us-west-2"
run: npm run build
NODE_OPTIONS: '--no-warnings'
NEXT_PUBLIC_APP_URL: 'https://www.simstudio.ai'
STRIPE_SECRET_KEY: 'dummy_key_for_ci_only'
STRIPE_WEBHOOK_SECRET: 'dummy_secret_for_ci_only'
RESEND_API_KEY: 'dummy_key_for_ci_only'
AWS_REGION: 'us-west-2'
run: npx turbo run build
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
directory: ./sim/coverage
directory: ./apps/sim/coverage
fail_ci_if_error: false
verbose: true
verbose: true
migrations:
name: Apply Database Migrations
@@ -64,20 +58,19 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: './sim/package-lock.json'
cache-dependency-path: './package-lock.json'
- name: Install dependencies
working-directory: ./sim
run: npm ci
- name: Apply migrations
working-directory: ./sim
working-directory: ./apps/sim
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: npx drizzle-kit push
run: npx drizzle-kit push

9
.gitignore vendored
View File

@@ -1,9 +1,10 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
*/node_modules
/node_modules
docs/node_modules
/packages/**/node_modules
scripts/node_modules
/.pnp
.pnp.*
.yarn/*
@@ -67,10 +68,10 @@ docs/.content-collections
# database instantiation
**/postgres_data/
# file uploads
uploads/
# collector configuration
collector-config.yaml
docker-compose.collector.yml
start-collector.sh
# Turborepo
.turbo

View File

@@ -3,19 +3,22 @@ FROM node:20-alpine
# Set working directory
WORKDIR /app
# Copy the entire sim directory
COPY sim/ ./
# Copy the entire monorepo
COPY . ./
# Create the .env file if it doesn't exist
RUN touch .env
RUN touch apps/sim/.env
# Install dependencies
# Install dependencies for the monorepo
RUN npm install
# Generate database schema
RUN npx drizzle-kit generate
# Install Turbo globally
RUN npm install -g turbo
# Generate database schema for sim app
RUN cd apps/sim && npx drizzle-kit generate
EXPOSE 3000
# Run migrations and start the app
CMD npx drizzle-kit push && npm run dev
CMD cd apps/sim && npx drizzle-kit push && cd ../.. && npm run dev

View File

@@ -1,5 +1,5 @@
<p align="center">
<img src="sim/public/static/sim.png" alt="Sim Studio Logo" width="500"/>
<img src="apps/sim/public/static/sim.png" alt="Sim Studio Logo" width="500"/>
</p>
<p align="center">
@@ -31,7 +31,7 @@ git clone https://github.com/YOUR_USERNAME/sim.git
cd sim
# Create environment file and update with required environment variables (BETTER_AUTH_SECRET)
cp sim/.env.example sim/.env
cp .env.example .env
# Start Sim Studio using the provided script
docker compose up -d --build
@@ -72,7 +72,7 @@ To use local models with Sim Studio, follow these steps:
```bash
# Run the ollama_docker.sh script to pull the required models
./sim/scripts/ollama_docker.sh pull <model_name>
./apps/sim/scripts/ollama_docker.sh pull <model_name>
```
2. **Start Sim Studio with Local Models**
@@ -111,7 +111,7 @@ services:
simstudio:
# ... existing configuration ...
extra_hosts:
- "host.docker.internal:host-gateway"
- 'host.docker.internal:host-gateway'
environment:
- OLLAMA_HOST=http://host.docker.internal:11434
```
@@ -122,7 +122,7 @@ services:
2. Install the [Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
3. Open the project in your editor
4. Click "Reopen in Container" when prompted
5. The environment will automatically be set up in the `sim` directory
5. The environment will automatically be set up
6. Run `npm run dev` in the terminal or use the `sim-start` alias
### Option 3: Manual Setup
@@ -132,7 +132,7 @@ services:
```bash
# Clone the repository
git clone https://github.com/YOUR_USERNAME/sim.git
cd sim/sim
cd sim
# Install dependencies
npm install
@@ -141,8 +141,7 @@ npm install
2. **Set Up Environment**
```bash
# Copy .env.example to .env
cp .env.example .env
cp .env.example .env # or create a new .env file
# Configure your .env file with the required environment variables:
# - Database connection (PostgreSQL)
@@ -150,6 +149,7 @@ cp .env.example .env
```
⚠️ **Important Notes:**
- If `RESEND_API_KEY` is not set, verification codes for login/signup will be logged to the console.
- You can use these logged codes for testing authentication locally.
- For production environments, you should set up a proper email provider.
@@ -158,6 +158,7 @@ cp .env.example .env
```bash
# Push the database schema
cd apps/sim
npx drizzle-kit push
```
@@ -165,6 +166,7 @@ npx drizzle-kit push
```bash
# Start the development server
cd ../..
npm run dev
```
@@ -179,6 +181,7 @@ npm run dev
- **State Management**: [Zustand](https://zustand-demo.pmnd.rs/)
- **Flow Editor**: [ReactFlow](https://reactflow.dev/)
- **Docs**: [Fumadocs](https://fumadocs.vercel.app/)
- **Monorepo**: [Turborepo](https://turborepo.org/)
## Contributing

47
apps/docs/.gitignore vendored Normal file
View File

@@ -0,0 +1,47 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions
# testing
/coverage
# next.js
/.next/
/out/
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# env files
.env
*.env
.env.local
.env.development
.env.test
.env.production
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
# Fumadocs
/.source/

View File

@@ -1,7 +1,7 @@
import type { ReactNode } from 'react'
import Link from 'next/link'
import { DocsLayout } from 'fumadocs-ui/layouts/docs'
import { GithubIcon, ExternalLink } from 'lucide-react'
import { ExternalLink, GithubIcon } from 'lucide-react'
import { source } from '@/lib/source'
const GitHubLink = () => (
@@ -23,9 +23,7 @@ export default function Layout({ children }: { children: ReactNode }) {
<DocsLayout
tree={source.pageTree}
nav={{
title: (
<div className="flex items-center font-medium">Sim Studio</div>
),
title: <div className="flex items-center font-medium">Sim Studio</div>,
}}
links={[
{

View File

@@ -1,18 +1,11 @@
import { notFound } from 'next/navigation'
import {
DocsBody,
DocsDescription,
DocsPage,
DocsTitle,
} from 'fumadocs-ui/page'
import { source } from '@/lib/source'
import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/page'
import mdxComponents from '@/components/mdx-components'
import { source } from '@/lib/source'
export const dynamic = 'force-static'
export default async function Page(props: {
params: Promise<{ slug?: string[] }>
}) {
export default async function Page(props: { params: Promise<{ slug?: string[] }> }) {
const params = await props.params
const page = source.getPage(params.slug)
if (!page) notFound()
@@ -53,9 +46,7 @@ export async function generateStaticParams() {
return source.generateParams()
}
export async function generateMetadata(props: {
params: Promise<{ slug?: string[] }>
}) {
export async function generateMetadata(props: { params: Promise<{ slug?: string[] }> }) {
const params = await props.params
const page = source.getPage(params.slug)
if (!page) notFound()

View File

@@ -2,17 +2,17 @@
@import 'fumadocs-ui/css/neutral.css';
@import 'fumadocs-ui/css/preset.css';
:root {
--color-fd-primary: #802FFF; /* Purple from control-bar component */
--color-fd-primary: #802fff; /* Purple from control-bar component */
}
/* Custom text highlighting styles */
.text-highlight {
color: var(--color-fd-primary);
color: var(--color-fd-primary);
}
/* Override marker color for highlighted lists */
.highlight-markers li::marker {
color: var(--color-fd-primary);
color: var(--color-fd-primary);
}
@source '../node_modules/fumadocs-ui/dist/**/*.js';

View File

@@ -18,4 +18,4 @@ export const baseOptions: BaseLayoutProps = {
</>
),
},
}
}

View File

@@ -4,7 +4,7 @@ import { ThemeImage } from './ui/theme-image'
// Extend the default MDX components with our custom components
const mdxComponents = {
...defaultMdxComponents,
ThemeImage
ThemeImage,
}
export default mdxComponents
export default mdxComponents

View File

@@ -3,22 +3,22 @@
import * as React from 'react'
interface BlockInfoCardProps {
type: string;
color: string;
icon?: boolean;
iconSvg?: string;
type: string
color: string
icon?: boolean
iconSvg?: string
}
export function BlockInfoCard({
type,
color,
export function BlockInfoCard({
type,
color,
icon = false,
iconSvg
iconSvg,
}: BlockInfoCardProps): React.ReactNode {
return (
<div className="mb-6 rounded-lg overflow-hidden border border-border">
<div className="flex items-center justify-center p-6">
<div
<div
className="h-20 w-20 rounded-lg flex items-center justify-center"
style={{ backgroundColor: color }}
>
@@ -41,4 +41,4 @@ export function BlockInfoCard({
)}
</div>
)
}
}

View File

@@ -20,14 +20,22 @@ const BlockFeature = ({
itemsPerRow: number
}) => {
const blockColor = {
'--block-color': title === 'Agent' ? '#8b5cf6' :
title === 'API' ? '#3b82f6' :
title === 'Condition' ? '#f59e0b' :
title === 'Function' ? '#10b981' :
title === 'Router' ? '#6366f1' :
title === 'Evaluator' ? '#ef4444' : '#8b5cf6'
'--block-color':
title === 'Agent'
? '#8b5cf6'
: title === 'API'
? '#3b82f6'
: title === 'Condition'
? '#f59e0b'
: title === 'Function'
? '#10b981'
: title === 'Router'
? '#6366f1'
: title === 'Evaluator'
? '#ef4444'
: '#8b5cf6',
} as React.CSSProperties
const content = (
<>
{index < itemsPerRow && (
@@ -36,13 +44,17 @@ const BlockFeature = ({
{index >= itemsPerRow && (
<div className="opacity-0 group-hover/feature:opacity-100 transition duration-200 absolute inset-0 h-full w-full bg-gradient-to-b from-neutral-100 dark:from-neutral-800 to-transparent pointer-events-none" />
)}
<div className="mb-4 relative z-10 px-10 text-neutral-500 group-hover/feature:text-[color:var(--block-color,#8b5cf6)] dark:text-neutral-400 dark:group-hover/feature:text-[color:var(--block-color,#a78bfa)] transition-colors duration-200"
<div
className="mb-4 relative z-10 px-10 text-neutral-500 group-hover/feature:text-[color:var(--block-color,#8b5cf6)] dark:text-neutral-400 dark:group-hover/feature:text-[color:var(--block-color,#a78bfa)] transition-colors duration-200"
style={blockColor}
>
{icon}
</div>
<div className="text-lg font-bold mb-2 relative z-10 px-10">
<div className="absolute left-0 inset-y-0 h-6 group-hover/feature:h-8 w-1 rounded-tr-full rounded-br-full bg-neutral-300 dark:bg-neutral-700 group-hover/feature:bg-[color:var(--block-color,#8b5cf6)] transition-all duration-200 origin-center" style={blockColor} />
<div
className="absolute left-0 inset-y-0 h-6 group-hover/feature:h-8 w-1 rounded-tr-full rounded-br-full bg-neutral-300 dark:bg-neutral-700 group-hover/feature:bg-[color:var(--block-color,#8b5cf6)] transition-all duration-200 origin-center"
style={blockColor}
/>
<span className="group-hover/feature:translate-x-2 transition duration-200 inline-block text-neutral-800 dark:text-neutral-100">
{title}
</span>

View File

@@ -1,10 +1,10 @@
import {
IconAdjustmentsBolt,
IconCloud,
IconHistory,
IconEaseInOut,
IconHeart,
IconHelp,
IconHistory,
IconRouteAltLeft,
IconTerminal2,
} from '@tabler/icons-react'
@@ -14,8 +14,7 @@ export function Features() {
const features = [
{
title: 'Multi-LLM Support',
description:
'Connect to any LLM provider including OpenAI, Anthropic, and more',
description: 'Connect to any LLM provider including OpenAI, Anthropic, and more',
icon: <IconCloud />,
},
{
@@ -88,9 +87,7 @@ export const Feature = ({
{index >= 4 && (
<div className="opacity-0 group-hover/feature:opacity-100 transition duration-200 absolute inset-0 h-full w-full bg-gradient-to-b from-neutral-100 dark:from-neutral-800 to-transparent pointer-events-none" />
)}
<div className="mb-4 relative z-10 px-10 text-neutral-600 dark:text-neutral-400">
{icon}
</div>
<div className="mb-4 relative z-10 px-10 text-neutral-600 dark:text-neutral-400">{icon}</div>
<div className="text-lg font-bold mb-2 relative z-10 px-10">
<div className="absolute left-0 inset-y-0 h-6 group-hover/feature:h-8 w-1 rounded-tr-full rounded-br-full bg-neutral-300 dark:bg-neutral-700 group-hover/feature:bg-purple-500 transition-all duration-200 origin-center" />
<span className="group-hover/feature:translate-x-2 transition duration-200 inline-block text-neutral-800 dark:text-neutral-100">

View File

@@ -1,8 +1,8 @@
'use client'
import { useTheme } from 'next-themes'
import Image from 'next/image'
import { useEffect, useState } from 'react'
import Image from 'next/image'
import { useTheme } from 'next-themes'
interface ThemeImageProps {
lightSrc: string
@@ -13,13 +13,13 @@ interface ThemeImageProps {
className?: string
}
export function ThemeImage({
lightSrc,
darkSrc,
alt,
width = 600,
export function ThemeImage({
lightSrc,
darkSrc,
alt,
width = 600,
height = 400,
className = 'rounded-lg border border-border my-6'
className = 'rounded-lg border border-border my-6',
}: ThemeImageProps) {
const { resolvedTheme } = useTheme()
const [imageSrc, setImageSrc] = useState(lightSrc)
@@ -42,13 +42,7 @@ export function ThemeImage({
return (
<div className="flex justify-center">
<Image
src={imageSrc}
alt={alt}
width={width}
height={height}
className={className}
/>
<Image src={imageSrc} alt={alt} width={width} height={height} className={className} />
</div>
)
}
}

View File

@@ -4,22 +4,23 @@ description: Create powerful AI agents using any LLM provider
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { ThemeImage } from '@/components/ui/theme-image'
The Agent block is a fundamental component in Sim Studio that allows you to create powerful AI agents using various LLM providers. These agents can process inputs based on customizable system prompts and utilize integrated tools to enhance their capabilities.
<ThemeImage
lightSrc="/static/light/agent-light.png"
darkSrc="/static/dark/agent-dark.png"
alt="Agent Block"
width={300}
height={175}
<ThemeImage
lightSrc="/static/light/agent-light.png"
darkSrc="/static/dark/agent-dark.png"
alt="Agent Block"
width={300}
height={175}
/>
<Callout type="info">
Agent blocks serve as interfaces to Large Language Models, enabling your workflow to leverage state-of-the-art AI capabilities.
Agent blocks serve as interfaces to Large Language Models, enabling your workflow to leverage
state-of-the-art AI capabilities.
</Callout>
## Overview
@@ -28,10 +29,12 @@ The Agent block serves as an interface to Large Language Models (LLMs), enabling
<Steps>
<Step>
<strong>Respond to user inputs</strong>: Generate natural language responses based on provided inputs
<strong>Respond to user inputs</strong>: Generate natural language responses based on provided
inputs
</Step>
<Step>
<strong>Follow instructions</strong>: Adhere to specific instructions defined in the system prompt
<strong>Follow instructions</strong>: Adhere to specific instructions defined in the system
prompt
</Step>
<Step>
<strong>Use specialized tools</strong>: Interact with integrated tools to extend capabilities
@@ -78,17 +81,28 @@ Control the creativity and randomness of responses:
<Tabs items={['Low (0-0.3)', 'Medium (0.3-0.7)', 'High (0.7-2.0)']}>
<Tab>
<p>More deterministic, focused responses. Best for factual tasks, customer support, and situations where accuracy is critical.</p>
<p>
More deterministic, focused responses. Best for factual tasks, customer support, and
situations where accuracy is critical.
</p>
</Tab>
<Tab>
<p>Balanced creativity and focus. Suitable for general purpose applications that require both accuracy and some creativity.</p>
<p>
Balanced creativity and focus. Suitable for general purpose applications that require both
accuracy and some creativity.
</p>
</Tab>
<Tab>
<p>More creative, varied responses. Ideal for creative writing, brainstorming, and generating diverse ideas.</p>
<p>
More creative, varied responses. Ideal for creative writing, brainstorming, and generating
diverse ideas.
</p>
</Tab>
</Tabs>
<p className="mt-4 text-sm text-gray-600 dark:text-gray-400">The temperature range (0-1 or 0-2) varies depending on the selected model.</p>
<p className="mt-4 text-sm text-gray-600 dark:text-gray-400">
The temperature range (0-1 or 0-2) varies depending on the selected model.
</p>
### API Key
@@ -102,12 +116,12 @@ Integrate specialized tools to enhance the agent's capabilities. You can add too
2. Selecting from the tools dropdown menu
3. Choosing an existing tool or creating a new one
<ThemeImage
lightSrc="/static/light/tooldropdown-light.png"
darkSrc="/static/dark/tooldropdown-dark.png"
alt="Tools Dropdown"
width={150}
height={125}
<ThemeImage
lightSrc="/static/light/tooldropdown-light.png"
darkSrc="/static/dark/tooldropdown-dark.png"
alt="Tools Dropdown"
width={150}
height={125}
/>
Available tools include:
@@ -122,7 +136,8 @@ Available tools include:
You can also create custom tools to meet specific requirements for your agent's capabilities.
<Callout type="info">
Tools significantly expand what your agent can do, allowing it to access external systems, retrieve information, and take actions beyond simple text generation.
Tools significantly expand what your agent can do, allowing it to access external systems,
retrieve information, and take actions beyond simple text generation.
</Callout>
### Response Format
@@ -133,20 +148,38 @@ Define a structured format for the agent's response when needed, using JSON or o
<Tabs items={['Inputs', 'Outputs']}>
<Tab>
<ul className="list-disc pl-6 space-y-2">
<li><strong>User Prompt</strong>: The user's query or context for the agent</li>
<li><strong>System Prompt</strong>: Instructions for the agent (optional)</li>
<li><strong>Tools</strong>: Optional tool connections that the agent can use</li>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>User Prompt</strong>: The user's query or context for the agent
</li>
<li>
<strong>System Prompt</strong>: Instructions for the agent (optional)
</li>
<li>
<strong>Tools</strong>: Optional tool connections that the agent can use
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc pl-6 space-y-2">
<li><strong>Content</strong>: The agent's response text</li>
<li><strong>Model</strong>: The model used for generation</li>
<li><strong>Tokens</strong>: Usage statistics (prompt, completion, total)</li>
<li><strong>Tool Calls</strong>: Details of any tools used during processing</li>
<li><strong>Cost</strong>: Cost of the response</li>
<li><strong>Usage</strong>: Usage statistics (prompt, completion, total)</li>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Content</strong>: The agent's response text
</li>
<li>
<strong>Model</strong>: The model used for generation
</li>
<li>
<strong>Tokens</strong>: Usage statistics (prompt, completion, total)
</li>
<li>
<strong>Tool Calls</strong>: Details of any tools used during processing
</li>
<li>
<strong>Cost</strong>: Cost of the response
</li>
<li>
<strong>Usage</strong>: Usage statistics (prompt, completion, total)
</li>
</ul>
</Tab>
</Tabs>
@@ -176,4 +209,4 @@ tools:
- **Be specific in system prompts**: Clearly define the agent's role, tone, and limitations. The more specific your instructions are, the better the agent will be able to fulfill its intended purpose.
- **Choose the right temperature setting**: Use lower temperature settings (0-0.3) when accuracy is important, or increase temperature (0.7-2.0) for more creative or varied responses
- **Combine with Evaluator blocks**: Use Evaluator blocks to assess agent responses and ensure quality. This allows you to create feedback loops and implement quality control measures.
- **Leverage tools effectively**: Integrate tools that complement the agent's purpose and enhance its capabilities. Be selective about which tools you provide to avoid overwhelming the agent.
- **Leverage tools effectively**: Integrate tools that complement the agent's purpose and enhance its capabilities. Be selective about which tools you provide to avoid overwhelming the agent.

View File

@@ -4,18 +4,18 @@ description: Connect to external services through API endpoints
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { ThemeImage } from '@/components/ui/theme-image'
The API block enables you to connect your workflow to external services through HTTP requests. It supports various methods like GET, POST, PUT, DELETE, and PATCH, allowing you to interact with virtually any API endpoint.
<ThemeImage
lightSrc="/static/light/api-light.png"
darkSrc="/static/dark/api-dark.png"
alt="API Block"
width={300}
height={175}
<ThemeImage
lightSrc="/static/light/api-light.png"
darkSrc="/static/dark/api-dark.png"
alt="API Block"
width={300}
height={175}
/>
## Overview
@@ -125,4 +125,4 @@ headers:
- **Handle errors gracefully**: Connect error handling logic for failed requests
- **Validate responses**: Check status codes and response formats before processing data
- **Respect rate limits**: Be mindful of API rate limits and implement appropriate throttling
- **Cache responses when appropriate**: For frequently accessed data that doesn't change often
- **Cache responses when appropriate**: For frequently accessed data that doesn't change often

View File

@@ -4,53 +4,54 @@ description: Create conditional logic and branching in your workflows
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Files, Folder, File } from 'fumadocs-ui/components/files'
import { File, Files, Folder } from 'fumadocs-ui/components/files'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { ThemeImage } from '@/components/ui/theme-image'
The Condition block allows you to branch your workflow execution path based on boolean expressions. It evaluates conditions and routes the workflow accordingly, enabling you to create dynamic, responsive workflows with different execution paths.
<ThemeImage
lightSrc="/static/light/condition-light.png"
darkSrc="/static/dark/condition-dark.png"
alt="Condition Block"
width={300}
height={175}
<ThemeImage
lightSrc="/static/light/condition-light.png"
darkSrc="/static/dark/condition-dark.png"
alt="Condition Block"
width={300}
height={175}
/>
<Callout>
Condition blocks enable deterministic decision-making without requiring an LLM, making them ideal for straightforward branching logic.
Condition blocks enable deterministic decision-making without requiring an LLM, making them ideal
for straightforward branching logic.
</Callout>
## Overview
The Condition block serves as a decision point in your workflow, enabling:
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 my-6">
<div className="border border-gray-200 dark:border-gray-800 rounded-lg p-4">
<h3 className="font-medium text-lg mb-2">Branching Logic</h3>
<div className="my-6 grid grid-cols-1 gap-4 md:grid-cols-2">
<div className="rounded-lg border border-gray-200 p-4 dark:border-gray-800">
<h3 className="mb-2 text-lg font-medium">Branching Logic</h3>
<div className="text-sm text-gray-600 dark:text-gray-400">
Create different execution paths based on specific conditions
</div>
</div>
<div className="border border-gray-200 dark:border-gray-800 rounded-lg p-4">
<h3 className="font-medium text-lg mb-2">Rule-Based Routing</h3>
<div className="rounded-lg border border-gray-200 p-4 dark:border-gray-800">
<h3 className="mb-2 text-lg font-medium">Rule-Based Routing</h3>
<div className="text-sm text-gray-600 dark:text-gray-400">
Route workflows deterministically without needing an LLM
</div>
</div>
<div className="border border-gray-200 dark:border-gray-800 rounded-lg p-4">
<h3 className="font-medium text-lg mb-2">Data-Driven Decisions</h3>
<div className="rounded-lg border border-gray-200 p-4 dark:border-gray-800">
<h3 className="mb-2 text-lg font-medium">Data-Driven Decisions</h3>
<div className="text-sm text-gray-600 dark:text-gray-400">
Create workflow paths based on structured data values
</div>
</div>
<div className="border border-gray-200 dark:border-gray-800 rounded-lg p-4">
<h3 className="font-medium text-lg mb-2">If-Then-Else Logic</h3>
<div className="rounded-lg border border-gray-200 p-4 dark:border-gray-800">
<h3 className="mb-2 text-lg font-medium">If-Then-Else Logic</h3>
<div className="text-sm text-gray-600 dark:text-gray-400">
Implement conditional programming paradigms in your workflows
</div>
@@ -117,17 +118,29 @@ Conditions use JavaScript syntax and can reference input values from previous bl
<Tabs items={['Inputs', 'Outputs']}>
<Tab>
<ul className="list-disc pl-6 space-y-2">
<li><strong>Variables</strong>: Values from previous blocks that can be referenced in conditions</li>
<li><strong>Conditions</strong>: Boolean expressions to evaluate</li>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Variables</strong>: Values from previous blocks that can be referenced in conditions
</li>
<li>
<strong>Conditions</strong>: Boolean expressions to evaluate
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc pl-6 space-y-2">
<li><strong>Content</strong>: A description of the evaluation result</li>
<li><strong>Condition Result</strong>: The boolean result of the condition evaluation</li>
<li><strong>Selected Path</strong>: Details of the chosen routing destination</li>
<li><strong>Selected Condition ID</strong>: Identifier of the condition that was matched</li>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Content</strong>: A description of the evaluation result
</li>
<li>
<strong>Condition Result</strong>: The boolean result of the condition evaluation
</li>
<li>
<strong>Selected Path</strong>: Details of the chosen routing destination
</li>
<li>
<strong>Selected Condition ID</strong>: Identifier of the condition that was matched
</li>
</ul>
</Tab>
</Tabs>
@@ -139,20 +152,20 @@ Here's an example of how a Condition block might be used in a customer satisfact
```yaml
# Example Condition Configuration
conditions:
- id: "high_satisfaction"
expression: "input.satisfactionScore >= 8"
description: "Customer is highly satisfied"
path: "positive_feedback_block"
- id: "medium_satisfaction"
expression: "input.satisfactionScore >= 5"
description: "Customer is moderately satisfied"
path: "neutral_feedback_block"
- id: "default"
expression: "true"
description: "Customer is not satisfied"
path: "improvement_feedback_block"
- id: 'high_satisfaction'
expression: 'input.satisfactionScore >= 8'
description: 'Customer is highly satisfied'
path: 'positive_feedback_block'
- id: 'medium_satisfaction'
expression: 'input.satisfactionScore >= 5'
description: 'Customer is moderately satisfied'
path: 'neutral_feedback_block'
- id: 'default'
expression: 'true'
description: 'Customer is not satisfied'
path: 'improvement_feedback_block'
```
## Best Practices
@@ -175,4 +188,4 @@ Add descriptions to explain the purpose of each condition. This helps other team
### Test edge cases
Ensure your conditions handle boundary values correctly. Test with values at the edges of your condition ranges to verify correct behavior.
Ensure your conditions handle boundary values correctly. Test with values at the edges of your condition ranges to verify correct behavior.

View File

@@ -4,18 +4,18 @@ description: Assess content quality using customizable evaluation metrics
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { ThemeImage } from '@/components/ui/theme-image'
The Evaluator block allows you to assess the quality of content using customizable evaluation metrics. This is particularly useful for evaluating AI-generated text, ensuring outputs meet specific criteria, and building quality-control mechanisms into your workflows.
<ThemeImage
lightSrc="/static/light/evaluator-light.png"
darkSrc="/static/dark/evaluator-dark.png"
alt="Evaluator Block"
width={300}
height={175}
<ThemeImage
lightSrc="/static/light/evaluator-light.png"
darkSrc="/static/dark/evaluator-dark.png"
alt="Evaluator Block"
width={300}
height={175}
/>
## Overview
@@ -102,7 +102,7 @@ Here's an example of how an Evaluator block might be configured for assessing cu
metrics:
- name: Empathy
description: How well does the response acknowledge and address the customer's emotional state?
range:
range:
min: 1
max: 5
- name: Solution
@@ -125,4 +125,4 @@ model: Anthropic/claude-3-opus
- **Choose appropriate ranges**: Select scoring ranges that provide enough granularity without being overly complex
- **Connect with Agent blocks**: Use Evaluator blocks to assess Agent block outputs and create feedback loops
- **Use consistent metrics**: For comparative analysis, maintain consistent metrics across similar evaluations
- **Combine multiple metrics**: Use several metrics to get a comprehensive evaluation
- **Combine multiple metrics**: Use several metrics to get a comprehensive evaluation

View File

@@ -4,18 +4,18 @@ description: Execute custom JavaScript or TypeScript code in your workflows
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { ThemeImage } from '@/components/ui/theme-image'
The Function block allows you to write and execute custom JavaScript or TypeScript code directly within your workflow. This powerful feature enables you to implement complex logic, data transformations, and integration with external libraries.
<ThemeImage
lightSrc="/static/light/function-light.png"
darkSrc="/static/dark/function-dark.png"
alt="Function Block"
width={300}
height={175}
<ThemeImage
lightSrc="/static/light/function-light.png"
darkSrc="/static/dark/function-dark.png"
alt="Function Block"
width={300}
height={175}
/>
## Overview
@@ -134,4 +134,4 @@ return {
- **Handle errors gracefully**: Use try/catch blocks to handle potential errors
- **Document your code**: Add comments to explain complex logic
- **Test edge cases**: Ensure your code handles unusual inputs correctly
- **Optimize for performance**: Be mindful of computational complexity for large datasets
- **Optimize for performance**: Be mindful of computational complexity for large datasets

View File

@@ -4,8 +4,8 @@ description: Building blocks for your agentic workflows
---
import { Card, Cards } from 'fumadocs-ui/components/card'
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { BlockTypes } from '@/components/ui/block-types'
Blocks are the fundamental building components of Sim Studio workflows. Each block has a specific purpose and can be connected to other blocks to create sophisticated workflows.
@@ -26,13 +26,16 @@ Blocks can be connected to form a directed graph representing your workflow. Eac
<Steps>
<Step>
<strong>Outputs to Inputs</strong>: A block's outputs can be connected to another block's inputs.
<strong>Outputs to Inputs</strong>: A block's outputs can be connected to another block's
inputs.
</Step>
<Step>
<strong>Multiple Connections</strong>: A block can have multiple incoming and outgoing connections.
<strong>Multiple Connections</strong>: A block can have multiple incoming and outgoing
connections.
</Step>
<Step>
<strong>Conditional Flows</strong>: Some blocks (like Router and Condition) can have multiple output paths based on conditions.
<strong>Conditional Flows</strong>: Some blocks (like Router and Condition) can have multiple
output paths based on conditions.
</Step>
</Steps>
@@ -48,4 +51,4 @@ Each block type has its own configuration options allowing you to customize its
- **Retry policies**: Configure how the block handles failures
- **Error handling behavior**: Define how errors are managed and reported
See the specific documentation for each block type to learn about its configuration options.
See the specific documentation for each block type to learn about its configuration options.

View File

@@ -4,19 +4,18 @@ description: Route workflow execution based on specific conditions or logic
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { ThemeImage } from '@/components/ui/theme-image'
The Router block is a powerful component in Sim Studio that intelligently routes workflow execution based on content analysis, user input, or predefined conditions. It acts as a decision-making junction in your workflow, directing the flow to different paths based on various criteria.
<ThemeImage
lightSrc="/static/light/router-light.png"
darkSrc="/static/dark/router-dark.png"
alt="Router Block"
width={300}
height={175}
<ThemeImage
lightSrc="/static/light/router-light.png"
darkSrc="/static/dark/router-dark.png"
alt="Router Block"
width={300}
height={175}
/>
## Overview
@@ -104,6 +103,7 @@ model: OpenAI/gpt-4
```
In this example, the Router might be connected to:
- A product support block
- A billing inquiries block
- A technical support block
@@ -117,4 +117,4 @@ Based on the user's query, the Router would analyze the content and direct it to
- **Use specific routing criteria**: Define clear conditions for selecting each path
- **Consider fallback paths**: Connect a default destination for when no specific path is appropriate
- **Test with diverse inputs**: Ensure the Router handles various input types correctly
- **Review routing decisions**: Monitor the Router's performance and refine as needed
- **Review routing decisions**: Monitor the Router's performance and refine as needed

View File

@@ -4,7 +4,7 @@ description: Techniques for accessing and manipulating data from connected block
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Files, Folder, File } from 'fumadocs-ui/components/files'
import { File, Files, Folder } from 'fumadocs-ui/components/files'
Once blocks are connected, you can access data from source blocks in destination blocks using connection tags and various data access techniques.
@@ -130,7 +130,8 @@ return { message };
It's important to handle cases where connected data might be missing or null:
<Callout type="warning">
Always validate connected data before using it, especially when accessing nested properties or array elements.
Always validate connected data before using it, especially when accessing nested properties or
array elements.
</Callout>
### Default Values
@@ -138,9 +139,9 @@ It's important to handle cases where connected data might be missing or null:
In Function blocks, you can provide default values for missing data:
```javascript
const userName = input.userBlock?.name || 'Guest';
const items = input.orderBlock?.items || [];
const total = input.orderBlock?.total ?? 0;
const userName = input.userBlock?.name || 'Guest'
const items = input.orderBlock?.items || []
const total = input.orderBlock?.total ?? 0
```
### Conditional Checks
@@ -148,9 +149,9 @@ const total = input.orderBlock?.total ?? 0;
Check if data exists before accessing nested properties:
```javascript
let userEmail = 'No email provided';
let userEmail = 'No email provided'
if (input.userBlock && input.userBlock.contact && input.userBlock.contact.email) {
userEmail = input.userBlock.contact.email;
userEmail = input.userBlock.contact.email
}
```
@@ -159,8 +160,8 @@ if (input.userBlock && input.userBlock.contact && input.userBlock.contact.email)
In Function blocks, use optional chaining to safely access nested properties:
```javascript
const userCity = input.userBlock?.address?.city;
const firstItemName = input.orderBlock?.items?.[0]?.name;
const userCity = input.userBlock?.address?.city
const firstItemName = input.orderBlock?.items?.[0]?.name
```
## Debugging Connection Data
@@ -175,15 +176,15 @@ When troubleshooting connection issues, these techniques can help:
```javascript
// Example debugging function
function debugConnections() {
console.log('All inputs:', input);
console.log('User data type:', typeof input.userBlock);
console.log('Order items:', input.orderBlock?.items);
console.log('All inputs:', input)
console.log('User data type:', typeof input.userBlock)
console.log('Order items:', input.orderBlock?.items)
return {
debug: true,
allInputs: input,
userExists: !!input.userBlock,
orderItemCount: input.orderBlock?.items?.length || 0
};
orderItemCount: input.orderBlock?.items?.length || 0,
}
}
```
```

View File

@@ -4,21 +4,23 @@ description: Learn how connections work in Sim Studio
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Step, Steps } from 'fumadocs-ui/components/steps'
## How Connections Work
Connections are the pathways that allow data to flow between blocks in your workflow. When you connect two blocks in Sim Studio, you're establishing a data flow relationship that defines how information passes from one block to another.
<Callout type="info">
Each connection represents a directed relationship where data flows from a source block's output to a destination block's input.
Each connection represents a directed relationship where data flows from a source block's output
to a destination block's input.
</Callout>
### Creating Connections
<Steps>
<Step>
<strong>Select Source Block</strong>: Click on the output port of the block you want to connect from
<strong>Select Source Block</strong>: Click on the output port of the block you want to connect
from
</Step>
<Step>
<strong>Draw Connection</strong>: Drag to the input port of the destination block
@@ -59,7 +61,8 @@ You can manage your connections in several ways:
- **Disable**: Temporarily disable a connection without deleting it
<Callout type="warning">
Deleting a connection will immediately stop data flow between the blocks. Make sure this is intended before removing connections.
Deleting a connection will immediately stop data flow between the blocks. Make sure this is
intended before removing connections.
</Callout>
## Connection Compatibility
@@ -70,4 +73,4 @@ Not all blocks can be connected to each other. Compatibility depends on:
2. **Block Restrictions**: Some blocks may have restrictions on what they can connect to
3. **Workflow Logic**: Connections must make logical sense in the context of your workflow
The editor will indicate when connections are invalid or incompatible.
The editor will indicate when connections are invalid or incompatible.

View File

@@ -4,7 +4,7 @@ description: Recommended patterns for effective connection management
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Step, Steps } from 'fumadocs-ui/components/steps'
## Workflow Organization
@@ -18,7 +18,8 @@ Keep your workflow clean and understandable by organizing connections logically:
- **Label complex connections** with descriptive names
<Callout type="info">
A well-organized workflow is easier to understand, debug, and maintain. Take time to arrange your blocks and connections in a logical manner.
A well-organized workflow is easier to understand, debug, and maintain. Take time to arrange your
blocks and connections in a logical manner.
</Callout>
### Connection Naming Conventions
@@ -27,13 +28,16 @@ When working with multiple connections, consistent naming helps maintain clarity
<Steps>
<Step>
<strong>Use descriptive block names</strong>: Name blocks based on their function (e.g., "UserDataFetcher", "ResponseGenerator")
<strong>Use descriptive block names</strong>: Name blocks based on their function (e.g.,
"UserDataFetcher", "ResponseGenerator")
</Step>
<Step>
<strong>Be specific with connection references</strong>: Use clear variable names when referencing connections in code
<strong>Be specific with connection references</strong>: Use clear variable names when
referencing connections in code
</Step>
<Step>
<strong>Document complex connections</strong>: Add comments explaining non-obvious data transformations
<strong>Document complex connections</strong>: Add comments explaining non-obvious data
transformations
</Step>
</Steps>
@@ -53,23 +57,23 @@ Ensure that the data being passed between blocks is compatible:
function processUserData() {
// Validate required fields
if (!input.userBlock || !input.userBlock.id) {
return { error: "Missing user data", valid: false };
return { error: 'Missing user data', valid: false }
}
// Transform and validate data types
const userId = String(input.userBlock.id);
const userName = input.userBlock.name || "Unknown User";
const userScore = Number(input.userBlock.score) || 0;
const userId = String(input.userBlock.id)
const userName = input.userBlock.name || 'Unknown User'
const userScore = Number(input.userBlock.score) || 0
return {
valid: true,
user: {
id: userId,
name: userName,
score: userScore,
isHighScore: userScore > 100
}
};
isHighScore: userScore > 100,
},
}
}
```
@@ -89,11 +93,11 @@ Add comments or descriptions to clarify the purpose of connections, especially i
* This function processes user data from the UserFetcher block
* and order history from the OrderHistory block to generate
* personalized product recommendations.
*
*
* Input:
* - userBlock: User profile data (id, preferences, history)
* - orderBlock: Recent order history (items, dates, amounts)
*
*
* Output:
* - recommendations: Array of recommended product IDs
* - userSegment: Calculated user segment for marketing
@@ -118,28 +122,28 @@ Verify that connection references work as expected:
```javascript
// Example: Testing connection references with edge cases
function testConnections() {
console.log("Testing connections...");
console.log('Testing connections...')
// Log all inputs for debugging
console.log("All inputs:", JSON.stringify(input, null, 2));
console.log('All inputs:', JSON.stringify(input, null, 2))
// Test for missing data
const hasUserData = !!input.userBlock;
console.log("Has user data:", hasUserData);
const hasUserData = !!input.userBlock
console.log('Has user data:', hasUserData)
// Test edge cases
const items = input.orderBlock?.items || [];
console.log("Item count:", items.length);
console.log("Empty items test:", items.length === 0 ? "Passed" : "Failed");
const items = input.orderBlock?.items || []
console.log('Item count:', items.length)
console.log('Empty items test:', items.length === 0 ? 'Passed' : 'Failed')
// Return test results
return {
tests: {
hasUserData,
hasItems: items.length > 0,
hasLargeOrder: items.length > 10
}
};
hasLargeOrder: items.length > 10,
},
}
}
```
@@ -157,15 +161,15 @@ Keep your workflows efficient by optimizing how data flows through connections:
```javascript
// Example: Optimizing data flow by filtering
function optimizeUserData() {
const userData = input.userBlock;
const userData = input.userBlock
// Only pass necessary fields to downstream blocks
return {
id: userData.id,
name: userData.name,
email: userData.email,
// Filter out unnecessary profile data, history, etc.
};
}
}
```
@@ -181,7 +185,8 @@ Protect sensitive information when using connections:
- **Use secure connections** for external API calls
<Callout type="warning">
Be careful when logging connection data that might contain sensitive information. Always redact or mask sensitive fields like passwords, API keys, or personal information.
Be careful when logging connection data that might contain sensitive information. Always redact or
mask sensitive fields like passwords, API keys, or personal information.
</Callout>
## Advanced Patterns
@@ -200,4 +205,4 @@ Create more sophisticated workflows with feedback connections:
- **Implement iterative processing** by connecting later blocks back to earlier ones
- **Use Memory blocks** to store state between iterations
- **Set termination conditions** to prevent infinite loops
- **Set termination conditions** to prevent infinite loops

View File

@@ -3,13 +3,14 @@ title: Connection Data Structure
description: Understanding the data structure of different block outputs
---
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Callout } from 'fumadocs-ui/components/callout'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
When you connect blocks, the output data structure from the source block determines what values are available in the destination block. Each block type produces a specific output structure that you can reference in downstream blocks.
<Callout type="info">
Understanding these data structures is essential for effectively using connection tags and accessing the right data in your workflows.
Understanding these data structures is essential for effectively using connection tags and
accessing the right data in your workflows.
</Callout>
## Block Output Structures
@@ -44,6 +45,7 @@ Different block types produce different output structures. Here's what you can e
- **toolCalls**: Array of tool calls made by the agent (if any)
- **cost**: Array of cost objects for each tool call (if any)
- **usage**: Token usage statistics for the entire response
</Tab>
<Tab>
```json
@@ -62,6 +64,7 @@ Different block types produce different output structures. Here's what you can e
- **data**: The response data from the API (can be any type)
- **status**: HTTP status code of the response
- **headers**: HTTP headers returned by the API
</Tab>
<Tab>
```json
@@ -77,6 +80,7 @@ Different block types produce different output structures. Here's what you can e
- **result**: The return value of the function (can be any type)
- **stdout**: Console output captured during function execution
- **executionTime**: Time taken to execute the function (in milliseconds)
</Tab>
<Tab>
```json
@@ -100,6 +104,7 @@ Different block types produce different output structures. Here's what you can e
- **model**: The AI model used for evaluation
- **tokens**: Token usage statistics
- **[metricName]**: Score for each metric defined in the evaluator (dynamic fields)
</Tab>
<Tab>
```json
@@ -124,6 +129,7 @@ Different block types produce different output structures. Here's what you can e
- **blockType**: Type of the next block
- **blockTitle**: Title of the next block
- **selectedConditionId**: ID of the selected condition
</Tab>
<Tab>
```json
@@ -152,6 +158,7 @@ Different block types produce different output structures. Here's what you can e
- **blockId**: ID of the selected destination block
- **blockType**: Type of the selected block
- **blockTitle**: Title of the selected block
</Tab>
</Tabs>
@@ -166,7 +173,8 @@ Some blocks may produce custom output structures based on their configuration:
3. **API Blocks**: The `data` field will contain whatever the API returns, which could be any valid JSON structure.
<Callout type="warning">
Always check the actual output structure of your blocks during development to ensure you're referencing the correct fields in your connections.
Always check the actual output structure of your blocks during development to ensure you're
referencing the correct fields in your connections.
</Callout>
## Nested Data Structures
@@ -178,6 +186,7 @@ Many block outputs contain nested data structures. You can access these using do
```
For example:
- `<agent1.tokens.total>` - Access the total tokens from an Agent block
- `<api1.data.results[0].id>` - Access the ID of the first result from an API response
- `<function1.result.calculations.total>` - Access a nested field in a Function block's result
- `<function1.result.calculations.total>` - Access a nested field in a Function block's result

View File

@@ -3,26 +3,19 @@ title: Connections
description: Connect your blocks to one another.
---
import { Card, Cards } from 'fumadocs-ui/components/card'
import { Callout } from 'fumadocs-ui/components/callout'
import { Card, Cards } from 'fumadocs-ui/components/card'
import { ConnectIcon } from '@/components/icons'
Connections are the pathways that allow data to flow between blocks in your workflow. They define how information is passed from one block to another, enabling you to create sophisticated, multi-step processes.
<Callout type="info">
Properly configured connections are essential for creating effective workflows. They determine how data moves through your system and how blocks interact with each other.
Properly configured connections are essential for creating effective workflows. They determine how
data moves through your system and how blocks interact with each other.
</Callout>
<div>
<video
autoPlay
loop
muted
playsInline
className="w-full"
src="/connections.mp4"
>
</video>
<video autoPlay loop muted playsInline className="w-full" src="/connections.mp4"></video>
</div>
## Connection Types
@@ -46,4 +39,3 @@ Sim Studio supports different types of connections that enable various workflow
Follow recommended patterns for effective connection management
</Card>
</Cards>

View File

@@ -1,4 +1,4 @@
{
"title": "Connections",
"pages": ["basics", "tags", "data-structure", "accessing-data", "best-practices"]
}
}

View File

@@ -8,15 +8,7 @@ import { Callout } from 'fumadocs-ui/components/callout'
Connection tags are visual representations of the data available from connected blocks. They provide an easy way to reference outputs from previous blocks in your workflow.
<div>
<video
autoPlay
loop
muted
playsInline
className="w-full"
src="/connections.mp4"
>
</video>
<video autoPlay loop muted playsInline className="w-full" src="/connections.mp4"></video>
</div>
### What Are Connection Tags?
@@ -28,35 +20,40 @@ Connection tags are interactive elements that appear when blocks are connected.
- Create dynamic data flows between blocks
<Callout type="info">
Connection tags make it easy to see what data is available from previous blocks and use it in your current block without having to remember complex data structures.
Connection tags make it easy to see what data is available from previous blocks and use it in your
current block without having to remember complex data structures.
</Callout>
## Using Connection Tags
There are two primary ways to use connection tags in your workflows:
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 my-6">
<div className="border border-gray-200 dark:border-gray-800 rounded-lg p-4">
<h3 className="font-medium text-lg mb-2">Drag and Drop</h3>
<div className="my-6 grid grid-cols-1 gap-4 md:grid-cols-2">
<div className="rounded-lg border border-gray-200 p-4 dark:border-gray-800">
<h3 className="mb-2 text-lg font-medium">Drag and Drop</h3>
<div className="text-sm text-gray-600 dark:text-gray-400">
Click on a connection tag and drag it into input fields of destination blocks. A dropdown will appear showing available values.
Click on a connection tag and drag it into input fields of destination blocks. A dropdown will
appear showing available values.
</div>
<ol className="mt-2 text-sm text-gray-600 dark:text-gray-400 list-decimal pl-5">
<ol className="mt-2 list-decimal pl-5 text-sm text-gray-600 dark:text-gray-400">
<li>Hover over a connection tag to see available data</li>
<li>Click and drag the tag to an input field</li>
<li>Select the specific data field from the dropdown</li>
<li>The reference is inserted automatically</li>
</ol>
</div>
<div className="border border-gray-200 dark:border-gray-800 rounded-lg p-4">
<h3 className="font-medium text-lg mb-2">Angle Bracket Syntax</h3>
<div className="rounded-lg border border-gray-200 p-4 dark:border-gray-800">
<h3 className="mb-2 text-lg font-medium">Angle Bracket Syntax</h3>
<div className="text-sm text-gray-600 dark:text-gray-400">
Type <code>&lt;&gt;</code> in input fields to see a dropdown of available connection values from previous blocks.
Type <code>&lt;&gt;</code> in input fields to see a dropdown of available connection values
from previous blocks.
</div>
<ol className="mt-2 text-sm text-gray-600 dark:text-gray-400 list-decimal pl-5">
<ol className="mt-2 list-decimal pl-5 text-sm text-gray-600 dark:text-gray-400">
<li>Click in any input field where you want to use connected data</li>
<li>Type <code>&lt;&gt;</code> to trigger the connection dropdown</li>
<li>
Type <code>&lt;&gt;</code> to trigger the connection dropdown
</li>
<li>Browse and select the data you want to reference</li>
<li>Continue typing or select from the dropdown to complete the reference</li>
</ol>
@@ -72,10 +69,12 @@ Connection tags use a simple syntax to reference data:
```
Where:
- `blockId` is the identifier of the source block
- `path.to.data` is the path to the specific data field
For example:
- `<agent1.content>` - References the content field from a block with ID "agent1"
- `<api2.data.users[0].name>` - References the name of the first user in the users array from the data field of a block with ID "api2"
@@ -105,5 +104,6 @@ const total = <apiBlock.data.total> * 1.1; // Add 10% tax
```
<Callout type="warning">
When using connection tags in numeric contexts, make sure the referenced data is actually a number to avoid type conversion issues.
</Callout>
When using connection tags in numeric contexts, make sure the referenced data is actually a number
to avoid type conversion issues.
</Callout>

View File

@@ -3,9 +3,9 @@ title: Advanced Execution Features
description: Master advanced execution capabilities in Sim Studio
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion'
import { Callout } from 'fumadocs-ui/components/callout'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
Sim Studio provides several advanced features that give you more control over workflow execution, error handling, and performance optimization.
@@ -26,8 +26,8 @@ try {
} catch (error) {
// Handle the error gracefully
console.error("Failed to parse JSON:", error.message);
return {
success: false,
return {
success: false,
error: error.message,
fallbackData: { status: "error", message: "Could not process data" }
};
@@ -44,7 +44,8 @@ Comprehensive error information is captured in the execution logs:
- **Timestamps**: When the error occurred
<Callout type="info">
Error logs are invaluable for debugging workflows. Always check the logs first when troubleshooting execution issues.
Error logs are invaluable for debugging workflows. Always check the logs first when
troubleshooting execution issues.
</Callout>
### Fallback Mechanisms
@@ -72,40 +73,21 @@ Environment variables provide a secure way to store and access configuration val
<Tabs items={['API Keys', 'Configuration Values', 'Secrets']}>
<Tab>
Store API credentials securely:
```
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-...
GOOGLE_API_KEY=AIza...
```
These are automatically available to blocks that need them, without hardcoding sensitive values in your workflow.
Store API credentials securely: ``` OPENAI_API_KEY=sk-... ANTHROPIC_API_KEY=sk-...
GOOGLE_API_KEY=AIza... ``` These are automatically available to blocks that need them, without
hardcoding sensitive values in your workflow.
</Tab>
<Tab>
Manage environment-specific configuration: ``` MAX_RETRIES=3 DEFAULT_MODEL=gpt-4o LOG_LEVEL=info
BASE_URL=https://api.example.com ``` These values can be referenced in blocks to control behavior
without modifying the workflow itself.
</Tab>
<Tab>
Manage environment-specific configuration:
```
MAX_RETRIES=3
DEFAULT_MODEL=gpt-4o
LOG_LEVEL=info
BASE_URL=https://api.example.com
```
These values can be referenced in blocks to control behavior without modifying the workflow itself.
</Tab>
<Tab>
Store sensitive information securely:
```
DATABASE_PASSWORD=...
JWT_SECRET=...
ENCRYPTION_KEY=...
```
These values are encrypted at rest and only decrypted during execution, providing an extra layer of security.
Store sensitive information securely: ``` DATABASE_PASSWORD=... JWT_SECRET=...
ENCRYPTION_KEY=... ``` These values are encrypted at rest and only decrypted during execution,
providing an extra layer of security.
</Tab>
</Tabs>
@@ -115,8 +97,8 @@ Environment variables can be accessed in different ways depending on the block t
```javascript
// In Function blocks
const apiKey = process.env.MY_API_KEY;
const maxRetries = parseInt(process.env.MAX_RETRIES || "3");
const apiKey = process.env.MY_API_KEY
const maxRetries = parseInt(process.env.MAX_RETRIES || '3')
// In API blocks (via connection tags)
// URL: https://api.example.com?key=<env.MY_API_KEY>
@@ -126,7 +108,8 @@ const maxRetries = parseInt(process.env.MAX_RETRIES || "3");
```
<Callout type="warning">
Never hardcode sensitive information like API keys directly in your workflows. Always use environment variables instead.
Never hardcode sensitive information like API keys directly in your workflows. Always use
environment variables instead.
</Callout>
## Real-Time Monitoring
@@ -135,19 +118,28 @@ Sim Studio provides powerful real-time monitoring capabilities:
<Accordions>
<Accordion title="Active Block Indicator">
The currently executing block is highlighted in the workflow editor, making it easy to follow the execution flow in real-time. This visual indicator helps you understand exactly where in your workflow the execution is currently happening.
The currently executing block is highlighted in the workflow editor, making it easy to follow
the execution flow in real-time. This visual indicator helps you understand exactly where in
your workflow the execution is currently happening.
</Accordion>
<Accordion title="Live Logs Panel">
Execution logs appear in real-time in the logs panel on the right side. These logs include detailed information about each block's execution, including inputs, outputs, execution time, and any errors that occur. You can use these logs to debug your workflow and understand how data flows between blocks.
</Accordion>
<Accordion title="Block States">
Each block's state (pending, executing, completed, or error) is visually indicated in the workflow editor. This helps you quickly identify which blocks have executed successfully and which may have encountered issues.
</Accordion>
<Accordion title="Live Logs Panel">
Execution logs appear in real-time in the logs panel on the right side. These logs include
detailed information about each block's execution, including inputs, outputs, execution time, and
any errors that occur. You can use these logs to debug your workflow and understand how data flows
between blocks.
</Accordion>
<Accordion title="Block States">
Each block's state (pending, executing, completed, or error) is visually indicated in the workflow
editor. This helps you quickly identify which blocks have executed successfully and which may have
encountered issues.
</Accordion>
<Accordion title="Performance Metrics">
Detailed timing information shows how long each block takes to execute, helping you identify performance bottlenecks in your workflow. The execution engine tracks start time, end time, and total duration for both individual blocks and the entire workflow.
Detailed timing information shows how long each block takes to execute, helping you identify
performance bottlenecks in your workflow. The execution engine tracks start time, end time, and
total duration for both individual blocks and the entire workflow.
</Accordion>
</Accordions>
@@ -177,7 +169,8 @@ Optimize your workflows for better performance:
- **Monitor Resource Usage**: Keep an eye on memory and CPU usage
<Callout type="info">
Performance optimization is especially important for workflows that run frequently or process large amounts of data.
Performance optimization is especially important for workflows that run frequently or process
large amounts of data.
</Callout>
## Advanced Execution Context
@@ -193,22 +186,22 @@ The execution context maintains detailed information about the workflow executio
"block-2": { output: { data: { ... } }, status: "completed" },
"block-3": { status: "pending" }
},
// Active execution path
activeExecutionPath: Set(["block-1", "block-2", "block-5"]),
// Routing decisions
decisions: {
router: Map(["router-1" => "block-5"]),
condition: Map(["condition-1" => "condition-true"])
},
// Loop iterations
loopIterations: Map(["loop-1" => 2]),
// Environment variables
env: { "API_KEY": "...", "MAX_RETRIES": "3" },
// Execution logs
logs: [
{ blockId: "block-1", timestamp: "...", status: "completed", duration: 120 },
@@ -228,9 +221,9 @@ Advanced techniques for debugging workflow execution:
Add strategic console.log statements in Function blocks:
```javascript
console.log("Input to processData:", JSON.stringify(input, null, 2));
console.log("Processing step 1 complete:", intermediateResult);
console.log("Final result:", finalResult);
console.log('Input to processData:', JSON.stringify(input, null, 2))
console.log('Processing step 1 complete:', intermediateResult)
console.log('Final result:', finalResult)
```
### State Inspection
@@ -240,18 +233,18 @@ Use Function blocks to inspect the current state:
```javascript
function debugState() {
// Log all inputs
console.log("All inputs:", input);
console.log('All inputs:', input)
// Return a debug object with relevant information
return {
debug: true,
inputSummary: {
hasUserData: !!input.userBlock,
apiStatus: input.apiBlock?.status,
itemCount: input.dataBlock?.items?.length || 0
itemCount: input.dataBlock?.items?.length || 0,
},
timestamp: new Date().toISOString()
};
timestamp: new Date().toISOString(),
}
}
```
@@ -269,19 +262,19 @@ Identify performance bottlenecks:
```javascript
function profileOperation() {
const start = performance.now();
const start = performance.now()
// Perform the operation
const result = performExpensiveOperation();
const end = performance.now();
console.log(`Operation took ${end - start}ms`);
const result = performExpensiveOperation()
const end = performance.now()
console.log(`Operation took ${end - start}ms`)
return {
result,
executionTime: end - start
};
executionTime: end - start,
}
}
```
By mastering these advanced execution features, you can create more robust, efficient, and sophisticated workflows in Sim Studio.
By mastering these advanced execution features, you can create more robust, efficient, and sophisticated workflows in Sim Studio.

View File

@@ -0,0 +1,200 @@
---
title: Execution Basics
description: Understanding the fundamental execution flow in Sim Studio
---
import { Callout } from 'fumadocs-ui/components/callout'
import { File, Files, Folder } from 'fumadocs-ui/components/files'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import {
AgentIcon,
ApiIcon,
ChartBarIcon,
CodeIcon,
ConditionalIcon,
ConnectIcon,
} from '@/components/icons'
When you run a workflow in Sim Studio, the execution engine follows a systematic process to ensure blocks are executed in the correct order and data flows properly between them.
## Execution Flow
The execution of a workflow follows these key steps:
<Steps>
<Step>
### Validation Before execution begins, the workflow is validated to ensure it has: - An enabled
starter block with no incoming connections - Properly connected blocks with valid configurations
- No circular dependencies (except in intentional loops) - Valid input and output types between
connected blocks
</Step>
<Step>
### Initialization The execution context is created, which includes: - Environment variables for
the workflow - Input values from the starter block - Initial state for all blocks - Execution path
tracking - Loop iteration counters
</Step>
<Step>
### Block Execution Blocks are executed in topological order (based on dependencies): - The system
identifies which blocks can be executed next - Inputs for each block are resolved from previous
block outputs - Each block is executed by its specialized handler - Outputs are stored in the
execution context
</Step>
<Step>
### Path Determination As execution progresses, the system determines which paths to follow: -
Router and conditional blocks make decisions about execution paths - Only blocks on active paths
are executed - The path tracker maintains the current execution state
</Step>
<Step>
### Result Collection After all blocks have executed: - Final outputs are collected - Execution
logs are compiled - Performance metrics are calculated - Results are presented in the UI
</Step>
</Steps>
## Block Types and Execution
Different block types have different execution behaviors:
<Tabs items={['Orchestration Blocks', 'Processing Blocks', 'Integration Blocks']}>
<Tab>
<Card>
Orchestration blocks control the flow of execution through your workflow.
<Files>
<File
name="Starter Block"
icon={<ConnectIcon className="h-4 w-4" />}
annotation="Initiates workflow execution and provides initial input values. Every workflow must have exactly one starter block."
/>
<File
name="Router Block"
icon={<ConnectIcon className="h-4 w-4" />}
annotation="Directs execution along specific paths based on dynamic decisions. Uses an AI model to select one of multiple possible paths."
/>
<File
name="Condition Block"
icon={<ConditionalIcon className="h-4 w-4" />}
annotation="Executes different paths based on conditional logic. Evaluates JavaScript expressions to determine which path to follow."
/>
</Files>
</Card>
</Tab>
<Tab>
<Card>
Processing blocks transform data and generate new outputs.
<Files>
<File
name="Agent Block"
icon={<AgentIcon className="h-4 w-4" />}
annotation="Interacts with AI models to generate content. Executes prompts against various LLM providers."
/>
<File
name="Function Block"
icon={<CodeIcon className="h-4 w-4" />}
annotation="Executes custom JavaScript/TypeScript code. Runs in a secure sandbox environment with access to connected block outputs."
/>
<File
name="Evaluator Block"
icon={<ChartBarIcon className="h-4 w-4" />}
annotation="Assesses outputs against defined criteria. Uses AI to evaluate content based on custom metrics."
/>
</Files>
</Card>
</Tab>
<Tab>
<Card>
Integration blocks connect with external systems.
<Files>
<File
name="API Block"
icon={<ApiIcon className="h-4 w-4" />}
annotation="Makes HTTP requests to external services. Configurable with headers, body, and authentication."
/>
<File
name="Tool Blocks"
icon={<CodeIcon className="h-4 w-4" />}
annotation="Specialized blocks for specific services (Gmail, Slack, GitHub, etc.). Each has its own execution logic for the specific service."
/>
</Files>
</Card>
</Tab>
</Tabs>
## Execution Methods
Sim Studio offers multiple ways to trigger workflow execution:
### Manual Execution
Run workflows on-demand through the Sim Studio interface by clicking the "Run" button. This is perfect for:
- Testing during development
- One-off tasks
- Workflows that need human supervision
### Scheduled Execution
Configure workflows to run automatically on a specified schedule:
- Set up recurring executions using cron expressions
- Define start times and frequency
- Configure timezone settings
- Set minimum and maximum execution intervals
### API Endpoints
Each workflow can be exposed as an API endpoint:
- Get a unique URL for your workflow
- Configure authentication requirements
- Send custom inputs via POST requests
- Receive execution results as JSON responses
### Webhooks
Configure workflows to execute in response to external events:
- Set up webhook triggers from third-party services
- Process incoming webhook data as workflow input
- Configure webhook security settings
- Support for specialized webhooks (GitHub, Stripe, etc.)
<Callout type="info">
The execution method you choose depends on your workflow's purpose. Manual execution is great for
development, while scheduled execution, API endpoints, and webhooks are better for production use
cases.
</Callout>
## Execution Context
Each workflow execution maintains a detailed context that includes:
- **Block States**: Outputs and execution status of each block
- **Execution Path**: The active path through the workflow
- **Routing Decisions**: Records of which paths were selected
- **Environment Variables**: Configuration values for the workflow
- **Execution Logs**: Detailed records of each step in the execution
This context is maintained throughout the execution and is used to:
- Resolve inputs for blocks
- Determine which blocks to execute next
- Track the progress of execution
- Provide debugging information
- Store intermediate results
## Real-Time Execution Monitoring
As your workflow executes, you can monitor its progress in real-time:
- **Active Block Highlighting**: The currently executing block is highlighted
- **Live Logs**: Execution logs appear in real-time in the logs panel
- **Block States**: Visual indicators show each block's execution state
- **Performance Metrics**: Timing information for each block's execution
These monitoring features help you understand how your workflow is executing and identify any issues that arise.

View File

@@ -3,45 +3,53 @@ title: Execution
description: Understand how workflows are executed in Sim Studio
---
import { Card, Cards } from 'fumadocs-ui/components/card'
import { Files, Folder, File } from 'fumadocs-ui/components/files'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { AgentIcon, ApiIcon, ConditionalIcon, CodeIcon, ChartBarIcon, ConnectIcon, GmailIcon, PerplexityIcon, NotionIcon, ExaAIIcon, FirecrawlIcon, SlackIcon } from '@/components/icons'
import { Callout } from 'fumadocs-ui/components/callout'
import { Card, Cards } from 'fumadocs-ui/components/card'
import { File, Files, Folder } from 'fumadocs-ui/components/files'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import {
AgentIcon,
ApiIcon,
ChartBarIcon,
CodeIcon,
ConditionalIcon,
ConnectIcon,
ExaAIIcon,
FirecrawlIcon,
GmailIcon,
NotionIcon,
PerplexityIcon,
SlackIcon,
} from '@/components/icons'
Sim Studio provides a powerful execution engine that brings your workflows to life. Understanding how execution works will help you design more effective workflows and troubleshoot any issues that arise.
<div>
<video
autoPlay
loop
muted
playsInline
className="w-full"
src="/loops.mp4"
>
</video>
<video autoPlay loop muted playsInline className="w-full" src="/loops.mp4"></video>
</div>
<Callout type="info">
The execution engine handles everything from block execution order to data flow, error handling, and loop management. It ensures your workflows run efficiently and predictably.
The execution engine handles everything from block execution order to data flow, error handling,
and loop management. It ensures your workflows run efficiently and predictably.
</Callout>
## Execution Documentation
<Cards>
<Card title="Execution Basics" href="/execution/basics">
Learn about the fundamental execution flow, block types, and how data flows through your workflow
Learn about the fundamental execution flow, block types, and how data flows through your
workflow
</Card>
<Card title="Loops" href="/execution/loops">
Master the powerful loop functionality to create iterative processes and feedback mechanisms
</Card>
<Card title="Loops" href="/execution/loops">
Master the powerful loop functionality to create iterative processes and feedback mechanisms
</Card>
<Card title="Advanced Features" href="/execution/advanced">
Discover advanced capabilities like error handling, environment variables, and performance optimization
Discover advanced capabilities like error handling, environment variables, and performance
optimization
</Card>
</Cards>
@@ -61,45 +69,36 @@ When you execute a workflow in Sim Studio, the system follows a predictable patt
<Steps>
<Step>
### Validation
The workflow is validated to ensure it has an enabled starter block and proper connections. This includes checking that:
- The starter block has no incoming connections
- All required blocks are present and properly connected
- Loop configurations are valid with appropriate iteration limits
### Validation The workflow is validated to ensure it has an enabled starter block and proper
connections. This includes checking that: - The starter block has no incoming connections - All
required blocks are present and properly connected - Loop configurations are valid with
appropriate iteration limits
</Step>
<Step>
### Initialization The execution context is created with environment variables and input values.
This context maintains the state of the workflow throughout execution, including: - Block outputs
and states - Execution path tracking - Routing decisions - Loop iteration counters
</Step>
<Step>
### Block Execution Blocks are executed in topological order, with each block's outputs feeding
into subsequent blocks. The executor: - Determines the next layer of blocks to execute based on
dependencies - Resolves inputs for each block from previous outputs - Dispatches execution to
specialized handlers for each block type
</Step>
<Step>
### Path Determination Router and conditional blocks make routing decisions that determine which
execution paths to follow. The path tracker: - Updates the active execution path based on these
decisions - Ensures that only blocks on active paths are executed - Handles complex branching
logic in your workflow
</Step>
<Step>
### Initialization
The execution context is created with environment variables and input values. This context maintains the state of the workflow throughout execution, including:
- Block outputs and states
- Execution path tracking
- Routing decisions
- Loop iteration counters
</Step>
<Step>
### Block Execution
Blocks are executed in topological order, with each block's outputs feeding into subsequent blocks. The executor:
- Determines the next layer of blocks to execute based on dependencies
- Resolves inputs for each block from previous outputs
- Dispatches execution to specialized handlers for each block type
</Step>
<Step>
### Path Determination
Router and conditional blocks make routing decisions that determine which execution paths to follow. The path tracker:
- Updates the active execution path based on these decisions
- Ensures that only blocks on active paths are executed
- Handles complex branching logic in your workflow
</Step>
<Step>
### Result Collection
The final output and execution logs are collected and presented in the UI. You'll see:
- Complete execution logs for each block
- Performance metrics and timing information
- Any errors that occurred during execution
- The final workflow output
### Result Collection The final output and execution logs are collected and presented in the UI.
You'll see: - Complete execution logs for each block - Performance metrics and timing
information - Any errors that occurred during execution - The final workflow output
</Step>
</Steps>
@@ -111,23 +110,45 @@ Sim Studio has two main categories of blocks in workflows:
<Tab value="Orchestration Blocks">
<Card>
Orchestration blocks control the flow of execution through your workflow.
<Files>
<File name="Router Blocks" icon={<ConnectIcon className="w-4 h-4" />} annotation="Direct the workflow along specific paths based on dynamic decisions. The router evaluates inputs and selects one of multiple possible paths." />
<File name="Conditional Blocks" icon={<ConditionalIcon className="w-4 h-4" />} annotation="Execute different paths based on conditional logic. Conditions are evaluated to true or false, determining which path to follow." />
<File
name="Router Blocks"
icon={<ConnectIcon className="h-4 w-4" />}
annotation="Direct the workflow along specific paths based on dynamic decisions. The router evaluates inputs and selects one of multiple possible paths."
/>
<File
name="Conditional Blocks"
icon={<ConditionalIcon className="h-4 w-4" />}
annotation="Execute different paths based on conditional logic. Conditions are evaluated to true or false, determining which path to follow."
/>
</Files>
</Card>
</Tab>
<Tab value="Output Blocks">
<Card>
Output blocks perform operations and generate results that can be used by downstream blocks.
<Files>
<File name="Agent Block" icon={<AgentIcon className="w-4 h-4" />} annotation="Interact with AI models to generate content. Supports various LLM providers with optional tool calling capabilities." />
<File name="Function Blocks" icon={<CodeIcon className="w-4 h-4" />} annotation="Execute custom JavaScript/TypeScript code to process data. Runs in a secure sandbox environment with appropriate timeout limits." />
<File name="API Blocks" icon={<ApiIcon className="w-4 h-4" />} annotation="Make HTTP requests to external services. Configure headers, body, and authentication for REST API interactions."/>
<File name="Evaluator Blocks" icon={<ChartBarIcon className="w-4 h-4" />} annotation="Assess outputs against defined criteria with customizable scoring logic."/>
<File
name="Agent Block"
icon={<AgentIcon className="h-4 w-4" />}
annotation="Interact with AI models to generate content. Supports various LLM providers with optional tool calling capabilities."
/>
<File
name="Function Blocks"
icon={<CodeIcon className="h-4 w-4" />}
annotation="Execute custom JavaScript/TypeScript code to process data. Runs in a secure sandbox environment with appropriate timeout limits."
/>
<File
name="API Blocks"
icon={<ApiIcon className="h-4 w-4" />}
annotation="Make HTTP requests to external services. Configure headers, body, and authentication for REST API interactions."
/>
<File
name="Evaluator Blocks"
icon={<ChartBarIcon className="h-4 w-4" />}
annotation="Assess outputs against defined criteria with customizable scoring logic."
/>
</Files>
</Card>
</Tab>
@@ -139,19 +160,28 @@ As your workflow executes, Sim Studio provides powerful real-time monitoring cap
<Accordions>
<Accordion title="Active Block Indicator">
The currently executing block is highlighted in the workflow editor, making it easy to follow the execution flow in real-time. This visual indicator helps you understand exactly where in your workflow the execution is currently happening.
The currently executing block is highlighted in the workflow editor, making it easy to follow
the execution flow in real-time. This visual indicator helps you understand exactly where in
your workflow the execution is currently happening.
</Accordion>
<Accordion title="Live Logs Panel">
Execution logs appear in real-time in the logs panel on the right side. These logs include detailed information about each block's execution, including inputs, outputs, execution time, and any errors that occur. You can use these logs to debug your workflow and understand how data flows between blocks.
</Accordion>
<Accordion title="Block States">
Each block's state (pending, executing, completed, or error) is visually indicated in the workflow editor. This helps you quickly identify which blocks have executed successfully and which may have encountered issues.
</Accordion>
<Accordion title="Live Logs Panel">
Execution logs appear in real-time in the logs panel on the right side. These logs include
detailed information about each block's execution, including inputs, outputs, execution time, and
any errors that occur. You can use these logs to debug your workflow and understand how data flows
between blocks.
</Accordion>
<Accordion title="Block States">
Each block's state (pending, executing, completed, or error) is visually indicated in the workflow
editor. This helps you quickly identify which blocks have executed successfully and which may have
encountered issues.
</Accordion>
<Accordion title="Performance Metrics">
Detailed timing information shows how long each block takes to execute, helping you identify performance bottlenecks in your workflow. The execution engine tracks start time, end time, and total duration for both individual blocks and the entire workflow.
Detailed timing information shows how long each block takes to execute, helping you identify
performance bottlenecks in your workflow. The execution engine tracks start time, end time, and
total duration for both individual blocks and the entire workflow.
</Accordion>
</Accordions>
@@ -161,19 +191,26 @@ Sim Studio offers multiple ways to trigger workflow execution:
<Cards>
<Card title="Manual Execution" href="#">
Run workflows on-demand through the Sim Studio interface. This is perfect for testing and development, allowing you to iteratively refine your workflow with immediate feedback.
Run workflows on-demand through the Sim Studio interface. This is perfect for testing and
development, allowing you to iteratively refine your workflow with immediate feedback.
</Card>
<Card title="Scheduled Execution" href="#">
Configure workflows to run automatically on a specified schedule using cron expressions. Ideal for regular data processing, reporting tasks, or any workflow that needs to run periodically without manual intervention.
</Card>
<Card title="API Endpoints" href="#">
Each workflow can be exposed as an API endpoint with authentication, allowing external systems to trigger execution with custom inputs. This enables seamless integration with your existing applications and services.
</Card>
<Card title="Scheduled Execution" href="#">
Configure workflows to run automatically on a specified schedule using cron expressions. Ideal for
regular data processing, reporting tasks, or any workflow that needs to run periodically without
manual intervention.
</Card>
<Card title="API Endpoints" href="#">
Each workflow can be exposed as an API endpoint with authentication, allowing external systems to
trigger execution with custom inputs. This enables seamless integration with your existing
applications and services.
</Card>
<Card title="Webhooks" href="#">
Configure workflows to execute in response to external events via webhook triggers. This allows your workflows to react to events from third-party services like GitHub, Stripe, or any platform that supports webhooks.
Configure workflows to execute in response to external events via webhook triggers. This allows
your workflows to react to events from third-party services like GitHub, Stripe, or any platform
that supports webhooks.
</Card>
</Cards>
@@ -226,4 +263,3 @@ Each workflow execution maintains a detailed context that includes:
- **Timeout Limits** - Function blocks have configurable timeout limits to prevent long-running operations from blocking execution.
By understanding these execution principles, you can design more efficient and effective workflows in Sim Studio.

View File

@@ -4,21 +4,13 @@ description: Creating iterative processes with loops in Sim Studio
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
Loops are a powerful feature in Sim Studio that allow you to create iterative processes, implement feedback mechanisms, and build more sophisticated workflows.
<div>
<video
autoPlay
loop
muted
playsInline
className="w-full"
src="/loops.mp4"
>
</video>
<video autoPlay loop muted playsInline className="w-full" src="/loops.mp4"></video>
</div>
## What Are Loops?
@@ -31,7 +23,8 @@ Loops in Sim Studio allow a group of blocks to execute repeatedly, with each ite
- **Conditional Processing**: Continue execution until specific criteria are met
<Callout type="info">
Loops are particularly powerful for AI workflows, allowing you to implement techniques like chain-of-thought reasoning, recursive refinement, and multi-step problem solving.
Loops are particularly powerful for AI workflows, allowing you to implement techniques like
chain-of-thought reasoning, recursive refinement, and multi-step problem solving.
</Callout>
## Creating Loops
@@ -49,7 +42,8 @@ To create a loop in your workflow:
<strong>Configure Loop Settings</strong>: Set iteration limits and conditions
</Step>
<Step>
<strong>Create Feedback Connections</strong>: Connect outputs from later blocks back to earlier blocks
<strong>Create Feedback Connections</strong>: Connect outputs from later blocks back to earlier
blocks
</Step>
</Steps>
@@ -63,7 +57,8 @@ When configuring a loop, you can set several important parameters:
- **Minimum Iterations**: The minimum number of times the loop must execute before checking conditions
<Callout type="warning">
Always set a reasonable maximum iteration limit to prevent infinite loops. The default limit of 5 iterations is a good starting point for most workflows.
Always set a reasonable maximum iteration limit to prevent infinite loops. The default limit of 5
iterations is a good starting point for most workflows.
</Callout>
### Loop Conditions
@@ -146,12 +141,13 @@ Loops enable powerful workflow patterns:
### Iterative Refinement
<div className="p-4 border rounded-md mb-4">
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Example: Content Refinement</h4>
<div className="text-sm text-gray-600 dark:text-gray-400 mb-2">
Create a loop where an Agent block generates content, an Evaluator block assesses it, and a Function block decides whether to continue refining.
<div className="mb-2 text-sm text-gray-600 dark:text-gray-400">
Create a loop where an Agent block generates content, an Evaluator block assesses it, and a
Function block decides whether to continue refining.
</div>
<ol className="text-sm list-decimal pl-5">
<ol className="list-decimal pl-5 text-sm">
<li>Agent generates initial content</li>
<li>Evaluator scores the content</li>
<li>Function analyzes score and provides feedback</li>
@@ -162,12 +158,12 @@ Loops enable powerful workflow patterns:
### Batch Processing
<div className="p-4 border rounded-md mb-4">
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Example: Data Processing Pipeline</h4>
<div className="text-sm text-gray-600 dark:text-gray-400 mb-2">
<div className="mb-2 text-sm text-gray-600 dark:text-gray-400">
Process a collection of items one at a time through a series of blocks.
</div>
<ol className="text-sm list-decimal pl-5">
<ol className="list-decimal pl-5 text-sm">
<li>Function block extracts the next item from a collection</li>
<li>Processing blocks operate on the single item</li>
<li>Results are accumulated in a Memory block</li>
@@ -177,12 +173,12 @@ Loops enable powerful workflow patterns:
### Recursive Problem Solving
<div className="p-4 border rounded-md mb-4">
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Example: Multi-step Reasoning</h4>
<div className="text-sm text-gray-600 dark:text-gray-400 mb-2">
<div className="mb-2 text-sm text-gray-600 dark:text-gray-400">
Implement a recursive approach to complex problem solving.
</div>
<ol className="text-sm list-decimal pl-5">
<ol className="list-decimal pl-5 text-sm">
<li>Agent analyzes the current problem state</li>
<li>Function block implements a step in the solution</li>
<li>Condition block checks if the problem is solved</li>
@@ -201,7 +197,8 @@ To use loops effectively in your workflows:
- **Test Thoroughly**: Verify that loops terminate as expected in all scenarios
<Callout type="warning">
Loops with many blocks or complex operations can impact performance. Consider optimizing individual blocks if your loops need many iterations.
Loops with many blocks or complex operations can impact performance. Consider optimizing
individual blocks if your loops need many iterations.
</Callout>
## Loop Debugging
@@ -214,4 +211,4 @@ When debugging loops in your workflows:
- **Use Console Logging**: Add console.log statements in Function blocks to track loop progress
- **Monitor Memory Usage**: Watch for growing data structures that might cause performance issues
By mastering loops, you can create much more sophisticated and powerful workflows in Sim Studio.
By mastering loops, you can create much more sophisticated and powerful workflows in Sim Studio.

View File

@@ -1,4 +1,4 @@
{
"title": "Execution",
"pages": ["basics", "loops", "advanced"]
}
}

View File

@@ -0,0 +1,101 @@
---
title: Getting Started
description: Build, test, and optimize your agentic workflows
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Card, Cards } from 'fumadocs-ui/components/card'
import { File, Files, Folder } from 'fumadocs-ui/components/files'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import {
AgentIcon,
ApiIcon,
ChartBarIcon,
CodeIcon,
ConditionalIcon,
ConnectIcon,
ExaAIIcon,
FirecrawlIcon,
GmailIcon,
NotionIcon,
PerplexityIcon,
SlackIcon,
} from '@/components/icons'
Sim Studio is a powerful, user-friendly platform for building, testing, and optimizing your agentic workflows. This documentation will help you understand how to use the various components of Sim Studio to create sophisticated agent-based applications.
<Callout type="info">
This guide will walk you through the essential concepts and help you get started building your
first workflow.
</Callout>
## Core Components
Sim Studio is built around two primary components:
### Blocks
Blocks are the fundamental building elements of your workflows. Each block serves a specific purpose:
<Files>
<File
name="Agent Block"
icon={<AgentIcon className="h-4 w-4" />}
annotation="Create AI agents using any LLM provider"
/>
<File
name="API Block"
icon={<ApiIcon className="h-4 w-4" />}
annotation="Connect to external services and APIs"
/>
<File
name="Condition Block"
icon={<ConditionalIcon className="h-4 w-4" />}
annotation="Add conditional branching to your workflows"
/>
<File
name="Function Block"
icon={<CodeIcon className="h-4 w-4" />}
annotation="Execute custom JavaScript/TypeScript code"
/>
<File
name="Evaluator Block"
icon={<ChartBarIcon className="h-4 w-4" />}
annotation="Assess responses against defined criteria"
/>
<File
name="Router Block"
icon={<ConnectIcon className="h-4 w-4" />}
annotation="Direct workflow execution based on input analysis"
/>
</Files>
### Tools
Tools extend the capabilities of agents. They provide additional functionality for agents by enabling you to interface with your favorite data sources and take action (e.g posting on X, sending an email)
<Files>
<File name="Gmail Tool" icon={<GmailIcon className="h-4 w-4" />} />
<File name="Firecrawl Tool" icon={<FirecrawlIcon className="h-4 w-4" />} />
<File name="Perplexity Tool" icon={<PerplexityIcon className="h-4 w-4" />} />
<File name="Notion Tool" icon={<NotionIcon className="h-4 w-4" />} />
<File name="Exa AI Tool" icon={<ExaAIIcon className="h-4 w-4" />} />
<File name="Slack Tool" icon={<SlackIcon className="h-4 w-4" />} />
</Files>
## Getting Started
<Steps>
<Step title="Create a new workflow">
Start by creating a new workflow in the Sim Studio dashboard.
</Step>
<Step title="Add your first block">Drag and drop a block from the sidebar onto the canvas.</Step>
<Step title="Configure the block">
Set up the block's parameters and inputs according to your needs.
</Step>
<Step title="Connect blocks">
Create connections between blocks to define the flow of data and execution.
</Step>
<Step title="Test your workflow">Run your workflow with test inputs to verify its behavior.</Step>
</Steps>

View File

@@ -4,7 +4,7 @@ description: The UI for agents
---
import { Card, Cards } from 'fumadocs-ui/components/card'
import { Files, Folder, File } from 'fumadocs-ui/components/files'
import { File, Files, Folder } from 'fumadocs-ui/components/files'
import { Features } from '@/components/ui/features'
Sim Studio is a powerful platform for building, testing, and optimizing agentic workflows. It provides developers with intuitive tools to design sophisticated agent-based applications through a visual interface. Whether you're prototyping a simple AI assistant or building complex multi-agent systems, Sim Studio offers the flexibility and performance needed for modern AI applications.
@@ -29,16 +29,12 @@ Existing frameworks abstract away provider-specific features, forcing developers
Sim Studio stays <span className="text-highlight">close to provider definitions</span>, directly exposing the parameters that matter:
<ul className="list-disc pl-6 space-y-2 highlight-markers">
<ul className="highlight-markers list-disc space-y-2 pl-6">
<li>System prompts and instructions with native formatting</li>
<li>
Tool definitions and access patterns that match provider implementations
</li>
<li>Tool definitions and access patterns that match provider implementations</li>
<li>Temperature and sampling parameters with their full range of options</li>
<li>Structured output formatting that aligns with provider capabilities</li>
<li>
Model selection and configuration with provider-specific optimizations
</li>
<li>Model selection and configuration with provider-specific optimizations</li>
</ul>
This approach gives you full control over agent behavior without unnecessary complexity. You leverage each provider's full capabilities without sacrificing the convenience of a unified platform.
@@ -67,14 +63,9 @@ Existing solutions provide limited visibility into agent performance, making it
Sim Studio provides <span className="text-highlight">full visibility into agent performance</span> with integrated observability:
<ul className="list-disc pl-6 space-y-2 highlight-markers">
<li>
Detailed execution logs capturing every interaction between agents and
models
</li>
<li>
Latency tracing with span visualization to identify performance bottlenecks
</li>
<ul className="highlight-markers list-disc space-y-2 pl-6">
<li>Detailed execution logs capturing every interaction between agents and models</li>
<li>Latency tracing with span visualization to identify performance bottlenecks</li>
<li>Cost tracking and optimization to prevent budget overruns</li>
<li>Error analysis and debugging tools for complex workflows</li>
<li>Performance comparisons across different model configurations</li>

View File

@@ -1,4 +1,4 @@
{
"title": "Introduction",
"pages": ["index"]
}
}

View File

@@ -3,9 +3,9 @@ title: Airtable
description: Read, create, and update Airtable
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="airtable"
color="#E0E0E0"
icon={true}
@@ -54,12 +54,9 @@ With Airtable, you can:
In Sim Studio, the Airtable integration enables your agents to interact with your Airtable bases programmatically. This allows for seamless data operations like retrieving information, creating new records, and updating existing data - all within your agent workflows. Use Airtable as a dynamic data source or destination for your agents, enabling them to access and manipulate structured information as part of their decision-making and task execution processes.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate Airtable functionality to manage table records. List, get, create,
Integrate Airtable functionality to manage table records. List, get, create,
## Tools
@@ -69,20 +66,20 @@ Read records from an Airtable table
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | OAuth access token |
| `baseId` | string | Yes | ID of the Airtable base |
| `tableId` | string | Yes | ID of the table |
| `maxRecords` | number | No | Maximum number of records to return |
| `filterFormula` | string | No | Formula to filter records \(e.g., |
| Parameter | Type | Required | Description |
| --------------- | ------ | -------- | ----------------------------------- |
| `accessToken` | string | Yes | OAuth access token |
| `baseId` | string | Yes | ID of the Airtable base |
| `tableId` | string | Yes | ID of the table |
| `maxRecords` | number | No | Maximum number of records to return |
| `filterFormula` | string | No | Formula to filter records \(e.g., |
#### Output
| Parameter | Type |
| --------- | ---- |
| `records` | string |
| `metadata` | string |
| Parameter | Type |
| -------------- | ------ |
| `records` | string |
| `metadata` | string |
| `totalRecords` | string |
### `airtable_get_record`
@@ -91,18 +88,18 @@ Retrieve a single record from an Airtable table by its ID
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | OAuth access token |
| `baseId` | string | Yes | ID of the Airtable base |
| `tableId` | string | Yes | ID or name of the table |
| `recordId` | string | Yes | ID of the record to retrieve |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------- |
| `accessToken` | string | Yes | OAuth access token |
| `baseId` | string | Yes | ID of the Airtable base |
| `tableId` | string | Yes | ID or name of the table |
| `recordId` | string | Yes | ID of the record to retrieve |
#### Output
| Parameter | Type |
| --------- | ---- |
| `record` | string |
| Parameter | Type |
| ---------- | ------ |
| `record` | string |
| `metadata` | string |
### `airtable_create_records`
@@ -111,17 +108,17 @@ Write new records to an Airtable table
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | OAuth access token |
| `baseId` | string | Yes | ID of the Airtable base |
| `tableId` | string | Yes | ID or name of the table |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ----------------------- |
| `accessToken` | string | Yes | OAuth access token |
| `baseId` | string | Yes | ID of the Airtable base |
| `tableId` | string | Yes | ID or name of the table |
#### Output
| Parameter | Type |
| --------- | ---- |
| `records` | string |
| Parameter | Type |
| ---------- | ------ |
| `records` | string |
| `metadata` | string |
### `airtable_update_record`
@@ -130,20 +127,20 @@ Update an existing record in an Airtable table by ID
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | OAuth access token |
| `baseId` | string | Yes | ID of the Airtable base |
| `tableId` | string | Yes | ID or name of the table |
| `recordId` | string | Yes | ID of the record to update |
| `fields` | json | Yes | An object containing the field names and their new values |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | --------------------------------------------------------- |
| `accessToken` | string | Yes | OAuth access token |
| `baseId` | string | Yes | ID of the Airtable base |
| `tableId` | string | Yes | ID or name of the table |
| `recordId` | string | Yes | ID of the record to update |
| `fields` | json | Yes | An object containing the field names and their new values |
#### Output
| Parameter | Type |
| --------- | ---- |
| `record` | string |
| `metadata` | string |
| Parameter | Type |
| --------------- | ------ |
| `record` | string |
| `metadata` | string |
| `updatedFields` | string |
### `airtable_update_multiple_records`
@@ -152,41 +149,36 @@ Update multiple existing records in an Airtable table
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | OAuth access token |
| `baseId` | string | Yes | ID of the Airtable base |
| `tableId` | string | Yes | ID or name of the table |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ----------------------- |
| `accessToken` | string | Yes | OAuth access token |
| `baseId` | string | Yes | ID of the Airtable base |
| `tableId` | string | Yes | ID or name of the table |
#### Output
| Parameter | Type |
| --------- | ---- |
| `records` | string |
| `metadata` | string |
| Parameter | Type |
| ------------------ | ------ |
| `records` | string |
| `metadata` | string |
| `updatedRecordIds` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `records` | json | records of the response |
| ↳ `record` | json | record of the response |
| ↳ `metadata` | json | metadata of the response |
| Output | Type | Description |
| ------------ | ------ | ------------------------ |
| `response` | object | Output from response |
| ↳ `records` | json | records of the response |
| ↳ `record` | json | record of the response |
| ↳ `metadata` | json | metadata of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Autoblocks
description: Manage and use versioned prompts with Autoblocks
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="autoblocks"
color="#0D2929"
icon={true}
@@ -123,13 +123,10 @@ With Autoblocks, you can:
Autoblocks integrates seamlessly with your existing AI workflows in Sim Studio, providing a structured approach to prompt engineering that improves consistency and reduces errors.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Collaborate on prompts with type safety, autocomplete, and backwards-incompatibility protection. Autoblocks prompt management allows product teams to collaborate while maintaining excellent developer experience.
## Tools
### `autoblocks_prompt_manager`
@@ -138,48 +135,43 @@ Manage and render prompts using Autoblocks prompt management system
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `promptId` | string | Yes | The ID of the prompt to retrieve |
| `version` | string | Yes | Version strategy \(latest or specific\) |
| `specificVersion` | string | No | Specific version to use \(e.g., |
| `templateParams` | object | No | Parameters to render the template with |
| `apiKey` | string | Yes | Autoblocks API key |
| `enableABTesting` | boolean | No | Whether to enable A/B testing between versions |
| `abTestConfig` | object | No | Configuration for A/B testing between versions |
| `environment` | string | Yes | Environment to use \(production, staging, development\) |
| Parameter | Type | Required | Description |
| ----------------- | ------- | -------- | ------------------------------------------------------- |
| `promptId` | string | Yes | The ID of the prompt to retrieve |
| `version` | string | Yes | Version strategy \(latest or specific\) |
| `specificVersion` | string | No | Specific version to use \(e.g., |
| `templateParams` | object | No | Parameters to render the template with |
| `apiKey` | string | Yes | Autoblocks API key |
| `enableABTesting` | boolean | No | Whether to enable A/B testing between versions |
| `abTestConfig` | object | No | Configuration for A/B testing between versions |
| `environment` | string | Yes | Environment to use \(production, staging, development\) |
#### Output
| Parameter | Type |
| --------- | ---- |
| `promptId` | string |
| `version` | string |
| Parameter | Type |
| ---------------- | ------ |
| `promptId` | string |
| `version` | string |
| `renderedPrompt` | string |
| `templates` | string |
| `templates` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `promptId` | string | Yes | Prompt ID - Enter the Autoblocks prompt ID |
| Parameter | Type | Required | Description |
| ---------- | ------ | -------- | ------------------------------------------ |
| `promptId` | string | Yes | Prompt ID - Enter the Autoblocks prompt ID |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `promptId` | string | promptId of the response |
| ↳ `version` | string | version of the response |
| Output | Type | Description |
| ------------------ | ------ | ------------------------------ |
| `response` | object | Output from response |
| ↳ `promptId` | string | promptId of the response |
| ↳ `version` | string | version of the response |
| ↳ `renderedPrompt` | string | renderedPrompt of the response |
| ↳ `templates` | json | templates of the response |
| ↳ `templates` | json | templates of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Browser Use
description: Run browser automation tasks
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="browser_use"
color="#E0E0E0"
icon={true}
@@ -54,13 +54,10 @@ With BrowserUse, you can:
In Sim Studio, the BrowserUse integration allows your agents to interact with the web as if they were human users. This enables scenarios like research, data collection, form submission, and web testing - all through simple natural language instructions. Your agents can gather information from websites, interact with web applications, and perform actions that would typically require manual browsing, expanding their capabilities to include the entire web as a resource.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Execute browser automation tasks with BrowserUse to navigate the web, scrape data, and perform actions as if a real user was interacting with the browser. The task runs asynchronously and the block will poll for completion before returning results.
## Tools
### `browser_use_run_task`
@@ -69,48 +66,43 @@ Runs a browser automation task using BrowserUse
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `task` | string | Yes | What should the browser agent do |
| `apiKey` | string | Yes | API key for BrowserUse API |
| `pollInterval` | number | No | Interval between polling requests in milliseconds \(default: 5000\) |
| `maxPollTime` | number | No | Maximum time to poll for task completion in milliseconds \(default: 300000 - 5 minutes\) |
| Parameter | Type | Required | Description |
| -------------- | ------ | -------- | ---------------------------------------------------------------------------------------- |
| `task` | string | Yes | What should the browser agent do |
| `apiKey` | string | Yes | API key for BrowserUse API |
| `pollInterval` | number | No | Interval between polling requests in milliseconds \(default: 5000\) |
| `maxPollTime` | number | No | Maximum time to poll for task completion in milliseconds \(default: 300000 - 5 minutes\) |
#### Output
| Parameter | Type |
| --------- | ---- |
| `id` | string |
| `task` | string |
| `output` | string |
| `status` | string |
| `steps` | string |
| Parameter | Type |
| ---------- | ------ |
| `id` | string |
| `task` | string |
| `output` | string |
| `status` | string |
| `steps` | string |
| `live_url` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `task` | string | Yes | Task - Describe what the browser agent should do... |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | --------------------------------------------------- |
| `task` | string | Yes | Task - Describe what the browser agent should do... |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `id` | string | id of the response |
| ↳ `task` | string | task of the response |
| ↳ `output` | any | output of the response |
| ↳ `status` | string | status of the response |
| ↳ `steps` | json | steps of the response |
| ↳ `live_url` | any | live_url of the response |
| Output | Type | Description |
| ------------ | ------ | ------------------------ |
| `response` | object | Output from response |
| ↳ `id` | string | id of the response |
| ↳ `task` | string | task of the response |
| ↳ `output` | any | output of the response |
| ↳ `status` | string | status of the response |
| ↳ `steps` | json | steps of the response |
| ↳ `live_url` | any | live_url of the response |
## Notes

View File

@@ -3,23 +3,17 @@ title: Clay
description: Populate Clay workbook with data
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="clay"
color="#E0E0E0"
icon={true}
iconSvg={`<svg className="block-icon"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 400 400"
>
iconSvg={`<svg className="block-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400">
<path
xmlns="http://www.w3.org/2000/svg"
fill="#41B9FD"
d=" M225.000000,1.000000 C227.042313,1.000000 229.084641,1.000000 231.903046,1.237045
xmlns="http://www.w3.org/2000/svg"
fill="#41B9FD"
d=" M225.000000,1.000000 C227.042313,1.000000 229.084641,1.000000 231.903046,1.237045
C233.981308,1.648251 235.283447,1.974177 236.585678,1.974532 C276.426849,1.985374 316.268005,1.964254 356.349304,2.036658
C356.713806,2.242061 356.838165,2.358902 357.013062,2.696568 C357.361633,3.243123 357.659729,3.568854 358.029053,3.919451
C358.100250,3.944317 358.064270,4.090822 358.043335,4.397895 C358.300018,5.454089 358.577637,6.203210 358.919647,7.420082
@@ -98,10 +92,10 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
C190.929428,6.798172 191.302902,6.734176 192.106628,6.758037 C200.661499,5.630559 208.799301,4.494970 216.903397,3.155535
C219.646088,2.702227 222.303574,1.733297 225.000000,1.000000 z"
/>
<path
xmlns="http://www.w3.org/2000/svg"
fill="#CF207F"
d=" M139.359467,113.684723 C140.046402,112.896461 140.733337,112.108200 141.935272,111.074768
<path
xmlns="http://www.w3.org/2000/svg"
fill="#CF207F"
d=" M139.359467,113.684723 C140.046402,112.896461 140.733337,112.108200 141.935272,111.074768
C142.614975,110.526917 142.779678,110.224220 142.944397,109.921524 C142.944397,109.921532 143.176773,109.554497 143.635193,109.340279
C145.124252,107.866608 146.154877,106.607147 147.185501,105.347694 C147.185501,105.347694 147.485733,105.074348 147.925735,104.915680
C148.538528,104.456520 148.711319,104.156021 148.884109,103.855530 C149.041901,103.578056 149.247330,103.342041 149.974884,103.098984
@@ -157,8 +151,12 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
C135.450775,286.986084 120.418205,262.047058 113.761909,231.918289 C110.147652,215.558807 109.790779,198.967697 111.782127,182.339249
C113.832611,165.216965 118.597160,148.944382 127.160858,133.886154 C130.497955,128.018265 133.867905,122.169083 137.222885,116.311386
C137.222885,116.311386 137.227158,116.228470 137.540863,116.214661 C138.211945,116.106445 138.569351,116.012032 139.062988,115.851028
C139.427094,115.546883 139.469406,115.275383 139.372986,114.756676 C139.495758,114.250427 139.475632,113.964195 139.359467,113.684723 z"/>
<path xmlns="http://www.w3.org/2000/svg" fill="#FFC947" d=" M200.266830,145.969620 C200.457306,145.841385 200.647766,145.713150 201.270264,145.275589
C139.427094,115.546883 139.469406,115.275383 139.372986,114.756676 C139.495758,114.250427 139.475632,113.964195 139.359467,113.684723 z"
/>
<path
xmlns="http://www.w3.org/2000/svg"
fill="#FFC947"
d=" M200.266830,145.969620 C200.457306,145.841385 200.647766,145.713150 201.270264,145.275589
C201.994553,144.826004 202.149918,144.593887 202.168381,144.269897 C202.168381,144.269897 202.241974,144.338730 202.627762,144.274597
C206.081650,142.583710 209.149765,140.956970 212.217880,139.330231 C212.400635,139.302734 212.583405,139.275208 213.260132,139.131683
C214.191147,138.779388 214.628204,138.543121 215.065262,138.306854 C215.065262,138.306870 215.200439,138.347610 215.615753,138.262543
@@ -168,7 +166,8 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
C189.032700,245.092545 189.048599,244.976334 188.932205,244.635071 C178.652054,231.033371 175.024597,215.782471 175.030136,199.385284
C175.034317,187.007950 178.389404,175.448639 183.294250,164.239044 C183.294250,164.239044 183.188980,163.991821 183.536774,163.962189
C186.888184,159.951889 189.891830,155.971222 192.895477,151.990555 C192.895477,151.990555 192.993607,151.991669 193.307098,151.842606
C195.835999,149.785568 198.051407,147.877594 200.266830,145.969620 z"/>
C195.835999,149.785568 198.051407,147.877594 200.266830,145.969620 z"
/>
</svg>`}
/>
@@ -194,13 +193,10 @@ With Clay, you can:
In Sim Studio, the Clay integration allows your agents to push structured data into Clay tables via webhooks. This makes it easy to collect, enrich, and manage dynamic outputs such as leads, research summaries, or action items—all in a collaborative, spreadsheet-like interface. Your agents can populate rows in real time, enabling asynchronous workflows where AI-generated insights are captured, reviewed, and used by your team. Whether you're automating research, enriching CRM data, or tracking operational outcomes, Clay becomes a living data layer that interacts intelligently with your agents. By connecting Sim Studio with Clay, you gain a powerful way to operationalize agent results, loop over datasets with precision, and maintain a clean, auditable record of AI-driven work.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Populate Clay workbook with data using a JSON or plain text. Enables direct communication and notifications with channel confirmation.
## Tools
### `clay_populate`
@@ -209,37 +205,32 @@ Populate Clay with data from a JSON file. Enables direct communication and notif
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `webhookURL` | string | Yes | The webhook URL to populate |
| `data` | json | Yes | The data to populate |
| `authToken` | string | No | Optional auth token for WebhookURL |
| Parameter | Type | Required | Description |
| ------------ | ------ | -------- | ---------------------------------- |
| `webhookURL` | string | Yes | The webhook URL to populate |
| `data` | json | Yes | The data to populate |
| `authToken` | string | No | Optional auth token for WebhookURL |
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | string |
| Parameter | Type |
| --------- | ------ |
| `data` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `authToken` | string | Yes | Auth Token - Enter your Clay Auth token |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | --------------------------------------- |
| `authToken` | string | Yes | Auth Token - Enter your Clay Auth token |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| Output | Type | Description |
| ---------- | ------ | -------------------- |
| `response` | object | Output from response |
| ↳ `data` | any | data of the response |
| ↳ `data` | any | data of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Confluence
description: Interact with Confluence
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="confluence"
color="#E0E0E0"
icon={true}
@@ -40,13 +40,10 @@ With Confluence, you can:
In Sim Studio, the Confluence integration enables your agents to access and leverage your organization's knowledge base. Agents can retrieve information from Confluence pages, search for specific content, and even update documentation when needed. This allows your workflows to incorporate the collective knowledge stored in your Confluence instance, making it possible to build agents that can reference internal documentation, follow established procedures, and maintain up-to-date information resources as part of their operations.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Connect to Confluence workspaces to retrieve and search documentation. Access page content, metadata, and integrate Confluence documentation into your workflows.
## Tools
### `confluence_retrieve`
@@ -55,21 +52,21 @@ Retrieve content from Confluence pages using the Confluence API.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | OAuth access token for Confluence |
| `domain` | string | Yes | Your Confluence domain \(e.g., yourcompany.atlassian.net\) |
| `pageId` | string | Yes | Confluence page ID to retrieve |
| `cloudId` | string | No | Confluence Cloud ID for the instance. If not provided, it will be fetched using the domain. |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ------------------------------------------------------------------------------------------- |
| `accessToken` | string | Yes | OAuth access token for Confluence |
| `domain` | string | Yes | Your Confluence domain \(e.g., yourcompany.atlassian.net\) |
| `pageId` | string | Yes | Confluence page ID to retrieve |
| `cloudId` | string | No | Confluence Cloud ID for the instance. If not provided, it will be fetched using the domain. |
#### Output
| Parameter | Type |
| --------- | ---- |
| `ts` | string |
| `pageId` | string |
| Parameter | Type |
| --------- | ------ |
| `ts` | string |
| `pageId` | string |
| `content` | string |
| `title` | string |
| `title` | string |
### `confluence_update`
@@ -77,50 +74,45 @@ Update a Confluence page using the Confluence API.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | OAuth access token for Confluence |
| `domain` | string | Yes | Your Confluence domain \(e.g., yourcompany.atlassian.net\) |
| `pageId` | string | Yes | Confluence page ID to update |
| `title` | string | No | New title for the page |
| `content` | string | No | New content for the page in Confluence storage format |
| `version` | number | No | Version number of the page \(required for preventing conflicts\) |
| `cloudId` | string | No | Confluence Cloud ID for the instance. If not provided, it will be fetched using the domain. |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ------------------------------------------------------------------------------------------- |
| `accessToken` | string | Yes | OAuth access token for Confluence |
| `domain` | string | Yes | Your Confluence domain \(e.g., yourcompany.atlassian.net\) |
| `pageId` | string | Yes | Confluence page ID to update |
| `title` | string | No | New title for the page |
| `content` | string | No | New content for the page in Confluence storage format |
| `version` | number | No | Version number of the page \(required for preventing conflicts\) |
| `cloudId` | string | No | Confluence Cloud ID for the instance. If not provided, it will be fetched using the domain. |
#### Output
| Parameter | Type |
| --------- | ---- |
| `ts` | string |
| `pageId` | string |
| `title` | string |
| `body` | string |
| Parameter | Type |
| --------- | ------ |
| `ts` | string |
| `pageId` | string |
| `title` | string |
| `body` | string |
| `success` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `ts` | string | ts of the response |
| ↳ `pageId` | string | pageId of the response |
| ↳ `content` | string | content of the response |
| ↳ `title` | string | title of the response |
| Output | Type | Description |
| ----------- | ------- | ----------------------- |
| `response` | object | Output from response |
| ↳ `ts` | string | ts of the response |
| ↳ `pageId` | string | pageId of the response |
| ↳ `content` | string | content of the response |
| ↳ `title` | string | title of the response |
| ↳ `success` | boolean | success of the response |
## Notes
- Category: `tools`

View File

@@ -3,9 +3,9 @@ title: File
description: Read and parse multiple files
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="dropdown"
color="#40916C"
icon={true}
@@ -47,12 +47,9 @@ With the File Parser, you can:
The File Parser tool is particularly useful for scenarios where your agents need to work with document content, such as analyzing reports, extracting data from spreadsheets, or processing text from various document sources. It simplifies the process of making document content available to your agents, allowing them to work with information stored in files just as easily as with direct text input.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Upload and extract contents from structured file formats including PDFs, CSV spreadsheets, and Word documents (DOCX).
Upload and extract contents from structured file formats including PDFs, CSV spreadsheets, and Word documents (DOCX).
## Tools
@@ -62,32 +59,27 @@ Parse one or more uploaded files or files from URLs (text, PDF, CSV, images, etc
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `filePath` | string | Yes | Path to the file\(s\). Can be a single path, URL, or an array of paths. |
| `fileType` | string | No | Type of file to parse \(auto-detected if not specified\) |
| Parameter | Type | Required | Description |
| ---------- | ------ | -------- | ----------------------------------------------------------------------- |
| `filePath` | string | Yes | Path to the file\(s\). Can be a single path, URL, or an array of paths. |
| `fileType` | string | No | Type of file to parse \(auto-detected if not specified\) |
#### Output
This tool does not produce any outputs.
## Block Configuration
No configuration parameters required.
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `files` | json | files of the response |
| Output | Type | Description |
| ------------------- | ------ | ------------------------------- |
| `response` | object | Output from response |
| ↳ `files` | json | files of the response |
| ↳ `combinedContent` | string | combinedContent of the response |
## Notes
- Category: `tools`

View File

@@ -3,15 +3,22 @@ title: ElevenLabs
description: Convert TTS using ElevenLabs
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="elevenlabs"
color="#181C1E"
icon={true}
iconSvg={`<svg className="block-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 876 876" fill="none">
<path d="M498 138H618V738H498V138Z" fill="currentColor"/>
<path d="M258 138H378V738H258V138Z" fill="currentColor"/>
iconSvg={`<svg className="block-icon"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 876 876"
fill="none"
>
<path d="M498 138H618V738H498V138Z" fill="currentColor" />
<path d="M258 138H378V738H258V138Z" fill="currentColor" />
</svg>`}
/>
@@ -29,13 +36,10 @@ With ElevenLabs, you can:
In Sim Studio, the ElevenLabs integration enables your agents to convert text to lifelike speech, enhancing the interactivity and engagement of your applications. This is particularly valuable for creating voice assistants, generating audio content, developing accessible applications, or building conversational interfaces that feel more human. The integration allows you to seamlessly incorporate ElevenLabs' advanced speech synthesis capabilities into your agent workflows, bridging the gap between text-based AI and natural human communication.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Generate realistic speech from text using ElevenLabs voices.
## Tools
### `elevenlabs_tts`
@@ -44,39 +48,34 @@ Convert TTS using ElevenLabs voices
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Your ElevenLabs API key |
| `text` | string | Yes | The text to convert to speech |
| `voiceId` | string | Yes | The ID of the voice to use |
| `modelId` | string | No | The ID of the model to use \(defaults to eleven_monolingual_v1\) |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ---------------------------------------------------------------- |
| `apiKey` | string | Yes | Your ElevenLabs API key |
| `text` | string | Yes | The text to convert to speech |
| `voiceId` | string | Yes | The ID of the voice to use |
| `modelId` | string | No | The ID of the model to use \(defaults to eleven_monolingual_v1\) |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| ---------- | ------ |
| `audioUrl` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `text` | string | No | Text - Enter the text to convert to speech |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ------------------------------------------ |
| `text` | string | No | Text - Enter the text to convert to speech |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| Output | Type | Description |
| ------------ | ------ | ------------------------ |
| `response` | object | Output from response |
| ↳ `audioUrl` | string | audioUrl of the response |
## Notes
- Category: `tools`

View File

@@ -3,9 +3,9 @@ title: Exa
description: Search with Exa AI
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="exa"
color="#1F40ED"
icon={true}
@@ -39,13 +39,10 @@ With Exa, you can:
In Sim Studio, the Exa integration allows your agents to search the web for information, retrieve content from specific URLs, and find similar resources - all programmatically through API calls. This enables your agents to access real-time information from the internet, enhancing their ability to provide accurate, current, and relevant responses. The integration is particularly valuable for research tasks, information gathering, content discovery, and answering questions that require up-to-date information from across the web.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Search the web, retrieve content, find similar links, and answer questions using Exa
## Tools
### `exa_search`
@@ -54,27 +51,27 @@ Search the web using Exa AI. Returns relevant search results with titles, URLs,
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Yes | The search query to execute |
| `numResults` | number | No | Number of results to return \(default: 10, max: 25\) |
| `useAutoprompt` | boolean | No | Whether to use autoprompt to improve the query \(default: false\) |
| `type` | string | No | Search type: neural, keyword, auto or magic \(default: auto\) |
| `apiKey` | string | Yes | Exa AI API Key |
| Parameter | Type | Required | Description |
| --------------- | ------- | -------- | ----------------------------------------------------------------- |
| `query` | string | Yes | The search query to execute |
| `numResults` | number | No | Number of results to return \(default: 10, max: 25\) |
| `useAutoprompt` | boolean | No | Whether to use autoprompt to improve the query \(default: false\) |
| `type` | string | No | Search type: neural, keyword, auto or magic \(default: auto\) |
| `apiKey` | string | Yes | Exa AI API Key |
#### Output
| Parameter | Type |
| --------- | ---- |
| `results` | string |
| `url` | string |
| Parameter | Type |
| --------------- | ------ |
| `results` | string |
| `url` | string |
| `publishedDate` | string |
| `author` | string |
| `summary` | string |
| `favicon` | string |
| `image` | string |
| `text` | string |
| `score` | string |
| `author` | string |
| `summary` | string |
| `favicon` | string |
| `image` | string |
| `text` | string |
| `score` | string |
### `exa_get_contents`
@@ -82,20 +79,20 @@ Retrieve the contents of webpages using Exa AI. Returns the title, text content,
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `urls` | string | Yes | Comma-separated list of URLs to retrieve content from |
| `text` | boolean | No | If true, returns full page text with default settings. If false, disables text return. |
| `summaryQuery` | string | No | Query to guide the summary generation |
| `apiKey` | string | Yes | Exa AI API Key |
| Parameter | Type | Required | Description |
| -------------- | ------- | -------- | -------------------------------------------------------------------------------------- |
| `urls` | string | Yes | Comma-separated list of URLs to retrieve content from |
| `text` | boolean | No | If true, returns full page text with default settings. If false, disables text return. |
| `summaryQuery` | string | No | Query to guide the summary generation |
| `apiKey` | string | Yes | Exa AI API Key |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| --------- | ------ |
| `results` | string |
| `title` | string |
| `text` | string |
| `title` | string |
| `text` | string |
| `summary` | string |
### `exa_find_similar_links`
@@ -104,21 +101,21 @@ Find webpages similar to a given URL using Exa AI. Returns a list of similar lin
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `url` | string | Yes | The URL to find similar links for |
| `numResults` | number | No | Number of similar links to return \(default: 10, max: 25\) |
| `text` | boolean | No | Whether to include the full text of the similar pages |
| `apiKey` | string | Yes | Exa AI API Key |
| Parameter | Type | Required | Description |
| ------------ | ------- | -------- | ---------------------------------------------------------- |
| `url` | string | Yes | The URL to find similar links for |
| `numResults` | number | No | Number of similar links to return \(default: 10, max: 25\) |
| `text` | boolean | No | Whether to include the full text of the similar pages |
| `apiKey` | string | Yes | Exa AI API Key |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| -------------- | ------ |
| `similarLinks` | string |
| `url` | string |
| `text` | string |
| `score` | string |
| `url` | string |
| `text` | string |
| `score` | string |
### `exa_answer`
@@ -126,44 +123,39 @@ Get an AI-generated answer to a question with citations from the web using Exa A
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Yes | The question to answer |
| `text` | boolean | No | Whether to include the full text of the answer |
| `apiKey` | string | Yes | Exa AI API Key |
| Parameter | Type | Required | Description |
| --------- | ------- | -------- | ---------------------------------------------- |
| `query` | string | Yes | The question to answer |
| `text` | boolean | No | Whether to include the full text of the answer |
| `apiKey` | string | Yes | Exa AI API Key |
#### Output
| Parameter | Type |
| --------- | ---- |
| `query` | string |
| `answer` | string |
| Parameter | Type |
| ----------- | ------ |
| `query` | string |
| `answer` | string |
| `citations` | string |
| `url` | string |
| `text` | string |
| `url` | string |
| `text` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `results` | json | results of the response |
| ↳ `similarLinks` | json | similarLinks of the response |
| ↳ `answer` | string | answer of the response |
| ↳ `citations` | json | citations of the response |
| Output | Type | Description |
| ---------------- | ------ | ---------------------------- |
| `response` | object | Output from response |
| ↳ `results` | json | results of the response |
| ↳ `similarLinks` | json | similarLinks of the response |
| ↳ `answer` | string | answer of the response |
| ↳ `citations` | json | citations of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Firecrawl
description: Scrape website content
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="firecrawl"
color="#181C1E"
icon={true}
@@ -48,13 +48,10 @@ With Firecrawl in Sim Studio, you can:
The Firecrawl integration allows your agents to access and process web content programmatically without leaving the Sim Studio environment. This enables scenarios like research, content aggregation, data extraction, and information analysis from across the web. Your agents can gather information from websites, extract structured data, and use that information to make decisions or generate insights - all without having to navigate the complexities of raw HTML parsing or browser automation. Simply configure the Firecrawl block with your API key, provide the target URL, and your agents can immediately begin working with web content in a clean, structured format.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Extract content from any website with advanced web scraping capabilities and content filtering. Retrieve clean, structured data from web pages with options to focus on main content.
## Tools
### `firecrawl_scrape`
@@ -63,41 +60,36 @@ Extract structured content from web pages with comprehensive metadata support. C
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Firecrawl API key |
| `url` | string | Yes | The URL to scrape content from |
| `scrapeOptions` | json | No | Options for content scraping |
| Parameter | Type | Required | Description |
| --------------- | ------ | -------- | ------------------------------ |
| `apiKey` | string | Yes | Firecrawl API key |
| `url` | string | Yes | The URL to scrape content from |
| `scrapeOptions` | json | No | Options for content scraping |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| ---------- | ------ |
| `markdown` | string |
| `html` | string |
| `html` | string |
| `metadata` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | API Key - Enter your Firecrawl API key |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | -------------------------------------- |
| `apiKey` | string | Yes | API Key - Enter your Firecrawl API key |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| Output | Type | Description |
| ------------ | ------ | ------------------------ |
| `response` | object | Output from response |
| ↳ `markdown` | string | markdown of the response |
| ↳ `html` | any | html of the response |
| ↳ `metadata` | json | metadata of the response |
| ↳ `html` | any | html of the response |
| ↳ `metadata` | json | metadata of the response |
## Notes

View File

@@ -0,0 +1,173 @@
---
title: GitHub
description: Interact with GitHub
---
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
type="github"
color="#181C1E"
icon={true}
iconSvg={`<svg className="block-icon" viewBox="0 0 26 26" xmlns="http://www.w3.org/2000/svg">
<path
d="M13 0C11.2928 0 9.60235 0.336255 8.02511 0.989566C6.44788 1.64288 5.01477 2.60045 3.80761 3.80761C1.36964 6.24558 0 9.55219 0 13C0 18.746 3.731 23.621 8.892 25.35C9.542 25.454 9.75 25.051 9.75 24.7V22.503C6.149 23.283 5.382 20.761 5.382 20.761C4.784 19.253 3.939 18.85 3.939 18.85C2.756 18.044 4.03 18.07 4.03 18.07C5.33 18.161 6.019 19.409 6.019 19.409C7.15 21.385 9.061 20.8 9.802 20.488C9.919 19.643 10.257 19.071 10.621 18.746C7.735 18.421 4.706 17.303 4.706 12.35C4.706 10.907 5.2 9.75 6.045 8.827C5.915 8.502 5.46 7.15 6.175 5.395C6.175 5.395 7.267 5.044 9.75 6.721C10.777 6.435 11.895 6.292 13 6.292C14.105 6.292 15.223 6.435 16.25 6.721C18.733 5.044 19.825 5.395 19.825 5.395C20.54 7.15 20.085 8.502 19.955 8.827C20.8 9.75 21.294 10.907 21.294 12.35C21.294 17.316 18.252 18.408 15.353 18.733C15.821 19.136 16.25 19.929 16.25 21.138V24.7C16.25 25.051 16.458 25.467 17.121 25.35C22.282 23.608 26 18.746 26 13C26 11.2928 25.6637 9.60235 25.0104 8.02511C24.3571 6.44788 23.3995 5.01477 22.1924 3.80761C20.9852 2.60045 19.5521 1.64288 17.9749 0.989566C16.3977 0.336255 14.7072 0 13 0Z"
fill="currentColor"
/>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[GitHub](https://github.com/) is the world's leading platform for software development and version control using Git. It provides a collaborative environment where developers can host and review code, manage projects, and build software together.
With GitHub, you can:
- **Host repositories**: Store your code in public or private repositories with version control
- **Collaborate on code**: Use pull requests to propose changes, review code, and merge contributions
- **Track issues**: Create, assign, and manage issues to organize work and track bugs
- **Automate workflows**: Use GitHub Actions to build, test, and deploy code automatically
- **Manage projects**: Organize work with project boards, milestones, and task tracking
- **Document code**: Create and maintain documentation with GitHub Pages and wikis
In Sim Studio, the GitHub integration enables your agents to interact directly with GitHub repositories and workflows. This allows for powerful automation scenarios such as code review assistance, pull request management, issue tracking, and repository exploration. Your agents can fetch repository data, analyze code changes, post comments on pull requests, and perform other GitHub operations programmatically. This integration bridges the gap between your AI workflows and your development processes, enabling seamless collaboration between your agents and your development team.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Access GitHub repositories, pull requests, and comments through the GitHub API. Automate code reviews, PR management, and repository interactions within your workflow.
## Tools
### `github_pr`
Fetch PR details including diff and files changed
#### Input
| Parameter | Type | Required | Description |
| ------------ | ------ | -------- | ------------------- |
| `owner` | string | Yes | Repository owner |
| `repo` | string | Yes | Repository name |
| `pullNumber` | number | Yes | Pull request number |
| `apiKey` | string | Yes | GitHub API token |
#### Output
| Parameter | Type |
| ------------ | ------ |
| `metadata` | string |
| `title` | string |
| `state` | string |
| `html_url` | string |
| `diff_url` | string |
| `created_at` | string |
| `updated_at` | string |
| `files` | string |
| `additions` | string |
| `deletions` | string |
| `changes` | string |
| `patch` | string |
| `blob_url` | string |
| `raw_url` | string |
| `status` | string |
### `github_comment`
Create comments on GitHub PRs
#### Input
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------------------------- |
| `owner` | string | Yes | Repository owner |
| `repo` | string | Yes | Repository name |
| `pullNumber` | number | Yes | Pull request number |
| `body` | string | Yes | Comment content |
| `path` | string | No | File path for review comment |
| `position` | number | No | Line number for review comment |
| `apiKey` | string | Yes | GitHub API token |
| `commentType` | string | No | Type of comment \(pr_comment or file_comment\) |
| `line` | number | No | Line number for review comment |
| `side` | string | No | Side of the diff \(LEFT or RIGHT\) |
| `commitId` | string | No | The SHA of the commit to comment on |
#### Output
| Parameter | Type |
| ------------ | ------ |
| `metadata` | string |
| `html_url` | string |
| `created_at` | string |
| `updated_at` | string |
| `path` | string |
| `line` | string |
| `side` | string |
| `commit_id` | string |
### `github_repo_info`
Retrieve comprehensive GitHub repository metadata including stars, forks, issues, and primary language. Supports both public and private repositories with optional authentication.
#### Input
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ----------------------------------------- |
| `owner` | string | Yes | Repository owner \(user or organization\) |
| `repo` | string | Yes | Repository name |
| `apiKey` | string | Yes | GitHub Personal Access Token |
#### Output
| Parameter | Type |
| ------------- | ------ |
| `metadata` | string |
| `description` | string |
| `stars` | string |
| `forks` | string |
| `openIssues` | string |
| `language` | string |
### `github_latest_commit`
Retrieve the latest commit from a GitHub repository
#### Input
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ----------------------------------------- |
| `owner` | string | Yes | Repository owner \(user or organization\) |
| `repo` | string | Yes | Repository name |
| `branch` | string | No | Branch name \(defaults to the repository |
| `apiKey` | string | Yes | GitHub API token |
#### Output
| Parameter | Type |
| ---------------- | ------ |
| `metadata` | string |
| `html_url` | string |
| `commit_message` | string |
| `author` | string |
| `login` | string |
| `avatar_url` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------------ | ------ | ------------------------ |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `metadata` | json | metadata of the response |
## Notes
- Category: `tools`
- Type: `github`

View File

@@ -3,9 +3,9 @@ title: Gmail
description: Send Gmail
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="gmail"
color="#E0E0E0"
icon={true}
@@ -48,13 +48,10 @@ With Gmail, you can:
In Sim Studio, the Gmail integration enables your agents to send, read, and search emails programmatically. This allows for powerful automation scenarios such as sending notifications, processing incoming messages, extracting information from emails, and managing communication workflows. Your agents can compose and send personalized emails, search for specific messages using Gmail's query syntax, and extract content from emails to use in other parts of your workflow. Coming soon, agents will also be able to listen for new emails in real-time, enabling responsive workflows that can trigger actions based on incoming messages. This integration bridges the gap between your AI workflows and email communications, enabling seamless interaction with one of the world's most widely used communication platforms.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate Gmail functionality to send email messages within your workflow. Automate email communications and process email content using OAuth authentication.
## Tools
### `gmail_send`
@@ -63,18 +60,18 @@ Send emails using Gmail
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | Access token for Gmail API |
| `to` | string | Yes | Recipient email address |
| `subject` | string | Yes | Email subject |
| `body` | string | Yes | Email body content |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | -------------------------- |
| `accessToken` | string | Yes | Access token for Gmail API |
| `to` | string | Yes | Recipient email address |
| `subject` | string | Yes | Email subject |
| `body` | string | Yes | Email body content |
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| Parameter | Type |
| ---------- | ------ |
| `content` | string |
| `metadata` | string |
| `threadId` | string |
| `labelIds` | string |
@@ -85,19 +82,19 @@ Read emails from Gmail
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | Access token for Gmail API |
| `messageId` | string | No | ID of the message to read |
| `folder` | string | No | Folder/label to read emails from |
| `unreadOnly` | boolean | No | Only retrieve unread messages |
| `maxResults` | number | No | Maximum number of messages to retrieve \(default: 1, max: 10\) |
| Parameter | Type | Required | Description |
| ------------- | ------- | -------- | -------------------------------------------------------------- |
| `accessToken` | string | Yes | Access token for Gmail API |
| `messageId` | string | No | ID of the message to read |
| `folder` | string | No | Folder/label to read emails from |
| `unreadOnly` | boolean | No | Only retrieve unread messages |
| `maxResults` | number | No | Maximum number of messages to retrieve \(default: 1, max: 10\) |
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| Parameter | Type |
| ---------- | ------ |
| `content` | string |
| `metadata` | string |
### `gmail_search`
@@ -106,34 +103,29 @@ Search emails in Gmail
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | Access token for Gmail API |
| `query` | string | Yes | Search query for emails |
| `maxResults` | number | No | Maximum number of results to return |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ----------------------------------- |
| `accessToken` | string | Yes | Access token for Gmail API |
| `query` | string | Yes | Search query for emails |
| `maxResults` | number | No | Maximum number of results to return |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| --------- | ------ |
| `content` | string |
## Block Configuration
No configuration parameters required.
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `metadata` | json | metadata of the response |
| Output | Type | Description |
| ------------ | ------ | ------------------------ |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `metadata` | json | metadata of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Google Docs
description: Read, write, and create documents
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="google_docs"
color="#E0E0E0"
icon={true}
@@ -42,13 +42,10 @@ With Google Docs, you can:
In Sim Studio, the Google Docs integration enables your agents to interact directly with document content programmatically. This allows for powerful automation scenarios such as document creation, content extraction, collaborative editing, and document management. Your agents can read existing documents to extract information, write to documents to update content, and create new documents from scratch. This integration bridges the gap between your AI workflows and document management, enabling seamless interaction with one of the world's most widely used document platforms. By connecting Sim Studio with Google Docs, you can automate document workflows, generate reports, extract insights from documents, and maintain documentation - all through your intelligent agents.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate Google Docs functionality to manage documents. Read content from existing documents, write to documents, and create new documents using OAuth authentication. Supports text content manipulation for document creation and editing.
## Tools
### `google_docs_read`
@@ -57,15 +54,15 @@ Read content from a Google Docs document
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | The access token for the Google Docs API |
| `documentId` | string | Yes | The ID of the document to read |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------------------- |
| `accessToken` | string | Yes | The access token for the Google Docs API |
| `documentId` | string | Yes | The ID of the document to read |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| --------- | ------ |
| `content` | string |
### `google_docs_write`
@@ -74,16 +71,16 @@ Write or update content in a Google Docs document
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | The access token for the Google Docs API |
| `documentId` | string | Yes | The ID of the document to write to |
| `content` | string | Yes | The content to write to the document |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------------------- |
| `accessToken` | string | Yes | The access token for the Google Docs API |
| `documentId` | string | Yes | The ID of the document to write to |
| `content` | string | Yes | The content to write to the document |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| ---------------- | ------ |
| `updatedContent` | string |
### `google_docs_create`
@@ -92,41 +89,36 @@ Create a new Google Docs document
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | The access token for the Google Docs API |
| `title` | string | Yes | The title of the document to create |
| `content` | string | No | The content of the document to create |
| `folderId` | string | No | The ID of the folder to create the document in |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------------------------- |
| `accessToken` | string | Yes | The access token for the Google Docs API |
| `title` | string | Yes | The title of the document to create |
| `content` | string | No | The content of the document to create |
| `folderId` | string | No | The ID of the folder to create the document in |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| ---------- | ------ |
| `metadata` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `metadata` | json | metadata of the response |
| Output | Type | Description |
| ------------------ | ------- | ------------------------------ |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `metadata` | json | metadata of the response |
| ↳ `updatedContent` | boolean | updatedContent of the response |
## Notes
- Category: `tools`

View File

@@ -3,9 +3,9 @@ title: Google Drive
description: Upload, download, and list files
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="google_drive"
color="#E0E0E0"
icon={true}
@@ -58,13 +58,10 @@ With Google Drive, you can:
In Sim Studio, the Google Drive integration enables your agents to interact directly with your cloud storage programmatically. This allows for powerful automation scenarios such as file management, content organization, and document workflows. Your agents can upload new files to specific folders, download existing files to process their contents, and list folder contents to navigate your storage structure. This integration bridges the gap between your AI workflows and your document management system, enabling seamless file operations without manual intervention. By connecting Sim Studio with Google Drive, you can automate file-based workflows, manage documents intelligently, and incorporate cloud storage operations into your agent's capabilities.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate Google Drive functionality to manage files and folders. Upload new files, download existing ones, and list contents of folders using OAuth authentication. Supports file operations with custom MIME types and folder organization.
## Tools
### `google_drive_upload`
@@ -73,27 +70,27 @@ Upload a file to Google Drive
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | The access token for the Google Drive API |
| `fileName` | string | Yes | The name of the file to upload |
| `content` | string | Yes | The content of the file to upload |
| `mimeType` | string | No | The MIME type of the file to upload |
| `folderId` | string | No | The ID of the folder to upload the file to |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ------------------------------------------ |
| `accessToken` | string | Yes | The access token for the Google Drive API |
| `fileName` | string | Yes | The name of the file to upload |
| `content` | string | Yes | The content of the file to upload |
| `mimeType` | string | No | The MIME type of the file to upload |
| `folderId` | string | No | The ID of the folder to upload the file to |
#### Output
| Parameter | Type |
| --------- | ---- |
| `file` | string |
| `name` | string |
| `mimeType` | string |
| `webViewLink` | string |
| Parameter | Type |
| ---------------- | ------ |
| `file` | string |
| `name` | string |
| `mimeType` | string |
| `webViewLink` | string |
| `webContentLink` | string |
| `size` | string |
| `createdTime` | string |
| `modifiedTime` | string |
| `parents` | string |
| `size` | string |
| `createdTime` | string |
| `modifiedTime` | string |
| `parents` | string |
### `google_drive_download`
@@ -101,24 +98,24 @@ Download a file from Google Drive
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | The access token for the Google Drive API |
| `fileId` | string | Yes | The ID of the file to download |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ----------------------------------------- |
| `accessToken` | string | Yes | The access token for the Google Drive API |
| `fileId` | string | Yes | The ID of the file to download |
#### Output
| Parameter | Type |
| --------- | ---- |
| `metadata` | string |
| `name` | string |
| `mimeType` | string |
| `webViewLink` | string |
| Parameter | Type |
| ---------------- | ------ |
| `metadata` | string |
| `name` | string |
| `mimeType` | string |
| `webViewLink` | string |
| `webContentLink` | string |
| `size` | string |
| `createdTime` | string |
| `modifiedTime` | string |
| `parents` | string |
| `size` | string |
| `createdTime` | string |
| `modifiedTime` | string |
| `parents` | string |
### `google_drive_list`
@@ -126,44 +123,39 @@ List files and folders in Google Drive
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `accessToken` | string | Yes | The access token for the Google Drive API |
| `folderId` | string | No | The ID of the folder to list files from |
| `query` | string | No | A query to filter the files |
| `pageSize` | number | No | The number of files to return |
| `pageToken` | string | No | The page token to use for pagination |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ----------------------------------------- |
| `accessToken` | string | Yes | The access token for the Google Drive API |
| `folderId` | string | No | The ID of the folder to list files from |
| `query` | string | No | A query to filter the files |
| `pageSize` | number | No | The number of files to return |
| `pageToken` | string | No | The page token to use for pagination |
#### Output
| Parameter | Type |
| --------- | ---- |
| `files` | string |
| `name` | string |
| `mimeType` | string |
| `webViewLink` | string |
| Parameter | Type |
| ---------------- | ------ |
| `files` | string |
| `name` | string |
| `mimeType` | string |
| `webViewLink` | string |
| `webContentLink` | string |
| `size` | string |
| `createdTime` | string |
| `modifiedTime` | string |
| `parents` | string |
| `size` | string |
| `createdTime` | string |
| `modifiedTime` | string |
| `parents` | string |
## Block Configuration
No configuration parameters required.
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `metadata` | json | metadata of the response |
| Output | Type | Description |
| ------------ | ------ | ------------------------ |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `metadata` | json | metadata of the response |
## Notes

View File

@@ -3,29 +3,29 @@ title: Google Search
description: Search the web
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="google_search"
color="#E0E0E0"
icon={true}
iconSvg={`<svg className="block-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" >
<path
fill="#fbc02d"
d="M43.611,20.083H42V20H24v8h11.303c-1.649,4.657-6.08,8-11.303,8c-6.627,0-12-5.373-12-12 s5.373-12,12-12c3.059,0,5.842,1.154,7.961,3.039l5.657-5.657C34.046,6.053,29.268,4,24,4C12.955,4,4,12.955,4,24s8.955,20,20,20 s20-8.955,20-20C44,22.659,43.862,21.35,43.611,20.083z"
/>
<path
fill="#e53935"
d="M6.306,14.691l6.571,4.819C14.655,15.108,18.961,12,24,12c3.059,0,5.842,1.154,7.961,3.039 l5.657-5.657C34.046,6.053,29.268,4,24,4C16.318,4,9.656,8.337,6.306,14.691z"
/>
<path
fill="#4caf50"
d="M24,44c5.166,0,9.86-1.977,13.409-5.192l-6.19-5.238C29.211,35.091,26.715,36,24,36 c-5.202,0-9.619-3.317-11.283-7.946l-6.522,5.025C9.505,39.556,16.227,44,24,44z"
/>
<path
fill="#1565c0"
d="M43.611,20.083L43.595,20L42,20H24v8h11.303c-0.792,2.237-2.231,4.166-4.087,5.571 c0.001-0.001,0.002-0.001,0.003-0.002l6.19,5.238C36.971,39.205,44,34,44,24C44,22.659,43.862,21.35,43.611,20.083z"
/>
d="M43.611,20.083H42V20H24v8h11.303c-1.649,4.657-6.08,8-11.303,8c-6.627,0-12-5.373-12-12 s5.373-12,12-12c3.059,0,5.842,1.154,7.961,3.039l5.657-5.657C34.046,6.053,29.268,4,24,4C12.955,4,4,12.955,4,24s8.955,20,20,20 s20-8.955,20-20C44,22.659,43.862,21.35,43.611,20.083z"
/>
<path
fill="#e53935"
d="M6.306,14.691l6.571,4.819C14.655,15.108,18.961,12,24,12c3.059,0,5.842,1.154,7.961,3.039 l5.657-5.657C34.046,6.053,29.268,4,24,4C16.318,4,9.656,8.337,6.306,14.691z"
/>
<path
fill="#4caf50"
d="M24,44c5.166,0,9.86-1.977,13.409-5.192l-6.19-5.238C29.211,35.091,26.715,36,24,36 c-5.202,0-9.619-3.317-11.283-7.946l-6.522,5.025C9.505,39.556,16.227,44,24,44z"
/>
<path
fill="#1565c0"
d="M43.611,20.083L43.595,20L42,20H24v8h11.303c-0.792,2.237-2.231,4.166-4.087,5.571 c0.001-0.001,0.002-0.001,0.003-0.002l6.19,5.238C36.971,39.205,44,34,44,24C44,22.659,43.862,21.35,43.611,20.083z"
/>
</svg>`}
/>
@@ -43,13 +43,10 @@ With Google Search, you can:
In Sim Studio, the Google Search integration enables your agents to search the web programmatically and incorporate search results into their workflows. This allows for powerful automation scenarios such as research, fact-checking, data gathering, and information synthesis. Your agents can formulate search queries, retrieve relevant results, and extract information from those results to make decisions or generate insights. This integration bridges the gap between your AI workflows and the vast information available on the web, enabling your agents to access up-to-date information from across the internet. By connecting Sim Studio with Google Search, you can create agents that stay informed with the latest information, verify facts, conduct research, and provide users with relevant web content - all without leaving your workflow.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Searches the web using the Google Custom Search API, which provides high-quality search results from the entire internet or a specific site defined by a custom search engine ID.
## Tools
### `google_search`
@@ -58,34 +55,30 @@ Search the web with the Custom Search API
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Yes | The search query to execute |
| `apiKey` | string | Yes | Google API key |
| `searchEngineId` | string | Yes | Custom Search Engine ID |
| `num` | string | No | Number of results to return \(default: 10, max: 10\) |
| Parameter | Type | Required | Description |
| ---------------- | ------ | -------- | ---------------------------------------------------- |
| `query` | string | Yes | The search query to execute |
| `apiKey` | string | Yes | Google API key |
| `searchEngineId` | string | Yes | Custom Search Engine ID |
| `num` | string | No | Number of results to return \(default: 10, max: 10\) |
#### Output
| Parameter | Type |
| --------- | ---- |
| `items` | string |
| `searchInformation` | string |
| `searchTime` | string |
| `formattedSearchTime` | string |
| Parameter | Type |
| ----------------------- | ------ |
| `items` | string |
| `searchInformation` | string |
| `searchTime` | string |
| `formattedSearchTime` | string |
| `formattedTotalResults` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | No | Search Query - Enter your search query |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | -------------------------------------- |
| `query` | string | No | Search Query - Enter your search query |
### Outputs

View File

@@ -0,0 +1,172 @@
---
title: Google Sheets
description: Read, write, and update data
---
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
type="google_sheets"
color="#E0E0E0"
icon={true}
iconSvg={`<svg className="block-icon"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 48 48"
>
<path
fill="#43a047"
d="M37,45H11c-1.657,0-3-1.343-3-3V6c0-1.657,1.343-3,3-3h19l10,10v29C40,43.657,38.657,45,37,45z"
/>
<path fill="#c8e6c9" d="M40 13L30 13 30 3z" />
<path fill="#2e7d32" d="M30 13L40 23 40 13z" />
<path
fill="#e8f5e9"
d="M31,23H17h-2v2v2v2v2v2v2v2h18v-2v-2v-2v-2v-2v-2v-2H31z M17,25h4v2h-4V25z M17,29h4v2h-4V29z M17,33h4v2h-4V33z M31,35h-8v-2h8V35z M31,31h-8v-2h8V31z M31,27h-8v-2h8V27z"
/>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[Google Sheets](https://sheets.google.com) is a powerful cloud-based spreadsheet application that allows users to create, edit, and collaborate on spreadsheets in real-time. As part of Google's productivity suite, Google Sheets offers a versatile platform for data organization, analysis, and visualization with robust formatting, formula, and sharing capabilities.
With Google Sheets, you can:
- **Create and edit spreadsheets**: Develop data-driven documents with comprehensive formatting and calculation options
- **Collaborate in real-time**: Work simultaneously with multiple users on the same spreadsheet
- **Analyze data**: Use formulas, functions, and pivot tables to process and understand your data
- **Visualize information**: Create charts, graphs, and conditional formatting to represent data visually
- **Access anywhere**: Use Google Sheets across devices with automatic cloud synchronization
- **Work offline**: Continue working without internet connection with changes syncing when back online
- **Integrate with other services**: Connect with Google Drive, Forms, and third-party applications
In Sim Studio, the Google Sheets integration enables your agents to interact directly with spreadsheet data programmatically. This allows for powerful automation scenarios such as data extraction, analysis, reporting, and management. Your agents can read existing spreadsheets to extract information, write to spreadsheets to update data, and create new spreadsheets from scratch. This integration bridges the gap between your AI workflows and data management, enabling seamless interaction with structured data. By connecting Sim Studio with Google Sheets, you can automate data workflows, generate reports, extract insights from data, and maintain up-to-date information - all through your intelligent agents. The integration supports various data formats and range specifications, making it flexible enough to handle diverse data management needs while maintaining the collaborative and accessible nature of Google Sheets.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate Google Sheets functionality to manage spreadsheet data. Read data from specific ranges, write new data, update existing cells, and append data to the end of sheets using OAuth authentication. Supports various input and output formats for flexible data handling.
## Tools
### `google_sheets_read`
Read data from a Google Sheets spreadsheet
#### Input
| Parameter | Type | Required | Description |
| --------------- | ------ | -------- | ------------------------------------------ |
| `accessToken` | string | Yes | The access token for the Google Sheets API |
| `spreadsheetId` | string | Yes | The ID of the spreadsheet to read from |
| `range` | string | No | The range of cells to read from |
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | json |
### `google_sheets_write`
Write data to a Google Sheets spreadsheet
#### Input
| Parameter | Type | Required | Description |
| ------------------------- | ------- | -------- | ----------------------------------------------------- |
| `accessToken` | string | Yes | The access token for the Google Sheets API |
| `spreadsheetId` | string | Yes | The ID of the spreadsheet to write to |
| `range` | string | No | The range of cells to write to |
| `values` | array | Yes | The data to write to the spreadsheet |
| `valueInputOption` | string | No | The format of the data to write |
| `includeValuesInResponse` | boolean | No | Whether to include the written values in the response |
#### Output
| Parameter | Type |
| ---------------- | ------ |
| `updatedRange` | string |
| `updatedRows` | string |
| `updatedColumns` | string |
| `updatedCells` | string |
| `metadata` | string |
| `spreadsheetId` | string |
| `spreadsheetUrl` | string |
### `google_sheets_update`
Update data in a Google Sheets spreadsheet
#### Input
| Parameter | Type | Required | Description |
| ------------------------- | ------- | -------- | ----------------------------------------------------- |
| `accessToken` | string | Yes | The access token for the Google Sheets API |
| `spreadsheetId` | string | Yes | The ID of the spreadsheet to update |
| `range` | string | No | The range of cells to update |
| `values` | array | Yes | The data to update in the spreadsheet |
| `valueInputOption` | string | No | The format of the data to update |
| `includeValuesInResponse` | boolean | No | Whether to include the updated values in the response |
#### Output
| Parameter | Type |
| ---------------- | ------ |
| `updatedRange` | string |
| `updatedRows` | string |
| `updatedColumns` | string |
| `updatedCells` | string |
| `metadata` | string |
| `spreadsheetId` | string |
| `spreadsheetUrl` | string |
### `google_sheets_append`
Append data to the end of a Google Sheets spreadsheet
#### Input
| Parameter | Type | Required | Description |
| ------------------------- | ------- | -------- | ------------------------------------------------------ |
| `accessToken` | string | Yes | The access token for the Google Sheets API |
| `spreadsheetId` | string | Yes | The ID of the spreadsheet to append to |
| `range` | string | No | The range of cells to append after |
| `values` | array | Yes | The data to append to the spreadsheet |
| `valueInputOption` | string | No | The format of the data to append |
| `insertDataOption` | string | No | How to insert the data \(OVERWRITE or INSERT_ROWS\) |
| `includeValuesInResponse` | boolean | No | Whether to include the appended values in the response |
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | json |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------------------ | ------ | ------------------------------ |
| `response` | object | Output from response |
| ↳ `data` | json | data of the response |
| ↳ `metadata` | json | metadata of the response |
| ↳ `updatedRange` | string | updatedRange of the response |
| ↳ `updatedRows` | number | updatedRows of the response |
| ↳ `updatedColumns` | number | updatedColumns of the response |
| ↳ `updatedCells` | number | updatedCells of the response |
| ↳ `tableRange` | string | tableRange of the response |
## Notes
- Category: `tools`
- Type: `google_sheets`

View File

@@ -3,9 +3,9 @@ title: Guesty
description: Interact with Guesty property management system
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="guesty"
color="#0051F8"
icon={true}
@@ -39,13 +39,10 @@ With Guesty, property managers can:
In Sim Studio, the Guesty integration enables your agents to interact directly with your property management system programmatically. This allows for powerful automation scenarios such as reservation management, guest communication, and operational workflows. Your agents can retrieve detailed reservation information by ID, including guest details, booking dates, and property information. They can also search for guests by phone number to access their profiles and booking history. This integration bridges the gap between your AI workflows and your property management operations, enabling seamless handling of hospitality tasks without manual intervention. By connecting Sim Studio with Guesty, you can automate guest communications, streamline check-in processes, manage reservation details, and enhance the overall guest experience through intelligent automation.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Access Guesty property management data including reservations and guest information. Retrieve reservation details by ID or search for guests by phone number.
## Tools
### `guesty_reservation`
@@ -54,19 +51,19 @@ Fetch reservation details from Guesty by reservation ID
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Your Guesty API token |
| `reservationId` | string | Yes | The ID of the reservation to fetch |
| Parameter | Type | Required | Description |
| --------------- | ------ | -------- | ---------------------------------- |
| `apiKey` | string | Yes | Your Guesty API token |
| `reservationId` | string | Yes | The ID of the reservation to fetch |
#### Output
| Parameter | Type |
| --------- | ---- |
| `id` | string |
| `guest` | string |
| `email` | string |
| `phone` | string |
| Parameter | Type |
| --------- | ------ |
| `id` | string |
| `guest` | string |
| `email` | string |
| `phone` | string |
### `guesty_guest`
@@ -74,49 +71,44 @@ Search for guests in Guesty by phone number
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Your Guesty API token |
| `phoneNumber` | string | Yes | The phone number to search for |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ------------------------------ |
| `apiKey` | string | Yes | Your Guesty API token |
| `phoneNumber` | string | Yes | The phone number to search for |
#### Output
| Parameter | Type |
| --------- | ---- |
| `guests` | string |
| Parameter | Type |
| ---------- | ------ |
| `guests` | string |
| `fullName` | string |
| `email` | string |
| `phone` | string |
| `address` | string |
| `city` | string |
| `country` | string |
| `email` | string |
| `phone` | string |
| `address` | string |
| `city` | string |
| `country` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `action` | string | Yes | Action |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ----------- |
| `action` | string | Yes | Action |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `id` | string | id of the response |
| ↳ `guest` | json | guest of the response |
| ↳ `checkIn` | string | checkIn of the response |
| Output | Type | Description |
| ------------ | ------ | ------------------------ |
| `response` | object | Output from response |
| ↳ `id` | string | id of the response |
| ↳ `guest` | json | guest of the response |
| ↳ `checkIn` | string | checkIn of the response |
| ↳ `checkOut` | string | checkOut of the response |
| ↳ `status` | string | status of the response |
| ↳ `listing` | json | listing of the response |
| ↳ `money` | json | money of the response |
| ↳ `guests` | json | guests of the response |
| ↳ `status` | string | status of the response |
| ↳ `listing` | json | listing of the response |
| ↳ `money` | json | money of the response |
| ↳ `guests` | json | guests of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Image Generator
description: Generate images
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="image_generator"
color="#4D5FFF"
icon={true}
@@ -43,13 +43,10 @@ With DALL-E, you can:
In Sim Studio, the DALL-E integration enables your agents to generate images programmatically as part of their workflows. This allows for powerful automation scenarios such as content creation, visual design, and creative ideation. Your agents can formulate detailed prompts, generate corresponding images, and incorporate these visuals into their outputs or downstream processes. This integration bridges the gap between natural language processing and visual content creation, enabling your agents to communicate not just through text but also through compelling imagery. By connecting Sim Studio with DALL-E, you can create agents that produce visual content on demand, illustrate concepts, generate design assets, and enhance user experiences with rich visual elements - all without requiring human intervention in the creative process.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Create high-quality images using DALL-E. Configure resolution, quality, style, and other parameters to get exactly the image you need.
## Tools
### `openai_dalle`
@@ -58,45 +55,40 @@ Generate images using OpenAI
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `prompt` | string | Yes | A text description of the desired image\(s\) |
| `model` | string | Yes | The DALL-E model to use \(dall-e-2 or dall-e-3\) |
| `size` | string | No | The size of the generated images \(1024x1024, 1024x1792, or 1792x1024\) |
| `quality` | string | No | The quality of the image \(standard or hd\) |
| `style` | string | No | The style of the image \(vivid or natural\) |
| `n` | number | No | The number of images to generate \(1-10\) |
| `apiKey` | string | Yes | Your OpenAI API key |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ----------------------------------------------------------------------- |
| `prompt` | string | Yes | A text description of the desired image\(s\) |
| `model` | string | Yes | The DALL-E model to use \(dall-e-2 or dall-e-3\) |
| `size` | string | No | The size of the generated images \(1024x1024, 1024x1792, or 1792x1024\) |
| `quality` | string | No | The quality of the image \(standard or hd\) |
| `style` | string | No | The style of the image \(vivid or natural\) |
| `n` | number | No | The number of images to generate \(1-10\) |
| `apiKey` | string | Yes | Your OpenAI API key |
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `image` | string |
| Parameter | Type |
| ---------- | ------ |
| `content` | string |
| `image` | string |
| `metadata` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `provider` | string | Yes | Provider |
| Parameter | Type | Required | Description |
| ---------- | ------ | -------- | ----------- |
| `provider` | string | Yes | Provider |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `image` | string | image of the response |
| ↳ `metadata` | json | metadata of the response |
| Output | Type | Description |
| ------------ | ------ | ------------------------ |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `image` | string | image of the response |
| ↳ `metadata` | json | metadata of the response |
## Notes

View File

@@ -4,8 +4,8 @@ description: Powerful tools to enhance your agentic workflows
---
import { Card, Cards } from 'fumadocs-ui/components/card'
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
Tools are powerful components in Sim Studio that allow your workflows to interact with external services, process data, and perform specialized tasks. They extend the capabilities of your agents and workflows by providing access to various APIs and services.
@@ -19,10 +19,14 @@ There are two primary ways to use tools in your Sim Studio workflows:
<Steps>
<Step>
<strong>As Standalone Blocks</strong>: Tools can be added as individual blocks on the canvas when you need deterministic, direct access to their functionality. This gives you precise control over when and how the tool is called.
<strong>As Standalone Blocks</strong>: Tools can be added as individual blocks on the canvas
when you need deterministic, direct access to their functionality. This gives you precise
control over when and how the tool is called.
</Step>
<Step>
<strong>As Agent Tools</strong>: Tools can be added to Agent blocks by clicking "Add tools" and configuring the required parameters. This allows agents to dynamically choose which tools to use based on the context and requirements of the task.
<strong>As Agent Tools</strong>: Tools can be added to Agent blocks by clicking "Add tools" and
configuring the required parameters. This allows agents to dynamically choose which tools to use
based on the context and requirements of the task.
</Step>
</Steps>
@@ -57,4 +61,4 @@ Tools typically return structured data that can be processed by subsequent block
- Metadata about the operation
- Status information
Refer to each tool's specific documentation to understand its exact output format.
Refer to each tool's specific documentation to understand its exact output format.

View File

@@ -3,9 +3,9 @@ title: Jina
description: Convert website content into text
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="jina"
color="#333333"
icon={true}
@@ -60,13 +60,10 @@ With the Jina AI integration in Sim Studio, you can:
This integration is particularly valuable for building agents that need to gather and process information from the web, conduct research, or analyze online content as part of their workflow.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Transform web content into clean, readable text using Jina AI
## Tools
### `jina_read_url`
@@ -75,34 +72,29 @@ Extract and process web content into clean, LLM-friendly text using Jina AI Read
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `url` | string | Yes | The URL to read and convert to markdown |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | --------------------------------------- |
| `url` | string | Yes | The URL to read and convert to markdown |
#### Output
This tool does not produce any outputs.
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `url` | string | Yes | URL - Enter URL to extract content from |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | --------------------------------------- |
| `url` | string | Yes | URL - Enter URL to extract content from |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| Output | Type | Description |
| ----------- | ------ | ----------------------- |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
## Notes
- Category: `tools`

View File

@@ -0,0 +1,174 @@
---
title: Jira
description: Interact with Jira
---
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
type="jira"
color="#E0E0E0"
icon={true}
iconSvg={`<svg className="block-icon"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 30 30"
focusable="false"
aria-hidden="true"
>
<path
fill="#1868DB"
d="M11.034 21.99h-2.22c-3.346 0-5.747-2.05-5.747-5.052h11.932c.619 0 1.019.44 1.019 1.062v12.007c-2.983 0-4.984-2.416-4.984-5.784zm5.893-5.967h-2.219c-3.347 0-5.748-2.013-5.748-5.015h11.933c.618 0 1.055.402 1.055 1.025V24.04c-2.983 0-5.02-2.416-5.02-5.784zm5.93-5.93h-2.219c-3.347 0-5.748-2.05-5.748-5.052h11.933c.618 0 1.018.439 1.018 1.025v12.007c-2.983 0-4.984-2.416-4.984-5.784z"
/>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[Jira](https://www.atlassian.com/jira) is a leading project management and issue tracking platform that helps teams plan, track, and manage agile software development projects effectively. As part of the Atlassian suite, Jira has become the industry standard for software development teams and project management professionals worldwide.
Jira provides a comprehensive set of tools for managing complex projects through its flexible and customizable workflow system. With its robust API and integration capabilities, Jira enables teams to streamline their development processes and maintain clear visibility of project progress.
Key features of Jira include:
- Agile Project Management: Support for Scrum and Kanban methodologies with customizable boards and workflows
- Issue Tracking: Sophisticated tracking system for bugs, stories, epics, and tasks with detailed reporting
- Workflow Automation: Powerful automation rules to streamline repetitive tasks and processes
- Advanced Search: JQL (Jira Query Language) for complex issue filtering and reporting
In Sim Studio, the Jira integration allows your agents to seamlessly interact with your project management workflow. This creates opportunities for automated issue creation, updates, and tracking as part of your AI workflows. The integration enables agents to create, retrieve, and update Jira issues programmatically, facilitating automated project management tasks and ensuring that important information is properly tracked and documented. By connecting Sim Studio with Jira, you can build intelligent agents that maintain project visibility while automating routine project management tasks, enhancing team productivity and ensuring consistent project tracking.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Connect to Jira workspaces to read, write, and update issues. Access content, metadata, and integrate Jira documentation into your workflows.
## Tools
### `jira_retrieve`
Retrieve detailed information about a specific Jira issue
#### Input
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | --------------------------------------------------------------------------------------- |
| `accessToken` | string | Yes | OAuth access token for Jira |
| `domain` | string | Yes | Your Jira domain \(e.g., yourcompany.atlassian.net\) |
| `projectId` | string | No | Jira project ID to retrieve issues from. If not provided, all issues will be retrieved. |
| `issueKey` | string | Yes | Jira issue key to retrieve \(e.g., PROJ-123\) |
| `cloudId` | string | No | Jira Cloud ID for the instance. If not provided, it will be fetched using the domain. |
#### Output
| Parameter | Type |
| ------------- | ------ |
| `ts` | string |
| `issueKey` | string |
| `summary` | string |
| `description` | string |
| `created` | string |
| `updated` | string |
### `jira_update`
Update a Jira issue
#### Input
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ------------------------------------------------------------------------------------- |
| `accessToken` | string | Yes | OAuth access token for Jira |
| `domain` | string | Yes | Your Jira domain \(e.g., yourcompany.atlassian.net\) |
| `projectId` | string | No | Jira project ID to update issues in. If not provided, all issues will be retrieved. |
| `issueKey` | string | Yes | Jira issue key to update |
| `summary` | string | No | New summary for the issue |
| `description` | string | No | New description for the issue |
| `status` | string | No | New status for the issue |
| `priority` | string | No | New priority for the issue |
| `assignee` | string | No | New assignee for the issue |
| `cloudId` | string | No | Jira Cloud ID for the instance. If not provided, it will be fetched using the domain. |
#### Output
| Parameter | Type |
| ---------- | ------ |
| `ts` | string |
| `issueKey` | string |
| `summary` | string |
| `success` | string |
### `jira_write`
Write a Jira issue
#### Input
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ------------------------------------------------------------------------------------- |
| `accessToken` | string | Yes | OAuth access token for Jira |
| `domain` | string | Yes | Your Jira domain \(e.g., yourcompany.atlassian.net\) |
| `projectId` | string | Yes | Project ID for the issue |
| `summary` | string | Yes | Summary for the issue |
| `description` | string | No | Description for the issue |
| `priority` | string | No | Priority for the issue |
| `assignee` | string | No | Assignee for the issue |
| `cloudId` | string | No | Jira Cloud ID for the instance. If not provided, it will be fetched using the domain. |
| `issueType` | string | Yes | Type of issue to create \(e.g., Task, Story, Bug, Sub-task\) |
#### Output
| Parameter | Type |
| ---------- | ------ |
| `ts` | string |
| `issueKey` | string |
| `summary` | string |
| `success` | string |
| `url` | string |
### `jira_bulk_read`
Retrieve multiple Jira issues in bulk
#### Input
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------------------------------- |
| `accessToken` | string | Yes | OAuth access token for Jira |
| `domain` | string | Yes | Your Jira domain \(e.g., yourcompany.atlassian.net\) |
| `projectId` | string | Yes | Jira project ID |
| `cloudId` | string | No | Jira cloud ID |
#### Output
| Parameter | Type |
| --------- | ----- |
| `issues` | array |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| --------------- | ------- | --------------------------- |
| `response` | object | Output from response |
| ↳ `ts` | string | ts of the response |
| ↳ `issueKey` | string | issueKey of the response |
| ↳ `summary` | string | summary of the response |
| ↳ `description` | string | description of the response |
| ↳ `created` | string | created of the response |
| ↳ `updated` | string | updated of the response |
| ↳ `success` | boolean | success of the response |
| ↳ `url` | string | url of the response |
## Notes
- Category: `tools`
- Type: `jira`

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -3,9 +3,9 @@ title: Notion
description: Manage Notion pages
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="notion"
color="#181C1E"
icon={true}
@@ -32,13 +32,10 @@ With Notion, you can:
In Sim Studio, the Notion integration enables your agents to interact directly with your Notion workspace programmatically. This allows for powerful automation scenarios such as knowledge management, content creation, and information retrieval. Your agents can read existing Notion pages to extract information, write to pages to update content, and create new pages from scratch. This integration bridges the gap between your AI workflows and your knowledge base, enabling seamless documentation and information management. By connecting Sim Studio with Notion, you can automate documentation processes, maintain up-to-date information repositories, generate reports, and organize information intelligently - all through your intelligent agents.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate with Notion to read content from pages, write new content, and create new pages.
## Tools
### `notion_read`
@@ -47,20 +44,20 @@ Read content from a Notion page
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `pageId` | string | Yes | The ID of the Notion page to read |
| `accessToken` | string | Yes | Notion OAuth access token |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | --------------------------------- |
| `pageId` | string | Yes | The ID of the Notion page to read |
| `accessToken` | string | Yes | Notion OAuth access token |
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `metadata` | string |
| Parameter | Type |
| ---------------- | ------ |
| `content` | string |
| `metadata` | string |
| `lastEditedTime` | string |
| `createdTime` | string |
| `url` | string |
| `createdTime` | string |
| `url` | string |
### `notion_write`
@@ -68,16 +65,16 @@ Append content to a Notion page
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `pageId` | string | Yes | The ID of the Notion page to append content to |
| `content` | string | Yes | The content to append to the page |
| `accessToken` | string | Yes | Notion OAuth access token |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------------------------- |
| `pageId` | string | Yes | The ID of the Notion page to append content to |
| `content` | string | Yes | The content to append to the page |
| `accessToken` | string | Yes | Notion OAuth access token |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| --------- | ------ |
| `content` | string |
### `notion_create_page`
@@ -86,41 +83,36 @@ Create a new page in Notion
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `parentType` | string | Yes | Type of parent: |
| `parentId` | string | Yes | ID of the parent page or database |
| `title` | string | No | Title of the page \(required for parent pages, not for databases\) |
| `properties` | json | No | JSON object of properties for database pages |
| `content` | string | No | Optional content to add to the page upon creation |
| `accessToken` | string | Yes | Notion OAuth access token |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ------------------------------------------------------------------ |
| `parentType` | string | Yes | Type of parent: |
| `parentId` | string | Yes | ID of the parent page or database |
| `title` | string | No | Title of the page \(required for parent pages, not for databases\) |
| `properties` | json | No | JSON object of properties for database pages |
| `content` | string | No | Optional content to add to the page upon creation |
| `accessToken` | string | Yes | Notion OAuth access token |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| --------- | ------ |
| `content` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `metadata` | any | metadata of the response |
| Output | Type | Description |
| ------------ | ------ | ------------------------ |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `metadata` | any | metadata of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Embeddings
description: Generate Open AI embeddings
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="openai"
color="#10a37f"
icon={true}
@@ -40,13 +40,10 @@ With OpenAI, you can:
In Sim Studio, the OpenAI integration enables your agents to leverage these powerful AI capabilities programmatically as part of their workflows. This allows for sophisticated automation scenarios that combine natural language understanding, content generation, and semantic analysis. Your agents can generate vector embeddings from text, which are numerical representations that capture semantic meaning, enabling advanced search, classification, and recommendation systems. Additionally, through the DALL-E integration, agents can create images from text descriptions, opening up possibilities for visual content generation. This integration bridges the gap between your workflow automation and state-of-the-art AI capabilities, enabling your agents to understand context, generate relevant content, and make intelligent decisions based on semantic understanding. By connecting Sim Studio with OpenAI, you can create agents that process information more intelligently, generate creative content, and deliver more personalized experiences to users.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Convert text into numerical vector representations using OpenAI
## Tools
### `openai_embeddings`
@@ -55,44 +52,39 @@ Generate embeddings from text using OpenAI
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | OpenAI API key |
| `input` | string | Yes | Text to generate embeddings for |
| `model` | string | No | Model to use for embeddings |
| `encoding_format` | string | No | The format to return the embeddings in |
| `user` | string | No | A unique identifier for the end-user |
| Parameter | Type | Required | Description |
| ----------------- | ------ | -------- | -------------------------------------- |
| `apiKey` | string | Yes | OpenAI API key |
| `input` | string | Yes | Text to generate embeddings for |
| `model` | string | No | Model to use for embeddings |
| `encoding_format` | string | No | The format to return the embeddings in |
| `user` | string | No | A unique identifier for the end-user |
#### Output
| Parameter | Type |
| --------- | ---- |
| `embeddings` | string |
| `model` | string |
| `usage` | string |
| Parameter | Type |
| -------------- | ------ |
| `embeddings` | string |
| `model` | string |
| `usage` | string |
| `total_tokens` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `input` | string | Yes | Input Text - Enter text to generate embeddings for |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | -------------------------------------------------- |
| `input` | string | Yes | Input Text - Enter text to generate embeddings for |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `embeddings` | json | embeddings of the response |
| ↳ `model` | string | model of the response |
| ↳ `usage` | json | usage of the response |
| Output | Type | Description |
| -------------- | ------ | -------------------------- |
| `response` | object | Output from response |
| ↳ `embeddings` | json | embeddings of the response |
| ↳ `model` | string | model of the response |
| ↳ `usage` | json | usage of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Perplexity
description: Use Perplexity AI chat models
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="perplexity"
color="#20808D"
icon={true}
@@ -34,13 +34,10 @@ With Perplexity AI, you can:
In Sim Studio, the Perplexity integration enables your agents to leverage these powerful AI capabilities programmatically as part of their workflows. This allows for sophisticated automation scenarios that combine natural language understanding, real-time information retrieval, and content generation. Your agents can formulate queries, receive comprehensive answers with citations, and incorporate this information into their decision-making processes or outputs. This integration bridges the gap between your workflow automation and access to current, reliable information, enabling your agents to make more informed decisions and provide more accurate responses. By connecting Sim Studio with Perplexity, you can create agents that stay current with the latest information, provide well-researched answers, and deliver more valuable insights to users - all without requiring manual research or information gathering.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Generate completions using Perplexity AI models with real-time knowledge and search capabilities. Create responses, answer questions, and generate content with customizable parameters.
## Tools
### `perplexity_chat`
@@ -49,45 +46,40 @@ Generate completions using Perplexity AI chat models
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Perplexity API key |
| `model` | string | Yes | Model to use for chat completions \(e.g., sonar, mistral\) |
| `messages` | array | Yes | Array of message objects with role and content |
| `max_tokens` | number | No | Maximum number of tokens to generate |
| `temperature` | number | No | Sampling temperature between 0 and 1 |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------------------------------------- |
| `apiKey` | string | Yes | Perplexity API key |
| `model` | string | Yes | Model to use for chat completions \(e.g., sonar, mistral\) |
| `messages` | array | Yes | Array of message objects with role and content |
| `max_tokens` | number | No | Maximum number of tokens to generate |
| `temperature` | number | No | Sampling temperature between 0 and 1 |
#### Output
| Parameter | Type |
| --------- | ---- |
| `content` | string |
| `model` | string |
| `usage` | string |
| Parameter | Type |
| ------------------- | ------ |
| `content` | string |
| `model` | string |
| `usage` | string |
| `completion_tokens` | string |
| `total_tokens` | string |
| `total_tokens` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `prompt` | string | Yes | User Prompt - Enter your prompt here... |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | --------------------------------------- |
| `prompt` | string | Yes | User Prompt - Enter your prompt here... |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| Output | Type | Description |
| ----------- | ------ | ----------------------- |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `model` | string | model of the response |
| ↳ `usage` | json | usage of the response |
| ↳ `model` | string | model of the response |
| ↳ `usage` | json | usage of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Pinecone
description: Use Pinecone vector database
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="pinecone"
color="#0D1117"
icon={true}
@@ -42,13 +42,10 @@ With Pinecone, you can:
In Sim Studio, the Pinecone integration enables your agents to leverage vector search capabilities programmatically as part of their workflows. This allows for sophisticated automation scenarios that combine natural language processing with semantic search and retrieval. Your agents can generate embeddings from text, store these vectors in Pinecone indexes, and perform similarity searches to find the most relevant information. This integration bridges the gap between your AI workflows and vector search infrastructure, enabling more intelligent information retrieval based on semantic meaning rather than exact keyword matching. By connecting Sim Studio with Pinecone, you can create agents that understand context, retrieve relevant information from large datasets, and deliver more accurate and personalized responses to users - all without requiring complex infrastructure management or specialized knowledge of vector databases.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Store, search, and retrieve vector embeddings using Pinecone
## Tools
### `pinecone_generate_embeddings`
@@ -57,20 +54,20 @@ Generate embeddings from text using Pinecone
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Pinecone API key |
| `model` | string | Yes | Model to use for generating embeddings |
| `inputs` | array | Yes | Array of text inputs to generate embeddings for |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ----------------------------------------------- |
| `apiKey` | string | Yes | Pinecone API key |
| `model` | string | Yes | Model to use for generating embeddings |
| `inputs` | array | Yes | Array of text inputs to generate embeddings for |
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | string |
| `model` | string |
| Parameter | Type |
| ------------- | ------ |
| `data` | string |
| `model` | string |
| `vector_type` | string |
| `usage` | string |
| `usage` | string |
### `pinecone_upsert_text`
@@ -78,17 +75,17 @@ Insert or update text records in a Pinecone index
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Pinecone API key |
| `indexHost` | string | Yes | Full Pinecone index host URL |
| `namespace` | string | Yes | Namespace to upsert records into |
| `records` | array | Yes | Record or array of records to upsert, each containing _id, text, and optional metadata |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | --------------------------------------------------------------------------------------- |
| `apiKey` | string | Yes | Pinecone API key |
| `indexHost` | string | Yes | Full Pinecone index host URL |
| `namespace` | string | Yes | Namespace to upsert records into |
| `records` | array | Yes | Record or array of records to upsert, each containing \_id, text, and optional metadata |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| ------------ | ------ |
| `statusText` | string |
### `pinecone_search_text`
@@ -97,23 +94,23 @@ Search for similar text in a Pinecone index
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Pinecone API key |
| `indexHost` | string | Yes | Full Pinecone index host URL |
| `namespace` | string | No | Namespace to search in |
| `searchQuery` | string | Yes | Text to search for |
| `topK` | string | No | Number of results to return |
| `fields` | array | No | Fields to return in the results |
| `filter` | object | No | Filter to apply to the search |
| `rerank` | object | No | Reranking parameters |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ------------------------------- |
| `apiKey` | string | Yes | Pinecone API key |
| `indexHost` | string | Yes | Full Pinecone index host URL |
| `namespace` | string | No | Namespace to search in |
| `searchQuery` | string | Yes | Text to search for |
| `topK` | string | No | Number of results to return |
| `fields` | array | No | Fields to return in the results |
| `filter` | object | No | Filter to apply to the search |
| `rerank` | object | No | Reranking parameters |
#### Output
| Parameter | Type |
| --------- | ---- |
| `matches` | string |
| `score` | string |
| Parameter | Type |
| ---------- | ------ |
| `matches` | string |
| `score` | string |
| `metadata` | string |
### `pinecone_search_vector`
@@ -122,24 +119,24 @@ Search for similar vectors in a Pinecone index
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Pinecone API key |
| `indexHost` | string | Yes | Full Pinecone index host URL |
| `namespace` | string | No | Namespace to search in |
| `vector` | array | Yes | Vector to search for |
| `topK` | number | No | Number of results to return |
| `filter` | object | No | Filter to apply to the search |
| `includeValues` | boolean | No | Include vector values in response |
| `includeMetadata` | boolean | No | Include metadata in response |
| Parameter | Type | Required | Description |
| ----------------- | ------- | -------- | --------------------------------- |
| `apiKey` | string | Yes | Pinecone API key |
| `indexHost` | string | Yes | Full Pinecone index host URL |
| `namespace` | string | No | Namespace to search in |
| `vector` | array | Yes | Vector to search for |
| `topK` | number | No | Number of results to return |
| `filter` | object | No | Filter to apply to the search |
| `includeValues` | boolean | No | Include vector values in response |
| `includeMetadata` | boolean | No | Include metadata in response |
#### Output
| Parameter | Type |
| --------- | ---- |
| `matches` | string |
| `score` | string |
| `values` | string |
| Parameter | Type |
| ---------- | ------ |
| `matches` | string |
| `score` | string |
| `values` | string |
| `metadata` | string |
### `pinecone_fetch`
@@ -148,46 +145,41 @@ Fetch vectors by ID from a Pinecone index
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Pinecone API key |
| `indexHost` | string | Yes | Full Pinecone index host URL |
| `ids` | array | Yes | Array of vector IDs to fetch |
| `namespace` | string | No | Namespace to fetch vectors from |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ------------------------------- |
| `apiKey` | string | Yes | Pinecone API key |
| `indexHost` | string | Yes | Full Pinecone index host URL |
| `ids` | array | Yes | Array of vector IDs to fetch |
| `namespace` | string | No | Namespace to fetch vectors from |
#### Output
| Parameter | Type |
| --------- | ---- |
| `matches` | string |
| `values` | string |
| Parameter | Type |
| ---------- | ------ |
| `matches` | string |
| `values` | string |
| `metadata` | string |
| `score` | string |
| `score` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `matches` | any | matches of the response |
| ↳ `upsertedCount` | any | upsertedCount of the response |
| ↳ `data` | any | data of the response |
| ↳ `model` | any | model of the response |
| ↳ `vector_type` | any | vector_type of the response |
| ↳ `usage` | any | usage of the response |
| Output | Type | Description |
| ----------------- | ------ | ----------------------------- |
| `response` | object | Output from response |
| ↳ `matches` | any | matches of the response |
| ↳ `upsertedCount` | any | upsertedCount of the response |
| ↳ `data` | any | data of the response |
| ↳ `model` | any | model of the response |
| ↳ `vector_type` | any | vector_type of the response |
| ↳ `usage` | any | usage of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Reddit
description: Access Reddit data and content
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="reddit"
color="#FF5700"
icon={true}
@@ -41,13 +41,10 @@ With Reddit, you can:
In Sim Studio, the Reddit integration enables your agents to programmatically access and analyze content from Reddit's vast ecosystem. This allows for powerful automation scenarios such as trend monitoring, content aggregation, and sentiment analysis. Your agents can retrieve popular posts from specific subreddits, extract valuable information, and incorporate these insights into their workflows. This integration bridges the gap between social media monitoring and your AI workflows, enabling more informed decision-making based on public discussions and trending topics. By connecting Sim Studio with Reddit, you can create agents that stay on top of relevant conversations, identify emerging trends, gather diverse perspectives, and deliver timely insights - all without requiring manual browsing of countless Reddit threads.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Access Reddit data to retrieve posts and comments from any subreddit. Get post titles, content, authors, scores, comments and more.
## Tools
### `reddit_hot_posts`
@@ -56,15 +53,15 @@ Fetch the most popular (hot) posts from a specified subreddit.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `subreddit` | string | Yes | The name of the subreddit to fetch posts from \(without the r/ prefix\) |
| `limit` | number | No | Maximum number of posts to return \(default: 10, max: 100\) |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------------------------------------------------------------------- |
| `subreddit` | string | Yes | The name of the subreddit to fetch posts from \(without the r/ prefix\) |
| `limit` | number | No | Maximum number of posts to return \(default: 10, max: 100\) |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| ----------- | ------ |
| `subreddit` | string |
### `reddit_get_posts`
@@ -73,17 +70,17 @@ Fetch posts from a subreddit with different sorting options
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `subreddit` | string | Yes | The name of the subreddit to fetch posts from \(without the r/ prefix\) |
| `sort` | string | No | Sort method for posts: |
| `limit` | number | No | Maximum number of posts to return \(default: 10, max: 100\) |
| `time` | string | No | Time filter for |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------------------------------------------------------------------- |
| `subreddit` | string | Yes | The name of the subreddit to fetch posts from \(without the r/ prefix\) |
| `sort` | string | No | Sort method for posts: |
| `limit` | number | No | Maximum number of posts to return \(default: 10, max: 100\) |
| `time` | string | No | Time filter for |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| ----------- | ------ |
| `subreddit` | string |
### `reddit_get_comments`
@@ -92,47 +89,42 @@ Fetch comments from a specific Reddit post
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `postId` | string | Yes | The ID of the Reddit post to fetch comments from |
| `subreddit` | string | Yes | The subreddit where the post is located \(without the r/ prefix\) |
| `sort` | string | No | Sort method for comments: |
| `limit` | number | No | Maximum number of comments to return \(default: 50, max: 100\) |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------------------------------------------------------------- |
| `postId` | string | Yes | The ID of the Reddit post to fetch comments from |
| `subreddit` | string | Yes | The subreddit where the post is located \(without the r/ prefix\) |
| `sort` | string | No | Sort method for comments: |
| `limit` | number | No | Maximum number of comments to return \(default: 50, max: 100\) |
#### Output
| Parameter | Type |
| --------- | ---- |
| `post` | string |
| `title` | string |
| `author` | string |
| `selftext` | string |
| Parameter | Type |
| ------------- | ------ |
| `post` | string |
| `title` | string |
| `author` | string |
| `selftext` | string |
| `created_utc` | string |
| `score` | string |
| `permalink` | string |
| `score` | string |
| `permalink` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `action` | string | No | Action |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ----------- |
| `action` | string | No | Action |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| Output | Type | Description |
| ------------- | ------ | ------------------------- |
| `response` | object | Output from response |
| ↳ `subreddit` | string | subreddit of the response |
| ↳ `posts` | json | posts of the response |
| ↳ `post` | json | post of the response |
| ↳ `comments` | json | comments of the response |
| ↳ `posts` | json | posts of the response |
| ↳ `post` | json | post of the response |
| ↳ `comments` | json | comments of the response |
## Notes

View File

@@ -0,0 +1,92 @@
---
title: S3
description: View S3 files
---
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
type="s3"
color="#E0E0E0"
icon={true}
iconSvg={`<svg className="block-icon"
preserveAspectRatio="xMidYMid"
viewBox="0 0 256 310"
xmlns="http://www.w3.org/2000/svg"
>
<path d="m20.624 53.686-20.624 10.314v181.02l20.624 10.254.124-.149v-201.297z" fill="#8c3123" />
<path d="m131 229-110.376 26.274v-201.588l110.376 25.701z" fill="#e05243" />
<path d="m81.178 187.866 46.818 5.96.294-.678.263-76.77-.557-.6-46.818 5.874z" fill="#8c3123" />
<path
d="m127.996 229.295 107.371 26.035.169-.269-.003-201.195-.17-.18-107.367 25.996z"
fill="#8c3123"
/>
<path d="m174.827 187.866-46.831 5.96v-78.048l46.831 5.874z" fill="#e05243" />
<path d="m174.827 89.631-46.831 8.535-46.818-8.535 46.759-12.256z" fill="#5e1f18" />
<path d="m174.827 219.801-46.831-8.591-46.818 8.591 46.761 13.053z" fill="#f2b0a9" />
<path
d="m81.178 89.631 46.818-11.586.379-.117v-77.615l-.379-.313-46.818 23.413z"
fill="#8c3123"
/>
<path d="m174.827 89.631-46.831-11.586v-78.045l46.831 23.413z" fill="#e05243" />
<path
d="m127.996 309.428-46.823-23.405v-66.217l46.823 11.582.689.783-.187 75.906z"
fill="#8c3123"
/>
<g fill="#e05243">
<path d="m127.996 309.428 46.827-23.405v-66.217l-46.827 11.582z" />
<path d="m235.367 53.686 20.633 10.314v181.02l-20.633 10.31z" />
</g>
</svg>`}
/>
## Usage Instructions
Retrieve and view files from Amazon S3 buckets using presigned URLs.
## Tools
### `s3_get_object`
Retrieve an object from an AWS S3 bucket
#### Input
| Parameter | Type | Required | Description |
| ----------------- | ------ | -------- | -------------------------------------------------------------------------------- |
| `accessKeyId` | string | Yes | Your AWS Access Key ID |
| `secretAccessKey` | string | Yes | Your AWS Secret Access Key |
| `s3Uri` | string | Yes | S3 Object URL \(e.g., https://bucket-name.s3.region.amazonaws.com/path/to/file\) |
#### Output
| Parameter | Type |
| -------------- | ------ |
| `metadata` | string |
| `size` | string |
| `name` | string |
| `lastModified` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | -------------------------------------------- |
| `accessKeyId` | string | Yes | Access Key ID - Enter your AWS Access Key ID |
### Outputs
| Output | Type | Description |
| ------------ | ------ | ------------------------ |
| `response` | object | Output from response |
| ↳ `url` | string | url of the response |
| ↳ `metadata` | json | metadata of the response |
## Notes
- Category: `tools`
- Type: `s3`

View File

@@ -0,0 +1,123 @@
---
title: Serper
description: Search the web using Serper
---
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
type="serper"
color="#2B3543"
icon={true}
iconSvg={`<svg className="block-icon" viewBox="0 0 654 600" xmlns="http://www.w3.org/2000/svg" >
<path
d="M324 38C356 37 389 36 417 47C452 56 484 72 509 94C539 118 561 145 577 176C593 205 601 238 606 271C610 343 590 403 552 452C528 482 499 507 467 523C438 539 404 547 372 552C297 556 235 534 184 492C133 449 103 392 93 330C93 292 89 255 102 224C112 189 128 158 149 132C194 78 255 46 322 38"
fill="rgb(71,97,118)"
/>
<path
d="M326 39C286 43 250 55 217 75C185 94 156 120 137 150C100 204 87 266 95 336C107 402 142 462 198 502C249 538 309 556 378 551C415 545 449 533 477 516C511 497 535 472 557 445C592 393 611 333 605 265C595 196 563 140 511 95C484 73 452 57 419 48C390 38 359 38 327 39"
fill="rgb(71,97,119)"
/>
<path
d="M342 40C407 42 465 61 513 103C541 126 562 155 576 184C592 217 600 251 600 288C602 357 579 416 535 465C510 493 478 515 445 528C416 541 385 546 352 546C284 548 225 523 178 481C130 436 103 379 96 313C94 244 113 186 151 138C179 103 209 80 245 64C276 50 307 44 340 41"
fill="rgb(71,97,119)"
/>
<path
d="M344 42C309 44 277 51 247 64C209 81 180 103 153 136C114 186 95 244 96 312C104 379 131 435 177 480C225 522 284 547 351 546C385 545 416 540 443 528C478 514 509 492 533 466C578 416 601 357 600 289C599 251 591 217 576 187C561 156 541 127 515 105C466 63 409 44 346 41"
fill="rgb(71,97,118)"
/>
<path
d="M327 81C378 78 423 89 462 114C511 144 546 196 557 248C567 306 559 363 530 406C498 457 448 492 395 503C338 513 282 506 239 477C192 450 156 402 143 351C126 296 137 235 163 190C198 130 258 89 325 82"
fill="rgb(44,56,71)"
/>
<path
d="M329 83C260 89 199 129 165 189C138 235 127 296 144 349C157 401 193 449 237 475C282 505 338 512 393 503C448 491 497 457 529 408C558 363 566 306 557 250C545 196 511 145 464 116C424 91 380 79 330 82"
fill="rgb(43,55,70)"
/>
<path
d="M334 87C381 83 423 94 458 117C510 148 544 201 554 258C562 317 551 370 521 412C487 460 440 491 385 500C331 507 281 499 241 473C191 444 157 394 145 339C136 284 143 227 171 186C207 129 265 91 332 87"
fill="rgb(41,53,67)"
/>
<path
d="M335 88C267 90 208 129 173 184C144 227 137 284 145 338C158 393 191 443 240 471C281 498 331 506 384 500C439 490 487 459 519 413C550 370 561 317 554 259C543 201 509 149 460 119C424 96 383 85 337 88"
fill="rgb(41,53,67)"
/>
<path
d="M347 166C361 164 373 169 387 168C412 180 437 193 447 221C449 232 443 243 434 248C403 245 398 204 365 207C338 206 315 210 297 228C294 238 289 257 303 260C337 280 382 276 417 292C436 300 448 314 455 330C457 349 462 373 449 385C435 408 413 418 391 427C361 429 328 436 304 421C280 413 260 392 250 370C246 356 255 343 268 343C293 360 316 398 356 389C382 390 409 380 416 357C389 295 298 335 260 276C246 256 248 233 258 214C279 184 309 167 346 167"
fill="rgb(121,172,205)"
/>
<path
d="M349 168C312 167 280 183 259 212C249 233 247 256 260 274C299 334 390 294 422 354C409 381 382 391 357 389C316 399 293 361 272 342C255 344 247 356 251 368C260 391 280 412 302 420C328 435 361 428 389 428C412 417 434 407 447 386C461 373 456 349 456 332C428 270 351 289 304 262C288 258 293 239 295 229C314 209 338 204 363 204C398 203 403 244 431 249C443 242 448 232 449 222C436 193 412 181 388 172C374 170 363 166 350 167"
fill="rgb(125,177,211)"
/>
<path
d="M349 169C386 169 425 185 441 220C444 231 441 240 432 243C409 237 402 209 380 206C347 200 314 201 293 226C290 238 286 256 297 262C332 283 375 281 411 295C431 304 446 317 452 337C455 360 452 383 434 396C415 415 391 421 366 426C338 430 316 422 295 413C276 402 261 385 254 366C254 353 261 343 275 348C290 381 325 398 360 394C388 395 411 382 420 360C425 342 413 334 404 327C359 304 298 318 265 276C253 254 255 235 261 214C280 187 314 173 346 170"
fill="rgb(137,195,233)"
/>
<path
d="M349 171C316 173 281 187 263 214C256 235 254 254 266 273C300 316 359 304 401 325C413 333 426 342 422 358C412 382 388 396 363 395C326 399 290 382 278 348C262 345 254 353 253 365C261 384 277 401 292 411C316 421 338 429 365 426C390 420 415 414 432 398C451 383 454 360 453 338C445 317 430 305 413 296C375 282 332 284 299 264C285 257 288 239 291 228C304 212 319 205 336 202C378 193 403 213 423 244C438 244 443 232 441 222C425 186 388 171 352 170"
fill="rgb(139,198,236)"
/>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[Serper](https://www.serper.com/) is a Google Search API that provides developers with programmatic access to Google search results. It offers a reliable, high-performance way to integrate Google search capabilities into applications without the complexity of web scraping or the limitations of other search APIs.
With Serper, you can:
- **Access Google search results**: Get structured data from Google search results programmatically
- **Perform different search types**: Run web searches, image searches, news searches, and more
- **Retrieve rich metadata**: Obtain titles, snippets, URLs, and other relevant information from search results
- **Scale your applications**: Build search-powered features with a reliable and fast API
- **Avoid rate limiting**: Get consistent access to search results without worrying about IP blocks
In Sim Studio, the Serper integration enables your agents to leverage the power of web search as part of their workflows. This allows for sophisticated automation scenarios that require up-to-date information from the internet. Your agents can formulate search queries, retrieve relevant results, and use this information to make decisions or provide responses. This integration bridges the gap between your workflow automation and the vast knowledge available on the web, enabling your agents to access real-time information without manual intervention. By connecting Sim Studio with Serper, you can create agents that stay current with the latest information, provide more accurate responses, and deliver more value to users.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Access real-time web search results with Serper
## Tools
### `serper_search`
A powerful web search tool that provides access to Google search results through Serper.dev API. Supports different types of searches including regular web search, news, places, and images, with each result containing relevant metadata like titles, URLs, snippets, and type-specific information.
#### Input
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | -------------------------------- |
| `query` | string | Yes | The search query |
| `apiKey` | string | Yes | Serper API Key |
| `num` | number | No | Number of results to return |
| `gl` | string | No | Country code for search results |
| `hl` | string | No | Language code for search results |
| `type` | string | No | Type of search to perform |
#### Output
| Parameter | Type |
| --------- | ----- |
| `results` | array |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ----------------------------------------- |
| `query` | string | Yes | Search Query - Enter your search query... |
### Outputs
| Output | Type | Description |
| ----------------- | ------ | ----------------------------- |
| `response` | object | Output from response |
| ↳ `searchResults` | json | searchResults of the response |
## Notes
- Category: `tools`
- Type: `serper`

View File

@@ -0,0 +1,100 @@
---
title: Slack
description: Send a message to Slack
---
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
type="slack"
color="#611f69"
icon={true}
iconSvg={`<svg className="block-icon" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" >
<g>
<path
d="M53.8412698,161.320635 C53.8412698,176.152381 41.8539683,188.139683 27.0222222,188.139683 C12.1904762,188.139683 0.203174603,176.152381 0.203174603,161.320635 C0.203174603,146.488889 12.1904762,134.501587 27.0222222,134.501587 L53.8412698,134.501587 L53.8412698,161.320635 Z M67.2507937,161.320635 C67.2507937,146.488889 79.2380952,134.501587 94.0698413,134.501587 C108.901587,134.501587 120.888889,146.488889 120.888889,161.320635 L120.888889,228.368254 C120.888889,243.2 108.901587,255.187302 94.0698413,255.187302 C79.2380952,255.187302 67.2507937,243.2 67.2507937,228.368254 L67.2507937,161.320635 Z"
fill="#E01E5A"
/>
<path
d="M94.0698413,53.6380952 C79.2380952,53.6380952 67.2507937,41.6507937 67.2507937,26.8190476 C67.2507937,11.9873016 79.2380952,-7.10542736e-15 94.0698413,-7.10542736e-15 C108.901587,-7.10542736e-15 120.888889,11.9873016 120.888889,26.8190476 L120.888889,53.6380952 L94.0698413,53.6380952 Z M94.0698413,67.2507937 C108.901587,67.2507937 120.888889,79.2380952 120.888889,94.0698413 C120.888889,108.901587 108.901587,120.888889 94.0698413,120.888889 L26.8190476,120.888889 C11.9873016,120.888889 0,108.901587 0,94.0698413 C0,79.2380952 11.9873016,67.2507937 26.8190476,67.2507937 L94.0698413,67.2507937 Z"
fill="#36C5F0"
/>
<path
d="M201.549206,94.0698413 C201.549206,79.2380952 213.536508,67.2507937 228.368254,67.2507937 C243.2,67.2507937 255.187302,79.2380952 255.187302,94.0698413 C255.187302,108.901587 243.2,120.888889 228.368254,120.888889 L201.549206,120.888889 L201.549206,94.0698413 Z M188.139683,94.0698413 C188.139683,108.901587 176.152381,120.888889 161.320635,120.888889 C146.488889,120.888889 134.501587,108.901587 134.501587,94.0698413 L134.501587,26.8190476 C134.501587,11.9873016 146.488889,-1.42108547e-14 161.320635,-1.42108547e-14 C176.152381,-1.42108547e-14 188.139683,11.9873016 188.139683,26.8190476 L188.139683,94.0698413 Z"
fill="#2EB67D"
/>
<path
d="M161.320635,201.549206 C176.152381,201.549206 188.139683,213.536508 188.139683,228.368254 C188.139683,243.2 176.152381,255.187302 161.320635,255.187302 C146.488889,255.187302 134.501587,243.2 134.501587,228.368254 L134.501587,201.549206 L161.320635,201.549206 Z M161.320635,188.139683 C146.488889,188.139683 134.501587,176.152381 134.501587,161.320635 C134.501587,146.488889 146.488889,134.501587 161.320635,134.501587 L228.571429,134.501587 C243.403175,134.501587 255.390476,146.488889 255.390476,161.320635 C255.390476,176.152381 243.403175,188.139683 228.571429,188.139683 L161.320635,188.139683 Z"
fill="#ECB22E"
/>
</g>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[Slack](https://www.slack.com/) is a business communication platform that offers teams a unified place for messaging, tools, and files.
<iframe
width="100%"
height="400"
src="https://www.youtube.com/embed/J5jz3UaWmE8"
title="Slack Integration with Sim Studio"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
></iframe>
With Slack, you can:
- **Automate agent notifications**: Send real-time updates from your Sim Studio agents to any Slack channel
- **Create webhook endpoints**: Configure Slack bots as webhooks to trigger Sim Studio workflows from Slack activities
- **Enhance agent workflows**: Integrate Slack messaging into your agents to deliver results, alerts, and status updates
In Sim Studio, the Slack integration enables your agents to programmatically send messages to any Slack channel or user as part of their workflows. This allows for powerful automation scenarios such as sending notifications, alerts, updates, and reports directly to your team's communication hub. Your agents can deliver timely information, share results from processes they've completed, or alert team members when attention is needed. This integration bridges the gap between your AI workflows and your team's communication, ensuring everyone stays informed without manual intervention. By connecting Sim Studio with Slack, you can create agents that keep your team updated with relevant information at the right time, enhance collaboration by sharing insights automatically, and reduce the need for manual status updates - all while leveraging your existing Slack workspace where your team already communicates.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Send messages to any Slack channel using OAuth authentication. Integrate automated notifications and alerts into your workflow to keep your team informed.
## Tools
### `slack_message`
Send messages to Slack channels or users through the Slack API. Enables direct communication and notifications with timestamp tracking and channel confirmation.
#### Input
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | --------------------------------------- |
| `apiKey` | string | Yes | Your Slack API token |
| `channel` | string | Yes | Target Slack channel \(e.g., #general\) |
| `text` | string | Yes | Message text to send |
#### Output
| Parameter | Type |
| --------- | ------ |
| `ts` | string |
| `channel` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ------------------------------------------ |
| `apiKey` | string | Yes | OAuth Token - Enter your Slack OAuth token |
### Outputs
| Output | Type | Description |
| ----------- | ------ | ----------------------- |
| `response` | object | Output from response |
| ↳ `ts` | string | ts of the response |
| ↳ `channel` | string | channel of the response |
## Notes
- Category: `tools`
- Type: `slack`

View File

@@ -3,9 +3,9 @@ title: Stagehand Extract
description: Extract data from websites
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="stagehand"
color="#FFC83C"
icon={true}
@@ -188,13 +188,10 @@ With Stagehand, you can:
In Sim Studio, the Stagehand integration enables your agents to extract structured data from webpages using Browserbase and OpenAI. This allows for powerful automation scenarios such as data extraction, data analysis, and data integration. Your agents can extract structured data from webpages, save the extracted data to a database, and automate workflows to extract data from webpages. This integration bridges the gap between your AI workflows and your data management system, enabling seamless data extraction and integration. By connecting Sim Studio with Stagehand, you can automate data extraction processes, maintain up-to-date information repositories, generate reports, and organize information intelligently - all through your intelligent agents.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Use Stagehand to extract structured data from webpages using Browserbase and OpenAI.
## Tools
### `stagehand_extract`
@@ -203,38 +200,33 @@ Extract structured data from a webpage using Stagehand
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `instruction` | string | Yes | Instructions for extraction |
| `schema` | json | Yes | JSON schema defining the structure of the data to extract |
| `apiKey` | string | Yes | OpenAI API key for extraction \(required by Stagehand\) |
| `url` | string | Yes | URL of the webpage to extract data from |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | --------------------------------------------------------- |
| `instruction` | string | Yes | Instructions for extraction |
| `schema` | json | Yes | JSON schema defining the structure of the data to extract |
| `apiKey` | string | Yes | OpenAI API key for extraction \(required by Stagehand\) |
| `url` | string | Yes | URL of the webpage to extract data from |
#### Output
| Parameter | Type |
| --------- | ---- |
| `data` | json |
| `data` | json |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `url` | string | Yes | URL - Enter the URL of the website to extract data from |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ------------------------------------------------------- |
| `url` | string | Yes | URL - Enter the URL of the website to extract data from |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| Output | Type | Description |
| ---------- | ------ | -------------------- |
| `response` | object | Output from response |
| ↳ `data` | json | data of the response |
| ↳ `data` | json | data of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Stagehand Agent
description: Autonomous web browsing agent
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="stagehand_agent"
color="#FFC83C"
icon={true}
@@ -192,13 +192,10 @@ With Stagehand, you can:
In Sim Studio, the Stagehand integration enables your agents to seamlessly interact with web-based systems as part of their workflows. This allows for sophisticated automation scenarios that bridge the gap between your AI agents and the vast information and functionality available on the web. Your agents can search for information, interact with web applications, extract data from websites, and incorporate these capabilities into their decision-making processes. By connecting Sim Studio with Stagehand, you can create agents that extend beyond API-based integrations to navigate the web just as a human would - filling forms, clicking buttons, reading content, and extracting valuable information to complete their tasks more effectively.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Use Stagehand to create an autonomous web browsing agent that can navigate across websites, perform tasks, and return structured data.
## Tools
### `stagehand_agent`
@@ -207,43 +204,38 @@ Run an autonomous web agent to complete tasks and extract structured data
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `task` | string | Yes | The task to complete or goal to achieve on the website |
| `startUrl` | string | Yes | URL of the webpage to start the agent on |
| `outputSchema` | json | No | Optional JSON schema defining the structure of data the agent should return |
| `variables` | json | No | Optional variables to substitute in the task \(format: \{key: value\}\). Reference in task using %key% |
| `apiKey` | string | Yes | OpenAI API key for agent execution \(required by Stagehand\) |
| Parameter | Type | Required | Description |
| -------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------ |
| `task` | string | Yes | The task to complete or goal to achieve on the website |
| `startUrl` | string | Yes | URL of the webpage to start the agent on |
| `outputSchema` | json | No | Optional JSON schema defining the structure of data the agent should return |
| `variables` | json | No | Optional variables to substitute in the task \(format: \{key: value\}\). Reference in task using %key% |
| `apiKey` | string | Yes | OpenAI API key for agent execution \(required by Stagehand\) |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| ------------- | ------ |
| `agentResult` | string |
| `completed` | string |
| `message` | string |
| `actions` | string |
| `completed` | string |
| `message` | string |
| `actions` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `startUrl` | string | Yes | Starting URL - Enter the starting URL for the agent |
| Parameter | Type | Required | Description |
| ---------- | ------ | -------- | --------------------------------------------------- |
| `startUrl` | string | Yes | Starting URL - Enter the starting URL for the agent |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `agentResult` | json | agentResult of the response |
| ↳ `structuredOutput` | any | structuredOutput of the response |
| Output | Type | Description |
| -------------------- | ------ | -------------------------------- |
| `response` | object | Output from response |
| ↳ `agentResult` | json | agentResult of the response |
| ↳ `structuredOutput` | any | structuredOutput of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Supabase
description: Use Supabase database
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="supabase"
color="#1C1C1C"
icon={true}
@@ -66,13 +66,10 @@ With Supabase, you can:
In Sim Studio, the Supabase integration enables your agents to interact with your Supabase projects programmatically. This allows for powerful automation scenarios such as data querying, record creation, user management, and file operations. Your agents can retrieve information from your database, insert new records, update existing data, and leverage Supabase's authentication and storage capabilities as part of their workflows. This integration bridges the gap between your AI workflows and your application's data layer, enabling more sophisticated and data-driven automations. By connecting Sim Studio with Supabase, you can create agents that maintain data consistency across systems, trigger actions based on database changes, perform complex data operations, and build workflows that leverage your application's existing data infrastructure - all without requiring manual intervention or custom code.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate with Supabase to manage your database, authentication, storage, and more. Query data, manage users, and interact with Supabase services directly.
## Tools
### `supabase_query`
@@ -81,15 +78,15 @@ Query data from a Supabase table
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Your Supabase client anon key |
| `projectId` | string | Yes | Your Supabase project ID \(e.g., jdrkgepadsdopsntdlom\) |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ------------------------------------------------------- |
| `apiKey` | string | Yes | Your Supabase client anon key |
| `projectId` | string | Yes | Your Supabase project ID \(e.g., jdrkgepadsdopsntdlom\) |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| --------- | ------ |
| `message` | string |
| `results` | string |
@@ -99,38 +96,33 @@ Insert data into a Supabase table
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Your Supabase client anon key |
| `projectId` | string | Yes | Your Supabase project ID \(e.g., jdrkgepadsdopsntdlom\) |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ------------------------------------------------------- |
| `apiKey` | string | Yes | Your Supabase client anon key |
| `projectId` | string | Yes | Your Supabase project ID \(e.g., jdrkgepadsdopsntdlom\) |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| --------- | ------ |
| `message` | string |
| `results` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `operation` | string | Yes | Operation |
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| Output | Type | Description |
| ----------- | ------ | ----------------------- |
| `response` | object | Output from response |
| ↳ `message` | string | message of the response |
| ↳ `results` | json | results of the response |
| ↳ `results` | json | results of the response |
## Notes

View File

@@ -0,0 +1,128 @@
---
title: Tavily
description: Search and extract information
---
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
type="tavily"
color="#0066FF"
icon={true}
iconSvg={`<svg className="block-icon" viewBox="0 0 600 600" xmlns="http://www.w3.org/2000/svg" >
<path
d="M432 291C415 294 418 313 417 326C380 328 342 327 306 328C316 344 312 368 301 381C339 384 377 383 414 384C419 393 415 404 419 412C424 419 431 422 437 421C554 393 539 314 425 290"
fill="rgb(248,202,81)"
/>
<path
d="M263 87C260 88 257 89 255 93C237 121 219 147 204 174C203 184 206 191 212 195C222 198 231 196 239 197C241 238 240 277 241 316C257 307 276 309 294 308C296 273 295 234 296 199C309 196 328 200 333 183C314 149 299 103 267 83"
fill="rgb(109,164,249)"
/>
<path
d="M314 356L316 354C386 355 457 354 527 355C504 385 469 400 440 421C431 421 424 418 421 411C415 402 420 389 416 383C384 371 284 406 312 358"
fill="rgb(250,188,28)"
/>
<path
d="M314 356C281 405 384 369 410 384C422 388 415 402 421 409C425 417 431 420 437 420C469 400 504 384 529 360C456 355 386 356 317 355"
fill="rgb(251,186,23)"
/>
<path
d="M264 325C271 325 290 329 283 339C236 384 186 436 139 482C133 481 133 477 131 474C133 477 133 481 135 482C174 490 213 472 250 466C261 447 246 435 235 426C254 406 271 389 289 372C303 352 287 324 266 326"
fill="rgb(251,156,158)"
/>
<path
d="M263 327C260 328 256 328 253 330C233 348 216 367 197 384C188 381 183 371 175 368C166 367 161 369 156 372C148 409 133 447 133 482C173 430 281 366 277 323"
fill="rgb(248,56,63)"
/>
<path
d="M258 326C235 341 218 365 198 382C186 376 176 360 161 368L160 369L157 369C149 378 150 391 146 401C150 391 149 379 157 370C174 359 185 376 195 385C219 365 238 337 262 325"
fill="rgb(242,165,165)"
/>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[Tavily](https://www.tavily.com/) is an AI-powered search API designed specifically for LLM applications. It provides reliable, real-time information retrieval capabilities with features optimized for AI use cases, including semantic search, content extraction, and structured data retrieval.
With Tavily, you can:
- **Perform contextual searches**: Get relevant results based on semantic understanding rather than just keyword matching
- **Extract structured content**: Pull specific information from web pages in a clean, usable format
- **Access real-time information**: Retrieve up-to-date data from across the web
- **Process multiple URLs simultaneously**: Extract content from several web pages in a single request
- **Receive AI-optimized results**: Get search results specifically formatted for consumption by AI systems
In Sim Studio, the Tavily integration enables your agents to search the web and extract information as part of their workflows. This allows for sophisticated automation scenarios that require up-to-date information from the internet. Your agents can formulate search queries, retrieve relevant results, and extract content from specific web pages to inform their decision-making processes. This integration bridges the gap between your workflow automation and the vast knowledge available on the web, enabling your agents to access real-time information without manual intervention. By connecting Sim Studio with Tavily, you can create agents that stay current with the latest information, provide more accurate responses, and deliver more value to users.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Access Tavily
## Tools
### `tavily_search`
Perform AI-powered web searches using Tavily
#### Input
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------------- |
| `query` | string | Yes | The search query to execute |
| `max_results` | number | No | Maximum number of results \(1-20\) |
| `apiKey` | string | Yes | Tavily API Key |
#### Output
| Parameter | Type |
| ------------- | ------ |
| `query` | string |
| `results` | string |
| `url` | string |
| `snippet` | string |
| `raw_content` | string |
### `tavily_extract`
Extract raw content from multiple web pages simultaneously using Tavily
#### Input
| Parameter | Type | Required | Description |
| --------------- | ------ | -------- | ---------------------------------------------------------------------------- |
| `urls` | string | Yes | URL or array of URLs to extract content from |
| `apiKey` | string | Yes | Tavily API Key |
| `extract_depth` | string | No | The depth of extraction \(basic=1 credit/5 URLs, advanced=2 credits/5 URLs\) |
#### Output
| Parameter | Type |
| ---------------- | ------ |
| `results` | string |
| `failed_results` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ----------- | ------ | ----------------------- |
| `response` | object | Output from response |
| ↳ `results` | json | results of the response |
| ↳ `answer` | any | answer of the response |
| ↳ `query` | string | query of the response |
| ↳ `content` | string | content of the response |
| ↳ `title` | string | title of the response |
| ↳ `url` | string | url of the response |
## Notes
- Category: `tools`
- Type: `tavily`

View File

@@ -3,38 +3,53 @@ title: Telegram
description: Send a message through Telegram
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="telegram"
color="#E0E0E0"
icon={true}
iconSvg={`<svg className="block-icon"
viewBox="-5 0 41 33"
fill="none"
xmlns="http://www.w3.org/2000/svg"
viewBox="-5 0 41 33"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<circle cx="16" cy="16" r="14" fill="url(#paint0_linear_87_7225)"/>
<path
d="M22.9866 10.2088C23.1112 9.40332 22.3454 8.76755 21.6292 9.082L7.36482 15.3448C6.85123 15.5703 6.8888 16.3483 7.42147 16.5179L10.3631 17.4547C10.9246 17.6335 11.5325 17.541 12.0228 17.2023L18.655 12.6203C18.855 12.4821 19.073 12.7665 18.9021 12.9426L14.1281 17.8646C13.665 18.3421 13.7569 19.1512 14.314 19.5005L19.659 22.8523C20.2585 23.2282 21.0297 22.8506 21.1418 22.1261L22.9866 10.2088Z"
fill="white"/>
<defs>
<linearGradient id="paint0_linear_87_7225" x1="16" y1="2" x2="16" y2="30"
gradientUnits="userSpaceOnUse">
<stop stopColor="#37BBFE"/>
<stop offset="1" stopColor="#007DBB"/>
</linearGradient>
</defs>
<circle cx="16" cy="16" r="14" fill="url(#paint0_linear_87_7225)" />
<path
d="M22.9866 10.2088C23.1112 9.40332 22.3454 8.76755 21.6292 9.082L7.36482 15.3448C6.85123 15.5703 6.8888 16.3483 7.42147 16.5179L10.3631 17.4547C10.9246 17.6335 11.5325 17.541 12.0228 17.2023L18.655 12.6203C18.855 12.4821 19.073 12.7665 18.9021 12.9426L14.1281 17.8646C13.665 18.3421 13.7569 19.1512 14.314 19.5005L19.659 22.8523C20.2585 23.2282 21.0297 22.8506 21.1418 22.1261L22.9866 10.2088Z"
fill="white"
/>
<defs>
<linearGradient
id="paint0_linear_87_7225"
x1="16"
y1="2"
x2="16"
y2="30"
gradientUnits="userSpaceOnUse"
>
<stop stopColor="#37BBFE" />
<stop offset="1" stopColor="#007DBB" />
</linearGradient>
</defs>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[Telegram](https://telegram.org) is a secure, cloud-based messaging platform that enables fast and reliable communication across devices and platforms. With over 700 million monthly active users, Telegram has established itself as one of the world's leading messaging services, known for its security, speed, and powerful API capabilities.
<iframe width="100%" height="400" src="https://www.youtube.com/embed/nhq2Q8fndFg?start=62" title="Use Telegram with Sim Studio" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen ></iframe>
<iframe
width="100%"
height="400"
src="https://www.youtube.com/embed/nhq2Q8fndFg?start=62"
title="Use Telegram with Sim Studio"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
></iframe>
Telegram's Bot API provides a robust framework for creating automated messaging solutions and integrating communication features into applications. With support for rich media, inline keyboards, and custom commands, Telegram bots can facilitate sophisticated interaction patterns and automated workflows.
@@ -52,8 +67,6 @@ In Sim Studio, the Telegram integration enables your agents to leverage these po
Send messages to any Telegram channel using your Bot API key. Integrate automated notifications and alerts into your workflow to keep your team informed.
## Tools
### `telegram_message`
@@ -62,39 +75,34 @@ Send messages to Telegram channels or users through the Telegram Bot API. Enable
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Yes | Your Telegram Bot API Token |
| `chatId` | string | Yes | Target Telegram chat ID |
| `text` | string | Yes | Message text to send |
| Parameter | Type | Required | Description |
| ---------- | ------ | -------- | --------------------------- |
| `botToken` | string | Yes | Your Telegram Bot API Token |
| `chatId` | string | Yes | Target Telegram chat ID |
| `text` | string | Yes | Message text to send |
#### Output
| Parameter | Type |
| --------- | ---- |
| `ok` | string |
| `date` | string |
| Parameter | Type |
| --------- | ------ |
| `ok` | string |
| `date` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `botToken` | string | Yes | Bot Token - Enter your Telegram Bot Token |
| Parameter | Type | Required | Description |
| ---------- | ------ | -------- | ----------------------------------------- |
| `botToken` | string | Yes | Bot Token - Enter your Telegram Bot Token |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `ok` | boolean | ok of the response |
| ↳ `result` | json | result of the response |
| Output | Type | Description |
| ---------- | ------- | ---------------------- |
| `response` | object | Output from response |
| ↳ `ok` | boolean | ok of the response |
| ↳ `result` | json | result of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Thinking
description: Forces model to outline its thought process.
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="thinking"
color="#181C1E"
icon={true}
@@ -35,13 +35,10 @@ Research has shown that prompting language models to "think step by step" can si
In Sim Studio, the Thinking tool creates a structured opportunity for your agents to engage in this kind of deliberate reasoning. By incorporating thinking steps into your workflows, you can help your agents tackle complex tasks more effectively, avoid common reasoning pitfalls, and produce higher-quality outputs. This is particularly valuable for tasks involving multi-step reasoning, complex decision-making, or situations where accuracy is critical.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Adds a step where the model explicitly outlines its thought process before proceeding. This can improve reasoning quality by encouraging step-by-step analysis.
## Tools
### `thinking_tool`
@@ -50,36 +47,31 @@ Processes a provided thought/instruction, making it available for subsequent ste
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `thought` | string | Yes | The thought process or instruction provided by the user in the Thinking Step block. |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ----------------------------------------------------------------------------------- |
| `thought` | string | Yes | The thought process or instruction provided by the user in the Thinking Step block. |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| --------------------- | ------ |
| `acknowledgedThought` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `thought` | string | No | Thought Process / Instruction - Describe the step-by-step thinking process here... |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ---------------------------------------------------------------------------------- |
| `thought` | string | No | Thought Process / Instruction - Describe the step-by-step thinking process here... |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| Output | Type | Description |
| ----------------------- | ------ | ----------------------------------- |
| `response` | object | Output from response |
| ↳ `acknowledgedThought` | string | acknowledgedThought of the response |
## Notes
- Category: `tools`

View File

@@ -3,9 +3,9 @@ title: Translate
description: Translate text to any language
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="translate"
color="#FF4B4B"
icon={true}
@@ -24,7 +24,7 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
<path d="m5 8 6 6" />
<path d="m4 14 6-6 2-3" />
<path d="M2 5h12" />
<path d="M7 2h1" />
<path d="M7 2h1" />
<path d="m22 22-5-10-5 10" />
<path d="M14 18h6" />
</svg>`}
@@ -43,15 +43,12 @@ With Translate, you can:
- **Translate videos**: Translate videos between languages
- **Translate speech**: Translate speech between languages
- **Translate text**: Translate text between languages
{/* MANUAL-CONTENT-END */}
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Convert text between languages while preserving meaning, nuance, and formatting. Utilize powerful language models to produce natural, fluent translations with appropriate cultural adaptations.
## Tools
### `openai_chat`
@@ -67,7 +64,6 @@ This tool does not produce any outputs.
### `anthropic_chat`
### `google_chat`
#### Input
@@ -79,27 +75,22 @@ This tool does not produce any outputs.
This tool does not produce any outputs.
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `context` | string | Yes | Text to Translate - Enter the text you want to translate |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | -------------------------------------------------------- |
| `context` | string | Yes | Text to Translate - Enter the text you want to translate |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| Output | Type | Description |
| ----------- | ------ | ----------------------- |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `model` | string | model of the response |
| ↳ `tokens` | any | tokens of the response |
| ↳ `model` | string | model of the response |
| ↳ `tokens` | any | tokens of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: Twilio SMS
description: Send SMS messages
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="twilio_sms"
color="#F22F46"
icon={true}
@@ -31,13 +31,10 @@ Key features of Twilio SMS include:
In Sim Studio, the Twilio SMS integration enables your agents to leverage these powerful messaging capabilities as part of their workflows. This creates opportunities for sophisticated customer engagement scenarios like appointment reminders, verification codes, alerts, and interactive conversations. The integration bridges the gap between your AI workflows and customer communication channels, allowing your agents to deliver timely, relevant information directly to users' mobile devices. By connecting Sim Studio with Twilio SMS, you can build intelligent agents that engage customers through their preferred communication channel, enhancing user experience while automating routine messaging tasks.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Send text messages to single or multiple recipients using the Twilio API.
## Tools
### `twilio_send_sms`
@@ -46,44 +43,39 @@ Send text messages to single or multiple recipients using the Twilio API.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `phoneNumbers` | string | Yes | Phone numbers to send the message to, separated by newlines |
| `message` | string | Yes | Message to send |
| `accountSid` | string | Yes | Twilio Account SID |
| `authToken` | string | Yes | Twilio Auth Token |
| `fromNumber` | string | Yes | Twilio phone number to send the message from |
| Parameter | Type | Required | Description |
| -------------- | ------ | -------- | ----------------------------------------------------------- |
| `phoneNumbers` | string | Yes | Phone numbers to send the message to, separated by newlines |
| `message` | string | Yes | Message to send |
| `accountSid` | string | Yes | Twilio Account SID |
| `authToken` | string | Yes | Twilio Auth Token |
| `fromNumber` | string | Yes | Twilio phone number to send the message from |
#### Output
| Parameter | Type |
| --------- | ---- |
| `success` | string |
| Parameter | Type |
| ----------- | ------ |
| `success` | string |
| `messageId` | string |
| `status` | string |
| `status` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `phoneNumbers` | string | Yes | Recipient Phone Numbers - Enter phone numbers with country code \(one per line, e.g., +1234567890\) |
| Parameter | Type | Required | Description |
| -------------- | ------ | -------- | --------------------------------------------------------------------------------------------------- |
| `phoneNumbers` | string | Yes | Recipient Phone Numbers - Enter phone numbers with country code \(one per line, e.g., +1234567890\) |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `success` | boolean | success of the response |
| ↳ `messageId` | any | messageId of the response |
| ↳ `status` | any | status of the response |
| ↳ `error` | any | error of the response |
| Output | Type | Description |
| ------------- | ------- | ------------------------- |
| `response` | object | Output from response |
| ↳ `success` | boolean | success of the response |
| ↳ `messageId` | any | messageId of the response |
| ↳ `status` | any | status of the response |
| ↳ `error` | any | error of the response |
## Notes

View File

@@ -0,0 +1,128 @@
---
title: Typeform
description: Interact with Typeform
---
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
type="typeform"
color="#262627"
icon={true}
iconSvg={`<svg className="block-icon"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<g transform="translate(1, 4)">
<rect x="0" y="0" rx="2.5" fill="currentColor" />
<rect x="8" y="0" rx="4" fill="currentColor" />
</g>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[Typeform](https://www.typeform.com/) is a user-friendly platform for creating conversational forms, surveys, and quizzes with a focus on engaging user experience.
With Typeform, you can:
- **Create interactive forms**: Design beautiful, conversational forms that engage respondents with a unique one-question-at-a-time interface
- **Customize your experience**: Use conditional logic, hidden fields, and custom themes to create personalized user journeys
- **Integrate with other tools**: Connect with 1000+ apps through native integrations and APIs
- **Analyze response data**: Get actionable insights through comprehensive analytics and reporting tools
In Sim Studio, the Typeform integration enables your agents to programmatically interact with your Typeform data as part of their workflows. Agents can retrieve form responses, process submission data, and incorporate user feedback directly into decision-making processes. This integration is particularly valuable for scenarios like lead qualification, customer feedback analysis, and data-driven personalization. By connecting Sim Studio with Typeform, you can create intelligent automation workflows that transform form responses into actionable insights - analyzing sentiment, categorizing feedback, generating summaries, and even triggering follow-up actions based on specific response patterns.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Access and retrieve responses from your Typeform forms. Integrate form submissions data into your workflow for analysis, storage, or processing.
## Tools
### `typeform_responses`
Retrieve form responses from Typeform
#### Input
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------------------------------------------------------------- |
| `formId` | string | Yes | Typeform form ID |
| `apiKey` | string | Yes | Typeform Personal Access Token |
| `pageSize` | number | No | Number of responses to retrieve \(default: 25\) |
| `since` | string | No | Retrieve responses submitted after this date \(ISO 8601 format\) |
| `until` | string | No | Retrieve responses submitted before this date \(ISO 8601 format\) |
| `completed` | string | No | Filter by completion status \(true/false\) |
#### Output
| Parameter | Type |
| ------------- | ------ |
| `total_items` | string |
| `answers` | string |
| `type` | string |
| `hidden` | string |
| `calculated` | string |
| `variables` | string |
### `typeform_files`
Download files uploaded in Typeform responses
#### Input
| Parameter | Type | Required | Description |
| ------------ | ------- | -------- | ----------------------------------------------------------- |
| `formId` | string | Yes | Typeform form ID |
| `responseId` | string | Yes | Response ID containing the files |
| `fieldId` | string | Yes | Unique ID of the file upload field |
| `filename` | string | Yes | Filename of the uploaded file |
| `inline` | boolean | No | Whether to request the file with inline Content-Disposition |
| `apiKey` | string | Yes | Typeform Personal Access Token |
#### Output
| Parameter | Type |
| --------- | ------ |
| `fileUrl` | string |
### `typeform_insights`
Retrieve insights and analytics for Typeform forms
#### Input
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ------------------------------ |
| `formId` | string | Yes | Typeform form ID |
| `apiKey` | string | Yes | Typeform Personal Access Token |
#### Output
This tool does not produce any outputs.
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| --------------- | ------ | --------------------------- |
| `response` | object | Output from response |
| ↳ `total_items` | number | total_items of the response |
| ↳ `page_count` | number | page_count of the response |
| ↳ `items` | json | items of the response |
## Notes
- Category: `tools`
- Type: `typeform`

View File

@@ -3,9 +3,9 @@ title: Vision
description: Analyze images with vision models
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="vision"
color="#4D5FFF"
icon={true}
@@ -44,13 +44,10 @@ With Vision, you can:
In Sim Studio, the Vision integration enables your agents to analyze images with vision models as part of their workflows. This allows for powerful automation scenarios that require analyzing images with vision models. Your agents can analyze images with vision models, extract text from images, identify objects in images, describe images in detail, and generate images from text. This integration bridges the gap between your AI workflows and your image analysis needs, enabling more sophisticated and image-centric automations. By connecting Sim Studio with Vision, you can create agents that stay current with the latest information, provide more accurate responses, and deliver more value to users - all without requiring manual intervention or custom code.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Process visual content with customizable prompts to extract insights and information from images.
## Tools
### `vision_tool`
@@ -59,42 +56,37 @@ Process and analyze images using advanced vision models. Capable of understandin
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | API key for the selected model provider |
| `imageUrl` | string | Yes | Publicly accessible image URL |
| `model` | string | No | Vision model to use \(gpt-4o, claude-3-opus-20240229, etc\) |
| `prompt` | string | No | Custom prompt for image analysis |
| Parameter | Type | Required | Description |
| ---------- | ------ | -------- | ----------------------------------------------------------- |
| `apiKey` | string | Yes | API key for the selected model provider |
| `imageUrl` | string | Yes | Publicly accessible image URL |
| `model` | string | No | Vision model to use \(gpt-4o, claude-3-opus-20240229, etc\) |
| `prompt` | string | No | Custom prompt for image analysis |
#### Output
| Parameter | Type |
| --------- | ---- |
| Parameter | Type |
| --------- | ------ |
| `content` | string |
| `model` | string |
| `tokens` | string |
| `model` | string |
| `tokens` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ----------- |
| `apiKey` | string | Yes | |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| Output | Type | Description |
| ----------- | ------ | ----------------------- |
| `response` | object | Output from response |
| ↳ `content` | string | content of the response |
| ↳ `model` | any | model of the response |
| ↳ `tokens` | any | tokens of the response |
| ↳ `model` | any | model of the response |
| ↳ `tokens` | any | tokens of the response |
## Notes

View File

@@ -3,9 +3,9 @@ title: WhatsApp
description: Send WhatsApp messages
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="whatsapp"
color="#25D366"
icon={true}
@@ -34,13 +34,10 @@ WhatsApp Business API provides organizations with powerful capabilities to:
In Sim Studio, the WhatsApp integration enables your agents to leverage these messaging capabilities as part of their workflows. This creates opportunities for sophisticated customer engagement scenarios like appointment reminders, verification codes, alerts, and interactive conversations. The integration bridges the gap between your AI workflows and customer communication channels, allowing your agents to deliver timely, relevant information directly to users' mobile devices. By connecting Sim Studio with WhatsApp, you can build intelligent agents that engage customers through their preferred messaging platform, enhancing user experience while automating routine messaging tasks.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Send messages to WhatsApp users using the WhatsApp Business API. Requires WhatsApp Business API configuration.
## Tools
### `whatsapp_send_message`
@@ -49,41 +46,36 @@ Send WhatsApp messages
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `phoneNumber` | string | Yes | Recipient phone number with country code |
| `message` | string | Yes | Message content to send |
| `phoneNumberId` | string | Yes | WhatsApp Business Phone Number ID |
| `accessToken` | string | Yes | WhatsApp Business API Access Token |
| Parameter | Type | Required | Description |
| --------------- | ------ | -------- | ---------------------------------------- |
| `phoneNumber` | string | Yes | Recipient phone number with country code |
| `message` | string | Yes | Message content to send |
| `phoneNumberId` | string | Yes | WhatsApp Business Phone Number ID |
| `accessToken` | string | Yes | WhatsApp Business API Access Token |
#### Output
| Parameter | Type |
| --------- | ---- |
| `success` | string |
| Parameter | Type |
| ----------- | ------ |
| `success` | string |
| `messageId` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `phoneNumber` | string | Yes | Recipient Phone Number - Enter phone number with country code \(e.g., +1234567890\) |
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ----------------------------------------------------------------------------------- |
| `phoneNumber` | string | Yes | Recipient Phone Number - Enter phone number with country code \(e.g., +1234567890\) |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `success` | boolean | success of the response |
| ↳ `messageId` | any | messageId of the response |
| ↳ `error` | any | error of the response |
| Output | Type | Description |
| ------------- | ------- | ------------------------- |
| `response` | object | Output from response |
| ↳ `success` | boolean | success of the response |
| ↳ `messageId` | any | messageId of the response |
| ↳ `error` | any | error of the response |
## Notes

View File

@@ -0,0 +1,153 @@
---
title: X
description: Interact with X
---
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
type="x"
color="#000000"
icon={true}
iconSvg={`<svg className="block-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" >
<path
d="M 5.9199219 6 L 20.582031 27.375 L 6.2304688 44 L 9.4101562 44 L 21.986328 29.421875 L 31.986328 44 L 44 44 L 28.681641 21.669922 L 42.199219 6 L 39.029297 6 L 27.275391 19.617188 L 17.933594 6 L 5.9199219 6 z M 9.7167969 8 L 16.880859 8 L 40.203125 42 L 33.039062 42 L 9.7167969 8 z"
fill="currentColor"
/>
</svg>`}
/>
{/* MANUAL-CONTENT-START:intro */}
[X](https://x.com/) (formerly Twitter) is a popular social media platform that enables real-time communication, content sharing, and engagement with audiences worldwide.
The X integration in Sim Studio leverages OAuth authentication to securely connect with the X API, allowing your agents to interact with the platform programmatically. This OAuth implementation ensures secure access to X's features while maintaining user privacy and security.
With the X integration, your agents can:
- **Post content**: Create new tweets, reply to existing conversations, or share media directly from your workflows
- **Monitor conversations**: Track mentions, keywords, or specific accounts to stay informed about relevant discussions
- **Engage with audiences**: Automatically respond to mentions, direct messages, or specific triggers
- **Analyze trends**: Gather insights from trending topics, hashtags, or user engagement patterns
- **Research information**: Search for specific content, user profiles, or conversations to inform agent decisions
In Sim Studio, the X integration enables sophisticated social media automation scenarios. Your agents can monitor brand mentions and respond appropriately, schedule and publish content based on specific triggers, conduct social listening for market research, or create interactive experiences that span both conversational AI and social media engagement. By connecting Sim Studio with X through OAuth, you can build intelligent agents that maintain a consistent and responsive social media presence while adhering to platform policies and best practices for API usage.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Connect with X to post tweets, read content, search for information, and access user profiles. Integrate social media capabilities into your workflow with comprehensive X platform access.
## Tools
### `x_write`
Post new tweets, reply to tweets, or create polls on X (Twitter)
#### Input
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ----------------------------------------- |
| `accessToken` | string | Yes | X OAuth access token |
| `text` | string | Yes | The text content of your tweet |
| `replyTo` | string | No | ID of the tweet to reply to |
| `mediaIds` | array | No | Array of media IDs to attach to the tweet |
| `poll` | object | No | Poll configuration for the tweet |
#### Output
| Parameter | Type |
| ----------------- | ------ |
| `tweet` | string |
| `text` | string |
| `createdAt` | string |
| `authorId` | string |
| `conversationId` | string |
| `inReplyToUserId` | string |
| `attachments` | string |
| `pollId` | string |
### `x_read`
Read tweet details, including replies and conversation context
#### Input
| Parameter | Type | Required | Description |
| ---------------- | ------- | -------- | --------------------------------------- |
| `accessToken` | string | Yes | X OAuth access token |
| `tweetId` | string | Yes | ID of the tweet to read |
| `includeReplies` | boolean | No | Whether to include replies to the tweet |
#### Output
| Parameter | Type |
| --------- | ------ |
| `tweet` | string |
### `x_search`
Search for tweets using keywords, hashtags, or advanced queries
#### Input
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ------------------------------------------------------------- |
| `accessToken` | string | Yes | X OAuth access token |
| `query` | string | Yes | Search query \(supports X search operators\) |
| `maxResults` | number | No | Maximum number of results to return \(default: 10, max: 100\) |
| `startTime` | string | No | Start time for search \(ISO 8601 format\) |
| `endTime` | string | No | End time for search \(ISO 8601 format\) |
| `sortOrder` | string | No | Sort order for results \(recency or relevancy\) |
#### Output
| Parameter | Type |
| ---------- | ------ |
| `tweets` | string |
| `includes` | string |
| `media` | string |
| `polls` | string |
### `x_user`
Get user profile information
#### Input
| Parameter | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------------------- |
| `accessToken` | string | Yes | X OAuth access token |
| `username` | string | Yes | Username to look up \(without @ symbol\) |
#### Output
| Parameter | Type |
| --------- | ------ |
| `user` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `operation` | string | Yes | Operation |
### Outputs
| Output | Type | Description |
| ---------------- | ------ | ---------------------------- |
| `response` | object | Output from response |
| ↳ `tweet` | json | tweet of the response |
| ↳ `replies` | any | replies of the response |
| ↳ `context` | any | context of the response |
| ↳ `tweets` | json | tweets of the response |
| ↳ `includes` | any | includes of the response |
| ↳ `meta` | json | meta of the response |
| ↳ `user` | json | user of the response |
| ↳ `recentTweets` | any | recentTweets of the response |
## Notes
- Category: `tools`
- Type: `x`

View File

@@ -3,9 +3,9 @@ title: YouTube
description: Search for videos on YouTube
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
import { BlockInfoCard } from '@/components/ui/block-info-card'
<BlockInfoCard
<BlockInfoCard
type="youtube"
color="#FF0000"
icon={true}
@@ -37,13 +37,10 @@ With YouTube's extensive API capabilities, you can:
In Sim Studio, the YouTube integration enables your agents to programmatically search and analyze YouTube content as part of their workflows. This allows for powerful automation scenarios that require up-to-date video information. Your agents can search for instructional videos, research content trends, gather information from educational channels, or monitor specific creators for new uploads. This integration bridges the gap between your AI workflows and the world's largest video repository, enabling more sophisticated and content-aware automations. By connecting Sim Studio with YouTube, you can create agents that stay current with the latest information, provide more accurate responses, and deliver more value to users - all without requiring manual intervention or custom code.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Find relevant videos on YouTube using the YouTube Data API. Search for content with customizable result limits and retrieve structured video metadata for integration into your workflow.
## Tools
### `youtube_search`
@@ -52,40 +49,35 @@ Search for videos on YouTube using the YouTube Data API.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `query` | string | Yes | Search query for YouTube videos |
| `apiKey` | string | Yes | YouTube API Key |
| `maxResults` | number | No | Maximum number of videos to return |
| Parameter | Type | Required | Description |
| ------------ | ------ | -------- | ---------------------------------- |
| `query` | string | Yes | Search query for YouTube videos |
| `apiKey` | string | Yes | YouTube API Key |
| `maxResults` | number | No | Maximum number of videos to return |
#### Output
| Parameter | Type |
| --------- | ---- |
| `totalResults` | string |
| Parameter | Type |
| --------------- | ------ |
| `totalResults` | string |
| `nextPageToken` | string |
## Block Configuration
### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | YouTube API Key - Enter YouTube API Key |
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | --------------------------------------- |
| `apiKey` | string | Yes | YouTube API Key - Enter YouTube API Key |
### Outputs
| Output | Type | Description |
| ------ | ---- | ----------- |
| `response` | object | Output from response |
| ↳ `items` | json | items of the response |
| Output | Type | Description |
| ---------------- | ------ | ---------------------------- |
| `response` | object | Output from response |
| ↳ `items` | json | items of the response |
| ↳ `totalResults` | number | totalResults of the response |
## Notes
- Category: `tools`

View File

@@ -4,22 +4,23 @@ description: Store and share data across your workflow with global variables
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
import { Steps, Step } from 'fumadocs-ui/components/steps'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { ThemeImage } from '@/components/ui/theme-image'
Variables in Sim Studio act as a global store for data that can be accessed and modified by any block in your workflow. They provide a powerful way to share information between different parts of your workflow, maintain state, and create more dynamic applications.
<ThemeImage
lightSrc="/static/light/variables-light.png"
darkSrc="/static/dark/variables-dark.png"
alt="Variables Panel"
width={300}
height={175}
<ThemeImage
lightSrc="/static/light/variables-light.png"
darkSrc="/static/dark/variables-dark.png"
alt="Variables Panel"
width={300}
height={175}
/>
<Callout type="info">
Variables allow you to store and share data across your entire workflow, making it easy to maintain state and create complex, interconnected systems.
Variables allow you to store and share data across your entire workflow, making it easy to
maintain state and create complex, interconnected systems.
</Callout>
## Overview
@@ -31,13 +32,15 @@ The Variables feature serves as a central data store for your workflow, enabling
<strong>Store global data</strong>: Create variables that persist throughout workflow execution
</Step>
<Step>
<strong>Share information between blocks</strong>: Access the same data from any block in your workflow
<strong>Share information between blocks</strong>: Access the same data from any block in your
workflow
</Step>
<Step>
<strong>Maintain workflow state</strong>: Keep track of important values as your workflow runs
</Step>
<Step>
<strong>Create dynamic workflows</strong>: Build more flexible systems that can adapt based on stored values
<strong>Create dynamic workflows</strong>: Build more flexible systems that can adapt based on
stored values
</Step>
</Steps>
@@ -57,16 +60,17 @@ Variables can be accessed from any block in your workflow using the variable dro
2. Browse the dropdown menu to select from available variables
3. Select the variable you want to use
<ThemeImage
lightSrc="/static/light/variabledropdown-light.png"
darkSrc="/static/dark/variabledropdown-dark.png"
alt="Variable Dropdown"
width={300}
height={175}
<ThemeImage
lightSrc="/static/light/variabledropdown-light.png"
darkSrc="/static/dark/variabledropdown-dark.png"
alt="Variable Dropdown"
width={300}
height={175}
/>
<Callout>
You can also drag the connection tag into a field to open the variable dropdown and access available variables.
You can also drag the connection tag into a field to open the variable dropdown and access
available variables.
</Callout>
## Variable Types
@@ -134,4 +138,4 @@ Variables in Sim Studio have global scope, meaning:
- **Consider Variable Scope**: Remember that variables are global and can be modified by any block. Design your workflow with this in mind to prevent unexpected behavior.
- **Initialize Variables Early**: Set up and initialize your variables at the beginning of your workflow to ensure they're available when needed.
- **Handle Missing Variables**: Always consider the case where a variable might not yet exist or might have an unexpected value. Add appropriate validation in your blocks.
- **Limit Variable Count**: Keep the number of variables manageable. Too many variables can make your workflow difficult to understand and maintain.
- **Limit Variable Count**: Keep the number of variables manageable. Too many variables can make your workflow difficult to understand and maintain.

Some files were not shown because too many files have changed in this diff Show More