create-workflow
Create Jazz workflow automation files (WORKFLOW.md). Use this for scheduling Jazz agents to run recurring tasks. For OS-level scripts/commands, use create-system-routine.
Best use case
create-workflow is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Create Jazz workflow automation files (WORKFLOW.md). Use this for scheduling Jazz agents to run recurring tasks. For OS-level scripts/commands, use create-system-routine.
Teams using create-workflow should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/create-workflow/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How create-workflow Compares
| Feature / Agent | create-workflow | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Create Jazz workflow automation files (WORKFLOW.md). Use this for scheduling Jazz agents to run recurring tasks. For OS-level scripts/commands, use create-system-routine.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# Create Workflow Generate workflow automation files that schedule jazz agents to run recurring tasks. ## When to Use - User wants to automate a recurring task using a Jazz Agent - User asks to "create a workflow" or "schedule an agent" - User says "I want to check X every Y" (e.g., "check emails every hour") - User wants unattended agent execution **Note:** If the user wants to schedule a simple shell script or system command *without* using a Jazz Agent, use the `create-system-routine` skill instead. ## Gathering Information (Questionnaire) **Do not create the workflow file until you have enough information.** If the user's prompt is vague (e.g. "create a workflow", "I want to automate emails") or missing any of the items below, guide them through a short questionnaire instead of guessing. **You have enough info when you know:** 1. **Task**: What should the agent do? (Concrete, not vague.) 2. **Schedule**: When should it run? (So you can convert to cron.) 3. **Catch-up**: Should missed runs execute on startup? (If not specified, ask or choose a sensible default.) 4. **Auto-approve**: What risk level? (read-only / low-risk / high-risk / false—default to conservative.) 5. **Skills**: Which skills does the agent need? (e.g. email, calendar, deep-research.) 6. **Instructions**: Clear, safety-first prompt with explicit criteria and "when in doubt" rules. 7. **Location**: Where to save? (Local `./workflows/<name>/` or global `~/.jazz/workflows/<name>/`.) **How to run the questionnaire:** - Ask **one or a few questions at a time**; don't dump a long list. - Use the user's words to refine (e.g. "You said 'clean my inbox'—should that be archive only, or also delete? How old is 'old'?"). - After each answer, confirm what you have and ask only what's still missing. - Once you have all seven items above, proceed to create the WORKFLOW.md. ## Workflow 1. **Understand the task**: What should the agent do? When should it run? If unclear, ask. 2. **Determine schedule**: Convert user intent to cron format; if not stated, ask when they want it to run. 3. **Decide catch-up behavior**: Should missed runs execute on startup? Ask if not specified. 4. **Choose auto-approve policy**: Based on risk level of operations; default to conservative. 5. **Identify required skills**: What skills will the agent need? 6. **Write clear instructions**: Safety-first prompt with explicit guidelines. 7. **Create WORKFLOW.md**: Place in appropriate directory only after you have enough info from above. ## Workflow File Structure ```markdown --- name: workflow-name description: Brief one-line summary schedule: "0 8 * * *" autoApprove: read-only catchUpOnStartup: true maxCatchUpAge: 43200 agent: default skills: - skill-name --- # Workflow Title [Clear instructions for the agent, including safety guidelines] ``` ## Frontmatter Fields | Field | Required | Description | Example | | ------------------ | -------- | ----------------------------------------------- | ----------------------------------------------------- | | `name` | ✓ | Kebab-case identifier | `email-cleanup` | | `description` | ✓ | One-line summary | `Clean up old newsletters` | | `schedule` | | Cron expression | `0 * * * *` (hourly) | | `agent` | | Agent to use (optional, will prompt if omitted) | `research-agent` | | `autoApprove` | | Auto-approval policy | `read-only`, `low-risk`, `high-risk`, `true`, `false` | | `skills` | | Skills to load | `["email", "calendar"]` | | `catchUpOnStartup` | | Run missed workflows on startup | `true` | | `maxCatchUpAge` | | Max age (seconds) for catch-up runs | `43200` (12 hours) | ## Cron Schedule Guide Ask user when they want it to run, then convert to cron: | User Intent | Cron Expression | Description | | -------------------- | --------------- | ------------------------- | | Every hour | `0 * * * *` | At minute 0 of every hour | | Every morning at 8am | `0 8 * * *` | Daily at 8:00 AM | | Every 15 minutes | `*/15 * * * *` | Every 15 minutes | | Weekdays at 9am | `0 9 * * 1-5` | Mon-Fri at 9:00 AM | | Every Monday at 9am | `0 9 * * 1` | Weekly on Monday | | First of month | `0 0 1 * *` | Monthly at midnight | Cron format: `minute hour day-of-month month day-of-week` ## Auto-Approve Policy Choose based on what tools the workflow will use: | Policy | When to Use | Example Workflows | | ----------- | ------------------------------------- | ------------------------------------------------ | | `read-only` | Only reads/searches, no modifications | Weather check, news digest, monitoring | | `low-risk` | Modifies data but reversible | Email archiving, labeling, calendar events | | `high-risk` | Deletes, sends, executes commands | Email cleanup with deletion, automated responses | | `false` | Always ask for approval | Testing, development | **Default to the most restrictive policy that allows the workflow to function.** ## Safety Guidelines Always include safety rules in the workflow prompt: ```markdown **Safety Rules:** - When in doubt, DO NOTHING - Only perform actions you're 100% confident about - Leave uncertain items for manual review - [Add task-specific safety rules] ``` For workflows that modify or delete: - Emphasize conservative behavior - Specify exact criteria (e.g., "only archive newsletters older than 2 weeks") - Add "if unsure, skip it" instructions ## File Location Ask user where they want the workflow (or choose based on context): | Location | Use Case | Path | | ---------- | ----------------------------- | -------------------------------------- | | **Local** | Project-specific automation | `./workflows/<name>/WORKFLOW.md` | | **Global** | User-wide personal automation | `~/.jazz/workflows/<name>/WORKFLOW.md` | Built-in workflows are shipped with Jazz and shouldn't be modified. ## Complete Example User request: *"I want to clean up my email inbox every hour, archiving old newsletters"* **Questions to ask:** 1. ✓ What counts as "old"? (2 weeks) 2. ✓ Should it only archive or also delete? (archive only) 3. ✓ Any specific senders to target? (newsletters, promotional) 4. ✓ Where to save it? (global: `~/.jazz/workflows/`) **Generated workflow:** ```markdown --- name: email-cleanup description: Archive old newsletters and promotional emails schedule: "0 * * * *" autoApprove: low-risk skills: - email --- # Email Cleanup Review my inbox from the last hour and archive emails matching these criteria: **Criteria for archiving:** - Newsletters older than 2 weeks - Promotional emails older than 3 days - GitHub notifications already read **Safety Rules:** - When in doubt, DO NOTHING - Only archive emails you're 100% confident match the criteria - If an email might be important, leave it in inbox - Never delete, only archive **Output:** Log count of archived emails to console. ``` ## Skills Integration If the workflow needs specific capabilities, suggest relevant skills: | Task Type | Skills to Include | | ------------------- | ----------------------------- | | Email management | `email` | | Calendar tasks | `calendar` | | Research/analysis | `deep-research` | | Code/git operations | (none needed, built-in tools) | | Web searches | (none needed, built-in) | Include skills in frontmatter: ```yaml skills: - email - calendar ``` And reference in prompt: ```markdown Use the `email` skill to access my inbox efficiently. ``` ## After Creation Tell the user what to do next: ```bash # Test the workflow manually first jazz workflow run <name> # Once confident, schedule it jazz workflow schedule <name> # Monitor logs tail -f ~/.jazz/logs/<name>.log # View run history jazz workflow history <name> ``` ## Common Workflow Patterns ### Daily Research Digest ```markdown --- name: tech-digest description: Daily AI and tech news digest schedule: "0 8 * * *" autoApprove: true skills: - deep-research --- # Daily Tech Digest Research the most important AI and tech news from the last 24 hours. **Sources:** Twitter, Reddit, Hacker News, Hugging Face, TechCrunch **Output:** Save summary to `~/digests/YYYY/Month/DD.md` **Format:** Brief bullet points with source links ``` ### Morning Briefing ```markdown --- name: morning-briefing description: Weather, calendar, and news brief schedule: "0 7 * * 1-5" autoApprove: read-only --- # Morning Briefing Provide a concise morning brief: 1. Today's weather and outfit suggestion 2. Calendar events for today 3. Top 3 news headlines Keep it under 100 words - this is a quick glance. ``` ### GitHub Issue Triage ```markdown --- name: github-triage description: Label and prioritize new GitHub issues schedule: "0 9 * * 1-5" autoApprove: low-risk --- # GitHub Issue Triage Review new GitHub issues from the last 24 hours: 1. Add appropriate labels (bug, feature, documentation) 2. Set priority (P0-P3) based on severity 3. Add to project board if critical **Safety:** Only add labels and project assignments. Never close issues. ``` ### Weekly Standup Report ```markdown --- name: weekly-standup description: Generate weekly progress report schedule: "0 17 * * 5" autoApprove: read-only --- # Weekly Standup Report Generate a weekly summary: 1. Completed tasks (from GitHub, calendar, notes) 2. In-progress work 3. Blockers or challenges 4. Next week's priorities **Output:** Save to `~/standups/YYYY-WW.md` ``` ## Validation Checklist Before creating the file, verify: - ✓ Name is kebab-case, descriptive - ✓ Description is one clear sentence - ✓ Schedule is valid cron (5 fields) - ✓ Auto-approve matches task risk level - ✓ Safety rules are explicit and conservative - ✓ Skills are listed if needed - ✓ Output location is specified if workflow saves files - ✓ Instructions are clear enough for an AI agent ## Anti-Patterns - ❌ Vague instructions: "clean my inbox" → specify exactly what to clean - ❌ Overly aggressive auto-approve: Don't use `high-risk` unless necessary - ❌ Missing safety rules: Always include "when in doubt" guidelines - ❌ No schedule: If automating, include a schedule (or explain it's manual-only) - ❌ Wrong location: Project-specific workflows shouldn't be global - ❌ Too complex: Break into multiple simple workflows instead ## Testing Guidance Always recommend testing before scheduling: 1. **Manual run first**: `jazz workflow run <name>` to verify logic 2. **Check with `--auto-approve`**: Test the auto-approval behavior 3. **Monitor initial runs**: Watch logs for first few scheduled executions 4. **Iterate**: Adjust safety rules and criteria based on actual behavior ## Documentation After creating the workflow, optionally create a README in the workflow directory explaining: - What it does - When it runs - What to expect - How to customize Example: `workflows/email-cleanup/README.md`
Related Skills
kitt-create-slash-commands
Expert guidance for creating slash commands. Use when working with slash commands, creating custom commands, understanding command structure, or learning YAML configuration.
kitt-create-plans
Create hierarchical project plans optimized for solo agentic development. Use when planning projects, phases, or tasks that the AI agent will execute. Produces agent-executable plans with verification criteria, not enterprise documentation. Handles briefs, roadmaps, phase plans, and context handoffs.
julien-workflow-advice-codex
Get OpenAI Codex CLI's opinion on code, bugs, or implementation. Use when you want a second AI perspective during coding sessions.
fal-workflow
Generate workflow JSON files for chaining AI models
create-rule
Create persistent AI agent rules and instructions. Use when you want to create a rule, add coding standards, set up project conventions, configure file-specific patterns, or create AGENTS.md/GEMINI.md rule files across Cursor, Gemini CLI, or Codex.
create-prompt
Expert prompt engineering for creating effective prompts for Claude, GPT, and other LLMs. Use when writing system prompts, user prompts, few-shot examples, or optimizing existing prompts for better performance.
create-expert-skill
Create production-ready skills from expert knowledge. Extracts domain expertise and system ontologies, uses scripts for deterministic work, loads knowledge progressively. Use when building skills that must work reliably in production.
create-event-handlers
Sets up RabbitMQ event publishers and consumers following ModuleImplementationGuide.md Section 9. RabbitMQ only (no Azure Service Bus). Creates publishers with DomainEvent (tenantId preferred), consumers with handlers, naming {domain}.{entity}.{action}, required fields (id, type, version, timestamp, tenantId, source, data). Use when adding event-driven communication, async workflows, or integrating via events.
create-custom-prompt
Prompt for creating custom prompt files
create-assistant
Create and configure Vapi voice AI assistants with models, voices, transcribers, tools, hooks, and advanced settings. Use when building voice agents, phone bots, customer support assistants, or any conversational AI that handles phone or web calls.
create-agents-md
Create or rewrite AGENTS.md files for Open Mercato packages and modules. Use this skill when adding a new package, creating a new module, or when an existing AGENTS.md needs to be created or refactored. Ensures prescriptive tone, MUST rules, checklists, and consistent structure across all agent guidelines.
create-agent-with-sanity-context
Build AI agents with structured access to Sanity content via Context MCP. Covers Studio setup, agent implementation, and advanced patterns like client-side tools and custom rendering.