dag-library

Store and execute reusable directed acyclic graph definitions for multi-agent workflow automation.

68.6k|5.6k|Updated Dec 3, 2025
One-click install
npx skills add https://github.com/code-yeongyu/oh-my-opencode --skill dag-library
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: dag-library
Source: https://github.com/code-yeongyu/oh-my-opencode/tree/main/packages/omo-senpi/skills/dag-library
Command: npx skills add https://github.com/code-yeongyu/oh-my-opencode --skill dag-library

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

This Skill solves the inefficiency of manually pasting complex DAG definition JSONs into every evaluation cell, allowing users to save, name, and reuse graph structures for recurring tasks.

Core Features & Use Cases

  • Persistent DAG Storage: Save graph definitions as JSON files in project or user-level directories for consistent reuse.
  • Dynamic Execution: Run stored DAGs with automatic key rotation and placeholder filling for dates and timestamps.
  • Use Case: Automate a nightly audit pipeline by saving the graph definition once and triggering it daily with a single command, ensuring unique run IDs for every execution.

Quick Start

Use the dag library to run the saved nightly-audit definition with a fresh timestamped key.

Frequently Asked Questions about dag-library

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I save a new DAG definition for reuse?

Write your DAG definition as a JSON file named <name>.json into your $HOME/.omo/dags or project-level .omo/dags directory. Once saved, you can trigger it using the library's start method.

How does key rotation prevent DAG execution conflicts?

The library automatically appends a UTC timestamp to the base key during execution. This ensures every run is treated as a fresh, idempotent instance, preventing accidental reuse of previous run results.

Can I use placeholders in my DAG node prompts?

Yes, you can use {{key}}, {{date}}, and {{datetime}} placeholders in your node prompts. These are filled at load time, allowing for dynamic file paths and logging that never clobber previous runs.

What is the difference between lib.load and lib.start?

lib.load returns the filled DAG definition without executing it, while lib.start loads the definition and immediately initiates the workflow, returning a handle to track the run.

When should I use an explicit suffix for my DAG run?

Use an explicit suffix when you need to recover a failed node within a specific logical run or when you want to force idempotency by reusing a previous result.