Conversation
- Add qwen-extension.json manifest for 'qwen extensions install' - Add QWEN.md context file for auto-activating using-superpowers skill - Update docs/README.qwen.md with extension install as primary method - Update README.md with one-liner install command - Existing .md commands already work natively (Qwen uses same format) - Note: Qwen Code can also auto-convert gemini-extension.json
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds comprehensive Qwen Code CLI integration to Superpowers, including installation automation via Bash script, configuration metadata, detailed documentation, subagent definitions (code-reviewer, implementer, spec-reviewer with templates), and skill documentation enhancements with code examples. Changes
Sequence Diagram(s)sequenceDiagram
actor User
participant InstallScript as install.sh
participant FileSystem as File System
participant QwenConfig as Qwen Config<br/>(.qwen/)
User->>InstallScript: Execute install.sh
InstallScript->>FileSystem: Check/create ~/.qwen directories
InstallScript->>FileSystem: Validate skills directory
InstallScript->>FileSystem: Create skill symlinks<br/>(repo → ~/.qwen/skills)
InstallScript->>FileSystem: Create agent symlinks<br/>(repo → ~/.qwen/agents)
InstallScript->>FileSystem: Symlink prompt templates<br/>to agent targets
InstallScript->>QwenConfig: Inject context block<br/>into QWEN.md
InstallScript->>User: Display completion message<br/>& restart instructions
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
- Add .qwen/install.sh with hub pattern (individual skill symlinks) - Add .qwen/INSTALL.md matching Codex/OpenCode install doc pattern - Add idempotent context injection into ~/.qwen/QWEN.md with markers - Add terminology mapping (Claude Code tools → Qwen equivalents) - Update QWEN.md to include tool mapping (drop mandatory language) - Update README.md to use fetch-and-follow install pattern - Update docs/README.qwen.md with full tool mapping table Addresses gaps identified in obra#128: - GEMINI.md/QWEN.md advisory-not-executable finding - Missing tool terminology translation - Missing install script (was extension-only) - Single directory symlink → hub pattern
There was a problem hiding this comment.
Pull request overview
This PR adds native Qwen Code CLI support following patterns established for Codex and OpenCode installers. Based on learnings from issue #128 (which found that context files are advisory, not executable in similar CLIs), this implementation uses an install script with individual skill symlinks (hub pattern) plus context injection with tool mappings.
Changes:
- Adds
.qwen/install.shscript that symlinks each skill individually into~/.qwen/skills/and injects context with tool mappings into~/.qwen/QWEN.md - Includes comprehensive installation documentation following the fetch-and-follow pattern used by Codex and OpenCode
- Provides both install script approach (recommended) and extension manifest approach (alternative) for flexibility
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
qwen-extension.json |
Extension manifest for alternative qwen extensions install path |
QWEN.md |
Context file with simplified tool mappings for extension-based install |
.qwen/install.sh |
Installation script implementing hub pattern (individual skill symlinks) with idempotent context injection |
.qwen/INSTALL.md |
Installation guide following fetch-and-follow pattern, includes tool mapping documentation |
docs/README.qwen.md |
Comprehensive documentation covering installation, usage, tool mappings, troubleshooting, and uninstallation |
README.md |
Added Qwen section with fetch-and-follow install instructions consistent with Codex/OpenCode |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
docs/README.qwen.md (2)
63-65:Bashnaming here is more accurate — consider standardising across all files.This table correctly uses the actual Claude Code tool name (
Bash), but.qwen/INSTALL.md(line 90),QWEN.md(line 15), and theinstall.shinjected context block (line 78) all use the informalShelllabel. Users cross-referencing the files may be confused by the mismatch. Standardising onBash(the real tool name) across all four documents would be cleaner.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/README.qwen.md` around lines 63 - 65, The README table uses the tool label `Bash` while other docs use `Shell`, causing inconsistency; update all occurrences of the informal label to the canonical tool name `Bash` so the mapping entries remain consistent (e.g., change any `Shell` labels that map to `run_shell_command` in .qwen/INSTALL.md, QWEN.md, and the install.sh context block to `Bash`), and verify the table rows (`Search`→`search_file_content`, `Glob`→`glob`, `Bash`→`run_shell_command`) are identical across documents.
9-11: Consider addingtextlanguage specifier for consistency with the SA tooling.The "Tell Qwen" fetch instruction block at line 9 has no language specifier — identical to the pattern the SA tool correctly flags in
.qwen/INSTALL.md. While the tool didn't warn here, addingtextaligns with MD040 and makes intent explicit.♻️ Proposed fix
-``` +```text Fetch and follow instructions from https://raw.githubusercontent.com/obra/superpowers/refs/heads/main/.qwen/INSTALL.md</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@docs/README.qwen.mdaround lines 9 - 11, The fenced code block containing
the fetch instruction ("" followed by the URL line Fetch and follow instructions from https://raw.githubusercontent.com/obra/superpowers/refs/heads/main/.qwen/INSTALL.md "") should include the language specifier text (i.e., change the opening
fence to "text") so the block is explicitly marked as plain text and conforms to the MD040/SA tooling expectation; update that specific fenced block in the README.qwen content to begin withtext and keep the URL line unchanged.</details> </blockquote></details> <details> <summary>.qwen/install.sh (1)</summary><blockquote> `36-53`: **Symlink targets include a trailing `/` — strip it for cleaner links.** Because the glob `"$REPO_SKILLS_DIR"/*/` captures a trailing slash, `$skill_path` resolves to something like `/path/to/skills/brainstorming/`. The `ln -s` call embeds that slash in the stored symlink target, which is valid but non-standard (`ls -la` will show the trailing slash in the target path). `basename` already strips it for `$skill_name`, so a matching strip for `$skill_path` keeps things tidy. <details> <summary>♻️ Proposed fix</summary> ```diff skill_name=$(basename "$skill_path") + skill_path="${skill_path%/}" target_path="$SKILLS_DIR/$skill_name" ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In @.qwen/install.sh around lines 36 - 53, The symlink target currently includes a trailing slash because the glob "$REPO_SKILLS_DIR"/*/ yields paths ending with '/', so when creating the link with ln -s "$skill_path" "$target_path" the stored target contains that slash; strip the trailing slash from the source path before linking (e.g., use parameter expansion to set a variable like skill_src="${skill_path%/}" and use that for ln -s) while keeping existing variables skill_path, skill_name and target_path and preserving the existing checks for existing files/links. ``` </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 @.qwen/INSTALL.md:
- Around line 61-63: The plain fenced code blocks containing the Qwen prompts
(for example the blocks with "/skills", "use the brainstorming skill", and "help
me plan this feature using the writing-plans skill") should include a language
specifier to silence markdownlint MD040 and clarify intent; update each
triple-backtick fence to start withtext (orplaintext) so the blocks read
as text fenced code blocks rather than unspecified code blocks.In @.qwen/install.sh:
- Around line 98-102: The current awk command (awk 'NF{p=1} p') removes leading
blank lines rather than trailing, causing extra blank lines to accumulate before
appending CONTEXT_BLOCK; replace the awk trimming+mv step with a portable
trailing-blank-line trimmer (e.g., a sed loop that deletes only trailing empty
lines) applied to "$QWEN_MD", and then append CONTEXT_BLOCK using a controlled
echo/printf that ensures exactly one blank line separation (update the section
around the awk line and the echo -e "\n\n$CONTEXT_BLOCK" >> "$QWEN_MD" to use
the new sed-based trim and a single newline when appending).
Nitpick comments:
In @.qwen/install.sh:
- Around line 36-53: The symlink target currently includes a trailing slash
because the glob "$REPO_SKILLS_DIR"/*/ yields paths ending with '/', so when
creating the link with ln -s "$skill_path" "$target_path" the stored target
contains that slash; strip the trailing slash from the source path before
linking (e.g., use parameter expansion to set a variable like
skill_src="${skill_path%/}" and use that for ln -s) while keeping existing
variables skill_path, skill_name and target_path and preserving the existing
checks for existing files/links.In
@docs/README.qwen.md:
- Around line 63-65: The README table uses the tool label
Bashwhile other
docs useShell, causing inconsistency; update all occurrences of the informal
label to the canonical tool nameBashso the mapping entries remain consistent
(e.g., change anyShelllabels that map torun_shell_commandin
.qwen/INSTALL.md, QWEN.md, and the install.sh context block toBash), and
verify the table rows (Search→search_file_content,Glob→glob,
Bash→run_shell_command) are identical across documents.- Around line 9-11: The fenced code block containing the fetch instruction
("" followed by the URL line Fetch and follow instructions from https://raw.githubusercontent.com/obra/superpowers/refs/heads/main/.qwen/INSTALL.md "") should include the language specifier text (i.e., change the opening
fence to "text") so the block is explicitly marked as plain text and conforms to the MD040/SA tooling expectation; update that specific fenced block in the README.qwen content to begin withtext and keep the URL line unchanged.</details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
- docs/README.qwen.md: standardize tool naming (Bash → Shell) - docs/README.qwen.md: add text language specifier to code blocks - .qwen/install.sh: strip trailing slash in symlink targets - .qwen/install.sh: move symlink check before mkdir calls - .qwen/install.sh: use defensive awk for empty files - .qwen/INSTALL.md: add text language specifiers to Qwen prompts - README.md: link to docs/README.qwen.md for consistency Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@README.md`:
- Around line 58-60: The fenced code block that currently contains the
natural-language prompt/URL should include the Markdown language specifier
"text" to satisfy MD040; update the fenced block in README.md (the block
containing "Fetch and follow instructions from
https://raw.githubusercontent.com/obra/superpowers/refs/heads/main/.qwen/INSTALL.md")
to use ```text as the opening fence so it matches the equivalent blocks in
.qwen/INSTALL.md.
|
@claude code review please |
Satisfies MD040 by adding text language specifier to fenced code blocks containing natural-language install prompts for Qwen, Codex, and OpenCode. Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
README.md (1)
29-29:⚠️ Potential issue | 🟡 MinorUpdate the "Note" to include Qwen Code CLI.
Line 29 currently lists only Codex and OpenCode as requiring manual setup, but the newly added Qwen Code CLI section follows the same manual fetch-and-follow pattern.
📝 Proposed fix
-**Note:** Installation differs by platform. Claude Code or Cursor have built-in plugin marketplaces. Codex and OpenCode require manual setup. +**Note:** Installation differs by platform. Claude Code or Cursor have built-in plugin marketplaces. Codex, OpenCode, and Qwen Code CLI require manual setup.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@README.md` at line 29, The "Note" mentioning installation differences currently states "Codex and OpenCode require manual setup" but omits Qwen Code CLI; update that Note (the line containing "**Note:** Installation differs by platform. Claude Code or Cursor have built-in plugin marketplaces. Codex and OpenCode require manual setup.") to also mention Qwen Code CLI so it reads that Codex, OpenCode, and Qwen Code CLI require manual setup or otherwise include Qwen Code CLI in the list of tools requiring manual fetch-and-follow installation instructions.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@README.md`:
- Line 29: The "Note" mentioning installation differences currently states
"Codex and OpenCode require manual setup" but omits Qwen Code CLI; update that
Note (the line containing "**Note:** Installation differs by platform. Claude
Code or Cursor have built-in plugin marketplaces. Codex and OpenCode require
manual setup.") to also mention Qwen Code CLI so it reads that Codex, OpenCode,
and Qwen Code CLI require manual setup or otherwise include Qwen Code CLI in the
list of tools requiring manual fetch-and-follow installation instructions.
Updates installation note to mention that Qwen Code CLI, like Codex and OpenCode, requires manual fetch-and-follow setup. Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@README.md`:
- Line 29: Update the note sentence that currently reads "Codex, OpenCode, and
Qwen Code CLI" so its item order matches the README section order below (which
lists "Qwen Code CLI" first, then "Codex", then "OpenCode"); locate the note
string in README.md and reorder the three names to "Qwen Code CLI, Codex, and
OpenCode" (or alternatively reorder the sections to match the original note) so
the note and section headings are consistent.
- Correct comment for awk command (trailing → leading) - Standardize tool naming (ReadFile → read_file) in install.sh context block - Add missing web_fetch mapping to QWEN.md Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
🧹 Nitpick comments (1)
.qwen/install.sh (1)
52-52: Symlinks use absolute paths — repo relocation silently breaks all skill links.
$skill_pathis derived viapwd(line 14), so every symlink written to~/.qwen/skills/embeds the absolute path of the repo checkout. Moving or renaming the repo breaks all skills without any warning.♻️ Portable relative-path alternative
- ln -s "$skill_path" "$target_path" + # Compute path relative to the target directory for portability + rel_path="$(python3 -c "import os,sys; print(os.path.relpath(sys.argv[1], sys.argv[2]))" \ + "$skill_path" "$SKILLS_DIR")" + ln -s "$rel_path" "$target_path"If Python is unavailable, the GNU-only
ln -srflag also produces relative symlinks:- ln -s "$skill_path" "$target_path" + ln -sr "$skill_path" "$target_path"Note:
-ris GNU coreutils only; not available on macOSlnwithout a compatibility shim.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.qwen/install.sh at line 52, The current symlink creation uses an absolute path via ln -s "$skill_path" "$target_path", which breaks if the repo is moved; change it to create relative symlinks instead (compute the path from the target directory to $skill_path and pass that relative path to ln). Detect availability of a relative-symlink method: prefer GNU ln -sr if present, otherwise compute a relative path with the available Python (or a small POSIX shell fallback) and call ln -s with that relative path; keep using $skill_path and $target_path identifiers so the replacement is localized to the existing symlink logic.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In @.qwen/install.sh:
- Around line 100-104: The current awk invocation trims leading blank lines but
preserves trailing blank lines so each run accumulates extra newlines before
appending the CONTEXT_BLOCK to QWEN_MD; change the pipeline that processes
"$QWEN_MD" (the awk step) to trim trailing blank lines instead (e.g., buffer
blank lines and only print them when a non-empty line follows) and then append
the context block using a single, portable separator (replace echo -e usage) so
you append one consistent separator before "$CONTEXT_BLOCK" and avoid growing
blank lines on each run.
---
Nitpick comments:
In @.qwen/install.sh:
- Line 52: The current symlink creation uses an absolute path via ln -s
"$skill_path" "$target_path", which breaks if the repo is moved; change it to
create relative symlinks instead (compute the path from the target directory to
$skill_path and pass that relative path to ln). Detect availability of a
relative-symlink method: prefer GNU ln -sr if present, otherwise compute a
relative path with the available Python (or a small POSIX shell fallback) and
call ln -s with that relative path; keep using $skill_path and $target_path
identifiers so the replacement is localized to the existing symlink logic.
- Create relative symlinks for portability (GNU ln -sr with Python fallback) - Trim trailing (not leading) blank lines to prevent accumulation - Use printf instead of echo -e for consistent newline handling Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Add implementer, spec-reviewer, code-reviewer agent definitions - Update installer to symlink agents to ~/.qwen/agents/ - Update README.qwen.md with task() tool documentation - Update injected context with correct Task → task() mapping Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Add implementer, spec-reviewer, code-reviewer prompt templates for task() - Update installer to symlink templates over Claude Code prompt files - Enables subagent-driven-development skill for Qwen Code CLI Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- dispatching-parallel-agents: Add Qwen task() examples alongside Claude Task() - requesting-code-review: Add Qwen task() dispatch syntax - writing-skills: Add Qwen task() syntax for testing examples Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 15 out of 15 changed files in this pull request and generated 9 comments.
Comments suppressed due to low confidence (1)
skills/dispatching-parallel-agents/SKILL.md:80
- The code example labels "For Qwen Code CLI:" followed by a Python-style code block, then "For Claude Code:" followed by a TypeScript-style code block. However, the comment at line 75 in the same file says "// In Claude Code / AI environment" which suggests TypeScript/JavaScript syntax. This labeling is inconsistent with other parts of the codebase.
For consistency, consider whether:
- The label should match the comment style (Python uses
#, TypeScript uses//) - The language identifier in the code fence should be explicit (
python vstypescript) - These platform-specific examples should follow a consistent pattern across all skill files
```python
# In Qwen Code CLI environment
task(subagent_type="general-purpose", description="Fix agent-tool-abort.test.ts failures")
task(subagent_type="general-purpose", description="Fix batch-completion-behavior.test.ts failures")
task(subagent_type="general-purpose", description="Fix tool-approval-race-conditions.test.ts failures")
# All three run concurrently
// In Claude Code / AI environment
Task("Fix agent-tool-abort.test.ts failures")
Task("Fix batch-completion-behavior.test.ts failures")
Task("Fix tool-approval-race-conditions.test.ts failures")
// All three run concurrently</details>
---
💡 <a href="/obra/superpowers/new/main/.github/instructions?filename=*.instructions.md" class="Link--inTextBlock" target="_blank" rel="noopener noreferrer">Add Copilot custom instructions</a> for smarter, more guided reviews. <a href="https://docs.github.com/en/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot" class="Link--inTextBlock" target="_blank" rel="noopener noreferrer">Learn how to get started</a>.
- Add python3 availability check before using in symlink fallback - Suppress macOS/BSD sed errors with proper fallback handling - Add feedback when no prompt templates found in glob - Clarify hub pattern is correct (symlinks TO ~/.qwen, not into repo) - Align QWEN.md Task mapping with install.sh context block - Fix README.qwen.md table structure (note was interrupting rows) - Add agent symlink cleanup to uninstall instructions - Document YAML frontmatter format in agent files Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 15 out of 15 changed files in this pull request and generated 8 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Copilot AI review: note implied manual setup but installer handles it Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- README.md: reorder Qwen section to after OpenCode to match note order - install.sh: add REPO_DIR and check symlink ownership before replacing (skip symlinks pointing outside this repo — thread 8) - install.sh: skip prompt template symlinks when target dir is a symlink to avoid modifying repo source (thread 12/21) - install.sh: only prepend newline separator when QWEN.md has content to prevent blank line accumulation (thread 25) - .qwen/INSTALL.md: fix uninstall agent glob pattern from '*/superpowers/agents/*' to '*/superpowers/.qwen/agents/*' (thread 22) - .qwen/INSTALL.md: fix misleading Task mapping to 'task() tool with subagent dispatch' (thread 26) - .qwen/INSTALL.md: add agent-linking bullet to what-installer-does (thread 27) - docs/README.qwen.md: add agent-linking step to what-installer-does (thread 24) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Move symlink-is-dir check before rm to avoid deleting from repo source when parent directory is a symlink (thread 12/21) - Use portable ^[[:space:]]*$ pattern in sed instead of non-portable \n in bracket expression (thread 23) - Fix buggy awk fallback that didn't actually trim trailing blank lines; use buffer approach that correctly strips them (thread 23) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 15 out of 15 changed files in this pull request and generated 3 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
skills/writing-skills/SKILL.md (1)
12-12: Consider adding the Qwen path to the agent-directory list.Line 12 enumerates skill directories for Claude Code and Codex but omits
~/.qwen/skills/for Qwen Code CLI, which this PR introduces. Readers using this skill as a setup reference won't find the canonical Qwen path here.📝 Suggested update
-**Personal skills live in agent-specific directories (`~/.claude/skills` for Claude Code, `~/.agents/skills/` for Codex)** +**Personal skills live in agent-specific directories (`~/.claude/skills` for Claude Code, `~/.agents/skills/` for Codex, `~/.qwen/skills/` for Qwen Code CLI)**🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/writing-skills/SKILL.md` at line 12, Update the skill-directory enumeration in SKILL.md to include Qwen's canonical path by adding "~/.qwen/skills/" alongside the existing "~/.claude/skills" and "~/.agents/skills/" entries so the document lists Claude, Codex, and Qwen agent directories consistently; locate the sentence containing "`~/.claude/skills`" and "`~/.agents/skills/`" and insert "`~/.qwen/skills/`" in the same format.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.qwen/agents/code-reviewer-prompt-template.md:
- Line 26: The template line using bare placeholders BASE_SHA and HEAD_SHA is
inconsistent with the rest of the document which uses bracketed placeholders
(e.g., [From implementer's report]), so update the phrase "Review the code
changes between BASE_SHA and HEAD_SHA for:" to use bracketed placeholders
"[BASE_SHA]" and "[HEAD_SHA]" (or whichever bracket style the template standard
requires) so it matches other placeholders; ensure any other occurrences of
BASE_SHA/HEAD_SHA in the template follow the same bracketed convention and run a
quick grep of the template for BASE_SHA or HEAD_SHA to confirm all instances are
updated.
In @.qwen/agents/spec-reviewer.md:
- Around line 1-34: Remove the leading comments before the YAML frontmatter and
convert the embedded system_prompt: | YAML key into the Markdown body after the
closing frontmatter delimiter: ensure the file begins immediately with the
opening --- delimiter, keep only YAML keys (name/description/tools) inside the
frontmatter, close with a second --- and then paste the former system_prompt
text as plain Markdown (the agent prompt) after that closing ---. Repeat the
same fix for the other agent files (spec-reviewer.md, code-reviewer.md,
implementer.md) so there is no content before the first --- and no
system_prompt: YAML key inside the frontmatter.
---
Duplicate comments:
In @.qwen/agents/code-reviewer.md:
- Around line 1-29: The file has the same structural deviation as
spec-reviewer.md: remove the extraneous Markdown header lines before the top
YAML frontmatter and stop embedding the prompt under the YAML key system_prompt:
|; instead keep only the YAML frontmatter (name, description, tools) between the
--- markers and move the current block under system_prompt: | into the Markdown
body after the closing --- as the agent prompt text. Locate the tokens
"system_prompt: |" and the leading header lines and convert them so the
frontmatter is pure YAML and the prompt exists as the Markdown body following
the closing ---.
In @.qwen/agents/implementer.md:
- Around line 1-47: The file currently embeds the assistant instructions inside
a YAML key named "system_prompt: |" and has stray Markdown header lines before
the opening '---', deviating from the expected frontmatter + Markdown body
format; fix by removing the top Markdown header lines, ensure the YAML
frontmatter is only between the '---' markers (retain name/description/tools),
delete the "system_prompt: |" key and instead place its block content as the
Markdown body after the closing '---' (so the assistant prompt becomes the plain
Markdown content following the frontmatter), preserving the exact prompt text
and list items.
---
Nitpick comments:
In `@skills/writing-skills/SKILL.md`:
- Line 12: Update the skill-directory enumeration in SKILL.md to include Qwen's
canonical path by adding "~/.qwen/skills/" alongside the existing
"~/.claude/skills" and "~/.agents/skills/" entries so the document lists Claude,
Codex, and Qwen agent directories consistently; locate the sentence containing
"`~/.claude/skills`" and "`~/.agents/skills/`" and insert "`~/.qwen/skills/`" in
the same format.
.qwen/agents/spec-reviewer.md
Outdated
| # Qwen Code CLI Subagent Definition | ||
| # Format: YAML frontmatter + Markdown system prompt | ||
| # See: https://qwenlm.github.io/qwen-code-docs/en/users/features/sub-agents/ | ||
| --- | ||
| name: spec-reviewer | ||
| description: A subagent that verifies an implementation matches its specification exactly. | ||
| tools: | ||
| - read_file | ||
| - glob | ||
| system_prompt: | | ||
| You are a Spec Compliance Reviewer Subagent. Your mission is to verify that a developer's implementation matches the given specification exactly. You must determine if they built what was requested—nothing more, and nothing less. | ||
|
|
||
| ## CRITICAL: Do Not Trust Reports | ||
| The implementer's report of what they built may be incomplete or inaccurate. You MUST verify everything independently by reading the code. Do not trust their claims. | ||
|
|
||
| ## Your Job | ||
| Read the implementation code and compare it line-by-line against the requirements. | ||
|
|
||
| Your review must answer these questions: | ||
| - **Missing Requirements:** Did the implementer fail to build something that was requested? Are there any skipped or incomplete requirements? | ||
| - **Extra/Unneeded Work:** Did the implementer build features or components that were NOT requested? Did they over-engineer a simple solution? | ||
| - **Misunderstandings:** Did the implementer interpret the requirements incorrectly? Did they solve the wrong problem? | ||
|
|
||
| **Your entire review is based on reading the code, not trusting the report.** | ||
|
|
||
| ## Report Format | ||
| Your final output must be one of two options: | ||
|
|
||
| 1. If everything matches the spec perfectly: | ||
| `✅ Spec compliant` | ||
|
|
||
| 2. If there are any issues: | ||
| `❌ Issues found: [Provide a specific, file-referenced list of what is missing, extra, or misunderstood]` | ||
| --- |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, locate and examine the spec-reviewer.md file
fd -t f "spec-reviewer.md"Repository: obra/superpowers
Length of output: 42
🏁 Script executed:
# Search for subagent files in the .qwen directory
find .qwen -type f -name "*.md" 2>/dev/null | head -20Repository: obra/superpowers
Length of output: 314
🌐 Web query:
Qwen Code subagent YAML frontmatter format documentation
💡 Result:
Qwen Code subagents are configured as Markdown files with YAML frontmatter, followed by the agent’s system prompt text. The docs describe this basic frontmatter shape: name, description, and optional tools. [1]
YAML frontmatter format (basic)
---
name: agent-name
description: Brief description of when/how to use this agent
tools:
- tool1
- tool2
- tool3 # optional
---Then put the agent’s system prompt content under the frontmatter (multiple paragraphs supported), and you can use ${variable} templating inside the prompt. [1]
Where these files live
- Project-level:
.qwen/agents/(highest precedence) - User-level:
~/.qwen/agents/(fallback) - (Optionally) extension-provided agents, discovered from enabled extensions [1]
🏁 Script executed:
cat -n .qwen/agents/spec-reviewer.md | head -40Repository: obra/superpowers
Length of output: 1985
🏁 Script executed:
cat -n .qwen/agents/code-reviewer.md | head -40Repository: obra/superpowers
Length of output: 1894
🏁 Script executed:
cat -n .qwen/agents/implementer.md | head -40Repository: obra/superpowers
Length of output: 2163
Subagent file structure deviates from the Qwen Code spec — agent will silently fail to load.
The official Qwen Code subagent format requires:
- The YAML opening
---delimiter at line 1 (no content before it). - The system prompt as the Markdown body after the closing
---, not as asystem_prompt:YAML key inside the frontmatter.
This file has comment lines on lines 1–3 before the opening ---, and buries the system prompt under a system_prompt: | YAML key, leaving nothing after the closing --- on line 34. The official docs show the format as --- followed by YAML metadata, then a second ---, with the system prompt content appearing as plain Markdown body afterwards.
The same issue applies to .qwen/agents/code-reviewer.md and .qwen/agents/implementer.md.
🐛 Proposed fix
-# Qwen Code CLI Subagent Definition
-# Format: YAML frontmatter + Markdown system prompt
-# See: https://qwenlm.github.io/qwen-code-docs/en/users/features/sub-agents/
---
name: spec-reviewer
description: A subagent that verifies an implementation matches its specification exactly.
tools:
- read_file
- glob
-system_prompt: |
- You are a Spec Compliance Reviewer Subagent. Your mission is to verify...
- ...
- ## Report Format
- ...
- 2. If there are any issues:
- `❌ Issues found: [Provide a specific, file-referenced list of what is missing, extra, or misunderstood]`
---
+
+You are a Spec Compliance Reviewer Subagent. Your mission is to verify that a developer's implementation matches the given specification exactly. You must determine if they built what was requested—nothing more, and nothing less.
+
+## CRITICAL: Do Not Trust Reports
+The implementer's report of what they built may be incomplete or inaccurate. You MUST verify everything independently by reading the code. Do not trust their claims.
+
+## Your Job
+Read the implementation code and compare it line-by-line against the requirements.
+
+Your review must answer these questions:
+- **Missing Requirements:** Did the implementer fail to build something that was requested? Are there any skipped or incomplete requirements?
+- **Extra/Unneeded Work:** Did the implementer build features or components that were NOT requested? Did they over-engineer a simple solution?
+- **Misunderstandings:** Did the implementer interpret the requirements incorrectly? Did they solve the wrong problem?
+
+**Your entire review is based on reading the code, not trusting the report.**
+
+## Report Format
+Your final output must be one of two options:
+
+1. If everything matches the spec perfectly:
+ `✅ Spec compliant`
+
+2. If there are any issues:
+ `❌ Issues found: [Provide a specific, file-referenced list of what is missing, extra, or misunderstood]`🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 13-13: Headings must start at the beginning of the line
(MD023, heading-start-left)
[warning] 16-16: Headings must start at the beginning of the line
(MD023, heading-start-left)
[warning] 26-26: Headings must start at the beginning of the line
(MD023, heading-start-left)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.qwen/agents/spec-reviewer.md around lines 1 - 34, Remove the leading
comments before the YAML frontmatter and convert the embedded system_prompt: |
YAML key into the Markdown body after the closing frontmatter delimiter: ensure
the file begins immediately with the opening --- delimiter, keep only YAML keys
(name/description/tools) inside the frontmatter, close with a second --- and
then paste the former system_prompt text as plain Markdown (the agent prompt)
after that closing ---. Repeat the same fix for the other agent files
(spec-reviewer.md, code-reviewer.md, implementer.md) so there is no content
before the first --- and no system_prompt: YAML key inside the frontmatter.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 15 out of 15 changed files in this pull request and generated 3 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Fix version mismatch in qwen-extension.json (4.3.0 → 4.3.1) to match other plugin manifests (.claude-plugin, .cursor-plugin) - Fix templates_linked counter in install.sh: move increment to after successful symlink creation so the 'No prompt template files found' message accurately reflects whether templates were actually linked - Fix agent uninstall path in docs/README.qwen.md: use '*/superpowers/.qwen/agents/*' pattern to match actual symlink targets created by the installer (agents live in .qwen/agents/, not agents/) - Add agent linking step to INSTALL.md installer description (was omitted) - Fix misleading 'Task with subagents → sequential execution' mapping in INSTALL.md; now correctly says 'task() tool with subagent_type parameter' - Add text language specifiers to bare fenced code blocks in INSTALL.md (silences markdownlint MD040)
|
@coderabbitai @copilot please review this PR for Qwen Code CLI support. |
- Update agent file structure (remove leading headers, move prompt to body) - consistent placeholder format [BASE_SHA] and [HEAD_SHA] - Add Qwen path to writing-skills/SKILL.md
Summary
Adds native Qwen Code CLI support following the same patterns as Codex and OpenCode
installers, incorporating findings from #128.
Context
Issue #128 documented that context files (GEMINI.md/QWEN.md) are advisory, not
executable — the model ignores mandatory instructions in them. The community
converged on: install script + individual skill symlinks (hub pattern) + context
injection with tool mappings. This PR follows that pattern, matching
.codex/INSTALL.mdand.opencode/INSTALL.md.Changes
.qwen/install.sh— Install script that:~/.qwen/skills/(hub pattern, coexistswith user skills)
~/.qwen/QWEN.mdwith idempotent markers(
<!-- SUPERPOWERS-CONTEXT-START/END -->).qwen/INSTALL.md— Installation guide (fetch-and-follow pattern, matchingCodex/OpenCode)
QWEN.md— Context file with tool mapping (no mandatory language)qwen-extension.json— Extension manifest (alternative install path)docs/README.qwen.md— Full docs: tool mapping table, usage, updating,uninstalling, troubleshooting
README.md— Added Qwen section using fetch-and-follow install patternHow to Test