agents/skills/argus-schedule/SKILL.md
Manage recurring tasks in the local Argus daemon via its HTTP API. Use when the user wants to schedule a task locally in argus, create a cron-driven task, fire X every weekday/hour/morning, set up a recurring agent that needs local filesystem access (logs in ~/.argus, local databases, dotfiles), list or update existing argus schedules, or run an argus schedule now. Distinct from /schedule, which creates remote cloud routines without local access.
npx skillsauth add drn/dots argus-scheduleInstall 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.
Create, list, update, run-now, or enable/disable a recurring task in the local Argus daemon. Argus exposes full schedule CRUD over its HTTP API on http://localhost:7743. The cron tick fires the task on the local machine, so the scheduled agent has access to ~/.argus, the dotfiles repo, and any other local resource — unlike the remote /schedule skill, whose routines run in the Anthropic cloud and cannot read the user's filesystem.
$ARGUMENTS — Free-form. May contain a verb (list, create, update, run, enable, disable), a target schedule ID or name, a cron expression, and a prompt. If empty or ambiguous, ask the user a clarifying question and stop.curl -sS -m 2 http://localhost:7743/api/status 2>/dev/null | head -1ls -1 ~/.argus/api-token 2>/dev/null | head -1Interpretation of the liveness probe:
"error":"missing or invalid Authorization header" → daemon is up; this is the expected response without a token. Proceed.The projects list and the live schedules list require a Bearer token, so do not attempt to fetch them from this Context block — fetch them at runtime in the Verbs section using a single cat ~/.argus/api-token substitution inside a curl invocation (where shell command substitution is allowed).
| Need | Use |
|------|-----|
| Recurring agent must read local files (~/.argus/ux.log, dotfiles, local DB, project worktree) | /argus-schedule |
| Recurring agent only needs remote APIs (GitHub, Jira, Slack, web fetches) | /schedule |
| User explicitly says "argus", "in argus", "local cron" | /argus-schedule |
| User says "remote routine", "cloud agent", "in the background even when laptop sleeps" | /schedule |
If both would work, default to /argus-schedule when the laptop is the user's primary machine and the workflow already lives in argus. Otherwise ask which they want.
Before any API call:
~/.argus/api-token is missing, tell the user to run argus once (the daemon mints the token on first run) and stop. The schedule endpoints are master-only — per-device tokens cannot manage schedules.cat ~/.argus/api-token inside each curl invocation rather than echoing it into the conversation. The token is sensitive.Pick the verb from $ARGUMENTS. If unclear, ask which one.
curl -sS -H "Authorization: Bearer $(cat ~/.argus/api-token)" \
http://localhost:7743/api/schedules | jq
Show the user a compact table: name, schedule, enabled, next_run_at, last_run_at, last_error (only if non-empty). Hide prompt unless the user asks — prompts can be long.
Required from the user (ask one question collecting any missing pieces, do not invent values):
Build the JSON body with jq to handle quoting of multi-line prompts safely:
JSON=$(jq -n \
--arg name "$NAME" \
--arg project "$PROJECT" \
--arg schedule "$CRON" \
--arg prompt "$PROMPT" \
'{name:$name, project:$project, schedule:$schedule, prompt:$prompt, enabled:true}')
curl -sS -X POST \
-H "Authorization: Bearer $(cat ~/.argus/api-token)" \
-H "Content-Type: application/json" \
-d "$JSON" \
http://localhost:7743/api/schedules | jq
After the call, echo the returned id, next_run_at, and a one-line confirmation. Do not add --data-raw shortcuts that bypass jq — embedding raw user input into a shell-quoted JSON string is a quoting hazard.
The PUT body uses pointer fields: send only what the user wants to change.
JSON=$(jq -n --arg schedule "$NEW_CRON" '{schedule:$schedule}')
curl -sS -X PUT \
-H "Authorization: Bearer $(cat ~/.argus/api-token)" \
-H "Content-Type: application/json" \
-d "$JSON" \
http://localhost:7743/api/schedules/"$ID" | jq
If the user gave a name instead of an ID, list first, find the matching row, and confirm the ID with the user before sending the PUT.
Fires the schedule now, out of cycle. Creates a fresh task immediately.
curl -sS -X POST \
-H "Authorization: Bearer $(cat ~/.argus/api-token)" \
http://localhost:7743/api/schedules/"$ID"/run | jq
Note for the user: the run-now path does NOT send a push notification (the cron tick path does). If they expected the notification, that is the reason it did not arrive.
Equivalent to update with only enabled set:
JSON=$(jq -n --argjson enabled false '{enabled:$enabled}')
(Use true for enable.) Disabling pauses fires but preserves the row. The user can re-enable later without re-creating.
Argus parses schedules with robfig/cron/v3 ParseStandard. Accepts:
minute hour day-of-month month day-of-week. Example: 0 9 * * 1-5 is 9am on weekdays.@hourly, @daily, @weekly, @monthly, @yearly.@every <duration> where duration is a Go duration like 30m, 1h, 24h. Example: @every 1h fires hourly aligned to the moment of creation.Minimum resolution is one minute — schedules tighter than that are ignored. The first fire never happens on the very first tick after creation; the scheduler advances NextRunAt past now on each persist.
Time zone follows the daemon process's local time zone. State that explicitly to the user when the cron expression contains a specific clock time, so they can confirm it matches their expectation.
After every create or update, refetch the row and report next_run_at. If last_error is non-empty after a previous fire, surface it — the most common cause is a removed project or a mistyped cron expression.
Do not retry destructive or fire-causing calls automatically. One attempt per user instruction.
This skill has a twin at ~/.dots/agents/skills/argus-schedule/SKILL.md per the user's skill-mirroring preference. The argus repo copy is canonical; the dotfiles copy makes the slash command reachable from any project. Keep the two files byte-identical.
development
Build a self-contained, single-file HTML presentation deck from talking points or a source doc, using a terminal/TUI-styled template with keyboard, tap, and swipe navigation. Use when the user wants to create slides, build a presentation or deck, turn talking points or a doc into a talk, make an HTML slideshow, or produce a presentation as a shareable artifact (instead of Google Slides).
development
Render a Markdown file to GitHub-flavored HTML and open a styled local preview (light + dark) in the browser. Use when the user wants to preview markdown, see how a README renders on GitHub, check that relative screenshots or images display correctly, or get a GitHub-like local preview without installing grip or glow.
tools
Mark the current Argus task as complete. Use when the work for the current worktree is done and the user wants the task to transition to the "complete" status.
development
Launch a dynamic Workflow where the top-tier session model (Fable) handles planning and orchestration while implementation subagents run on Sonnet for routine tasks and Opus for complex ones. Use when the user wants to orchestrate a build, a dynamic workflow, a model-tiered build, fable planning with sonnet and opus implementation, or tiered agents.