Looped Docs

Cron

Run the agent on a schedule with a cron expression and a prompt.

The cron trigger runs the agent on a schedule rather than in response to an external event:

triggers:
  - type: cron
    schedule: "0 9 * * 1"        # every Monday 09:00
    prompt: Post a summary of open issues.
configs:
  agent-yaml:
    content: |
      handle: summary-bot
      description: Posts a weekly summary of open issues.
      model:
        provider: openai-compatible
        id: gpt-5.4-mini
      purpose: |
        Each run, summarize the open issues and deliver the summary.
      triggers:
        - type: cron
          schedule: "0 9 * * 1"   # every Monday 09:00
          prompt: Post a summary of open issues.

services:
  summary-bot:
    image: ghcr.io/loopedautomation/agent:latest
    configs:
      - source: agent-yaml
        target: /agent/agent.yaml
    env_file: .env   # the model's API key
    volumes:
      - summary-bot-data:/data
    restart: unless-stopped
volumes:
  summary-bot-data:

Each tick runs the agent with prompt as input. Results are logged and recorded in the run history — a configurable result sink is planned; until then, when the result needs to go somewhere, have the agent deliver it itself through an allowlisted API or CLI (Permissions).

Every run reports its status, steps and tokens, and limits cap what an unattended schedule can spend.

Multiple triggers

triggers: is a list, and an agent can declare as many as it needs, including two of the same type. A daily prompt and a weekly prompt can live side by side:

triggers:
  - type: cron
    schedule: "0 9 * * *"        # every day 09:00
    prompt: Post a summary of yesterday's open issues.
  - type: cron
    schedule: "0 9 * * 1"        # every Monday 09:00
    prompt: Post a summary of the past week.

This also works across types: the same agent can listen on Discord, serve a webhook and run a schedule at the same time. Whatever wakes it, the same purpose, permissions and run history apply, and conversation keys stay per source, so a Discord thread and a webhook caller never share memory.

Are you an AI? Visit llms.txt — these docs as plain markdown.

On this page