skills/create-workflow/SKILL.md
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.
npx skillsauth add lvndry/jazz create-workflowInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate workflow automation files that schedule jazz agents to run recurring tasks.
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.
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:
./workflows/<name>/ or global ~/.jazz/workflows/<name>/.)How to run the questionnaire:
---
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]
| 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) |
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
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.
Always include safety rules in the workflow prompt:
**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:
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.
User request: "I want to clean up my email inbox every hour, archiving old newsletters"
Questions to ask:
~/.jazz/workflows/)Generated workflow:
---
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.
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:
skills:
- email
- calendar
And reference in prompt:
Use the `email` skill to access my inbox efficiently.
Tell the user what to do next:
# 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>
---
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
---
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.
---
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.
---
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`
Before creating the file, verify:
high-risk unless necessaryAlways recommend testing before scheduling:
jazz workflow run <name> to verify logic--auto-approve: Test the auto-approval behaviorAfter creating the workflow, optionally create a README in the workflow directory explaining:
Example: workflows/email-cleanup/README.md
tools
Create and track task lists for complex multi-step work. Use when planning projects, breaking down work, tracking progress, or when a task has 3+ steps. Triggers on "plan", "todo", "task list", "break down", "step by step", or complex requests requiring multiple actions.
development
Brainstorm startup ideas using top-founder mental models, trend analysis, and competition research. Use when the user wants to brainstorm startup ideas, explore business opportunities, validate concepts, or think like elite founders. Triggers on "startup ideas", "business ideas", "what should I build", "startup brainstorm", "idea validation", "trends and opportunities", "think like a founder".
tools
Create new Jazz skills for automating workflows. Use when the user asks to create a skill, make a skill, or wants to define custom automation behavior.
tools
Generate pull request titles and descriptions from diffs and context. Use when creating a PR, writing PR description, drafting merge request, or summarizing changes for review.