[GH-ISSUE #7640] [Bug] Skill recovery step again omits supported setup client IDs #4566

Open
opened 2026-10-31 00:50:50 +00:00 by bsakaguchi · 0 comments
Owner

Originally created by @coygeek on GitHub (Oct 28, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/7640

Before submitting

  • I searched the open and closed issues for a related report.
  • I removed credentials, tokens, private paths, and sensitive target data.

Area

Documentation

Observed behavior

When an agent needs to recover a missing REA connection, the bundled skill's first diagnosis step supplies a list of supported client IDs for the --client argument. That list contains 15 IDs, while node scripts/rea.mjs setup --schema advertises 26.

I ran node scripts/rea.mjs setup --client kimi --dry-run --json with an isolated HOME/XDG environment. It exited 0 with status: "planned", a configure_client:kimi action, and no applied actions. Nevertheless, kimi is absent from the skill's step-1 list. Comparing the complete schema enum with that list found 11 omissions in both the authored and generated skill copies.

This is a verified documentation mismatch. I did not test how an agent responds to the incomplete list.

Reproduction

  1. From the built source checkout at the revision below, use Node 24.22.1 and run this isolated check. The inline package-tool fixtures prevent package acquisition; the temporary environment is removed automatically.

    python3 -I - <<'PY'
    import json, os, re, shutil, subprocess, tempfile
    from pathlib import Path
    
    node = shutil.which("node")  # Run with Node 24.22.1 first on PATH.
    with tempfile.TemporaryDirectory(prefix="rea-skill-verify-") as directory:
        base = Path(directory)
        for name in ("bin", "home", "config", "data", "cache", "state", "tmp"):
            (base / name).mkdir()
        for name in ("npx", "npm", "bun"):
            fixture = base / "bin" / name
            fixture.write_text("#!/bin/sh\nprintf '6.8.0\\n'\n")
            fixture.chmod(0o755)
        env = {"PATH": f"{base / 'bin'}:{Path(node).parent}:{os.defpath}",
               "HOME": str(base / "home"), "TMPDIR": str(base / "tmp"),
               "npm_config_cache": str(base / "cache" / "npm")}
        for key, name in (("CONFIG", "config"), ("DATA", "data"),
                          ("CACHE", "cache"), ("STATE", "state")):
            env[f"XDG_{key}_HOME"] = str(base / name)
        def rea(*args):
            return subprocess.check_output([node, "scripts/rea.mjs", *args],
                                           env=env, text=True, timeout=90)
        print("version:", rea("--version").strip())
        schema = rea("setup", "--schema")
        section = schema.split("    client:", 1)[1].split("    skillClient:", 1)[0]
        accepted = re.search(r"enum\[\d+\]: ([^\n]+)", section).group(1).split(",")
        print("accepted:", len(accepted))
        plan = json.loads(rea("setup", "--client", "kimi", "--dry-run", "--json"))
        print("plan:", plan["status"], [a["id"] for a in plan["plannedActions"]],
              "applied:", plan["appliedActions"])
        for filename in (".agents/skills/reverse-engineer-anything/SKILL.md",
                         "skills/reverse-engineer-anything/SKILL.md"):
            text = Path(filename).read_text()
            step = text.split("supported client:", 1)[1].split("`grok_bot` has no local", 1)[0]
            listed = re.findall(r"`([^`]+)`", step)
            print(filename, "listed:", len(listed),
                  "missing:", ", ".join(x for x in accepted if x not in listed))
    PY
    
  2. The result is accepted: 26, listed: 15 for each skill copy, and the same 11 missing IDs below. The Kimi result is planned, with configure_client:kimi and install_skill, and applied: [].

The mismatch reproduced in the initial check and in a separate run of this script.

Expected behavior

The skill's instruction to select the current supported client should include the IDs accepted by the current setup interface. The supported-agent installation guide already documents these integrations. Closed #1522 established the same expectation, and merged #1523 previously corrected the list.

Impact and scope

The demonstrated effect is an incomplete operational instruction for agents handling these 11 supported integrations. The setup parser itself accepts them; the observed Kimi dry run succeeds. I did not demonstrate a failed configuration repair, incorrect client selection, or inability to connect a real client. On that evidence, the impact is P3.

A reader can obtain the missing IDs from setup --schema or the supported-agent installation table. No client configuration was applied during verification, and the isolated HOME contained no files afterward.

REA version

Exact node scripts/rea.mjs --version output:

6.8.0

Source revision: 65f1c447344a423fa2785847dbcea1e9a9e2454a.

Runtime and platform

Node.js v24.22.1; Darwin 27.0.0; arm64. No analysis target, provider execution, or GUI launch was needed.

Target and artifact context

The already-built checkout's bundled recovery skill and production setup CLI. No registry-package installation or real client session was tested.

Interface

Package or setup

Earliest failure stage

Setup or provider admission

Relevant output or evidence

The comparison script produces this difference for both skill copies:

accepted: 26
listed: 15
missing: qwen_code, kimi, trae, workbuddy, pi, hermes, qoder, droid, zcode, dsh, freebuff

At the reported revision:

  • .agents/skills/reverse-engineer-anything/SKILL.md:48-50 contains the authored 15-ID list; skills/reverse-engineer-anything/SKILL.md:49-51 contains its built counterpart.
  • docs/installation.md:610-646 documents the supported agents and their release boundaries.
  • src/application/SetupSkill.ts:27-36 includes SKILL.md among managed skill files; :76-83 loads canonical content from the generated skills/ tree. This establishes that the stale generated file is the setup source, without claiming an actual installation.
  • scripts/generate-skill-metadata.mjs copies authored instructions into the generated skill and pins package commands; it does not derive the client list from the supported-client owner.

Typed outcome or recovery expected

The same client ID accepted by setup should be discoverable in the skill's supported-client recovery list. A future consistency check could compare this list with the supported-client owner.

Analysis or suspected cause

The earlier correction regressed when an old recovery block was reintroduced. Commit 92741187e (#1523) added qwen_code, pi, and hermes. Commit 2653b194b (#1613) moved recovery instructions into a reference that retained all 18 clients supported then. Later commit 4aa51bfe1997ef2df6e905ab2fb7bcd5fabfe16e (#2799) added the old 15-ID block back into the main skill. I inspected those diffs locally; the stale block remains at the reported baseline.

Additional context

This survives the fix for closed #1522 and is reported as a later regression. I searched open/closed issues, issue comments, and open/closed/merged PRs. Related open draft #4451, inspected at head 350112b1d1e97e6c69b2e1be90f695e798a6985e, only adds kimi and workbuddy to the separate connection-and-recovery reference. It does not change the main skill's step-1 list. Open #4367 adds bob to that list while leaving all 11 omissions. Neither repairs this regression.

Originally created by @coygeek on GitHub (Oct 28, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/7640 ### Before submitting - [x] I searched the open and closed issues for a related report. - [x] I removed credentials, tokens, private paths, and sensitive target data. ### Area Documentation ### Observed behavior When an agent needs to recover a missing REA connection, the bundled skill's first diagnosis step supplies a list of supported client IDs for the `--client` argument. That list contains 15 IDs, while `node scripts/rea.mjs setup --schema` advertises 26. I ran `node scripts/rea.mjs setup --client kimi --dry-run --json` with an isolated HOME/XDG environment. It exited 0 with `status: "planned"`, a `configure_client:kimi` action, and no applied actions. Nevertheless, `kimi` is absent from the skill's step-1 list. Comparing the complete schema enum with that list found 11 omissions in both the authored and generated skill copies. This is a verified documentation mismatch. I did not test how an agent responds to the incomplete list. ### Reproduction 1. From the built source checkout at the revision below, use Node 24.22.1 and run this isolated check. The inline package-tool fixtures prevent package acquisition; the temporary environment is removed automatically. ```bash python3 -I - <<'PY' import json, os, re, shutil, subprocess, tempfile from pathlib import Path node = shutil.which("node") # Run with Node 24.22.1 first on PATH. with tempfile.TemporaryDirectory(prefix="rea-skill-verify-") as directory: base = Path(directory) for name in ("bin", "home", "config", "data", "cache", "state", "tmp"): (base / name).mkdir() for name in ("npx", "npm", "bun"): fixture = base / "bin" / name fixture.write_text("#!/bin/sh\nprintf '6.8.0\\n'\n") fixture.chmod(0o755) env = {"PATH": f"{base / 'bin'}:{Path(node).parent}:{os.defpath}", "HOME": str(base / "home"), "TMPDIR": str(base / "tmp"), "npm_config_cache": str(base / "cache" / "npm")} for key, name in (("CONFIG", "config"), ("DATA", "data"), ("CACHE", "cache"), ("STATE", "state")): env[f"XDG_{key}_HOME"] = str(base / name) def rea(*args): return subprocess.check_output([node, "scripts/rea.mjs", *args], env=env, text=True, timeout=90) print("version:", rea("--version").strip()) schema = rea("setup", "--schema") section = schema.split(" client:", 1)[1].split(" skillClient:", 1)[0] accepted = re.search(r"enum\[\d+\]: ([^\n]+)", section).group(1).split(",") print("accepted:", len(accepted)) plan = json.loads(rea("setup", "--client", "kimi", "--dry-run", "--json")) print("plan:", plan["status"], [a["id"] for a in plan["plannedActions"]], "applied:", plan["appliedActions"]) for filename in (".agents/skills/reverse-engineer-anything/SKILL.md", "skills/reverse-engineer-anything/SKILL.md"): text = Path(filename).read_text() step = text.split("supported client:", 1)[1].split("`grok_bot` has no local", 1)[0] listed = re.findall(r"`([^`]+)`", step) print(filename, "listed:", len(listed), "missing:", ", ".join(x for x in accepted if x not in listed)) PY ``` 2. The result is `accepted: 26`, `listed: 15` for each skill copy, and the same 11 missing IDs below. The Kimi result is `planned`, with `configure_client:kimi` and `install_skill`, and `applied: []`. The mismatch reproduced in the initial check and in a separate run of this script. ### Expected behavior The skill's instruction to select the current supported client should include the IDs accepted by the current setup interface. The supported-agent installation guide already documents these integrations. Closed [#1522](https://github.com/morluto/rea/issues/1522) established the same expectation, and merged [#1523](https://github.com/morluto/rea/pull/1523) previously corrected the list. ### Impact and scope The demonstrated effect is an incomplete operational instruction for agents handling these 11 supported integrations. The setup parser itself accepts them; the observed Kimi dry run succeeds. I did not demonstrate a failed configuration repair, incorrect client selection, or inability to connect a real client. On that evidence, the impact is P3. A reader can obtain the missing IDs from `setup --schema` or the supported-agent installation table. No client configuration was applied during verification, and the isolated HOME contained no files afterward. ### REA version Exact `node scripts/rea.mjs --version` output: ```text 6.8.0 ``` Source revision: `65f1c447344a423fa2785847dbcea1e9a9e2454a`. ### Runtime and platform Node.js v24.22.1; Darwin 27.0.0; arm64. No analysis target, provider execution, or GUI launch was needed. ### Target and artifact context The already-built checkout's bundled recovery skill and production setup CLI. No registry-package installation or real client session was tested. ### Interface Package or setup ### Earliest failure stage Setup or provider admission ### Relevant output or evidence The comparison script produces this difference for both skill copies: ```text accepted: 26 listed: 15 missing: qwen_code, kimi, trae, workbuddy, pi, hermes, qoder, droid, zcode, dsh, freebuff ``` At the reported revision: - `.agents/skills/reverse-engineer-anything/SKILL.md:48-50` contains the authored 15-ID list; `skills/reverse-engineer-anything/SKILL.md:49-51` contains its built counterpart. - `docs/installation.md:610-646` documents the supported agents and their release boundaries. - `src/application/SetupSkill.ts:27-36` includes `SKILL.md` among managed skill files; `:76-83` loads canonical content from the generated `skills/` tree. This establishes that the stale generated file is the setup source, without claiming an actual installation. - `scripts/generate-skill-metadata.mjs` copies authored instructions into the generated skill and pins package commands; it does not derive the client list from the supported-client owner. ### Typed outcome or recovery expected The same client ID accepted by setup should be discoverable in the skill's supported-client recovery list. A future consistency check could compare this list with the supported-client owner. ### Analysis or suspected cause The earlier correction regressed when an old recovery block was reintroduced. Commit `92741187e` ([#1523](https://github.com/morluto/rea/pull/1523)) added `qwen_code`, `pi`, and `hermes`. Commit `2653b194b` ([#1613](https://github.com/morluto/rea/pull/1613)) moved recovery instructions into a reference that retained all 18 clients supported then. Later commit `4aa51bfe1997ef2df6e905ab2fb7bcd5fabfe16e` ([#2799](https://github.com/morluto/rea/pull/2799)) added the old 15-ID block back into the main skill. I inspected those diffs locally; the stale block remains at the reported baseline. ### Additional context This survives the fix for closed #1522 and is reported as a later regression. I searched open/closed issues, issue comments, and open/closed/merged PRs. Related open draft [#4451](https://github.com/morluto/rea/pull/4451), inspected at head `350112b1d1e97e6c69b2e1be90f695e798a6985e`, only adds `kimi` and `workbuddy` to the separate connection-and-recovery reference. It does not change the main skill's step-1 list. Open [#4367](https://github.com/morluto/rea/pull/4367) adds `bob` to that list while leaving all 11 omissions. Neither repairs this regression.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#4566
No description provided.