feat: implement sentinel progress tracking and dynamic skill discovery#458
feat: implement sentinel progress tracking and dynamic skill discovery#458
Conversation
This PR introduces two major enhancements to Superpowers: 1. Sentinel: Automated progress tracking in PROGRESS.md during plan execution for better transparency. 2. Discovery: Lightweight SKILLS_INDEX.md generation and lookup to prevent context overload with large skill libraries. 3. Windows Adaptability: Improved OS command mapping documentation in using-superpowers skill. These changes handle scalability (900+ skills) and improve the development experience on Windows.
📝 WalkthroughWalkthroughThe PR introduces progress tracking infrastructure and skill discovery/indexing capabilities. It adds a PROGRESS.md tracking document, dual index generation scripts (Node.js and Python), a generated skills index, planning documentation, and updates existing skill guides with cross-platform guidance and discovery strategies. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 Generate unit tests (beta)
No actionable comments were generated in the recent review. 🎉 🧹 Recent nitpick comments
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 |
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Fix all issues with AI agents
In `@docs/plans/2026-02-12-sentinel-discovery.md`:
- Around line 18-21: Update "Task 2: Implement Skill Discovery Index" to mention
both generator scripts by adding `lib/scripts/generate_skills_index.js`
alongside `lib/scripts/generate_skills_index.py` (and keep
`skills/SKILLS_INDEX.md`), or replace the single-file listing with a short note
explaining why both variants are included (e.g., environment flexibility or
compatibility), referencing the filenames `generate_skills_index.py` and
`generate_skills_index.js` so readers can locate the JS and Python
implementations.
In `@lib/scripts/generate_skills_index.js`:
- Around line 10-36: The current getFiles -> skillFiles loop can produce
non-deterministic output and unescaped Markdown pipes; after computing
skillFiles, sort the array (e.g., skillFiles.sort()) to make order
deterministic, and before appending to indexContent escape any pipe characters
in the parsed name and description (replace '|' with '\|' and keep the existing
trimming/quote-stripping logic). Update references in the processing block that
compute name and description so the sanitized values are used when building
indexContent, preserving the fallback for name
(path.basename(path.dirname(file))) and default description.
In `@lib/scripts/generate_skills_index.py`:
- Around line 10-23: The loop using os.walk in generate_skills_index.py produces
non-deterministic order and leaves pipe characters unescaped; instead, collect
all SKILL.md paths (using the current os.walk over root, _dirs, files), build a
list of skill_path entries, sort that list, then iterate the sorted list when
reading content to append to index_content; additionally, sanitize description
by escaping any '|' characters (e.g., replace '|' with '\|') before writing into
the Markdown table and rename dirs → _dirs to address the Ruff B007 warning;
keep the existing name_match/desc_match logic (name_match, desc_match,
skill_path, index_content) when implementing these changes.
In `@PROGRESS.md`:
- Around line 1-9: PROGRESS.md was committed with session-specific rows instead
of a reusable template; update the file so it contains only the header and an
empty table (or a clear placeholder row) and include a short note about
lifecycle (whether sessions should append or start fresh). Locate the
PROGRESS.md table (the markdown header and the | Date & Time | Task Description
| Status | Commit / Evidence | row) and remove the five pre-populated entries,
replacing them with either an empty table skeleton or a one-line placeholder
like "No entries yet — append per session" plus a brief comment explaining
expected usage (append vs reset).
In `@skills/executing-plans/SKILL.md`:
- Around line 31-32: Edit the SKILL.md instruction that currently says "Update
`PROGRESS.md`" to explicitly specify the repository root path (e.g., "Update
./PROGRESS.md" or "Update root PROGRESS.md") so readers know which PROGRESS.md
to modify; update the line in SKILL.md where the step references `PROGRESS.md`
to include the explicit path.
In `@skills/using-superpowers/SKILL.md`:
- Around line 99-107: Update the Windows equivalent for creating an empty file
in the table row that currently shows `touch file` -> `echo. > file`: replace
`echo. > file` with the correct CMD and PowerShell commands — `type nul > file`
for CMD and `New-Item file -ItemType File` for PowerShell — and ensure the
Purpose column still reads "Create empty file" so the mapping (`touch file`)
reflects the accurate Windows alternatives.
🧹 Nitpick comments (4)
skills/SKILLS_INDEX.md (1)
1-19: Risk of static index drifting from actual skills.This file is committed as a static artifact, but there are generator scripts (
generate_skills_index.js/.py) that produce the same content dynamically. If new skills are added without re-running the generator, this index will silently go stale. Consider either:
- Adding a CI step or git hook to regenerate and verify this file, or
- Adding a comment at the top noting it's auto-generated (e.g.,
<!-- AUTO-GENERATED — do not edit manually. Run lib/scripts/generate_skills_index.py to regenerate. -->)lib/scripts/generate_skills_index.py (1)
34-34: Orphaned comment — no corresponding code.Line 34 says
# Also handle the awesome-automation if linkedbut there's no implementation following it. Remove the comment or implement the handling.lib/scripts/generate_skills_index.js (2)
42-46:generateIndexexecutes immediately at module level and is not exported.Calling
generateIndexunconditionally at the top level meansrequire()-ing this module triggers a side effect (file write). Consider guarding withrequire.main === moduleand exporting the function for reuse:Proposed fix
+module.exports = { generateIndex }; + -const baseDir = path.resolve(__dirname, '../..'); -const skillsDir = path.join(baseDir, 'skills'); -const outputFile = path.join(baseDir, 'skills/SKILLS_INDEX.md'); - -generateIndex(skillsDir, outputFile); +if (require.main === module) { + const baseDir = path.resolve(__dirname, '../..'); + const skillsDir = path.join(baseDir, 'skills'); + const outputFile = path.join(baseDir, 'skills/SKILLS_INDEX.md'); + generateIndex(skillsDir, outputFile); +}
13-14: Parameterfileis reassigned insideforEach, shadowing the callback parameter.This works but harms readability. Use a different variable name for the resolved path.
Proposed fix
list.forEach(file => { - file = path.join(dir, file); - const stat = fs.statSync(file); + const filePath = path.join(dir, file); + const stat = fs.statSync(filePath); if (stat && stat.isDirectory()) { - results = results.concat(getFiles(file)); - } else if (file.endsWith('SKILL.md')) { - results.push(file); + results = results.concat(getFiles(filePath)); + } else if (filePath.endsWith('SKILL.md')) { + results.push(filePath); } });
| ### Task 2: Implement Skill Discovery Index | ||
| **Files:** | ||
| - Create: `lib/scripts/generate_skills_index.py` | ||
| - Create: `skills/SKILLS_INDEX.md` |
There was a problem hiding this comment.
Plan omits the JS variant of the generator script.
Task 2 lists only generate_skills_index.py, but the PR also ships generate_skills_index.js. Update the plan to reflect both files, or document why both exist (e.g., environment flexibility).
🤖 Prompt for AI Agents
In `@docs/plans/2026-02-12-sentinel-discovery.md` around lines 18 - 21, Update
"Task 2: Implement Skill Discovery Index" to mention both generator scripts by
adding `lib/scripts/generate_skills_index.js` alongside
`lib/scripts/generate_skills_index.py` (and keep `skills/SKILLS_INDEX.md`), or
replace the single-file listing with a short note explaining why both variants
are included (e.g., environment flexibility or compatibility), referencing the
filenames `generate_skills_index.py` and `generate_skills_index.js` so readers
can locate the JS and Python implementations.
| const getFiles = (dir) => { | ||
| let results = []; | ||
| const list = fs.readdirSync(dir); | ||
| list.forEach(file => { | ||
| file = path.join(dir, file); | ||
| const stat = fs.statSync(file); | ||
| if (stat && stat.isDirectory()) { | ||
| results = results.concat(getFiles(file)); | ||
| } else if (file.endsWith('SKILL.md')) { | ||
| results.push(file); | ||
| } | ||
| }); | ||
| return results; | ||
| }; | ||
|
|
||
| const skillFiles = getFiles(skillsDir); | ||
|
|
||
| skillFiles.forEach(file => { | ||
| const content = fs.readFileSync(file, 'utf8'); | ||
| const nameMatch = content.match(/^name:\s*(.+)$/m); | ||
| const descMatch = content.match(/^description:\s*(.+)$/m); | ||
|
|
||
| const name = nameMatch ? nameMatch[1].trim() : path.basename(path.dirname(file)); | ||
| const description = descMatch ? descMatch[1].trim().replace(/^"|"$/g, '') : "No description available."; | ||
|
|
||
| indexContent += `| ${name} | ${description} |\n`; | ||
| }); |
There was a problem hiding this comment.
Same issues as the Python variant: non-deterministic order and unescaped pipes.
readdirSync order is OS-dependent. Sort skillFiles before iterating, and escape | in name/description to protect the Markdown table. See the Python file comment for rationale.
Proposed fix (sorting + escaping)
const skillFiles = getFiles(skillsDir);
+ skillFiles.sort();
skillFiles.forEach(file => {
const content = fs.readFileSync(file, 'utf8');
const nameMatch = content.match(/^name:\s*(.+)$/m);
const descMatch = content.match(/^description:\s*(.+)$/m);
- const name = nameMatch ? nameMatch[1].trim() : path.basename(path.dirname(file));
- const description = descMatch ? descMatch[1].trim().replace(/^"|"$/g, '') : "No description available.";
+ const name = (nameMatch ? nameMatch[1].trim() : path.basename(path.dirname(file))).replace(/\|/g, '\\|');
+ const description = (descMatch ? descMatch[1].trim().replace(/^"|"$/g, '') : "No description available.").replace(/\|/g, '\\|');
indexContent += `| ${name} | ${description} |\n`;
});🤖 Prompt for AI Agents
In `@lib/scripts/generate_skills_index.js` around lines 10 - 36, The current
getFiles -> skillFiles loop can produce non-deterministic output and unescaped
Markdown pipes; after computing skillFiles, sort the array (e.g.,
skillFiles.sort()) to make order deterministic, and before appending to
indexContent escape any pipe characters in the parsed name and description
(replace '|' with '\|' and keep the existing trimming/quote-stripping logic).
Update references in the processing block that compute name and description so
the sanitized values are used when building indexContent, preserving the
fallback for name (path.basename(path.dirname(file))) and default description.
| for root, dirs, files in os.walk(skills_dir): | ||
| if "SKILL.md" in files: | ||
| skill_path = os.path.join(root, "SKILL.md") | ||
| with open(skill_path, 'r', encoding='utf-8') as f: | ||
| content = f.read() | ||
|
|
||
| # Extract frontmatter name and description | ||
| name_match = re.search(r'^name:\s*(.+)$', content, re.MULTILINE) | ||
| desc_match = re.search(r'^description:\s*(.+)$', content, re.MULTILINE) | ||
|
|
||
| name = name_match.group(1).strip() if name_match else os.path.basename(root) | ||
| description = desc_match.group(1).strip().strip('"') if desc_match else "No description available." | ||
|
|
||
| index_content += f"| {name} | {description} |\n" |
There was a problem hiding this comment.
Non-deterministic output order and unescaped pipe characters.
Two issues:
os.walktraversal order is filesystem-dependent, so the generated index will vary between runs/platforms, causing noisy diffs. Sort the discovered skill files before iterating.- Pipe characters (
|) in skill descriptions will break the Markdown table. Escape them.
Proposed fix
- for root, dirs, files in os.walk(skills_dir):
- if "SKILL.md" in files:
- skill_path = os.path.join(root, "SKILL.md")
- with open(skill_path, 'r', encoding='utf-8') as f:
- content = f.read()
-
- # Extract frontmatter name and description
- name_match = re.search(r'^name:\s*(.+)$', content, re.MULTILINE)
- desc_match = re.search(r'^description:\s*(.+)$', content, re.MULTILINE)
-
- name = name_match.group(1).strip() if name_match else os.path.basename(root)
- description = desc_match.group(1).strip().strip('"') if desc_match else "No description available."
-
- index_content += f"| {name} | {description} |\n"
+ skill_files = []
+ for root, _dirs, files in os.walk(skills_dir):
+ if "SKILL.md" in files:
+ skill_files.append(os.path.join(root, "SKILL.md"))
+ skill_files.sort()
+
+ for skill_path in skill_files:
+ with open(skill_path, 'r', encoding='utf-8') as f:
+ content = f.read()
+
+ name_match = re.search(r'^name:\s*(.+)$', content, re.MULTILINE)
+ desc_match = re.search(r'^description:\s*(.+)$', content, re.MULTILINE)
+
+ name = name_match.group(1).strip() if name_match else os.path.basename(os.path.dirname(skill_path))
+ description = desc_match.group(1).strip().strip('"') if desc_match else "No description available."
+
+ # Escape pipes to preserve Markdown table formatting
+ name = name.replace('|', '\\|')
+ description = description.replace('|', '\\|')
+
+ index_content += f"| {name} | {description} |\n"This also addresses the Ruff B007 warning by renaming dirs → _dirs.
📝 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.
| for root, dirs, files in os.walk(skills_dir): | |
| if "SKILL.md" in files: | |
| skill_path = os.path.join(root, "SKILL.md") | |
| with open(skill_path, 'r', encoding='utf-8') as f: | |
| content = f.read() | |
| # Extract frontmatter name and description | |
| name_match = re.search(r'^name:\s*(.+)$', content, re.MULTILINE) | |
| desc_match = re.search(r'^description:\s*(.+)$', content, re.MULTILINE) | |
| name = name_match.group(1).strip() if name_match else os.path.basename(root) | |
| description = desc_match.group(1).strip().strip('"') if desc_match else "No description available." | |
| index_content += f"| {name} | {description} |\n" | |
| skill_files = [] | |
| for root, _dirs, files in os.walk(skills_dir): | |
| if "SKILL.md" in files: | |
| skill_files.append(os.path.join(root, "SKILL.md")) | |
| skill_files.sort() | |
| for skill_path in skill_files: | |
| with open(skill_path, 'r', encoding='utf-8') as f: | |
| content = f.read() | |
| name_match = re.search(r'^name:\s*(.+)$', content, re.MULTILINE) | |
| desc_match = re.search(r'^description:\s*(.+)$', content, re.MULTILINE) | |
| name = name_match.group(1).strip() if name_match else os.path.basename(os.path.dirname(skill_path)) | |
| description = desc_match.group(1).strip().strip('"') if desc_match else "No description available." | |
| # Escape pipes to preserve Markdown table formatting | |
| name = name.replace('|', '\\|') | |
| description = description.replace('|', '\\|') | |
| index_content += f"| {name} | {description} |\n" |
🧰 Tools
🪛 Ruff (0.15.0)
[warning] 10-10: Loop control variable dirs not used within loop body
Rename unused dirs to _dirs
(B007)
🤖 Prompt for AI Agents
In `@lib/scripts/generate_skills_index.py` around lines 10 - 23, The loop using
os.walk in generate_skills_index.py produces non-deterministic order and leaves
pipe characters unescaped; instead, collect all SKILL.md paths (using the
current os.walk over root, _dirs, files), build a list of skill_path entries,
sort that list, then iterate the sorted list when reading content to append to
index_content; additionally, sanitize description by escaping any '|' characters
(e.g., replace '|' with '\|') before writing into the Markdown table and rename
dirs → _dirs to address the Ruff B007 warning; keep the existing
name_match/desc_match logic (name_match, desc_match, skill_path, index_content)
when implementing these changes.
| # Project Progress Tracking (Sentinel) | ||
|
|
||
| | Date & Time | Task Description | Status | Commit / Evidence | | ||
| |-------------|------------------|--------|-------------------| | ||
| | 2026-02-12 17:45 | Initial PR Design & Planning | ✅ COMPLETED | Brainstorming Session | | ||
| | 2026-02-12 17:55 | OS Adaptability Mapping | ✅ COMPLETED | Updated skills/using-superpowers/SKILL.md | | ||
| | 2026-02-12 17:58 | Skill Discovery Indexing | ✅ COMPLETED | Added SKILLS_INDEX.md & Generator | | ||
| | 2026-02-12 18:02 | Sentinel Logic Integration | ✅ COMPLETED | Updated skills/executing-plans/SKILL.md | | ||
| | 2026-02-12 18:05 | Skill Index Verification | ✅ VERIFIED | SKILLS_INDEX.md generated correctly | |
There was a problem hiding this comment.
This was intended as a template but contains session-specific data.
The plan (docs/plans/2026-02-12-sentinel-discovery.md, Task 3) describes this as Create: PROGRESS.md (template), but it ships with five pre-populated entries from this implementation session. For reuse across future plan executions, consider either shipping an empty template (header + empty table) or clarifying the intended lifecycle — should new sessions append here or start fresh?
🤖 Prompt for AI Agents
In `@PROGRESS.md` around lines 1 - 9, PROGRESS.md was committed with
session-specific rows instead of a reusable template; update the file so it
contains only the header and an empty table (or a clear placeholder row) and
include a short note about lifecycle (whether sessions should append or start
fresh). Locate the PROGRESS.md table (the markdown header and the | Date & Time
| Task Description | Status | Commit / Evidence | row) and remove the five
pre-populated entries, replacing them with either an empty table skeleton or a
one-line placeholder like "No entries yet — append per session" plus a brief
comment explaining expected usage (append vs reset).
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Fix all issues with AI agents
In `@docs/plans/2026-02-12-sentinel-discovery.md`:
- Around line 14-26: The document jumps from an H1 to H3 for task sections;
update the task headings so they are H2 instead of H3 (e.g., change "### Task 1:
Update `using-superpowers`..." to "## Task 1: Update `using-superpowers`..." and
do the same for Task 2 and Task 3) across the plan file and ensure corresponding
TOC/links (if any) still resolve; verify related files named SKILL.md,
generate_skills_index.js, SKILLS_INDEX.md, and PROGRESS.md mentioned in the plan
remain referenced consistently after the heading level changes.
In `@pr_body.md`:
- Around line 12-13: Change instances of the incorrect noun-form "lookup" used
as a verb to the two-word verb phrase "look up" in the new docs and skill text:
update the PR body entry that mentions "using-superpowers" and the README/skill
guidance added by generate_skills_index.js (and any references in
SKILLS_INDEX.md) so the phrasing reads "look up the index" (e.g., in the
"using-superpowers" skill guidance and the bullet describing the SKILLS_INDEX.md
generation).
In `@skills/using-superpowers/SKILL.md`:
- Around line 99-107: The Windows column header "Windows (CMD/PowerShell)" is
misleading because the example "type nul > file" is CMD-only; update the table
in SKILL.md to either change the header to "Windows (CMD)" or add a PowerShell
equivalent for the "touch file" row (e.g., use New-Item file -ItemType File) so
the Windows column content matches the header; locate the table and the "touch
file" / "type nul > file" cell and make the header or cell change accordingly.
🧹 Nitpick comments (1)
skills/using-superpowers/SKILL.md (1)
89-91: Tighten wording.“Highly relevant” is redundant; “relevant” reads cleaner.
✏️ Suggested edit
-3. **Invoke specific skills** - Use the Skill tool (or Read tool in other environments) only on those highly relevant skills. +3. **Invoke specific skills** - Use the Skill tool (or Read tool in other environments) only on those relevant skills.
| ### Task 1: Update `using-superpowers` (OS Adaptability) | ||
| **Files:** | ||
| - Modify: `skills/using-superpowers/SKILL.md` | ||
|
|
||
| ### Task 2: Implement Skill Discovery Index | ||
| **Files:** | ||
| - Create: `lib/scripts/generate_skills_index.js` | ||
| - Create: `skills/SKILLS_INDEX.md` | ||
|
|
||
| ### Task 3: Implement Sentinel Logic (Progress Tracking) | ||
| **Files:** | ||
| - Modify: `skills/executing-plans/SKILL.md` | ||
| - Create: `PROGRESS.md` (template) |
There was a problem hiding this comment.
Heading level jumps from H1 to H3.
For Markdown consistency, use H2 for task sections under the H1.
✏️ Suggested fix
-### Task 1: Update `using-superpowers` (OS Adaptability)
+## Task 1: Update `using-superpowers` (OS Adaptability)
...
-### Task 2: Implement Skill Discovery Index
+## Task 2: Implement Skill Discovery Index
...
-### Task 3: Implement Sentinel Logic (Progress Tracking)
+## Task 3: Implement Sentinel Logic (Progress Tracking)📝 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.
| ### Task 1: Update `using-superpowers` (OS Adaptability) | |
| **Files:** | |
| - Modify: `skills/using-superpowers/SKILL.md` | |
| ### Task 2: Implement Skill Discovery Index | |
| **Files:** | |
| - Create: `lib/scripts/generate_skills_index.js` | |
| - Create: `skills/SKILLS_INDEX.md` | |
| ### Task 3: Implement Sentinel Logic (Progress Tracking) | |
| **Files:** | |
| - Modify: `skills/executing-plans/SKILL.md` | |
| - Create: `PROGRESS.md` (template) | |
| ## Task 1: Update `using-superpowers` (OS Adaptability) | |
| **Files:** | |
| - Modify: `skills/using-superpowers/SKILL.md` | |
| ## Task 2: Implement Skill Discovery Index | |
| **Files:** | |
| - Create: `lib/scripts/generate_skills_index.js` | |
| - Create: `skills/SKILLS_INDEX.md` | |
| ## Task 3: Implement Sentinel Logic (Progress Tracking) | |
| **Files:** | |
| - Modify: `skills/executing-plans/SKILL.md` | |
| - Create: `PROGRESS.md` (template) |
🧰 Tools
🪛 markdownlint-cli2 (0.20.0)
[warning] 14-14: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
🤖 Prompt for AI Agents
In `@docs/plans/2026-02-12-sentinel-discovery.md` around lines 14 - 26, The
document jumps from an H1 to H3 for task sections; update the task headings so
they are H2 instead of H3 (e.g., change "### Task 1: Update
`using-superpowers`..." to "## Task 1: Update `using-superpowers`..." and do the
same for Task 2 and Task 3) across the plan file and ensure corresponding
TOC/links (if any) still resolve; verify related files named SKILL.md,
generate_skills_index.js, SKILLS_INDEX.md, and PROGRESS.md mentioned in the plan
remain referenced consistently after the heading level changes.
pr_body.md
Outdated
| - Added a Node.js-based `generate_skills_index.js` script to create a lightweight `SKILLS_INDEX.md`. | ||
| - Updated `using-superpowers` skill to guide agents to lookup the index first, preventing context bloat and token waste. |
There was a problem hiding this comment.
Grammar: “look up” as verb.
Prefer “look up the index” instead of “lookup the index.”
✏️ Suggested edit
-- Updated `using-superpowers` skill to guide agents to lookup the index first, preventing context bloat and token waste.
+- Updated `using-superpowers` skill to guide agents to look up the index first, preventing context bloat and token waste.📝 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.
| - Added a Node.js-based `generate_skills_index.js` script to create a lightweight `SKILLS_INDEX.md`. | |
| - Updated `using-superpowers` skill to guide agents to lookup the index first, preventing context bloat and token waste. | |
| - Added a Node.js-based `generate_skills_index.js` script to create a lightweight `SKILLS_INDEX.md`. | |
| - Updated `using-superpowers` skill to guide agents to look up the index first, preventing context bloat and token waste. |
🧰 Tools
🪛 LanguageTool
[grammar] ~13-~13: Ensure spelling is correct
Context: ...g-superpowers` skill to guide agents to lookup the index first, preventing context blo...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
🤖 Prompt for AI Agents
In `@pr_body.md` around lines 12 - 13, Change instances of the incorrect noun-form
"lookup" used as a verb to the two-word verb phrase "look up" in the new docs
and skill text: update the PR body entry that mentions "using-superpowers" and
the README/skill guidance added by generate_skills_index.js (and any references
in SKILLS_INDEX.md) so the phrasing reads "look up the index" (e.g., in the
"using-superpowers" skill guidance and the bullet describing the SKILLS_INDEX.md
generation).
| | POSIX / Linux | Windows (CMD/PowerShell) | Purpose | | ||
| |---------------|--------------------------|---------| | ||
| | `ls -la` | `dir` | List files | | ||
| | `rm -rf <dir>` | `rmdir /s /q <dir>` | Delete directory | | ||
| | `cp -r` | `xcopy /e /i /y` | Copy directory | | ||
| | `grep "text"` | `findstr "text"` | Search in files | | ||
| | `cat file` | `type file` | View file content | | ||
| | `touch file` | `type nul > file` | Create empty file (CMD) | | ||
|
|
There was a problem hiding this comment.
Windows column mixes CMD-only syntax while labeled CMD/PowerShell.
type nul > file is CMD-only. Either change the column header to “CMD” or add a PowerShell equivalent (e.g., New-Item file -ItemType File) to avoid misleading guidance.
✅ Suggested fix (add PowerShell variant)
-| POSIX / Linux | Windows (CMD/PowerShell) | Purpose |
+| POSIX / Linux | Windows (CMD / PowerShell) | Purpose |
...
-| `touch file` | `type nul > file` | Create empty file (CMD) |
+| `touch file` | `type nul > file` / `New-Item file -ItemType File` | Create empty file |🤖 Prompt for AI Agents
In `@skills/using-superpowers/SKILL.md` around lines 99 - 107, The Windows column
header "Windows (CMD/PowerShell)" is misleading because the example "type nul >
file" is CMD-only; update the table in SKILL.md to either change the header to
"Windows (CMD)" or add a PowerShell equivalent for the "touch file" row (e.g.,
use New-Item file -ItemType File) so the Windows column content matches the
header; locate the table and the "touch file" / "type nul > file" cell and make
the header or cell change accordingly.
This PR introduces two major enhancements to Superpowers:
These changes handle scalability (900+ skills) and improve the development experience on Windows.
Motivation and Context
How Has This Been Tested?
Breaking Changes
Types of changes
Checklist
Additional context
Summary by CodeRabbit