encore-go-cron — скилл для Claude Code: cron-задачи в Encore Go
Скилл учит агента объявлять периодические задачи в Encore Go через cron.NewJob. Пригодится, когда нужно расписание вместо обработки запроса.
npx skills add encoredev/skills --skill encore-go-cron -a claude-code
npx skills add encoredev/skills --skill go-cron -a claude-codeЧто делает encore-go-cron
Скилл описывает, как связать расписание с существующим эндпоинтом //encore:api. Объявление cron.NewJob ставится переменной уровня пакета, а не внутри функции, и ссылается на эндпоинт, который должен быть определён раньше.
Два формата расписания. Every принимает интервал вида "1h" или "30m", но он обязан делиться на 24 часа без остатка — "7h" не пройдёт. Schedule берёт обычное cron-выражение из пяти полей, все времена в UTC. Внутри есть таблица частых выражений: "0 * * * *" каждый час, "0 2 * * *" ежедневно в 02:00 UTC, "0 0 * * 0" по воскресеньям в полночь.
Локально при encore run cron-задачи не срабатывают: расписание запускается только в развёрнутом окружении. Поэтому отладка расписания на машине разработчика ничего не покажет. Эндпоинт стоит делать private, иначе его дёрнут снаружи. Логику держите идемпотентной — задача может сработать с опозданием или повториться при передеплое. Для фоновой работы по событиям, а не по таймеру, в том же наборе есть скилл encore-go-pubsub.
Какие задачи решает
- объявить cron-задачу в Encore Go без ошибок в конфиге
- выбрать между интервалом
Everyи выражениемSchedule - перевести локальное время в UTC для расписания
- закрыть cron-эндпоинт от внешних вызовов
- сделать обработчик идемпотентным к повторному запуску
Примеры запросов агенту
- Сделай задачу очистки истёкших сессий каждый час через
cron.NewJob - Поставь ежедневную агрегацию на 02:00 UTC в Encore Go
- Почему мой cron не запускается при
encore run?
Как установить encore-go-cron
1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill encore-go-cron -a claude-codenpx skills add encoredev/skills --skill go-cron -a claude-code2Вручную: положить файлы
~/.claude/skills/go-cron/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/go-cron/
1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-cron -a codex2Вручную: положить файлы
.agents/skills/go-cron/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-cron -a cursor2Вручную: положить файлы
.cursor/skills/go-cron/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install encoredev/skills go-cron2Вручную: положить файлы
.github/skills/go-cron/SKILL.md1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-cron -a gemini-cli2Командой платформы
gemini skills install https://github.com/encoredev/skills --path encore/go-cronВручную: положить файлы
.devin/skills/go-cron/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-cron -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о encore-go-cron
Как установить encore-go-cron в Claude Code?
Выполните npx skills add encoredev/skills --skill encore-go-cron -a claude-code. После этого файл скилла окажется в ~/.claude/skills/go-cron/SKILL.md.
Что делает encore-go-cron?
Показывает агенту, как объявлять периодические задачи в Encore Go через cron.NewJob из encore.dev/cron, и разбирает оба формата расписания.
Почему cron-задача не срабатывает локально?
При encore run расписания не выполняются — их запускает только развёрнутое окружение. Проверять расписание придётся после деплоя.
Исходный текст
SKILL.md · Apache-2.0
---
name: encore-go-cron
description: >-
Schedule periodic / recurring work in Encore Go using `cron.NewJob` from `encore.dev/cron`. Covers `Every: "1h"` interval syntax and `Schedule: "0 9 * * 1"` cron expressions.
when_to_use: >-
User wants to run a Go job on a schedule — anything with the words schedule, scheduled, daily, hourly, weekly, periodic, recurring, every N minutes/hours, "at HH:MM UTC", midnight, batch job, aggregation job, nightly, cleanup job, or background work that runs on a timer rather than in response to a request. Trigger phrases: "every day at 02:00 UTC", "daily aggregation", "run hourly", "scheduled task", "cron", "nightly cleanup", "on a schedule".
---
# Encore Go Cron Jobs
## Instructions
A `cron.NewJob` declaration in Encore Go ties a schedule to an existing `//encore:api` endpoint. The endpoint runs at the chosen cadence. Declare the job as a package-level variable — not inside a function.
```go
package cleanup
import (
"context"
"encore.dev/cron"
)
// 1. The endpoint to call (typically private: //encore:api private)
//encore:api private
func CleanupExpiredSessions(ctx context.Context) error {
// Cleanup logic
return nil
}
// 2. Package-level cron declaration
var _ = cron.NewJob("cleanup-sessions", cron.JobConfig{
Title: "Clean up expired sessions",
Schedule: "0 * * * *", // Every hour
Endpoint: CleanupExpiredSessions,
})
```
## Schedule Formats
| Field | Example | Description |
|---|---|---|
| `Every` | `"1h"`, `"30m"`, `"6h"` | Simple interval. **Must divide 24h evenly** — `"7h"` is invalid. |
| `Schedule` | `"0 9 * * 1"` | Standard cron expression (5 fields, UTC). |
### Common cron expressions
| Cron | Meaning |
|---|---|
| `"0 * * * *"` | Every hour, on the hour |
| `"0 2 * * *"` | Daily at 02:00 UTC |
| `"0 0 * * 0"` | Weekly on Sunday at midnight UTC |
| `"0 4 15 * *"` | 04:00 UTC on the 15th of each month |
## Important behaviour
- **Cron jobs do not execute when running locally with `encore run`.** Only deployed environments fire crons.
- The cron endpoint should be `private` so it can't be triggered externally — only the cron scheduler should call it.
- All times in `Schedule` are UTC. Convert from local time when designing the schedule.
- The endpoint must be defined at module load — declare it before the `cron.NewJob` reference.
## Guidelines
- Use `Every` for "run on a regular interval" (must divide 24h).
- Use `Schedule` for specific times of day or days of week.
- Keep endpoint logic idempotent: a cron may fire late or be retried in a redeploy window.
- For event-driven background work (not time-driven), use the `encore-go-pubsub` skill instead.
© encoredev · Apache-2.0 · encoredev/skills