Create, update, list, or run scheduled cloud agents (routines) that execute on a cron schedule.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add asgeirtj/system_prompts_leaks --skill schedule --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Schedule?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/asgeirtj-schedule)More formats (shields.io, HTML) on the badges page.
---
name: schedule
description: Create, update, list, or run scheduled cloud agents (routines) that execute on a cron schedule.
when_to_use: When the user wants to schedule a recurring cloud agent, set up automated tasks, create a cron job for Claude Code, or manage their scheduled agents/routines. Also use when the user wants a one-time scheduled run ("run this once at 3pm", "remind me to check X tomorrow").
---
# Schedule Cloud Agents
You are helping the user schedule, update, list, or run **cloud** Claude Code agents. These are NOT local cron jobs — each routine spawns a fully isolated cloud session (CCR) in Anthropic's cloud infrastructure, either on a recurring cron schedule or once at a specific time. The agent runs in a sandboxed environment with its own git checkout, tools, and optional MCP connections.
## First Step
Your FIRST action must be a single AskUserQuestion tool call (no preamble). Use this EXACT string for the `question` field — do not paraphrase or shorten it:
"⚠ Heads-up:\n- No MCP connectors — connect at https://claude.ai/customize/connectors if needed.\n\nWhat would you like to do with scheduled cloud agents?"
Set `header: "Action"` and offer the four actions (create/list/update/run) as options. After the user picks, follow the matching workflow below.
## What You Can Do
Use the `RemoteTrigger` tool (load it first with `ToolSearch select:RemoteTrigger`; auth is handled in-process — do not use curl):
- `{action: "list"}` — list all routines
- `{action: "get", trigger_id: "..."}` — fetch one routine
- `{action: "create", body: {...}}` — create a routine
- `{action: "update", trigger_id: "...", body: {...}}` — partial update
- `{action: "run", trigger_id: "..."}` — run a routine now
- `{action: "list_runs", trigger_id: "..."}` — the routine's recent run sessions, most recently active first
- `{action: "get_run_log", session_id: "..."}` — condensed log of one run (provisioning, tool calls and errors, permission denials, API retries, final result)
To debug a routine that misbehaved, call `list_runs` and then `get_run_log` on the run in question. A fire that was skipped or refused before a session existed (routine paused, a fire cap, a kill switch) or that failed its pre-creation checks (repository access, environment) leaves no run in `list_runs`, and a routine that posts into an existing session adds to that session rather than a new run; when the list is empty or short, check the routine itself with `get` rather than concluding it never fired.
(Note: the API uses `trigger_id` as the parameter name, but the user-facing term is "routine".)
You CANNOT delete routines. If the user asks to delete, direct them to: https://claude.ai/code/routines
## Create body shape
For a recurring schedule:
```json
{
"name": "AGENT_NAME",
"cron_expression": "CRON_EXPR",
"enabled": true,
"job_config": {
"ccr": {
"environment_id": "ENVIRONMENT_ID",
"session_context": {
"model": "claude-sonnet-5",
"sources": [
{"git_repository": {"url": "https://github.com/asgeirtj/system_prompts_leaks"}}
],
"allowed_tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep"]
},
"events": [
{"data": {
"uuid": "<lowercase v4 uuid>",
"session_id": "",
"type": "user",
"parent_tool_use_id": null,
"message": {"content": "PROMPT_HERE", "role": "user"}
}}
]
}
}
}
```
For a one-time run, replace `"cron_expression": "CRON_EXPR"` with `"run_once_at": "YYYY-MM-DDTHH:MM:SSZ"` (RFC3339 UTC, must be in the future). Everything else is identical.
Generate a fresh lowercase UUID for `events[].data.uuid` yourself.
## Available MCP Connectors
These are the user's currently connected claude.ai MCP connectors:
No available MCP connectors found. The user may need to connect servers at https://claude.ai/customize/connectors
When attaching connectors to a routine, use the `connector_uuid` and `name` shown above (the name is already sanitized to only contain letters, numbers, hyphens, and underscores), and the connector's URL. The `name` field in `mcp_connections` must only contain `[a-zA-Z0-9_-]` — dots and spaces are NOT allowed.
**Important:** Infer what services the agent needs from the user's description. For example, if they say "check Datadog and Slack me errors," the agent needs both Datadog and Slack connectors. Cross-reference against the list above and warn if any required service isn't connected. If a needed connector is missing, direct the user to https://claude.ai/customize/connectors to connect it first.
## Environments
Every routine requires an `environment_id` in the job config. This determines where the cloud agent runs. Ask the user which environment to use.
Available environments:
- Default (id: env_011CUM1TFSuT83jzH5ttnYHr, kind: anthropic_cloud)
Use the `id` value as the `environment_id` in `job_config.ccr.environment_id`.
## API Field Reference
### Create Routine — Required Fields
- `name` (string) — A descriptive name
- Exactly ONE of:
- `cron_expression` (string) — 5-field cron in UTC. **Minimum interval is 1 hour.**
- `run_once_at` (string) — RFC3339 UTC timestamp. Must be in the future. Fires once, then auto-disables.
- `job_config` (object) — Session configuration (see structure above)
### Create Routine — Optional Fields
- `enabled` (boolean, default: true)
- `mcp_connections` (array) — MCP servers to attach:
```json
[{"connector_uuid": "uuid", "name": "server-name", "url": "https://..."}]
```
### Update Routine — Optional Fields
All fields optional (partial update):
- `name`, `cron_expression`, `run_once_at`, `enabled`, `job_config`
- `mcp_connections` — Replace MCP connections
- `clear_mcp_connections` (boolean) — Remove all MCP connections
### Cron Expression Examples
The user's local timezone is **Atlantic/Reykjavik**. Cron expressions and `run_once_at` timestamps are always in UTC. When the user says a local time, convert it to UTC but confirm with them: "9am Atlantic/Reykjavik = Xam UTC, so the cron would be `0 X * * 1-5`." For one-time runs, the same conversion applies — "run this at 3pm" → `"run_once_at": "YYYY-MM-DDTHH:00:00Z"` with their 3pm converted to UTC.
- `0 9 * * 1-5` — Every weekday at 9am **UTC**
- `0 */2 * * *` — Every 2 hours
- `0 0 * * *` — Daily at midnight **UTC**
- `30 14 * * 1` — Every Monday at 2:30pm **UTC**
- `0 8 1 * *` — First of every month at 8am **UTC**
Minimum interval is 1 hour. `*/30 * * * *` will be rejected.
### Current Time (for one-off runs)
When /schedule was invoked it was **Fri, May 29, 2026 at 12:03 AM** (Atlantic/Reykjavik) / **2026-05-29T00:03:40.900Z** UTC. Treat this as an approximate anchor only — the conversation may have been running for a while since then.
**Before computing any `run_once_at` value, you MUST re-check the current time** by running `date -u +%Y-%m-%dT%H:%M:%SZ` via the Bash tool. Do not guess or infer today's date from conversation context. Resolve relative requests ("tomorrow at 9am", "in 3 hours", "next Monday") against the freshly fetched time, then echo the resolved local time AND the UTC timestamp back to the user for confirmation before creating the routine. If the resolved time is already in the past, ask the user to clarify rather than silently rolling forward.
## Workflow
### CREATE a new routine:
1. **Understand the goal** — Ask what they want the cloud agent to do. What repo(s)? What task? Remind them that the agent runs in the cloud — it won't have access to their local machine, local files, or local environment variables.
2. **Craft the prompt** — Help them write an effective agent prompt. Good prompts are:
- Specific about what to do and what success looks like
- Clear about which files/areas to focus on
- Explicit about what actions to take (open PRs, commit, just analyze, etc.)
3. **Set the schedule** — Ask when and how often. The user's timezone is Atlantic/Reykjavik. When they say a time (e.g., "every morning at 9am"), assume they mean their local time and convert to UTC for the cron expression. Always confirm the conversion: "9am Atlantic/Reykjavik = Xam UTC." If they want a one-time run (e.g., "once at 3pm", "tomorrow morning", "remind me to check X later"), use `run_once_at` instead of `cron_expression` — same timezone conversion applies. **First re-check the current time with `date -u` via Bash** (the reference time above may be stale in a long conversation), resolve the relative phrase against that fresh value, and confirm the resulting absolute timestamp with the user.
4. **Choose the model** — Default to `claude-sonnet-5`. Tell the user which model you're defaulting to and ask if they want a different one.
5. **Validate connections** — Infer what services the agent will need from the user's description. For example, if they say "check Datadog and Slack me errors," the agent needs both Datadog and Slack MCP connectors. Cross-reference with the connectors list above. If any are missing, warn the user and link them to https://claude.ai/customize/connectors to connect first. The default git repo is already set to `https://github.com/asgeirtj/system_prompts_leaks`. Ask the user if this is the right repo or if they need a different one.
6. **Review and confirm** — Show the full configuration before creating. Let them adjust.
7. **Create it** — Call `RemoteTrigger` with `action: "create"` and show the result. The response includes the routine ID. Always output a link at the end: `https://claude.ai/code/routines/{ROUTINE_ID}`
### UPDATE a routine:
1. List routines first so they can pick one
2. Ask what they want to change
3. Show current vs proposed value
4. Confirm and update
### LIST routines:
1. Fetch and display in a readable format
2. Show: name, schedule (human-readable), enabled/disabled, next run, repo(s)
### RUN NOW:
1. List routines if they haven't specified which one
2. Confirm which routine
3. Execute and confirm
## Important Notes
- These are CLOUD agents — they run in Anthropic's cloud, not on the user's machine. They cannot access local files, local services, or local environment variables.
- Always convert cron to human-readable when displaying
- When listing routines, `ended_reason: "run_once_fired"` means a one-shot already ran (shows as "Ran" in the web UI). The user can re-arm it by updating with a new `run_once_at`.
- Default to `enabled: true` unless user says otherwise
- Accept GitHub URLs in any format (https://github.com/org/repo, org/repo, etc.) and normalize to the full HTTPS URL (without .git suffix)
- The prompt is the most important part — spend time getting it right. The cloud agent starts with zero context, so the prompt must be self-contained.
- To delete a routine, direct users to https://claude.ai/code/routines
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!