From e7f25aaf6c45ebc4bc37a6b2b146aced5ff76e04 Mon Sep 17 00:00:00 2001 From: John Lybeck Date: Thu, 10 Sep 2026 09:15:42 +0200 Subject: [PATCH] Say where the extra skills actually came from The routing report told every reader that skills beyond the room came from the runner's own config and to set ANTHROPIC_API_KEY so the run could use an isolated config dir. On a run that already had the key set and recorded isolated_config_dir true, sixteen extras were still reported, none of them present in the runner's ~/.claude/skills: they ship with the agent CLI, which no config dir excludes. So the warning named a cause it had not checked and prescribed a fix that was already in place. Isolation is already recorded in the report metadata, so branch on it. When the run was isolated the runner's own skills are out of the session by construction and what remains ships with the CLI, which is worth saying plainly along with the fact that nothing removes it. When it was not, the original guidance still holds and is unchanged. Signed-off-by: John Lybeck --- skillscope/routing.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/skillscope/routing.py b/skillscope/routing.py index fbaac65..28a9c2f 100644 --- a/skillscope/routing.py +++ b/skillscope/routing.py @@ -835,13 +835,28 @@ def render_markdown(summary: dict) -> str: shown = ", ".join(f"`{name}`" for name in extras[:12]) if len(extras) > 12: shown += f", and {len(extras) - 12} more" + # An isolated config dir has already taken the runner's own skills out + # of the session, so whatever still shows up ships with the agent CLI + # and no config change removes it. Naming the wrong source sends the + # reader after a fix they have already applied. + if meta.get("isolated_config_dir"): + source = ( + "This run already used an isolated config dir, so they ship with " + "the agent CLI rather than coming from the runner's own config, " + "and no config change removes them. Read the scores below with " + "them in the room." + ) + else: + source = ( + "They come from the runner's own config (usually " + "`~/.claude/skills`). Set `ANTHROPIC_API_KEY` so the run can use " + "an isolated config dir, or remove them from the runner." + ) lines += [ "", f"> **Warning:** {len(extras)} skill(s) beyond the routing set were " - f"registered for these sessions ({shown}). They come from the " - f"runner's own config (usually `~/.claude/skills`) and compete for " - f"every prompt, so the room measured here is not the one that was " - f"asked for. Set `ANTHROPIC_API_KEY` so the run can use an isolated " - f"config dir, or remove them from the runner.", + f"registered for these sessions ({shown}) and competed for every " + f"prompt, so the room measured here is not the one that was asked " + f"for. {source}", ] return "\n".join(lines) + "\n"