Render Workflows
RenderOfficialCreated by Render
- Skill
- Tool integration
- Cloud and DevOps
- MIT
- Medium risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Render Workflows provides a framework for orchestrating long-running distributed tasks and durable flows. This skill covers the end-to-end lifecycle of workflow development, including defining tasks and flows in Python or TypeScript, local validation using the Render CLI, and deployment via Blueprints or direct CLI commands. It emphasizes using the correct SDK primitives to ensure tasks are independent and flows are resilient to infrastructure failures.
What it does
- Defines task and flow primitives using Python or TypeScript SDKs
- Supports local development and validation of workflows via the Render CLI
- Enables task chaining, parallel fan-out, and retry policy configuration
- Provides guidance on durable flow implementation for fault-tolerant execution
- Integrates workflow definitions into Render Blueprints for infrastructure-as-code deployment
- Facilitates triggering and monitoring of workflow runs through application code
When to use it
- When building long-running distributed tasks that require orchestration
- When you need to ensure work is preserved across infrastructure failures using durable flows
- When integrating task execution into an existing Python or TypeScript application
- When deploying workflow services as part of a Render Blueprint configuration
Advantages
- Native support for task retries and parallel execution
- Durable flows allow for automatic recovery and replay of failed steps
- Local development server enables testing before deployment
- Unified management through Render CLI and Blueprint integration
Usage examples
- “How do I start a new Render workflow project in Python?”
- The agent will guide you to use the Render CLI command render workflows init --language python to scaffold the project structure and install necessary dependencies.
- “How can I trigger a task from my existing application code?”
- The agent will provide the code snippet using the Render SDK client to call run_task or start_task with the appropriate workflow slug and input arguments.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/render-oss/render-workflows/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip render-workflows.zip -d .agents/skills
Documentation by Render
Render Workflows
Render Workflows is an SDK-based product for orchestrating long-running distributed tasks. A workflow is the deployed service. It registers two kinds of functions: tasks and flows.
When choosing between a Workflow, cron job, and background worker, read references/service-types.md.
Use Render SDK 1.x APIs (render>=1.0.1 for Python or @renderinc/sdk version 1.x for TypeScript). Local validation requires Render CLI 2.12.0 or later. Use CLI 2.16.0 or later when using the complete optional scaffolding and CLI deployment flow. Prefer the latest compatible releases. Python and TypeScript SDK 1.7.0 add durable flows; verify backend support separately. SDK 1.5.0 and CLI 2.32.0 alone do not enable durable workflows.
Render Workflows and its SDKs can introduce breaking changes. Treat the installed SDK version as authoritative for an existing project. For new projects, use the current official documentation and starter templates.
Tasks and Flows
| Primitive | Use for | Execution |
|---|---|---|
Task (@app.task / task()) | Independent jobs, task chains, parallel fan-out | Each run has its own compute and retry policy; ctx.run starts subtasks |
Flow (@app.flow / flow()) | Preserve completed work across infrastructure failures | Sequential ctx.step calls run plain functions inline; replay reuses recorded results |
Choose the primitive before writing code. Follow Tasks below for task setup, local validation, and clients. For flow code, adoption from tasks, capability checks, or recovery testing, follow Flows below. Deployment and workspace configuration are shared.
Check Current Sources
Before generating or changing SDK code, identify the installed versions. If the project or installed package is unavailable, explicitly label the proposed code as version-unverified:
render --version
python -m pip show render
npm ls @renderinc/sdkIf the Render CLI is not installed:
macOS:
brew install renderLinux/macOS:
curl -fsSL https://raw.githubusercontent.com/render-oss/cli/main/bin/install.sh | shWindows: download the executable from the CLI releases page
Use the source that matches the question:
Python SDK reference for Python signatures and minimum versions
TypeScript SDK reference for TypeScript signatures and minimum versions
Render CLI reference for current commands and flags
Defining Workflow Tasks for task behavior and run chaining
Limits and Pricing for Render Workflows for compute plans, quotas, retention, and pricing
Python examples and TypeScript examples for current scaffolding patterns
Render SDK repository for the implementation and changelogs
Before generating task or client code, fetch the relevant SDK example to verify current API patterns:
| What | Python | TypeScript |
|---|---|---|
| Task definitions (subtasks, retry, fan-out) | example/task/main.py | examples/task/ |
| Client (run, start, cancel, stream, list runs) | example/client/main.py | examples/client/ |
| Async client | example/client/async_main.py | — |
Do not silently upgrade an existing project's SDK major version. If an upgrade is part of the request, read the relevant SDK changelog and migrate all task definitions and callers together.
Tasks
SDK Rules
Preserve these rules in generated code:
Python installs and imports the
renderpackage, notrender_sdk.Every task function accepts a
TaskContextas its first positional parameter. Render supplies it; callers do not include it in task input.Chain a task run with
await ctx.run(task_definition, ...args). A task definition is not directly callable.All tasks in a
ctx.runchain belong to the same workflow service. Trigger another workflow through the SDK client or Render API.Python calls
app.start()from its workflow entrypoint. TypeScript task registration auto-starts in the workflow environment.A task reads run IDs from
ctx.metadata(task_run_id,root_task_run_id,parent_task_run_idin Python;taskRunId,rootTaskRunId,parentTaskRunIdin TypeScript), without a network request. Requires SDK 1.2.0+.Task arguments and return values must be JSON-serializable. For images/files, pass an object-storage key or URL between tasks, not bytes, buffers, open files, or exceptions.
Read references/quick-reference.md when writing task code or upgrading legacy task calls to the context API. Read references/task-patterns.md for chaining, fan-out, retries, scheduled triggers, or cross-workflow calls.
Set Up a Task Project
Inspect the existing dependency manifest and source files before asking the user to paste them. If the files are unavailable, provide a concrete integration outline and clearly identify what remains unverified.
Do not require render workflows init. In an existing codebase, add the SDK and task definitions directly, preserve the project's dependency and build conventions, and validate them with the local development server. For a minimal project or direct integration guidance, read references/manual-scaffolding.md.
Optional starter scaffolding
Use the CLI scaffolder when the user wants a quick example project or a new standalone workflow service:
render workflows initFor non-interactive setup, pass the language and destination explicitly:
render workflows init --confirm --language python --dir workflows --git=false
render workflows init --confirm --language node --dir workflows --git=falseUse --git=false when scaffolding inside an existing Git repository to avoid creating a nested repository. Other useful options include --template, --install-deps, and --install-agent-skill; verify current behavior in the CLI reference.
Validate Tasks Locally
For a first integration, follow the runnable Python or TypeScript local SDK walkthrough: define ping, start the local task server, invoke it from a separate client script, and verify the returned "pong". No init, deployment, or Render API key is needed for this local example. Set local mode in the calling application process, not only in the task server's environment.
After adding or changing SDK task definitions, use the local development server as the primary validation loop. Start it with the workflow's actual start command:
render workflows dev -- <workflow-start-command>Verify both registration and execution. In another terminal, list and run tasks against the local server:
render workflows tasks list --local
render workflows start <task-name> --local --input='[]' -o json
render workflows tasks runs show <task-run-id> --local -o jsonIf a task doesn't appear in the local task list, see Troubleshooting > Local task list is empty or missing tasks.
Use a JSON array for positional input. Python tasks can also receive a JSON object for named input. Read references/local-development.md for environment files, custom ports, run inspection, cancellation, and application-client configuration.
In non-interactive mode, workflows start returns the new task run ID before the run necessarily finishes. Use that ID with tasks runs show, polling for a bounded period until the run completes, fails, or is canceled. Verify the result or error, not only that the run was created.
When safe and practical, run this verification yourself and stop the dev server afterward. Do not claim a task registers successfully based only on source inspection.
Troubleshoot Missing Tasks
For tasks that work locally but are missing remotely, or client “Task not found” errors, read references/troubleshooting.md. Check the deployed version and registration logs, synchronous entrypoint imports, exact task slug, and credentials on the calling service before concluding the cause.
Trigger Deployed Tasks
Task slugs use {workflow-slug}/{task-name}.
Python, synchronous:
from render import Render
render = Render()
result = render.workflows.run_task("my-workflow/hello", ["world"])
print(result.results)Python, asynchronous:
from render import RenderAsync
render = RenderAsync()
started = await render.workflows.start_task("my-workflow/hello", ["world"])
finished = await started
print(finished.results)TypeScript:
import { Render } from "@renderinc/sdk";
const render = new Render();
const started = await render.workflows.startTask("my-workflow/hello", ["world"]);
const finished = await started.get();
console.log(finished.results);These clients use RENDER_API_KEY unless a token is passed explicitly. Prefer environment variables or a secret manager over hard-coded credentials.
When the caller may retry a start call, for example after a timeout, pass an idempotency key. Repeating a call with the same key within 24 hours returns the run that the first call started instead of starting another one. Keys are scoped to the workflow, so they hold across deploys.
render.workflows.start_task("my-workflow/charge", [order_id], idempotency_key=f"charge-{order_id}")await render.workflows.startTask("my-workflow/charge", [orderId], { idempotencyKey: `charge-${orderId}` });An idempotency key deduplicates starting a run. It does not make the task's own side effects safe to retry.
Workflows do not currently provide native scheduled triggers. Use a Render cron job that invokes the SDK client or API when scheduling is required.
Flows
Read references/flows.md before defining a flow or adopting flows from task orchestration. It covers capability checks, examples, execution rules, retries, idempotency, clients, and CLI inspection.
For replay errors or recovery testing, read references/durability.md. Report helper tests, SDK replay fixtures, and deployed recovery as separate checks.
Deploy the Workflow
Creating or releasing a workflow changes the user's Render account. Only do it when deployment is part of the request and the selected primitive has been validated where execution is supported.
Before deploying or interpreting deploy status, read references/deployments.md, including its Workflow-specific task-registration behavior.
Before accessing deployed resources, follow references/render-access.md for authentication, secrets, and workspace selection.
Confirm the intended branch and region, and ensure the exact code to deploy is committed and pushed to GitHub, GitLab, or Bitbucket. Neither path deploys uncommitted local changes.
Two creation paths. MCP supports neither.
| Path | Use when | Runtimes |
|---|---|---|
Blueprint (render.yaml) | The repo uses IaC, or the workflow ships beside other Render services | python, node |
render workflows create or Dashboard | Standalone workflow with no Blueprint | python, node, go, ruby, elixir, plus Docker in the Dashboard only |
Deploy with a Blueprint (preferred)
Read references/blueprints.md for the current specification, remote-source requirements, validation, and sync behavior. Apply the Workflow-specific constraints below.
Do not set plan on a workflow service. Task compute is configured in code (plan on the task), not on the service.
services:
- type: workflow
name: my-workflow
runtime: python
region: oregon
repo: https://github.com/render-examples/render-workflows-examples-python
branch: main
rootDir: hello-world
buildCommand: pip install -r requirements.txt
startCommand: python main.py
envVars:
- key: RENDER_API_KEY
sync: falseTypeScript variant: runtime: node, buildCommand: npm install, and a startCommand that runs the project's workflow entrypoint. The TypeScript starter uses npm start (tsx src/main.ts); the manual setup in references/manual-scaffolding.md uses npm run workflows:start. Match both commands to the scripts in package.json. Use npm run build and node dist/main.js only if the project defines a build script that emits dist/main.js.
Required: type, name, runtime, region, startCommand, plus buildCommand and repo. Optional: branch, rootDir, buildFilter, autoDeployTrigger, envVars (applied to every task run).
The schema's required array lists only the first five. Do not treat it as the complete set: the validator also rejects a workflow missing buildCommand or repo.
buildCommand is required for non-docker workflows. Only Docker-based workflows omit a build command, and those cannot appear in a Blueprint, so a Blueprint workflow always needs one.repo is required for git-based services. This fires even when validating from inside that repository with anoriginremote, which is not howweband other Git-based types behave.
Caveats:
Preview environments skip workflow services. Other Blueprint resources still replicate.
Render rejects a Blueprint that would create a workflow with the same name as an existing Blueprint-managed workflow in the workspace.
The Workflows intro FAQ may still say Blueprints cannot manage workflows. That is stale. Follow the changelog and
https://render.com/schema/render.yaml.json.
A passing validate is not proof a runtime is supported. render blueprints validate currently accepts runtime: docker on a workflow even though the schema rejects it.
Pair with render-blueprints for wiring and render-deploy for the apply/deeplink flow.
Create with the CLI or Dashboard
Use this for a standalone workflow with no Blueprint. Interactive mode prompts for configuration:
render workflows createNon-interactive, using the build and run commands from the starter template or the project's existing configuration:
render workflows create \
--name my-workflow \
--repo . \
--branch <branch> \
--region <region> \
--runtime python \
--build-command "pip install -r requirements.txt" \
--run-command "python main.py"--repo . resolves the repository's remote. For a workflow in a subdirectory, add --root-directory. Environment variables can be supplied with repeatable --env-file and --env-var flags. Never expose secrets in commands or output.
A workflow can build from a Dockerfile, but only through the Dashboard (New > Workflow): the CLI and API cannot create one, and neither can a Blueprint. Docker-based workflows take no build command and cannot run against the local task server. No creation path can pull a prebuilt registry image.
For later explicit releases, use:
render workflows versions release <workflow-id> \
--commit <pushed-commit-sha> \
--waitDo not report deployment success from command acceptance alone. Wait for the release, verify registration, and run a safe invocation through to its expected result. For tasks:
render workflows versions list <workflow-id> -o text
render workflows tasks list <ready-workflow-version-id> -o text
render workflows start <workflow-slug>/<task-name> --input='[]' -o json
render workflows tasks runs show <task-run-id> -o jsonPoll tasks runs show for a bounded period if the run is still queued or running. Stop and report the release or task error instead of retrying an external mutation indefinitely.
If deployment fails, read references/troubleshooting.md. Use the render-debug skill for broader Render deployment diagnosis when it is available.
Limits, Compute Plans, and Pricing
Do not hard-code compute-plan IDs, resource specifications, quotas, retention periods, or prices in this skill or its references.
Before setting a task's plan, estimating cost, or advising on capacity, consult references/compute-plans.md and Limits and Pricing for Render Workflows. Keep only API-shape constraints needed to write correct code in the skill.
References
references/render-access.md: shared authentication, secrets, workspace selection, and CLI usage
references/blueprints.md: shared Blueprint specification, validation, and sync guidance
references/flows.md: flow APIs, examples, execution rules, clients, and CLI inspection
references/durability.md: replay diagnosis and recovery verification
references/quick-reference.md: task APIs, clients, and legacy context upgrades
references/compute-plans.md: current compute-plan guidance for task
planvaluesreferences/deployments.md: deploy lifecycle and Workflow task registration
references/service-types.md: choosing between Workflows and other service types
references/task-patterns.md: chaining, fan-out, retries, cron triggers, and cross-workflow calls
references/local-development.md: local server, CLI runs, environment configuration, and limitations
references/troubleshooting.md: common setup, registration, execution, and client failures
references/manual-scaffolding.md: direct SDK project setup without
workflows init
Related Skills
render-blueprints:type: workflowinrender.yaml, previews, wiringrender-deploy: Blueprint apply flow for multi-service apps that include a workflowrender-debug: diagnose deployment and runtime failuresrender-monitor: inspect service health and performance
<!-- shared:documentation-retrieval -->
Current documentation retrieval
Whenever this skill directs you to consult current Render documentation:
Retrieve the linked Markdown document directly with an available URL-fetching tool or HTTP client, such as
curl. Do not substitute web-search summaries for the document.Confirm that retrieval succeeded and returned the expected document, then read its contents. Saving a file or printing its path is not sufficient.
If the request fails or your tool cannot read the Markdown response, open and read the linked HTML version instead.
If neither version can be retrieved, disclose that the current reference is unavailable and follow any topic-specific fallback in the skill. Use bundled guidance only for stable constraints, and do not guess at changeable platform details.
When a task requires multiple references, apply this workflow to each one and distinguish the documents you verified from those that remain unavailable.
<!-- /shared:documentation-retrieval -->
Files
- ATTRIBUTION.mdAdded by AutoGineer890 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md20.7 KiB
- fixtures/existing-python/app.pyScript61 B
- fixtures/existing-python/pyproject.toml122 B
- references/blueprints.md2.8 KiB
- references/compute-plans.md2.3 KiB
- references/deployments.md7.9 KiB
- references/durability.md3.3 KiB
- references/flows.md14.5 KiB
- references/local-development.md4.2 KiB
- references/manual-scaffolding.md6.5 KiB
- references/quick-reference.md7.5 KiB
- references/render-access.md4.7 KiB
- references/service-types.md4.6 KiB
- references/task-patterns.md7.7 KiB
- references/troubleshooting.md13.4 KiB
references/task-patterns.md
Task Patterns
Use these patterns for task chaining, parallel fan-out, and per-task retries.
These examples use the Render SDK 1.x task model. Every task accepts TaskContext first, and chained runs go through ctx.run.
For Python snippets, assume:
from render import Retry, TaskContext, Workflows
app = Workflows()For TypeScript snippets, assume:
import { task, type TaskContext } from "@renderinc/sdk/workflows";Fan-Out and Fan-In
Use concurrent chaining when independent work benefits from separate compute and retry boundaries. For binary processing, upload the intermediate artifact within the producing task and return its storage key or URL; the next task fetches it. Never pass Python bytes or TypeScript buffers through ctx.run.
Python:
import asyncio
@app.task
def process_image(_ctx: TaskContext, url: str) -> dict:
return {"url": url, "success": True}
@app.task
async def process_batch(ctx: TaskContext, image_urls: list[str]) -> dict:
results = await asyncio.gather(
*(ctx.run(process_image, url) for url in image_urls)
)
successful = sum(1 for result in results if result["success"])
return {
"total": len(image_urls),
"processed": successful,
"failed": len(image_urls) - successful,
"results": list(results),
}TypeScript:
const processImage = task(
{ name: "processImage" },
function processImage(_ctx: TaskContext, url: string) {
return { url, success: true };
},
);
task(
{ name: "processBatch" },
async function processBatch(ctx: TaskContext, imageUrls: string[]) {
const results = await Promise.all(
imageUrls.map((url) => ctx.run(processImage, url)),
);
const successful = results.filter((result) => result.success).length;
return {
total: imageUrls.length,
processed: successful,
failed: imageUrls.length - successful,
results,
};
},
);Avoid unbounded fan-out when the input can be arbitrarily large. Batch inputs or add application-level concurrency control when downstream systems, rate limits, or cost require it.
Sequential Pipeline
Use sequential chaining when each stage depends on the prior stage's result.
Python:
@app.task
def extract(_ctx: TaskContext, source: str) -> dict:
return {"source": source, "records": []}
@app.task
def transform(_ctx: TaskContext, data: dict) -> dict:
return {"records": data["records"]}
@app.task
def load(_ctx: TaskContext, destination: str, data: dict) -> dict:
return {"destination": destination, "loaded": len(data["records"])}
@app.task
async def etl_pipeline(
ctx: TaskContext,
source: str,
destination: str,
) -> dict:
raw_data = await ctx.run(extract, source)
transformed = await ctx.run(transform, raw_data)
return await ctx.run(load, destination, transformed)TypeScript:
const extract = task(
{ name: "extract" },
(_ctx: TaskContext, source: string) => ({ source, records: [] as object[] }),
);
const transform = task(
{ name: "transform" },
(_ctx: TaskContext, data: { records: object[] }) => ({ records: data.records }),
);
const load = task(
{ name: "load" },
(_ctx: TaskContext, destination: string, data: { records: object[] }) => ({
destination,
loaded: data.records.length,
}),
);
task(
{ name: "etlPipeline" },
async function etlPipeline(
ctx: TaskContext,
source: string,
destination: string,
) {
const rawData = await ctx.run(extract, source);
const transformed = await ctx.run(transform, rawData);
return ctx.run(load, destination, transformed);
},
);Retries and Idempotency
Tasks retry automatically by default. Before running tasks that send emails, charge payments, or modify external state, use idempotency keys or another deduplication mechanism to prevent duplicate effects.
Two kinds of idempotency apply. The SDK's idempotency_key (Python) or idempotencyKey (TypeScript) on start_task() and startTask() stops a retried client call from starting a second run. It does not stop a task retry from repeating the task's side effects. For those, pass a stable key, such as one derived from the order ID, to the downstream API.
If a multi-step task must not repeat its finished steps when it fails partway, consider a durable flow instead. See flows.md.
Python:
@app.task(
retry=Retry(
max_retries=5,
wait_duration_ms=2000,
backoff_scaling=2.0,
)
)
def fetch_document(_ctx: TaskContext, url: str) -> str:
import urllib.request
with urllib.request.urlopen(url, timeout=30) as response:
return response.read().decode()TypeScript:
task(
{
name: "fetchDocument",
retry: {
maxRetries: 5,
waitDurationMs: 2000,
backoffScaling: 2,
},
},
async function fetchDocument(_ctx: TaskContext, url: string): Promise<string> {
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return response.text();
},
);Do not retry every error indiscriminately in task code. Let the configured task policy handle run retries, and distinguish permanent validation failures from transient upstream failures when the task itself implements request-level retry logic. For common execution issues and fixes, see troubleshooting.md.
Testing Task Logic In Process
SDK 1.x returns task definitions rather than callable task wrappers. Invoke .func with a test context for unit tests:
Python:
class NoSubtasks:
async def run(self, task, *args, **kwargs):
raise AssertionError("unexpected chained run")
assert process_image.func(NoSubtasks(), "https://example.com/a.png")["success"]TypeScript:
const noSubtasks = {
metadata: {},
run: async () => {
throw new Error("unexpected chained run");
},
};
const result = processImage.func(noSubtasks, "https://example.com/a.png");For orchestration tests, supply a fake TaskContext.run that records task definitions and returns controlled results.
Scheduled Trigger
Render Workflows does not currently provide native scheduling. A Render cron job can trigger a deployed task with the SDK client.
Python sync client:
from render import Render
def main() -> None:
render = Render()
result = render.workflows.run_task("my-workflow/daily-cleanup", [])
print(result.status)
if __name__ == "__main__":
main()TypeScript:
import { Render } from "@renderinc/sdk";
const render = new Render();
const result = await render.workflows.runTask("my-workflow/daily-cleanup", []);
console.log(result.status);Store RENDER_API_KEY as a secret on the triggering service.
Cross-Workflow Call
ctx.run only chains tasks in the same workflow service. To call a different workflow, use the API client. This creates an independent run rather than a parent-child relationship in the workflow graph.
Python:
from render import RenderAsync
@app.task
async def orchestrate(_ctx: TaskContext, data: dict) -> object:
render = RenderAsync()
result = await render.workflows.run_task(
"other-workflow/process",
[data],
)
return result.resultsTypeScript:
import { Render } from "@renderinc/sdk";
task(
{ name: "orchestrate" },
async function orchestrate(_ctx: TaskContext, data: object): Promise<unknown> {
const render = new Render();
const result = await render.workflows.runTask(
"other-workflow/process",
[data],
);
return result.results;
},
);Cross-workflow calls require an API key and are subject to Render API behavior. Prefer same-workflow chaining when the tasks form one logical execution graph.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs network access, Needs an API key, Needs Python, Needs Node.js
The author says: Requires Render SDK 1.x. Local validation requires Render CLI 2.12.0+; optional scaffolding and CLI deployment require Render CLI 2.16.0+. Blueprints support "type: workflow" (no service-level plan). Durable workflow APIs require SDK 1.7.0 or a compatible development SDK and backend; SDK 1.5.0 does not include durable entry points.
Security
What our scanner noticed· Medium risk
- Instructions that use the network
- Downloads piped into a shell
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Render
- Publisher
- Render (Official)
- Source
- render-oss/skills · skills/render-workflows · commit b985a63
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Render.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download render-workflows.zip