diff --git a/.github/agents/agentic-workflows.md b/.github/agents/agentic-workflows.md
index 8fad57cfd44..9a755c51883 100644
--- a/.github/agents/agentic-workflows.md
+++ b/.github/agents/agentic-workflows.md
@@ -5,40 +5,4 @@ description: Minimal file index for GitHub Agentic Workflows tasks in this repos
 
 # Agentic Workflows
 
-Read only the files you need:
-- `.github/skills/agentic-workflows/SKILL.md` — router skill for workflow create, debug, and upgrade tasks.
-Load `.github/aw/*.md` prompt files from `https://github.com/github/gh-aw/blob/main/.github/aw`:
-- `.github/aw/github-agentic-workflows.md` — GitHub Agentic Workflows.
-- `.github/aw/agentic-chat.md` — AI assistant for creating clear, actionable task descriptions for GitHub.
-- `.github/aw/asciicharts.md` — Guidance for generating compact ASCII charts that render cleanly in GitHub.
-- `.github/aw/campaign.md` — Campaign Workflows.
-- `.github/aw/charts.md` — Guidance for adding Python data visualization to agentic workflows — includes.
-- `.github/aw/cli-commands.md` — Complete reference for gh aw CLI commands and their MCP tool equivalents for.
-- `.github/aw/context.md` — use sanitized context text.
-- `.github/aw/create-agentic-workflow.md` — Create new agentic workflows using GitHub Agentic Workflows (gh-aw) extension.
-- `.github/aw/create-shared-agentic-workflow.md` — Create shared agentic workflow components that wrap MCP servers using GitHub.
-- `.github/aw/debug-agentic-workflow.md` — Debug and refine agentic workflows using gh-aw CLI tools.
-- `.github/aw/dependabot.md` — Instructions for fixing Dependabot PRs that update dependencies in generated.
-- `.github/aw/deployment-status.md` — Reference pattern for monitoring external deployment failures using the.
-- `.github/aw/experiments.md` — Guide for setting up A/B testing experiments in agentic workflows — syntax,.
-- `.github/aw/github-mcp-server.md` — GitHub MCP Server Instructions.
-- `.github/aw/llms.md` — Discover LLM API endpoints, ports, and available model names inside the AWF.
-- `.github/aw/memory.md` — Guide for choosing the right persistent memory strategy in agentic workflows —.
-- `.github/aw/messages.md` — Style guide for workflow status messages (all safe-outputs.messages template.
-- `.github/aw/network.md` — Network access configuration reference for gh-aw workflows — valid ecosystem.
-- `.github/aw/patterns.md` — Agentic workflow pattern router for selecting the best documented pattern and.
-- `.github/aw/pr-reviewer.md` — Guidance for implementing PR reviewer agentic workflows with ready_for_review.
-- `.github/aw/report.md` — Guidelines for creating agentic workflows that generate reports — output type.
-- `.github/aw/reuse.md` — Imports, shared components, import-schema, and gh aw add/update for GitHub.
-- `.github/aw/safe-outputs.md` — Complete safe-output operations reference for GitHub Agentic Workflows — all.
-- `.github/aw/serena-tool.md` — Serena Language Server Tool.
-- `.github/aw/skills.md` — Guide for leveraging skills (SKILL.md files) in agentic workflows — hint,.
-- `.github/aw/subagents.md` — Guide for defining inline sub-agents in workflow markdown files — syntax,.
-- `.github/aw/syntax.md` — Complete frontmatter schema reference for GitHub Agentic Workflows — all.
-- `.github/aw/test-coverage.md` — Guidance for creating agentic workflows that analyze test coverage — prefer.
-- `.github/aw/test-expression.md` — test expressions.
-- `.github/aw/token-optimization.md` — Guide for reducing token consumption in agentic workflows — DataOps, gh-proxy,.
-- `.github/aw/triggers.md` — Trigger patterns for GitHub Agentic Workflows — events, fuzzy scheduling, fork.
-- `.github/aw/update-agentic-workflow.md` — Update existing agentic workflows using GitHub Agentic Workflows (gh-aw).
-- `.github/aw/upgrade-agentic-workflows.md` — Upgrade agentic workflows to the latest version of gh-aw with automated.
-- `.github/aw/visual-regression.md` — Reference prompt for visual regression testing using playwright + cache-memory.
+Always load and follow `.github/skills/agentic-workflows/SKILL.md`.
diff --git a/.github/skills/agentic-workflows/SKILL.md b/.github/skills/agentic-workflows/SKILL.md
index 5b4fa78eaad..1f6b998d7d3 100644
--- a/.github/skills/agentic-workflows/SKILL.md
+++ b/.github/skills/agentic-workflows/SKILL.md
@@ -7,9 +7,41 @@ description: Route gh-aw workflow create/debug/upgrade requests to the right pro
 
 Use this skill when a user asks to create, update, debug, or upgrade GitHub Agentic Workflows.
 
-When the task involves OTEL, OTLP, traces, observability backends, or telemetry-driven analysis, also read `skills/otel-queries/SKILL.md` after loading the matching workflow prompt.
+Read only the files you need:
+Load these files from `github/gh-aw` (they are not available locally).
+- `.github/aw/agentic-chat.md`
+- `.github/aw/asciicharts.md`
+- `.github/aw/campaign.md`
+- `.github/aw/charts.md`
+- `.github/aw/cli-commands.md`
+- `.github/aw/context.md`
+- `.github/aw/create-agentic-workflow.md`
+- `.github/aw/create-shared-agentic-workflow.md`
+- `.github/aw/debug-agentic-workflow.md`
+- `.github/aw/dependabot.md`
+- `.github/aw/deployment-status.md`
+- `.github/aw/experiments.md`
+- `.github/aw/github-agentic-workflows.md`
+- `.github/aw/github-mcp-server.md`
+- `.github/aw/llms.md`
+- `.github/aw/memory.md`
+- `.github/aw/messages.md`
+- `.github/aw/network.md`
+- `.github/aw/patterns.md`
+- `.github/aw/pr-reviewer.md`
+- `.github/aw/report.md`
+- `.github/aw/reuse.md`
+- `.github/aw/safe-outputs.md`
+- `.github/aw/serena-tool.md`
+- `.github/aw/skills.md`
+- `.github/aw/subagents.md`
+- `.github/aw/syntax.md`
+- `.github/aw/test-coverage.md`
+- `.github/aw/test-expression.md`
+- `.github/aw/token-optimization.md`
+- `.github/aw/triggers.md`
+- `.github/aw/update-agentic-workflow.md`
+- `.github/aw/upgrade-agentic-workflows.md`
+- `.github/aw/visual-regression.md`
 
-1. If older notes mention `.github/agents/agentic-workflows.agent.md` or `.github/actions/agentic-workflows.agent.md`, treat them as references to `.github/skills/agentic-workflows/SKILL.md`.
-2. Select and read the matching prompt from `https://github.com/github/gh-aw/blob/main/.github/aw/*.md`.
-3. If the task is telemetry-driven, also read `skills/otel-queries/SKILL.md` and use its fixed query loop.
-4. Follow the loaded prompt directly and keep responses concise.
+When the task involves OTEL, OTLP, traces, observability backends, or telemetry-driven analysis, also read and follow `skills/otel-queries/SKILL.md` after loading the matching workflow prompt.
diff --git a/go.mod b/go.mod
index ea1d4b08374..f546a97c9f1 100644
--- a/go.mod
+++ b/go.mod
@@ -7,6 +7,7 @@ require (
 	charm.land/bubbletea/v2 v2.0.6
 	charm.land/huh/v2 v2.0.3
 	charm.land/lipgloss/v2 v2.0.3
+	github.com/charmbracelet/colorprofile v0.4.3
 	github.com/charmbracelet/x/exp/golden v0.0.0-20260527151214-009e6338d40d
 	github.com/cli/go-gh/v2 v2.13.0
 	github.com/creack/pty v1.1.24
@@ -43,7 +44,6 @@ require (
 	github.com/catppuccin/go v0.3.0 // indirect
 	github.com/ccojocar/zxcvbn-go v1.0.4 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
-	github.com/charmbracelet/colorprofile v0.4.3 // indirect
 	github.com/charmbracelet/harmonica v0.2.0 // indirect
 	github.com/charmbracelet/ultraviolet v0.0.0-20260416161146-9c68a866306c // indirect
 	github.com/charmbracelet/x/ansi v0.11.7 // indirect
diff --git a/pkg/cli/copilot_agents.go b/pkg/cli/copilot_agents.go
index ce1a99c53d4..1fdb136ceea 100644
--- a/pkg/cli/copilot_agents.go
+++ b/pkg/cli/copilot_agents.go
@@ -4,7 +4,6 @@ import (
 	"fmt"
 	"os"
 	"path/filepath"
-	"slices"
 	"sort"
 	"strings"
 
@@ -20,15 +19,19 @@ const agenticWorkflowsAgentHeader = "---\n" +
 	"name: Agentic Workflows\n" +
 	"description: Minimal file index for GitHub Agentic Workflows tasks in this repository.\n" +
 	"---\n\n" +
-	"# Agentic Workflows\n\n" +
-	"Read only the files you need:\n"
+	"# Agentic Workflows\n\n"
 
-const agenticWorkflowsPromptsGitHubBaseURL = "https://github.com/github/gh-aw/blob/main/.github/aw"
+const agenticWorkflowsSkillHeader = "---\n" +
+	"name: agentic-workflows\n" +
+	"description: Route gh-aw workflow create/debug/upgrade requests to the right prompts.\n" +
+	"---\n\n" +
+	"# Agentic Workflows Router\n\n"
 
-const maxAgenticWorkflowsPromptSummaryLength = 80
-const minPromptSummaryWordBoundary = (maxAgenticWorkflowsPromptSummaryLength * 4) / 5
+const agenticWorkflowsSkillIntro = "Use this skill when a user asks to create, update, debug, or upgrade GitHub Agentic Workflows.\n\nRead only the files you need:\nLoad these files from `github/gh-aw` (they are not available locally).\n"
+const agenticWorkflowsSkillOutro = "\nWhen the task involves OTEL, OTLP, traces, observability backends, or telemetry-driven analysis, also read and follow `skills/otel-queries/SKILL.md` after loading the matching workflow prompt.\n"
 
-// ensureAgenticWorkflowsDispatcher ensures that .github/skills/agentic-workflows/SKILL.md contains the dispatcher skill
+// ensureAgenticWorkflowsDispatcher ensures that .github/skills/agentic-workflows/SKILL.md
+// exists and contains the routing instructions loaded by the Agentic Workflows agent.
 func ensureAgenticWorkflowsDispatcher(verbose bool, skipInstructions bool) error {
 	copilotAgentsLog.Print("Ensuring agentic workflows dispatcher skill")
 
@@ -50,11 +53,10 @@ func ensureAgenticWorkflowsDispatcher(verbose bool, skipInstructions bool) error
 		return fmt.Errorf("failed to create .github/skills/agentic-workflows directory: %w", err)
 	}
 
-	// Download the skill file from GitHub
-	skillContent, err := downloadSkillFileFromGitHub(verbose)
+	skillContent, err := buildAgenticWorkflowsSkillContent(gitRoot)
 	if err != nil {
-		copilotAgentsLog.Printf("Failed to download skill file from GitHub: %v", err)
-		return fmt.Errorf("failed to download skill file from GitHub: %w", err)
+		copilotAgentsLog.Printf("Failed to build dispatcher skill: %v", err)
+		return fmt.Errorf("failed to build dispatcher skill: %w", err)
 	}
 
 	// Check if the file already exists and matches the downloaded content
@@ -149,191 +151,35 @@ func ensureAgenticWorkflowsAgent(verbose bool) error {
 }
 
 func buildAgenticWorkflowsAgentContent(gitRoot string) (string, error) {
-	lines := []string{
-		strings.TrimRight(agenticWorkflowsAgentHeader, "\n"),
-		formatAgenticWorkflowsAgentEntry(".github/skills/agentic-workflows/SKILL.md", "router skill for workflow create, debug, and upgrade tasks"),
-	}
-
-	promptPaths, err := filepath.Glob(filepath.Join(gitRoot, ".github", "aw", "*.md"))
-	if err != nil {
-		return "", fmt.Errorf("failed to list .github/aw prompts: %w", err)
-	}
-	if len(promptPaths) > 0 {
-		lines = append(lines, fmt.Sprintf("Load `.github/aw/*.md` prompt files from `%s`:", agenticWorkflowsPromptsGitHubBaseURL))
-	}
-
-	sort.Slice(promptPaths, func(i, j int) bool {
-		return filepath.Base(promptPaths[i]) < filepath.Base(promptPaths[j])
-	})
-	promptPaths = prioritizeAgenticWorkflowsPrompt(promptPaths, "github-agentic-workflows.md")
-
-	for _, promptPath := range promptPaths {
-		purpose, err := summarizeAgenticWorkflowPrompt(promptPath)
-		if err != nil {
-			return "", fmt.Errorf("failed to summarize prompt %s: %w", promptPath, err)
-		}
-
-		promptRoot := filepath.Clean(filepath.Join(gitRoot, ".github", "aw"))
-		cleanPromptPath := filepath.Clean(promptPath)
-		promptRootPrefix := promptRoot + string(os.PathSeparator)
-		if cleanPromptPath != promptRoot && !strings.HasPrefix(cleanPromptPath, promptRootPrefix) {
-			return "", fmt.Errorf("prompt path escapes .github/aw: %s", promptPath)
-		}
-
-		relPromptPath, err := filepath.Rel(promptRoot, cleanPromptPath)
-		if err != nil {
-			return "", fmt.Errorf("failed to compute relative prompt path for %s: %w", promptPath, err)
-		}
-		relPromptPath = filepath.ToSlash(relPromptPath)
-		if relPromptPath == ".." || strings.HasPrefix(relPromptPath, "../") {
-			return "", fmt.Errorf("prompt path escapes .github/aw: %s", promptPath)
-		}
-
-		lines = append(lines, formatAgenticWorkflowsAgentEntry(filepath.ToSlash(filepath.Join(".github", "aw", relPromptPath)), purpose))
-	}
-
-	return strings.Join(lines, "\n") + "\n", nil
-}
-
-func prioritizeAgenticWorkflowsPrompt(paths []string, name string) []string {
-	for i, path := range paths {
-		if filepath.Base(path) == name {
-			return append([]string{path}, slices.Delete(paths, i, i+1)...)
-		}
-	}
-	return paths
-}
-
-func formatAgenticWorkflowsAgentEntry(path, purpose string) string {
-	return fmt.Sprintf("- `%s` — %s.", path, strings.TrimSuffix(purpose, "."))
+	return agenticWorkflowsAgentHeader + "Always load and follow `.github/skills/agentic-workflows/SKILL.md`.\n", nil
 }
 
-func summarizeAgenticWorkflowPrompt(path string) (string, error) {
-	content, err := os.ReadFile(path)
+func buildAgenticWorkflowsSkillContent(gitRoot string) (string, error) {
+	awRoot := filepath.Join(gitRoot, ".github", "aw")
+	entries, err := os.ReadDir(awRoot)
 	if err != nil {
-		return "", err
-	}
-
-	summary := extractPromptSummary(string(content))
-	if summary == "" {
-		summary = humanizePromptFilename(filepath.Base(path))
+		return "", fmt.Errorf("failed to read .github/aw directory for skill generation (%s): %w", awRoot, err)
 	}
 
-	return strings.TrimSuffix(summary, "."), nil
-}
-
-func extractPromptSummary(content string) string {
-	lines := strings.Split(content, "\n")
-	if len(lines) == 0 {
-		return ""
-	}
-
-	start := 0
-	description := ""
-	if strings.TrimSpace(lines[0]) == "---" {
-		start = 1
-		for ; start < len(lines); start++ {
-			line := strings.TrimSpace(lines[start])
-			if line == "---" {
-				start++
-				break
-			}
-			if value, ok := strings.CutPrefix(line, "description:"); ok {
-				description = cleanPromptSummary(strings.TrimSpace(value))
-			}
-		}
-	}
-	// Prefer frontmatter description over heading text when available.
-	if summary := normalizePromptSummary(description); summary != "" {
-		return summary
-	}
-
-	for ; start < len(lines); start++ {
-		line := strings.TrimSpace(lines[start])
-		if line == "" {
+	awFiles := make([]string, 0, len(entries))
+	for _, entry := range entries {
+		if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".md") {
 			continue
 		}
-		if value, ok := strings.CutPrefix(line, "# "); ok {
-			return normalizePromptSummary(cleanPromptSummary(strings.TrimSpace(value)))
-		}
-		break
+		awFiles = append(awFiles, entry.Name())
 	}
+	sort.Strings(awFiles)
 
-	return ""
-}
-
-func normalizePromptSummary(summary string) string {
-	if summary == "" {
-		return ""
+	if len(awFiles) == 0 {
+		return "", fmt.Errorf("no markdown files found in %s - ensure .github/aw contains workflow documentation files", awRoot)
 	}
-	if strings.ContainsAny(summary, "*`#") {
-		return ""
-	}
-
-	runes := []rune(summary)
-	if len(runes) > maxAgenticWorkflowsPromptSummaryLength {
-		summary = strings.TrimSpace(string(runes[:maxAgenticWorkflowsPromptSummaryLength]))
-		if cut := strings.LastIndex(summary, " "); cut > minPromptSummaryWordBoundary {
-			summary = summary[:cut]
-		}
-	}
-
-	return strings.TrimSuffix(strings.TrimSpace(summary), ".")
-}
 
-func cleanPromptSummary(summary string) string {
-	summary = strings.Trim(summary, `"'`)
-	summary = strings.TrimSpace(summary)
-	summary = strings.TrimPrefix(summary, "RECOMMENDED: ")
-	summary = strings.TrimPrefix(summary, "✅ GOOD - ")
-	summary = strings.TrimPrefix(summary, "✅ ")
-	summary = strings.TrimSpace(summary)
-
-	if idx := strings.Index(summary, " - "); idx > 0 {
-		summary = summary[:idx]
-	}
-
-	return summary
-}
-
-func humanizePromptFilename(name string) string {
-	base := strings.TrimSuffix(name, filepath.Ext(name))
-	switch base {
-	case "agentic-chat":
-		return "draft task descriptions"
-	case "asciicharts":
-		return "render ASCII charts"
-	case "cli-commands":
-		return "reference gh aw CLI commands"
-	case "context":
-		return "use sanitized context text"
-	case "github-agentic-workflows":
-		return "reference workflow instructions"
-	case "github-mcp-server":
-		return "use the GitHub MCP server"
-	case "llms":
-		return "discover LLM API endpoints"
-	case "pr-reviewer":
-		return "design PR reviewer workflows"
-	case "safe-outputs":
-		return "configure safe outputs"
-	case "serena-tool":
-		return "use the Serena tool"
-	case "test-coverage":
-		return "add test coverage guidance"
-	case "test-expression":
-		return "test expressions"
-	case "token-optimization":
-		return "reduce token usage"
-	case "visual-regression":
-		return "run visual regression tests"
+	var fileList strings.Builder
+	for _, file := range awFiles {
+		fmt.Fprintf(&fileList, "- `.github/aw/%s`\n", file)
 	}
 
-	summary := strings.ReplaceAll(base, "-", " ")
-	if summary == "" {
-		return ""
-	}
-	return strings.ToUpper(summary[:1]) + summary[1:]
+	return agenticWorkflowsSkillHeader + agenticWorkflowsSkillIntro + fileList.String() + agenticWorkflowsSkillOutro, nil
 }
 
 // cleanupOldPromptFile removes an old prompt file from .github/prompts/ if it exists
diff --git a/pkg/cli/copilot_agents_test.go b/pkg/cli/copilot_agents_test.go
index 3578cf9bd43..8bb39495d33 100644
--- a/pkg/cli/copilot_agents_test.go
+++ b/pkg/cli/copilot_agents_test.go
@@ -279,98 +279,87 @@ func TestDeleteOldTemplateFiles(t *testing.T) {
 func TestBuildAgenticWorkflowsAgentContent(t *testing.T) {
 	tempDir := testutil.TempDir(t, "test-*")
 
-	if err := os.MkdirAll(filepath.Join(tempDir, ".github", "aw"), 0755); err != nil {
-		t.Fatalf("Failed to create .github/aw directory: %v", err)
-	}
-
-	debugPrompt := "---\n" +
-		"description: Debug and refine agentic workflows using gh-aw CLI tools - analyze logs and improve workflow performance.\n" +
-		"---\n"
-	if err := os.WriteFile(filepath.Join(tempDir, ".github", "aw", "debug-agentic-workflow.md"), []byte(debugPrompt), 0644); err != nil {
-		t.Fatalf("Failed to write debug prompt: %v", err)
-	}
-
-	agenticChatPrompt := "---\n" +
-		"description: AI assistant for creating clear, detailed task descriptions for GitHub Copilot coding agents with embedded workflow recommendations.\n" +
-		"---\n\n" +
-		"# Agentic Task Description Assistant\n"
-	if err := os.WriteFile(filepath.Join(tempDir, ".github", "aw", "agentic-chat.md"), []byte(agenticChatPrompt), 0644); err != nil {
-		t.Fatalf("Failed to write agentic-chat prompt: %v", err)
-	}
-
-	if err := os.WriteFile(filepath.Join(tempDir, ".github", "aw", "github-agentic-workflows.md"), []byte("# GitHub Agentic Workflows\n"), 0644); err != nil {
-		t.Fatalf("Failed to write github-agentic-workflows prompt: %v", err)
+	content, err := buildAgenticWorkflowsAgentContent(tempDir)
+	if err != nil {
+		t.Fatalf("buildAgenticWorkflowsAgentContent() returned error: %v", err)
 	}
 
-	if err := os.WriteFile(filepath.Join(tempDir, ".github", "aw", "triggers.md"), []byte("# ✅ GOOD - Weekday schedule avoids Monday wall of work\n"), 0644); err != nil {
-		t.Fatalf("Failed to write triggers prompt: %v", err)
+	expected := agenticWorkflowsAgentHeader + "Always load and follow `.github/skills/agentic-workflows/SKILL.md`.\n"
+	if content != expected {
+		t.Fatalf("Expected exact agent content:\n%s\ngot:\n%s", expected, content)
 	}
+}
 
-	if err := os.WriteFile(filepath.Join(tempDir, ".github", "aw", "compat.json"), []byte("{}"), 0644); err != nil {
-		t.Fatalf("Failed to write compat.json: %v", err)
+func TestCheckedInAgenticWorkflowsAgentMatchesGeneratedContent(t *testing.T) {
+	_, file, _, ok := runtime.Caller(0)
+	if !ok {
+		t.Fatal("Failed to locate test file")
 	}
 
-	content, err := buildAgenticWorkflowsAgentContent(tempDir)
+	gitRoot := filepath.Clean(filepath.Join(filepath.Dir(file), "..", ".."))
+	expected, err := buildAgenticWorkflowsAgentContent(gitRoot)
 	if err != nil {
 		t.Fatalf("buildAgenticWorkflowsAgentContent() returned error: %v", err)
 	}
 
-	if !strings.Contains(content, "`.github/skills/agentic-workflows/SKILL.md`") {
-		t.Fatal("Expected agent content to include the dispatcher skill path")
-	}
-
-	if !strings.Contains(content, "Load `.github/aw/*.md` prompt files from `https://github.com/github/gh-aw/blob/main/.github/aw`:") {
-		t.Fatalf("Expected agent content to include shared prompt base URL guidance, got:\n%s", content)
-	}
-
-	if !strings.Contains(content, "`.github/aw/debug-agentic-workflow.md` — Debug and refine agentic workflows using gh-aw CLI tools.") {
-		t.Fatalf("Expected agent content to include concise debug prompt summary, got:\n%s", content)
+	actual, err := os.ReadFile(filepath.Join(gitRoot, ".github", "agents", "agentic-workflows.md"))
+	if err != nil {
+		t.Fatalf("Failed to read checked-in agent file: %v", err)
 	}
 
-	if !strings.Contains(content, "`.github/aw/agentic-chat.md` — AI assistant for creating clear, detailed task descriptions for GitHub Copilot.") {
-		t.Fatalf("Expected frontmatter description summaries for prompts, got:\n%s", content)
+	if strings.TrimSpace(string(actual)) != strings.TrimSpace(expected) {
+		t.Fatalf("Checked-in agent file is out of sync with generated content\nexpected:\n%s\nactual:\n%s", expected, string(actual))
 	}
+}
 
-	if !strings.Contains(content, "`.github/aw/triggers.md` — Weekday schedule avoids Monday wall of work.") {
-		t.Fatalf("Expected agent content to include cleaned triggers prompt summary, got:\n%s", content)
+func TestBuildAgenticWorkflowsSkillContent(t *testing.T) {
+	tempDir := testutil.TempDir(t, "test-*")
+	awDir := filepath.Join(tempDir, ".github", "aw")
+	if err := os.MkdirAll(awDir, 0o755); err != nil {
+		t.Fatalf("Failed to create .github/aw directory: %v", err)
 	}
 
-	if strings.Contains(content, "compat.json") {
-		t.Fatalf("Expected non-markdown files to be excluded from agent content, got:\n%s", content)
+	for _, name := range []string{"workflow-z.md", "workflow-a.md", "ignore.txt"} {
+		if err := os.WriteFile(filepath.Join(awDir, name), []byte("# test"), 0o644); err != nil {
+			t.Fatalf("Failed to create %s: %v", name, err)
+		}
 	}
 
-	if !strings.Contains(content, "`.github/skills/agentic-workflows/SKILL.md` — router skill for workflow create, debug, and upgrade tasks.\nLoad `.github/aw/*.md` prompt files from `https://github.com/github/gh-aw/blob/main/.github/aw`:\n- `.github/aw/github-agentic-workflows.md` — GitHub Agentic Workflows.") {
-		t.Fatalf("Expected github-agentic-workflows.md to be the first prompt entry after the dispatcher skill, got:\n%s", content)
+	content, err := buildAgenticWorkflowsSkillContent(tempDir)
+	if err != nil {
+		t.Fatalf("buildAgenticWorkflowsSkillContent() returned error: %v", err)
 	}
 
-	githubWorkflowsIndex := strings.Index(content, "`.github/aw/github-agentic-workflows.md`")
-	debugPromptIndex := strings.Index(content, "`.github/aw/debug-agentic-workflow.md`")
-	if githubWorkflowsIndex == -1 || debugPromptIndex == -1 {
-		t.Fatalf("Expected agent content to include prioritized workflow instructions and debug prompt, got:\n%s", content)
+	expected := agenticWorkflowsSkillHeader + agenticWorkflowsSkillIntro +
+		"- `.github/aw/workflow-a.md`\n" +
+		"- `.github/aw/workflow-z.md`\n" +
+		agenticWorkflowsSkillOutro
+	if content != expected {
+		t.Fatalf("Expected exact skill content:\n%s\ngot:\n%s", expected, content)
 	}
-	if githubWorkflowsIndex > debugPromptIndex {
-		t.Fatalf("Expected github-agentic-workflows.md to appear before other prompts, got:\n%s", content)
+	if strings.Contains(content, "ignore.txt") {
+		t.Fatalf("expected non-markdown files to be excluded from generated skill content:\n%s", content)
 	}
 }
 
-func TestCheckedInAgenticWorkflowsAgentMatchesGeneratedContent(t *testing.T) {
+func TestCheckedInAgenticWorkflowsSkillMatchesGeneratedContent(t *testing.T) {
 	_, file, _, ok := runtime.Caller(0)
 	if !ok {
 		t.Fatal("Failed to locate test file")
 	}
 
 	gitRoot := filepath.Clean(filepath.Join(filepath.Dir(file), "..", ".."))
-	expected, err := buildAgenticWorkflowsAgentContent(gitRoot)
+	expected, err := buildAgenticWorkflowsSkillContent(gitRoot)
 	if err != nil {
-		t.Fatalf("buildAgenticWorkflowsAgentContent() returned error: %v", err)
+		t.Fatalf("buildAgenticWorkflowsSkillContent() returned error: %v", err)
 	}
 
-	actual, err := os.ReadFile(filepath.Join(gitRoot, ".github", "agents", "agentic-workflows.md"))
+	actual, err := os.ReadFile(filepath.Join(gitRoot, ".github", "skills", "agentic-workflows", "SKILL.md"))
 	if err != nil {
-		t.Fatalf("Failed to read checked-in agent file: %v", err)
+		t.Fatalf("Failed to read checked-in skill file: %v", err)
 	}
 
 	if strings.TrimSpace(string(actual)) != strings.TrimSpace(expected) {
-		t.Fatalf("Checked-in agent file is out of sync with generated content\nexpected:\n%s\nactual:\n%s", expected, string(actual))
+		t.Fatalf("Checked-in skill file is out of sync with generated content\nexpected:\n%s\nactual:\n%s", expected, string(actual))
 	}
 }
