[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6RASX1B8CNR2FTCTFHCZTK5":3,"skill-same:01M6RASX1B8CNR2FTCTFHCZTK5":61},{"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":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":43,"ownerHtmlUrl":44,"ownerBlogUrl":45,"ownerDescription":6,"updatedAt":46,"install":47,"resources":60},"01M6RASX1B8CNR2FTCTFHCZTK5","pr-review",null,"Review PRs against angry-bear architecture and coding guidelines. Use when: reviewing code, checking PRs, validating changes, auditing architecture compliance.","bluebear-io\u002Fangry-bear","bluebear-io","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F223486762?v=4","01M6RASCA1M021VBCZWMY8JBMY","Bluebear Security","01M6RASCEZXF8KPJCTWRWRCB73",17,"MIT","https:\u002F\u002Fgithub.com\u002Fbluebear-io\u002Fangry-bear\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpr-review\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32],"review","pr review","pr","architecture","guidelines","code","compliance","coding","coding guidelines","use","reviewing code","changes","prs","when","2026-11-10 10:12:30",false,"---\nname: pr-review\ndescription: \"Review PRs against angry-bear architecture and coding guidelines. Use when: reviewing code, checking PRs, validating changes, auditing architecture compliance.\"\n---\n\n# PR Review — angry-bear Guidelines\n\n## Architecture Rules (NON-NEGOTIABLE)\n\n### 1. All agent-specific logic lives in adapters\n- `internal\u002Fadapter\u002F` is the ONLY place for agent-specific code\n- `if agent == \"claude\"` or `if agent == \"cursor\"` outside adapter\u002F = REJECT\n- The engine, TUI, CLI commands, and state manager are agent-agnostic\n\n### 2. HookAdapter interface is the extension point\nEvery piece of agent knowledge belongs in the adapter:\n- `ExitCodeForDeny()` — not hardcoded in hook.go\n- `GlobalConfigPath()` — not hardcoded in resolve.go\n- `InstallHook()` \u002F `UninstallHook()` — adapter manages its own hooks\n\n### 3. No hardcoded agent names\u002Fpaths outside adapters\n- Badge health checks use the adapter registry, not hardcoded lists\n- Hook installation iterates over registered adapters\n- Config file detection uses `adapter.GlobalConfigPath()`\n\n### 4. All data under ~\u002F.angry-bear\u002F\n- No project-level `.angry-bear\u002F` directories\n- Config, state, logs all under `~\u002F.angry-bear\u002Frepos\u002F{hash}\u002F`\n- `ResolveProjectRoot` uses `.git\u002F` only (not `.angry-bear\u002F`)\n\n## Code Standards\n\n### From CLAUDE.md\n- gofmt + golangci-lint must pass with 0 issues\n- 80% minimum test coverage (CI enforced)\n- No shorthand if — separate assignment from condition\n- Octal format: `0o755` not `0755`\n- Never swallow errors — wrap with context or log\n- Table-driven tests, t.TempDir() for filesystem tests\n\n### From CONTRIBUTING.md\n- All exported types and functions must have doc comments\n- One function, one responsibility\n- Adapters contain ALL agent knowledge\n- Fail-open on config\u002Fstate errors (never block developers due to angry-bear bugs)\n- Fail-hard on user mistakes (malformed JSON, bad config versions)\n\n## Review Checklist\n\n- [ ] No agent-specific code outside `internal\u002Fadapter\u002F`\n- [ ] No hardcoded paths to `~\u002F.claude\u002F` or `~\u002F.cursor\u002F` outside adapters\n- [ ] All new exported symbols have doc comments\n- [ ] Tests included for new\u002Fchanged code\n- [ ] Coverage stays >= 80%\n- [ ] No silent error swallowing (wrap or log)\n- [ ] README\u002FHIGHLEVEL updated if user-facing behavior changed\n- [ ] HookAdapter interface updated if new adapter capability added\n- [ ] ScrollView used for any scrollable list (no ad-hoc scroll logic)\n- [ ] Shared constants in `tui\u002Fconstants.go` (not duplicated)\n","# PR Review — angry-bear Guidelines\n\n## Architecture Rules (NON-NEGOTIABLE)\n\n### 1. All agent-specific logic lives in adapters\n- `internal\u002Fadapter\u002F` is the ONLY place for agent-specific code\n- `if agent == \"claude\"` or `if agent == \"cursor\"` outside adapter\u002F = REJECT\n- The engine, TUI, CLI commands, and state manager are agent-agnostic\n\n### 2. HookAdapter interface is the extension point\nEvery piece of agent knowledge belongs in the adapter:\n- `ExitCodeForDeny()` — not hardcoded in hook.go\n- `GlobalConfigPath()` — not hardcoded in resolve.go\n- `InstallHook()` \u002F `UninstallHook()` — adapter manages its own hooks\n\n### 3. No hardcoded agent names\u002Fpaths outside adapters\n- Badge health checks use the adapter registry, not hardcoded lists\n- Hook installation iterates over registered adapters\n- Config file detection uses `adapter.GlobalConfigPath()`\n\n### 4. All data under ~\u002F.angry-bear\u002F\n- No project-level `.angry-bear\u002F` directories\n- Config, state, logs all under `~\u002F.angry-bear\u002Frepos\u002F{hash}\u002F`\n- `ResolveProjectRoot` uses `.git\u002F` only (not `.angry-bear\u002F`)\n\n## Code Standards\n\n### From CLAUDE.md\n- gofmt + golangci-lint must pass with 0 issues\n- 80% minimum test coverage (CI enforced)\n- No shorthand if — separate assignment from condition\n- Octal format: `0o755` not `0755`\n- Never swallow errors — wrap with context or log\n- Table-driven tests, t.TempDir() for filesystem tests\n\n### From CONTRIBUTING.md\n- All exported types and functions must have doc comments\n- One function, one responsibility\n- Adapters contain ALL agent knowledge\n- Fail-open on config\u002Fstate errors (never block developers due to angry-bear bugs)\n- Fail-hard on user mistakes (malformed JSON, bad config versions)\n\n## Review Checklist\n\n- [ ] No agent-specific code outside `internal\u002Fadapter\u002F`\n- [ ] No hardcoded paths to `~\u002F.claude\u002F` or `~\u002F.cursor\u002F` outside adapters\n- [ ] All new exported symbols have doc comments\n- [ ] Tests included for new\u002Fchanged code\n- [ ] Coverage stays >= 80%\n- [ ] No silent error swallowing (wrap or log)\n- [ ] README\u002FHIGHLEVEL updated if user-facing behavior changed\n- [ ] HookAdapter interface updated if new adapter capability added\n- [ ] ScrollView used for any scrollable list (no ad-hoc scroll logic)\n- [ ] Shared constants in `tui\u002Fconstants.go` (not duplicated)\n",{"name":5,"description":7},"main","7230a637486f781f0aed4e59b1c8cac1fc819eb1",".claude\u002Fskills\u002Fpr-review",0,"https:\u002F\u002Fgithub.com\u002Fbluebear-io\u002Fangry-bear","https:\u002F\u002Fbluebear.io\u002Fprojects\u002Fangry-bear","https:\u002F\u002Fgithub.com\u002Fbluebear-io","https:\u002F\u002Fbluebear.io","2026-09-27 08:03:29",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add bluebear-io\u002Fangry-bear --skill pr-review",{"tool":53,"command":54},"bunx","bunx skills add bluebear-io\u002Fangry-bear --skill pr-review",{"tool":56,"command":57},"pnpm","pnpm dlx skills add bluebear-io\u002Fangry-bear --skill pr-review","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fbluebear-io\u002Fangry-bear\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fpr-review\u002FSKILL.md",true,[],[62,70,88,101],{"skillNo":63,"name":64,"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":65,"categories":66,"keywords":67,"publishedAt":33},"01M6RATSEMR5FPANJBGXKMP5VE","no-frontmatter","https:\u002F\u002Fgithub.com\u002Fbluebear-io\u002Fangry-bear\u002Fblob\u002Fmain\u002Ftest\u002Ftestdata\u002Fskills\u002Fclaude\u002Fno-frontmatter\u002FSKILL.md",[],[68,69],"no frontmatter","frontmatter",{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":81,"publishedAt":33},"01M6RAT9WVQB9GKCH90RJGAQSP","linear-workflow","Linear ticket workflow integration","https:\u002F\u002Fgithub.com\u002Fbluebear-io\u002Fangry-bear\u002Fblob\u002Fmain\u002Ftest\u002Ftestdata\u002Fskills\u002Fclaude\u002Flinear-workflow\u002FSKILL.md",[76],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[82,83,84,85,86,87],"workflow","linear","linear workflow","linear ticket","integration","ticket",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":33},"01M6RAT3463EH5J4WNYRK8F92B","go-standards","Enforces Go coding standards for the project","https:\u002F\u002Fgithub.com\u002Fbluebear-io\u002Fangry-bear\u002Fblob\u002Fmain\u002Ftest\u002Ftestdata\u002Fskills\u002Fclaude\u002Fgo-standards\u002FSKILL.md",[],[95,96,97,98,99,26,100],"go","standards","go standards","for","project","coding standards",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":107,"publishedAt":33},"01M6RASEGFPYW3HM3ZGV3DPKX2","bug-fix","Regression-first TDD bug fix workflow with real tests. Use when: fixing bugs, resolving regressions, addressing runtime errors, debugging failures, or when the user reports something broken. Triggers on words like: bug, broken, error, crash, regression, not working, fix.","https:\u002F\u002Fgithub.com\u002Fbluebear-io\u002Fangry-bear\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fbug-fix\u002FSKILL.md",[],[108,109,110,111,32,112,113,114,115,116,117,118,119,120,28,121,122,123,124,82],"bug","fix","bug fix","errors","bugs","tdd","with","error","triggers","tests","runtime","bug fix workflow","reports","broken","regression","first","debugging"]