AI Newsletter Digest improvements: fixed QP soft line break decoding, URL extraction, and content cleaning

This commit is contained in:
Krilly
2026-03-04 13:29:22 +00:00
parent 29a98137a7
commit 57dd294675
13706 changed files with 2114953 additions and 237629 deletions

View File

@@ -0,0 +1,107 @@
---
name: browser-use
description: Use when task requires multiple steps, unknown UI, form filling, or parallel automation across multiple tabs. This launches autonomous AI agents that figure out the steps themselves.
---
# Browser-Use Agent - Autonomous Automation
## Overview
Launch AI sub-agents that complete multi-step browser tasks autonomously. **Most powerful VibeSurf capability.**
## When to Use
**browser-use is a high-level, task-oriented sub-agent approach:**
- Complex tasks where you describe the **goal** and desired **output**, let the agent figure out the steps
- Long workflows that would require many manual browser operations
- Unknown or dynamic UI that needs autonomous exploration
- Parallel automation across multiple tabs
**Note:** browser-use and `browser` skill are complementary, not mutually exclusive. Both can accomplish the same tasks - browser-use is higher-level automation, while `browser` gives you precise control.
## Available Actions
| Action | Description |
|--------|-------------|
| `execute_browser_use_agent` | Execute browser-use agent tasks. Specify tab_id to work on specific tab. Each tab_id must be unique during parallel execution. |
## How It Works
Describe the **goal**, agent figures out the **steps**:
- Navigate to URLs
- Find and interact with elements
- Fill forms
- Extract data
- Return structured results
## Task-Oriented Thinking
**Good task descriptions:**
- ✅ "Fill out the registration form with these details"
- ✅ "Search for Python tutorials and summarize top 3"
- ✅ "Go to login page, authenticate, then check dashboard"
**Bad task descriptions:**
- ❌ "Click button" (too vague, use `browser`)
- ❌ "Extract prices" (use `js_code` instead)
- ❌ "Step 1: navigate, Step 2: click..." (let agent figure it out)
## Working with Existing Tabs
> **🎯 Important: tab_id Selection**
>
> **When user refers to their already-opened pages** (e.g., "the current page", "from my open tabs", "the second tab"):
>
> 1. **FIRST** call `get_browser_state` to get all open tabs and their IDs
> 2. **THEN** use the correct `tab_id` from the response
> 3. **NEVER** use `tab_id: null` or omit it - that creates a NEW tab
>
> **Key distinction:**
> - `tab_id: "existing_id"` → Work on user's existing tab
> - `tab_id: null` or omitted → Create a brand new tab
## Parallel Execution
Provide multiple tasks to run agents in parallel. Each task needs a unique `tab_id` for parallel execution.
## Best Practices
| Practice | Why |
|----------|-----|
| Describe goal, not steps | Agent figures out navigation |
| Use parallel for independent tasks | Much faster |
| One task per agent | Clear responsibilities |
| Unique tab_id per task | Required for parallel execution |
## Common Mistakes
| Mistake | Fix |
|---------|-----|
| Over-specifying steps | Describe goal, let agent figure it out |
| Using for single click | Use `browser` instead |
| Using for simple extraction | Use `js_code` or `crawl` instead |
| Duplicate tab_id in parallel | Each agent needs unique tab_id |
## Fallback Strategy
> **🔄 When browser-use Fails or Needs Manual Control**
>
> If `execute_browser_use_agent` fails, gets stuck, or you need more precise control:
>
> **Seamlessly fallback to manual `browser` operations:**
> 1. `get_browser_state` - Inspect current page state and available elements
> 2. `browser.{action}` - Perform specific action (click, input, navigate, etc.)
> 3. `get_browser_state` - Verify result and determine next action
> 4. Repeat this cycle until task completes
>
> **This is the recommended recovery pattern** - browser-use and browser are complementary tools.
## Choosing the Right Approach
| Approach | Best For | Characteristics |
|----------|----------|-----------------|
| **browser-use** | Complex, long tasks | Task-oriented, autonomous, describe goal + output |
| **browser** | Precise control needed | Step-by-step, explicit actions, full control |
| **Hybrid** | Best of both | Start with browser-use, fallback to browser if needed |
**Principle:** Choose based on task complexity and control needs, not step count. Both can handle multi-step workflows and form filling.

View File

@@ -0,0 +1,130 @@
---
name: browser
description: Use when user needs direct browser control like navigating to URLs, clicking elements, typing text, scrolling, switching tabs, taking screenshots, or inspecting page state.
---
# Browser - Direct Browser Control
## Overview
Direct control of browser interactions. Use for simple, single actions.
## When to Use
**browser provides low-level, precise control over browser operations:**
- When you need explicit control over each action
- When you want to verify results at each step
- As a fallback when `browser-use` agent fails or gets stuck
- Any browser automation task (navigation, clicking, form filling, etc.)
**Note:** browser and `browser-use` are complementary. Both can accomplish the same tasks - browser gives precise step-by-step control, while browser-use provides high-level task automation.
## Available Actions
| Action | Description |
|--------|-------------|
| `get_browser_state` | Get current browser state including tabs, DOM content, and highlighted screenshot |
| `browser.get_element_info` | Get element details by index (xpath, position, attributes, visibility) |
| `browser.search` | Google search |
| `browser.navigate` | Navigate to URL |
| `browser.go_back` | Go back |
| `browser.wait` | Wait for condition |
| `browser.click` | Click element |
| `browser.input` | Input text into field |
| `browser.switch` | Switch to another tab by tab_id |
| `browser.close` | Close a tab by tab_id |
| `browser.extract` | LLM extracts structured data from page markdown |
| `browser.scroll` | Scroll page |
| `browser.send_keys` | Send keyboard keys |
| `browser.find_text` | Scroll to and find text |
| `browser.dropdown_options` | Get dropdown options |
| `browser.select_dropdown` | Select dropdown option |
| `browser.evaluate` | Execute JavaScript in browser |
| `browser.hover` | Hover on element |
| `browser.download_media` | Download media from URL |
| `browser.get_html_content` | Get HTML content and save to file |
| `browser.reload_page` | Refresh current page |
| `browser.start_console_logging` | Start monitoring console logs (console.log/warn/error) |
| `browser.stop_console_logging` | Stop console logging and retrieve all logs |
| `browser.start_network_logging` | Start monitoring network traffic (requests/responses) |
| `browser.stop_network_logging` | Stop network logging and get HAR file |
## Key Actions
### Getting Started
- `get_browser_state` - Always call first to see current state
### Navigation
- `browser.navigate` - Go to URL
- `browser.go_back` - Go back
- `browser.reload_page` - Refresh page
### Interaction
- `browser.click` - Click element
- `browser.input` - Type text
- `browser.send_keys` - Send keyboard keys
- `browser.hover` - Hover on element
### Data & Info
- `browser.get_element_info` - Inspect element details (xpath, position, attributes)
- `browser.extract` - LLM extracts structured data from page
- `browser.get_html_content` - Get full HTML
- `browser.find_text` - Find and scroll to text
### Tabs
- `browser.switch` - Switch to tab by tab_id (last 4 chars of target_id)
- `browser.close` - Close tab by tab_id
### Advanced
- `browser.evaluate` - Execute custom JavaScript
### Debugging & Testing
- `browser.start_console_logging` - Start monitoring console logs
- `browser.stop_console_logging` - Stop and retrieve console logs (saved to file)
- `browser.start_network_logging` - Start monitoring network traffic
- `browser.stop_network_logging` - Stop and retrieve network logs as HAR file
**Use case**: Website testing, local frontend/backend debugging, reverse engineering
**Workflow**: Call `start_*` first, perform actions, then call `stop_*` to get logs
## Relationship with browser-use
**browser and browser-use are complementary, not exclusive:**
- **browser-use**: High-level, task-oriented sub-agent (describe goal, agent figures out steps)
- **browser**: Low-level, precise control (explicit step-by-step operations)
**When to prefer browser-use:**
- Complex tasks with long workflows
- When describing the goal is easier than specifying steps
**When to prefer browser:**
- Need precise control over each action
- Want to verify intermediate results
- browser-use failed or got stuck (use as fallback)
**Best practice:** Try browser-use for complex tasks first, fallback to browser for manual control if needed.
## Best Practices
1. Call `get_browser_state` first to see available elements
2. Use `browser.get_element_info` to inspect element details (xpath, attributes, etc.)
3. Use element indices/IDs from browser state
4. Tab IDs are last 4 characters of target_id
5. Use `browser.extract` for LLM-based extraction from page markdown
6. Use `browser.evaluate` for custom JavaScript operations
## Manual Control Pattern (Fallback from browser-use)
> **🎯 Iterative Control Loop**
>
> Use this pattern when browser-use fails or you need precise control:
>
> ```
> 1. get_browser_state → See page state, available elements
> 2. browser.{action} → Perform action (click, input, navigate...)
> 3. get_browser_state → Verify result, plan next step
> 4. Repeat until complete
> ```
>
> **This pattern works for any task** - form filling, navigation, data extraction, etc.
> It's the manual alternative to browser-use's autonomous approach.

View File

@@ -0,0 +1,135 @@
---
name: config-composio
description: Use when user asks to configure Composio API key, enable or disable Composio toolkits (Gmail, GitHub, Slack, etc.), manage app integrations, or authenticate with external services.
---
# Config Composio - Composio Integration Management
## Overview
Manage Composio API key and toolkit configurations. Enable/disable app integrations like Gmail, GitHub, Slack, and more.
## When to Use
- User needs to set up Composio API key
- User wants to enable a toolkit (Gmail, GitHub, Slack, etc.)
- User needs to disable a toolkit
- User wants to check which toolkits are available
- User needs to manage toolkit authentication (OAuth)
- User wants to configure toolkit tools selection
## API Endpoints
Base path: `$VIBESURF_ENDPOINT/api/composio`
### API Key Management
| Action | Method | Endpoint | Description |
|--------|--------|----------|-------------|
| Check Status | GET | `/api/composio/status` | Get Composio connection status |
| Verify Key | POST | `/api/composio/verify-key` | Verify and store API key |
### Toolkit Management
| Action | Method | Endpoint | Description |
|--------|--------|----------|-------------|
| List Toolkits | GET | `/api/composio/toolkits` | Get all available toolkits |
| Toggle Toolkit | POST | `/api/composio/toolkit/{slug}/toggle` | Enable/disable toolkit |
| Get Tools | GET | `/api/composio/toolkit/{slug}/tools` | Get tools for a toolkit |
| Update Tools | POST | `/api/composio/toolkit/{slug}/tools` | Update selected tools |
| Connection Status | GET | `/api/composio/toolkit/{slug}/connection-status` | Check OAuth connection |
## Request Examples
### Verify API Key
```json
POST /api/composio/verify-key
{
"api_key": "your-composio-api-key"
}
```
### Enable Toolkit
```json
POST /api/composio/toolkit/gmail/toggle
{
"enabled": true,
"force_reauth": false
}
```
### Disable Toolkit
```json
POST /api/composio/toolkit/gmail/toggle
{
"enabled": false
}
```
### Update Tool Selection
```json
POST /api/composio/toolkit/gmail/tools
{
"selected_tools": {
"GMAIL_SEND_EMAIL": true,
"GMAIL_FETCH_EMAILS": false
}
}
```
## Common Toolkits
| Toolkit | Description |
|---------|-------------|
| `gmail` | Send and receive emails |
| `github` | Repository management, PRs, issues |
| `slack` | Send messages, manage channels |
| `google_calendar` | Event management |
| `google_sheets` | Spreadsheet operations |
| `notion` | Page and database management |
| `trello` | Card and board management |
| `asana` | Task management |
| `jira` | Issue tracking |
## OAuth Flow
When enabling a toolkit that requires OAuth:
1. **Enable toolkit**`POST /api/composio/toolkit/{slug}/toggle` with `enabled: true`
2. **Check response** → If `requires_oauth: true`, an `oauth_url` is provided
3. **User authenticates** → Open `oauth_url` in browser to complete OAuth
4. **Verify connection**`GET /api/composio/toolkit/{slug}/connection-status`
## Using Composio Tools
Once toolkits are enabled, their tools become available through the `integrations` skill:
```
1. List available tools → GET /api/tool/search?keyword=composio
2. Execute tool → POST /api/tool/execute
{
"action_name": "execute_extra_tool",
"parameters": {
"tool_name": "cpo.{toolkit}.{action}",
"tool_arguments": {...}
}
}
```
## Tool Naming Convention
Composio tools follow the pattern: `cpo.{toolkit_slug}.{action_name}`
Examples:
- `cpo.gmail.GMAIL_SEND_EMAIL`
- `cpo.github.GITHUB_CREATE_PULL_REQUEST`
- `cpo.slack.SLACK_SEND_MESSAGE`
## Workflow
1. **Check API key status**`GET /api/composio/status`
2. **Set up API key** (if needed) → `POST /api/composio/verify-key`
3. **List available toolkits**`GET /api/composio/toolkits`
4. **Enable desired toolkit**`POST /api/composio/toolkit/{slug}/toggle`
5. **Complete OAuth** (if required) → Use provided `oauth_url`
6. **Use tools** → Execute via `integrations` skill

View File

@@ -0,0 +1,95 @@
---
name: config-llm
description: Use when user asks to configure LLM profiles, manage AI model settings, add/update/remove LLM configurations, or switch between different LLM providers like OpenAI, Anthropic, Google, etc.
---
# Config LLM - LLM Profile Management
## Overview
Manage LLM (Large Language Model) profiles for VibeSurf. Configure different AI providers, models, and their parameters.
## When to Use
- User wants to add a new LLM profile
- User needs to switch default LLM
- User wants to update LLM settings (temperature, max_tokens, etc.)
- User needs to see available LLM providers and models
- User wants to list or manage existing LLM profiles
## API Endpoints
Base path: `$VIBESURF_ENDPOINT/api/config`
### Profile Management
| Action | Method | Endpoint | Description |
|--------|--------|----------|-------------|
| List Profiles | GET | `/api/config/llm-profiles?active_only=true` | List all LLM profiles |
| Get Profile | GET | `/api/config/llm-profiles/{profile_name}` | Get specific profile details |
| Create Profile | POST | `/api/config/llm-profiles` | Create new LLM profile |
| Update Profile | PUT | `/api/config/llm-profiles/{profile_name}` | Update existing profile |
| Set Default | POST | `/api/config/llm-profiles/{profile_name}/set-default` | Set profile as default |
| Get Default | GET | `/api/config/llm-profiles/default/current` | Get current default profile |
### Provider Management
| Action | Method | Endpoint | Description |
|--------|--------|----------|-------------|
| List Providers | GET | `/api/config/llm/providers` | Get available LLM providers |
| Get Models | GET | `/api/config/llm/providers/{provider_name}/models` | Get models for a provider |
## Provider Notes
> **Tip:** Use `GET /api/config/llm/providers` to see all available providers and their supported models.
>
> **For OpenAI-compatible APIs:** If using a third-party provider that offers OpenAI-compatible endpoints (like local models, DeepSeek, or other proxies), use the `openai_compatible` provider and set the custom `base_url`.
## Request Examples
### Create Profile
```json
POST /api/config/llm-profiles
{
"profile_name": "my-openai",
"provider": "openai",
"model": "gpt-4",
"api_key": "sk-...",
"temperature": 0.7,
"max_tokens": 4096,
"is_default": false
}
```
### Update Profile
```json
PUT /api/config/llm-profiles/my-openai
{
"temperature": 0.5,
"max_tokens": 2048
}
```
## Profile Fields
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| profile_name | string | Yes | Unique profile identifier |
| provider | string | Yes | Provider name |
| model | string | Yes | Model name |
| api_key | string | Yes | API key for the provider |
| base_url | string | No | Custom base URL |
| temperature | float | No | Sampling temperature (0-2) |
| max_tokens | int | No | Maximum tokens to generate |
| top_p | float | No | Nucleus sampling |
| frequency_penalty | float | No | Frequency penalty (-2 to 2) |
| seed | int | No | Random seed |
| description | string | No | Profile description |
| is_default | bool | No | Set as default profile |
## Workflow
1. **Get available providers**`GET /api/config/llm/providers`
2. **Choose provider and model**`GET /api/config/llm/providers/{provider}/models`
3. **Create profile**`POST /api/config/llm-profiles`
4. **Set as default** (optional) → `POST /api/config/llm-profiles/{name}/set-default`

View File

@@ -0,0 +1,112 @@
---
name: config-mcp
description: Use when user asks to configure MCP (Model Context Protocol) profiles, add MCP servers, manage MCP integrations, or enable/disable MCP tools for extended functionality.
---
# Config MCP - MCP Profile Management
## Overview
Manage MCP (Model Context Protocol) profiles for VibeSurf. MCP allows integrating external tools and data sources with the AI.
## When to Use
- User wants to add a new MCP server
- User needs to configure MCP integrations
- User wants to update MCP server parameters
- User needs to list or manage existing MCP profiles
- User wants to enable/disable MCP tools
## API Endpoints
Base path: `$VIBESURF_ENDPOINT/api/config`
### MCP Profile Management
| Action | Method | Endpoint | Description |
|--------|--------|----------|-------------|
| List Profiles | GET | `/api/config/mcp-profiles?active_only=true` | List all MCP profiles |
| Get Profile | GET | `/api/config/mcp-profiles/{mcp_id}` | Get specific profile details |
| Create Profile | POST | `/api/config/mcp-profiles` | Create new MCP profile |
| Update Profile | PUT | `/api/config/mcp-profiles/{mcp_id}` | Update existing profile |
## Request Examples
### Create MCP Profile
```json
POST /api/config/mcp-profiles
{
"display_name": "My MCP Server",
"mcp_server_name": "server-name",
"mcp_server_params": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-name"],
"env": {
"API_KEY": "..."
}
},
"description": "Description of what this MCP server does"
}
```
### Update MCP Profile
```json
PUT /api/config/mcp-profiles/{mcp_id}
{
"display_name": "Updated Name",
"mcp_server_params": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-name"],
"env": {
"API_KEY": "new-key"
}
}
}
```
## Profile Fields
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| display_name | string | Yes | Human-readable name |
| mcp_server_name | string | Yes | MCP server identifier |
| mcp_server_params | object | Yes | Server configuration |
| description | string | No | Profile description |
| is_active | bool | No | Enable/disable profile |
## MCP Server Params
| Field | Type | Description |
|-------|------|-------------|
| command | string | Command to run (e.g., npx, uvx, docker) |
| args | array | Arguments for the command |
| env | object | Environment variables |
## Using MCP Tools
Once MCP profiles are configured, their tools become available through the `integrations` skill:
```
1. List available tools → GET /api/tool/search?keyword=mcp
2. Execute MCP tool → POST /api/tool/execute
{
"action_name": "execute_extra_tool",
"parameters": {
"tool_name": "mcp.{server_name}.{tool_name}",
"tool_arguments": {...}
}
}
```
## Common MCP Servers
- `@modelcontextprotocol/server-filesystem` - File system access
- `@modelcontextprotocol/server-github` - GitHub integration
- `@modelcontextprotocol/server-postgres` - PostgreSQL access
- `@modelcontextprotocol/server-puppeteer` - Browser automation
## Workflow
1. **Identify MCP server** → Choose from available MCP servers
2. **Create profile**`POST /api/config/mcp-profiles` with server params
3. **Verify tools** → Use `integrations` skill to list and use MCP tools

View File

@@ -0,0 +1,97 @@
---
name: config-schedule
description: Use when user asks to schedule workflows, manage cron jobs for automated workflow execution, enable/disable schedule triggers, or view workflow execution schedules.
---
# Config Schedule - Workflow Schedule Management
## Overview
Manage scheduled workflow executions using cron expressions. Schedule workflows to run automatically at specified times.
## When to Use
- User wants to schedule a workflow to run automatically
- User needs to set up cron-based workflow triggers
- User wants to enable/disable existing schedules
- User needs to view or update workflow schedules
- User wants to see which workflows have schedules configured
## API Endpoints
Base path: `$VIBESURF_ENDPOINT/api/schedule`
### Schedule Management
| Action | Method | Endpoint | Description |
|--------|--------|----------|-------------|
| List Schedules | GET | `/api/schedule` | Get all workflow schedules |
| Get Schedule | GET | `/api/schedule/{flow_id}` | Get schedule for specific workflow |
| Create Schedule | POST | `/api/schedule` | Create new schedule for a workflow |
| Update Schedule | PUT | `/api/schedule/{flow_id}` | Update existing schedule |
## Request Examples
### Create Schedule
```json
POST /api/schedule
{
"flow_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"cron_expression": "0 9 * * 1-5",
"is_enabled": true,
"description": "Run every weekday at 9 AM"
}
```
### Update Schedule
```json
PUT /api/schedule/{flow_id}
{
"cron_expression": "0 12 * * *",
"is_enabled": true,
"description": "Run daily at noon"
}
```
### Enable/Disable Schedule
```json
PUT /api/schedule/{flow_id}
{
"is_enabled": false
}
```
## Schedule Fields
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| flow_id | string | Yes | Workflow/Flow ID to schedule |
| cron_expression | string | No | Cron expression (e.g., '0 9 * * 1-5') |
| is_enabled | bool | No | Whether the schedule is active |
| description | string | No | Description of the schedule |
## Cron Expression Format
Standard cron format: `minute hour day_of_month month day_of_week`
| Expression | Description |
|------------|-------------|
| `0 9 * * 1-5` | Every weekday at 9:00 AM |
| `0 12 * * *` | Every day at 12:00 PM |
| `0 */6 * * *` | Every 6 hours |
| `0 0 * * 0` | Every Sunday at midnight |
| `0 8,20 * * *` | At 8:00 AM and 8:00 PM daily |
## Workflow
1. **Get workflow ID** → From existing workflows or import
2. **Create schedule**`POST /api/schedule` with cron expression
3. **Verify schedule**`GET /api/schedule/{flow_id}` to confirm
4. **Update as needed**`PUT /api/schedule/{flow_id}` to modify
## Notes
- Each workflow can only have one schedule
- Schedules are automatically reloaded after creation/update
- The schedule manager must be running for schedules to execute
- `next_execution_at` is automatically calculated from the cron expression

View File

@@ -0,0 +1,79 @@
---
name: config-vibesurf
description: Use when user asks to configure VibeSurf API key, import or export workflows, manage workflow skills, or execute custom workflows.
---
# Config VibeSurf - VibeSurf Configuration
## Overview
Manage VibeSurf API key and workflow configurations. Import, export, and execute custom workflows.
## When to Use
- User needs to set up VibeSurf API key
- User wants to import a workflow from JSON
- User needs to export a workflow to JSON
## API Endpoints
Base path: `$VIBESURF_ENDPOINT/api/vibesurf`
### API Key Management
| Action | Method | Endpoint | Description |
|--------|--------|----------|-------------|
| Check Status | GET | `/api/vibesurf/status` | Get VibeSurf connection status |
| Verify Key | POST | `/api/vibesurf/verify-key` | Verify and store API key |
### Workflow Management
| Action | Method | Endpoint | Description |
|--------|--------|----------|-------------|
| Import Workflow | POST | `/api/vibesurf/import-workflow` | Import workflow from JSON |
| Export Workflow | GET | `/api/vibesurf/export-workflow/{flow_id}` | Export workflow to JSON file |
## Request Examples
### Verify API Key
```json
POST /api/vibesurf/verify-key
{
"api_key": "vs-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
```
### Import Workflow
```json
POST /api/vibesurf/import-workflow
{
"workflow_json": "{\"name\": \"My Workflow\", \"description\": \"...\", \"data\": {...}}"
}
```
## API Key Format
VibeSurf API keys must:
- Start with `vs-`
- Be 51 characters total length
- Example: `vs-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
## Workflow Import/Export
### Import
- Accepts Langflow-compatible JSON format
- Requires valid VibeSurf API key
- Returns `workflow_id` and `edit_url`
### Export
- Exports workflow to JSON file
- Removes sensitive data (API keys) automatically
- Returns file path to exported JSON
## Workflow
1. **Check API key status**`GET /api/vibesurf/status`
2. **Set up API key** (if needed) → `POST /api/vibesurf/verify-key`
3. **Import workflows**`POST /api/vibesurf/import-workflow`
4. **Export workflows**`GET /api/vibesurf/export-workflow/{flow_id}`

View File

@@ -0,0 +1,27 @@
---
name: crawl
description: Use when user asks to extract main content, structured data, or specific information from a webpage using LLM-powered crawling.
---
# Crawl - LLM-Powered Page Extraction
## Overview
Crawl or scrape a webpage with LLM analysis.
## When to Use
- Extract main article content
- Get specific information from a page
- Parse structured data
- Analyze page content
## Available Actions
| Action | Description |
|--------|-------------|
| `skill_crawl` | Crawl or scrape a web page with tab_id |
## How It Works
Call VibeSurf API with `skill_crawl` and prompt describing what to extract. Returns LLM-parsed structured data.

View File

@@ -0,0 +1,31 @@
---
name: fetch
description: Use when user asks to fetch URL content, read documentation from a URL, get webpage content as markdown, or extract structured content from any web page URL.
---
# Fetch - Get Structured Content from URLs
## Overview
Fetch and extract structured markdown content from any URL without opening a browser.
## When to Use
- Fetch documentation from a URL
- Read webpage content as markdown
- Get structured content from any web page
- Extract article or blog post content
- Parse HTML content into clean markdown format
## Available Actions
| Action | Description |
|--------|-------------|
| `skill_fetch` | Fetch URL and return structured markdown content |
## When NOT to Use
- For AI-powered web search → use `search` skill instead
- For interactive browser control → use `browser` skill instead
- For complex data extraction → use `crawl` or `js_code` skill instead

View File

@@ -0,0 +1,32 @@
---
name: finance
description: Use when user asks for stock data, financial information, company details, historical prices, earnings, dividends, or analyst recommendations from Yahoo Finance.
---
# Finance - Stock Data & Financial Information
## Overview
Get comprehensive financial data for stocks from Yahoo Finance.
## When to Use
- Get stock information
- Historical prices
- News and earnings
- Dividends and analyst recommendations
## Available Actions
| Action | Description |
|--------|-------------|
| `skill_finance` | Retrieve company info, historical prices, news, earnings, dividends, analyst recommendations |
## Data Available
- Company information
- Historical prices
- News
- Earnings
- Dividends
- Analyst recommendations

View File

@@ -0,0 +1,105 @@
---
name: integrations
description: Use when user asks to interact with external apps like Gmail, GitHub, Slack, Google Calendar, Notion via Composio or MCP integrations. Direct API is faster than browser automation.
---
# Integrations - External App Automation
## Overview
Direct API access to 100+ external apps via Composio and MCP integrations.
## When to Use
- User needs Gmail, GitHub, Slack, etc.
- Service has Composio/MCP support
- Want faster, more reliable than browser automation
**Why use over browser?**
- Direct API = 10-100x faster
- More reliable (no UI changes)
- Better for bulk operations
## Available Actions
| Action | Purpose |
|--------|---------|
| `get_all_toolkit_types` | See all available apps |
| `search_extra_tool` | Find specific app actions |
| `get_extra_tool_info` | See action parameters |
| `execute_extra_tool` | Run app action |
## The Pattern
1. **List** available apps
2. **Search** for specific actions
3. **Get** parameter schema
4. **Execute** with parameters
## Tool Naming Convention
```
cpo.{service}.{action} # Composio tools
mcp.{server}.{action} # MCP tools
```
## Configuration Required
Before using Composio or MCP tools, you must configure them first:
| Integration | Configuration Skill | What to Configure |
|-------------|---------------------|-------------------|
| Composio (Gmail, GitHub, etc.) | `config-composio` | API key + enable toolkits |
| MCP servers | `config-mcp` | Add MCP server profiles |
**Workflow:**
1. Configure using appropriate `config-*` skill
2. Then use `integrations` skill to execute tools
For example:
1. First: `config-composio` → verify API key + enable `gmail` toolkit
2. Then: `integrations` → execute `cpo.gmail.GMAIL_SEND_EMAIL`
## Common Integrations
| Service | Common Actions |
|---------|----------------|
| Gmail | Send, read, organize emails |
| GitHub | Create PRs, issues, releases |
| Slack | Send messages, manage channels |
| Google Calendar | Create events, manage scheduling |
| Notion | Create pages, update databases |
## Best Practices
| Practice | Why |
|----------|-----|
| Search before execute | Find exact tool name and parameters |
| Use search filters | Reduce noise in results |
| Check authentication | Configure credentials in VibeSurf |
| Prefer integrations for API tasks | Faster than browser automation |
## Error Handling
| Error | Solution |
|-------|----------|
| Tool not found | Use `search_extra_tool` to find correct name |
| Auth failed | Configure credentials in VibeSurf |
| Invalid params | Use `get_extra_tool_info` to see schema |
## Integration vs Browser Automation
| Task | Use Integration | Use Browser |
|------|----------------|-------------|
| Send Gmail | ✅ Direct API | ❌ Slow |
| GitHub PR | ✅ Direct API | ❌ Overkill |
| Custom form | ❌ Not supported | ✅ `browser-use` |
**Rule:** If Composio/MCP supports the app, use integration.
## Common Toolkit Types
- `gmail`, `github`, `slack`
- `google_calendar`, `google_sheets`
- `notion`, `trello`, `asana`, `jira`
- Many more available via `get_all_toolkit_types`

View File

@@ -0,0 +1,36 @@
---
name: js_code
description: Use when user asks to extract structured data from a webpage like lists, tables, products, posts, or items with the same structure. This auto-generates JavaScript code and executes it to return parsed results.
---
# JS Code - Structured Data Extraction
## Overview
Automatically generates and executes JavaScript to extract structured data from webpages. **Best for extracting multiple items with the same structure.**
## When to Use
- Extract all products/prices from a page
- Get all posts/articles/listings
- Pull table data
- Extract repeated elements with same structure
## Available Actions
| Action | Description |
|--------|-------------|
| `skill_code` | Generate and execute JavaScript from functional requirements with iterative retry logic |
## How It Works
Call VibeSurf API with `skill_code` and a prompt describing what to extract. The system generates optimized JavaScript and returns parsed results.
## Best For
| Use Case | Why |
|----------|-----|
| All product prices | Repeated structure |
| All article titles | List extraction |
| Table data | Structured parsing |
| All links of a type | Pattern matching |

View File

@@ -0,0 +1,23 @@
---
name: screenshot
description: Use when user asks to take a screenshot of a webpage or capture visual state of the browser.
---
# Screenshot - Page Capture
## Overview
Take screenshots of webpages.
## When to Use
- Need visual inspection of page
- Debugging UI issues
- Verifying page state
- Capturing layout
## Available Actions
| Action | Description |
|--------|-------------|
| `skill_screenshot` | Take screenshot on a web page with tab_id |

View File

@@ -0,0 +1,27 @@
---
name: search
description: Use when user asks to search the web for information, research a topic, find latest news, or get AI-powered search results with summaries.
---
# Search - AI-Powered Web Search
## Overview
Advanced search using AI (Gemini) for intelligent results.
## When to Use
- Search the web for information
- Research a topic
- Find latest news/information
- Get AI-curated search results
## Available Actions
| Action | Description |
|--------|-------------|
| `skill_search` | Advanced search by using Gemini AI search |
## How It Works
Call VibeSurf API with `skill_search` and search query. Returns AI-generated summary with sources.

View File

@@ -0,0 +1,27 @@
---
name: summary
description: Use when user asks to summarize a webpage's content, get the main points, or understand what a page is about.
---
# Summary - Webpage Summarization
## Overview
AI-powered summarization of webpage content.
## When to Use
- User asks what a page is about
- Need a quick summary of content
- Get main points from an article
- Understand page purpose
## Available Actions
| Action | Description |
|--------|-------------|
| `skill_summary` | Summarize a web page with tab_id |
## How It Works
Call VibeSurf API with `skill_summary` on the current tab. Returns AI-generated summary of the page content.

View File

@@ -0,0 +1,27 @@
---
name: trend
description: Use when user asks for trending news, real-time news, or hot topics from NewsNow.
---
# Trend - Trending News
## Overview
Get trending and real-time news via NewsNow.
## When to Use
- Need trending/hot topics
- Real-time news updates
- Current events
## Available Actions
| Action | Description |
|--------|-------------|
| `skill_trend` | Get trending/real-time news via NewsNow. Leave keywords EMPTY for general hot searches. Only set keywords for specific topics. |
## Usage Notes
- Leave keywords EMPTY for general hot searches (avoids over-filtering)
- Only set keywords when searching for specific topics

View File

@@ -0,0 +1,36 @@
---
name: website-api
description: Use when user asks to interact with Social media platforms like Xiaohongshu, Weibo, Zhihu, Douyin, or YouTube via their unified APIs.
---
# Website API - Platform APIs
## Overview
Unified API handling for specific website platforms.
## When to Use
- Interact with Chinese social platforms
- Need platform-specific API access
- Xiaohongshu, Weibo, Zhihu, Douyin, YouTube
## Available Actions
| Action | Description |
|--------|-------------|
| `get_website_api_params` | Get API parameters and available methods for platforms: "xiaohongshu", "weibo", "zhihu", "douyin", "youtube" |
| `call_website_api` | Call website platform API with unified handling |
## Supported Platforms
- xiaohongshu (小红书)
- weibo (微博)
- zhihu (知乎)
- douyin (抖音)
- youtube
## Usage Pattern
1. Get API params for platform
2. Call API with parameters

View File

@@ -0,0 +1,83 @@
---
name: workflows
description: Use when user asks to execute, find, or run pre-built VibeSurf automation workflows like video downloads, auto-login, or data collection templates.
---
# Workflows - Pre-Built Automations
## Overview
Execute pre-configured VibeSurf workflows for common automation tasks.
## When to Use
- You know a workflow exists for your task
- You want reusable automation sequences
- Task has a known pattern (video download, auto-login, etc.)
**Examples:**
- Video download workflows
- Auto-login sequences
- Data collection templates
- Social media posting
## Available Actions
| Action | Purpose |
|--------|---------|
| `search_workflows` | Find workflows by keyword |
| `get_workflow_params` | See required parameters |
| `execute_workflow` | Run with custom values |
## The Pattern
1. **Search** for workflow with keyword
2. **Check** parameters required
3. **Execute** with tweak parameters (custom values)
## Tweak Parameters
Workflows have adjustable components called "tweaks". Provide custom values to customize workflow behavior without modifying the workflow itself.
## Best Practices
| Practice | Why |
|----------|-----|
| Search before executing | Confirm workflow exists and see parameters |
| Use tweaks for customization | Don't modify workflow directly |
| Check results | Returns file paths and detailed output |
## Common Workflow Types
| Type | Description |
|------|-------------|
| Video Download | Download from YouTube, etc. |
| Auto-Login | Authenticate to sites |
| Data Collection | Scrape structured data |
| Social Post | Post to platforms |
## Workflow vs Browser-Use
| Factor | Workflows | Browser-Use |
|--------|-----------|-------------|
| Reusability | Pre-built, reusable | Custom, one-off |
| Setup | None (already exists) | Describe task each time |
| Use when | Known pattern exists | Custom automation needed |
**Decision:** Known pattern → workflows. Unique task → browser-use.
## Error Handling
| Error | Solution |
|-------|----------|
| Workflow not found | Use `search_workflows` to find correct ID |
| Invalid tweak params | Check `get_workflow_params` for correct IDs |
| Execution failed | Verify all required params provided |
## Finding Workflows
Common search keywords:
- `video download`, `youtube`
- `auto login`
- `data collection`, `scrape`
- `social media`