Conversation
This commit updates the README.md to include a new section on the source of truth for agents and skills, clarifying the synchronization process between `.steering/` and mirrored directories. It also revises the agent documentation to standardize naming conventions and improve descriptions for the `research-skill`, `research-mcp`, and `laravel-package` agents. Additionally, new skills and agents have been added, including `idea`, `sync-agents`, and `sync-skills`, along with their respective documentation. These changes aim to improve usability and consistency across the project.
WalkthroughThis PR centralizes Changes
Sequence Diagram(s)sequenceDiagram
participant Dev as Developer
participant Script as Regenerator (scripts/regenerate-ide-mirrors.py)
participant Boost as Boost Sync (scripts/sync-boost-ai-skills.py)
participant Mirrors as IDE Mirrors (.github/.cursor/.claude)
participant CI as Verify-steering-sync
Dev->>Boost: run sync-boost (optional) → generate .steering/skills/*
Dev->>Script: run regenerate-ide-mirrors.py (or CI triggers)
Script->>Script: expand ![[...]] embeds, extract sections, apply per-target rules
Script->>Mirrors: write generated files (.github/.cursor/.claude)
CI->>Script: workflow runs script in runner
Script->>CI: produces mirrors
CI->>CI: git diff --exit-code
CI-->>Dev: pass or fail (non-zero if diffs)
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8f78007bf0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| for f in sorted(agents_dir.iterdir()): | ||
| if not f.is_file() or f.name == "README.md": | ||
| continue | ||
| raw = f.read_text(encoding="utf-8") | ||
| if f.name == "research-skill.agent.md": |
There was a problem hiding this comment.
Prune deleted agent mirrors during regeneration
This loop only rewrites files that currently exist in .steering/agents, but it never removes mirror files that no longer have a source. When a steering agent is deleted, stale copies remain in .github/agents, .cursor/agents, and .claude/agents, and the verify workflow can still report success because regeneration leaves no new diff. That breaks the repository's stated guarantee that mirror directories reflect .steering exactly.
Useful? React with 👍 / 👎.
| skills_root = root / ".steering" / "skills" | ||
| for skill_dir in sorted(skills_root.iterdir()): | ||
| if not skill_dir.is_dir(): | ||
| continue | ||
| sk = skill_dir / "SKILL.md" |
There was a problem hiding this comment.
Remove obsolete mirrored skills when source skills disappear
The skills sync iterates only existing .steering/skills/*/SKILL.md entries and writes outputs, but it never deletes mirror skill directories that were removed upstream. If a steering skill is dropped or renamed, stale SKILL.md files under .github/.cursor/.claude persist indefinitely while CI still passes, so consumers can keep receiving outdated skill instructions that are no longer present in the source tree.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Pull request overview
Adds a .steering/ “source of truth” workflow for authoring agents/skills and mirroring them into .github/, .cursor/, and .claude/, along with new research agents/templates and supporting documentation/notes.
Changes:
- Introduces new research agents (
idea,research-skill,research-mcp, updatedlaravel-package) and note templates under.steering/. - Adds/updates packaged skills (including vendor-synced ones) plus steering docs describing replication rules.
- Adds CI (
Verify steering sync) to enforce mirror consistency viascripts/regenerate-ide-mirrors.py.
Reviewed changes
Copilot reviewed 122 out of 125 changed files in this pull request and generated 12 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Documents .steering as source of truth; updates agent list/layout |
| mcps/README.md | Removes legacy MCP notes README |
| .steering/README.md | Defines steering layout + replication rules |
| .steering/mcp.json | Adds sample MCP server config |
| .steering/templates/skill.md | Updates canonical skill spec template formatting |
| .steering/templates/laravel-package.md | Adds canonical Laravel package note template |
| .steering/templates/idea.md | Adds idea note template |
| .steering/templates/AGENTS.md | Adds repo-wide agent guidance template |
| .steering/templates/agent.md | Adds shared “Core Principles” template |
| .steering/agents/idea.agent.md | Adds /idea agent definition |
| .steering/agents/laravel-package.agent.md | Updates Laravel package research agent definition |
| .steering/agents/research-skill.agent.md | Adds skill research agent definition |
| .steering/agents/research-mcp.agent.md | Adds MCP research agent definition |
| .steering/agents/sync-agents.md | Documents agent mirroring rules |
| .steering/agents/sync-skills.md | Documents skills + templates mirroring rules |
| .steering/ideas/README.md | Adds naming/usage guidance for idea notes |
| .steering/skills/README.md | Documents packaged skills vs research notes |
| .steering/skills/SOURCES.md | Tracks upstream skill sources + sync commands |
| .steering/skills/.boost-ai-sync.json | Records last Laravel Boost sync commit |
| .steering/skills/skill-research/SKILL.md | Adds packaged “skill-research” skill |
| .steering/skills/sync-agents/SKILL.md | Adds packaged “sync-agents” skill |
| .steering/skills/sync-agents/tdd.md | Adds TDD playbook for Laravel/Pest |
| .steering/skills/sync-skills/SKILL.md | Adds packaged “sync-skills” skill |
| .steering/skills/laravel-research/SKILL.md | Adds packaged “laravel-research” skill |
| .steering/skills/laravel-pint/SKILL.md | Adds packaged “laravel-pint” skill |
| .steering/skills/laravel-sail/SKILL.md | Adds packaged “laravel-sail” skill |
| .steering/skills/phpunit-laravel/SKILL.md | Adds packaged “phpunit-laravel” skill |
| .steering/skills/tailwindcss-development/SKILL.md | Adds packaged Tailwind skill (Boost-synced) |
| .steering/skills/fluxui-free-development/SKILL.md | Adds packaged Flux UI (free) skill (Boost-synced) |
| .steering/skills/fluxui-pro-development/SKILL.md | Adds packaged Flux UI (pro) skill (Boost-synced) |
| .steering/laravel-packages/README.md | Removes legacy Laravel package notes README |
| .steering/laravel-packages/pestphp__pest.md | Adds Laravel package research note |
| .steering/laravel-packages/livewire__flux.md | Adds Laravel package research note |
| .steering/laravel-packages/laravel__pint.md | Adds Laravel package research note |
| .steering/laravel-packages/larastan__larastan.md | Adds Laravel package research note |
| .steering/mcps/upstash__context7.md | Adds MCP research note (Context7) |
| .steering/mcps/deepwiki__mcp.md | Adds MCP research note (DeepWiki MCP) |
| .steering/github-copilot/Agents.md | Adds Copilot custom agents research note |
| .steering/github-copilot/Agent MCP.md | Adds Copilot MCP research note |
| .steering/github-copilot/Environment.md | Adds Copilot environment customization note |
| .steering/github-copilot/Memories.md | Adds Copilot memory research note |
| .steering/github-copilot/Settings.md | Adds Copilot MCP settings note |
| .steering/github-copilot/Skills.md | Adds Copilot skills research note |
| .steering/github-copilot/SDK.md | Adds Copilot SDK skill research note |
| .steering/github-copilot/plugins/Deep Wiki.md | Adds Deep Wiki plugin research note |
| .steering/cursor/Plugins.md | Adds Cursor plugins research note |
| .github/workflows/verify-steering-sync.yml | Adds CI to verify mirrors match .steering |
| .github/workflows/sync-skill-template.yml | Removes legacy workflow-based template copying |
| .github/agents/research-skill.agent.md | Adds mirrored agent definition |
| .github/agents/laravel-package.agent.md | Updates mirrored agent definition |
| .github/agents/sync-agents.md | Adds mirrored maintainer agent |
| .github/agents/sync-skills.md | Adds mirrored maintainer agent |
| .github/skills/skill-research/SKILL.md | Updates mirrored skill-research skill |
| .github/skills/skill-research/skill-template.md | Updates mirrored skill template |
| .github/skills/laravel-research/SKILL.md | Updates mirrored laravel-research skill |
| .github/skills/laravel-research/laravel-package-template.md | Removes legacy template mirror |
| .github/skills/agentic-programming/SKILL.md | Updates mirrored repo setup skill |
| .github/skills/sync-agents/SKILL.md | Adds mirrored sync-agents skill |
| .github/skills/sync-skills/SKILL.md | Adds mirrored sync-skills skill |
| .github/skills/tailwindcss-development/SKILL.md | Adds mirrored Tailwind skill |
| .github/skills/phpunit-laravel/SKILL.md | Adds mirrored PHPUnit skill |
| .github/skills/laravel-sail/SKILL.md | Adds mirrored Sail skill |
| .github/skills/laravel-pint/SKILL.md | Adds mirrored Pint skill |
| .github/skills/fluxui-free-development/SKILL.md | Adds mirrored Flux UI (free) skill |
| .github/skills/fluxui-pro-development/SKILL.md | Adds mirrored Flux UI (pro) skill |
| .cursor/agents/research-skill.agent.md | Adds mirrored agent definition |
| .cursor/agents/research-mcp.agent.md | Adds mirrored agent definition |
| .cursor/agents/laravel-package.agent.md | Adds mirrored agent definition |
| .cursor/agents/sync-agents.md | Adds mirrored maintainer agent |
| .cursor/agents/sync-skills.md | Adds mirrored maintainer agent |
| .cursor/skills/skill-template/SKILL.md | Adds mirrored skill template |
| .cursor/skills/skill-research/SKILL.md | Adds mirrored skill-research skill |
| .cursor/skills/laravel-research/SKILL.md | Adds mirrored laravel-research skill |
| .cursor/skills/agentic-programming/SKILL.md | Adds mirrored repo setup skill |
| .cursor/skills/sync-agents/SKILL.md | Adds mirrored sync-agents skill |
| .cursor/skills/sync-skills/SKILL.md | Adds mirrored sync-skills skill |
| .cursor/skills/tailwindcss-development/SKILL.md | Adds mirrored Tailwind skill |
| .cursor/skills/phpunit-laravel/SKILL.md | Adds mirrored PHPUnit skill |
| .cursor/skills/laravel-sail/SKILL.md | Adds mirrored Sail skill |
| .cursor/skills/laravel-pint/SKILL.md | Adds mirrored Pint skill |
| .cursor/skills/fluxui-free-development/SKILL.md | Adds mirrored Flux UI (free) skill |
| .cursor/skills/fluxui-pro-development/SKILL.md | Adds mirrored Flux UI (pro) skill |
| .claude/agents/research-skill.agent.md | Adds mirrored agent definition |
| .claude/agents/research-mcp.agent.md | Adds mirrored agent definition |
| .claude/agents/laravel-package.agent.md | Adds mirrored agent definition |
| .claude/agents/sync-agents.md | Adds mirrored maintainer agent |
| .claude/agents/sync-skills.md | Adds mirrored maintainer agent |
| .claude/skills/skill-template/SKILL.md | Adds mirrored skill template |
| .claude/skills/skill-research/SKILL.md | Adds mirrored skill-research skill |
| .claude/skills/laravel-research/SKILL.md | Adds mirrored laravel-research skill |
| .claude/skills/agentic-programming/SKILL.md | Adds mirrored repo setup skill |
| .claude/skills/sync-agents/SKILL.md | Adds mirrored sync-agents skill |
| .claude/skills/sync-skills/SKILL.md | Adds mirrored sync-skills skill |
| .claude/skills/tailwindcss-development/SKILL.md | Adds mirrored Tailwind skill |
| .claude/skills/phpunit-laravel/SKILL.md | Adds mirrored PHPUnit skill |
| .claude/skills/laravel-sail/SKILL.md | Adds mirrored Sail skill |
| .claude/skills/laravel-pint/SKILL.md | Adds mirrored Pint skill |
| .claude/skills/fluxui-free-development/SKILL.md | Adds mirrored Flux UI (free) skill |
| .claude/skills/fluxui-pro-development/SKILL.md | Adds mirrored Flux UI (pro) skill |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
|
||
| ## Replication rules | ||
|
|
||
| 1. **Build** — In each agent file’s **body** (after opening YAML), expand **`![[templates/...]]`** by default. For **`research-skill.agent.md`**, also expand **`![[github-copilot/...]]`** only in the **`.cursor/agents/`** output; **`.github`** / **`.claude`** replace those embeds with a pointer to **`.steering/github-copilot/Skills.md`**. With `#Heading`, inline the `## Heading` section only. Leave other `![[...]]` as-is. |
There was a problem hiding this comment.
The literal ![[templates/...]] embed example is being interpreted by the mirror builder and expanded into an HTML "missing" comment in the IDE copies (see .github/.cursor/.claude mirrors). To keep the docs readable and avoid accidental embed expansion, rephrase this to avoid the exact ![[...]] syntax (or escape it), then re-run scripts/regenerate-ide-mirrors.py so mirrors are clean.
.github/skills/sync-agents/SKILL.md
Outdated
| 1. **Build** — In each agent file’s **body** (after opening YAML), expand **`<!-- missing: .steering/templates/....md --> | ||
| `** by default. For **`research-skill.agent.md`**, also expand **`![[github-copilot/...]]`** only in the **`.cursor/agents/`** output; **`.github`** / **`.claude`** replace those embeds with a pointer to **`.steering/github-copilot/Skills.md`**. With `#Heading`, inline the `## Heading` section only. Leave other `![[...]]` as-is. |
There was a problem hiding this comment.
This file contains an embedded <!-- missing: .steering/templates/....md --> artifact (and a line break inside the backticks), which makes the replication rules hard to read. This appears to come from expanding a placeholder ![[templates/...]] example during mirroring; adjust the source text in .steering/skills/sync-agents/SKILL.md to avoid literal embed syntax and regenerate mirrors.
.cursor/skills/sync-agents/SKILL.md
Outdated
| 1. **Build** — In each agent file’s **body** (after opening YAML), expand **`<!-- missing: .steering/templates/....md --> | ||
| `** by default. For **`research-skill.agent.md`**, also expand **`![[github-copilot/...]]`** only in the **`.cursor/agents/`** output; **`.github`** / **`.claude`** replace those embeds with a pointer to **`.steering/github-copilot/Skills.md`**. With `#Heading`, inline the `## Heading` section only. Leave other `![[...]]` as-is. |
There was a problem hiding this comment.
This file contains an embedded <!-- missing: .steering/templates/....md --> artifact (and a line break inside the backticks), which makes the replication rules hard to read. This appears to come from expanding a placeholder ![[templates/...]] example during mirroring; adjust the source text in .steering/skills/sync-agents/SKILL.md to avoid literal embed syntax and regenerate mirrors.
.claude/skills/sync-agents/SKILL.md
Outdated
| 1. **Build** — In each agent file’s **body** (after opening YAML), expand **`<!-- missing: .steering/templates/....md --> | ||
| `** by default. For **`research-skill.agent.md`**, also expand **`![[github-copilot/...]]`** only in the **`.cursor/agents/`** output; **`.github`** / **`.claude`** replace those embeds with a pointer to **`.steering/github-copilot/Skills.md`**. With `#Heading`, inline the `## Heading` section only. Leave other `![[...]]` as-is. |
There was a problem hiding this comment.
This file contains an embedded <!-- missing: .steering/templates/....md --> artifact (and a line break inside the backticks), which makes the replication rules hard to read. This appears to come from expanding a placeholder ![[templates/...]] example during mirroring; adjust the source text in .steering/skills/sync-agents/SKILL.md to avoid literal embed syntax and regenerate mirrors.
| 1. **Build** — In each agent file’s **body** (after opening YAML), expand **`<!-- missing: .steering/templates/....md --> | |
| `** by default. For **`research-skill.agent.md`**, also expand **`![[github-copilot/...]]`** only in the **`.cursor/agents/`** output; **`.github`** / **`.claude`** replace those embeds with a pointer to **`.steering/github-copilot/Skills.md`**. With `#Heading`, inline the `## Heading` section only. Leave other `![[...]]` as-is. | |
| 1. **Build** — In each agent file’s **body** (after opening YAML), expand **`![[templates/...]]`** by default. For **`research-skill.agent.md`**, also expand **`![[github-copilot/...]]`** only in the **`.cursor/agents/`** output; **`.github`** / **`.claude`** replace those embeds with a pointer to **`.steering/github-copilot/Skills.md`**. With `#Heading`, inline the `## Heading` section only. Leave other `![[...]]` as-is. |
| --- | ||
| title: | ||
| org: | ||
| package: | ||
| github_url: | ||
| docs_url: | ||
| composer_require: composer require | ||
| author: | ||
| latest_release: | ||
| release_date: | ||
| packagist_url: | ||
| stars: | ||
| forks: | ||
| tags: [laravel, packages] | ||
| announce_date: '' | ||
| laravel_news_url: '' |
There was a problem hiding this comment.
downloads_30d is referenced in the Field-to-Source Mapping, but it's missing from the frontmatter keys. Add a downloads_30d: field (or remove it from the mapping) so the template/spec is self-consistent and agents can fill all documented fields.
| who_can_use: Copilot Pro/Pro+/Business/Enterprise | ||
| tags: [github-copilot, agents, custom-agents, cloud-agent, mcp] | ||
| related: [[Github Copilot/Memories]] | ||
| --- |
There was a problem hiding this comment.
The related link uses [[Github Copilot/Memories]], but other steering docs use the path-style [[github-copilot/...]] (e.g. .steering/cursor/Plugins.md:10). Align the link casing/path so Obsidian links resolve consistently.
| tags: [copilot, agents, environment, github-actions, runners] | ||
| related: | ||
| - [[Github Copilot/Agents]] | ||
| - [[Github Copilot/Agent MCP]] | ||
| - [[Github Copilot/Skills]] | ||
| --- |
There was a problem hiding this comment.
These related wikilinks use [[Github Copilot/...]], but other steering docs use the path-style [[github-copilot/...]] (e.g. .steering/cursor/Plugins.md:10). Align the link casing/path so Obsidian links resolve consistently.
| latest_commit: 67ae723a23ba880e3e5c8a3e5e2320092024476e (2026-04-02: Move package field into metadata map) | ||
| tags: [copilot-plugins, deep-wiki, documentation, vitepress, mermaid, agents, skills, onboarding] | ||
| related: [[Github Copilot/Plugins]], [[Github Copilot/Skills]], [[Skills/Skill Creator]], [[Agent Sync]] | ||
| --- |
There was a problem hiding this comment.
These wikilinks use [[Github Copilot/...]], but other steering docs use the path-style [[github-copilot/...]] (e.g. .steering/cursor/Plugins.md:10). Align the link casing/path so Obsidian links resolve consistently.
| related: | ||
| - [["GitHub Copilot/Agents"]] | ||
| - [["GitHub Copilot/Memories"]] | ||
| --- |
There was a problem hiding this comment.
In the YAML frontmatter, related entries are written as nested lists (e.g. [ ["GitHub Copilot/Agents"] ]) instead of strings like other files’ related fields. If any tooling expects related to be a list of strings, this will break. Consider making these string values (for example quoted [[...]] links) and aligning their path/casing with the rest of .steering.
| ## Agents | ||
|
|
||
| | Agent | Trigger | Output | | ||
| |-------|---------|--------| | ||
| | `laravel-package` | `/laravel-package <vendor/package>` | `.steering/laravel-packages/<vendor>__<package>.md` | | ||
| | `skill-research` | `/skill-research <github-url-to-skill>` | `.steering/skills/<owner>__<skill-name>.md` | | ||
| | `mcp-research` | `/mcp-research <url>` | `mcps/<owner>__<name>.md` | | ||
| | `research-skill` | `/research-skill <url-to-skill-directory>` | `.steering/skills/<namespace>__<skill-name>.md` | | ||
| | `research-mcp` | `/research-mcp <url>` | `.steering/mcps/<owner>__<name>.md` | |
There was a problem hiding this comment.
The repo now includes the /idea agent (.steering/agents/idea.agent.md), but it isn't listed in the Agents table. Consider adding an idea row (trigger + output path under .steering/ideas/) so users can discover it from the README.
|
@copilot apply changes based on the comments in this thread |
There was a problem hiding this comment.
Actionable comments posted: 17
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
🟡 Minor comments (18)
.steering/templates/laravel-package.md-101-103 (1)
101-103:⚠️ Potential issue | 🟡 MinorFix markdown template lint issues in generated scaffold.
The API block is missing a fence language, and the Laravel News resource link is empty. Both create avoidable lint failures in generated docs.
Suggested markdown fixes
-**API** (if applicable): -``` +**API** (if applicable): +```http POST /api/v1/package/upload/example-importer@@
-- Laravel News Article # if featured
+- Laravel News Article # if featured</details> Also applies to: 126-126 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.steering/templates/laravel-package.md around lines 101 - 103, Update the
markdown template to fix lint issues by adding a fence language to the API code
block and wiring the Laravel News link to the template variable: change the
plain fenced block containing "POST /api/v1/package/upload/example-importer" to
use a language specifier (e.g., "http") and replace the empty link label
"Laravel News Article" with "Laravel News Article".
Locate these in .steering/templates/laravel-package.md (the API code block and
the Laravel News link) and ensure the template outputs a fenced block like
http ...and uses the {{laravel_news_url}} variable for the link.</details> </blockquote></details> <details> <summary>.steering/skills/laravel-pint/SKILL.md-16-16 (1)</summary><blockquote> `16-16`: _⚠️ Potential issue_ | _🟡 Minor_ **Remove the incorrect `bin` subcommand from the Sail invocation.** Line 16 uses `./vendor/bin/sail bin pint --dirty`, but Sail's CLI does not include a `bin` subcommand. The correct invocation is `./vendor/bin/sail pint --dirty`, which directly proxies to `php vendor/bin/pint` inside the container. As documented, the current command will fail. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/skills/laravel-pint/SKILL.md at line 16, Update the Sail invocation in SKILL.md: replace the incorrect command string "./vendor/bin/sail bin pint --dirty" with the correct "./vendor/bin/sail pint --dirty" (and keep the note about adding "--format agent" when appropriate); remove the rogue "bin" subcommand so Sail correctly proxies to php vendor/bin/pint inside the container. ``` </details> </blockquote></details> <details> <summary>.claude/skills/agentic-programming/SKILL.md-30-38 (1)</summary><blockquote> `30-38`: _⚠️ Potential issue_ | _🟡 Minor_ **Specify fence languages for command examples.** The two fenced blocks are missing language identifiers (MD040), which can fail markdown lint in strict docs pipelines. <details> <summary>Suggested markdown fix</summary> ```diff -``` +```text /laravel-package <vendor/package> ``` @@ -``` +```text /laravel-package spatie/laravel-markdown-response ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.claude/skills/agentic-programming/SKILL.md around lines 30 - 38, The two
fenced code blocks showing the command examples (the blocks containing
"/laravel-package <vendor/package>" and "/laravel-package
spatie/laravel-markdown-response") are missing fence language identifiers;
update each triple-backtick fence to include a language label (e.g., add "text"
so they become ```text) to satisfy MD040 linting and ensure the examples are
treated as plain text.</details> </blockquote></details> <details> <summary>.steering/github-copilot/Memories.md-61-61 (1)</summary><blockquote> `61-61`: _⚠️ Potential issue_ | _🟡 Minor_ **Normalize “GitHub” capitalization in related note link.** Line 61 uses `[[Github Copilot]]`; prefer `GitHub` for naming consistency and to avoid potential wiki-link mismatch. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/Memories.md at line 61, The wiki link text uses incorrect capitalization: replace the link label [[Github Copilot]] with [[GitHub Copilot]] to normalize branding and avoid link mismatches; update the occurrence in Memories.md (look for the exact string "[[Github Copilot]]") so all references use "GitHub" capitalization consistently. ``` </details> </blockquote></details> <details> <summary>.cursor/skills/agentic-programming/SKILL.md-30-38 (1)</summary><blockquote> `30-38`: _⚠️ Potential issue_ | _🟡 Minor_ **Add languages to fenced code blocks for markdownlint compliance.** Line 30 and Line 36 use unlabeled fenced blocks, which triggers MD040 and reduces editor/renderer clarity. <details> <summary>Suggested fix</summary> ```diff -``` +```text /laravel-package <vendor/package> ``` @@ -``` +```text /laravel-package spatie/laravel-markdown-response ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.cursor/skills/agentic-programming/SKILL.md around lines 30 - 38, The
unlabeled fenced code blocks containing the commands "/laravel-package
<vendor/package>" and the example "/laravel-package
spatie/laravel-markdown-response" should be labeled for markdownlint (MD040);
update both triple-backtick blocks to include a language identifier (use "text")
so they become "```text" to improve linting and renderer/editor clarity while
leaving the content unchanged.</details> </blockquote></details> <details> <summary>.steering/github-copilot/plugins/Deep Wiki.md-119-120 (1)</summary><blockquote> `119-120`: _⚠️ Potential issue_ | _🟡 Minor_ **Fix malformed internal links in resources section.** Line 119 and Line 120 mix Markdown link syntax with wiki-link syntax, which likely renders as broken links. <details> <summary>Suggested fix</summary> ```diff -- [Copilot Plugins Guide]([[GitHub Copilot/Plugins]]) -- [Skills Guide]([[GitHub Copilot/Skills]]) +- [[GitHub Copilot/Plugins|Copilot Plugins Guide]] +- [[GitHub Copilot/Skills|Skills Guide]] ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/plugins/Deep Wiki.md around lines 119 - 120, The two resource links currently use mixed Markdown and wiki-link syntax ("[Copilot Plugins Guide]([[GitHub Copilot/Plugins]])" and "[Skills Guide]([[GitHub Copilot/Skills]])"); fix them by using a consistent link format—either convert to standard Markdown like [Copilot Plugins Guide](/GitHub%20Copilot/Plugins) and [Skills Guide](/GitHub%20Copilot/Skills) or to pure wiki-links like [[GitHub Copilot/Plugins|Copilot Plugins Guide]] and [[GitHub Copilot/Skills|Skills Guide]] so the links render correctly; update the lines containing the link texts "Copilot Plugins Guide" and "Skills Guide" accordingly. ``` </details> </blockquote></details> <details> <summary>.claude/skills/skill-template/SKILL.md-25-32 (1)</summary><blockquote> `25-32`: _⚠️ Potential issue_ | _🟡 Minor_ **Add fenced code languages to satisfy markdown lint.** The code fences at Line 25 and Line 63 are missing language identifiers (`MD040`). <details> <summary>💡 Proposed fix</summary> ```diff -``` +```text skill-name/ ├── SKILL.md # This file ├── scripts/ # Optional: Executable code (e.g., extract.py) ├── references/ # Optional: Docs (e.g., REFERENCE.md) ├── assets/ # Optional: Templates, images, data └── ... # Additional files ``` @@ -``` +```bash skills-ref validate ./my-skill ``` ``` </details> Also applies to: 63-65 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.claude/skills/skill-template/SKILL.md around lines 25 - 32, The fenced code
blocks in SKILL.md lack language identifiers (MD040); update the first block
showing the directory tree to use a language tag like "text" (replace the
openingwithtext) and update the command block at lines 63-65 to include
a language tag such as "bash" (replace the openingwithbash) so both
code fences satisfy the markdown lint rule; ensure you only change the opening
fence lines for the blocks that contain the directory listing and the
"skills-ref validate ./my-skill" command.</details> </blockquote></details> <details> <summary>.steering/cursor/Plugins.md-95-95 (1)</summary><blockquote> `95-95`: _⚠️ Potential issue_ | _🟡 Minor_ **Fix inconsistent path reference for `sync-skills` doc.** Line 95 mixes a rooted path with a non-rooted one (`agents/sync-skills.md`), which is easy to misread as a different location. Use the full repo-relative path consistently. <details> <summary>Suggested doc fix</summary> ```diff -| `.steering/skills/sync-skills/SKILL.md` (or `agents/sync-skills.md`) | How **steering** replicates skills/agents into IDE paths (parallel concern to “install a plugin”). | +| `.steering/skills/sync-skills/SKILL.md` (or `.steering/agents/sync-skills.md`) | How **steering** replicates skills/agents into IDE paths (parallel concern to “install a plugin”). | ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/cursor/Plugins.md at line 95, The table row mixes a nested SKILL.md path and a flat agents path; update the second entry to use the full repo-relative nested path to match the first. Replace `agents/sync-skills.md` with `agents/sync-skills/SKILL.md` (so both entries reference `.steering/skills/sync-skills/SKILL.md` style vs `agents/sync-skills/SKILL.md` consistently) in the table cell for the sync-skills documentation. ``` </details> </blockquote></details> <details> <summary>.claude/skills/laravel-research/SKILL.md-54-54 (1)</summary><blockquote> `54-54`: _⚠️ Potential issue_ | _🟡 Minor_ **Hardcoded `dev-master` branch assumption may fail for modern packages.** Line 54 assumes Packagist JSON uses `versions.dev-master.authors[0].name`, but many Laravel packages now use `main` or other default branch names. This could cause author field resolution to fail silently. <details> <summary>💡 Suggested improvement for robustness</summary> Consider updating the instruction to handle multiple possible default branch names: ```diff -| `author` | Packagist JSON (`packagist.org/packages/<v>/<p>.json`) → `versions.dev-master.authors[0].name` | +| `author` | Packagist JSON (`packagist.org/packages/<v>/<p>.json`) → try `versions.dev-main`, `versions.dev-master`, or latest version → `authors[0].name` | ``` Or instruct agents to check the package's default branch first, then use that branch's version data. </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.claude/skills/laravel-research/SKILL.md at line 54, The mapping for the `author` field currently hardcodes `versions.dev-master.authors[0].name`, which breaks when a package's default branch is not `dev-master`; update the lookup in the agent flow to first determine the package's default branch (or inspect `package`/`package["default-branch"]` if available) and then use `versions[<default-branch>].authors[0].name`, or fall back to a robust search over `versions` keys (e.g., prefer `dev-<branch>` matching the default or the first `authors` entry in a semver-sorted/priority list) so `author` resolution works for `main`, `master`, or any other branch names instead of only `dev-master`. ``` </details> </blockquote></details> <details> <summary>.steering/github-copilot/SDK.md-30-37 (1)</summary><blockquote> `30-37`: _⚠️ Potential issue_ | _🟡 Minor_ **Fix markdownlint violations in table and code fence formatting.** The table and fenced block formatting will keep triggering CI/editor lint noise. Add blank lines around the table and specify a language for the fenced block. <details> <summary>💡 Proposed patch</summary> ```diff ## Key Features (from SKILL.md commits) - **Architecture**: Transport modes (stdio/TCP). - **Hooks**: All 6 lifecycle hooks (pre/post tool use, user prompt, session start/end, error handling) with multi-language examples. - **BYOK (Bring Your Own Keys)**: Provider configs (OpenAI, Azure OpenAI, Anthropic, Ollama). Reference table + Azure Managed Identity pattern. - **Authentication**: Priority order, OAuth GitHub App, token types, disable auto-login. - **Session Persistence**: Resume options, session ID best practices, persisted data, infinite sessions. - **MCP Server Integration**: Local/HTTP configs (all fields), debugging (MCP Inspector). - **Deployment Patterns**: + | Pattern | Description | |---------|-------------| | Local CLI | `copilot-sdk run` | | External Server | TCP/HTTP endpoints | | Bundled CLI | Embed in apps | | Docker Compose | Multi-container | | Session Isolation | Prod checklist | + - **Permissions/Input Handlers**: Deny-by-default model. - **SDK vs CLI Comparison**: Feature table + workarounds. - **Debugging**: Common issues table, connection states. ## Directory Structure -``` +```text .github/skills/copilot-sdk/ ├── SKILL.md # Main instructions (~900 lines) └── references/ # Supporting docs/examples └── (various files for tests/acceptance criteria) ``` ``` </details> Also applies to: 42-47 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.steering/github-copilot/SDK.md around lines 30 - 37, The Markdown has lint
violations: add a blank line before and after the table starting with "| Pattern
| Description |" to separate it from surrounding text, and update the fenced
code block shown (the triple-backtick block containing
".github/skills/copilot-sdk/ ...") to include a language identifier (e.g.,fence as well. Locate the table and the fenced block in the document (the table rows: "Local CLI | `copilot-sdk run`", "External Server | TCP/HTTP endpoints", etc., and the code fence containing the directory tree) and apply these formatting changes so markdownlint no longer flags them..github/skills/sync-agents/SKILL.md-20-21 (1)
20-21:⚠️ Potential issue | 🟡 MinorFix malformed inline code/bold formatting for the missing-template marker.
The current newline split inside the emphasized code marker is hard to read and may render inconsistently.
💡 Proposed patch
-1. **Build** — In each agent file’s **body** (after opening YAML), expand **`<!-- missing: .steering/templates/....md --> -`** by default. For **`research-skill.agent.md`**, also expand **`![[github-copilot/...]]`** only in the **`.cursor/agents/`** output; **`.github`** / **`.claude`** replace those embeds with a pointer to **`.steering/github-copilot/Skills.md`**. With `#Heading`, inline the `## Heading` section only. Leave other `![[...]]` as-is. +1. **Build** — In each agent file’s **body** (after opening YAML), expand `<!-- missing: .steering/templates/....md -->` by default. For **`research-skill.agent.md`**, also expand **`![[github-copilot/...]]`** only in the **`.cursor/agents/`** output; **`.github`** / **`.claude`** replace those embeds with a pointer to **`.steering/github-copilot/Skills.md`**. With `#Heading`, inline the `## Heading` section only. Leave other `![[...]]` as-is.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/skills/sync-agents/SKILL.md around lines 20 - 21, Fix the malformed inline code/bold formatting by keeping the missing-template marker on a single inline span instead of split across a newline: replace the broken emphasized segment with a single inline code/bold instance for the marker `<!-- missing: .steering/templates/....md -->` in .github/skills/sync-agents/SKILL.md; ensure the text that describes the behavior for `research-skill.agent.md` and the `.cursor/agents/` output remains intact, and avoid inserting a newline inside the code span so the marker renders consistently..cursor/skills/tailwindcss-development/SKILL.md-29-30 (1)
29-30:⚠️ Potential issue | 🟡 MinorClarify v4 configuration guidance:
tailwind.config.jsis optional legacy support, not unsupported.Current phrasing suggests
tailwind.config.jsis unnecessary in v4, which overstates the situation. In reality, v4 is CSS-first by default using@themeand related directives, buttailwind.config.jsremains supported via the@configdirective for backward compatibility. Adjust the wording to reflect this distinction: the default/recommended path is CSS-first; legacy config is optional when needed.Proposed wording update
-In Tailwind v4, configuration is CSS-first using the `@theme` directive — no separate `tailwind.config.js` file is needed: +In Tailwind v4, configuration is CSS-first by default, using the `@theme` directive in your CSS file. Legacy `tailwind.config.js` files are still supported via `@config` for compatibility when needed:Also applies to: 118-118
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.cursor/skills/tailwindcss-development/SKILL.md around lines 29 - 30, Update the wording in the "Tailwind v4" note to clarify that Tailwind v4 is CSS-first by default using the `@theme` directive while preserving support for legacy tailwind.config.js via the `@config` directive; specifically, replace the current sentence that implies tailwind.config.js is unnecessary with a line stating that the recommended/default path is CSS-first (`@theme`) but tailwind.config.js remains supported optionally for backward compatibility via `@config`. Include both identifiers (`@theme` and `@config`) and the filename tailwind.config.js in the revised sentence so readers know how to opt into legacy config when needed..steering/github-copilot/Settings.md-57-63 (1)
57-63:⚠️ Potential issue | 🟡 MinorAdd a blank line before the table to satisfy markdownlint (MD058).
At Line 58, the table starts immediately after the heading block. Insert one empty line before the table.Proposed fix
### Variable Substitution + | Syntax | Example | |--------|---------| | `$VAR` | `$COPILOT_MCP_API_KEY` | | `${VAR}` | `${COPILOT_MCP_API_KEY}` | | `${VAR:-default}` | `${COPILOT_MCP_API_KEY:-fallback}` |🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/Settings.md around lines 57 - 63, Insert a single blank line between the "Variable Substitution" heading and the following table to satisfy markdownlint rule MD058; update the markdown around the "Variable Substitution" heading so the table (the pipe-delimited block starting with "| Syntax | Example |") is separated by one empty line from the heading..steering/agents/sync-agents.md-23-23 (1)
23-23:⚠️ Potential issue | 🟡 MinorAvoid trailing spaces inside code spans to satisfy markdownlint.
Line 23 uses code spans like
##and#with trailing spaces, which triggers MD038. Consider replacing the space with an explicit marker (for example##<space>and#<space>).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/agents/sync-agents.md at line 23, The markdown uses code spans with trailing spaces (e.g., "## " and "# ") which triggers MD038; update those spans in .steering/agents/sync-agents.md to avoid trailing spaces by replacing them with an explicit marker such as "##<space>" and "#<space>" (or use backticks around the marker without the trailing literal space), ensuring all occurrences of the symbols `## ` and `# ` are replaced so markdownlint no longer flags MD038.README.md-111-130 (1)
111-130:⚠️ Potential issue | 🟡 MinorAdd languages to fenced code blocks.
Line 111, Line 142, and Line 148 use unlabeled fenced blocks, which triggers MD040 and can fail strict markdown linting.
Suggested fix
-``` +```text .steering/ ... -``` +``` -``` +```text /research-skill https://example.com/org/repo/tree/main/path/to/skill -``` +``` -``` +```text .steering/skills/<namespace>__<skill-name>.md -``` +```Also applies to: 142-150
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@README.md` around lines 111 - 130, The README.md contains unlabeled fenced code blocks (the directory tree block starting with ".steering/", the "/research-skill https://example.com/..." example, and the ".steering/skills/<namespace>__<skill-name>.md" example) which trigger MD040; update each triple-backtick fence to include a language identifier (e.g., ```text) so the fences become ```text ... ``` for all three occurrences, leaving the block contents unchanged..steering/github-copilot/Agent MCP.md-6-6 (1)
6-6:⚠️ Potential issue | 🟡 MinorNormalize “Github” to “GitHub” in wiki links.
Line 6 and Line 123 use
[[Github ...]]; useGitHubcasing for platform-name consistency.Also applies to: 123-123
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/Agent MCP.md at line 6, Update the wiki link casing from "Github" to "GitHub" for consistency by replacing occurrences like "[[Github Copilot/Agents]]" and "[[Github Copilot/Skills]]" (and any other "[[Github ...]]" links, e.g., the second occurrence at the other location) with "[[GitHub Copilot/Agents]]" and "[[GitHub Copilot/Skills]]" respectively; ensure all instances of the token "Github Copilot" in the document are normalized to "GitHub Copilot" so link targets and display text use the correct platform capitalization..steering/github-copilot/Agent MCP.md-46-50 (1)
46-50:⚠️ Potential issue | 🟡 MinorFix markdown table spacing to satisfy lint.
Line 46 and Line 53 start tables without the required surrounding blank lines, which will keep MD058 warnings active.
Suggested fix
### Server Types + | Type | Config Keys | Example | |------|-------------|---------| | Local (command) | `command`, `args[]`, `env`, `cwd`, `tools[]` | `npx `@sentry/mcp-server-sentry`` | | Remote SSE | `type: "sse"`, `url`, `headers`, `tools[]` | Cloudflare SSE endpoint | | Remote Streamable HTTP | `type: "streamable-http"`, `url`, `headers`, `tools[]` | OAuth not supported | + ## Variable Substitution + | Syntax | Example | |--------|---------| | `$VAR` | `$COPILOT_MCP_API_KEY` | | `${VAR}` | `${COPILOT_MCP_API_KEY}` | | `${VAR:-default}` | `${COPILOT_MCP_API_KEY:-fallback}` |Also applies to: 53-57
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/Agent MCP.md around lines 46 - 50, Add the required blank lines surrounding the Markdown tables to satisfy MD058: insert an empty line immediately before the table that starts with the row "Type | Config Keys | Example" (the table containing "Local (command) | `command`, `args[]`, `env`, `cwd`, `tools[]`") and an empty line immediately after its closing row, and do the same for the second table that begins at the later block (lines containing "Remote SSE | `type: \"sse\"`, `url`, `headers`, `tools[]`" and "Remote Streamable HTTP | `type: \"streamable-http\"`, `url`, `headers`, `tools[]`") so each table is separated by blank lines from surrounding content..claude/skills/livewire-development/SKILL.md-71-71 (1)
71-71:⚠️ Potential issue | 🟡 MinorUse
{{ $count }}instead of@{{ $count }}to render the Livewire property.The
@{{ }}syntax tells Blade to not interpret the expression, outputting literal braces for JavaScript frameworks. For Livewire properties in Blade, use{{ $count }}directly. Since this file is mirrored, apply the fix in the sync source and regenerate.Proposed fix
- <button wire:click="increment">Count: @{{ $count }}</button> + <button wire:click="increment">Count: {{ $count }}</button>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.claude/skills/livewire-development/SKILL.md at line 71, Replace the escaped Blade expression @{{ $count }} with the proper Blade echo {{ $count }} in the Livewire button template (the element containing wire:click="increment" and $count) so Livewire renders the property correctly; because this file is mirrored, make the same change in the sync source and regenerate the mirrored file.
🧹 Nitpick comments (11)
.github/skills/skill-research/skill-template.md (1)
63-65: Specify language for the fenced code block.The validation command example would benefit from syntax highlighting by specifying the
bashlanguage identifier.🔧 Proposed fix
# Validation Use [skills-ref](https://github.com/agentskills/agentskills/tree/main/skills-ref): -``` +```bash skills-ref validate ./my-skill</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.github/skills/skill-research/skill-template.md around lines 63 - 65, Add
the bash language identifier to the fenced code block containing the example
command "skills-ref validate ./my-skill" so the block becomes a bash-highlighted
snippet; locate the fenced block in skill-template.md that currently starts with
and change it tobash to enable syntax highlighting for the command
example.</details> </blockquote></details> <details> <summary>.steering/skills/laravel-research/SKILL.md (1)</summary><blockquote> `9-46`: **Consider specifying language for the fenced code block.** The template code block would benefit from a language identifier for better syntax highlighting and tooling support. <details> <summary>📝 Proposed fix</summary> ```diff Use this EXACT template for output: -```markdown +````markdown --- org: VENDOR package: package-name @@ -43,7 +43,7 @@ ## Resources - [[Laravel Packages]] (related) -``` +```` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.steering/skills/laravel-research/SKILL.md around lines 9 - 46, The
top-level fenced block in SKILL.md currently lacks a language specifier; update
the opening fence fromtomarkdown so the entire template (including
frontmatter, bash snippet placeholders like composer_require, and CODE_EXAMPLE)
benefits from Markdown highlighting, and ensure the closing fence matches
(markdown ...), leaving placeholders (composer_require, CODE_EXAMPLE)
unchanged.</details> </blockquote></details> <details> <summary>.github/workflows/verify-steering-sync.yml (1)</summary><blockquote> `3-15`: **Add a `pull_request` trigger for earlier/consistent PR feedback.** This currently runs only on `push`/manual dispatch. Adding `pull_request` (with the same path filters) makes sync drift checks more reliable in PR workflows. <details> <summary>Suggested workflow trigger update</summary> ```diff on: workflow_dispatch: + pull_request: + paths: + - ".steering/**" + - ".github/workflows/verify-steering-sync.yml" + - "scripts/regenerate-ide-mirrors.py" + - ".github/agents/**" + - ".github/skills/**" + - ".cursor/agents/**" + - ".cursor/skills/**" + - ".claude/**" push: paths: - ".steering/**" - ".github/workflows/verify-steering-sync.yml" - "scripts/regenerate-ide-mirrors.py" - ".github/agents/**" - ".github/skills/**" - ".cursor/agents/**" - ".cursor/skills/**" - ".claude/**" ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.github/workflows/verify-steering-sync.yml around lines 3 - 15, Update the GitHub Actions trigger block in the verify-steering-sync workflow to include a pull_request event with the same path filters as the existing push event so PRs run the same sync drift checks; edit the on: block in .github/workflows/verify-steering-sync.yml to add pull_request (mirroring the paths list currently under push) so that changes under ".steering/**", ".github/workflows/verify-steering-sync.yml", "scripts/regenerate-ide-mirrors.py", ".github/agents/**", ".github/skills/**", ".cursor/agents/**", ".cursor/skills/**", and ".claude/**" will trigger the workflow for pull requests as well. ``` </details> </blockquote></details> <details> <summary>.steering/agents/laravel-package.agent.md (1)</summary><blockquote> `27-30`: **Prefer inlining the mapping instead of Obsidian transclusion in canonical agent spec.** Line 29 introduces a render-time dependency (`![[...]]`) in the source-of-truth agent. Inlining this section here would make mirrors and non-Obsidian consumers more robust. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/agents/laravel-package.agent.md around lines 27 - 30, The canonical agent spec currently uses an Obsidian transclusion token (![[templates/laravel-package#Field-to-Source Mapping]]) under the "## Field-to-Source Mapping" section which creates a render-time dependency; replace that transclusion by inlining the full Field-to-Source Mapping content directly into the "## Field-to-Source Mapping" section so the spec is self-contained and usable by mirrors and non-Obsidian consumers (remove the ![[...]] line and paste the mapping text that lives in templates/laravel-package#Field-to-Source Mapping). ``` </details> </blockquote></details> <details> <summary>.steering/github-copilot/Agents.md (1)</summary><blockquote> `7-7`: **Inconsistent capitalization in wiki-link.** The related link uses `[[Github Copilot/Memories]]` with lowercase "hub", but the official brand name is "GitHub" with capital "H". Consider updating for consistency. <details> <summary>📝 Suggested fix</summary> ```diff -related: [[Github Copilot/Memories]] +related: [[GitHub Copilot/Memories]] ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/Agents.md at line 7, The wiki link "[[Github Copilot/Memories]]" uses incorrect capitalization for "GitHub"; update the link text to "[[GitHub Copilot/Memories]]" (and search for other occurrences of "Github Copilot" to correct them similarly) so the brand name uses the proper capital "H". ``` </details> </blockquote></details> <details> <summary>.steering/agents/research-mcp.agent.md (1)</summary><blockquote> `27-33`: **Add an explicit fallback path when GitHub MCP/DeepWiki is unavailable.** This keeps the agent resilient in environments where those integrations are missing, while preserving preferred-source behavior. <details> <summary>Proposed resilience tweak</summary> ```diff - - **GitHub repo** (via GitHub MCP + DeepWiki): + - **GitHub repo** (prefer GitHub MCP + DeepWiki; fallback to direct GitHub/docs pages via browser/search): ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/agents/research-mcp.agent.md around lines 27 - 33, Update the "GitHub repo (via GitHub MCP + DeepWiki)" lookup to include an explicit fallback path when those integrations are unavailable: if GitHub MCP/DeepWiki lookup fails, fall back to (1) a direct git/github API probe of the repo URL derived from metadata, (2) registry/package index lookups (npm/PyPI entry already listed) for package metadata, and finally (3) mark the source as unavailable but continue with the remaining checks (registry and official MCP docs). Ensure the README/agent spec text is updated to describe this ordered fallback and that the agent's discovery logic records which source succeeded or failed so preferred-source behavior is preserved. ``` </details> </blockquote></details> <details> <summary>.github/agents/sync-agents.md (2)</summary><blockquote> `20-26`: **Consider highlighting the embed-syntax warning more prominently.** Line 21 contains an important gotcha: "do not put illustrative embed examples in agent bodies as literal bracket pairs or the CI build will try to expand them." This warning is currently embedded mid-sentence in a parenthetical, where maintainers skimming the rules might miss it, leading to CI failures. <details> <summary>💡 Suggested structure for visibility</summary> ```diff 1. **Build step (Obsidian embeds)** — In each `.steering/agents/*.md` **body** (after the first YAML frontmatter), expand wiki-style embeds allowed for that **output**: - - **Default:** only embeds whose path starts with **`templates/`** (optional **`#Heading`** to inline a single `## Heading` section). Paths resolve under **`.steering/`**. Embed syntax is Obsidian's wiki link with brackets (see steering README); do not put illustrative embed examples in agent bodies as literal bracket pairs or the CI build will try to expand them. + - **Default:** only embeds whose path starts with **`templates/`** (optional **`#Heading`** to inline a single `## Heading` section). Paths resolve under **`.steering/`**. + + > ⚠️ **Do not put illustrative embed examples** (like `![[example]]`) **in agent bodies** as literal text—the CI build will attempt to expand them. Use code blocks or escape syntax when documenting embeds. + - **`research-skill.agent.md` only:** embeds whose path starts with **`github-copilot/`** are expanded **only** when writing **`.cursor/agents/research-skill.agent.md`** (full body after that file's YAML frontmatter, same rules as `templates/`). For **`.github/agents/`** and **`.claude/agents/`**, replace those embeds with a short blockquote pointing at **`.steering/github-copilot/Skills.md`** so mirrors stay small and Obsidian syntax never ships to Copilot Cloud. ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.github/agents/sync-agents.md around lines 20 - 26, The warning about not including illustrative Obsidian embed examples is easy to miss mid-parenthetical; relocate and emphasize it at the top of the "Build step (Obsidian embeds)" section so maintainers see it before details: extract the sentence "do not put illustrative embed examples in agent bodies as literal bracket pairs or the CI build will try to expand them." and place it as a standalone, prominent caution immediately after the section heading (or before the bullet list), and ensure it references the affected files/rules (`.steering/agents/*.md`, `.cursor/agents/research-skill.agent.md`, `templates/`, and `github-copilot/` behavior) so the constraint is unambiguous. ``` </details> --- `22-22`: **Simplify the `research-skill.agent.md` special-case description.** Line 22 is a 400+ character sentence combining the file name, embed pattern, destination-specific behavior, and rationale. Similar to the `sync-skills.md` complexity, this density may lead to errors during manual replication. <details> <summary>♻️ Proposed restructure</summary> ```diff - - **`research-skill.agent.md` only:** embeds whose path starts with **`github-copilot/`** are expanded **only** when writing **`.cursor/agents/research-skill.agent.md`** (full body after that file's YAML frontmatter, same rules as `templates/`). For **`.github/agents/`** and **`.claude/agents/`**, replace those embeds with a short blockquote pointing at **`.steering/github-copilot/Skills.md`** so mirrors stay small and Obsidian syntax never ships to Copilot Cloud. + - **`research-skill.agent.md` only:** embeds whose path starts with **`github-copilot/`** have destination-specific behavior: + - **`.cursor/agents/research-skill.agent.md`**: expand the embeds (same rules as `templates/`). + - **`.github/agents/`** and **`.claude/agents/`**: replace those embeds with a short blockquote pointing to `.steering/github-copilot/Skills.md` (keeps mirrors small, avoids shipping Obsidian syntax to Copilot Cloud). ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.github/agents/sync-agents.md at line 22, The sentence describing the special-case for research-skill.agent.md is too long and dense; split and simplify it so it's clearer and less error-prone: state first that in research-skill.agent.md, embeds whose path starts with "github-copilot/" are expanded only when writing ".cursor/agents/research-skill.agent.md" (full body after that file’s YAML frontmatter, same rules as templates/), and then state separately that for ".github/agents/" and ".claude/agents/" those same embeds must be replaced with a short blockquote pointing at ".steering/github-copilot/Skills.md" so mirrors stay small and Obsidian syntax never ships to Copilot Cloud. ``` </details> </blockquote></details> <details> <summary>.github/skills/livewire-development/SKILL.md (1)</summary><blockquote> `85-85`: **Break down the JavaScript API changes for readability.** Line 85 is a 530-character sentence covering multiple JavaScript API migrations (property syntax, legacy hook mappings, three interceptor types). Developers scanning for v4 migration steps may struggle to extract actionable information from this dense format. <details> <summary>♻️ Proposed list structure</summary> ```diff -- JavaScript: `$wire.$js('name', fn)` → `$wire.$js.name = fn`; legacy commit/request hooks map to the **interceptor** APIs — use **`$wire.intercept()` / `Livewire.interceptAction()`** (action lifecycle), **`$wire.interceptMessage()` / `Livewire.interceptMessage()`** (payload handling), and **`$wire.interceptRequest()` / `Livewire.interceptRequest()`** (HTTP request lifecycle) as appropriate. +- JavaScript API changes: + - Property syntax: `$wire.$js('name', fn)` → `$wire.$js.name = fn` + - Legacy commit/request hooks now use **interceptor APIs**: + - `$wire.intercept()` / `Livewire.interceptAction()` — action lifecycle hooks + - `$wire.interceptMessage()` / `Livewire.interceptMessage()` — payload handling + - `$wire.interceptRequest()` / `Livewire.interceptRequest()` — HTTP request lifecycle ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.github/skills/livewire-development/SKILL.md at line 85, The sentence at line 85 is too dense; split the single 530-character line into a clear, readable list of migration items: 1) show the property-style replacement for $wire.$js('name', fn) as $wire.$js.name = fn; 2) state that legacy commit/request hooks now map to interceptor APIs and list each interceptor type on its own line with both instance and global names: $wire.intercept() / Livewire.interceptAction() (action lifecycle), $wire.interceptMessage() / Livewire.interceptMessage() (payload handling), and $wire.interceptRequest() / Livewire.interceptRequest() (HTTP request lifecycle); 3) ensure each bullet uses the exact symbols ($wire.$js.name, $wire.intercept(), Livewire.interceptAction(), etc.) so readers can quickly locate the corresponding APIs. ``` </details> </blockquote></details> <details> <summary>.steering/cursor/Hooks.md (1)</summary><blockquote> `72-89`: **Optional: Consider rewording to reduce repetition.** Three successive sentences begin with "**Agent**" (lines 72, 74, 82). While this is clear, you could improve flow by combining or varying the structure. <details> <summary>♻️ Suggested alternative structure</summary> ```diff -**Agent** (Cmd+K / Agent chat) and **Tab** (inline completions) use **different** hook names. - -**Agent (representative set from Cursor docs):** +Cursor provides different hook names for **Agent** (Cmd+K / Agent chat) versus **Tab** (inline completions). + +**Representative Agent events (from Cursor docs):** ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/cursor/Hooks.md around lines 72 - 89, The three consecutive lines that start with "Agent" are repetitive; reword the header and combine the representative hook list into a single sentence or heading, e.g., replace the separate "Agent (representative set from Cursor docs):" and repeated "Agent" lead-ins with one concise introduction like "Agent hooks (representative):" followed by the table of hook names (sessionStart, sessionEnd, preToolUse, postToolUse, postToolUseFailure, subagentStart, subagentStop, beforeShellExecution, afterShellExecution, beforeMCPExecution, afterMCPExecution, beforeReadFile, afterFileEdit, beforeSubmitPrompt, preCompact, stop, afterAgentResponse, afterAgentThought), and similarly shorten the Tab section to one line explaining when to use beforeTabFileRead/afterTabFileEdit to avoid redundancy. ``` </details> </blockquote></details> <details> <summary>.cursor/agents/sync-skills.md (1)</summary><blockquote> `10-10`: **Simplify the source-of-truth explanation for readability.** Line 10 packs multiple concepts into a 345-character sentence: canonical source, byte-identical replication, the `skill-research` exception, embed expansion rules, and a cross-reference to `sync-agents`. This density may lead to misinterpretation during manual syncing. <details> <summary>♻️ Proposed restructure for clarity</summary> ```diff -**`.steering/`** holds canonical **agents** (`agents/`) and **packaged skills** (`skills/<name>/SKILL.md`), plus **`templates/skill.md`** (the skill spec). Packaged skills are **byte-identical** across `.cursor`, `.claude`, and `.github` **except** **`skill-research`**: **`![[github-copilot/...]]`** expands only in **`.cursor/skills/skill-research/`**; **`.github`** and **`.claude`** get a pointer to **`.steering/github-copilot/Skills.md`** instead. **Agents:** see **sync-agents** (includes the same **`github-copilot/`** rule for **`research-skill.agent.md`** on **`.cursor`** only). +**`.steering/`** holds canonical **agents** (`agents/`), **packaged skills** (`skills/<name>/SKILL.md`), and **`templates/skill.md`** (the skill spec). + +Packaged skills replicate byte-identically across `.cursor`, `.claude`, and `.github` **except `skill-research`**: +- **`.cursor/skills/skill-research/`**: `![[github-copilot/...]]` embeds are expanded. +- **`.github`** and **`.claude`**: those embeds become a pointer to `.steering/github-copilot/Skills.md`. + +**Agents:** see **sync-agents** for similar `github-copilot/` handling on `research-skill.agent.md` (`.cursor` only). ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.cursor/agents/sync-skills.md at line 10, The sentence describing the source-of-truth is too dense; split and clarify it into 2–3 short sentences that state: (1) `.steering/` holds canonical agents (`agents/`), packaged skills (`skills/<name>/SKILL.md`), and the skill spec template (`templates/skill.md`); (2) packaged skills are byte-identical across `.cursor`, `.claude`, and `.github` except for the `skill-research` case; and (3) for `skill-research` explain that `![[github-copilot/...]]` expands only in `.cursor/skills/skill-research/`, while `.github` and `.claude` point to `.steering/github-copilot/Skills.md`, and add a short parenthetical pointer to `sync-agents` for the agents rule and `research-skill.agent.md` as needed. ``` </details> </blockquote></details> </blockquote></details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: Organization UI **Review profile**: CHILL **Plan**: Pro **Run ID**: `1a9ff859-8319-4057-ba4b-6b889b574ccf` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 5e51623985cc91600cfa4f7fc3d1186678412b9f and 8f78007bf0cef0ab752193d710120361575aed83. </details> <details> <summary>⛔ Files ignored due to path filters (2)</summary> * `scripts/__pycache__/regenerate-ide-mirrors.cpython-312.pyc` is excluded by `!**/*.pyc` * `scripts/__pycache__/sync-boost-ai-skills.cpython-312.pyc` is excluded by `!**/*.pyc` </details> <details> <summary>📒 Files selected for processing (123)</summary> * `.claude/agents/idea.agent.md` * `.claude/agents/laravel-package.agent.md` * `.claude/agents/research-mcp.agent.md` * `.claude/agents/research-skill.agent.md` * `.claude/agents/sync-agents.md` * `.claude/agents/sync-skills.md` * `.claude/skills/agentic-programming/SKILL.md` * `.claude/skills/fluxui-free-development/SKILL.md` * `.claude/skills/fluxui-pro-development/SKILL.md` * `.claude/skills/laravel-pint/SKILL.md` * `.claude/skills/laravel-research/SKILL.md` * `.claude/skills/laravel-sail/SKILL.md` * `.claude/skills/livewire-development/SKILL.md` * `.claude/skills/pest-testing/SKILL.md` * `.claude/skills/phpunit-laravel/SKILL.md` * `.claude/skills/skill-research/SKILL.md` * `.claude/skills/skill-template/SKILL.md` * `.claude/skills/sync-agents/SKILL.md` * `.claude/skills/sync-skills/SKILL.md` * `.claude/skills/tailwindcss-development/SKILL.md` * `.cursor/agents/idea.agent.md` * `.cursor/agents/laravel-package.agent.md` * `.cursor/agents/research-mcp.agent.md` * `.cursor/agents/research-skill.agent.md` * `.cursor/agents/sync-agents.md` * `.cursor/agents/sync-skills.md` * `.cursor/skills/agentic-programming/SKILL.md` * `.cursor/skills/fluxui-free-development/SKILL.md` * `.cursor/skills/fluxui-pro-development/SKILL.md` * `.cursor/skills/laravel-pint/SKILL.md` * `.cursor/skills/laravel-research/SKILL.md` * `.cursor/skills/laravel-sail/SKILL.md` * `.cursor/skills/livewire-development/SKILL.md` * `.cursor/skills/pest-testing/SKILL.md` * `.cursor/skills/phpunit-laravel/SKILL.md` * `.cursor/skills/skill-research/SKILL.md` * `.cursor/skills/skill-template/SKILL.md` * `.cursor/skills/sync-agents/SKILL.md` * `.cursor/skills/sync-skills/SKILL.md` * `.cursor/skills/tailwindcss-development/SKILL.md` * `.github/agents/idea.agent.md` * `.github/agents/laravel-package.agent.md` * `.github/agents/research-mcp.agent.md` * `.github/agents/research-skill.agent.md` * `.github/agents/skill-research.agent.md` * `.github/agents/sync-agents.md` * `.github/agents/sync-skills.md` * `.github/skills/agentic-programming/SKILL.md` * `.github/skills/fluxui-free-development/SKILL.md` * `.github/skills/fluxui-pro-development/SKILL.md` * `.github/skills/laravel-pint/SKILL.md` * `.github/skills/laravel-research/SKILL.md` * `.github/skills/laravel-research/laravel-package-template.md` * `.github/skills/laravel-sail/SKILL.md` * `.github/skills/livewire-development/SKILL.md` * `.github/skills/pest-testing/SKILL.md` * `.github/skills/phpunit-laravel/SKILL.md` * `.github/skills/skill-research/SKILL.md` * `.github/skills/skill-research/skill-template.md` * `.github/skills/sync-agents/SKILL.md` * `.github/skills/sync-skills/SKILL.md` * `.github/skills/tailwindcss-development/SKILL.md` * `.github/workflows/sync-skill-template.yml` * `.github/workflows/verify-steering-sync.yml` * `.steering/README.md` * `.steering/agents/idea.agent.md` * `.steering/agents/laravel-package.agent.md` * `.steering/agents/research-mcp.agent.md` * `.steering/agents/research-skill.agent.md` * `.steering/agents/sync-agents.md` * `.steering/agents/sync-skills.md` * `.steering/cursor/Agents.md` * `.steering/cursor/Hooks.md` * `.steering/cursor/Plugins.md` * `.steering/cursor/Rules.md` * `.steering/cursor/Skills.md` * `.steering/github-copilot/Agent MCP.md` * `.steering/github-copilot/Agentic Workflows.md` * `.steering/github-copilot/Agents.md` * `.steering/github-copilot/Environment.md` * `.steering/github-copilot/Memories.md` * `.steering/github-copilot/Plugins.md` * `.steering/github-copilot/Prompts.md` * `.steering/github-copilot/SDK.md` * `.steering/github-copilot/Settings.md` * `.steering/github-copilot/Skills.md` * `.steering/github-copilot/plugins/Deep Wiki.md` * `.steering/ideas/README.md` * `.steering/laravel-packages/README.md` * `.steering/laravel-packages/larastan__larastan.md` * `.steering/laravel-packages/laravel__pint.md` * `.steering/laravel-packages/livewire__flux.md` * `.steering/laravel-packages/pestphp__pest.md` * `.steering/mcp.json` * `.steering/mcps/deepwiki__mcp.md` * `.steering/mcps/github__github-mcp-server.md` * `.steering/mcps/upstash__context7.md` * `.steering/skills/.boost-ai-sync.json` * `.steering/skills/README.md` * `.steering/skills/SOURCES.md` * `.steering/skills/fluxui-free-development/SKILL.md` * `.steering/skills/fluxui-pro-development/SKILL.md` * `.steering/skills/laravel-pint/SKILL.md` * `.steering/skills/laravel-research/SKILL.md` * `.steering/skills/laravel-sail/SKILL.md` * `.steering/skills/livewire-development/SKILL.md` * `.steering/skills/pest-testing/SKILL.md` * `.steering/skills/phpunit-laravel/SKILL.md` * `.steering/skills/skill-research/SKILL.md` * `.steering/skills/sync-agents/SKILL.md` * `.steering/skills/sync-agents/tdd.md` * `.steering/skills/sync-skills/SKILL.md` * `.steering/skills/tailwindcss-development/SKILL.md` * `.steering/templates/AGENTS.md` * `.steering/templates/agent.md` * `.steering/templates/idea.md` * `.steering/templates/laravel-package.md` * `.steering/templates/skill.md` * `README.md` * `mcps/README.md` * `scripts/regenerate-ide-mirrors.py` * `scripts/sync-boost-ai-skills.py` * `templates/agents.md` </details> <details> <summary>💤 Files with no reviewable changes (7)</summary> * .steering/laravel-packages/README.md * .github/workflows/sync-skill-template.yml * mcps/README.md * .github/skills/laravel-research/laravel-package-template.md * .github/agents/skill-research.agent.md * templates/agents.md * .steering/templates/skill.md </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
| - Use `Route::livewire()` for full-page components (e.g., `Route::livewire('/posts/create', CreatePost::class)`); config keys renamed: `layout` → `component_layout`, `lazy_placeholder` → `component_placeholder`. | ||
| - `wire:model` now ignores child events by default (use `wire:model.deep` for old behavior); `wire:scroll` renamed to `wire:navigate:scroll`. | ||
| - Component tags must be properly closed; `wire:transition` now uses View Transitions API (modifiers removed). | ||
| - JavaScript: `$wire.$js('name', fn)` → `$wire.$js.name = fn`; legacy commit/request hooks map to the **interceptor** APIs — use **`$wire.intercept()` / `Livewire.interceptAction()`** (action lifecycle), **`$wire.interceptMessage()` / `Livewire.interceptMessage()`** (payload handling), and **`$wire.interceptRequest()` / `Livewire.interceptRequest()`** (HTTP request lifecycle) as appropriate. | ||
|
|
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
`For Livewire 4 (latest official docs), verify whether the following are valid and documented:
- Route::livewire() for full-page components
- $wire.intercept(), $wire.interceptMessage(), $wire.interceptRequest()
- Livewire.interceptAction(), Livewire.interceptMessage(), Livewire.interceptRequest()
- wire:model.deep and wire:navigate:scroll semantics
- Config keys: component_layout, component_placeholder, component_locations, component_namespaces, make_command, csp_safe
Please provide official Livewire documentation links for each item and note any mismatches.`
💡 Result:
Route::livewire()for full-page components — Valid + documented (v4.x). (livewire.laravel.com)
Official docs:
https://livewire.laravel.com/docs/4.x/components
https://livewire.laravel.com/docs/4.x/navigate
$wire.intercept(),$wire.interceptMessage(),$wire.interceptRequest()— Valid + documented (v4.x) under Interceptors. (livewire.laravel.com)
Official docs:
https://livewire.laravel.com/docs/4.x/javascript
Livewire.interceptAction(),Livewire.interceptMessage(),Livewire.interceptRequest()— Partially mismatched:
Livewire.interceptAction()— Valid + documentedLivewire.interceptMessage()— Valid + documentedLivewire.interceptRequest()— NOT shown/documented in the interceptor API summary (the docs show global Action + Message interceptors, but for Request only show$wire.interceptRequest(...)). (livewire.laravel.com)
Official docs:
https://livewire.laravel.com/docs/4.x/javascript
wire:model.deepandwire:navigate:scrollsemantics — Valid + documented (v4.x):
wire:model.deep:.deepmodifier makeswire:modellisten to events bubbling from child elements. (livewire.laravel.com)
Docs:https://livewire.laravel.com/docs/4.x/wire-modelwire:navigate:scroll: used to preserve scroll position of a scrollable persisted element acrosswire:navigatepage navigations; page scroll is preserved by default, andwire:navigate:scrollis for individual persisted scroll containers. (livewire.laravel.com)
Docs:https://livewire.laravel.com/docs/4.x/navigate
- Config keys — All valid + documented (v4.x):
component_layout,component_placeholder,component_locations,component_namespaces,make_command,csp_safeare all listed in the v4 upgrade/config changes. (livewire.laravel.com)component_locations/component_namespacesare also documented in the Components guide. (livewire.laravel.com)csp_safeis documented in CSP docs (enable CSP-safe mode via config). (livewire.laravel.com)
Official docs:
https://livewire.laravel.com/docs/4.x/upgrading
https://livewire.laravel.com/docs/4.x/components
https://livewire.laravel.com/docs/4.x/csp
Citations:
- 1: https://livewire.laravel.com/docs/4.x/components
- 2: https://livewire.laravel.com/docs/4.x/javascript
- 3: https://livewire.laravel.com/docs/4.x/javascript
- 4: https://livewire.laravel.com/docs/4.x/wire-model
- 5: https://livewire.laravel.com/docs/navigate
- 6: https://livewire.laravel.com/docs/4.x/upgrading
- 7: https://livewire.laravel.com/docs/4.x/components?utm_source=openai
- 8: https://livewire.laravel.com/docs/4.x/csp?utm_source=openai
Livewire.interceptRequest() does not exist in the official Livewire 4 API — use $wire.interceptRequest() instead.
The skill document recommends using Livewire.interceptRequest() for HTTP request lifecycle handling, but official Livewire 4 docs only document $wire.interceptRequest(). The global interceptor equivalents are Livewire.interceptAction() and Livewire.interceptMessage(), but there is no global Livewire.interceptRequest().
All other claims in the affected lines (Route::livewire(), $wire.intercept() methods, wire:model.deep, wire:navigate:scroll, and config keys) are valid and documented.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.cursor/skills/livewire-development/SKILL.md around lines 82 - 86, The doc
incorrectly references a non-existent global API Livewire.interceptRequest();
update the text to instruct using the instance method $wire.interceptRequest()
for HTTP request lifecycle interception, and clarify that the global equivalents
only exist for actions/messages (Livewire.interceptAction() and
Livewire.interceptMessage()) — remove or replace any occurrences of
Livewire.interceptRequest() with $wire.interceptRequest() and add a short note
that no global Livewire.interceptRequest() exists.
…plate, and README - Fix ![[templates/...]] expansion artifact in sync-agents SKILL.md source by rephrasing to use ![[path]] instead of the path that triggers expansion; regenerate all three IDE mirrors (.cursor, .claude, .github) - Add missing downloads_30d: field to laravel-package.md template frontmatter to match existing field-to-source mapping table - Align wikilink casing in .steering/github-copilot/ files: [[Github Copilot/...]] → [[github-copilot/...]] (Settings, Agent MCP, Agents, Environment, Skills, plugins/Deep Wiki) - Fix Skills.md related field: change nested-list format [['...']] to plain string list consistent with other steering docs - Add /idea agent row to README.md Agents table Agent-Logs-Url: https://github.com/ChrisThompsonTLDR/agentic-programming/sessions/ea569959-ad40-4f33-b909-19aec198993a Co-authored-by: ChrisThompsonTLDR <348801+ChrisThompsonTLDR@users.noreply.github.com>
Applied all changes from the review thread in commit 08824cf:
|
|
@BugBot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 08824cf. Configure here.
|
@coderabbitai full review |
✅ Actions performedFull review triggered. |
There was a problem hiding this comment.
Actionable comments posted: 9
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
♻️ Duplicate comments (11)
.steering/mcp.json (1)
16-20:⚠️ Potential issue | 🟠 MajorUse environment variable for GitHub authentication instead of hardcoded placeholder.
This issue was already identified in a previous review. Replace the hardcoded placeholder with environment-variable expansion following the documented MCP pattern:
"Authorization": "Bearer ${GITHUB_PAT}".🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/mcp.json around lines 16 - 20, The "github" configuration currently hardcodes the placeholder token in the "Authorization" header; update the "Authorization" value under the "github" object to use environment-variable expansion (e.g., "Bearer ${GITHUB_PAT}") instead of "Bearer YOUR_GITHUB_PAT", ensuring the project follows the documented MCP pattern and that deployments provide GITHUB_PAT at runtime..github/skills/laravel-research/SKILL.md (2)
54-54:⚠️ Potential issue | 🟠 Major
authorresolution should not depend only ondev-master.This rule can leave
authorempty for packages that publish metadata underdev-main. Please include a fallback.Proposed fix
-| `author` | Packagist JSON (`packagist.org/packages/<v>/<p>.json`) → `versions.dev-master.authors[0].name` | +| `author` | Packagist JSON (`packagist.org/packages/<v>/<p>.json`) → first available of `versions.dev-master.authors[0].name` or `versions["dev-main"].authors[0].name` |Run this read-only verification to confirm the branch-key variability and current rule usage:
#!/bin/bash set -euo pipefail echo "Current author rule in file:" sed -n '50,58p' .github/skills/laravel-research/SKILL.md echo echo "Packagist version-key check:" for pkg in laravel/pint livewire/flux larastan/larastan; do echo "=== $pkg ===" curl -fsSL "https://packagist.org/packages/${pkg}.json" | jq -r ' .package.versions as $v | { has_dev_master: ($v["dev-master"] != null), has_dev_main: ($v["dev-main"] != null), author_dev_master: ($v["dev-master"].authors[0].name // null), author_dev_main: ($v["dev-main"].authors[0].name // null) }' doneExpected result: at least one package exposes
authorviadev-mainwhiledev-masteris missing.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/skills/laravel-research/SKILL.md at line 54, The `author` Packagist rule currently only reads versions.dev-master.authors[0].name which misses packages that publish under dev-main; update the rule row (the table cell containing "`author` | Packagist JSON (`packagist.org/packages/<v>/<p>.json`) → `versions.dev-master.authors[0].name`") to use a fallback to dev-main (e.g., resolve to versions.dev-master.authors[0].name or, if null, versions.dev-main.authors[0].name) so the author value is populated for packages using dev-main.
9-46:⚠️ Potential issue | 🟠 MajorOuter template fence is still structurally broken.
The
```markdownwrapper is interrupted by the nested```bashfence, so the “exact template” block won’t render as intended.Proposed fix
-```markdown +````markdown --- org: VENDOR @@ ## Installation ```bash composer_require@@
Resources
- [[Laravel Packages]] (related)
-```
+````</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.github/skills/laravel-research/SKILL.md around lines 9 - 46, The template's
outer code fence (the opening "markdown") is broken by the nested "bash"
fence—replace the outer triple backticks with a four-backtick fence (i.e., open
with "markdown" and close with "") so the inner "bash" and the final closing "" are treated as literal content; ensure you update both the opening
fence ("markdown") and the final closing fence ("") in SKILL.md so the
whole exact-template block renders correctly.</details> </blockquote></details> <details> <summary>.github/agents/research-mcp.agent.md (1)</summary><blockquote> `27-33`: _⚠️ Potential issue_ | _🟠 Major_ **Instruction/runtime mismatch: MCP-specific guidance without MCP config.** Lines 27–33 still reference "GitHub MCP + DeepWiki" for repository access, but the frontmatter (lines 1-5) no longer declares `mcp-servers` configuration. This creates ambiguity about the actual execution path. Either re-introduce explicit MCP server configuration in the frontmatter, or update the instruction text to reference the available tools (`read`, `search`, `browser`) without MCP-specific assumptions. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.github/agents/research-mcp.agent.md around lines 27 - 33, The section referencing "GitHub MCP + DeepWiki" assumes an MCP server but the frontmatter no longer declares an mcp-servers configuration; either restore an explicit mcp-servers entry in the frontmatter or change the lines that mention "GitHub MCP + DeepWiki" (the block listing repo, package, docs, etc.) to instead instruct using the available tools (`read`, `search`, `browser`) and remove MCP-specific wording so the instructions match the actual runtime configuration. ``` </details> </blockquote></details> <details> <summary>.steering/README.md (1)</summary><blockquote> `27-31`: _⚠️ Potential issue_ | _🟠 Major_ **Current branch state is still out of sync with documented mirror workflow.** `Verify steering sync` is failing, so this remains a merge blocker until regenerated mirrors are committed. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/README.md around lines 27 - 31, The branch is out of sync with the documented mirror workflow; run the mirror generation step that the Verify steering sync CI uses (replicate edits from .steering/ into the three IDE roots under agents/ and skills/ and the three template paths), regenerate the mirrors so .steering/** and every mirrored file match the expected state, then commit the updated .steering/** and all updated mirror files in a single change before pushing so the Verify steering sync job passes. ``` </details> </blockquote></details> <details> <summary>.github/agents/laravel-package.agent.md (1)</summary><blockquote> `34-34`: _⚠️ Potential issue_ | _🟠 Major_ **`author` mapping still points to a non-existent Packagist top-level field.** The path `authors[0].name` at package root is not where Packagist exposes author data; this will keep producing empty/incorrect values for `author`. ```web For Packagist package JSON (e.g., https://packagist.org/packages/spatie/laravel-permission.json), where is author information stored: top-level `package.authors` or under each entry in `package.versions[*].authors`? ``` <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.github/agents/laravel-package.agent.md at line 34, The `author` mapping currently points to a non-existent top-level Packagist field; update the mapping so it reads author data from each package version instead (e.g., change the path for `author` to something like `package.versions[*].authors[0].name` or, if you resolve the latest version key, `package.versions[<latest-version>].authors[0].name`) so the `author` column pulls the actual author name from the versions' authors array rather than `authors[0].name` at package root. ``` </details> </blockquote></details> <details> <summary>.steering/templates/laravel-package.md (1)</summary><blockquote> `1-35`: _⚠️ Potential issue_ | _🟡 Minor_ **Resolve remaining frontmatter-to-mapping inconsistency.** The frontmatter fields `packagist_url` (line 11) and `forks` (line 14) are not documented in the "Field-to-Source Mapping" table (lines 25-35). Agents using this template may skip these fields or be confused about their sources. <details> <summary>📋 Proposed fix to complete the mapping</summary> ```diff | `docs_url` | GitHub repo `homepage` field or README docs link | | `tags` | GitHub repo `topics` + relevant feature keywords | +| `packagist_url` | `https://packagist.org/packages/<vendor>/<package>` | +| `forks` | GitHub MCP → `forks_count` | **All fields must be attempted.** Only leave a field blank if the data genuinely does not exist after checking its source. ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/templates/laravel-package.md around lines 1 - 35, Add explicit mappings for the missing frontmatter fields `packagist_url` and `forks` to the "Field-to-Source Mapping" table: map `packagist_url` to the Packagist package URL (packagist.org/packages/<vendor>/<package>) and map `forks` to the GitHub MCP `forks_count`; update the table rows accordingly in the template so agents know to source `packagist_url` from Packagist and `forks` from GitHub. ``` </details> </blockquote></details> <details> <summary>.github/skills/tailwindcss-development/SKILL.md (1)</summary><blockquote> `3-3`: _⚠️ Potential issue_ | _🟠 Major_ **Version support is still inconsistent (v3/v4 claim vs v4-only rules).** Line 3 advertises Tailwind v3/v4 scope, but Lines 24–25 require v4-only behavior. Please either make the skill explicitly v4-only in the description or add version-gated v3 guidance. ```web In Tailwind CSS official docs, which major versions support `corePlugins`, and what is the recommended import/config pattern for v3 vs v4? ``` Also applies to: 24-25 <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.github/skills/tailwindcss-development/SKILL.md at line 3, The description in .github/skills/tailwindcss-development/SKILL.md is inconsistent about version support (the "description" field claims v3/v4 but the rules at lines 24–25 require v4-only behavior); either make the skill explicitly "Tailwind v4-only" in the description and remove v3 references from lines 24–25, or add a short version-gated subsection that documents v3 vs v4 differences (including corePlugins availability and recommended import/config patterns) and update the rules at lines 24–25 to be explicit about which behavior applies to which version. ``` </details> </blockquote></details> <details> <summary>.steering/skills/fluxui-free-development/SKILL.md (1)</summary><blockquote> `3-3`: _⚠️ Potential issue_ | _🟠 Major_ **Frontmatter description contradicts Free-edition scope.** Line 3 advertises components like `date-pickers` and `kanban`, but Line 32 restricts the available components to the Free edition list (which excludes these). This can cause incorrect skill activation for Pro-only features. <details> <summary>Suggested frontmatter correction</summary> ```diff -description: "Use this skill for Flux UI development in Livewire applications only. Trigger when working with <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, tables, or other interactive elements. Covers: flux: components (buttons, inputs, modals, forms, tables, date-pickers, kanban, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for non-Livewire frameworks or non-component styling." +description: "Use this skill for Flux UI Free development in Livewire applications only. Trigger when working with free <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, and other interactive elements available in the free edition. Covers: free Flux components (buttons, inputs, modals, forms, tables, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for Pro-only Flux components, non-Livewire frameworks, or non-component styling." ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/skills/fluxui-free-development/SKILL.md at line 3, The frontmatter "description" string in SKILL.md currently lists Pro-only components (e.g., "date-pickers", "kanban") that contradict the Free-edition constraints later in the file; update the description to only mention components and features available in the Free edition or explicitly note Pro-only items as excluded to avoid incorrect skill activation—edit the "description" value in SKILL.md (the frontmatter description field) to align with the Free edition component list or add an explicit clause like "Free edition: excludes date-pickers, kanban, etc." so the skill trigger rules remain consistent. ``` </details> </blockquote></details> <details> <summary>.claude/skills/fluxui-free-development/SKILL.md (1)</summary><blockquote> `3-3`: _⚠️ Potential issue_ | _🟠 Major_ **Frontmatter description contradicts Free-edition scope.** Line 3 advertises components like `date-pickers` and `kanban`, but Line 32 restricts the available components to the Free edition list (which excludes these). This can cause incorrect skill activation for Pro-only features. <details> <summary>Suggested frontmatter correction</summary> ```diff -description: "Use this skill for Flux UI development in Livewire applications only. Trigger when working with <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, tables, or other interactive elements. Covers: flux: components (buttons, inputs, modals, forms, tables, date-pickers, kanban, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for non-Livewire frameworks or non-component styling." +description: "Use this skill for Flux UI Free development in Livewire applications only. Trigger when working with free <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, and other interactive elements available in the free edition. Covers: free Flux components (buttons, inputs, modals, forms, tables, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for Pro-only Flux components, non-Livewire frameworks, or non-component styling." ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.claude/skills/fluxui-free-development/SKILL.md at line 3, The frontmatter "description" field currently advertises Pro-only components (e.g., "date-pickers", "kanban") that contradict the Free-edition component list; update the "description" value to only list components available in the Free edition or explicitly note that Pro-only components are excluded, removing or qualifying mentions of date-pickers and kanban so the skill activation matches the Free-edition scope and the Free edition list referenced elsewhere in the SKILL.md. ``` </details> </blockquote></details> <details> <summary>.steering/skills/sync-agents/SKILL.md (1)</summary><blockquote> `20-20`: _⚠️ Potential issue_ | _🟠 Major_ **Literal Obsidian embed examples can still trigger expansion in sync/CI.** This line still includes raw `![[...]]` patterns in the document body, which can be interpreted by your build/verification flow instead of remaining instructional text. <details> <summary>💡 Proposed safe wording update</summary> ```diff -1. **Build** — In each agent file’s **body** (after opening YAML), expand **`![[path]]`** embed links for **`templates/`** paths by default. For **`research-skill.agent.md`**, also expand **`![[github-copilot/...]]`** embeds only in the **`.cursor/agents/`** output; **`.github`** / **`.claude`** replace those embeds with a pointer to **`.steering/github-copilot/Skills.md`**. With `#Heading`, inline the `## Heading` section only. Leave other `![[...]]` as-is. +1. **Build** — In each agent file’s **body** (after opening YAML), expand wiki embeds (Obsidian embed syntax) for `templates/` paths by default. For **`research-skill.agent.md`**, also expand `github-copilot/` embeds only in the **`.cursor/agents/`** output; **`.github`** / **`.claude`** replace those embeds with a pointer to **`.steering/github-copilot/Skills.md`**. With `#Heading`, inline the `## Heading` section only. Leave other embeds as-is. ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/skills/sync-agents/SKILL.md at line 20, The literal Obsidian embed examples in the document body (e.g. ![[path]], ![[github-copilot/...]], ![[...]]) can be picked up by the sync/CI expansion; make them inert by escaping or quoting the patterns (use inline code or a fenced code block or HTML entities) so they remain instructional text, and update the wording that references templates/, research-skill.agent.md, .cursor/agents/, .github, .claude, .steering/github-copilot/Skills.md, `#Heading` and ## Heading to use those escaped forms so the build will not expand embeds while preserving the intended guidance about expansion rules. ``` </details> </blockquote></details> </blockquote></details> <details> <summary>🟡 Minor comments (14)</summary><blockquote> <details> <summary>.github/skills/skill-research/skill-template.md-63-65 (1)</summary><blockquote> `63-65`: _⚠️ Potential issue_ | _🟡 Minor_ **Add language identifier to the fenced code block.** The validation command code block should specify `bash` or `shell` as the language identifier. <details> <summary>📝 Proposed fix</summary> ```diff # Validation Use [skills-ref](https://github.com/agentskills/agentskills/tree/main/skills-ref): -``` +```bash skills-ref validate ./my-skill ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ```` Verify each finding against the current code and only fix it if needed. In @.github/skills/skill-research/skill-template.md around lines 63 - 65, Update the fenced code block containing the command "skills-ref validate ./my-skill" to include a language identifier (e.g., bash or shell) so the block becomes ```bash (or ```shell) followed by the command; this change should be applied to the fenced block that currently reads ``` skills-ref validate ./my-skill to ensure proper syntax highlighting. ```` </details> </blockquote></details> <details> <summary>.github/skills/skill-research/skill-template.md-25-32 (1)</summary><blockquote> `25-32`: _⚠️ Potential issue_ | _🟡 Minor_ **Add language identifier to the fenced code block.** The directory structure code block should specify a language identifier for proper syntax highlighting and rendering. <details> <summary>📝 Proposed fix</summary> ```diff # Directory Structure -``` +```text skill-name/ ├── SKILL.md # This file ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ```` Verify each finding against the current code and only fix it if needed. In @.github/skills/skill-research/skill-template.md around lines 25 - 32, Update the fenced directory-structure code block in SKILL.md to include a language identifier (e.g., add "text" after the opening ```), so the block beginning with ``` is changed to ```text to enable proper syntax highlighting; modify the block in .github/skills/skill-research/skill-template.md where the directory listing sample appears. ```` </details> </blockquote></details> <details> <summary>.github/skills/agentic-programming/SKILL.md-30-32 (1)</summary><blockquote> `30-32`: _⚠️ Potential issue_ | _🟡 Minor_ **Add fence languages to command examples.** Both command blocks are missing a language identifier and trigger MD040. <details> <summary>Proposed fix</summary> ```diff -``` +```bash /laravel-package <vendor/package> ``` @@ -``` +```bash /laravel-package spatie/laravel-markdown-response ``` ``` </details> Also applies to: 36-38 <details> <summary>🤖 Prompt for AI Agents</summary> ```` Verify each finding against the current code and only fix it if needed. In @.github/skills/agentic-programming/SKILL.md around lines 30 - 32, Two fenced code blocks showing the commands "/laravel-package <vendor/package>" and "/laravel-package spatie/laravel-markdown-response" lack a language tag and trigger MD040; update each opening fence to include "bash" (i.e., change ``` to ```bash for both command examples) so the blocks are explicitly marked as bash commands. ```` </details> </blockquote></details> <details> <summary>.cursor/skills/skill-template/SKILL.md-25-32 (1)</summary><blockquote> `25-32`: _⚠️ Potential issue_ | _🟡 Minor_ **Specify languages for fenced code blocks.** These fences are unlabeled and trigger MD040. <details> <summary>Proposed fix</summary> ```diff -``` +```text skill-name/ ├── SKILL.md # This file ├── scripts/ # Optional: Executable code (e.g., extract.py) ├── references/ # Optional: Docs (e.g., REFERENCE.md) ├── assets/ # Optional: Templates, images, data └── ... # Additional files ``` @@ -``` +```bash skills-ref validate ./my-skill ``` ``` </details> Also applies to: 63-65 <details> <summary>🤖 Prompt for AI Agents</summary> ```` Verify each finding against the current code and only fix it if needed. In @.cursor/skills/skill-template/SKILL.md around lines 25 - 32, The fenced code blocks in SKILL.md are unlabeled, causing MD040; update the three unlabeled blocks in SKILL.md (the directory tree block and the example command block(s) around the "skills-ref validate ./my-skill" usage) to include explicit language labels—use "text" for the directory tree block and "bash" (or "sh") for the command examples—so the tree and the command output are properly annotated; edit the SKILL.md file replacing the unlabeled ``` fences around the directory listing and the command example with ```text and ```bash respectively. ```` </details> </blockquote></details> <details> <summary>.steering/github-copilot/Memories.md-61-61 (1)</summary><blockquote> `61-61`: _⚠️ Potential issue_ | _🟡 Minor_ **Fix GitHub capitalization in wikilink.** The official product name is "GitHub Copilot" with a capital "H". The Obsidian wikilink should match. <details> <summary>📝 Proposed fix</summary> ```diff -[[Github Copilot]] +[[GitHub Copilot]] ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/Memories.md at line 61, Fix the wikilink capitalization for the GitHub product name by updating the Obsidian link text from [[Github Copilot]] to [[GitHub Copilot]] in the Memories.md content so the link matches the official "GitHub Copilot" casing. ``` </details> </blockquote></details> <details> <summary>.steering/github-copilot/Skills.md-80-81 (1)</summary><blockquote> `80-81`: _⚠️ Potential issue_ | _🟡 Minor_ **Normalize internal wikilink casing to avoid broken note resolution.** Line 81 uses `[[GitHub Copilot/...]]` while earlier references use `[[github-copilot/...]]`. Keep one canonical path style to prevent dead links in mirrors/Obsidian notes. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/Skills.md around lines 80 - 81, Normalize the wikilink casing so all internal links use the same canonical path style: replace the capitalized links `[[GitHub Copilot/Agents]]` and `[[GitHub Copilot/Memories]]` with the lowercase forms used elsewhere (e.g. `[[github-copilot/Agents]]` or `[[github-copilot/memories]]` depending on the established convention) so they match existing references and avoid broken resolution; ensure `[[Laravel Packages]]` remains unchanged if it already follows the chosen canonical casing. ``` </details> </blockquote></details> <details> <summary>.claude/skills/agentic-programming/SKILL.md-30-32 (1)</summary><blockquote> `30-32`: _⚠️ Potential issue_ | _🟡 Minor_ **Add languages to fenced code blocks.** Line 30 and Line 36 use unlabeled code fences, which will keep triggering `MD040`. <details> <summary>Suggested fix</summary> ```diff -``` +```text /laravel-package <vendor/package> ``` -``` +```text /laravel-package spatie/laravel-markdown-response ``` ``` </details> Also applies to: 36-38 <details> <summary>🤖 Prompt for AI Agents</summary> ```` Verify each finding against the current code and only fix it if needed. In @.claude/skills/agentic-programming/SKILL.md around lines 30 - 32, Add a language label to the unlabeled fenced code blocks that contain the lines "/laravel-package <vendor/package>" and "/laravel-package spatie/laravel-markdown-response" so they no longer trigger MD040; update those triple-backtick fences to include a language token (e.g., "text") immediately after the opening ``` for both occurrences (the block showing "/laravel-package <vendor/package>" and the example block "/laravel-package spatie/laravel-markdown-response"). ```` </details> </blockquote></details> <details> <summary>.steering/laravel-packages/pestphp__pest.md-25-25 (1)</summary><blockquote> `25-25`: _⚠️ Potential issue_ | _🟡 Minor_ **Link target does not match the “Writing tests” label.** Line 25 labels the link as “Writing tests” but points to `/docs/installation`, which is confusing for readers. Point it to the writing-tests page (or relabel it as installation). <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/laravel-packages/pestphp__pest.md at line 25, The link label "Writing tests" in the line containing "**Readable API:** `expect()`, datasets, hooks, and plugins—see [Writing tests](https://pestphp.com/docs/installation)" points to the installation page; update the href to the correct writing-tests page (e.g., https://pestphp.com/docs/writing-tests) or change the link text to "Installation" so label and target match, keeping the surrounding sentence and markdown formatting intact. ``` </details> </blockquote></details> <details> <summary>.steering/github-copilot/SDK.md-29-37 (1)</summary><blockquote> `29-37`: _⚠️ Potential issue_ | _🟡 Minor_ **Fix markdownlint violations (table spacing + fenced language).** The deployment table is missing required blank-line padding, and the directory-structure fence has no language identifier. <details> <summary>Proposed patch</summary> ```diff ## Key Features (from SKILL.md commits) - **Architecture**: Transport modes (stdio/TCP). @@ -- **Deployment Patterns**: - | Pattern | Description | - |---------|-------------| - | Local CLI | `copilot-sdk run` | - | External Server | TCP/HTTP endpoints | - | Bundled CLI | Embed in apps | - | Docker Compose | Multi-container | - | Session Isolation | Prod checklist | +- **Deployment Patterns**: + + | Pattern | Description | + |---------|-------------| + | Local CLI | `copilot-sdk run` | + | External Server | TCP/HTTP endpoints | + | Bundled CLI | Embed in apps | + | Docker Compose | Multi-container | + | Session Isolation | Prod checklist | @@ -``` +```text .github/skills/copilot-sdk/ ├── SKILL.md # Main instructions (~900 lines) └── references/ # Supporting docs/examples └── (various files for tests/acceptance criteria) ``` ``` </details> Also applies to: 42-47 <details> <summary>🤖 Prompt for AI Agents</summary> ```` Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/SDK.md around lines 29 - 37, The Markdown has lint issues: add required blank lines before and after the Deployment Patterns table (the table block starting with "| Pattern | Description |" and ending with "Deny-by-default model.") so it is properly padded, and change the directory-structure fenced code block to include a language identifier (use ```text) instead of plain ```; apply the same blank-line/table padding and fence-language fixes to the other occurrence referenced (lines 42-47). ```` </details> </blockquote></details> <details> <summary>.steering/agents/laravel-package.agent.md-23-29 (1)</summary><blockquote> `23-29`: _⚠️ Potential issue_ | _🟡 Minor_ **Instruction mismatch: “inlined mapping” is not actually inlined.** Line 23 says the **Field-to-Source Mapping** is inlined below, but Line 29 is an Obsidian embed pointer. Please either inline the mapping content here or update wording to explicitly require embed expansion before use. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/agents/laravel-package.agent.md around lines 23 - 29, The "Field-to-Source Mapping" referenced in the steps is not actually inlined — the agent sees an Obsidian embed pointer (![[templates/laravel-package#Field-to-Source Mapping]]) instead; fix by either inlining the full mapping content directly under the "## Field-to-Source Mapping" heading in the agent prompt or update the instruction text in the agent spec (the step that currently reads "Generate the note from `.steering/templates/laravel-package.md` (YAML + body, excluding the Field-to-Source Mapping section — that section is agent reference only). Use the **Field-to-Source Mapping** section inlined below") to explicitly require resolving/expanding the embed before use; ensure the file/section name "Field-to-Source Mapping" and the embed token "![[templates/laravel-package#Field-to-Source Mapping]]" are updated so the agent can locate either the inlined content or the expansion step. ``` </details> </blockquote></details> <details> <summary>.steering/cursor/Plugins.md-95-95 (1)</summary><blockquote> `95-95`: _⚠️ Potential issue_ | _🟡 Minor_ **Clarify the referenced sync-skills path to avoid ambiguity.** `agents/sync-skills.md` is not repo-absolute like the rest of this table and can be misread. Use the fully qualified path (for example, `.steering/agents/sync-skills.md`) consistently. <details> <summary>Suggested doc tweak</summary> ```diff -| `.steering/skills/sync-skills/SKILL.md` (or `agents/sync-skills.md`) | How **steering** replicates skills/agents into IDE paths (parallel concern to “install a plugin”). | +| `.steering/skills/sync-skills/SKILL.md` (or `.steering/agents/sync-skills.md`) | How **steering** replicates skills/agents into IDE paths (parallel concern to “install a plugin”). | ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/cursor/Plugins.md at line 95, Update the table entry so the referenced path is repository-absolute and unambiguous: replace the ambiguous "agents/sync-skills.md" with the fully qualified path ".steering/agents/sync-skills.md" (and ensure any sibling reference `.steering/skills/sync-skills/SKILL.md` follows the same fully-qualified pattern if intended); edit the table cell text containing `.steering/skills/sync-skills/SKILL.md (or agents/sync-skills.md)` to use consistent, fully-qualified paths like `.steering/skills/sync-skills/SKILL.md` and `.steering/agents/sync-skills.md` so readers cannot misinterpret the location. ``` </details> </blockquote></details> <details> <summary>.steering/agents/sync-agents.md-23-23 (1)</summary><blockquote> `23-23`: _⚠️ Potential issue_ | _🟡 Minor_ **Resolve markdownlint MD038 in heading delimiter examples.** The code spans `` `## ` `` and `` `# ` `` include trailing spaces, which triggers MD038. Rephrase without spaces in code spans. <details> <summary>Suggested lint-safe wording</summary> ```diff - - With `#Heading`, include only the `## Heading` section: from that heading until the next `## `, an `---` line on its own, or an `# ` H1. + - With `#Heading`, include only the `## Heading` section: from that heading until the next H2 heading (`##`), an `---` line on its own, or an H1 heading (`#`). ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/agents/sync-agents.md at line 23, The MD038 failure is caused by trailing spaces inside the inline code spans shown in the example (the spans currently written as `## ` and `# `); update those spans to remove the trailing space (write them as `##` and `#`) so the examples still convey the heading delimiters (e.g., where you describe "#Heading" and "## Heading") but use lint-safe inline code tokens without trailing spaces. ``` </details> </blockquote></details> <details> <summary>.steering/cursor/Skills.md-30-37 (1)</summary><blockquote> `30-37`: _⚠️ Potential issue_ | _🟡 Minor_ **Add blank lines after table blocks to satisfy markdownlint (MD058).** Two table sections are followed immediately by prose. Insert one empty line after each table. <details> <summary>Proposed fix</summary> ```diff | **`.agents/skills/`** | Project (alternate layout in docs) | | **`~/.cursor/skills/`** | User (global) | + **Compatibility paths** (also scanned): **`.claude/skills/`**, **`.codex/skills/`**, and the matching **`~/.claude/`** / **`~/.codex/`** trees. ``` ```diff | `metadata` | No | Arbitrary key-value map. | | `disable-model-invocation` | No | If **`true`**, only applies when the user runs **`/skill-name`** (no automatic inclusion). | + **Repo spec:** This project’s **`allowed-tools`** and stricter field notes live in **`.steering/templates/skill.md`** (mirrored into **`.cursor/skills/skill-template/SKILL.md`** for authoring). ``` </details> Also applies to: 68-77 <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/cursor/Skills.md around lines 30 - 37, Add a single blank line after each Markdown table to satisfy markdownlint rule MD058: insert one empty line immediately after the table that begins with "| Location | Scope |" (the project/user skills table) and likewise after the other table referenced around lines 68-77 so that the subsequent prose is separated from the table. ``` </details> </blockquote></details> <details> <summary>README.md-112-131 (1)</summary><blockquote> `112-131`: _⚠️ Potential issue_ | _🟡 Minor_ **Add languages to fenced code blocks to satisfy markdown linting.** The fences starting on Line 112, Line 143, and Line 149 are unlabeled (`MD040`). <details> <summary>Suggested doc-lint patch</summary> ```diff -``` +```text .steering/ ... -``` +``` -``` +```text /research-skill https://example.com/org/repo/tree/main/path/to/skill -``` +``` -``` +```text .steering/skills/<namespace>__<skill-name>.md -``` +``` ``` </details> Also applies to: 143-151 <details> <summary>🤖 Prompt for AI Agents</summary> ```` Verify each finding against the current code and only fix it if needed. In `@README.md` around lines 112 - 131, Several fenced code blocks in README.md (the directory-tree block and the example inline code blocks shown in the diff) are unlabeled and trigger MD040; update each triple-backtick fence to include a language tag (e.g., use "text") so the blocks become ```text ... ```; look for the directory tree block and the three example code fences shown in the diff and add the language label to the opening backticks for each (these are the unlabeled fences in the README.md snippet). ```` </details> </blockquote></details> </blockquote></details> <details> <summary>🧹 Nitpick comments (5)</summary><blockquote> <details> <summary>.claude/skills/phpunit-laravel/SKILL.md (1)</summary><blockquote> `1-26`: **LGTM!** The PHPUnit skill documentation is clear and comprehensive. The workflow (create with `--phpunit`, run targeted tests, verify full suite) is sensible, and the prohibition on removing test files without approval is an important safeguard. **Optional style refinement:** Lines 22-24 begin three consecutive bullets with "To run..." / "To filter...". Consider varying the sentence structure for smoother reading (e.g., "Run all tests: ...", "Run a specific file: ...", "Filter by test name: ..."), but this is purely stylistic. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.claude/skills/phpunit-laravel/SKILL.md around lines 1 - 26, In the "Running Tests" section, change the three consecutive bullets that start with "To run..." / "To filter..." so they vary in phrasing; replace them with concise leading phrases such as "Run all tests: `php artisan test --compact`", "Run a specific file: `php artisan test --compact tests/Feature/ExampleTest.php`", and "Filter by test name: `php artisan test --compact --filter=testName`" to improve readability while keeping the commands and the existing command-prefix note unchanged. ``` </details> </blockquote></details> <details> <summary>.cursor/skills/agentic-programming/SKILL.md (1)</summary><blockquote> `30-38`: **Add language identifiers to fenced code blocks.** The code blocks at lines 30-32 and 36-38 should specify `bash` as the language identifier to improve syntax highlighting and meet Markdown best practices. <details> <summary>📝 Proposed fix</summary> ```diff -``` +```bash /laravel-package <vendor/package> ``` Example: -``` +```bash /laravel-package spatie/laravel-markdown-response ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ```` Verify each finding against the current code and only fix it if needed. In @.cursor/skills/agentic-programming/SKILL.md around lines 30 - 38, Add the language identifier "bash" to the two fenced code blocks containing the CLI snippet "/laravel-package <vendor/package>" and its example "/laravel-package spatie/laravel-markdown-response" so they become triple-backtick blocks starting with ```bash; update both occurrences in SKILL.md to ensure proper syntax highlighting and consistency with Markdown best practices. ```` </details> </blockquote></details> <details> <summary>.steering/templates/laravel-package.md (1)</summary><blockquote> `102-104`: **Specify language identifier for the code block.** The fenced code block at line 102 should declare its language (e.g., `http` for REST endpoint examples) to improve rendering and meet Markdown best practices. <details> <summary>📝 Proposed fix</summary> ```diff **API** (if applicable): -``` +```http POST /api/v1/package/upload/example-importer ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ```` Verify each finding against the current code and only fix it if needed. In @.steering/templates/laravel-package.md around lines 102 - 104, The fenced code block containing the REST example "POST /api/v1/package/upload/example-importer" should declare its language to improve rendering; update that fence to start with ```http (i.e., change the opening backticks before the line "POST /api/v1/package/upload/example-importer" to ```http) so the snippet is rendered as an HTTP request example. ```` </details> </blockquote></details> <details> <summary>scripts/sync-boost-ai-skills.py (2)</summary><blockquote> `402-406`: **Consider using `json.dumps` for manifest generation.** The manifest JSON is manually formatted with string interpolation. While this works for the current simple structure, using `json.dumps` would be safer if the manifest grows or if commit SHAs ever contain special characters (unlikely but defensive). <details> <summary>Suggested improvement</summary> ```diff +import json + # ... in main() ... manifest = STEERING_SKILLS / ".boost-ai-sync.json" - manifest.write_text( - '{\n "repo": "laravel/boost",\n "commit": "%s"\n}\n' % commit, - encoding="utf-8", - ) + manifest.write_text( + json.dumps({"repo": "laravel/boost", "commit": commit}, indent=2) + "\n", + encoding="utf-8", + ) ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@scripts/sync-boost-ai-skills.py` around lines 402 - 406, Replace the manual string interpolation when writing the manifest with a json-encoded payload: build a dict with the repo and commit values (use the existing commit variable), call json.dumps(...) to produce the content, and pass that string to manifest.write_text(..., encoding="utf-8") instead of the current formatted literal; update imports to include the json module if not present and keep the same manifest, STEERING_SKILLS, and write_text usage. ``` </details> --- `241-265`: **Consider documenting why the source file content is discarded.** The `write_pint_core` function reads the source file (line 242) but only to verify it exists—the actual SKILL.md content is hand-authored. While the banner mentions "(Blade branches merged)", a brief inline comment explaining why the upstream content isn't used would help future maintainers understand this is intentional. <details> <summary>Suggested clarification</summary> ```diff def write_pint_core(boost_root: Path, dest_dir: Path, rel_source: str, commit: str) -> None: - _ = (boost_root / rel_source).read_text(encoding="utf-8") # ensure path exists + # Read only to verify path exists; Boost's pint/core.blade.php has conditional + # Blade branches that don't translate cleanly, so we emit hand-authored guidance. + _ = (boost_root / rel_source).read_text(encoding="utf-8") ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@scripts/sync-boost-ai-skills.py` around lines 241 - 265, The function write_pint_core currently reads the source file via (boost_root / rel_source).read_text(...) only to assert the path exists but then discards the content; add a concise inline comment next to that read (or replace the read with an existence check) explaining that upstream SKILL.md content is intentionally not used because the SKILL is hand-authored here (and the banner notes Blade branches merged), and reference rel_source and commit so future maintainers understand this is deliberate and not a bug. ``` </details> </blockquote></details> </blockquote></details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: Organization UI **Review profile**: CHILL **Plan**: Pro **Run ID**: `93f13706-a992-4824-8c42-fe9a7fe26dba` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 5e51623985cc91600cfa4f7fc3d1186678412b9f and 08824cf6f0cd0e9d113526c98b0ba4c4b086b45a. </details> <details> <summary>⛔ Files ignored due to path filters (2)</summary> * `scripts/__pycache__/regenerate-ide-mirrors.cpython-312.pyc` is excluded by `!**/*.pyc` * `scripts/__pycache__/sync-boost-ai-skills.cpython-312.pyc` is excluded by `!**/*.pyc` </details> <details> <summary>📒 Files selected for processing (123)</summary> * `.claude/agents/idea.agent.md` * `.claude/agents/laravel-package.agent.md` * `.claude/agents/research-mcp.agent.md` * `.claude/agents/research-skill.agent.md` * `.claude/agents/sync-agents.md` * `.claude/agents/sync-skills.md` * `.claude/skills/agentic-programming/SKILL.md` * `.claude/skills/fluxui-free-development/SKILL.md` * `.claude/skills/fluxui-pro-development/SKILL.md` * `.claude/skills/laravel-pint/SKILL.md` * `.claude/skills/laravel-research/SKILL.md` * `.claude/skills/laravel-sail/SKILL.md` * `.claude/skills/livewire-development/SKILL.md` * `.claude/skills/pest-testing/SKILL.md` * `.claude/skills/phpunit-laravel/SKILL.md` * `.claude/skills/skill-research/SKILL.md` * `.claude/skills/skill-template/SKILL.md` * `.claude/skills/sync-agents/SKILL.md` * `.claude/skills/sync-skills/SKILL.md` * `.claude/skills/tailwindcss-development/SKILL.md` * `.cursor/agents/idea.agent.md` * `.cursor/agents/laravel-package.agent.md` * `.cursor/agents/research-mcp.agent.md` * `.cursor/agents/research-skill.agent.md` * `.cursor/agents/sync-agents.md` * `.cursor/agents/sync-skills.md` * `.cursor/skills/agentic-programming/SKILL.md` * `.cursor/skills/fluxui-free-development/SKILL.md` * `.cursor/skills/fluxui-pro-development/SKILL.md` * `.cursor/skills/laravel-pint/SKILL.md` * `.cursor/skills/laravel-research/SKILL.md` * `.cursor/skills/laravel-sail/SKILL.md` * `.cursor/skills/livewire-development/SKILL.md` * `.cursor/skills/pest-testing/SKILL.md` * `.cursor/skills/phpunit-laravel/SKILL.md` * `.cursor/skills/skill-research/SKILL.md` * `.cursor/skills/skill-template/SKILL.md` * `.cursor/skills/sync-agents/SKILL.md` * `.cursor/skills/sync-skills/SKILL.md` * `.cursor/skills/tailwindcss-development/SKILL.md` * `.github/agents/idea.agent.md` * `.github/agents/laravel-package.agent.md` * `.github/agents/research-mcp.agent.md` * `.github/agents/research-skill.agent.md` * `.github/agents/skill-research.agent.md` * `.github/agents/sync-agents.md` * `.github/agents/sync-skills.md` * `.github/skills/agentic-programming/SKILL.md` * `.github/skills/fluxui-free-development/SKILL.md` * `.github/skills/fluxui-pro-development/SKILL.md` * `.github/skills/laravel-pint/SKILL.md` * `.github/skills/laravel-research/SKILL.md` * `.github/skills/laravel-research/laravel-package-template.md` * `.github/skills/laravel-sail/SKILL.md` * `.github/skills/livewire-development/SKILL.md` * `.github/skills/pest-testing/SKILL.md` * `.github/skills/phpunit-laravel/SKILL.md` * `.github/skills/skill-research/SKILL.md` * `.github/skills/skill-research/skill-template.md` * `.github/skills/sync-agents/SKILL.md` * `.github/skills/sync-skills/SKILL.md` * `.github/skills/tailwindcss-development/SKILL.md` * `.github/workflows/sync-skill-template.yml` * `.github/workflows/verify-steering-sync.yml` * `.steering/README.md` * `.steering/agents/idea.agent.md` * `.steering/agents/laravel-package.agent.md` * `.steering/agents/research-mcp.agent.md` * `.steering/agents/research-skill.agent.md` * `.steering/agents/sync-agents.md` * `.steering/agents/sync-skills.md` * `.steering/cursor/Agents.md` * `.steering/cursor/Hooks.md` * `.steering/cursor/Plugins.md` * `.steering/cursor/Rules.md` * `.steering/cursor/Skills.md` * `.steering/github-copilot/Agent MCP.md` * `.steering/github-copilot/Agentic Workflows.md` * `.steering/github-copilot/Agents.md` * `.steering/github-copilot/Environment.md` * `.steering/github-copilot/Memories.md` * `.steering/github-copilot/Plugins.md` * `.steering/github-copilot/Prompts.md` * `.steering/github-copilot/SDK.md` * `.steering/github-copilot/Settings.md` * `.steering/github-copilot/Skills.md` * `.steering/github-copilot/plugins/Deep Wiki.md` * `.steering/ideas/README.md` * `.steering/laravel-packages/README.md` * `.steering/laravel-packages/larastan__larastan.md` * `.steering/laravel-packages/laravel__pint.md` * `.steering/laravel-packages/livewire__flux.md` * `.steering/laravel-packages/pestphp__pest.md` * `.steering/mcp.json` * `.steering/mcps/deepwiki__mcp.md` * `.steering/mcps/github__github-mcp-server.md` * `.steering/mcps/upstash__context7.md` * `.steering/skills/.boost-ai-sync.json` * `.steering/skills/README.md` * `.steering/skills/SOURCES.md` * `.steering/skills/fluxui-free-development/SKILL.md` * `.steering/skills/fluxui-pro-development/SKILL.md` * `.steering/skills/laravel-pint/SKILL.md` * `.steering/skills/laravel-research/SKILL.md` * `.steering/skills/laravel-sail/SKILL.md` * `.steering/skills/livewire-development/SKILL.md` * `.steering/skills/pest-testing/SKILL.md` * `.steering/skills/phpunit-laravel/SKILL.md` * `.steering/skills/skill-research/SKILL.md` * `.steering/skills/sync-agents/SKILL.md` * `.steering/skills/sync-agents/tdd.md` * `.steering/skills/sync-skills/SKILL.md` * `.steering/skills/tailwindcss-development/SKILL.md` * `.steering/templates/AGENTS.md` * `.steering/templates/agent.md` * `.steering/templates/idea.md` * `.steering/templates/laravel-package.md` * `.steering/templates/skill.md` * `README.md` * `mcps/README.md` * `scripts/regenerate-ide-mirrors.py` * `scripts/sync-boost-ai-skills.py` * `templates/agents.md` </details> <details> <summary>💤 Files with no reviewable changes (7)</summary> * .steering/laravel-packages/README.md * .github/workflows/sync-skill-template.yml * .github/skills/laravel-research/laravel-package-template.md * .steering/templates/skill.md * mcps/README.md * templates/agents.md * .github/agents/skill-research.agent.md </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
|
@copilot address and resolve all of coderabbit's feedback on this PR. |
- scripts/regenerate-ide-mirrors.py:
- Fix strip_copilot_frontmatter to skip entire multiline tools: block
(not just the key line), matching behavior of mcp-servers: handling
- Add path traversal guard in resolve_one_embed: reject absolute paths,
paths with .. segments, and paths that resolve outside .steering/
- Prune stale agent mirrors after regeneration (delete .md files in
.github/.cursor/.claude/agents/ that no longer have a steering source)
- Prune stale skill mirrors after regeneration (skip special dirs:
skill-research, skill-template, agentic-programming)
- .github/workflows/verify-steering-sync.yml:
- Use git status --porcelain --untracked-files=all instead of
git diff --exit-code to catch newly generated untracked mirror files
- .steering/skills/laravel-research/SKILL.md:
- Fix nested backtick fence: use quadruple backticks for outer template
block so inner ```bash fences are not broken
- Fix Packagist author resolution: use package.maintainers[0].name or
package.authors[0].name instead of fragile dev-master key
- .steering/templates/laravel-package.md:
- Fix Packagist author resolution to not rely on dev-master key
- .steering/skills/fluxui-free-development/SKILL.md:
- Fix description: remove Pro-only components (date-pickers, kanban)
from Free edition description; scope to free components only
- .steering/laravel-packages/livewire__flux.md:
- Change Flux Pro default from assume-Pro to assume OSS-only unless
the target repo explicitly confirms Pro licensing
- .steering/mcp.json:
- Use ${PERPLEXITY_API_KEY} env var reference instead of empty string
- Use ${GITHUB_PAT} env var reference instead of literal placeholder
- .steering/agents/research-skill.agent.md:
- Add slug normalization guidance for namespace/skill-name
- .steering/agents/research-mcp.agent.md:
- Add slug normalization guidance for owner/name output path segments
- .steering/skills/skill-research/SKILL.md:
- Add slug normalization guidance for namespace/skill-name
Regenerate IDE mirrors for all changed sources.
Agent-Logs-Url: https://github.com/ChrisThompsonTLDR/agentic-programming/sessions/134b2103-769c-4946-afae-5892e200e232
Co-authored-by: ChrisThompsonTLDR <348801+ChrisThompsonTLDR@users.noreply.github.com>
…n regenerate-ide-mirrors.py Agent-Logs-Url: https://github.com/ChrisThompsonTLDR/agentic-programming/sessions/134b2103-769c-4946-afae-5892e200e232 Co-authored-by: ChrisThompsonTLDR <348801+ChrisThompsonTLDR@users.noreply.github.com>
Addressed in commits Script fixes (
CI fix (
Content fixes:
|
|
@BugBot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit dec0adb. Configure here.
|
@coderabbitai full review |
✅ Actions performedFull review triggered. |
There was a problem hiding this comment.
Actionable comments posted: 12
♻️ Duplicate comments (5)
.github/agents/research-mcp.agent.md (1)
28-34:⚠️ Potential issue | 🟠 MajorAlign runtime instructions with declared capabilities.
Line 28 still requires “GitHub MCP + DeepWiki,” but this file only declares generic tools in frontmatter. Please either reintroduce explicit MCP configuration or reword to tool-agnostic research steps so execution is deterministic.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/agents/research-mcp.agent.md around lines 28 - 34, Update the runtime instructions so they match the declared frontmatter tools: either reintroduce explicit MCP tool configuration (add the "GitHub MCP" and "DeepWiki" tool entries to the frontmatter and ensure the bullet "GitHub repo (via GitHub MCP + DeepWiki)" uses those tools), or make the bullets tool-agnostic by removing mentions of "GitHub MCP + DeepWiki" and changing that bullet to a generic instruction like "GitHub repo (via repository search/inspection)" so the steps (e.g., the "GitHub repo" bullet and the "npm / PyPI / registry" bullet) can be executed deterministically with the declared generic tools..steering/skills/laravel-research/SKILL.md (1)
54-54:⚠️ Potential issue | 🟠 MajorThe
authorfallback path is still incorrect and won't resolve authors reliably.The current fallback to
package.authors[0].namereferences a field that does not exist at the package level in Packagist JSON responses. Theauthorsfield only exists within version objects (versions.<version>.authors), not at the top-levelpackageobject.As indicated in the previous review, when
package.maintainersis empty or missing, the fallback should read from the most recent tagged release version's authors metadata:versions[<latest-release>].authors[0].name, notpackage.authors[0].name.This will cause the author field to remain blank for any package that lacks maintainers, even when valid author metadata exists in release versions.
📝 Proposed fix to use correct fallback path
-| `author` | Packagist JSON (`packagist.org/packages/<v>/<p>.json`) → `package.maintainers[0].name`, or fall back to `package.authors[0].name`; do not rely on the `versions.dev-master` key as it may be absent | +| `author` | Packagist JSON (`packagist.org/packages/<v>/<p>.json`) → `package.maintainers[0].name` (preferred); if maintainers is empty, fall back to the most recent tagged release: `versions[<latest-release>].authors[0].name` |🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/skills/laravel-research/SKILL.md at line 54, The author fallback is incorrect: instead of reading package.authors[0].name (which doesn't exist), update the specification for the `author` mapping to attempt package.maintainers[0].name and if empty/missing, select the most recent tagged release under `versions` and read its first author via versions[<latest-release>].authors[0].name; ensure the text clarifies how to determine the "latest tagged release" (ignore dev-master) and that maintainers are preferred over version authors..steering/README.md (1)
27-31:⚠️ Potential issue | 🟠 MajorSync contract is currently violated (CI failing).
Verify steering syncis failing right now, so mirrors were not fully regenerated/committed with this change set. Please regenerate and commit.cursor,.claude, and.githubmirrors together with.steeringupdates before merge.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/README.md around lines 27 - 31, The CI "Verify steering sync" failed because the mirrors for .cursor, .claude, and .github were not regenerated/committed alongside the changes to .steering; regenerate the mirror files from .steering (follow the README steps: edit under .steering, replicate to the three IDE roots and three template paths), ensure the three mirrors (.cursor, .claude, .github) are updated to match .steering, and commit .steering plus those mirror files in the same change so the CI verify-steering-sync check passes..github/skills/tailwindcss-development/SKILL.md (1)
3-3:⚠️ Potential issue | 🟠 MajorSkill description claims v3/v4 support but only implements v4 guidance.
The description at line 3 includes "Tailwind v3/v4 work," yet the skill body (lines 22–67) provides only v4-specific patterns. Line 24 unconditionally mandates "Always use Tailwind CSS v4," and the v4 Specifics section includes rules (like
corePluginsnot being supported) that do not apply to v3. This creates a mismatch: users invoking the skill on v3 projects will receive incorrect guidance.Recommended fix
Option 1 (simpler): Update the description to declare the skill as v4-only:
-description: "Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex/grid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v3/v4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML/CSS component, CSS file audits, build tool configuration, and vanilla CSS." +description: "Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex/grid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML/CSS component, CSS file audits, build tool configuration, and vanilla CSS."Option 2 (comprehensive): Add a "Tailwind CSS v3 Specifics" section and make line 24's mandate conditional based on detected project version.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/skills/tailwindcss-development/SKILL.md at line 3, The skill text currently claims "Tailwind v3/v4 work" but enforces v4-only rules (notably the line that mandates "Always use Tailwind CSS v4" and the "v4 Specifics" section); fix by either updating the top-level description to state v4-only, or implement proper v3 support: add a new "Tailwind CSS v3 Specifics" section with v3-appropriate guidance and change the hard mandate so the guidance is conditional based on detected project version (e.g., replace the unconditional "Always use Tailwind CSS v4" directive with wording or logic that selects v3 or v4 guidance when the project version is detected), and ensure rules about corePlugins and other v4-only features remain in the v4 section while v3 differences are documented in the v3 section.README.md (1)
5-11:⚠️ Potential issue | 🟠 MajorMirror drift is still blocking CI; regenerate and commit mirrors together.
Verify steering syncis failing right now, so this PR remains blocked until generated mirrors are refreshed from.steeringand committed in the same change set.🔁 Suggested remediation
+ # From repo root: + python3 scripts/regenerate-ide-mirrors.py + git diff -- .cursor .claude .github + # Commit regenerated mirror files together with .steering edits.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@README.md` around lines 5 - 11, CI is failing due to mirror drift between `.steering` and its mirrors; regenerate all mirrors from `.steering` (per `.steering/README.md`) and commit the regenerated files in the same PR so `.cursor`, `.claude`, and `.github` stay in sync; ensure the change set includes the updated mirrored files and re-run the Verify steering sync job to confirm the CI check passes.
🧹 Nitpick comments (16)
.steering/github-copilot/Agentic Workflows.md (2)
22-22: Drop marketing query params from permanent docs links.Line 22 includes UTM parameters. For long-lived internal docs, a clean URL is easier to maintain and review.
Proposed doc cleanup
-**Product / docs hub:** [github.github.com/gh-aw](https://github.github.com/gh-aw/?utm_source=blog-agentic-workflows-cta&utm_medium=blog&utm_campaign=agentic-workflows-tech-preview-feb-2026) +**Product / docs hub:** [github.github.com/gh-aw](https://github.github.com/gh-aw/)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/Agentic Workflows.md at line 22, The quoted docs link includes tracking query params; remove the UTM query string from the markdown link text so the "Product / docs hub:" link points to the clean permanent URL (replace "https://github.github.com/gh-aw/?utm_source=blog-agentic-workflows-cta&utm_medium=blog&utm_campaign=agentic-workflows-tech-preview-feb-2026" with "https://github.github.com/gh-aw" in the same markdown line).
15-15: Unify and verify the canonicalgh-awdocs domain.Line 15/22/37/44/56+/97+ mix
github.github.comandgithub.github.iofor seemingly the same documentation tree. This can cause stale or broken references over time. Please standardize on the canonical host and update all links consistently.Proposed doc cleanup
-gh_aw_hub: https://github.github.com/gh-aw/ +gh_aw_hub: https://github.github.io/gh-aw/Then align all in-body
gh-awdoc links to the same base host.Also applies to: 22-22, 37-37, 44-45, 56-60, 64-65, 97-100
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/Agentic Workflows.md at line 15, Replace all occurrences of the inconsistent gh-aw docs host with the canonical host (use github.github.io) by updating the gh_aw_hub entry and every in-body `gh-aw` link; specifically change the value for the gh_aw_hub key ("gh_aw_hub: https://github.github.com/gh-aw/") to the canonical URL ("https://github.github.io/gh-aw/") and search the document for any other gh-aw links (lines referenced in the review: 22, 37, 44-45, 56-60, 64-65, 97-100) to normalize them to the same github.github.io base so all references point to the unified canonical host..steering/github-copilot/Environment.md (1)
92-92: Consider link format consistency.The Obsidian link
[[GitHub Copilot]]uses a different format than therelatedfrontmatter links (e.g.,[[github-copilot/Agents]]). If this is a root-level index, it's fine; otherwise, consider using a consistent path prefix for all internal links.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/Environment.md at line 92, The Obsidian anchor [[GitHub Copilot]] is inconsistent with other internal links that use the github-copilot/ prefix (e.g., [[github-copilot/Agents]]); update the link to follow the same path style (for example replace [[GitHub Copilot]] with [[github-copilot/GitHub Copilot]] or the appropriate subpath) so all internal links use a consistent namespace, or confirm it's intentionally root-level and make other links match that pattern..steering/github-copilot/SDK.md (2)
29-37: Add blank lines around the deployment patterns table.Markdown tables should be surrounded by blank lines for proper rendering and to satisfy linting rules.
📝 Proposed fix
- **Deployment Patterns**: + | Pattern | Description | |---------|-------------| | Local CLI | `copilot-sdk run` | | External Server | TCP/HTTP endpoints | | Bundled CLI | Embed in apps | | Docker Compose | Multi-container | | Session Isolation | Prod checklist | + - **Permissions/Input Handlers**: Deny-by-default model.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/SDK.md around lines 29 - 37, The Markdown table under the "**Deployment Patterns**" heading lacks surrounding blank lines; update the section so there is an empty line before the "**Deployment Patterns**:" line and an empty line after the table (i.e., insert one blank line above the table start and one blank line after the table end) to ensure correct rendering and satisfy linting rules.
42-47: Add language identifier to the directory structure code block.The code block should specify
textas the language identifier to improve rendering and address the linting warning.📝 Proposed fix
-``` +```text .github/skills/copilot-sdk/ ├── SKILL.md # Main instructions (~900 lines) └── references/ # Supporting docs/examples └── (various files for tests/acceptance criteria)</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.steering/github-copilot/SDK.md around lines 42 - 47, Update the markdown
code fence that renders the directory tree for ".github/skills/copilot-sdk/" to
include the language identifier "text" (change the openingtotext) so
the block istext ...; locate the code block containing the directory
listing starting with ".github/skills/copilot-sdk/" and modify its opening fence
accordingly.</details> </blockquote></details> <details> <summary>.claude/skills/skill-template/SKILL.md (2)</summary><blockquote> `63-65`: **Add language identifier to the code block.** The validation command block should specify `bash` or `shell` as the language identifier to improve syntax highlighting and fix the linting warning. <details> <summary>📝 Proposed fix</summary> ```diff -``` +```bash skills-ref validate ./my-skill ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.claude/skills/skill-template/SKILL.md around lines 63 - 65, The fenced code
block containing the validation commandskills-ref validate ./my-skillin
SKILL.md lacks a language identifier; update the opening triple-backtick to
include a shell language (e.g.,bash orshell) so the block becomes
bash and retains the command on the next line, then close withto satisfy
linting and enable proper syntax highlighting.</details> --- `25-32`: **Add language identifier to fenced code block.** The code block lacks a language identifier, which reduces readability and causes linting warnings. Since this is a directory tree structure, use `text` or leave it as plain text with a language identifier. <details> <summary>📝 Proposed fix</summary> ```diff -``` +```text skill-name/ ├── SKILL.md # This file ├── scripts/ # Optional: Executable code (e.g., extract.py) ├── references/ # Optional: Docs (e.g., REFERENCE.md) ├── assets/ # Optional: Templates, images, data └── ... # Additional files ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.claude/skills/skill-template/SKILL.md around lines 25 - 32, The fenced code
block in SKILL.md showing the directory tree lacks a language identifier; update
the triple-backtick fence surrounding the tree to include a language (e.g., usewarnings are resolved—edit the SKILL.md fenced block that contains "skill-name/" and the subsequent tree lines to start with ```text and keep the closing ``` unchanged..steering/github-copilot/plugins/Deep Wiki.md (1)
23-27: Consider adding language identifiers to fenced code blocks.The fenced code blocks on lines 23-27, 30-32, and 95-103 are missing language identifiers, which would improve syntax highlighting and accessibility.
📝 Proposed refinement
### From Marketplace (Recommended) -``` +```bash # Inside Copilot CLI /plugin marketplace add microsoft/skills /plugin install deep-wiki@skillsLocal Install
-
+bash
copilot --plugin-dir ./deep-wiki## Plugin Structure -``` +```text .github/plugins/deep-wiki/ ├── .claude-plugin/ # Claude integration ├── commands/ # CLI commandsAlso applies to: 30-32, 95-103
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.steering/github-copilot/plugins/Deep Wiki.md around lines 23 - 27, Add language identifiers to the three fenced code blocks: the block beginning with "# Inside Copilot CLI" (use ```bash), the "Local Install" block that contains "copilot --plugin-dir ./deep-wiki" (use ```bash), and the directory tree block that starts ".github/plugins/deep-wiki/" (use ```text) so they provide proper syntax highlighting and accessibility; update each opening triple-backtick to include the suggested language token and leave the closing backticks unchanged..steering/templates/laravel-package.md (1)
102-104: Label the API fence language for lint compliance.Line 102 starts an unlabeled fenced block. Add a language (for example
httportext) to satisfy markdownlint MD040.Proposed fix
-``` +```http POST /api/v1/package/upload/example-importer</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.steering/templates/laravel-package.md around lines 102 - 104, The fenced
code block containing "POST /api/v1/package/upload/example-importer" is
unlabeled; update that triple-backtick fence (the block that currently starts
withjust before the POST line in the template) to include a language label such as http (e.g., changeto ```http) so markdownlint MD040 is satisfied.</details> </blockquote></details> <details> <summary>.cursor/skills/agentic-programming/SKILL.md (1)</summary><blockquote> `30-32`: **Add languages to fenced command examples.** Line 30 and Line 36 use unlabeled fenced blocks, which triggers markdownlint (MD040). Use `bash` for both command snippets. <details> <summary>Proposed fix</summary> ```diff -``` +```bash /laravel-package <vendor/package> ``` @@ -``` +```bash /laravel-package spatie/laravel-markdown-response ``` ``` </details> Also applies to: 36-38 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In @.cursor/skills/agentic-programming/SKILL.md around lines 30 - 32, The two
unlabeled fenced code blocks containing the commands "/laravel-package
<vendor/package>" and "/laravel-package spatie/laravel-markdown-response" should
be marked with the bash language to satisfy markdownlint MD040; update each
triple-backtick opener to "```bash" so both command snippets are fenced as bash.</details> </blockquote></details> <details> <summary>.claude/skills/laravel-research/SKILL.md (2)</summary><blockquote> `36-39`: **Clarify the `composer_require` placeholder in the Installation block.** Line 38 shows `composer_require` without backticks or interpolation syntax. If this is a template placeholder meant to be replaced with the actual `composer require` command from frontmatter, consider using clearer substitution syntax (e.g., `${composer_require}` or `{{composer_require}}`) or adding a comment explaining that agents should replace it with the frontmatter value. <details> <summary>📝 Proposed clarification</summary> ```diff ## Installation ```bash -composer_require +# Replace with the frontmatter composer_require value: +# Example: composer require VENDOR/package-name +composer require VENDOR/package-name ``` ``` Or use explicit placeholder syntax: ```diff ## Installation ```bash -composer_require +{{composer_require}} ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.claude/skills/laravel-research/SKILL.md around lines 36 - 39, The Installation block currently shows the ambiguous placeholder "composer_require"; update the SKILL.md to replace or clarify this placeholder by using explicit substitution syntax or an explanatory example so agents know to insert the frontmatter value—e.g., change the bare token "composer_require" to a clear placeholder like "{{composer_require}}" or "${composer_require}" or replace it with an example command such as "composer require VENDOR/package-name", and add a short comment line indicating it should be substituted from the frontmatter; look for the "composer_require" token in the Installation section to make this change. ``` </details> --- `54-54`: **Consider adding dev-main fallback guidance for version-key extraction.** While the current guidance correctly warns against relying on `versions.dev-master` and recommends using `package.maintainers[0].name` first, implementers who do attempt version-key extraction should be aware that modern packages use `dev-main` instead of `dev-master`. Consider adding a brief note about this fallback order if version keys are used: `versions["dev-main"]` → `versions["dev-master"]` → latest stable version. <details> <summary>📝 Proposed enhancement</summary> ```diff -| `author` | Packagist JSON (`packagist.org/packages/<v>/<p>.json`) → `package.maintainers[0].name`, or fall back to `package.authors[0].name`; do not rely on the `versions.dev-master` key as it may be absent | +| `author` | Packagist JSON (`packagist.org/packages/<v>/<p>.json`) → `package.maintainers[0].name`, or fall back to `package.authors[0].name`; if using version keys, try `versions["dev-main"]` before `versions["dev-master"]` as modern packages use `main` as the default branch | ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.claude/skills/laravel-research/SKILL.md at line 54, Add guidance noting that when implementers must extract version keys from Packagist JSON, they should prefer versions["dev-main"] as the modern fallback before versions["dev-master"], and then fall back to the latest stable version; also keep the primary recommendation to use package.maintainers[0].name then package.authors[0].name instead of relying on version keys. Mention the exact fallback order: versions["dev-main"] → versions["dev-master"] → latest stable version, and reference the Packagist JSON structure (package.maintainers, package.authors, versions) so readers can locate the fields to check. ``` </details> </blockquote></details> <details> <summary>.cursor/skills/laravel-research/SKILL.md (1)</summary><blockquote> `36-39`: **Clarify the `composer_require` placeholder in the Installation block.** Line 38 shows `composer_require` without backticks or interpolation syntax. If this is a template placeholder meant to be replaced with the actual `composer require` command from frontmatter, consider using clearer substitution syntax (e.g., `${composer_require}` or `{{composer_require}}`) or adding a comment explaining that agents should replace it with the frontmatter value. <details> <summary>📝 Proposed clarification</summary> ```diff ## Installation ```bash -composer_require +# Replace with the frontmatter composer_require value: +# Example: composer require VENDOR/package-name +composer require VENDOR/package-name ``` ``` Or use explicit placeholder syntax: ```diff ## Installation ```bash -composer_require +{{composer_require}} ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.cursor/skills/laravel-research/SKILL.md around lines 36 - 39, The Installation section currently shows a raw placeholder "composer_require" in SKILL.md; update the Installation block to either interpolate the frontmatter value (e.g., use a clear placeholder like {{composer_require}} or ${composer_require}) or replace it with an explicit example command (e.g., "composer require VENDOR/package-name") and add a short inline comment indicating agents should swap in the frontmatter value; target the "composer_require" token in the Installation block and ensure the markdown code fence shows the chosen substitution or example. ``` </details> </blockquote></details> <details> <summary>.steering/agents/research-skill.agent.md (1)</summary><blockquote> `21-21`: **Consider referencing only the canonical template path.** Line 21 hardcodes four template locations. Since `.steering/templates/skill.md` is canonical and the mirrors are automatically synced, the agent instruction could reference only the canonical path to reduce maintenance overhead. <details> <summary>♻️ Suggested simplification</summary> ```diff -Before researching the remote skill, **read the local skill-template spec** in this workspace: `.steering/templates/skill.md` (canonical), or the same content at `.github/skills/skill-research/skill-template.md`, `.claude/skills/skill-template/SKILL.md`, or `.cursor/skills/skill-template/SKILL.md`. Use its vocabulary and rules when you interpret the upstream skill and when you write the research note. +Before researching the remote skill, **read the local skill-template spec** at `.steering/templates/skill.md` (canonical; mirrored to IDE-specific paths via sync). Use its vocabulary and rules when you interpret the upstream skill and when you write the research note. ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.steering/agents/research-skill.agent.md at line 21, Update the instruction that lists multiple template paths to reference only the canonical template `.steering/templates/skill.md`; specifically change the sentence starting "Before researching the remote skill, read the local skill-template spec..." to mention only `.steering/templates/skill.md` so the agent uses that canonical file and its vocabulary/rules rather than hardcoding the four mirrored locations. ``` </details> </blockquote></details> <details> <summary>.github/agents/research-skill.agent.md (1)</summary><blockquote> `21-21`: **Consider referencing only the canonical template path.** Line 21 hardcodes four template locations. Since `.steering/templates/skill.md` is canonical and the mirrors are automatically synced, the agent instruction could reference only the canonical path to reduce maintenance overhead. <details> <summary>♻️ Suggested simplification</summary> ```diff -Before researching the remote skill, **read the local skill-template spec** in this workspace: `.steering/templates/skill.md` (canonical), or the same content at `.github/skills/skill-research/skill-template.md`, `.claude/skills/skill-template/SKILL.md`, or `.cursor/skills/skill-template/SKILL.md`. Use its vocabulary and rules when you interpret the upstream skill and when you write the research note. +Before researching the remote skill, **read the local skill-template spec** at `.steering/templates/skill.md` (canonical; mirrored to IDE-specific paths via sync). Use its vocabulary and rules when you interpret the upstream skill and when you write the research note. ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.github/agents/research-skill.agent.md at line 21, Replace the hardcoded list of four template locations in the sentence that starts "Before researching the remote skill, read the local skill-template spec" so it references only the canonical template `.steering/templates/skill.md`; remove the other mirror paths and keep the instruction to use that canonical template's vocabulary and rules when interpreting the upstream skill and writing the research note. ``` </details> </blockquote></details> <details> <summary>.claude/agents/sync-skills.md (1)</summary><blockquote> `6-10`: **Consider breaking the dense source-of-truth paragraph.** Line 10 packs canonical source declaration, byte-identical mirroring, and skill-research special handling into a single 85-word sentence. While technically accurate, splitting it into 2-3 sentences would improve readability: <details> <summary>♻️ Optional clarity refactor</summary> ```diff -**`.steering/`** holds canonical **agents** (`agents/`) and **packaged skills** (`skills/<name>/SKILL.md`), plus **`templates/skill.md`** (the skill spec). Packaged skills are **byte-identical** across `.cursor`, `.claude`, and `.github` **except** **`skill-research`**: **`![[github-copilot/...]]`** expands only in **`.cursor/skills/skill-research/`**; **`.github`** and **`.claude`** get a pointer to **`.steering/github-copilot/Skills.md`** instead. **Agents:** see **sync-agents** (includes the same **`github-copilot/`** rule for **`research-skill.agent.md`** on **`.cursor`** only). +**`.steering/`** holds canonical **agents** (`agents/`) and **packaged skills** (`skills/<name>/SKILL.md`), plus **`templates/skill.md`** (the skill spec). + +Packaged skills are **byte-identical** across `.cursor`, `.claude`, and `.github` **except** **`skill-research`**: **`![[github-copilot/...]]`** embeds expand only in **`.cursor/skills/skill-research/`**; **`.github`** and **`.claude`** get a pointer to **`.steering/github-copilot/Skills.md`** instead. + +**Agents:** see **sync-agents** (includes the same **`github-copilot/`** rule for **`research-skill.agent.md`** on **`.cursor`** only). ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.claude/agents/sync-skills.md around lines 6 - 10, The paragraph under "Source of truth" is too dense; split it into 2–3 clearer sentences to improve readability while preserving all facts: state that `.steering/` is the canonical source containing `agents/`, packaged `skills/<name>/SKILL.md`, and `templates/skill.md`; then add a second sentence explaining that packaged skills are byte-identical across `.cursor`, `.claude`, and `.github` with the exception of `skill-research`, and a third sentence describing the `![[github-copilot/...]]` expansion behavior (only expanding into `.cursor/skills/skill-research/` while `.github` and `.claude` point to `.steering/github-copilot/Skills.md`), and similarly note the `sync-agents` rule for `research-skill.agent.md`. ``` </details> </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.cursor/skills/skill-template/SKILL.md:
- Around line 25-32: Update the two fenced code blocks in SKILL.md to include
language identifiers to satisfy markdownlint MD040: add "text" to the
directory-tree block starting with "skill-name/" and add "bash" to the command
block containing "skills-ref validate ./my-skill"; repeat the same fix for the
other fenced block at lines ~63-65 so all fenced blocks have explicit languages.In @.github/agents/sync-agents.md:
- Around line 14-15: The sync documentation (.github/agents/sync-agents.md)
incorrectly states that only*.agent.mdunder.steering/agents/are
mirrored, while the actual generator/regeneration script currently copies every
file in.steering/agents/(producing mirrored files likesync-agents.md/
sync-skills.md); update the docs or the generator so they match: either change
the text in.github/agents/sync-agents.mdto accurately describe the generator
behavior (that all files in.steering/agents/exceptREADME.mdare mirrored
to the agents mirrors) or modify the regeneration script to enforce the narrower
*.agent.mdfilter; reference the files.github/agents/sync-agents.md,
.steering/agents/and the regeneration script responsible for mirroring when
making the fix.In @.github/skills/agentic-programming/SKILL.md:
- Around line 30-32: The two fenced command blocks showing "/laravel-package
<vendor/package>" and "/laravel-package spatie/laravel-markdown-response" lack
language tags; update those two triple-backtick fences in SKILL.md to use a
language tag (e.g., ```text) so the blocks read as fenced code withtext
specified for both occurrences.In @.github/skills/skill-research/skill-template.md:
- Line 25: The fenced code blocks in SKILL.md are missing language identifiers
(triggering MD040); update the triple-backtick blocks that contain the directory
tree (the block starting with "skill-name/") and the command example
("skills-ref validate ./my-skill") to include appropriate languages (e.g.,
text orbash) so markdownlint is satisfied; locate the backtick fences in
skill-template.md and add the language tokens immediately after the opening ```
for those two blocks.In @.steering/agents/sync-agents.md:
- Line 23: The example heading marker uses a code span with a trailing space (
`## `) which triggers MD038; update the example to use a code span without
the trailing space (`##`) or rephrase the sentence to avoid a code span
containing trailing whitespace, e.g. change the text that mentions "## Heading
section: from that heading until the next##, an---line..." to reference
"##" (no space) so the lint rule is satisfied; ensure occurrences in the same
paragraph referencing the heading marker are updated consistently (look for the
strings "##", "## Heading", and the surrounding sentence).In @.steering/github-copilot/Agent MCP.md:
- Around line 45-51: The Server Types table under the "Server Types" heading
violates MD058 by lacking blank lines around the Markdown table; update the
document so there is a blank line immediately before the table (above the line
"| Type | Config Keys | Example |") and a blank line immediately after the table
(after the last row "Remote Streamable HTTP ..."), leaving the "Server Types"
header and the table contents unchanged.- Around line 52-58: The Variable Substitution table under the "## Variable
Substitution" heading needs blank lines inserted before and after the table;
update the markdown around that table (the block containing the header row "|
Syntax | Example |" and the subsequent rows) to ensure there is an empty line
separating the heading and the table and another empty line after the final
table row.In @.steering/github-copilot/Memories.md:
- Line 61: Update the wiki link label string '[[Github Copilot]]' to use the
official product casing '[[GitHub Copilot]]' so the link label matches branding;
locate the occurrence of the exact token '[[Github Copilot]]' in Memories.md and
replace it with '[[GitHub Copilot]]'.In @.steering/github-copilot/Prompts.md:
- Line 64: Update the MCP wildcard example in the
toolstable by removing the
space in the pattern: replace the invalidserver /*token with the correct
server/*token so the example matches VS Code Copilot syntax and will
correctly match all tools from an MCP server; ensure the surrounding table cell
text remains otherwise unchanged.In @.steering/mcps/deepwiki__mcp.md:
- Line 8: Replace the non-standard MCP label "transport: both" with the official
transport term "transport: streamable-http" in the metadata entry (update the
line that currently reads transport: both), and if you must advertise both
endpoints add two separate entries instead of "both" — e.g., one metadata line
for "transport: streamable-http" with URL https://mcp.deepwiki.com/mcp and a
separate metadata line for "transport: sse" with URL
https://mcp.deepwiki.com/sse; ensure you only use the official MCP transport
labels (stdio, streamable-http, sse) and remove the "both" value.In @.steering/skills/livewire-development/SKILL.md:
- Around line 172-180: Update the component-scoped interceptor example to use
the Livewire 4 syntax: replace the incorrect this.$intercept('save', ...) usage
with $wire.intercept('save', ...) in the "Component-scoped interceptors" example
so it matches the $wire.intercept pattern used elsewhere and conforms to
Livewire 4; ensure the example script references $wire.intercept rather than
this.$intercept.In
@scripts/regenerate-ide-mirrors.py:
- Around line 65-85: The extract_section function currently omits the matched
heading because it begins iterating at lines[start + 1]; update extract_section
so it includes the heading line (the line matching target) in the output before
collecting subsequent lines and still stops on the same delimiters (---, other
"## " headings, or top-level "# "). Locate the target/ start detection logic in
extract_section and change the iteration or initial out append so the matched
"## " + heading line is preserved while keeping the existing break conditions
intact.
Duplicate comments:
In @.github/agents/research-mcp.agent.md:
- Around line 28-34: Update the runtime instructions so they match the declared
frontmatter tools: either reintroduce explicit MCP tool configuration (add the
"GitHub MCP" and "DeepWiki" tool entries to the frontmatter and ensure the
bullet "GitHub repo (via GitHub MCP + DeepWiki)" uses those tools), or make the
bullets tool-agnostic by removing mentions of "GitHub MCP + DeepWiki" and
changing that bullet to a generic instruction like "GitHub repo (via repository
search/inspection)" so the steps (e.g., the "GitHub repo" bullet and the "npm /
PyPI / registry" bullet) can be executed deterministically with the declared
generic tools.In @.github/skills/tailwindcss-development/SKILL.md:
- Line 3: The skill text currently claims "Tailwind v3/v4 work" but enforces
v4-only rules (notably the line that mandates "Always use Tailwind CSS v4" and
the "v4 Specifics" section); fix by either updating the top-level description to
state v4-only, or implement proper v3 support: add a new "Tailwind CSS v3
Specifics" section with v3-appropriate guidance and change the hard mandate so
the guidance is conditional based on detected project version (e.g., replace the
unconditional "Always use Tailwind CSS v4" directive with wording or logic that
selects v3 or v4 guidance when the project version is detected), and ensure
rules about corePlugins and other v4-only features remain in the v4 section
while v3 differences are documented in the v3 section.In @.steering/README.md:
- Around line 27-31: The CI "Verify steering sync" failed because the mirrors
for .cursor, .claude, and .github were not regenerated/committed alongside the
changes to .steering; regenerate the mirror files from .steering (follow the
README steps: edit under .steering, replicate to the three IDE roots and three
template paths), ensure the three mirrors (.cursor, .claude, .github) are
updated to match .steering, and commit .steering plus those mirror files in the
same change so the CI verify-steering-sync check passes.In @.steering/skills/laravel-research/SKILL.md:
- Line 54: The author fallback is incorrect: instead of reading
package.authors[0].name (which doesn't exist), update the specification for the
authormapping to attempt package.maintainers[0].name and if empty/missing,
select the most recent tagged release underversionsand read its first author
via versions[].authors[0].name; ensure the text clarifies how to
determine the "latest tagged release" (ignore dev-master) and that maintainers
are preferred over version authors.In
@README.md:
- Around line 5-11: CI is failing due to mirror drift between
.steeringand
its mirrors; regenerate all mirrors from.steering(per.steering/README.md)
and commit the regenerated files in the same PR so.cursor,.claude, and
.githubstay in sync; ensure the change set includes the updated mirrored
files and re-run the Verify steering sync job to confirm the CI check passes.
Nitpick comments:
In @.claude/agents/sync-skills.md:
- Around line 6-10: The paragraph under "Source of truth" is too dense; split it
into 2–3 clearer sentences to improve readability while preserving all facts:
state that.steering/is the canonical source containingagents/, packaged
skills/<name>/SKILL.md, andtemplates/skill.md; then add a second sentence
explaining that packaged skills are byte-identical across.cursor,.claude,
and.githubwith the exception ofskill-research, and a third sentence
describing the![[github-copilot/...]]expansion behavior (only expanding into
.cursor/skills/skill-research/while.githuband.claudepoint to
.steering/github-copilot/Skills.md), and similarly note thesync-agentsrule
forresearch-skill.agent.md.In @.claude/skills/laravel-research/SKILL.md:
- Around line 36-39: The Installation block currently shows the ambiguous
placeholder "composer_require"; update the SKILL.md to replace or clarify this
placeholder by using explicit substitution syntax or an explanatory example so
agents know to insert the frontmatter value—e.g., change the bare token
"composer_require" to a clear placeholder like "{{composer_require}}" or
"${composer_require}" or replace it with an example command such as "composer
require VENDOR/package-name", and add a short comment line indicating it should
be substituted from the frontmatter; look for the "composer_require" token in
the Installation section to make this change.- Line 54: Add guidance noting that when implementers must extract version keys
from Packagist JSON, they should prefer versions["dev-main"] as the modern
fallback before versions["dev-master"], and then fall back to the latest stable
version; also keep the primary recommendation to use package.maintainers[0].name
then package.authors[0].name instead of relying on version keys. Mention the
exact fallback order: versions["dev-main"] → versions["dev-master"] → latest
stable version, and reference the Packagist JSON structure (package.maintainers,
package.authors, versions) so readers can locate the fields to check.In @.claude/skills/skill-template/SKILL.md:
- Around line 63-65: The fenced code block containing the validation command
skills-ref validate ./my-skillin SKILL.md lacks a language identifier; update
the opening triple-backtick to include a shell language (e.g.,bash orshell) so the block becomesbash and retains the command on the next line, then close withto satisfy linting and enable proper syntax highlighting.- Around line 25-32: The fenced code block in SKILL.md showing the directory
tree lacks a language identifier; update the triple-backtick fence surrounding
the tree to include a language (e.g., usetext) so the block is recognized as plain text and linting/readability warnings are resolved—edit the SKILL.md fenced block that contains "skill-name/" and the subsequent tree lines to start withtext and keep the closing ``` unchanged.In @.cursor/skills/agentic-programming/SKILL.md:
- Around line 30-32: The two unlabeled fenced code blocks containing the
commands "/laravel-package <vendor/package>" and "/laravel-package
spatie/laravel-markdown-response" should be marked with the bash language to
satisfy markdownlint MD040; update each triple-backtick opener to "```bash" so
both command snippets are fenced as bash.In @.cursor/skills/laravel-research/SKILL.md:
- Around line 36-39: The Installation section currently shows a raw placeholder
"composer_require" in SKILL.md; update the Installation block to either
interpolate the frontmatter value (e.g., use a clear placeholder like
{{composer_require}} or ${composer_require}) or replace it with an explicit
example command (e.g., "composer require VENDOR/package-name") and add a short
inline comment indicating agents should swap in the frontmatter value; target
the "composer_require" token in the Installation block and ensure the markdown
code fence shows the chosen substitution or example.In @.github/agents/research-skill.agent.md:
- Line 21: Replace the hardcoded list of four template locations in the sentence
that starts "Before researching the remote skill, read the local skill-template
spec" so it references only the canonical template
.steering/templates/skill.md; remove the other mirror paths and keep the
instruction to use that canonical template's vocabulary and rules when
interpreting the upstream skill and writing the research note.In @.steering/agents/research-skill.agent.md:
- Line 21: Update the instruction that lists multiple template paths to
reference only the canonical template.steering/templates/skill.md;
specifically change the sentence starting "Before researching the remote skill,
read the local skill-template spec..." to mention only
.steering/templates/skill.mdso the agent uses that canonical file and its
vocabulary/rules rather than hardcoding the four mirrored locations.In @.steering/github-copilot/Agentic Workflows.md:
- Line 22: The quoted docs link includes tracking query params; remove the UTM
query string from the markdown link text so the "Product / docs hub:" link
points to the clean permanent URL (replace
"https://github.github.com/gh-aw/?utm_source=blog-agentic-workflows-cta&utm_medium=blog&utm_campaign=agentic-workflows-tech-preview-feb-2026"
with "https://github.github.com/gh-aw" in the same markdown line).- Line 15: Replace all occurrences of the inconsistent gh-aw docs host with the
canonical host (use github.github.io) by updating the gh_aw_hub entry and every
in-bodygh-awlink; specifically change the value for the gh_aw_hub key
("gh_aw_hub: https://github.github.com/gh-aw/") to the canonical URL
("https://github.github.io/gh-aw/") and search the document for any other gh-aw
links (lines referenced in the review: 22, 37, 44-45, 56-60, 64-65, 97-100) to
normalize them to the same github.github.io base so all references point to the
unified canonical host.In @.steering/github-copilot/Environment.md:
- Line 92: The Obsidian anchor [[GitHub Copilot]] is inconsistent with other
internal links that use the github-copilot/ prefix (e.g.,
[[github-copilot/Agents]]); update the link to follow the same path style (for
example replace [[GitHub Copilot]] with [[github-copilot/GitHub Copilot]] or the
appropriate subpath) so all internal links use a consistent namespace, or
confirm it's intentionally root-level and make other links match that pattern.In @.steering/github-copilot/plugins/Deep Wiki.md:
- Around line 23-27: Add language identifiers to the three fenced code blocks:
the block beginning with "# Inside Copilot CLI" (usebash), the "Local Install" block that contains "copilot --plugin-dir ./deep-wiki" (usebash),
and the directory tree block that starts ".github/plugins/deep-wiki/" (useeach opening triple-backtick to include the suggested language token and leave the closing backticks unchanged. In @.steering/github-copilot/SDK.md: - Around line 29-37: The Markdown table under the "**Deployment Patterns**" heading lacks surrounding blank lines; update the section so there is an empty line before the "**Deployment Patterns**:" line and an empty line after the table (i.e., insert one blank line above the table start and one blank line after the table end) to ensure correct rendering and satisfy linting rules. - Around line 42-47: Update the markdown code fence that renders the directory tree for ".github/skills/copilot-sdk/" to include the language identifier "text" (change the opening ``` to ```text) so the block is ```text ... ```; locate the code block containing the directory listing starting with ".github/skills/copilot-sdk/" and modify its opening fence accordingly. In @.steering/templates/laravel-package.md: - Around line 102-104: The fenced code block containing "POST /api/v1/package/upload/example-importer" is unlabeled; update that triple-backtick fence (the block that currently starts with ``` just before the POST line in the template) to include a language label such as http (e.g., change ``` to ```http) so markdownlint MD040 is satisfied.🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID:
2780c4d6-bff5-493b-bd3d-89d9474f3b89⛔ Files ignored due to path filters (2)
scripts/__pycache__/regenerate-ide-mirrors.cpython-312.pycis excluded by!**/*.pycscripts/__pycache__/sync-boost-ai-skills.cpython-312.pycis excluded by!**/*.pyc📒 Files selected for processing (123)
.claude/agents/idea.agent.md.claude/agents/laravel-package.agent.md.claude/agents/research-mcp.agent.md.claude/agents/research-skill.agent.md.claude/agents/sync-agents.md.claude/agents/sync-skills.md.claude/skills/agentic-programming/SKILL.md.claude/skills/fluxui-free-development/SKILL.md.claude/skills/fluxui-pro-development/SKILL.md.claude/skills/laravel-pint/SKILL.md.claude/skills/laravel-research/SKILL.md.claude/skills/laravel-sail/SKILL.md.claude/skills/livewire-development/SKILL.md.claude/skills/pest-testing/SKILL.md.claude/skills/phpunit-laravel/SKILL.md.claude/skills/skill-research/SKILL.md.claude/skills/skill-template/SKILL.md.claude/skills/sync-agents/SKILL.md.claude/skills/sync-skills/SKILL.md.claude/skills/tailwindcss-development/SKILL.md.cursor/agents/idea.agent.md.cursor/agents/laravel-package.agent.md.cursor/agents/research-mcp.agent.md.cursor/agents/research-skill.agent.md.cursor/agents/sync-agents.md.cursor/agents/sync-skills.md.cursor/skills/agentic-programming/SKILL.md.cursor/skills/fluxui-free-development/SKILL.md.cursor/skills/fluxui-pro-development/SKILL.md.cursor/skills/laravel-pint/SKILL.md.cursor/skills/laravel-research/SKILL.md.cursor/skills/laravel-sail/SKILL.md.cursor/skills/livewire-development/SKILL.md.cursor/skills/pest-testing/SKILL.md.cursor/skills/phpunit-laravel/SKILL.md.cursor/skills/skill-research/SKILL.md.cursor/skills/skill-template/SKILL.md.cursor/skills/sync-agents/SKILL.md.cursor/skills/sync-skills/SKILL.md.cursor/skills/tailwindcss-development/SKILL.md.github/agents/idea.agent.md.github/agents/laravel-package.agent.md.github/agents/research-mcp.agent.md.github/agents/research-skill.agent.md.github/agents/skill-research.agent.md.github/agents/sync-agents.md.github/agents/sync-skills.md.github/skills/agentic-programming/SKILL.md.github/skills/fluxui-free-development/SKILL.md.github/skills/fluxui-pro-development/SKILL.md.github/skills/laravel-pint/SKILL.md.github/skills/laravel-research/SKILL.md.github/skills/laravel-research/laravel-package-template.md.github/skills/laravel-sail/SKILL.md.github/skills/livewire-development/SKILL.md.github/skills/pest-testing/SKILL.md.github/skills/phpunit-laravel/SKILL.md.github/skills/skill-research/SKILL.md.github/skills/skill-research/skill-template.md.github/skills/sync-agents/SKILL.md.github/skills/sync-skills/SKILL.md.github/skills/tailwindcss-development/SKILL.md.github/workflows/sync-skill-template.yml.github/workflows/verify-steering-sync.yml.steering/README.md.steering/agents/idea.agent.md.steering/agents/laravel-package.agent.md.steering/agents/research-mcp.agent.md.steering/agents/research-skill.agent.md.steering/agents/sync-agents.md.steering/agents/sync-skills.md.steering/cursor/Agents.md.steering/cursor/Hooks.md.steering/cursor/Plugins.md.steering/cursor/Rules.md.steering/cursor/Skills.md.steering/github-copilot/Agent MCP.md.steering/github-copilot/Agentic Workflows.md.steering/github-copilot/Agents.md.steering/github-copilot/Environment.md.steering/github-copilot/Memories.md.steering/github-copilot/Plugins.md.steering/github-copilot/Prompts.md.steering/github-copilot/SDK.md.steering/github-copilot/Settings.md.steering/github-copilot/Skills.md.steering/github-copilot/plugins/Deep Wiki.md.steering/ideas/README.md.steering/laravel-packages/README.md.steering/laravel-packages/larastan__larastan.md.steering/laravel-packages/laravel__pint.md.steering/laravel-packages/livewire__flux.md.steering/laravel-packages/pestphp__pest.md.steering/mcp.json.steering/mcps/deepwiki__mcp.md.steering/mcps/github__github-mcp-server.md.steering/mcps/upstash__context7.md.steering/skills/.boost-ai-sync.json.steering/skills/README.md.steering/skills/SOURCES.md.steering/skills/fluxui-free-development/SKILL.md.steering/skills/fluxui-pro-development/SKILL.md.steering/skills/laravel-pint/SKILL.md.steering/skills/laravel-research/SKILL.md.steering/skills/laravel-sail/SKILL.md.steering/skills/livewire-development/SKILL.md.steering/skills/pest-testing/SKILL.md.steering/skills/phpunit-laravel/SKILL.md.steering/skills/skill-research/SKILL.md.steering/skills/sync-agents/SKILL.md.steering/skills/sync-agents/tdd.md.steering/skills/sync-skills/SKILL.md.steering/skills/tailwindcss-development/SKILL.md.steering/templates/AGENTS.md.steering/templates/agent.md.steering/templates/idea.md.steering/templates/laravel-package.md.steering/templates/skill.mdREADME.mdmcps/README.mdscripts/regenerate-ide-mirrors.pyscripts/sync-boost-ai-skills.pytemplates/agents.md💤 Files with no reviewable changes (7)
- .steering/laravel-packages/README.md
- .steering/templates/skill.md
- mcps/README.md
- .github/skills/laravel-research/laravel-package-template.md
- .github/workflows/sync-skill-template.yml
- templates/agents.md
- .github/agents/skill-research.agent.md
| ``` | ||
| skill-name/ | ||
| ├── SKILL.md # This file | ||
| ├── scripts/ # Optional: Executable code (e.g., extract.py) | ||
| ├── references/ # Optional: Docs (e.g., REFERENCE.md) | ||
| ├── assets/ # Optional: Templates, images, data | ||
| └── ... # Additional files | ||
| ``` |
There was a problem hiding this comment.
Add fence languages to satisfy markdownlint (Lines 25 and 63).
Both fenced code blocks are missing language identifiers (MD040).
Proposed fix
-```
+```text
skill-name/
├── SKILL.md # This file
├── scripts/ # Optional: Executable code (e.g., extract.py)
├── references/ # Optional: Docs (e.g., REFERENCE.md)
├── assets/ # Optional: Templates, images, data
└── ... # Additional files@@
- +bash
skills-ref validate ./my-skill
Also applies to: 63-65
🧰 Tools
🪛 markdownlint-cli2 (0.22.0)
[warning] 25-25: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.cursor/skills/skill-template/SKILL.md around lines 25 - 32, Update the two
fenced code blocks in SKILL.md to include language identifiers to satisfy
markdownlint MD040: add "text" to the directory-tree block starting with
"skill-name/" and add "bash" to the command block containing "skills-ref
validate ./my-skill"; repeat the same fix for the other fenced block at lines
~63-65 so all fenced blocks have explicit languages.
| - **Starter template:** `.steering/templates/AGENTS.md` — copy to the **repository root** as **`AGENTS.md`** and customize. It nudges agents to **use skills** (read `SKILL.md` when the task matches a skill’s `description`) and **use MCPs when appropriate** (check tool schemas, prefer fresh docs/data over guessing). Extended **Core Principles** live in `.steering/templates/agent.md` (singular) for optional embeds. | ||
| - **Not part of sync output** — This agent (`sync-agents`) does **not** copy `AGENTS.md` into `.cursor/`, `.claude/`, or `.github/`. Only `*.agent.md` files under `.steering/agents/` replicate to the three `agents/` mirrors. Treat root `AGENTS.md` as a separate, human-maintained file (optionally derived from the template once). |
There was a problem hiding this comment.
Sync scope here doesn't match the current generator.
This says only *.agent.md files under .steering/agents/ are mirrored, but the repo already ships mirrored files like sync-agents.md / sync-skills.md, and the regeneration script copies every file in .steering/agents/ except README.md. Please align the canonical wording (or tighten the generator) so maintainers don't follow docs that immediately produce CI diffs.
🧰 Tools
🪛 LanguageTool
[uncategorized] ~15-~15: The official name of this software platform is spelled with a capital “H”.
Context: ...NTS.mdinto.cursor/, .claude/, or .github/. Only *.agent.mdfiles under.stee...
(GITHUB)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/agents/sync-agents.md around lines 14 - 15, The sync documentation
(.github/agents/sync-agents.md) incorrectly states that only `*.agent.md` under
`.steering/agents/` are mirrored, while the actual generator/regeneration script
currently copies every file in `.steering/agents/` (producing mirrored files
like `sync-agents.md` / `sync-skills.md`); update the docs or the generator so
they match: either change the text in `.github/agents/sync-agents.md` to
accurately describe the generator behavior (that all files in
`.steering/agents/` except `README.md` are mirrored to the agents mirrors) or
modify the regeneration script to enforce the narrower `*.agent.md` filter;
reference the files `.github/agents/sync-agents.md`, `.steering/agents/` and the
regeneration script responsible for mirroring when making the fix.
| ``` | ||
| /laravel-package <vendor/package> | ||
| ``` |
There was a problem hiding this comment.
Add language tags to fenced command blocks (Lines 30 and 36).
Both code fences should specify a language to satisfy MD040.
Proposed fix
-```
+```text
/laravel-package <vendor/package>@@
- +text
/laravel-package spatie/laravel-markdown-response
Also applies to: 36-38
🧰 Tools
🪛 markdownlint-cli2 (0.22.0)
[warning] 30-30: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/skills/agentic-programming/SKILL.md around lines 30 - 32, The two
fenced command blocks showing "/laravel-package <vendor/package>" and
"/laravel-package spatie/laravel-markdown-response" lack language tags; update
those two triple-backtick fences in SKILL.md to use a language tag (e.g.,
```text) so the blocks read as fenced code with `text` specified for both
occurrences.
| Keep under 500 lines (~5000 tokens). Use `references/`, `scripts/`, `assets/` for more. | ||
|
|
||
| # Directory Structure | ||
| ``` |
There was a problem hiding this comment.
Add language identifiers to fenced code blocks to satisfy markdownlint.
MD040 is triggered because the fences at Line 25 and Line 63 omit a language.
Proposed lint-safe patch
-```
+```text
skill-name/
├── SKILL.md # This file
├── scripts/ # Optional: Executable code (e.g., extract.py)
├── references/ # Optional: Docs (e.g., REFERENCE.md)
├── assets/ # Optional: Templates, images, data
└── ... # Additional files@@
- +bash
skills-ref validate ./my-skill
Also applies to: 63-63
🧰 Tools
🪛 markdownlint-cli2 (0.22.0)
[warning] 25-25: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/skills/skill-research/skill-template.md at line 25, The fenced code
blocks in SKILL.md are missing language identifiers (triggering MD040); update
the triple-backtick blocks that contain the directory tree (the block starting
with "skill-name/") and the command example ("skills-ref validate ./my-skill")
to include appropriate languages (e.g., ```text or ```bash) so markdownlint is
satisfied; locate the backtick fences in skill-template.md and add the language
tokens immediately after the opening ``` for those two blocks.
| 1. **Build step (Obsidian embeds)** — In each `.steering/agents/*.md` **body** (after the first YAML frontmatter), expand wiki-style embeds allowed for that **output**: | ||
| - **Default:** only embeds whose path starts with **`templates/`** (optional **`#Heading`** to inline a single `## Heading` section). Paths resolve under **`.steering/`**. Embed syntax is Obsidian’s wiki link with brackets (see steering README); do not put illustrative embed examples in agent bodies as literal bracket pairs or the CI build will try to expand them. | ||
| - **`research-skill.agent.md` only:** embeds whose path starts with **`github-copilot/`** are expanded **only** when writing **`.cursor/agents/research-skill.agent.md`** (full body after that file’s YAML frontmatter, same rules as `templates/`). For **`.github/agents/`** and **`.claude/agents/`**, replace those embeds with a short blockquote pointing at **`.steering/github-copilot/Skills.md`** so mirrors stay small and Obsidian syntax never ships to Copilot Cloud. | ||
| - With `#Heading`, include only the `## Heading` section: from that heading until the next `## `, an `---` line on its own, or an `# ` H1. |
There was a problem hiding this comment.
Fix Markdown code-span lint violation on heading marker example.
Line 23 uses a code span with trailing space (`## `), which triggers MD038 and may fail linting in strict setups.
✏️ Proposed fix
- - With `#Heading`, include only the `## Heading` section: from that heading until the next `## `, an `---` line on its own, or an `# ` H1.
+ - With `#Heading`, include only the `## Heading` section: from that heading until the next level-2 heading (`##` + space), an `---` line on its own, or an H1 (`#` + space).📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - With `#Heading`, include only the `## Heading` section: from that heading until the next `## `, an `---` line on its own, or an `# ` H1. | |
| - With `#Heading`, include only the `## Heading` section: from that heading until the next level-2 heading (`##` + space), an `---` line on its own, or an H1 (`#` + space). |
🧰 Tools
🪛 markdownlint-cli2 (0.22.0)
[warning] 23-23: Spaces inside code span elements
(MD038, no-space-in-code)
[warning] 23-23: Spaces inside code span elements
(MD038, no-space-in-code)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.steering/agents/sync-agents.md at line 23, The example heading marker uses
a code span with a trailing space (`` `## ` ``) which triggers MD038; update the
example to use a code span without the trailing space (`` `##` ``) or rephrase
the sentence to avoid a code span containing trailing whitespace, e.g. change
the text that mentions "`## Heading` section: from that heading until the next
`## `, an `---` line..." to reference "`##`" (no space) so the lint rule is
satisfied; ensure occurrences in the same paragraph referencing the heading
marker are updated consistently (look for the strings "`## `", "`## Heading`",
and the surrounding sentence).
| - [Copilot Plans](https://github.com/features/copilot/plans) | ||
|
|
||
| ## Related Notes | ||
| [[Github Copilot]] |
There was a problem hiding this comment.
Fix product-name casing in wiki link label (Line 61).
[[Github Copilot]] should use official casing: [[GitHub Copilot]].
Proposed fix
-[[Github Copilot]]
+[[GitHub Copilot]]📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| [[Github Copilot]] | |
| [[GitHub Copilot]] |
🧰 Tools
🪛 LanguageTool
[uncategorized] ~61-~61: The official name of this software platform is spelled with a capital “H”.
Context: ...ures/copilot/plans) ## Related Notes [[Github Copilot]]
(GITHUB)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.steering/github-copilot/Memories.md at line 61, Update the wiki link label
string '[[Github Copilot]]' to use the official product casing '[[GitHub
Copilot]]' so the link label matches branding; locate the occurrence of the
exact token '[[Github Copilot]]' in Memories.md and replace it with '[[GitHub
Copilot]]'.
| | `argument-hint` | No | Hint text in the chat input for arguments. | | ||
| | `agent` | No | `ask`, `agent`, `plan`, or a **custom agent** name. Default: current chat agent. If **`tools`** is set, default agent is typically **`agent`**. | | ||
| | `model` | No | Model for this run; default: chat model picker. | | ||
| | `tools` | No | Allowed tools (built-in, tool sets, MCP, extension tools). MCP server wildcard: pattern like `server /*` (see [agent tools](https://code.visualstudio.com/docs/copilot/agents/agent-tools)). Unavailable tools are **ignored**. | |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
In VS Code Copilot prompt files frontmatter, what is the exact wildcard syntax for MCP tools/server patterns in the toolsfield? Isserver/valid and isserver / invalid?
💡 Result:
The wildcard pattern for “all tools from an MCP server” in a VS Code .prompt.md frontmatter tools list is exactly:
<server name>/*(no spaces) [1]
So:
server/*is valid (assumingservermatches the MCP server name) [1]server /*is not valid as a wildcard pattern, because it’s a different string than<server name>/*(it includes a space) [1]
Sources
[1] VS Code Docs — “Use prompt files in VS Code” (frontmatter tools field; MCP wildcard format) (code.visualstudio.com)
Citations:
Remove space in MCP wildcard pattern example.
Line 64 contains server /* with a space, which is invalid syntax. VS Code Copilot documentation specifies the wildcard pattern must be server/* (no space) to match all tools from an MCP server.
Fix
-| `tools` | No | Allowed tools (built-in, tool sets, MCP, extension tools). MCP server wildcard: pattern like `server /*` (see [agent tools](https://code.visualstudio.com/docs/copilot/agents/agent-tools)). Unavailable tools are **ignored**. |
+| `tools` | No | Allowed tools (built-in, tool sets, MCP, extension tools). MCP server wildcard: pattern like `server/*` (see [agent tools](https://code.visualstudio.com/docs/copilot/agents/agent-tools)). Unavailable tools are **ignored**. |📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| | `tools` | No | Allowed tools (built-in, tool sets, MCP, extension tools). MCP server wildcard: pattern like `server /*` (see [agent tools](https://code.visualstudio.com/docs/copilot/agents/agent-tools)). Unavailable tools are **ignored**. | | |
| | `tools` | No | Allowed tools (built-in, tool sets, MCP, extension tools). MCP server wildcard: pattern like `server/*` (see [agent tools](https://code.visualstudio.com/docs/copilot/agents/agent-tools)). Unavailable tools are **ignored**. | |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.steering/github-copilot/Prompts.md at line 64, Update the MCP wildcard
example in the `tools` table by removing the space in the pattern: replace the
invalid `server /*` token with the correct `server/*` token so the example
matches VS Code Copilot syntax and will correctly match all tools from an MCP
server; ensure the surrounding table cell text remains otherwise unchanged.
| product_url: https://deepwiki.com | ||
| mcp_url: https://mcp.deepwiki.com/ | ||
| type: official | ||
| transport: both |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
For DeepWiki MCP and MCP transport naming, what are the current protocol terms used in official docs (e.g., Streamable HTTP, SSE, stdio), and is "both" a standard transport label?
💡 Result:
Official MCP transport terms (current docs/spec):
stdio(standard input/output) (modelcontextprotocol.io)streamable-httpa.k.a. Streamable HTTP (the current HTTP transport in the spec) (modelcontextprotocol.io)sse/ Server-Sent Events (SSE) (older HTTP transport; deprecated but still supported in parts of the ecosystem) (modelcontextprotocol.io)
DeepWiki naming you’ll commonly see (matches the above concepts):
- “Stdio Transport”, “SSE Transport”, and “HTTP Streamable Transport / Streamable HTTP Transport”. (deepwiki.com)
Is "both" a standard transport label?
- No. In the official registry/schema guidance, the transport
typeis set to either"streamable-http"or"sse"(andstdioexists as its own type). If a server supports both HTTP transports, it’s described as supporting both at different URLs, not by using a"both"label. (modelcontextprotocol.io)
Citations:
- 1: https://modelcontextprotocol.io/specification/2025-11-25/basic/transports?utm_source=openai
- 2: https://modelcontextprotocol.io/specification/2025-11-25/basic/transports?utm_source=openai
- 3: https://modelcontextprotocol.io/registry/remote-servers?utm_source=openai
- 4: https://deepwiki.com/liukeyu800/mcp-server-chart-offline/5.1-stdio-transport?utm_source=openai
- 5: https://modelcontextprotocol.io/registry/remote-servers?utm_source=openai
🏁 Script executed:
cat -n .steering/mcps/deepwiki__mcp.md | head -80Repository: ChrisThompsonTLDR/agentic-programming
Length of output: 3328
Replace non-standard transport: both label with official MCP transport term.
Line 8 uses transport: both, which is not a valid label in the MCP specification. The official transport types are stdio, streamable-http, or sse.
The documentation (lines 36, 73–74) clearly describes two separate endpoints:
- Streamable HTTP (recommended):
https://mcp.deepwiki.com/mcp - SSE (legacy/deprecated):
https://mcp.deepwiki.com/sse
Since Streamable HTTP is the primary and recommended transport, update line 8 to transport: streamable-http. If both transports must be represented in metadata, document them as separate entries with their respective URLs, aligned with official MCP registry patterns.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.steering/mcps/deepwiki__mcp.md at line 8, Replace the non-standard MCP
label "transport: both" with the official transport term "transport:
streamable-http" in the metadata entry (update the line that currently reads
transport: both), and if you must advertise both endpoints add two separate
entries instead of "both" — e.g., one metadata line for "transport:
streamable-http" with URL https://mcp.deepwiki.com/mcp and a separate metadata
line for "transport: sse" with URL https://mcp.deepwiki.com/sse; ensure you only
use the official MCP transport labels (stdio, streamable-http, sse) and remove
the "both" value.
| ### Component-scoped interceptors | ||
|
|
||
| ```blade | ||
| <script> | ||
| this.$intercept('save', ({ component, onSuccess }) => { | ||
| onSuccess(() => console.log('Saved!')); | ||
| }); | ||
| </script> | ||
| ``` |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
In Livewire 4, what is the correct syntax for component-scoped action interceptors: this.$intercept or $wire.intercept?
💡 Result:
In Livewire 4, component-scoped action interceptors use:
$wire.intercept(callback)(or$wire.intercept('save', callback)to target a specific action) — notthis.$intercept.
For global interceptors across all components, useLivewire.interceptAction(callback). [1]
Fix component-scoped interceptor syntax at line 176.
Line 176 uses this.$intercept('save', ...), but Livewire 4 requires $wire.intercept('save', ...) for component-scoped action interceptors. Update the example to use the correct $wire syntax to match line 138 and Livewire 4 specifications.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.steering/skills/livewire-development/SKILL.md around lines 172 - 180,
Update the component-scoped interceptor example to use the Livewire 4 syntax:
replace the incorrect this.$intercept('save', ...) usage with
$wire.intercept('save', ...) in the "Component-scoped interceptors" example so
it matches the $wire.intercept pattern used elsewhere and conforms to Livewire
4; ensure the example script references $wire.intercept rather than
this.$intercept.
| def extract_section(text: str, heading: str) -> str: | ||
| lines = text.splitlines() | ||
| target = "## " + heading.strip() | ||
| start = None | ||
| for i, line in enumerate(lines): | ||
| if line.strip() == target: | ||
| start = i | ||
| break | ||
| if start is None: | ||
| return "<!-- missing section: " + heading.strip() + " -->\n" | ||
| out = [] | ||
| for line in lines[start + 1 :]: | ||
| st = line.strip() | ||
| if st == "---": | ||
| break | ||
| if line.startswith("## "): | ||
| break | ||
| if line.startswith("# ") and not line.startswith("##"): | ||
| break | ||
| out.append(line) | ||
| return "\n".join(out).rstrip() + "\n" |
There was a problem hiding this comment.
Keep the heading line when expanding #Heading embeds.
extract_section() starts copying at lines[start + 1], so every heading-scoped embed drops the matched ## Heading line itself. That strips context from the generated mirrors and contradicts the documented “from that heading …” behavior.
[suggested fix]
Proposed patch
def extract_section(text: str, heading: str) -> str:
lines = text.splitlines()
target = "## " + heading.strip()
start = None
@@
- out = []
- for line in lines[start + 1 :]:
+ out = [lines[start]]
+ for line in lines[start + 1 :]:
st = line.strip()
if st == "---":
break
if line.startswith("## "):
break
if line.startswith("# ") and not line.startswith("##"):
break
out.append(line)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| def extract_section(text: str, heading: str) -> str: | |
| lines = text.splitlines() | |
| target = "## " + heading.strip() | |
| start = None | |
| for i, line in enumerate(lines): | |
| if line.strip() == target: | |
| start = i | |
| break | |
| if start is None: | |
| return "<!-- missing section: " + heading.strip() + " -->\n" | |
| out = [] | |
| for line in lines[start + 1 :]: | |
| st = line.strip() | |
| if st == "---": | |
| break | |
| if line.startswith("## "): | |
| break | |
| if line.startswith("# ") and not line.startswith("##"): | |
| break | |
| out.append(line) | |
| return "\n".join(out).rstrip() + "\n" | |
| def extract_section(text: str, heading: str) -> str: | |
| lines = text.splitlines() | |
| target = "## " + heading.strip() | |
| start = None | |
| for i, line in enumerate(lines): | |
| if line.strip() == target: | |
| start = i | |
| break | |
| if start is None: | |
| return "<!-- missing section: " + heading.strip() + " -->\n" | |
| out = [lines[start]] | |
| for line in lines[start + 1 :]: | |
| st = line.strip() | |
| if st == "---": | |
| break | |
| if line.startswith("## "): | |
| break | |
| if line.startswith("# ") and not line.startswith("##"): | |
| break | |
| out.append(line) | |
| return "\n".join(out).rstrip() + "\n" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@scripts/regenerate-ide-mirrors.py` around lines 65 - 85, The extract_section
function currently omits the matched heading because it begins iterating at
lines[start + 1]; update extract_section so it includes the heading line (the
line matching target) in the output before collecting subsequent lines and still
stops on the same delimiters (---, other "## " headings, or top-level "# ").
Locate the target/ start detection logic in extract_section and change the
iteration or initial out append so the matched "## " + heading line is preserved
while keeping the existing break conditions intact.
This pull request adds several new agent definitions and research agent templates to the
.claude/agents/directory, enhancing the repository's support for structured research and note generation for ideas, Laravel packages, MCP servers, and agent skills. It also adds or updates documentation for agent and skill synchronization processes and provides setup instructions for the agentic-programming skill. The most important changes are grouped below:New Research Agents and Templates:
idea.agent.md: Defines the/ideaagent for turning raw ideas into researched steering notes, with detailed principles and output templates.laravel-package.agent.md: Introduces an agent to research Laravel packages and generate Obsidian notes, mapping specific fields to live data sources.research-mcp.agent.md: Adds an agent to research Model Context Protocol (MCP) servers from URLs and generate structured research notes.research-skill.agent.md: Provides an agent for researching agent skills published in git repositories, producing structured skill research notes.Agent and Skill Synchronization Documentation:
sync-agents.md: Documents the process for replicating.steering/agentsinto.cursor/agents,.claude/agents, and.github/agents, including rules for YAML stripping and embed expansion.sync-skills.md: Details the workflow for syncing agents, packaged skills, and skill-template mirrors across steering and IDE directories, including special handling for skill-research and template files.Skill Documentation:
agentic-programming/SKILL.md: Provides context and setup instructions for the agentic-programming skill, including required secrets, memory enablement, usage, and key file paths.Note
Low Risk
Mostly adds and updates markdown-based agent/skill definitions and sync documentation; low risk since it doesn’t change runtime application code, but mistakes could break agent usage or steering-sync CI expectations.
Overview
Introduces new
/idea,/laravel-package,/research-mcp, and/research-skillagent definitions (mirrored across.claude/,.cursor/, and.github/) that prescribe live-research-driven note generation into.steering/.Adds
sync-agentsandsync-skillsagent/skill docs that define how.steeringcontent is replicated into IDE-specific folders (including embed expansion and Copilot frontmatter stripping), and updates/removes older GitHub agent/skill artifacts (e.g., deprecatingskill-research.agent.md, trimming Copilotmcp-serversblocks).Adds multiple new packaged skill markdowns (Laravel/Pest/Livewire/Tailwind/Flux/Pint/Sail/etc.) and updates the
agentic-programmingskill note to align paths and setup guidance with the.steering-as-source-of-truth workflow.Reviewed by Cursor Bugbot for commit dec0adb. Bugbot is set up for automated code reviews on this repo. Configure here.
Summary by CodeRabbit
New Features
Documentation
Chores