[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6RTQMV7BCRR39HMC7G8F03J":3,"skill-same:01M6RTQMV7BCRR39HMC7G8F03J":77},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":55,"commitSha":56,"skillDirectory":5,"forksCount":57,"repositoryHtmlUrl":58,"repositoryHomepageUrl":59,"ownerHtmlUrl":60,"ownerBlogUrl":61,"ownerDescription":6,"updatedAt":62,"install":63,"resources":76},"01M6RTQMV7BCRR39HMC7G8F03J","git-code-review",null,"Review uncommitted or committed changes in the current branch and generate a code review report. Use when the user wants to review their changes before or after committing.","ZhaoYis\u002FMy-Skills","ZhaoYis","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F22954818?v=4","01M6RTMA12BZDGXFDESDB627H0","大師兄丶","01M6RTMA5H8NVC8J3KZPJQF4GP",2,"MIT","https:\u002F\u002Fgithub.com\u002FZhaoYis\u002FMy-Skills\u002Fblob\u002Fmain\u002Fgit-code-review\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"code review","review","code","git","git code review","cli","generate","report","repository","branch","user","use","git cli","changes","review report","when","2026-11-10 10:12:30",false,"---\nname: git-code-review\ndescription: Review uncommitted or committed changes in the current branch and generate a code review report. Use when the user wants to review their changes before or after committing.\nlicense: MIT\ncompatibility: Requires git CLI and a git repository.\nmetadata:\n  author: zhaoyi\n  version: \"1.6\"\n  generatedBy: \"1.0.0\"\n---\n\nReview uncommitted or committed changes in the current branch and generate a code review report.\n\n**Input**: Optionally specify:\n- Review scope: `unstaged`, `staged`, `unpushed`, `all`\n- Review focus: `security`, `performance`, `style`, `architecture`, `all`\n\n**IMPORTANT**: This skill MUST read `openspec\u002Fproject.md` before performing the review to understand project-specific conventions and constraints.\n\n**重要**: 审查报告必须使用中文输出。\n\n**Steps**\n\n1. **Load project conventions**\n\n   **CRITICAL**: First read `openspec\u002Fproject.md` to get:\n   - Technology stack constraints\n   - Layered architecture rules\n   - Naming conventions\n   - Code style requirements\n   - Design patterns\n   - Important constraints\n\n   Use these conventions as the baseline for the review.\n\n2. **Determine review scope**\n\n   Run `git status` to see all changes.\n\n   Run `git branch --show-current` to get the current branch name.\n\n   Use **AskUserQuestion tool** to ask what to review:\n\n   **Review scope options:**\n   - `unstaged` - Only unstaged changes (default if no staged changes)\n   - `staged` - Only staged changes (default if staged changes exist)\n   - `unpushed` - All commits not yet pushed to remote\n   - `all` - All uncommitted changes + unpushed commits\n\n   **If `unpushed` or `all`:**\n   ```bash\n   git log origin\u002F\u003Ccurrent-branch>..HEAD --oneline\n   ```\n   to list unpushed commits.\n\n3. **Get diff content**\n\n   For **unstaged changes:**\n   ```bash\n   git diff\n   ```\n\n   For **staged changes:**\n   ```bash\n   git diff --cached\n   ```\n\n   For **unpushed commits:**\n   ```bash\n   git diff origin\u002F\u003Ccurrent-branch>..HEAD\n   ```\n\n   For **all changes:**\n   ```bash\n   git diff HEAD\n   git log origin\u002F\u003Ccurrent-branch>..HEAD --oneline\n   ```\n\n   Run `git diff --stat` to get a summary of changes.\n\n4. **Secret scanning**\n\n   Use `git diff` output to scan for potential secrets:\n   - API keys (patterns like `api_key`, `apikey`, `API_KEY`)\n   - Passwords (`password`, `passwd`, `pwd`)\n   - Tokens (`token`, `access_token`, `refresh_token`)\n   - Private keys (`-----BEGIN.*PRIVATE KEY-----`)\n   - Database URLs with credentials\n   - AWS\u002FAzure\u002FGCP credentials\n\n   **If secrets detected:**\n   - Add to Critical issues section\n   - Suggest using environment variables or secret management\n   - Warn about git history (may need `git filter-branch` or BFG)\n\n5. **Perform code review based on openspec\u002Fproject.md**\n\n   Analyze the changes against the project conventions loaded from `openspec\u002Fproject.md`:\n\n   **5.1 Technology Stack Compliance:**\n   - Java 8 compatibility (no Java 9+ features: `var`, `record`, `sealed`, pattern matching, text blocks)\n   - Spring Boot annotations usage\n   - MyBatis\u002FMyBatis-Plus usage (`@TableName`)\n   - MapStruct for object conversion\n   - Lombok annotations (`@Data`, `@Builder`, `@Slf4j`, `@AllArgsConstructor`, `@NoArgsConstructor`)\n   - PageHelper for pagination\n   - Swagger 2 (`@Api`, `@ApiOperation`, `@ApiModelProperty`) or OpenAPI 3 (`@Schema`)\n\n   **5.2 Layered Architecture Compliance:**\n   Check that code follows the strict layering: Web → Biz → Core → Common\n   - No reverse dependencies (lower layers depending on upper layers)\n   - No cross-layer dependencies (each layer only depends on direct lower layer)\n\n   **5.3 Naming Conventions:**\n\n   | Type | Pattern | Example |\n   |------|---------|---------|\n   | Controller | `*Controller` | `PurWebContractPaymentBaseController` |\n   | BizService | `*BizService` \u002F `*BizServiceImpl` | `ContractPaymentBaseBizService` |\n   | DomainService | `*DomainService` \u002F `*DomainServiceImpl` | `ContractPaymentBaseDomainService` |\n   | Mapper | `@Repository` | `ContractPaymentBaseMapper` |\n   | ManualMapper | `*ManualMapper` | `ContractPaymentBaseManualMapper` |\n   | DO | `*DO` | `ContractPaymentBaseDO` |\n   | Model | `*Model` | `ContractPaymentBaseModel` |\n   | VO | `*VO` | `WebContractPaymentConfirmedVO` |\n   | Request | `*Request` | `ContractPaymentBaseAddRequest` |\n   | Converter | `*Convert` \u002F `*Converter` | `ContractPaymentBaseConvert` |\n   | FacadeClient | `*FacadeClient` \u002F `*FacadeClientImpl` | `IdGeneratorFacadeClient` |\n   | Utils | `*Utils` | `AssertUtils` |\n   | ConditionDalRequest | `*ConditionDalRequest` | `ContractPaymentBaseConditionDalRequest` |\n\n   **5.4 Annotation Usage:**\n\n   **Controller Layer:**\n   - `@RestController`, `@RequestMapping`\n   - `@Api` + `@ApiOperation` (Swagger 2) or `@Schema` (OpenAPI 3)\n   - `@Slf4j`\n   - `@Authority(permissionCode = ...)` or `@NonLoginAuthority`\n   - `@Validated` with JSR-303 annotations\n   - Return type: `YzwResult\u003CT>`\n\n   **BizService Layer:**\n   - Interface: `*BizService`\n   - Implementation: `@Service`, `@Slf4j`, `*BizServiceImpl`\n   - Injection: `@Resource` (preferred) or `@Autowired`\n\n   **DomainService Layer:**\n   - Interface: `*DomainService`\n   - Implementation: `@Service`, `@Slf4j`, `*DomainServiceImpl`\n   - Write operations: `@Transactional(rollbackFor = Throwable.class)`\n   - Injection: `@Autowired` or `@Resource`\n\n   **DO Objects:**\n   - Extend `AbstractBaseDO`\n   - `@TableName` (MyBatis-Plus)\n   - `@Data`, `@ToString(callSuper = true)`, `@EqualsAndHashCode(callSuper = true)`\n   - JavaDoc for fields\n\n   **Model Objects:**\n   - Extend `AbstractBaseBO`\n   - `@Data`\n   - JavaDoc for fields\n\n   **Request Objects:**\n   - AddRequest extends `CreateInfo`\n   - UpdateRequest extends `UpdateInfo`\n   - `@Data`, `@Builder`, `@AllArgsConstructor`, `@NoArgsConstructor`\n\n   **5.5 Code Style:**\n   - Import order: Java stdlib → Third-party → Project internal\n   - No full package name imports (e.g., use `List` not `java.util.List`)\n   - Empty lines between class members and methods\n   - Use `log.debug()`, `log.info()`, `log.error()` - NO `System.out.println()`\n\n   **5.6 Error Handling:**\n   - Use `AssertUtils` for validation\n   - Throw `BusinessException` with `BizErrorCode`\n   - Private validation methods: `validateAddXxx()`, `validateUpdateXxx()`\n\n   **5.7 Pagination:**\n   - Use `PageHelper.startPage(pageNum, pageSize)`\n   - Convert to `Page\u003CDO>` type\n   - Use `PageConvertUtils.pageResultConvert(PageInfo, List)`\n   - Empty result: `PageConvertUtils.getResult(PageInfo)`\n\n   **5.8 Object Conversion:**\n   - MUST use MapStruct (`@Mapper` with `INSTANCE` constant)\n   - Call pattern: `XxxConvert.INSTANCE.method(...)`\n   - NO manual field-by-field conversion\n\n   **5.9 Collection Handling:**\n   - Use `CollectionUtils.isEmpty()` \u002F `CollectionUtils.isNotEmpty()`\n   - Use `StringUtils` (Apache Commons Lang3) for strings\n\n   **5.10 Transaction Management:**\n   - Write operations MUST have `@Transactional(rollbackFor = Throwable.class)`\n   - Read operations: no transaction needed\n\n   **5.11 Security:**\n   - SQL injection prevention (parameterized queries)\n   - XSS prevention\n   - Input validation\n   - Authentication\u002FAuthorization with `@Authority`\n\n   **5.12 Performance:**\n   - N+1 query detection\n   - Batch query optimization\n   - Efficient algorithms\n\n6. **Check historical reviews**\n\n   If review reports exist in `openspec\u002Freview\u002F`:\n   - List previous review reports\n   - Compare with last review (if same branch)\n   - Highlight recurring issues\n   - Show improvement trend\n\n7. **Save review report to file (使用中文)**\n\n   **CRITICAL: 不需要询问用户，直接保存。**\n\n   a. 用 Shell 创建目录（如不存在）：`mkdir -p openspec\u002Freview`\n   b. 使用 Write 工具将报告写入 `openspec\u002Freview\u002FYYYY-MM-DD-HH-mm-\u003Cbranch-name>-review.md`\n   c. 如果同名文件已存在，使用 `-N` 后缀：`YYYY-MM-DD-HH-mm-\u003Cbranch-name>-review-N.md`\n\n   **Report structure (中文模板):**\n   ```markdown\n   # 代码审查报告\n\n   **日期:** YYYY-MM-DD HH:mm\n   **分支:** \u003Cbranch-name>\n   **审查人:** Claude Opus 4.6\n   **审查范围:** 未暂存 \u002F 已暂存 \u002F 未推送 \u002F 全部\n   **规范基准:** openspec\u002Fproject.md\n\n   ## 概要\n\n   - 变更文件数: X\n   - 新增行数: X\n   - 删除行数: X\n   - 审查提交数: X (如果是未推送)\n   - 发现问题数: X (严重: X, 重要: X, 一般: X, 建议: X)\n\n   ## 严重问题 ?\n\n   \u003C!-- 必须立即修复的严重问题 -->\n\n   1. **[安全] SQL注入风险** - `path\u002Fto\u002Ffile.java:123`\n      ```java\n      \u002F\u002F 问题代码片段\n      ```\n      **修复建议:** 使用参数化查询\n\n   ## 重要问题 ⚠️\n\n   \u003C!-- 应该修复的重要问题 -->\n\n   ## 一般问题 ?\n\n   \u003C!-- 轻微问题或代码风格改进 -->\n\n   ## 改进建议 ?\n\n   \u003C!-- 可选的改进建议 -->\n\n   ## 规范违规 (openspec\u002Fproject.md)\n\n   \u003C!-- 违反项目规范的问题 -->\n\n   | 规范类型 | 文件 | 问题描述 |\n   |----------|------|----------|\n   | 命名规范: Controller | path\u002Fto\u002Ffile.java | 类名应以 'Controller' 结尾 |\n   | 架构规范: 分层 | path\u002Fto\u002Ffile.java | Core层不应依赖Biz层 |\n\n   ## 已审查文件\n\n   | 文件 | 变更行数 | 问题数 | 严重程度 |\n   |------|----------|--------|----------|\n   | path\u002Fto\u002Ffile.java | +50\u002F-10 | 2 | 重要 |\n\n   ## 敏感信息扫描结果\n\n   - 未检测到敏感信息 ✅\n   \u003C!-- 或者 -->\n   - ⚠️ 在 X 个文件中检测到潜在敏感信息\n\n   ## 与上次审查对比\n\n   \u003C!-- 如果存在之前的审查记录 -->\n   - 上次审查日期: YYYY-MM-DD HH:mm\n   - 已解决问题: X\n   - 新发现问题: X\n   - 重复问题: X\n\n   ## 修复建议\n\n   1. 优先修复项\n   2. 后续步骤\n\n   ## 亮点肯定 ✨\n\n   \u003C!-- 代码中发现的良好实践 -->\n   ```\n\n8. **Output full report to conversation, then prompt for fix proposal (输出报告+询问提案，合并为一条消息)**\n\n   **在同一条消息中完成以下全部内容：**\n\n   a. **输出完整报告内容**到对话（与 Step 7 保存到文件的内容相同）\n   b. **在报告末尾注明**：`> 报告已保存到 openspec\u002Freview\u002FYYYY-MM-DD-HH-mm-\u003Cbranch-name>-review.md`\n   c. **如果发现严重或重要问题**，在报告输出之后使用 **AskUserQuestion tool** 询问：\n      > \"审查发现 X 个严重问题和 Y 个重要问题。是否需要生成 OpenSpec 修复提案？\"\n\n      **选项：**\n      - `生成修复提案` - 使用 `\u002Fopsx:propose` 生成修复提案\n      - `暂不生成` - 稍后手动处理\n   d. **如果仅有一般问题和建议**，不发起 AskQuestion，消息到此结束。\n\n9. **If user chose to generate fix proposal, create proposal and append summary to report (提案生成+摘要回写)**\n\n   **当用户选择\"生成修复提案\"后：**\n\n   a. 根据问题类型生成提案名称（kebab-case）：\n      - 安全问题：`fix-security-\u003Cissue-type>`\n      - 规范违规：`fix-convention-\u003Cissue-type>`\n      - 性能问题：`fix-performance-\u003Cissue-type>`\n      - 混合问题：`fix-\u003C主要问题描述>`\n\n   b. 构建提案描述：\n      - **Why**: 说明发现的问题及其影响\n      - **What Changes**: 列出需要修复的文件和修改内容\n      - 引用审查报告路径\n\n   c. 调用 `\u002Fopsx:propose` 生成修复提案\n\n   d. 提案生成完成后，**必须将提案摘要追加写入已保存的报告文件末尾**（Read 报告文件获取当前内容，在末尾追加后重新 Write），追加内容：\n\n   ```markdown\n   ## 修复提案\n\n   **提案名称:** \u003Cchange-name>\n   **提案路径:** `openspec\u002Fchanges\u002F\u003Cchange-name>\u002F`\n   **生成时间:** YYYY-MM-DD HH:mm\n\n   ### 提案包含制品\n   - `proposal.md` - 提案文档\n   - `design.md` - 设计文档\n   - `specs\u002F` - 规格文档\n   - `tasks.md` - 实施任务\n\n   ### 后续操作\n   运行 `\u002Fopsx:apply` 开始实施修复。\n   ```\n\n   e. 在对话中告知用户：提案已生成，摘要已追加到报告文件中，运行 `\u002Fopsx:apply` 开始实施修复。\n\n   **如果只有一般问题或建议：**\n   - 不自动提示生成提案\n   - 用户可手动运行 `\u002Fopsx:propose` 生成提案\n\n**Output On Success (中文输出)**\n\n```\n## 代码审查完成\n\n**分支:** \u003Cbranch-name>\n**审查范围:** \u003Cscope>\n**规范基准:** openspec\u002Fproject.md\n**报告路径:** openspec\u002Freview\u002FYYYY-MM-DD-HH-mm-\u003Cbranch-name>-review.md\n\n### 问题统计\n\n| 严重程度 | 数量 |\n|----------|------|\n| 严重 | X |\n| 重要 | X |\n| 一般 | X |\n| 建议 | X |\n\n### 规范违规统计\n\n| 类型 | 数量 |\n|------|------|\n| 命名规范 | X |\n| 架构规范 | X |\n| 代码风格 | X |\n\n### 敏感信息扫描\n✅ 未检测到敏感信息\n\u003C!-- 或者 -->\n⚠️ 在 X 个文件中检测到潜在敏感信息 - 详情见报告\n\n### 严重问题（必须在提交前修复）\n1. **[安全] SQL注入** - `path\u002Fto\u002Ffile.java:123`\n2. ...\n\n### 后续步骤\n1. 修复严重问题\n2. 修复规范违规\n3. 审查重要问题\n4. 重新运行代码审查: `\u002Fgit-code-review`\n```\n\n**Output With Fix Proposal (用户同意生成提案后的最终输出)**\n\n```\n## 修复提案已生成\n\n**提案名称:** fix-\u003Cissue-name>\n**提案路径:** openspec\u002Fchanges\u002Ffix-\u003Cissue-name>\u002F\n**提案摘要已追加到报告文件中:** openspec\u002Freview\u002FYYYY-MM-DD-HH-mm-\u003Cbranch-name>-review.md\n\n### 提案包含制品\n- `proposal.md` - 提案文档\n- `design.md` - 设计文档\n- `specs\u002F` - 规格文档\n- `tasks.md` - 实施任务\n\n运行 `\u002Fopsx:apply` 开始实施修复。\n```\n\n**严重程度说明**\n\n| 严重程度 | 图标 | 判定标准 | 处理建议 |\n|----------|------|----------|----------|\n| 严重 | ? | 安全漏洞、Bug、破坏性变更、敏感信息泄露 | 必须在提交前修复 |\n| 重要 | ⚠️ | 规范违规、性能问题、SOLID原则违反 | 应在合并前修复 |\n| 一般 | ? | 代码风格、命名、注释 | 建议修复 |\n| 建议 | ? | 最佳实践、优化建议 | 可选修复 |\n\n**Review Focus Areas**\n\nWhen user specifies focus areas, prioritize:\n- `security` - Focus on security vulnerabilities + secret scanning\n- `performance` - Focus on performance issues + N+1 queries\n- `style` - Focus on code style and conventions\n- `architecture` - Focus on layered architecture and design patterns\n- `all` - Full review (default)\n\n**Guardrails**\n\n- ALWAYS read `openspec\u002Fproject.md` before reviewing\n- Always ask for review scope first (Step 2 is the ONLY place to use AskQuestion before the report)\n- Always run secret scanning\n- **ALWAYS save review report to `openspec\u002Freview\u002F` — do NOT ask, just save and also output to conversation**\n- **审查报告必须使用中文输出**\n- Use severity levels consistently\n- Check against project-specific conventions from openspec\u002Fproject.md\n- Provide actionable recommendations with file paths and line numbers\n- Include code snippets in issue descriptions\n- Include positive highlights to encourage good practices\n- Never auto-fix issues without user confirmation\n- Compare with previous reviews for trend analysis\n- **AskQuestion 使用约束**：整个流程最多使用两次 AskQuestion —— Step 2（选择审查范围）和 Step 8c（仅当存在严重或重要问题时询问是否生成提案）。不要在其他步骤额外询问。\n- **Step 7 仅保存文件，Step 8 才输出到对话**：严格分离\"保存\"和\"展示\"两个动作，避免重复或遗漏。\n- **生成修复提案时：**\n  - 仅在发现严重或重要问题时提示生成提案\n  - 提案名称使用 kebab-case 格式\n  - 提案描述必须包含审查报告路径\n  - 生成的提案应包含具体的修复步骤\n  - **提案生成后必须将摘要追加到已保存的报告文件末尾**\n\n**Error Handling**\n\n- If `openspec\u002Fproject.md` not found: Warn user and use default conventions\n- If no changes to review: Inform user and exit\n- If diff is too large (>5000 lines): Review file by file and summarize\n- If review directory creation fails: Show error and suggest manual creation\n- If secret scanning fails: Continue review and note the failure\n\n**Convention Checklist (from openspec\u002Fproject.md)**\n\n| Category | Check |\n|----------|-------|\n| Java Version | Java 8 compatible |\n| Layering | Web → Biz → Core → Common, no reverse deps |\n| Naming | Controller\u002FBizService\u002FDomainService\u002FDO\u002FModel\u002FVO\u002FRequest |\n| Annotations | @RestController\u002F@Service\u002F@Transactional\u002F@Data\u002F@Builder |\n| Transaction | @Transactional(rollbackFor = Throwable.class) on writes |\n| Pagination | PageHelper.startPage() + PageConvertUtils |\n| Conversion | MapStruct with INSTANCE, no manual conversion |\n| Error | AssertUtils + BusinessException + BizErrorCode |\n| Logging | log.debug\u002Finfo\u002Ferror, no System.out |\n| Imports | Java stdlib → Third-party → Project internal |\n| Collections | CollectionUtils.isEmpty\u002FisNotEmpty |\n| Strings | StringUtils (Apache Commons) |\n","Review uncommitted or committed changes in the current branch and generate a code review report.\n\n**Input**: Optionally specify:\n- Review scope: `unstaged`, `staged`, `unpushed`, `all`\n- Review focus: `security`, `performance`, `style`, `architecture`, `all`\n\n**IMPORTANT**: This skill MUST read `openspec\u002Fproject.md` before performing the review to understand project-specific conventions and constraints.\n\n**重要**: 审查报告必须使用中文输出。\n\n**Steps**\n\n1. **Load project conventions**\n\n   **CRITICAL**: First read `openspec\u002Fproject.md` to get:\n   - Technology stack constraints\n   - Layered architecture rules\n   - Naming conventions\n   - Code style requirements\n   - Design patterns\n   - Important constraints\n\n   Use these conventions as the baseline for the review.\n\n2. **Determine review scope**\n\n   Run `git status` to see all changes.\n\n   Run `git branch --show-current` to get the current branch name.\n\n   Use **AskUserQuestion tool** to ask what to review:\n\n   **Review scope options:**\n   - `unstaged` - Only unstaged changes (default if no staged changes)\n   - `staged` - Only staged changes (default if staged changes exist)\n   - `unpushed` - All commits not yet pushed to remote\n   - `all` - All uncommitted changes + unpushed commits\n\n   **If `unpushed` or `all`:**\n   ```bash\n   git log origin\u002F\u003Ccurrent-branch>..HEAD --oneline\n   ```\n   to list unpushed commits.\n\n3. **Get diff content**\n\n   For **unstaged changes:**\n   ```bash\n   git diff\n   ```\n\n   For **staged changes:**\n   ```bash\n   git diff --cached\n   ```\n\n   For **unpushed commits:**\n   ```bash\n   git diff origin\u002F\u003Ccurrent-branch>..HEAD\n   ```\n\n   For **all changes:**\n   ```bash\n   git diff HEAD\n   git log origin\u002F\u003Ccurrent-branch>..HEAD --oneline\n   ```\n\n   Run `git diff --stat` to get a summary of changes.\n\n4. **Secret scanning**\n\n   Use `git diff` output to scan for potential secrets:\n   - API keys (patterns like `api_key`, `apikey`, `API_KEY`)\n   - Passwords (`password`, `passwd`, `pwd`)\n   - Tokens (`token`, `access_token`, `refresh_token`)\n   - Private keys (`-----BEGIN.*PRIVATE KEY-----`)\n   - Database URLs with credentials\n   - AWS\u002FAzure\u002FGCP credentials\n\n   **If secrets detected:**\n   - Add to Critical issues section\n   - Suggest using environment variables or secret management\n   - Warn about git history (may need `git filter-branch` or BFG)\n\n5. **Perform code review based on openspec\u002Fproject.md**\n\n   Analyze the changes against the project conventions loaded from `openspec\u002Fproject.md`:\n\n   **5.1 Technology Stack Compliance:**\n   - Java 8 compatibility (no Java 9+ features: `var`, `record`, `sealed`, pattern matching, text blocks)\n   - Spring Boot annotations usage\n   - MyBatis\u002FMyBatis-Plus usage (`@TableName`)\n   - MapStruct for object conversion\n   - Lombok annotations (`@Data`, `@Builder`, `@Slf4j`, `@AllArgsConstructor`, `@NoArgsConstructor`)\n   - PageHelper for pagination\n   - Swagger 2 (`@Api`, `@ApiOperation`, `@ApiModelProperty`) or OpenAPI 3 (`@Schema`)\n\n   **5.2 Layered Architecture Compliance:**\n   Check that code follows the strict layering: Web → Biz → Core → Common\n   - No reverse dependencies (lower layers depending on upper layers)\n   - No cross-layer dependencies (each layer only depends on direct lower layer)\n\n   **5.3 Naming Conventions:**\n\n   | Type | Pattern | Example |\n   |------|---------|---------|\n   | Controller | `*Controller` | `PurWebContractPaymentBaseController` |\n   | BizService | `*BizService` \u002F `*BizServiceImpl` | `ContractPaymentBaseBizService` |\n   | DomainService | `*DomainService` \u002F `*DomainServiceImpl` | `ContractPaymentBaseDomainService` |\n   | Mapper | `@Repository` | `ContractPaymentBaseMapper` |\n   | ManualMapper | `*ManualMapper` | `ContractPaymentBaseManualMapper` |\n   | DO | `*DO` | `ContractPaymentBaseDO` |\n   | Model | `*Model` | `ContractPaymentBaseModel` |\n   | VO | `*VO` | `WebContractPaymentConfirmedVO` |\n   | Request | `*Request` | `ContractPaymentBaseAddRequest` |\n   | Converter | `*Convert` \u002F `*Converter` | `ContractPaymentBaseConvert` |\n   | FacadeClient | `*FacadeClient` \u002F `*FacadeClientImpl` | `IdGeneratorFacadeClient` |\n   | Utils | `*Utils` | `AssertUtils` |\n   | ConditionDalRequest | `*ConditionDalRequest` | `ContractPaymentBaseConditionDalRequest` |\n\n   **5.4 Annotation Usage:**\n\n   **Controller Layer:**\n   - `@RestController`, `@RequestMapping`\n   - `@Api` + `@ApiOperation` (Swagger 2) or `@Schema` (OpenAPI 3)\n   - `@Slf4j`\n   - `@Authority(permissionCode = ...)` or `@NonLoginAuthority`\n   - `@Validated` with JSR-303 annotations\n   - Return type: `YzwResult\u003CT>`\n\n   **BizService Layer:**\n   - Interface: `*BizService`\n   - Implementation: `@Service`, `@Slf4j`, `*BizServiceImpl`\n   - Injection: `@Resource` (preferred) or `@Autowired`\n\n   **DomainService Layer:**\n   - Interface: `*DomainService`\n   - Implementation: `@Service`, `@Slf4j`, `*DomainServiceImpl`\n   - Write operations: `@Transactional(rollbackFor = Throwable.class)`\n   - Injection: `@Autowired` or `@Resource`\n\n   **DO Objects:**\n   - Extend `AbstractBaseDO`\n   - `@TableName` (MyBatis-Plus)\n   - `@Data`, `@ToString(callSuper = true)`, `@EqualsAndHashCode(callSuper = true)`\n   - JavaDoc for fields\n\n   **Model Objects:**\n   - Extend `AbstractBaseBO`\n   - `@Data`\n   - JavaDoc for fields\n\n   **Request Objects:**\n   - AddRequest extends `CreateInfo`\n   - UpdateRequest extends `UpdateInfo`\n   - `@Data`, `@Builder`, `@AllArgsConstructor`, `@NoArgsConstructor`\n\n   **5.5 Code Style:**\n   - Import order: Java stdlib → Third-party → Project internal\n   - No full package name imports (e.g., use `List` not `java.util.List`)\n   - Empty lines between class members and methods\n   - Use `log.debug()`, `log.info()`, `log.error()` - NO `System.out.println()`\n\n   **5.6 Error Handling:**\n   - Use `AssertUtils` for validation\n   - Throw `BusinessException` with `BizErrorCode`\n   - Private validation methods: `validateAddXxx()`, `validateUpdateXxx()`\n\n   **5.7 Pagination:**\n   - Use `PageHelper.startPage(pageNum, pageSize)`\n   - Convert to `Page\u003CDO>` type\n   - Use `PageConvertUtils.pageResultConvert(PageInfo, List)`\n   - Empty result: `PageConvertUtils.getResult(PageInfo)`\n\n   **5.8 Object Conversion:**\n   - MUST use MapStruct (`@Mapper` with `INSTANCE` constant)\n   - Call pattern: `XxxConvert.INSTANCE.method(...)`\n   - NO manual field-by-field conversion\n\n   **5.9 Collection Handling:**\n   - Use `CollectionUtils.isEmpty()` \u002F `CollectionUtils.isNotEmpty()`\n   - Use `StringUtils` (Apache Commons Lang3) for strings\n\n   **5.10 Transaction Management:**\n   - Write operations MUST have `@Transactional(rollbackFor = Throwable.class)`\n   - Read operations: no transaction needed\n\n   **5.11 Security:**\n   - SQL injection prevention (parameterized queries)\n   - XSS prevention\n   - Input validation\n   - Authentication\u002FAuthorization with `@Authority`\n\n   **5.12 Performance:**\n   - N+1 query detection\n   - Batch query optimization\n   - Efficient algorithms\n\n6. **Check historical reviews**\n\n   If review reports exist in `openspec\u002Freview\u002F`:\n   - List previous review reports\n   - Compare with last review (if same branch)\n   - Highlight recurring issues\n   - Show improvement trend\n\n7. **Save review report to file (使用中文)**\n\n   **CRITICAL: 不需要询问用户，直接保存。**\n\n   a. 用 Shell 创建目录（如不存在）：`mkdir -p openspec\u002Freview`\n   b. 使用 Write 工具将报告写入 `openspec\u002Freview\u002FYYYY-MM-DD-HH-mm-\u003Cbranch-name>-review.md`\n   c. 如果同名文件已存在，使用 `-N` 后缀：`YYYY-MM-DD-HH-mm-\u003Cbranch-name>-review-N.md`\n\n   **Report structure (中文模板):**\n   ```markdown\n   # 代码审查报告\n\n   **日期:** YYYY-MM-DD HH:mm\n   **分支:** \u003Cbranch-name>\n   **审查人:** Claude Opus 4.6\n   **审查范围:** 未暂存 \u002F 已暂存 \u002F 未推送 \u002F 全部\n   **规范基准:** openspec\u002Fproject.md\n\n   ## 概要\n\n   - 变更文件数: X\n   - 新增行数: X\n   - 删除行数: X\n   - 审查提交数: X (如果是未推送)\n   - 发现问题数: X (严重: X, 重要: X, 一般: X, 建议: X)\n\n   ## 严重问题 ?\n\n   \u003C!-- 必须立即修复的严重问题 -->\n\n   1. **[安全] SQL注入风险** - `path\u002Fto\u002Ffile.java:123`\n      ```java\n      \u002F\u002F 问题代码片段\n      ```\n      **修复建议:** 使用参数化查询\n\n   ## 重要问题 ⚠️\n\n   \u003C!-- 应该修复的重要问题 -->\n\n   ## 一般问题 ?\n\n   \u003C!-- 轻微问题或代码风格改进 -->\n\n   ## 改进建议 ?\n\n   \u003C!-- 可选的改进建议 -->\n\n   ## 规范违规 (openspec\u002Fproject.md)\n\n   \u003C!-- 违反项目规范的问题 -->\n\n   | 规范类型 | 文件 | 问题描述 |\n   |----------|------|----------|\n   | 命名规范: Controller | path\u002Fto\u002Ffile.java | 类名应以 'Controller' 结尾 |\n   | 架构规范: 分层 | path\u002Fto\u002Ffile.java | Core层不应依赖Biz层 |\n\n   ## 已审查文件\n\n   | 文件 | 变更行数 | 问题数 | 严重程度 |\n   |------|----------|--------|----------|\n   | path\u002Fto\u002Ffile.java | +50\u002F-10 | 2 | 重要 |\n\n   ## 敏感信息扫描结果\n\n   - 未检测到敏感信息 ✅\n   \u003C!-- 或者 -->\n   - ⚠️ 在 X 个文件中检测到潜在敏感信息\n\n   ## 与上次审查对比\n\n   \u003C!-- 如果存在之前的审查记录 -->\n   - 上次审查日期: YYYY-MM-DD HH:mm\n   - 已解决问题: X\n   - 新发现问题: X\n   - 重复问题: X\n\n   ## 修复建议\n\n   1. 优先修复项\n   2. 后续步骤\n\n   ## 亮点肯定 ✨\n\n   \u003C!-- 代码中发现的良好实践 -->\n   ```\n\n8. **Output full report to conversation, then prompt for fix proposal (输出报告+询问提案，合并为一条消息)**\n\n   **在同一条消息中完成以下全部内容：**\n\n   a. **输出完整报告内容**到对话（与 Step 7 保存到文件的内容相同）\n   b. **在报告末尾注明**：`> 报告已保存到 openspec\u002Freview\u002FYYYY-MM-DD-HH-mm-\u003Cbranch-name>-review.md`\n   c. **如果发现严重或重要问题**，在报告输出之后使用 **AskUserQuestion tool** 询问：\n      > \"审查发现 X 个严重问题和 Y 个重要问题。是否需要生成 OpenSpec 修复提案？\"\n\n      **选项：**\n      - `生成修复提案` - 使用 `\u002Fopsx:propose` 生成修复提案\n      - `暂不生成` - 稍后手动处理\n   d. **如果仅有一般问题和建议**，不发起 AskQuestion，消息到此结束。\n\n9. **If user chose to generate fix proposal, create proposal and append summary to report (提案生成+摘要回写)**\n\n   **当用户选择\"生成修复提案\"后：**\n\n   a. 根据问题类型生成提案名称（kebab-case）：\n      - 安全问题：`fix-security-\u003Cissue-type>`\n      - 规范违规：`fix-convention-\u003Cissue-type>`\n      - 性能问题：`fix-performance-\u003Cissue-type>`\n      - 混合问题：`fix-\u003C主要问题描述>`\n\n   b. 构建提案描述：\n      - **Why**: 说明发现的问题及其影响\n      - **What Changes**: 列出需要修复的文件和修改内容\n      - 引用审查报告路径\n\n   c. 调用 `\u002Fopsx:propose` 生成修复提案\n\n   d. 提案生成完成后，**必须将提案摘要追加写入已保存的报告文件末尾**（Read 报告文件获取当前内容，在末尾追加后重新 Write），追加内容：\n\n   ```markdown\n   ## 修复提案\n\n   **提案名称:** \u003Cchange-name>\n   **提案路径:** `openspec\u002Fchanges\u002F\u003Cchange-name>\u002F`\n   **生成时间:** YYYY-MM-DD HH:mm\n\n   ### 提案包含制品\n   - `proposal.md` - 提案文档\n   - `design.md` - 设计文档\n   - `specs\u002F` - 规格文档\n   - `tasks.md` - 实施任务\n\n   ### 后续操作\n   运行 `\u002Fopsx:apply` 开始实施修复。\n   ```\n\n   e. 在对话中告知用户：提案已生成，摘要已追加到报告文件中，运行 `\u002Fopsx:apply` 开始实施修复。\n\n   **如果只有一般问题或建议：**\n   - 不自动提示生成提案\n   - 用户可手动运行 `\u002Fopsx:propose` 生成提案\n\n**Output On Success (中文输出)**\n\n```\n## 代码审查完成\n\n**分支:** \u003Cbranch-name>\n**审查范围:** \u003Cscope>\n**规范基准:** openspec\u002Fproject.md\n**报告路径:** openspec\u002Freview\u002FYYYY-MM-DD-HH-mm-\u003Cbranch-name>-review.md\n\n### 问题统计\n\n| 严重程度 | 数量 |\n|----------|------|\n| 严重 | X |\n| 重要 | X |\n| 一般 | X |\n| 建议 | X |\n\n### 规范违规统计\n\n| 类型 | 数量 |\n|------|------|\n| 命名规范 | X |\n| 架构规范 | X |\n| 代码风格 | X |\n\n### 敏感信息扫描\n✅ 未检测到敏感信息\n\u003C!-- 或者 -->\n⚠️ 在 X 个文件中检测到潜在敏感信息 - 详情见报告\n\n### 严重问题（必须在提交前修复）\n1. **[安全] SQL注入** - `path\u002Fto\u002Ffile.java:123`\n2. ...\n\n### 后续步骤\n1. 修复严重问题\n2. 修复规范违规\n3. 审查重要问题\n4. 重新运行代码审查: `\u002Fgit-code-review`\n```\n\n**Output With Fix Proposal (用户同意生成提案后的最终输出)**\n\n```\n## 修复提案已生成\n\n**提案名称:** fix-\u003Cissue-name>\n**提案路径:** openspec\u002Fchanges\u002Ffix-\u003Cissue-name>\u002F\n**提案摘要已追加到报告文件中:** openspec\u002Freview\u002FYYYY-MM-DD-HH-mm-\u003Cbranch-name>-review.md\n\n### 提案包含制品\n- `proposal.md` - 提案文档\n- `design.md` - 设计文档\n- `specs\u002F` - 规格文档\n- `tasks.md` - 实施任务\n\n运行 `\u002Fopsx:apply` 开始实施修复。\n```\n\n**严重程度说明**\n\n| 严重程度 | 图标 | 判定标准 | 处理建议 |\n|----------|------|----------|----------|\n| 严重 | ? | 安全漏洞、Bug、破坏性变更、敏感信息泄露 | 必须在提交前修复 |\n| 重要 | ⚠️ | 规范违规、性能问题、SOLID原则违反 | 应在合并前修复 |\n| 一般 | ? | 代码风格、命名、注释 | 建议修复 |\n| 建议 | ? | 最佳实践、优化建议 | 可选修复 |\n\n**Review Focus Areas**\n\nWhen user specifies focus areas, prioritize:\n- `security` - Focus on security vulnerabilities + secret scanning\n- `performance` - Focus on performance issues + N+1 queries\n- `style` - Focus on code style and conventions\n- `architecture` - Focus on layered architecture and design patterns\n- `all` - Full review (default)\n\n**Guardrails**\n\n- ALWAYS read `openspec\u002Fproject.md` before reviewing\n- Always ask for review scope first (Step 2 is the ONLY place to use AskQuestion before the report)\n- Always run secret scanning\n- **ALWAYS save review report to `openspec\u002Freview\u002F` — do NOT ask, just save and also output to conversation**\n- **审查报告必须使用中文输出**\n- Use severity levels consistently\n- Check against project-specific conventions from openspec\u002Fproject.md\n- Provide actionable recommendations with file paths and line numbers\n- Include code snippets in issue descriptions\n- Include positive highlights to encourage good practices\n- Never auto-fix issues without user confirmation\n- Compare with previous reviews for trend analysis\n- **AskQuestion 使用约束**：整个流程最多使用两次 AskQuestion —— Step 2（选择审查范围）和 Step 8c（仅当存在严重或重要问题时询问是否生成提案）。不要在其他步骤额外询问。\n- **Step 7 仅保存文件，Step 8 才输出到对话**：严格分离\"保存\"和\"展示\"两个动作，避免重复或遗漏。\n- **生成修复提案时：**\n  - 仅在发现严重或重要问题时提示生成提案\n  - 提案名称使用 kebab-case 格式\n  - 提案描述必须包含审查报告路径\n  - 生成的提案应包含具体的修复步骤\n  - **提案生成后必须将摘要追加到已保存的报告文件末尾**\n\n**Error Handling**\n\n- If `openspec\u002Fproject.md` not found: Warn user and use default conventions\n- If no changes to review: Inform user and exit\n- If diff is too large (>5000 lines): Review file by file and summarize\n- If review directory creation fails: Show error and suggest manual creation\n- If secret scanning fails: Continue review and note the failure\n\n**Convention Checklist (from openspec\u002Fproject.md)**\n\n| Category | Check |\n|----------|-------|\n| Java Version | Java 8 compatible |\n| Layering | Web → Biz → Core → Common, no reverse deps |\n| Naming | Controller\u002FBizService\u002FDomainService\u002FDO\u002FModel\u002FVO\u002FRequest |\n| Annotations | @RestController\u002F@Service\u002F@Transactional\u002F@Data\u002F@Builder |\n| Transaction | @Transactional(rollbackFor = Throwable.class) on writes |\n| Pagination | PageHelper.startPage() + PageConvertUtils |\n| Conversion | MapStruct with INSTANCE, no manual conversion |\n| Error | AssertUtils + BusinessException + BizErrorCode |\n| Logging | log.debug\u002Finfo\u002Ferror, no System.out |\n| Imports | Java stdlib → Third-party → Project internal |\n| Collections | CollectionUtils.isEmpty\u002FisNotEmpty |\n| Strings | StringUtils (Apache Commons) |\n",{"name":5,"license":15,"metadata":50,"description":7,"compatibility":54},{"author":51,"version":52,"generatedBy":53},"zhaoyi","1.6","1.0.0","Requires git CLI and a git repository.","main","f1f3386d8df37cca07033d73addfae1eb9968c30",0,"https:\u002F\u002Fgithub.com\u002FZhaoYis\u002FMy-Skills","https:\u002F\u002Fopsx.dsx.plus","https:\u002F\u002Fgithub.com\u002FZhaoYis","http:\u002F\u002Fwww.cnblogs.com\u002Fzhao-yi","2026-10-08 22:53:14",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add ZhaoYis\u002FMy-Skills --skill git-code-review",{"tool":69,"command":70},"bunx","bunx skills add ZhaoYis\u002FMy-Skills --skill git-code-review",{"tool":72,"command":73},"pnpm","pnpm dlx skills add ZhaoYis\u002FMy-Skills --skill git-code-review","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FZhaoYis\u002FMy-Skills\u002Fblob\u002Fmain\u002Fgit-code-review\u002FSKILL.md",true,[],[78,95,108,122,142,165],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":85,"publishedAt":45},"01M6RTSEX8VAMKNV3PYC3TCX05","opsx-dev-pipeline","OpenSpec + Git 需求开发全流程。","https:\u002F\u002Fgithub.com\u002FZhaoYis\u002FMy-Skills\u002Fblob\u002Fmain\u002Fopsx-dev-pipeline\u002FSKILL.md",[84],{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[86,87,88,89,90,91,92,41,93,32,94,34],"opsx dev pipeline","pipeline","dev pipeline","dev","cursor","schema","openspec","yaml","config",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":45},"01M6RTQZM2W4D883XGA5B23RF4","git-merge-branch","Merge current branch to a target branch. Use when the user wants to merge their current branch to another branch (e.g., qa, master, develop).","https:\u002F\u002Fgithub.com\u002FZhaoYis\u002FMy-Skills\u002Fblob\u002Fmain\u002Fgit-merge-branch\u002FSKILL.md",[],[38,32,102,103,104,41,34,105,37,106,39,44,40,107],"git merge","merge","git merge branch","qa","develop","master",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":45},"01M6RTQV3CXBKB3WP295FNJ3R3","git-commit-push","Commit and push code changes to the remote repository. Use when the user wants to commit their changes and push to remote.","https:\u002F\u002Fgithub.com\u002FZhaoYis\u002FMy-Skills\u002Fblob\u002Fmain\u002Fgit-commit-push\u002FSKILL.md",[],[115,116,117,32,118,119,37,40,39,120,121,31,34,41,42,44],"git commit push","commit push","push","git commit","commit","commit and push","remote",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":130,"publishedAt":45},"01M6RTQ2V53GDEYSY384BJ15S8","file-code-review","Review specified files or code snippets against project conventions and generate a code review report. Use when the user wants to review specific files (e.g., \"review this file\", \"审查这个文件\") or code blocks (e.g., \"review this code\", \"审查这段代码\") without git context. Supports single file, multiple files, or pasted code snippets.","https:\u002F\u002Fgithub.com\u002FZhaoYis\u002FMy-Skills\u002Fblob\u002Fmain\u002Ffile-code-review\u002FSKILL.md",[128,129],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[30,29,31,131,132,133,44,36,43,134,135,136,137,138,139,40,32,140,35,141],"file","file code review","project","文件","blocks","requirements","snippets","conventions","files","single","project conventions",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":148,"publishedAt":45},"01M6RTPNWT66XGYW8S9KXM3W66","openspec-propose","Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to build and get a complete proposal with design, specs, and tasks ready for implementation.","https:\u002F\u002Fgithub.com\u002FZhaoYis\u002FMy-Skills\u002Fblob\u002Fmain\u002Fdev-pipeline\u002F.claude\u002Fskills\u002Fopenspec-propose\u002FSKILL.md",[],[149,92,150,40,151,152,153,154,155,34,156,157,44,158,159,160,161,162,163,164],"openspec propose","ready","generated","Bash","artifacts","tasks","change","design","implementation","describe","for","with","proposal","complete","get","build",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":45},"01M6RTP3C3EVKHXAMW2E8ZB4G0","openspec-explore","Enter explore mode - a thinking partner for exploring ideas, investigating problems, and clarifying requirements. Use when the user wants to think through something before or during a change.","https:\u002F\u002Fgithub.com\u002FZhaoYis\u002FMy-Skills\u002Fblob\u002Fmain\u002Fdev-pipeline\u002F.claude\u002Fskills\u002Fopenspec-explore\u002FSKILL.md",[],[92,172,173,174,44,159,175,136,176,177,178,179,40,39,152,155,34],"openspec explore","explore","mode","partner","ideas","thinking","thinking partner","think"]