Schedule the recurring autopilot heartbeat. Calls CronCreate to fire one autopilot tick every ~15 min. Triggers on: /loop, start the loop, run the loop, autonomous mode, kick off the heartbeat.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add atrislabs/atris --skill loop --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Loop?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/atrislabs-loop)More formats (shields.io, HTML) on the badges page.
---
name: loop
description: "Schedule the recurring autopilot heartbeat. Calls CronCreate to fire one autopilot tick every ~15 min. Triggers on: /loop, start the loop, run the loop, autonomous mode, kick off the heartbeat."
version: 2.0.0
tags:
- loop
- autopilot
- cron
- heartbeat
---
# /loop
Schedules the recurring autopilot heartbeat. One tick fires roughly every 13–17 minutes via Claude Code's cron system.
## What it does
1. Calls `CronCreate` with a recurring schedule (off-clock minute to avoid fleet sync at :00 / :30)
2. The cron prompt first invokes `atris mission run --due --max-ticks 1 --complete-on-pass`; if no mission is due, it invokes `/autopilot`
3. Returns the cron job id so the user can stop it later with `CronDelete`
4. Lists the active cron jobs via `CronList` so the user can see the heartbeat is alive
5. Runs from a dedicated active task for this loop; a completed task is never reused as the scheduler host
## How to invoke
User says "run /loop", "start the loop", "kick off autonomous mode", or "make autopilot recurring".
The agent then:
1. Checks that the current task is active and dedicated to this loop. If it is complete or belongs to other work, stop and create a new dedicated task before scheduling.
2. Calls `CronCreate` with these args (use whatever off-clock minute you land on, do not pin to :00 or :30):
- `cron`: `"*/13 * * * *"` (every 13 min) for tight loops, or `"7 * * * *"` (hourly at :07) for slow loops
- `prompt`: `"First run: atris mission run --due --max-ticks 1 --complete-on-pass. If it reports no_due_mission, run /autopilot for one tick. One bounded goal only, then stop. Do not start a conversation."`
- `recurring`: `true`
- `durable`: `false` (in-memory only, gone when this Claude session ends)
3. After creating, calls `CronList` and shows the user the active cron jobs.
4. Tells the user: "loop is alive. job id <X>. fires roughly every <N> minutes. say 'stop the loop' to kill it. auto-expires after 7 days."
## Stopping the loop
When the user says "stop the loop", call `CronDelete` with the saved job id.
If the user says "kill all loops", call `CronList`, then `CronDelete` for every job.
## Rules
- One tick at a time. Never schedule a cron that fires more than once per 10 min.
- One recurring monitor per dedicated active task. Never attach a new monitor to a completed task.
- Always pick an off-clock minute (avoid :00 and :30) to prevent the global fleet from hammering the API at the same instant.
- Use `durable: false` by default. Only use `durable: true` if the user explicitly says "make this survive restarts" or "persist this".
- Auto-expires after 7 days. Tell the user.
- Cron only fires while Claude Code is idle (not mid-query). It will NOT run if Claude Code is closed.
- The CLI writes the heartbeat Notes block. Do not hand-write tick summaries to the journal.
## Why this is the heartbeat
`atris mission` is the north star. `/autopilot` is the fallback tick. `/loop` is the schedule:
```
/loop → CronCreate('*/13 * * * *', 'atris mission run --due ... || /autopilot')
↓
every ~13 min while Claude Code is idle:
↓
due mission? → one mission tick
no mission? → one autopilot tick
↓
plan → do → review → stop
↓
(cron fires again next interval)
```
This is the autonomous mode. Without `/loop`, `/autopilot` only runs when a human invokes it.
## The CLI front door and wiki upkeep
The CLI command `atris loop` is now the single front door to the self-improvement loop: `atris loop start` (local), `atris loop start --overnight` (durable heartbeat), `atris loop status`, `atris loop stop`. It delegates to the existing engines (`run`, `pulse`) rather than adding a new one.
Wiki upkeep (stale pages, orphans, ingest candidates) moved to `atris loop wiki` (or `atris wiki loop`). If the user wants wiki health, run that. If they want the autopilot heartbeat from inside Claude Code, invoke `/loop` here.
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!