Repository navigation
[open-actions-self-update] Prompt Tuning: open-actions-config-update routes implementation lessons to an AgentConfig no implementing agent loads #1626
Description
🤖 Kelos Agent @gjkim42
Area
Prompt Tuning
Problem and impact
open-actions-config-update is the only loop that turns Open Actions PR review feedback into agent configuration. Its prompt calls self-development/open-actions/agentconfig.yaml the "shared Open Actions role instructions" and sends "Shared changes (affect all Open Actions agents)" there. The fleet is not wired that way:
open-actions-dev-agent(agentconfig.yaml) is loaded only byopen-actions-triageandopen-actions-squash-commits. Triage is read-only ("Do NOT open PRs, push code, or modify any files"), and squash-commits must "NOT modify any source code".- Reviewed implementation output comes from authors that never load it. 35 of the 40 most recent Open Actions PRs (#145–#193) came from maintainer-named branches such as
fix/action-download-retries, including every PR from Support opencode #184 through Documentation: Remove duplicate AGENTS.md file #193. None of local-run.sh may remove CRDs #185–Documentation: Remove duplicate AGENTS.md file #193 received a/kelos pick-up, and no Kelos AgentConfig reaches those authors. The other 5 (#148, #156, #157, #166, #183) use theopen-actions-workersSession'sopen-actions-task-<N>branches. That Session andopen-actions-pr-responderload onlybase-agentand take Open Actions' conventions fromAGENTS.mdin thekelos-dev/open-actionscheckout. Both now run Codex, which writesbase-agentto$CODEX_HOME/AGENTS.mdand reads the checkout'sAGENTS.mddirectly. Theirbase-agent-onlyagentConfigRefsdate from the fleet's creation inb169c1a(2026-08-09), andinternal/examples/self_development_test.gopins it.open-actions-reviewerruns on the maintainer's/kelos reviewon any open PR, so it is the one configured agent that sees every implementation. - The planner, reviewer, API reviewer, fake-user, and fake-strategist each load their own inline AgentConfig.
So the most common kind of review lesson, one about implementation output, lands in a file that no implementing agent reads. The PR looks like a fix but changes nothing for the agents that made the mistake. The loop also uses that file to decide a finding is "already covered" and adds nothing more. The prompt has no path to withdraw misrouted changes either, so they keep piling up in one open PR.
Evidence from the workflows and agent activity
- The misrouted PR keeps growing. PR #1627 has been open and unassigned since 2026-08-09. It now has 16 commits, and the last two repeat the pattern.
cfb2fa77(2026-10-06T18:03Z) extends theagentconfig.yamlConsole bullet after the open-actions#192 review (P3) found that automatic status refreshes drop keyboard focus and text selection. docs: Add comprehensive README for self-development examples #192 came from the maintainer branchfix/console-status-refresh, and its author fixed the finding before merge (ece583d).de591892(2026-10-13T18:07Z) extends the producer/consumer test bullet after the open-actions#193 review suggested building a runner test's executor withNewExecutorinstead of assigningexecutor.logger. Documentation: Remove duplicate AGENTS.md file #193 came from the maintainer branchfix/action-download-retries. Its author force-pushed the fix four minutes after the review (78a1e9a), so the merged test already usesNewExecutorand asserts the Console'sopen_actions_runnermarker. The Improve Open Actions compatibility reviews and implementation guidance #1627 description reasons that "The code reviewer caught each one, so only the implementation guidance changes", so the only edit for this lesson went to a file no implementer loads. Its diff adds 25 implementation bullet lines toagentconfig.yaml(2 of them rewrite existing bullets), covering Console form and keyboard tests, controller watch handlers, Git semantics, Helm upgrades, matrix identities, and more. It also changesopen-actions-reviewer.yamlby +20/−4 lines andopen-actions-api-reviewer.yamlby +6/−1. Its description says "Shared implementation guidance lives inagentconfig.yaml". Of all that, only the reviewer and API-reviewer lines reach an agent that acts on them. - "Already covered" points at guidance nobody loads. The Improve Open Actions compatibility reviews and implementation guidance #1627 description skips new rules for Support gemini cli #172/notice the user before overriding the existing config, credentials #176's Console form testing, Support gemini CLI agent type #173's watch filtering, and CLI UX: Missing client-side validation for enum flags (--type, --credential-type) #182's non-idempotent retries because "existing guidance already covers" them. That guidance exists only in
agentconfig.yaml. Commit2cda9401records that the reviews of open-actions#183 and #187 "found the same defect in the Console Run workflow form". The loop responded by extending theagentconfig.yamlbullet again. - Merged rules did not reach the implementers. #1625, a config-update PR merged 2026-08-09, added the two implementation bullets now on
main(stale informer reads and tests for stale-state decisions). Eleven days later, the open-actions#93 review flagged a P2 retry-idempotency defect in the rerun path. That PR came from a workers Session (branchopen-actions-task-32). Improve Open Actions compatibility reviews and implementation guidance #1627 cites this review as the reason for yet anotheragentconfig.yamlrule. - Where a check can reach, it works. Commit
36aa1fc1turns the open-actions#191 startup lesson into a "Controller efficiency" check inopen-actions-reviewer.yaml, which reviews every Session PR. Theagentconfig.yamlhalf of the same commit reaches no implementer. - Prompt:
open-actions-config-update.yamlfile map, lines 68–72, routing, lines 98–107, and existing-PR handling, lines 125–130. - Wiring:
open-actions-workers.yamllines 56–57,open-actions-pr-responder.yamllines 63–64,open-actions-triage.yamllines 49–51,open-actions-squash-commits.yamllines 59–61, and the test pins, lines 227–232. - The README's How It Works section describes the wiring correctly. Its config-update section, lines 300–307, repeats the prompt's "shared role instructions in
agentconfig.yaml" wording.
Proposed change
In self-development/open-actions/open-actions-config-update.yaml:
-
Replace the file-map bullets (lines 70–72) with a map of which agent loads which file:
self-development/base-agent.yaml: shared instructions and skills, loaded by every resourceself-development/open-actions/agentconfig.yaml:open-actions-dev-agent, loaded only byopen-actions-triageandopen-actions-squash-commits- The inline AgentConfigs in
open-actions-planner.yaml,open-actions-reviewer.yaml,open-actions-api-reviewer.yaml,open-actions-fake-user.yaml, andopen-actions-fake-strategist.yaml, each loaded only by its own spawner - The
open-actions-workersandopen-actions-pr-responderSessions load onlybase-agent. They read Open Actions' conventions fromAGENTS.mdinkelos-dev/open-actions, which this agent does not edit. PRs the maintainer pushes from their own branches load no file here either
-
Replace the "Shared changes" and "Task-specific changes" blocks (lines 98–107) with routing by the agent that produced the output under review. Keep the base-agent skills rule:
Route each lesson to the configuration that the agent behind the reviewed output actually loads:
- Triage or squash-commits behavior:
agentconfig.yaml - Planner, reviewer, API reviewer, fake-user, or fake-strategist behavior: that spawner's prompt or inline AgentConfig
- Implementation output (code, tests, docs, commits, PR descriptions), whether from the
open-actions-workersoropen-actions-pr-responderSessions or from branches the maintainer pushes: no file here reaches its author. Do not add these rules toagentconfig.yaml, and do not expand the Sessions' minimalinitialPrompt. If a review-time check would catch the problem and is not already inopen-actions-reviewer.yaml(oropen-actions-api-reviewer.yamlfor API surfaces), add it there. Otherwise, make no change for that lesson. - Treat a recurring finding as already covered only when the covering guidance is in a configuration the producing agent loads.
- Keep shared skills only in
self-development/base-agent.yaml. Do not duplicate them in Open Actions role AgentConfigs.
- Triage or squash-commits behavior:
-
Extend the existing-PR constraint (lines 125–130) with:
If an existing unassigned PR from this agent contains changes that this routing does not allow, or that the evidence no longer supports, remove them. If no changes remain, close the PR with a comment explaining why.
Then update lines 300–307 of self-development/open-actions/README.md to describe the same routing.
Acceptance criteria
open-actions-config-update.yamlstates which agents loadagentconfig.yaml, which load each inline AgentConfig, and which load onlybase-agent. It no longer saysagentconfig.yamlaffects all Open Actions agents.- Lessons are routed by the agent that produced the reviewed output. Rules for implementation output never go to
agentconfig.yaml, whether a Session or the maintainer wrote it. They go toopen-actions-reviewer.yamloropen-actions-api-reviewer.yamlwhen a review-time check fits and is not already there. - A finding counts as "already covered" only by guidance the producing agent loads.
- The agent may remove unsupported changes from its own unassigned PR, and close the PR when nothing remains. The assigned-PR guard, the one-PR-per-run rule,
/kind cleanup, andrelease-note: NONEare unchanged. self-development/open-actions/README.mddescribes the same routing.agentConfigRefsdo not change, sointernal/examples/self_development_test.goneeds no update. Only files underself-development/open-actions/change, andmake verifypasses.- Post-merge check: the next
open-actions-config-updaterun removes from PR #1627 theagentconfig.yamlbullets that target implementation output. It keeps or adds reviewer and API-reviewer checks only where the evidence supports them.
Related work and scope
- PR #1627 is the misrouted PR itself. This issue fixes the prompt that produced it. Trimming Improve Open Actions compatibility reviews and implementation guidance #1627 is the expected outcome, not a separate change.
- #1734 proposes the same fix for
agora-config-updateand explicitly leaves Open Actions out of scope. Using the same routing keeps the two fleets consistent. - #766 covers
kelos-config-update, a different fleet. - Adding
open-actions-dev-agentto the two SessionSpawners is not proposed, for three reasons. Thebase-agent-only Session wiring is deliberate and pinned by the test.open-actions-dev-agentcarries ephemeral-container and bot-identity text that does not fit Sessions running on the maintainer's token with a persistent volume. And its Makefile-target and commit-message rules repeat conventions the Sessions already read from Open Actions'AGENTS.md. - The two implementation bullets that Update Open Actions agent conventions #1625 merged into
agentconfig.yamlstay where they are. Moving them is left to the maintainer. - Open question for the maintainer: should lessons that no review-time check can catch be proposed for Open Actions'
AGENTS.md, for example as akelos-dev/open-actionsissue? The maintainer already edits that file directly (open-actions#177, merged 2026-09-16, changed onlyAGENTS.md). This proposal leaves that out. - Also considered, ranked lower:
- The previous candidate in this slot: make single-slot publication clock-stamped, literal-safe, and idempotent. The fake-user, fake-strategist, and self-update prompts still name no time source for
Checked at. However, the last four fake-user refreshes of open-actions#76 (2026-09-29 through 2026-10-02) and every fake-strategist refresh of open-actions#168 through2026-10-03T00:06:16Zrecorded real times. The shell-expansion corruption (2026-08-17 and 2026-09-06) and the duplicate create (open-actions#75/add kind labels #76, 2026-08-14) have not recurred. - The reviewer template's
**Verdict**: APPROVE / REQUEST CHANGES / COMMENT (sticky comment only)was copied verbatim,(sticky comment only)included, into 3 of the last 10 reviews (open-actions#179, #185, #187). This is cosmetic. - The reviewer and API reviewer cite the nonexistent
config/crd/bases/. Open Actions' CRDs live ininternal/manifests/charts/open-actions/templates/crds. No review has been misled by it yet. - Triage created no task for open-actions#180 (2026-09-24), and failed on E2E test anchor issue #117–Speed up image builds by pre-compiling Go binaries on host #119 (2026-08-23). This looks like a delivery or infrastructure problem, not a prompt problem.
- The previous candidate in this slot: make single-slot publication clock-stamped, literal-safe, and idempotent. The fake-user, fake-strategist, and self-update prompts still name no time source for
Latest verdict
-
Status:
VALID -
Checked at:
2026-10-26T06:01:20Z -
Evidence: Kelos
mainmoved fromb1e0398to68257b1. The new commits are agent image bumps ande7e6184(support files in inline AgentConfig skills, #1841). None of them touchself-development/orinternal/examples/self_development_test.go.3040ff1(2026-10-15, models only) is still the last commit to change those paths, andgit diff 40dedd4 origin/mainover them is still empty, so the40dedd4permalinks above still show the current content.open-actions-config-update.yamlstill callsagentconfig.yamlthe "shared Open Actions role instructions" (line 71) and still sends "Shared changes (affect all Open Actions agents)" there (lines 101–102). Onlyopen-actions-triageandopen-actions-squash-commitsloadopen-actions-dev-agent. Theopen-actions-workersandopen-actions-pr-responderSessions still load onlybase-agent, and lines 227–232 of the test still pin this. README lines 300–307 still describe "the shared role instructions inagentconfig.yaml". PR #1627 is still open, unassigned, and unreviewed: 16 commits, +51/−7 (agentconfig.yaml+25/−2,open-actions-reviewer.yaml+20/−4,open-actions-api-reviewer.yaml+6/−1), headde591892(2026-10-13T18:07Z). It is still the only openopen-actions-config-updatePR. Open Actionsmainis still87db1d2. No Open Actions PR has been opened since #193 and no issue since #180, so there is no new review evidence that changes the ranking. Open Actions'AGENTS.mdhas not changed since0bb03ef(2026-09-16). Lower-ranked alternatives, rechecked:open-actions-reviewer.yamlline 215 andopen-actions-api-reviewer.yamlline 246 still citeconfig/crd/bases/, which still returns HTTP 404 in Open Actions. The CRDs are still ininternal/manifests/charts/open-actions/templates/crds. No review has been misled by it yet.- No Open Actions prompt mentions
docs/reference.md, which Open Actions'AGENTS.md(line 15) names as the user-facing reference. No recent review is known to have missed a needed update there, so this ranks lower. - The reviewer template's
(sticky comment only)suffix (line 325) is cosmetic. The fake-user and fake-strategist slots still record real times (open-actions#76 at2026-10-25T09:00:32Z, open-actions#168 at2026-10-26T00:12:08Z), so the clock-stamp alternative stays weak.
No other open
generated-by-kelosissue overlaps. #1734 (Agora) and #766 (Kelos) are still open and unassigned, and both cover other fleets.
Activity
[-][open-actions-self-update] Configuration Alignment: enforce the required repository-label preflight[/-][+][open-actions-self-update] Workflow Completeness: teach PR-writing agents the kind and release-note gate[/+][-][open-actions-self-update] Workflow Completeness: teach PR-writing agents the kind and release-note gate[/-][+][open-actions-self-update] Workflow Completeness: make PR-writing prompts follow the metadata contract[/+][-][open-actions-self-update] Workflow Completeness: make PR-writing prompts follow the metadata contract[/-][+][open-actions-self-update] Workflow Completeness: add release-note labels to the bootstrap[/+][-][open-actions-self-update] Workflow Completeness: add release-note labels to the bootstrap[/-][+][open-actions-self-update] Prompt Tuning: make single-slot publication retry-safe[/+][-][open-actions-self-update] Prompt Tuning: make single-slot publication retry-safe[/-][+][open-actions-self-update] Prompt Tuning: make single-slot publication shell-safe and idempotent[/+][-][open-actions-self-update] Prompt Tuning: make single-slot publication shell-safe and idempotent[/-][+][open-actions-self-update] Prompt Tuning: make single-slot publication clock-stamped, literal-safe, and idempotent[/+][-][open-actions-self-update] Prompt Tuning: make single-slot publication clock-stamped, literal-safe, and idempotent[/-][+][open-actions-self-update] Prompt Tuning: open-actions-config-update routes implementation lessons to an AgentConfig no implementing agent loads[/+]