Write a Python script and Aisle runs it on managed compute, with the schedule, secrets, retries, versions, and audit trail handled for you.
Complete with integrations, RAG, smarter retries, versioning and more.
In Aisle, prompts are versioned entities with their model settings and revision logs attached. Call any by slug.
aisle.ai.run_prompt("classify-inbound", { "subject": email["subject"], "body": email["body"], })
Call integrations like Slack, Telegram, Asana, Jira and more. Each one is namespaced under aisle.integrations.
aisle.integrations.slack.create_message( channel="#sales-inbound", text="New lead from Acme", )
Search and store agentic memories, or query an on-the-fly RAG database, with a single call.
aisle.memories.search( "Acme renewal", folder="crm-notes", )
Fan a function over a list of items. Concurrency, retries, rate limits, and checkpoints are arguments.
aisle.parallel( handle, items=new_emails, concurrency=5, retry=aisle.RetryPolicy(max_attempts=3), )
Every save snapshots the script, input schema, and entrypoint together. Restore any from history.
Compare any two revisions of a task line-by-line. Reviewable like a pull request.
Run on demand, on a schedule, on an HTTP request, or in response to an event from any connected integration.
run by handcronHTTP endpointerror eventspush, PR, releasenew emailnews topicsissue, commentchannel messagenew emailsearch resultsmessage, mentionbot messageany HTTP POSTalso callable from any taskA task can hand its output to a person, return it to the calling system, write it into your knowledge base, or forward it to another service. You can also share the task itself or reuse it as a tool.
Output a read-only or interactive chat, seeded with knowledge and a starting message so the recipient can ask follow-ups.
Share the task with specific people or your whole organization.
A canvas is hard to manage. Changes are onerous and tough to follow. A task moves the problem into code, where logic is easier to reason about, faster to modify, and version tracking is fast and simple.

# Find every open deal at this company. company = aisle.inputs.get("company") deals = aisle.integrations.pipedrive.search_deals( org_name=company, ) # For each deal, grab news since the last run. research = [] for deal in deals: news = aisle.ai.gemini_google_search( f"{company} news since {aisle.run.last_run_at}" ) if news: research.append({"deal": deal, "news": news}) # Hand the lot to a saved prompt to write the brief. brief = aisle.ai.run_prompt( slug="account-brief", research=research, ) aisle.integrations.slack.send_message( channel="#revenue", text=brief, )
Free plan includes the runtime, integrations, and revision history.
An example of a complete task: It runs on a schedule, classifies new email with a saved prompt, checks prior context in memory, and posts qualified leads to Slack.
1def handle(email):2 # Skip emails handled on a previous run (cache persists between runs)3 if aisle.cache.get(f"seen-{email['id']}"):4 return56 classification = aisle.ai.run_prompt("classify-inbound", {7 "subject": email["subject"],8 "body": email["body"],9 })1011 if classification["category"] == "qualified-lead":12 notes = aisle.memories.search(email["from"], folder="crm-notes")13 aisle.memories.store(14 name=email["from"],15 content=email["body"],16 folder="crm-notes",17 )1819 aisle.cache.set(f"seen-{email['id']}", True)2021new_emails = aisle.integrations.gmail.search_messages(22 query="label:inbox is:unread newer_than:1d",23 max_results=50,24)2526aisle.parallel(27 handle,28 items=new_emails,29 concurrency=5,30 retry=aisle.RetryPolicy(max_attempts=3, initial_backoff_ms=1000),31)
No `pip install`, no requirements file. It is just the work.
Gmail connects once on the task. Auth never appears in the script.
"classify-inbound" lives somewhere a non-engineer can edit.
No vector database, no embedding model to pick.
Concurrency, backoff, and rate limits in one place, not a task queue.
Tasks share state, prompts, and memory with the other building blocks. Reach for the shape that fits.
A shared home for a team or domain. Tasks live in a project alongside its prompts, memories, and connectors.
Learn moreSearch and store knowledge from inside a task with a single call. No vector database to provision.
Learn moreSaved prompts a task calls by slug. Edit the prompt and every task that references it updates with it.
Learn moreOpen the editor, write a script, and run it against your connected accounts.