skills/scout-workflow/SKILL.md
Execute and manage Scout workflows programmatically. Use when you need to run workflows, create revisions, or manage workflow lifecycle via API. Supports execution, streaming, and CLI-based deployment.
npx skillsauth add scoutos/scout-skills scout-workflowInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Execute and manage Scout workflows programmatically. Workflows are automated processes that connect tools, respond to triggers, and execute predefined sequences of actions.
All Scout API endpoints require Bearer token authentication. Use your Scout API key.
Authorization: Bearer YOUR_API_KEY
export SCOUT_API_KEY="your-api-key-here"
https://api.scoutos.com
Execute a workflow by ID with optional inputs.
POST /v2/workflows/{workflow_id}/execute
| Parameter | Type | Location | Required | Description |
|-----------|------|----------|----------|-------------|
| workflow_id | string | path | Yes | Unique workflow identifier |
| environment | string | query | No | Execution environment: production (default), staging, development, console |
| revision_id | string | query | No | Specific revision to execute |
| session_id | string | query | No | Session ID for conversation continuity |
| inputs | object | body | No | Key-value pairs passed to workflow |
| streaming | boolean | body | No | Enable streaming response (default: false) |
curl -X POST "https://api.scoutos.com/v2/workflows/wf_abc123/execute" \
-H "Authorization: Bearer $SCOUT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"inputs": {
"user_message": "Analyze this data and provide insights",
"data_url": "https://example.com/data.csv"
},
"streaming": false
}'
curl -X POST "https://api.scoutos.com/v2/workflows/wf_abc123/execute?environment=staging" \
-H "Authorization: Bearer $SCOUT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"inputs": {
"query": "Find all customers with unpaid invoices"
},
"streaming": false
}'
curl -X POST "https://api.scoutos.com/v2/workflows/wf_abc123/execute" \
-H "Authorization: Bearer $SCOUT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"inputs": {
"user_message": "Generate a report"
},
"streaming": true
}'
{
"run": {
"stop_reason": "workflow_run_completed",
"session_id": "sess_xyz789",
"workflow_run_id": "run_def456",
"state": {
"output": {
"result": "Analysis complete...",
"summary": "3 insights found"
}
},
"errors": []
},
"workflow_id": "wf_abc123",
"output_block_id": "output_block_1"
}
| Value | Description |
|-------|-------------|
| workflow_run_completed | Workflow finished successfully |
| workflow_run_failed | Workflow encountered an error |
pip install scoutos
from scoutos import Scout
client = Scout(api_key="YOUR_API_KEY")
# Execute workflow
response = client.workflows.run(
workflow_id="wf_abc123",
inputs={
"user_message": "Hello there! I have a question...",
}
)
# Print result
print(response)
from scoutos import Scout
client = Scout(api_key="YOUR_API_KEY")
# Stream workflow execution
response = client.workflows.run_stream(
workflow_id="wf_abc123",
inputs={
"user_message": "Hello there! I have a question..."
}
)
for chunk in response.data:
print(chunk)
from scoutos import Scout
client = Scout(api_key="YOUR_API_KEY")
# Deploy a new workflow revision
response = client.workflows.create_revision(
workflow_id="wf_abc123",
workflow_key="my-workflow"
)
import asyncio
from scoutos import AsyncScout
client = AsyncScout(api_key="YOUR_API_KEY")
async def main():
response = await client.workflows.run(
workflow_id="wf_abc123",
inputs={"query": "Search for documents"}
)
print(response)
asyncio.run(main())
npm install scoutos
# or
pnpm add scoutos
import { ScoutClient } from "scoutos";
const client = new ScoutClient({ apiKey: "YOUR_API_KEY" });
// Execute workflow
const response = await client.workflows.run("workflow_id", {
inputs: {
user_message: "Hello there! I have a question...",
}
});
console.log(response);
import { ScoutClient } from "scoutos";
const client = new ScoutClient({ apiKey: "YOUR_API_KEY" });
const response = await client.workflows.run_stream("workflow_id", {
inputs: {
user_message: "Hello there! I have a question..."
}
});
console.log(response);
The Scout CLI enables managing workflows as code, with version control and CI/CD integration.
brew tap scoutos/scoutos-cli
brew install scoutos-cli
scout init
scout link
scout workflows run <workflow_folder>
scout workflows deploy <workflow_folder>
scout --version
project/
├── workflows/
│ └── my-workflow/
│ ├── workflow.yml # Workflow definition
│ └── inputs/
│ └── default.json # Default input parameters
└── scout.config.ts # Project configuration
name: My Workflow
description: An automated workflow
trigger:
type: webhook
blocks:
- id: input_1
type: input
config:
fields:
- name: user_message
type: string
- id: llm_1
type: llm
config:
model: gpt-4
prompt: "{{ inputs.user_message }}"
- id: output_1
type: output
config:
result: "{{ llm_1.response }}"
| Block | Description | |-------|-------------| | Input | Defines workflow input fields | | Output | Defines workflow output | | Text | Dynamic text with Jinja templating | | JSON | JSON data processing | | HTTP Request | Make HTTP API calls | | Extract Links | Extract links from markdown |
| Block | Description | |-------|-------------| | LLM | Generate text with language models (OpenAI, Anthropic) | | LLM Reasoning | Text generation with reasoning | | Execute JavaScript | Run custom JavaScript code | | Web Search | Search the web and extract results | | Web Page Scrape | Scrape web page content | | Exa Search | Advanced search with Exa API | | Exa Webpage Contents | Scrape webpage content with Exa |
| Block | Description | |-------|-------------| | Conditional | Branch based on conditions | | Continue If | Continue if condition is true | | Delay | Pause workflow execution | | Stop If | Stop if condition is true | | Reduce | Iterate with accumulator pattern |
| Block | Description | |-------|-------------| | Slack Message | Format markdown for Slack | | Slack Message Post | Post messages to Slack | | Slack Reaction | Add emoji reactions | | Slack Thread Get | Retrieve thread messages | | Trigger Slack | Trigger from Slack events | | Discord Message | Send messages to Discord | | Twilio Message | Send SMS via Twilio | | Copilot Message | LLM-powered responses | | Copilot Links | Display links with metadata |
| Block | Description | |-------|-------------| | HubSpot Contact Create | Create contacts in HubSpot | | HubSpot Contact Get | Retrieve contact info | | HubSpot Contact Search | Search contacts | | Linear Ticket Create | Create issues in Linear |
| Block | Description | |-------|-------------| | Query Collection Table | Search Scout collections | | Save Document to Table | Save documents to tables | | Key-Value Read | Read from key-value store | | Key-Value Write | Write to key-value store | | Key-Value Delete | Delete from key-value store |
| Block | Description | |-------|-------------| | Inspect Graph | Debug workflow state |
| Environment | Description |
|-------------|-------------|
| production | Live environment (default) |
| staging | Pre-production testing |
| development | Development testing |
| console | Latest changes in Scout UI |
Use Jinja syntax in workflow blocks for dynamic content:
{{ inputs.user_message }}
{{ llm_block.response }}
{% if condition %}value{% endif %}
# Access previous block output
{{ llm_1.generated_text }}
# Conditional logic
{% if input_block.priority == "high" %}
Urgent: {{ input_block.message }}
{% else %}
{{ input_block.message }}
{% endif %}
# Loop over arrays
{% for item in input_block.items %}
- {{ item.name }}: {{ item.value }}
{% endfor %}
# Date formatting
{{ "now" | datetime_format("%Y-%m-%d") }}
When a workflow fails, check the errors array in the response:
{
"run": {
"stop_reason": "workflow_run_failed",
"errors": [
"LLM block failed: API rate limit exceeded"
]
}
}
from scoutos import Scout
from scoutos.core.api_error import ApiError
client = Scout(api_key="YOUR_API_KEY")
try:
response = client.workflows.run(
workflow_id="wf_abc123",
inputs={"query": "test"}
)
except ApiError as e:
print(f"Status: {e.status_code}")
print(f"Error: {e.body}")
development or staging before productionstop_reason and errors arraysession_id for conversational workflowsdevelopment
Interact with Scout data platform API. Use when working with Scout collections, tables, documents, agents, drive storage, syncs, or usage. Supports CRUD operations on collections/tables/documents, agent management, file uploads/downloads, data sync configuration from various sources (web, Notion, Google Drive, etc.), and usage monitoring.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------