Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create a new automated routine (ADW) for the scheduler. Guides the user through defining what the routine does, the type (AI or systematic), the schedule, and generates the Python script + Makefile target. Use when the user says 'create a routine', 'add a routine', 'automate this', 'schedule this task', 'new ADW', 'I want this to run automatically', or wants to turn any manual task into a scheduled automation.
.claude/skills/evolution-foundation-create-routine/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 56% | 0% |
| case-01 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 114% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 29% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 13% | 0% |
Guide the user through creating a new automated routine that runs on schedule via the EvoNexus scheduler.
A routine is a Python script in ADWs/routines/custom/ that runs on a schedule (daily, weekly, monthly, or interval). There are two types:
Ask the user:
If AI routine, also ask:
clawdia-assistant — ops, daily tasks, email, meetingsflux-finance — financial reports, Stripe, ERPatlas-project — GitHub, Linear, project trackingpulse-community — Discord, WhatsApp, communitypixel-social-media — social media, content, analyticssage-strategy — OKRs, strategy, competitive analysisnex-sales — pipeline, proposals, leadsmentor-courses — courses, learning pathskai-personal-assistant — health, habits, personalCreate the routine script at ADWs/routines/custom/{name}.py:
python#!/usr/bin/env python3 """ADW: {Routine Name} — {brief description}. Agent: @{agent-name}""" import sys, os sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from runner import run_skill, run_claude, banner, summary def main(): banner("{Routine Name}", "{description} | @{agent}") results = [] results.append(run_skill( "{skill-name}", log_name="{routine-id}", timeout=600, agent="{agent-name}" )) summary(results, "{Routine Name}") if __name__ == "__main__": try: main() except KeyboardInterrupt: print("\nCancelled.")
Key rules for AI routines:
run_skill() when there's an existing skill, or run_claude() for inline promptsCreate the routine script at ADWs/routines/custom/{name}.py:
python#!/usr/bin/env python3 """ADW: {Routine Name} — {brief description}. Type: systematic""" import sys, os sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from runner import run_script, banner, summary def do_task(): """Pure Python logic — no Claude CLI, no AI, no tokens.""" # YOUR CODE HERE: API calls, file ops, data transforms # ... return { "ok": True, # or False on failure "summary": "Short description of what happened", "data": {} # optional structured data for logs } def main(): banner("{Routine Name}", "{description} | systematic") results = [] results.append(run_script(do_task, log_name="{routine-id}", timeout=60)) summary(results, "{Routine Name}") if __name__ == "__main__": try: main() except KeyboardInterrupt: print("\nCancelled.")
Key rules for systematic routines:
do_task() function — this is where YOU (Claude) generate the implementation coderequests for HTTP calls (already in pyproject.toml dependencies){"ok": bool, "summary": str} so the runner can log success/failureagent parameter — systematic routines don't use agentsrequests.get() for API polling, os.walk() for file ops, csv.writer() for data export, shutil for backupsNo Makefile changes needed — routines are discovered dynamically from scripts.
bashmake run R={routine-id} # Run by ID make list-routines # List all available
If the user wants it automated, add to scheduler.py in the appropriate section:
python# Daily schedule.every().day.at("{HH:MM}").do(run_adw, "{Routine Name}", "custom/{script_name}.py") # Weekly schedule.every().{day}.at("{HH:MM}").do(run_adw, "{Routine Name}", "custom/{script_name}.py") # Monthly (in the monthly block) run_adw("{Routine Name}", "custom/{script_name}.py") # Interval schedule.every({N}).minutes.do(run_adw, "{Routine Name}", "custom/{script_name}.py")
Run the routine manually:
bashmake run R={routine-id}
Check the output and adjust the prompt if needed.
If the routine generates an HTML report, create a template at .claude/templates/html/{name}.html following the pattern of existing templates:
{{PLACEHOLDER}} for dynamic contentName: competitor-check
Type: AI
Agent: sage-strategy
Schedule: daily at 09:00
Why AI: needs reasoning to analyze competitor changes and compare positioningName: content-performance
Type: AI
Agent: pixel-social-media
Schedule: weekly on friday at 17:00
Why AI: needs analysis to identify trends and make recommendationsName: api-health-check
Type: systematic
Schedule: every 5 minutes
Why systematic: just pings endpoints and checks HTTP status codes — no reasoning neededName: metric-snapshot
Type: systematic
Schedule: daily at 23:55
Why systematic: reads metrics.json and appends a row to a CSV — pure data transformName: log-cleanup
Type: systematic
Schedule: weekly on sunday at 03:00
Why systematic: deletes files older than 30 days — deterministic file operationADWs/routines/custom/ (gitignored — they're personal to your workspace)ADWs/routines/ are shipped with the repo and should not be modifiedrunner.py handles logging, metrics, and Telegram notifications automatically for both typestokens=0 and cost=0 in metricsmake schedulerOther measured skills in the registry, with their headline benchmark lift.