Repository navigation
feat(plugin): replace the AGY issue loop with plan, work, and review loops - #67
Merged
Merged
Conversation
…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.
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.
This was referenced Oct 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
/faberline:issue-plantodo; setspriority:p0..p3/faberline:issue-worktodo->doing->done(a PR withCloses #<N>)/faberline:issue-reviewdone-> merged and closed, or back totodoEach skill names the scheduler of each client. All three wake the same conversation:
CronCreate, prompt/faberline:issue-<step> loop(stops after 7 days)automation_update,kind: "heartbeat",destination: "thread"schedule,CronExpression,IsDaemon: trueloopand does one step. One loop per conversation.cronautomations, AGY sidecars).review.sh passwaits for the checks and refuses a failed one. A PR without checks ran no test, sopassblocks the issue until the repository has CI./faberline:issue-loopshows the counts and theblockedissues, and creates the labels (loop.sh status,loop.sh labels).agy:prefix:todo,doing,done, and a newblockedfor a decision a human must make.priority:p0..p3labels that the repositories already have. No label counts asp2.issue/<N>, worktree.claude/worktrees/issue-<N>. One work run at a time, throughissue-work.lock;work.sh next --minelets a conversation go on with the issue it claimed.loop.sh labelsrenames the oldagy:*labels, so open issues keep their state. The scripts still find anagy/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).${CLAUDE_SKILL_DIR}is its own folder, because Codex and AGY do not set it..antigravity-plugin/plugin.jsonstays, 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
bash -nandshellcheck -S warningon the four scripts: pass.claude plugin validate .: pass (one warning: noversion, as before).agy plugin validate plugins/faberline: pass (10 skills).CODEX_HOME:codex plugin marketplace add <aw>andcodex plugin add faberline@faberlineinstall it;codex debug prompt-inputlistsfaberline:issue-plan,issue-work,issue-review, andissue-loop.passreads (statusCheckRollup | length): test(tape): remove the kind cluster gates tape#26 8, chore: drop the kind e2e script for the GKE operator suite defer#26 5, chore(claude): enable the faberline plugin core#46 5, chore(claude): enable the faberline plugin relay#58 1; chore(claude): enable the faberline plugin keep#12 and docs(standards): list the S5 pull request for each saas-service repository #65 0 (keep and aw have no PR workflow, so their issues will block until they add CI).loop.sh statusprints the counts;work.sh nextandreview.sh nextexit3;plan.sh newwith a bad priority exits2.work.sh nextexits3(busy);work.sh next --mineresumes past it, then exits3(notodoissue) and removes the lock.After merge, run
loop.sh labelsonce per repository.🤖 Generated with Claude Code