[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7D37CDX8K153CYY4FVCGAT5":3,"skill-same:01M7D37CDX8K153CYY4FVCGAT5":45},{"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":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":14,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M7D37CDX8K153CYY4FVCGAT5","sonar-workflow",null,"Fix SonarQube code quality issues for a pull request. Auto-fixes trivial issues (formatting, unused imports) and requests approval for complex issues (security, bugs). Integrates with commit-workflow and pr-workflow skills.","rabihkodeih\u002Fagentic-workflow","rabihkodeih","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1883033?v=4","01M7D357MHZJG4N8PQV8R5TZ82","Rabih Kodeih","01M7D357NM3WD86XTZ93FV7DNK",0,"MIT","https:\u002F\u002Fgithub.com\u002Frabihkodeih\u002Fagentic-workflow\u002Fblob\u002Fmain\u002Fskills\u002Fsonar-workflow\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: sonar-workflow\ndescription: Fix SonarQube code quality issues for a pull request. Auto-fixes trivial issues (formatting, unused imports) and requests approval for complex issues (security, bugs). Integrates with commit-workflow and pr-workflow skills.\nallowed-tools: Bash\n---\n\n# SonarQube Quality Workflow\n\nThis skill helps fix SonarQube code quality issues for a pull request by prioritizing issues, auto-fixing trivial problems, and requesting approval for complex changes.\n\n## When to Use\n\n- After creating a PR when SonarQube analysis is available\n- When asked to \"fix SonarQube issues\" or \"improve code quality\"\n- When quality gate is failing on a PR\n\n## Prerequisites\n\n- PR must exist for current branch\n- SonarQube project configured in `sonar-project.properties`\n- SonarQube analysis completed for the PR\n\n## Issue Classification\n\n### Trivial (Auto-fix without approval)\n\n- Severity: `INFO` or `LOW`\n- Type: Code smell only\n- Single-file changes\n- Impact: `MAINTAINABILITY` only\n- Keywords: \"unused\", \"console.log\", \"formatting\", \"whitespace\", \"empty\", \"import order\"\n\n### Complex (User approval required)\n\n- All security hotspots\n- Severity: `HIGH`, `BLOCKER`, `CRITICAL`\n- Type: Bug, Vulnerability\n- Coverage gaps (requires test writing)\n- Code duplications (requires refactoring)\n- Medium severity affecting multiple files\n\n## Workflow\n\n### 1. Verify PR Exists\n\nCheck if PR exists for current branch:\n\n```bash\ngh pr list --head \"$(git branch --show-current)\" --state open\n```\n\nExit if no PR found with message: \"No PR found for current branch. Create PR first using pr-workflow skill.\"\n\nExtract PR number from output.\n\n### 2. Get PR Details\n\n```bash\ngh pr view \u003Cpr-number> --json number,headRefName,baseRefName\n```\n\nExtract: PR number, branch name, base branch.\n\n### 3. Get SonarQube Project Key\n\n```bash\ngrep \"^sonar.projectKey=\" sonar-project.properties | cut -d'=' -f2\n```\n\nUse the extracted project key for all SonarQube operations.\n\nVerify project exists using `search_my_sonarqube_projects`.\n\n### 4. Fetch Issues by Priority\n\nProcess in strict priority order:\n\n#### a. Security Hotspots (Highest Priority)\n\n```bash\n# Tool: search_security_hotspots(projectKey, pullRequest, status=[\"TO_REVIEW\"])\n# For each: show_security_hotspot(hotspotKey)\n```\n\nClassification: Always complex (require approval).\n\n#### b. BLOCKER\u002FHIGH Issues\n\n```bash\n# Tool: search_sonar_issues_in_projects(projects=[projectKey], pullRequestId, severities=[\"BLOCKER\",\"HIGH\"])\n# For each: show_rule(ruleKey) for remediation guidance\n```\n\nClassification: Always complex (require approval).\n\n#### c. Coverage Issues\n\n```bash\n# Tool: search_files_by_coverage(projectKey, pullRequest, maxCoverage=70)\n# For each: get_file_coverage_details(fileKey, pullRequest)\n```\n\nClassification: Always complex (requires test writing).\n\n#### d. Code Duplications\n\n```bash\n# Tool: search_duplicated_files(projectKey, pullRequest)\n# For each with >5% duplication: get_duplications(fileKey, pullRequest)\n```\n\nClassification: Always complex (requires refactoring).\n\n#### e. MEDIUM\u002FLOW\u002FINFO Issues\n\n```bash\n# Tool: search_sonar_issues_in_projects(projects=[projectKey], pullRequestId, severities=[\"MEDIUM\",\"LOW\",\"INFO\"])\n# For each: show_rule(ruleKey)\n```\n\nClassification: Apply trivial vs complex logic based on rule keywords and type.\n\n### 5. Categorize Issues\n\nFor each issue:\n\n- Check severity + type + rule keywords\n- Assign to `trivial_issues[]` or `complex_issues[]`\n- Store: key, file, line, rule, description, fix_guidance\n\n### 6. Auto-Fix Trivial Issues\n\nFor each trivial issue:\n\n1. Read file with issue\n2. Apply automated fix based on rule type:\n   - Unused imports: Remove import statement\n   - `console.log`: Remove or comment out\n   - Formatting: Apply suggested formatting\n   - Empty blocks: Add TODO comment or remove\n3. Verify fix: `analyze_code_snippet(projectKey, fileContent, language, scope)`\n4. If new issues introduced, rollback and move to complex queue\n5. If successful, add to `fixed_issues[]`\n\n### 7. Fix Complex Issues with Approval\n\nFor each complex issue (in priority order):\n\n1. Present to user:\n   - Issue type, severity, file:line\n   - Rule description and remediation guidance\n   - Code context (show relevant lines)\n2. Ask: \"Fix this issue? [yes\u002Fno\u002Fskip remaining]\"\n3. If yes:\n   - Read file\n   - Apply fix based on rule guidance\n   - Verify with `analyze_code_snippet`\n   - If successful, add to `fixed_issues[]`\n   - If failed, report and continue\n4. If \"skip remaining\", break loop\n\n### 8. Commit Changes\n\nGroup fixes by type for logical commits using `commit-workflow` skill:\n\n```bash\n# Security fixes\nSkill(skill=\"commit-workflow\")\n# Use format: fix(security): \u003Cdescription>\n\n# Bug fixes\nSkill(skill=\"commit-workflow\")\n# Use format: fix(\u003Cscope>): \u003Cdescription>\n\n# Code smell fixes\nSkill(skill=\"commit-workflow\")\n# Use format: refactor(\u003Cscope>): \u003Cdescription>\n```\n\n**Commit Message Format:**\n\n```\n\u003Ctype>(\u003Cscope>): \u003Cdescription>\n\nWHY: SonarQube rule \u003Crule-key> - \u003Crule reason>\n```\n\nExample:\n\n```\nfix(auth): remove unused import in login handler\n\nWHY: SonarQube rule javascript:S1128 - unused imports increase bundle size\n```\n\n### 9. Mark Issues Resolved\n\nFor each fixed issue:\n\n```bash\n# Trivial code smells\nchange_sonar_issue_status(key, status=[\"accept\"])\n\n# Security hotspots\nchange_security_hotspot_status(hotspotKey, status=[\"REVIEWED\"], resolution=[\"FIXED\"])\n\n# Complex bugs\u002Fvulnerabilities\nchange_sonar_issue_status(key, status=[\"accept\"])\n```\n\n### 10. Update PR Description\n\nAdd new section to PR template after \"## Test Results\":\n\n```markdown\n## SonarQube Fixes\n\nFixed X issues across Y files:\n\n- Security: Z hotspots reviewed and fixed\n- Bugs: A issues fixed\n- Code Smells: B issues fixed\n- Coverage: C files improved\n- Duplications: D blocks refactored\n```\n\nInvoke `pr-workflow` skill to update PR with enhanced description.\n\n## Safety Rules\n\n- **NEVER auto-fix security hotspots** - always require approval\n- **NEVER auto-fix HIGH\u002FBLOCKER severity** - always require approval\n- **VERIFY after each fix** - use `analyze_code_snippet` to ensure no new issues\n- **ROLLBACK failed fixes** - revert file if verification fails\n- **ONE-BY-ONE for complex** - never batch complex fixes\n- **PRESERVE functionality** - only fix code quality, don't change behavior\n- **RESPECT exclusions** - honor `sonar.exclusions` (node_modules, .next, dist, etc.)\n- **NEVER commit secrets** - reject any rule fix that exposes credentials\n\n## Examples\n\n### Example 1: Auto-fixing Unused Imports (Trivial)\n\nIssue: `javascript:S1128` - Unused import in `apps\u002Fweb\u002Flib\u002Fauth.ts:5`\n\nAction:\n\n1. Read file\n2. Remove unused import line\n3. Verify with `analyze_code_snippet`\n4. Commit: `refactor(auth): remove unused imports`\n5. Mark resolved: `change_sonar_issue_status(key, status=[\"accept\"])`\n\n### Example 2: Fixing Security Hotspot (Complex)\n\nIssue: Security hotspot - \"Make sure this CORS policy is safe here\" in `apps\u002Fweb\u002Fapi\u002Froute.ts:12`\n\nAction:\n\n1. Present to user with rule details\n2. Wait for approval\n3. If approved:\n   - Read file and context\n   - Restrict CORS origins to whitelist\n   - Verify fix\n   - Commit: `fix(api): restrict CORS to whitelisted origins`\n4. Mark resolved: `change_security_hotspot_status(hotspotKey, status=[\"REVIEWED\"], resolution=[\"FIXED\"])`\n\n### Example 3: Coverage Gap (Complex)\n\nIssue: File `apps\u002Fweb\u002Flib\u002Futils.ts` has 45% coverage\n\nAction:\n\n1. Present coverage details to user\n2. Show uncovered lines\n3. Wait for approval\n4. If approved:\n   - Write unit tests for uncovered code paths\n   - Verify coverage improvement\n   - Commit: `test(utils): add unit tests for utility functions`\n5. Note: Coverage improvements don't require marking issues resolved (metric-based)\n\n## Edge Cases\n\n- **No PR found**: Exit with helpful message\n- **SonarQube project not found**: Exit with error\n- **No issues found**: Success message: \"No SonarQube issues found for this PR. Quality gate passed!\"\n- **Fix verification fails**: Rollback file, log error, continue to next issue\n- **All fixes rejected**: Exit gracefully: \"No fixes applied. Issues remain in SonarQube.\"\n- **Multiple SonarQube projects**: Use project key from `sonar-project.properties`\n","# SonarQube Quality Workflow\n\nThis skill helps fix SonarQube code quality issues for a pull request by prioritizing issues, auto-fixing trivial problems, and requesting approval for complex changes.\n\n## When to Use\n\n- After creating a PR when SonarQube analysis is available\n- When asked to \"fix SonarQube issues\" or \"improve code quality\"\n- When quality gate is failing on a PR\n\n## Prerequisites\n\n- PR must exist for current branch\n- SonarQube project configured in `sonar-project.properties`\n- SonarQube analysis completed for the PR\n\n## Issue Classification\n\n### Trivial (Auto-fix without approval)\n\n- Severity: `INFO` or `LOW`\n- Type: Code smell only\n- Single-file changes\n- Impact: `MAINTAINABILITY` only\n- Keywords: \"unused\", \"console.log\", \"formatting\", \"whitespace\", \"empty\", \"import order\"\n\n### Complex (User approval required)\n\n- All security hotspots\n- Severity: `HIGH`, `BLOCKER`, `CRITICAL`\n- Type: Bug, Vulnerability\n- Coverage gaps (requires test writing)\n- Code duplications (requires refactoring)\n- Medium severity affecting multiple files\n\n## Workflow\n\n### 1. Verify PR Exists\n\nCheck if PR exists for current branch:\n\n```bash\ngh pr list --head \"$(git branch --show-current)\" --state open\n```\n\nExit if no PR found with message: \"No PR found for current branch. Create PR first using pr-workflow skill.\"\n\nExtract PR number from output.\n\n### 2. Get PR Details\n\n```bash\ngh pr view \u003Cpr-number> --json number,headRefName,baseRefName\n```\n\nExtract: PR number, branch name, base branch.\n\n### 3. Get SonarQube Project Key\n\n```bash\ngrep \"^sonar.projectKey=\" sonar-project.properties | cut -d'=' -f2\n```\n\nUse the extracted project key for all SonarQube operations.\n\nVerify project exists using `search_my_sonarqube_projects`.\n\n### 4. Fetch Issues by Priority\n\nProcess in strict priority order:\n\n#### a. Security Hotspots (Highest Priority)\n\n```bash\n# Tool: search_security_hotspots(projectKey, pullRequest, status=[\"TO_REVIEW\"])\n# For each: show_security_hotspot(hotspotKey)\n```\n\nClassification: Always complex (require approval).\n\n#### b. BLOCKER\u002FHIGH Issues\n\n```bash\n# Tool: search_sonar_issues_in_projects(projects=[projectKey], pullRequestId, severities=[\"BLOCKER\",\"HIGH\"])\n# For each: show_rule(ruleKey) for remediation guidance\n```\n\nClassification: Always complex (require approval).\n\n#### c. Coverage Issues\n\n```bash\n# Tool: search_files_by_coverage(projectKey, pullRequest, maxCoverage=70)\n# For each: get_file_coverage_details(fileKey, pullRequest)\n```\n\nClassification: Always complex (requires test writing).\n\n#### d. Code Duplications\n\n```bash\n# Tool: search_duplicated_files(projectKey, pullRequest)\n# For each with >5% duplication: get_duplications(fileKey, pullRequest)\n```\n\nClassification: Always complex (requires refactoring).\n\n#### e. MEDIUM\u002FLOW\u002FINFO Issues\n\n```bash\n# Tool: search_sonar_issues_in_projects(projects=[projectKey], pullRequestId, severities=[\"MEDIUM\",\"LOW\",\"INFO\"])\n# For each: show_rule(ruleKey)\n```\n\nClassification: Apply trivial vs complex logic based on rule keywords and type.\n\n### 5. Categorize Issues\n\nFor each issue:\n\n- Check severity + type + rule keywords\n- Assign to `trivial_issues[]` or `complex_issues[]`\n- Store: key, file, line, rule, description, fix_guidance\n\n### 6. Auto-Fix Trivial Issues\n\nFor each trivial issue:\n\n1. Read file with issue\n2. Apply automated fix based on rule type:\n   - Unused imports: Remove import statement\n   - `console.log`: Remove or comment out\n   - Formatting: Apply suggested formatting\n   - Empty blocks: Add TODO comment or remove\n3. Verify fix: `analyze_code_snippet(projectKey, fileContent, language, scope)`\n4. If new issues introduced, rollback and move to complex queue\n5. If successful, add to `fixed_issues[]`\n\n### 7. Fix Complex Issues with Approval\n\nFor each complex issue (in priority order):\n\n1. Present to user:\n   - Issue type, severity, file:line\n   - Rule description and remediation guidance\n   - Code context (show relevant lines)\n2. Ask: \"Fix this issue? [yes\u002Fno\u002Fskip remaining]\"\n3. If yes:\n   - Read file\n   - Apply fix based on rule guidance\n   - Verify with `analyze_code_snippet`\n   - If successful, add to `fixed_issues[]`\n   - If failed, report and continue\n4. If \"skip remaining\", break loop\n\n### 8. Commit Changes\n\nGroup fixes by type for logical commits using `commit-workflow` skill:\n\n```bash\n# Security fixes\nSkill(skill=\"commit-workflow\")\n# Use format: fix(security): \u003Cdescription>\n\n# Bug fixes\nSkill(skill=\"commit-workflow\")\n# Use format: fix(\u003Cscope>): \u003Cdescription>\n\n# Code smell fixes\nSkill(skill=\"commit-workflow\")\n# Use format: refactor(\u003Cscope>): \u003Cdescription>\n```\n\n**Commit Message Format:**\n\n```\n\u003Ctype>(\u003Cscope>): \u003Cdescription>\n\nWHY: SonarQube rule \u003Crule-key> - \u003Crule reason>\n```\n\nExample:\n\n```\nfix(auth): remove unused import in login handler\n\nWHY: SonarQube rule javascript:S1128 - unused imports increase bundle size\n```\n\n### 9. Mark Issues Resolved\n\nFor each fixed issue:\n\n```bash\n# Trivial code smells\nchange_sonar_issue_status(key, status=[\"accept\"])\n\n# Security hotspots\nchange_security_hotspot_status(hotspotKey, status=[\"REVIEWED\"], resolution=[\"FIXED\"])\n\n# Complex bugs\u002Fvulnerabilities\nchange_sonar_issue_status(key, status=[\"accept\"])\n```\n\n### 10. Update PR Description\n\nAdd new section to PR template after \"## Test Results\":\n\n```markdown\n## SonarQube Fixes\n\nFixed X issues across Y files:\n\n- Security: Z hotspots reviewed and fixed\n- Bugs: A issues fixed\n- Code Smells: B issues fixed\n- Coverage: C files improved\n- Duplications: D blocks refactored\n```\n\nInvoke `pr-workflow` skill to update PR with enhanced description.\n\n## Safety Rules\n\n- **NEVER auto-fix security hotspots** - always require approval\n- **NEVER auto-fix HIGH\u002FBLOCKER severity** - always require approval\n- **VERIFY after each fix** - use `analyze_code_snippet` to ensure no new issues\n- **ROLLBACK failed fixes** - revert file if verification fails\n- **ONE-BY-ONE for complex** - never batch complex fixes\n- **PRESERVE functionality** - only fix code quality, don't change behavior\n- **RESPECT exclusions** - honor `sonar.exclusions` (node_modules, .next, dist, etc.)\n- **NEVER commit secrets** - reject any rule fix that exposes credentials\n\n## Examples\n\n### Example 1: Auto-fixing Unused Imports (Trivial)\n\nIssue: `javascript:S1128` - Unused import in `apps\u002Fweb\u002Flib\u002Fauth.ts:5`\n\nAction:\n\n1. Read file\n2. Remove unused import line\n3. Verify with `analyze_code_snippet`\n4. Commit: `refactor(auth): remove unused imports`\n5. Mark resolved: `change_sonar_issue_status(key, status=[\"accept\"])`\n\n### Example 2: Fixing Security Hotspot (Complex)\n\nIssue: Security hotspot - \"Make sure this CORS policy is safe here\" in `apps\u002Fweb\u002Fapi\u002Froute.ts:12`\n\nAction:\n\n1. Present to user with rule details\n2. Wait for approval\n3. If approved:\n   - Read file and context\n   - Restrict CORS origins to whitelist\n   - Verify fix\n   - Commit: `fix(api): restrict CORS to whitelisted origins`\n4. Mark resolved: `change_security_hotspot_status(hotspotKey, status=[\"REVIEWED\"], resolution=[\"FIXED\"])`\n\n### Example 3: Coverage Gap (Complex)\n\nIssue: File `apps\u002Fweb\u002Flib\u002Futils.ts` has 45% coverage\n\nAction:\n\n1. Present coverage details to user\n2. Show uncovered lines\n3. Wait for approval\n4. If approved:\n   - Write unit tests for uncovered code paths\n   - Verify coverage improvement\n   - Commit: `test(utils): add unit tests for utility functions`\n5. Note: Coverage improvements don't require marking issues resolved (metric-based)\n\n## Edge Cases\n\n- **No PR found**: Exit with helpful message\n- **SonarQube project not found**: Exit with error\n- **No issues found**: Success message: \"No SonarQube issues found for this PR. Quality gate passed!\"\n- **Fix verification fails**: Rollback file, log error, continue to next issue\n- **All fixes rejected**: Exit gracefully: \"No fixes applied. Issues remain in SonarQube.\"\n- **Multiple SonarQube projects**: Use project key from `sonar-project.properties`\n",{"name":5,"description":7,"allowed-tools":24},"Bash","main","7b05d4ac96431d4dca2179b70d4f124979d4c3a8","skills\u002Fsonar-workflow","https:\u002F\u002Fgithub.com\u002Frabihkodeih\u002Fagentic-workflow","https:\u002F\u002Fgithub.com\u002Frabihkodeih","2026-09-20 04:17:12",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add rabihkodeih\u002Fagentic-workflow --skill sonar-workflow",{"tool":37,"command":38},"bunx","bunx skills add rabihkodeih\u002Fagentic-workflow --skill sonar-workflow",{"tool":40,"command":41},"pnpm","pnpm dlx skills add rabihkodeih\u002Fagentic-workflow --skill sonar-workflow","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Frabihkodeih\u002Fagentic-workflow\u002Fblob\u002Fmain\u002Fskills\u002Fsonar-workflow\u002FSKILL.md",true,[],[46,53,60,67,73,79],{"skillNo":47,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":52,"publishedAt":19},"01M7D37HNRY0RGK352YT1SYQVH","yes-no","Answer the user's question with a yes or no, optionally followed by a short explanation when the model sees fit. Use when the user types \"\u002Fyes-no\", asks a yes\u002Fno question and wants a decisive answer, or says \"just yes or no\".","https:\u002F\u002Fgithub.com\u002Frabihkodeih\u002Fagentic-workflow\u002Fblob\u002Fmain\u002Fskills\u002Fyes-no\u002FSKILL.md",[],[],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":59,"publishedAt":19},"01M7D377REEE0MBH7SJ37JWR41","short-answer","Answer the user's question as concisely as possible, a direct, to-the-point response with no preamble, filler, or unnecessary elaboration. Use when the user types \"\u002Fshort-answer\", asks for a brief\u002Fshort\u002Fconcise\u002FTL;DR answer, or says \"just the answer\".","https:\u002F\u002Fgithub.com\u002Frabihkodeih\u002Fagentic-workflow\u002Fblob\u002Fmain\u002Fskills\u002Fshort-answer\u002FSKILL.md",[],[],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":19},"01M7D371KTYERB0DFG67XE9PTC","redash","Query a Redash instance over its REST API , list data sources and saved queries, read a saved query's SQL, run it, or run ad-hoc read-only SQL and get the rows back. Use when the user asks about Redash, a Redash query\u002Fdashboard\u002Flink, \"run that query\", \"what does query 1234 return\", or wants numbers out of an analytics data source rather than the application DB.","https:\u002F\u002Fgithub.com\u002Frabihkodeih\u002Fagentic-workflow\u002Fblob\u002Fmain\u002Fskills\u002Fredash\u002FSKILL.md",[],[],{"skillNo":68,"name":69,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":19},"01M7D36Y5BF600Z6B470W1AFNZ","prod-db-postgres","https:\u002F\u002Fgithub.com\u002Frabihkodeih\u002Fagentic-workflow\u002Fblob\u002Fmain\u002Fskills\u002Fprod-db-postgres\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":19},"01M7D36VE5AEREF874PDV2SJSG","prod-db-mysql-bastion","https:\u002F\u002Fgithub.com\u002Frabihkodeih\u002Fagentic-workflow\u002Fblob\u002Fmain\u002Fskills\u002Fprod-db-mysql-bastion\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":19},"01M7D36NSNPJVP3BS20DRMZ953","pr-workflow","Use this skill when asked to create or update a pull request (PR). It ensures all PRs follow the repository's established templates and standards. Handles both new PR creation and updating existing PRs with new commits, title changes, or description updates.","https:\u002F\u002Fgithub.com\u002Frabihkodeih\u002Fagentic-workflow\u002Fblob\u002Fmain\u002Fskills\u002Fpr-workflow\u002FSKILL.md",[],[]]