Build intelligent workflows.
With real code.
Steering is the integration platform for teams who write code. Wire up APIs, enrich data with Claude AI, route on any condition, inspect every byte. One platform — from cron job to human approval.
AI built in,
not bolted on.
Every step has access to await ai.prompt() for direct Claude answers and await ai.askWithTools() to give Claude your own workflows as live data tools — so it can query real state before responding. Define personas with system prompts, maintain conversation history, or call Claude raw. No SDK setup. No API key wiring.
Full visibility.
Zero guesswork.
Every execution captures the exact input and output of each step, all console.log() output, the payload sent to and returned from every external API, and runtime in milliseconds. Filter by step, compare runs, and see exactly where an integration broke — without adding custom logging.
Built for teams.
Secure by design.
Encrypted secrets are scoped per tenant and injected as secrets.API_KEY — never in plain text. Workflows are isolated per tenant with role-based access control. Expose workflows as authenticated REST endpoints or scheduled jobs. Set timeouts and control concurrency with max_parallel.
Why Steering
Real JavaScript execution
Every step runs in a secure isolated VM. Full async/await, fetch(), conditional returns, and fan-in joins — no proprietary DSL, no YAML gymnastics.
AI data enrichment
ai.prompt() for direct Claude responses. ai.askWithTools() to give Claude access to your own workflows as live data tools. ai.ask() for persona-driven, history-aware conversations.
Data tables & cache
Structured key-value tables with JSONPath queries and page-based cursors for sync state. A fast cache for cross-step reuse. No external Redis or DB required.
Human-in-the-loop
human.request() pauses a workflow and emails a form link to an approver. human.createFormUrl() generates a standalone form URL without halting execution. Set expiry, pre-fill fields, route to any address.
Built-in mail
Send transactional or batch emails from any step with mail.send(). Compose templates with mail.prepare(), then dispatch all at once with mail.sendAll(). No extra email orchestration.
XML & format parsing
xmlToJson() is available globally in every step — no npm install, no boilerplate. Handle legacy EDI feeds, SOAP responses, RSS, and vendor XML exports out of the box.
Conditional branching
Route to downstream steps based on success, error, or a custom condition set with $output.setCondition(). Fan out to parallel steps, fan in with join_mode: all.
100% observability
Every run logs inputs, outputs, console output, and timing per step. Nothing is a black box — inspect, compare, and debug any execution without touching the code.
Encrypted secrets
Secrets are stored encrypted, tenant-scoped, and injected as secrets.NAME at runtime. Never interpolated into source, never logged.
Built for integration-heavy teams
Whether you run your own stack or manage integrations for others, Steering gives you the runtime, the observability, and the AI tooling — without stitching together five separate services.
Ecommerce & ops teams
- Sync orders, inventory, and fulfilment across Shopify, 3PLs, ERPs, and carriers
- Enrich product data and classify support tickets with AI in the same pipeline
- Get alerted when a run fails — with the exact payload that caused it
Tech consultancies
- Manage integrations for multiple clients from a single multi-tenant platform
- Each client gets isolated secrets, workflows, and execution logs
- Expose client-facing REST endpoints or scheduled jobs without spinning up infrastructure
Small tech & platform teams
- Replace a patchwork of cron jobs, Lambda functions, and webhook handlers
- One place to see every data flow, every failure, every timing anomaly
- AI-assisted step authoring so the team that owns the logic writes the integration
AI data enrichment
Call Claude directly from any step script. Use ai.prompt() for direct answers, or ai.askWithTools() to let Claude call your own workflows as tools — querying live data before it responds.
// Fetch a support ticket, then classify it with Claude const ticket = await fetch( `${secrets.API_BASE}/tickets/${input.id}` ).then(r => r.json()) const urgency = await ai.prompt( `Classify this ticket urgency: low / medium / high / critical ${ticket.body}`, { maxTokens: 20 } ) $output({ ticket, urgency: urgency.trim() })
Claude built in
Every tenant gets `ai.prompt()` and `ai.askWithTools()` in every step script. No API wiring, no SDK setup — it just works. Use `askWithTools()` to let Claude call your own workflows as tools to fetch live data.
Service Registry
Register your APIs with base URLs, documentation, and usage notes. The AI assistant learns your stack before writing a single line.
Agentic tool-use
Register any workflow as a callable tool. When you call ai.askWithTools(), Claude decides which tools to invoke, fetches live data from your own systems, and returns a grounded answer — all within a single step.
100% observability
Every byte that moves through your workflows is captured and inspectable — from the data entering each step, to API calls made to external systems, to the final output. Real operational insight, not just pass/fail status.
Step inputs and outputs
Inspect the exact data that entered and left every step in every run. No black boxes — every transformation is visible.
Integration data flows
See the payloads sent to and received from every external system your workflows touch. Spot integration failures instantly.
Console output per step
Every `console.log()` in your step scripts is captured against the run. Debug runtime behaviour without guessing.
Runtime metrics
Execution time is recorded per step and per run. Identify slow integrations and optimise with real data, not estimates.
How it works
Connect your services
Register APIs in the Service Registry with base URLs, documentation links, and usage notes. Add encrypted secrets. The AI assistant learns your stack.
Build steps with AI
Describe what a step should do. The AI writes JavaScript pre-wired with your services, secrets, and workflow data globals.
Trigger, monitor, iterate
Run workflows via API or schedule. Inspect every execution — inputs, outputs, console, and timing — in one focused view.