docs(loops): retire cloud routines, loops are local-only (#1086)
Founder decision 2026-07-20: the three claude.ai cloud triggers ran for 19 days as silent no-ops (GH_TOKEN never provisioned, issue #993) and were disabled instead of provisioned. loops.md and loop-ignite now document local-only operation so future sessions do not re-enable the dead triggers or re-ask for provisioning. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
d860567976
commit
3d97b95197
+20
-22
@@ -2,8 +2,8 @@
|
||||
|
||||
Proactive loops that scan the codebase and our external systems (GitHub, Vercel), then
|
||||
**propose** fixes and file well-formed tickets. This file is the shared contract every loop obeys.
|
||||
Skills under `.claude/skills/loop-*` implement the loops; cloud routines and local `/loop` invocations
|
||||
run them on a schedule.
|
||||
Skills under `.claude/skills/loop-*` implement the loops; local `/loop` invocations and session-local
|
||||
crons run them on a schedule. **Cloud routines are retired (2026-07-20): all loops are LOCAL.**
|
||||
|
||||
> These are **proactive loops**: triggered by a schedule, no human in real time, each item exits when
|
||||
> its goal is met. Quality comes from the *system around the loop* (verification skills, clean
|
||||
@@ -58,14 +58,17 @@ comment what was tried. Never retry the same failing action in a cycle.
|
||||
|
||||
| # | Loop | Skill | Where | Cadence (default) | Per-run cap |
|
||||
|---|---|---|---|---|---|
|
||||
| 1 | PR + CI triage | `loop-pr-ci-triage` | **Cloud** `trig_01J2nG7eB9gsdAb9YSGBVwa8` | `0 7,11,15 * * *` UTC | ≤5 PRs |
|
||||
| 2 | Vercel errors → tickets | `loop-vercel-errors` | **Local** (Vercel MCP); cloud needs `VERCEL_TOKEN`. Trigger `trig_014CmE3gTJ7ErnvL2trPYymu` **disabled** | on-demand / `/loop` | ≤8 issues, ≤2 PRs |
|
||||
| 3 | Issue triage + easy-fix | `loop-issue-triage` | **Cloud** `trig_017hB94ieGVwreJqHpGRDVoM` | `0 7,15 * * *` UTC | triage all; ≤2 PRs |
|
||||
| 1 | PR + CI triage | `loop-pr-ci-triage` | **Local** (session cron / `/loop`) | ~3x/day while a session is open | ≤5 PRs |
|
||||
| 2 | Vercel errors → tickets | `loop-vercel-errors` | **Local** (Vercel MCP) | daily / on-demand | ≤8 issues, ≤2 PRs |
|
||||
| 3 | Issue triage + easy-fix | `loop-issue-triage` | **Local** (session cron / `/loop`) | ~2x/day while a session is open | triage all; ≤2 PRs |
|
||||
| 4 | UI/UX + design scan | `loop-design-scan` | **Local** (`/loop`) | on-demand | ≤1 area, ≤6 findings |
|
||||
|
||||
Loops 1 & 3 are cloud routines (only need `gh`). Loop 2 (Vercel errors) is **local**: the Vercel MCP is
|
||||
only available locally, and there's no error-aggregation service (Sentry is not used). Loop 4 is
|
||||
**local**: it needs `npm run dev` + Chrome to render/screenshot the UI.
|
||||
**All loops are local.** Cloud routines were retired 2026-07-20: the three claude.ai triggers
|
||||
(`trig_01J2nG7eB9gsdAb9YSGBVwa8`, `trig_014CmE3gTJ7ErnvL2trPYymu`, `trig_017hB94ieGVwreJqHpGRDVoM`)
|
||||
ran for 19 days as silent no-ops (no `GH_TOKEN` in the cloud env, issue #993) and the founder chose
|
||||
to disable them rather than provision. Do not re-enable or re-create them. Loop 2 additionally needs
|
||||
the Vercel MCP (local-only; Sentry is not used). Loop 4 needs `npm run dev` + Chrome.
|
||||
The `loop-ignite` skill audits and (re)schedules the local cadence each session.
|
||||
|
||||
---
|
||||
|
||||
@@ -77,25 +80,20 @@ grep → build if config/types changed. Plus: never violate an
|
||||
|
||||
---
|
||||
|
||||
## Cloud-environment requirements (verify these: they are the usual failure points)
|
||||
## Why not cloud (historical, kept so nobody re-litigates it)
|
||||
|
||||
Cloud routines run in a **fresh session** in the anthropic_cloud env (`env_01R1K99XTZCEptnQ7k955qfN`),
|
||||
cloning `main`. For them to work:
|
||||
|
||||
1. **`gh` must be authenticated in the cloud env.** Each routine's preflight stops and reports
|
||||
*"environment not provisioned"* if not. Verify via the completion notification of the first fire.
|
||||
2. **Cloud routines cannot reach interactively-authenticated MCPs** (Vercel/Supabase plugins are not in
|
||||
the routine tool allowlist). Loops rely on `gh` (via Bash) + HTTP APIs.
|
||||
3. **The Vercel-errors loop runs locally** (Vercel MCP). Sentry is **not** used in this codebase: the
|
||||
`SENTRY_*` names in `.env.local`/CLAUDE.md are leftovers. To run this loop in the cloud instead, set a
|
||||
`VERCEL_TOKEN` secret on the env and accept that Vercel runtime-log retention is short (recent window
|
||||
only). `GH_TOKEN` is the one secret loops 1 & 3 actually require (private-repo access;
|
||||
OAuth-only integration does not work for private repos, anthropics/claude-code#64130).
|
||||
Cloud routines were tried 2026-07-01 and retired 2026-07-20. The blockers, should anyone revisit:
|
||||
the anthropic_cloud env needs a `GH_TOKEN` fine-grained PAT for private-repo access (OAuth-only
|
||||
integration does not work, anthropics/claude-code#64130), cannot reach interactively-authenticated
|
||||
MCPs (Vercel/Supabase plugins), and Sentry is **not** used in this codebase (the `SENTRY_*` names in
|
||||
`.env.local` are leftovers). Reviving cloud means: set `GH_TOKEN` in the routine editor's cloud env,
|
||||
re-enable the triggers, and verify the first fire leaves a real GitHub trace. Until someone does all
|
||||
of that deliberately, treat cloud as retired: see issue #993 for the full history.
|
||||
|
||||
---
|
||||
|
||||
## Operating the loops
|
||||
- **List / pause / retune:** `/schedule` (or the trigger MCP tools; `update_trigger` for a new cron).
|
||||
- **Audit / (re)ignite each session:** `/loop-ignite` (audits evidence, schedules session-local crons).
|
||||
- **Run on-demand:** `/loop-pr-ci-triage`, `/loop-issue-triage`, `/loop-vercel-errors`,
|
||||
`/loop-design-scan <area>`. Wrap in `/loop <interval>` to repeat locally; `/goal` for a hard exit.
|
||||
- **Cost:** route mechanical steps to cheaper models; reserve judgment for the strong model. `/usage`.
|
||||
|
||||
@@ -1,33 +1,35 @@
|
||||
---
|
||||
name: loop-ignite
|
||||
description: Verify the agentic loops are actually running and ignite any that are not. Use at the start of any session, or whenever the user manually asks to "check the pr comments" / check logs / triage issues, which signals a loop is not firing. The loops exist (dev_docs/loops.md); the historical failure mode is that nobody initiates them.
|
||||
description: Verify the agentic loops are actually running and ignite any that are not. Use at the start of any session, or whenever the user manually asks to "check the pr comments" / check logs / triage issues, which signals a loop is not firing. The loops are LOCAL-only since 2026-07-20 (cloud routines retired); the historical failure mode is that nobody initiates them.
|
||||
---
|
||||
|
||||
# loop-ignite
|
||||
|
||||
**Goal:** the user never has to type "check the pr comments" again. That prompt was typed 323 times
|
||||
between 2026-04 and 2026-07; the loops that replace it were built 2026-07-01 and never initiated.
|
||||
This skill closes that gap.
|
||||
between 2026-04 and 2026-07; the loops that replace it were built 2026-07-01.
|
||||
This skill closes the initiation gap.
|
||||
|
||||
**Cloud routines are RETIRED (founder decision 2026-07-20).** The three claude.ai triggers
|
||||
(trig_01J2nG7eB9gsdAb9YSGBVwa8, trig_014CmE3gTJ7ErnvL2trPYymu, trig_017hB94ieGVwreJqHpGRDVoM)
|
||||
fired daily for 19 days as silent no-ops (no GH_TOKEN in the cloud env, issue #993) and were
|
||||
deliberately disabled instead of provisioned. Do NOT re-enable or re-create them; ignore them in
|
||||
audits. All loops run locally now.
|
||||
|
||||
## When invoked
|
||||
|
||||
1. **Audit what is live.**
|
||||
- Cloud routines: list scheduled triggers (`/schedule` or the list-triggers MCP tool). Expected per
|
||||
`dev_docs/loops.md`: PR+CI triage `0 7,11,15 * * *` UTC, Vercel errors `0 6 * * *` UTC,
|
||||
issue triage `0 7,15 * * *` UTC.
|
||||
- Local fallback: `CronList` for local scheduled jobs.
|
||||
- Local schedule: `CronList` for session-local jobs invoking `/loop-*` skills.
|
||||
- Evidence of firing: recent `loop/*` branches, PR comments by the loop, `loop:needs-human` labels
|
||||
(`gh pr list`, `gh issue list --label loop:needs-human`).
|
||||
2. **Report a one-screen status table**: loop, expected cadence, last observed run, verdict (LIVE / DEAD / NEVER RAN).
|
||||
3. **Ignite what is dead.** For each non-live loop, in order of preference (idempotent: re-list
|
||||
triggers first and enable/repair an existing one before creating; never create a duplicate):
|
||||
- Re-create/enable its cloud routine trigger.
|
||||
- If cloud is unavailable, schedule a local fallback (`CronCreate` invoking the matching
|
||||
`/loop-*` skill) and say clearly that it only runs while this machine is awake.
|
||||
- If neither is possible, run the loop skill once now AND file the blocker as a GitHub issue so
|
||||
the gap is visible instead of silent.
|
||||
4. **Switch-on check (mandatory):** after igniting, verify the trigger exists by listing it again.
|
||||
End with either "ALL LOOPS LIVE" or "NOT SWITCHED ON YET: <loop> - <what remains, who flips it>".
|
||||
3. **Ignite what is dead.** For each non-live loop:
|
||||
- Run the loop skill once NOW (`/loop-pr-ci-triage`, `/loop-issue-triage`, `/loop-vercel-errors`)
|
||||
so the backlog is cleared this session.
|
||||
- Then schedule a session-local cadence (`CronCreate` invoking the matching `/loop-*` skill) and
|
||||
say clearly that it only runs while this session is alive (7-day auto-expiry).
|
||||
- If a loop cannot run at all, file the blocker as a GitHub issue so the gap is visible instead of silent.
|
||||
4. **Switch-on check (mandatory):** after igniting, verify via `CronList` that the jobs exist.
|
||||
End with either "ALL LOOPS LIVE (session-local)" or "NOT SWITCHED ON YET: <loop> - <what remains, who flips it>".
|
||||
|
||||
## If the user manually types a loop-shaped request
|
||||
|
||||
|
||||
Reference in New Issue
Block a user