From 20cc1731f423a489e50317766c98b3edbffe4041 Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Wed, 25 Mar 2026 10:39:27 -0700 Subject: [PATCH] perf(prompt_builder): avoid redundant file re-read for skill conditions (#2992) build_skills_system_prompt() was calling _read_skill_conditions() which re-read each SKILL.md file to extract conditional activation fields. The frontmatter was already parsed by _parse_skill_file() earlier in the same loop. Extract conditions inline from the existing frontmatter dict instead, saving one file read per skill (~80+ on a typical setup). Salvaged from PR #2827 by InB4DevOps. --- agent/prompt_builder.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/agent/prompt_builder.py b/agent/prompt_builder.py index d6c4c6a6a..7fe8f3ce6 100644 --- a/agent/prompt_builder.py +++ b/agent/prompt_builder.py @@ -354,8 +354,15 @@ def build_skills_system_prompt( fm_name = frontmatter.get("name", skill_name) if fm_name in disabled or skill_name in disabled: continue - # Skip skills whose conditional activation rules exclude them - conditions = _read_skill_conditions(skill_file) + # Extract conditions inline from already-parsed frontmatter + # (avoids redundant file re-read that _read_skill_conditions would do) + hermes_meta = frontmatter.get("metadata", {}).get("hermes", {}) + conditions = { + "fallback_for_toolsets": hermes_meta.get("fallback_for_toolsets", []), + "requires_toolsets": hermes_meta.get("requires_toolsets", []), + "fallback_for_tools": hermes_meta.get("fallback_for_tools", []), + "requires_tools": hermes_meta.get("requires_tools", []), + } if not _skill_should_show(conditions, available_tools, available_toolsets): continue skills_by_category.setdefault(category, []).append((skill_name, desc))