marciok/gust/elixir-dag-creator
- community
Checking that the SKILL.md file is still in the repository.
Instructions for creating an Elixir DAG to run on Gust. Use this when you need to create a new DAG.
Install
npx vskill@latest install marciok/gust/elixir-dag-creatorSKILL.md
Gust DAG Creator
Use this guide to create a DAG in Elixir for Gust.
Create a DAG file
Create a valid Elixir module under dags/.
DAG syntax
The Gust DSL turns an Elixir module into a DAG.
When you add use Gust.DSL to a module in the dags/ folder, Gust detects it automatically. You can configure a schedule, define callbacks, and in development the DAG is reloaded when files change.
After enabling the DSL, define ordinary tasks with task or reusable action tasks with task_action.
Example
DSL options
schedule: a cron expressionon_finished_callback: the function called when the DAG finishes
Task options
:downstream— list of downstream task names:save— persists the task return value; when enabled, the return value must be a map:ctx— pattern matched against the task context; commonly%{run_id: run_id}:skip_if— name of a DAG module function that receives the task context and returns a boolean. If it returnstrue, Gust does not run the task body and marks the task as skipped. Downstream tasks that depend on a skipped upstream are skipped too.:map_over— name of an upstream task whose saved list result should start one parallel task instance per item. The upstream task must usesave: trueand return a list. Each item is passed asctx.params; map items are passed unchanged and scalar items are wrapped as%{"item" => value}. If the upstream list is empty, the mapped task is skipped.:wait_for— durable external event key. When the task is reached, Gust marks the task and run as:waitingand pauses that path untilGust.DAG.TaskWaiter.resume/2receives the matching key. Use a string or atom key that an external DAG, webhook, API call, or process can send later. If the resumed task needs payload data, read it fromctx.params["__gust_wait_payload__"].
Examples
Reusable action tasks
Use task_action when the operation should be implemented once and reused by multiple DAGs. An action module implements Gust.Action:
Declare static arguments as a {module, keyword_args} tuple:
The argument expression is evaluated when the task executes, once per attempt. It is not run while the DAG is compiled. Arguments can also be computed dynamically with ctx::
The body must return a keyword list. Gust passes the full task context to execute/2, including run_id and params, even when ctx: binds only part of that context. For mapped tasks, the body is evaluated separately for each mapped task instance using that instance's context:
The action's return value is the task's return value. save: true, retries, skip_if, downstream, and other task options retain their ordinary task behavior. Ordinary exceptions from argument evaluation or execute/2 are retryable; raise Gust.DAG.NonRecError when the failure is permanent. When save: true, return a map or list accepted by Gust's result persistence rules.
For a separate reusable action package, namespace modules by package and capability, for example GustActions.SQL.Check, GustActions.Slack.Post, or GustActions.Slack.Webhook. Keep shared provider/client code in a regular helper module and let each action be a thin Gust.Action adapter. Do not duplicate provider logic across action modules.
Resume waiting tasks with Gust.DAG.TaskWaiter.resume/2:
Omit run_id only when you intentionally want to resume every waiting task with the same key.
Non-recoverable task errors
Ordinary exceptions follow Gust's retry behavior. When retrying cannot succeed—for example, because input is permanently invalid—raise Gust.DAG.NonRecError from the DAG task:
Gust marks the task and run as failed without scheduling another attempt. The exception message and stacktrace are persisted and displayed on the dashboard like other task errors.
Validation
For example, if the file is dags/hello_world.ex, confirm that the hello_world DAG is valid.
Run command: mix gust.cli dag_definition hello_world
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/elixir-dag-creator/SKILL.md
Popularity
- Repository stars
- 335
- Repository forks
- 27
- 7-day trend score
- 29
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/marciok/gust/elixir-dag-creator)