Skip to main content

STROT SDK

Build tools, agents, pipelines, and dashboards for your STROT instance — in Python.

Installation

pip install strot-sdk

# With CLI (login, init, deploy commands)
pip install strot-sdk[cli]

# With pandas support (query_df)
pip install strot-sdk[pandas]

# Everything
pip install strot-sdk[cli,pandas]

Quick Start

# 1. Authenticate
strot login

# 2. Scaffold a project
strot init tool my-calculator

# 3. Edit main.py (use Claude Code, Cursor, or any editor)
cd my-calculator

# 4. Test locally
strot test

# 5. Deploy to your STROT instance
strot deploy

SDK Reference

Tools (@function)

from strot_sdk import function, llm

@function(
    name='calculate_roi',
    description='Calculate return on investment',
    category='finance',
    parameters=[
        {'name': 'cost', 'type': 'number', 'description': 'Total cost'},
        {'name': 'revenue', 'type': 'number', 'description': 'Total revenue'},
    ],
    returns={'type': 'number', 'description': 'ROI percentage'}
)
class CalculateROI:
    def run(self, cost: float, revenue: float) -> float:
        return ((revenue - cost) / cost) * 100

Agents (@agent)

from strot_sdk import agent

@agent(
    name='sales_analyst',
    description='Analyzes sales data and provides insights',
    tools=['calculate_roi', 'top_n'],
    model='gpt-4o',
    temperature=0.1,
)
class SalesAnalyst:
    system_prompt = """You are a sales analyst.
    Analyze data and provide actionable recommendations."""

Cortex Pipelines (@cortex)

Build data pipelines that compile to JSON DSL and deploy to your STROT instance.

from strot_sdk import cortex
from strot_sdk.cortex import Flow

@cortex(name='daily_etl', description='Daily ETL pipeline')
class DailyETL:
    def build(self, flow: Flow):
        # Load data from a saved query
        data = flow.data_connector('load_sales', query_id=42)

        # Transform with LLM
        cleaned = flow.transform(data, prompt='Clean and normalize the data')

        # Route based on content
        router = flow.router(cleaned, routes=[
            {'name': 'high_value', 'description': 'Orders over $1000'},
            {'name': 'standard', 'description': 'Regular orders'},
        ], prompt='Classify by order value')

        # Publish results
        flow.publish(router, name='daily_report', destination='slack', channel='#data')

Available Flow methods:

Method Description
flow.data_connector(id, query_id=...) Load data from a saved query
flow.transform(step, prompt=...) LLM-powered data transformation
flow.arena(step, tool=..., parameters=...) Run an Arena tool
flow.router(step, routes=[], prompt=...) Conditional routing
flow.gate(step, condition=..., approval_required=...) Quality gate or approval
flow.publish(step, name=..., destination=...) Output/publish results
flow.action(step, action_type=..., target=...) Notifications/triggers
flow.ai_feeds(step, prompt=..., insight_count=...) Generate AI insights
flow.connect(source, target) Manual edge connection

Pages / Dashboards (@page)

Build dashboards that compile to JSON layout and deploy to your STROT instance.

from strot_sdk import page
from strot_sdk.pages import Dashboard, Row, KPI, Chart, Table

@page(name='sales_dashboard', description='Sales overview', type='dashboard')
class SalesDashboard:
    def layout(self):
        return Dashboard(
            Row(
                KPI(query_id=1, label='Revenue', format='currency'),
                KPI(query_id=2, label='Orders'),
                KPI(query_id=3, label='Customers'),
                KPI(query_id=4, label='Avg Order', format='currency'),
            ),
            Row(
                Chart(query_id=5, type='line', title='Revenue Trend', span=8),
                Chart(query_id=6, type='donut', title='By Region', span=4),
            ),
            Row(
                Table(query_id=7, title='Recent Orders', sortable=True),
            ),
        )

Block types: KPI, Chart, Table, Text, StatGrid, ProgressList

Chart types: line, bar, area, donut, scatter, stacked_bar, funnel

Grid: 12-column layout. Set span on any block (default varies by type).

LLM

All LLM calls go through your STROT instance — no API keys needed in your code.

from strot_sdk import llm

# Simple completion
result = llm.complete("Summarize this: " + text)
result = llm("Shorthand syntax works too")

# Chat
result = llm.chat([
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "What is 2+2?"},
])

# Classify
category = llm.classify("Great product!", ["positive", "negative", "neutral"])

# Extract structured data
data = llm.extract("John is 30 years old", {"name": "string", "age": "number"})

# Transform data
result = llm.transform(data, "Convert to French", output_format="json")

Data Access

from strot_sdk import strot, query, query_one, query_df

# Via registry (saved queries by name)
rows = strot.queries['monthly_sales'].execute()

# Via data source
rows = strot.dataSources['production'].query("SELECT * FROM users LIMIT 10")

# Direct SQL
rows = query("SELECT * FROM users", data_source_id=1)
row = query_one("SELECT * FROM users WHERE id = 1", data_source_id=1)

# Pandas DataFrame (requires strot-sdk[pandas])
df = query_df("SELECT * FROM orders", data_source_id=1)

Destinations

from strot_sdk import email, slack, webhook

email.send(to="team@example.com", subject="Report Ready", body="The daily report is ready.")
slack.send(channel="#alerts", message="New alert!")
webhook.post(url="https://api.example.com/hook", data={"event": "deploy"})

CLI Reference

Authentication

strot login                              # Interactive (opens browser)
strot login --token sk_live_abc123       # Direct API key
strot login -i https://app.strot.ai -o <org-uuid>
strot whoami                             # Show current user/org
strot logout                             # Clear credentials
strot logout --all                       # Clear all profiles

Project Scaffolding

strot init tool my-calculator            # Python tool
strot init agent my-analyst              # Python agent
strot init cortex my-pipeline            # Cortex pipeline
strot init page my-dashboard             # Page/dashboard
strot init tool my-tool -d "Description" -c finance

Resources

strot resources                          # List all resources
strot resources queries                  # List saved queries
strot resources datasources              # List data sources
strot resources tools                    # List deployed tools

Testing & Deployment

strot test                               # Run/compile locally
strot test -p input_text="Hello"         # Run with parameters
strot deploy                             # Deploy to STROT instance
strot deploy --dry-run                   # Validate without deploying

Configuration

Credentials are stored in ~/.strot/credentials (YAML, 0600 permissions):

version: 1
current_profile: default
profiles:
  default:
    url: https://app.strot.ai
    api_key: sk_live_abc123
    org: 98bf9a0a-c9cd-42a8-9ea4-4f7fee9a4535
    user_email: dev@example.com

Priority chain (highest to lowest):

  1. Constructor arguments (StrotClient(url=..., api_key=...))
  2. Environment variables (STROT_URL, STROT_API_KEY)
  3. Credentials file (~/.strot/credentials)

Multiple profiles:

strot login --profile staging -i https://staging.strot.ai
strot login --profile production -i https://app.strot.ai

Development

git clone https://github.com/strot-ai/strot-sdk.git
cd strot-sdk
poetry install --with dev,cli

# Run tests
poetry run pytest -v

# Run with coverage
poetry run pytest --cov=strot_sdk

License

MIT

Metadata

Release files for strot-sdk 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for strot-sdk 0.1.0
File Size Uploaded
strot_sdk-0.1.0.tar.gz 35.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for strot-sdk 0.1.0
File Interpreter ABI Platform
strot_sdk-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 79.6 kB

Release files / strot_sdk-0.1.0.tar.gz

Download URL strot_sdk-0.1.0.tar.gz
Size 35.3 kB
Tags Source
SHA-256 checksum
How to use checksums
72e11f4e27b10c7db0d07a524b2faa469f3a83c5ea2e56ad0d816d8a16fb0951
BLAKE2b-256 checksum
How to use checksums
8739650b11d69df08e8898bd04e21c06f115c814c4ed4c3a416044ef9fc0dc32
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 8, 2026.

Transparency log

Release files / strot_sdk-0.1.0-py3-none-any.whl

Download URL strot_sdk-0.1.0-py3-none-any.whl
Size 44.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
438768dac48385f84b7f779da48a4fce3379225d7abe7266cdf136a72dd86a51
BLAKE2b-256 checksum
How to use checksums
4fa385e8b43f6dcf9fb5398982568e62c2a7804170bfd8b195f2d85f08dd2182
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page