Skip to content

feat(plugin): replace the AGY issue loop with plan, work, and review loops - #67

Merged
chrischeng-c4 merged 5 commits into
mainfrom
feat/issue-loop
Oct 23, 2026
Merged

chrischeng-c4 merged 5 commits into
mainfrom
feat/issue-loop

Conversation

@chrischeng-c4

@chrischeng-c4 chrischeng-c4 commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Replace the AGY issue loop with three steps. Run each step skill once, in its own conversation. The skill starts its own loop, which wakes that same conversation.

Step Skill Moves Every
plan /faberline:issue-plan opens issues as todo; sets priority:p0..p3 30 min
work /faberline:issue-work todo -> doing -> done (a PR with Closes #<N>) 15 min
review /faberline:issue-review done -> merged and closed, or back to todo 15 min

Each skill names the scheduler of each client. All three wake the same conversation:

Client Scheduler
Claude Code CronCreate, prompt /faberline:issue-<step> loop (stops after 7 days)
Codex automation_update, kind: "heartbeat", destination: "thread"
AGY schedule, CronExpression, IsDaemon: true
  • A run that the loop started has the argument loop and does one step. One loop per conversation.
  • The skills never use a scheduler that starts a new conversation per run (Claude Code scheduled tasks or routines, Codex cron automations, AGY sidecars).
  • Review runs in its own conversation, so it does not share the work step's reasoning.
  • Review reads; CI tests. Review reads the issue, the PR, its diff, and its checks, and runs no tests. Each repository decides what its PR checks run, also whether e2e goes to the shared GKE cluster. review.sh pass waits for the checks and refuses a failed one. A PR without checks ran no test, so pass blocks the issue until the repository has CI.
  • /faberline:issue-loop shows the counts and the blocked issues, and creates the labels (loop.sh status, loop.sh labels).
  • Labels drop the agy: prefix: todo, doing, done, and a new blocked for a decision a human must make.
  • Priority uses the priority:p0..p3 labels that the repositories already have. No label counts as p2.
  • Branch issue/<N>, worktree .claude/worktrees/issue-<N>. One work run at a time, through issue-work.lock; work.sh next --mine lets a conversation go on with the issue it claimed.
  • loop.sh labels renames the old agy:* labels, so open issues keep their state. The scripts still find an agy/issue-<N> branch (React:react-output-v1 amendment 001(修 list 測試斷言與 changed 樣本) som#132 and its PR React:react-output-v1 amendment 001(修 list 測試斷言與 changed 樣本) som#133).
  • Removes the AGY notes in the other skills.
  • The skills also load in Codex and AGY. Each skill says that ${CLAUDE_SKILL_DIR} is its own folder, because Codex and AGY do not set it. .antigravity-plugin/plugin.json stays, so AGY can follow a local checkout through ~/.gemini/config/plugins.json. Codex reads the existing marketplace. The README tells how to add both.

Checks

After merge, run loop.sh labels once per repository.

🤖 Generated with Claude Code

…w loop

Claude Code now runs all three steps of the issue loop. AGY is no longer
part of it.

- issue-loop: a self-paced /loop. Each iteration runs one step: review when
  an issue is done, work when one is todo or doing, plan when nothing else
  is open. Review runs in a fresh subagent.
- issue-plan: opens todo issues, adopts existing ones, and sets
  priority:p0..p3. An issue without a priority counts as p2.
- issue-work: takes the highest-priority todo issue, then the oldest;
  implements it on issue/<N> in .claude/worktrees/issue-<N>; opens a PR
  that closes it, labelled done.
- issue-review: runs the checks beyond the unit-test gate, then merges the
  PR or moves the issue back to todo.
- The labels drop the agy: prefix: todo, doing, done, and a new blocked
  label for a decision a human must make. loop.sh labels renames the old
  agy:* labels, and the scripts still find an agy/issue-<N> branch.
- Remove the Antigravity manifest and the AGY notes in the other skills.
Each step now runs as its own /loop, in its own session, side by side:
plan every 30 minutes, work and review every 15 minutes. A run does one
step and ends; it no longer schedules its own wakeup.

- issue-loop no longer picks the next step. It shows the counts and the
  blocked issues, prints the three /loop commands, and creates the labels.
  loop.sh step becomes loop.sh status.
- The work lock is now issue-work.lock. work.sh next --mine lets a session
  go on with the issue it claimed, past its own lock.
- work and review block an issue when the same refusal comes twice.
@chrischeng-c4 chrischeng-c4 changed the title feat(plugin): replace the AGY issue loop with a plan, work, and review loop feat(plugin): replace the AGY issue loop with plan, work, and review loops Oct 23, 2026
issue-plan, issue-work, and issue-review now start their own loop when
the user runs them without the `loop` argument. The loop wakes the same
conversation: plan every 30 minutes, work and review every 15 minutes.
A run that the loop started has the argument `loop` and does one step.

Each skill names the scheduler of each client:
- Claude Code: CronCreate, with the prompt `/faberline:issue-<step> loop`.
- Codex: automation_update, kind heartbeat, destination thread.
- AGY: schedule, CronExpression, IsDaemon.

The skills never use a scheduler that starts a new conversation for
each run (Claude Code scheduled tasks or routines, Codex cron
automations, AGY sidecars). One loop per conversation; the skill looks
for an existing one first.

issue-loop and the README now tell the user to run each step skill once,
in its own conversation, instead of three /loop commands.
Codex and AGY do not set ${CLAUDE_SKILL_DIR}. Each skill that uses it
now says that it is the folder of the SKILL.md, so the model in those
clients uses the folder's absolute path instead. The scripts already
find each other relative to their own path.

Bring back .antigravity-plugin/plugin.json, so AGY finds the plugin
through ~/.gemini/config/plugins.json without a copy. Codex reads the
existing .claude-plugin marketplace as it is.

The README tells how to add the plugin to Codex and AGY.
The review step no longer runs tests, builds, or e2e. It reads the
issue, the PR, its diff, and its checks. The PR checks run the tests,
and each repository decides what its CI runs, also whether e2e goes to
the shared GKE cluster. review.sh pass already waits for the checks
and refuses when one fails.

A PR without checks ran no test, so review.sh pass now blocks the
issue until the repository has CI. review.sh next prints the number of
checks.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant