[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EAFK4RHTNEXH399HKVRNBW":3,"skill-same:01M6EAFK4RHTNEXH399HKVRNBW":387},{"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":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":61,"commitSha":62,"skillDirectory":63,"forksCount":14,"repositoryHtmlUrl":64,"repositoryHomepageUrl":6,"ownerHtmlUrl":65,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":66,"install":67,"resources":80},"01M6EAFK4RHTNEXH399HKVRNBW","react-native-expert",null,"Builds, optimizes, and debugs cross-platform mobile applications with React Native and Expo. Implements navigation hierarchies (tabs, stacks, drawers), configures native modules, optimizes FlatList rendering with memo and useCallback, and handles platform-specific code for iOS and Android. Use when building a React Native or Expo mobile app, setting up navigation, integrating native modules, improving scroll performance, handling SafeArea or keyboard input, or configuring Expo SDK projects.","Blake-John\u002Fagent-config","Blake-John","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F83487296?v=4","01M6EABMJN8BM7V3T5155SHNNX","Blake John","01M6EABMQBM0QRF2X8DZ79K1MD",0,"MIT","https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002F.agents\u002Fskill_spec\u002Freact-native-expert\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","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,45,46,47,48],"react","react native expert","expert","react native","use","keyboard","app","module","platform","modules","mobile app","up","frontend","flutter","projects","applications","code","test","performance","android","2026-11-10 10:12:30",false,"---\nname: react-native-expert\ndescription: Builds, optimizes, and debugs cross-platform mobile applications with React Native and Expo. Implements navigation hierarchies (tabs, stacks, drawers), configures native modules, optimizes FlatList rendering with memo and useCallback, and handles platform-specific code for iOS and Android. Use when building a React Native or Expo mobile app, setting up navigation, integrating native modules, improving scroll performance, handling SafeArea or keyboard input, or configuring Expo SDK projects.\nlicense: MIT\nmetadata:\n  author: https:\u002F\u002Fgithub.com\u002FJeffallan\n  version: \"1.1.0\"\n  domain: frontend\n  triggers: React Native, Expo, mobile app, iOS, Android, cross-platform, native module\n  role: specialist\n  scope: implementation\n  output-format: code\n  related-skills: react-expert, flutter-expert, test-master\n---\n\n# React Native Expert\n\nSenior mobile engineer building production-ready cross-platform applications with React Native and Expo.\n\n## Core Workflow\n\n1. **Setup** — Expo Router or React Navigation, TypeScript config → _run `npx expo doctor` to verify environment and SDK compatibility; fix any reported issues before proceeding_\n2. **Structure** — Feature-based organization\n3. **Implement** — Components with platform handling → _verify on iOS simulator and Android emulator; check Metro bundler output for errors before moving on_\n4. **Optimize** — FlatList, images, memory → _profile with Flipper or React DevTools_\n5. **Test** — Both platforms, real devices\n\n### Error Recovery\n- **Metro bundler errors** → clear cache with `npx expo start --clear`, then restart\n- **iOS build fails** → check Xcode logs → resolve native dependency or provisioning issue → rebuild with `npx expo run:ios`\n- **Android build fails** → check `adb logcat` or Gradle output → resolve SDK\u002FNDK version mismatch → rebuild with `npx expo run:android`\n- **Native module not found** → run `npx expo install \u003Cmodule>` to ensure compatible version, then rebuild native layers\n\n## Reference Guide\n\nLoad detailed guidance based on context:\n\n| Topic | Reference | Load When |\n|-------|-----------|-----------|\n| Navigation | `references\u002Fexpo-router.md` | Expo Router, tabs, stacks, deep linking |\n| Platform | `references\u002Fplatform-handling.md` | iOS\u002FAndroid code, SafeArea, keyboard |\n| Lists | `references\u002Flist-optimization.md` | FlatList, performance, memo |\n| Storage | `references\u002Fstorage-hooks.md` | AsyncStorage, MMKV, persistence |\n| Structure | `references\u002Fproject-structure.md` | Project setup, architecture |\n\n## Constraints\n\n### MUST DO\n- Use FlatList\u002FSectionList for lists (not ScrollView)\n- Implement memo + useCallback for list items\n- Handle SafeAreaView for notches\n- Test on both iOS and Android real devices\n- Use KeyboardAvoidingView for forms\n- Handle Android back button in navigation\n\n### MUST NOT DO\n- Use ScrollView for large lists\n- Use inline styles extensively (creates new objects)\n- Hardcode dimensions (use Dimensions API or flex)\n- Ignore memory leaks from subscriptions\n- Skip platform-specific testing\n- Use waitFor\u002FsetTimeout for animations (use Reanimated)\n\n## Code Examples\n\n### Optimized FlatList with memo + useCallback\n\n```tsx\nimport React, { memo, useCallback } from 'react';\nimport { FlatList, View, Text, StyleSheet } from 'react-native';\n\ntype Item = { id: string; title: string };\n\nconst ListItem = memo(({ title, onPress }: { title: string; onPress: () => void }) => (\n  \u003CView style={styles.item}>\n    \u003CText onPress={onPress}>{title}\u003C\u002FText>\n  \u003C\u002FView>\n));\n\nexport function ItemList({ data }: { data: Item[] }) {\n  const handlePress = useCallback((id: string) => {\n    console.log('pressed', id);\n  }, []);\n\n  const renderItem = useCallback(\n    ({ item }: { item: Item }) => (\n      \u003CListItem title={item.title} onPress={() => handlePress(item.id)} \u002F>\n    ),\n    [handlePress]\n  );\n\n  return (\n    \u003CFlatList\n      data={data}\n      keyExtractor={(item) => item.id}\n      renderItem={renderItem}\n      removeClippedSubviews\n      maxToRenderPerBatch={10}\n      windowSize={5}\n    \u002F>\n  );\n}\n\nconst styles = StyleSheet.create({\n  item: { padding: 16, borderBottomWidth: StyleSheet.hairlineWidth },\n});\n```\n\n### KeyboardAvoidingView Form\n\n```tsx\nimport React from 'react';\nimport {\n  KeyboardAvoidingView,\n  Platform,\n  ScrollView,\n  TextInput,\n  StyleSheet,\n  SafeAreaView,\n} from 'react-native';\n\nexport function LoginForm() {\n  return (\n    \u003CSafeAreaView style={styles.safe}>\n      \u003CKeyboardAvoidingView\n        style={styles.flex}\n        behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n      >\n        \u003CScrollView contentContainerStyle={styles.content} keyboardShouldPersistTaps=\"handled\">\n          \u003CTextInput style={styles.input} placeholder=\"Email\" autoCapitalize=\"none\" \u002F>\n          \u003CTextInput style={styles.input} placeholder=\"Password\" secureTextEntry \u002F>\n        \u003C\u002FScrollView>\n      \u003C\u002FKeyboardAvoidingView>\n    \u003C\u002FSafeAreaView>\n  );\n}\n\nconst styles = StyleSheet.create({\n  safe: { flex: 1 },\n  flex: { flex: 1 },\n  content: { padding: 16, gap: 12 },\n  input: { borderWidth: 1, borderRadius: 8, padding: 12, fontSize: 16 },\n});\n```\n\n### Platform-Specific Component\n\n```tsx\nimport { Platform, StyleSheet, View, Text } from 'react-native';\n\nexport function StatusChip({ label }: { label: string }) {\n  return (\n    \u003CView style={styles.chip}>\n      \u003CText style={styles.label}>{label}\u003C\u002FText>\n    \u003C\u002FView>\n  );\n}\n\nconst styles = StyleSheet.create({\n  chip: {\n    paddingHorizontal: 12,\n    paddingVertical: 4,\n    borderRadius: 999,\n    backgroundColor: '#0a7ea4',\n    \u002F\u002F Platform-specific shadow\n    ...Platform.select({\n      ios: { shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.2, shadowRadius: 4 },\n      android: { elevation: 3 },\n    }),\n  },\n  label: { color: '#fff', fontSize: 13, fontWeight: '600' },\n});\n```\n\n## Output Format\n\nWhen implementing React Native features, deliver:\n1. **Component code** — TypeScript, with prop types defined\n2. **Platform handling** — `Platform.select` or `.ios.tsx` \u002F `.android.tsx` splits as needed\n3. **Navigation integration** — route params typed, back-button handling included\n4. **Performance notes** — memo boundaries, key extractor strategy, image caching\n\n## Knowledge Reference\n\nReact Native 0.73+, Expo SDK 50+, Expo Router, React Navigation 7, Reanimated 3, Gesture Handler, AsyncStorage, MMKV, React Query, Zustand\n","# React Native Expert\n\nSenior mobile engineer building production-ready cross-platform applications with React Native and Expo.\n\n## Core Workflow\n\n1. **Setup** — Expo Router or React Navigation, TypeScript config → _run `npx expo doctor` to verify environment and SDK compatibility; fix any reported issues before proceeding_\n2. **Structure** — Feature-based organization\n3. **Implement** — Components with platform handling → _verify on iOS simulator and Android emulator; check Metro bundler output for errors before moving on_\n4. **Optimize** — FlatList, images, memory → _profile with Flipper or React DevTools_\n5. **Test** — Both platforms, real devices\n\n### Error Recovery\n- **Metro bundler errors** → clear cache with `npx expo start --clear`, then restart\n- **iOS build fails** → check Xcode logs → resolve native dependency or provisioning issue → rebuild with `npx expo run:ios`\n- **Android build fails** → check `adb logcat` or Gradle output → resolve SDK\u002FNDK version mismatch → rebuild with `npx expo run:android`\n- **Native module not found** → run `npx expo install \u003Cmodule>` to ensure compatible version, then rebuild native layers\n\n## Reference Guide\n\nLoad detailed guidance based on context:\n\n| Topic | Reference | Load When |\n|-------|-----------|-----------|\n| Navigation | `references\u002Fexpo-router.md` | Expo Router, tabs, stacks, deep linking |\n| Platform | `references\u002Fplatform-handling.md` | iOS\u002FAndroid code, SafeArea, keyboard |\n| Lists | `references\u002Flist-optimization.md` | FlatList, performance, memo |\n| Storage | `references\u002Fstorage-hooks.md` | AsyncStorage, MMKV, persistence |\n| Structure | `references\u002Fproject-structure.md` | Project setup, architecture |\n\n## Constraints\n\n### MUST DO\n- Use FlatList\u002FSectionList for lists (not ScrollView)\n- Implement memo + useCallback for list items\n- Handle SafeAreaView for notches\n- Test on both iOS and Android real devices\n- Use KeyboardAvoidingView for forms\n- Handle Android back button in navigation\n\n### MUST NOT DO\n- Use ScrollView for large lists\n- Use inline styles extensively (creates new objects)\n- Hardcode dimensions (use Dimensions API or flex)\n- Ignore memory leaks from subscriptions\n- Skip platform-specific testing\n- Use waitFor\u002FsetTimeout for animations (use Reanimated)\n\n## Code Examples\n\n### Optimized FlatList with memo + useCallback\n\n```tsx\nimport React, { memo, useCallback } from 'react';\nimport { FlatList, View, Text, StyleSheet } from 'react-native';\n\ntype Item = { id: string; title: string };\n\nconst ListItem = memo(({ title, onPress }: { title: string; onPress: () => void }) => (\n  \u003CView style={styles.item}>\n    \u003CText onPress={onPress}>{title}\u003C\u002FText>\n  \u003C\u002FView>\n));\n\nexport function ItemList({ data }: { data: Item[] }) {\n  const handlePress = useCallback((id: string) => {\n    console.log('pressed', id);\n  }, []);\n\n  const renderItem = useCallback(\n    ({ item }: { item: Item }) => (\n      \u003CListItem title={item.title} onPress={() => handlePress(item.id)} \u002F>\n    ),\n    [handlePress]\n  );\n\n  return (\n    \u003CFlatList\n      data={data}\n      keyExtractor={(item) => item.id}\n      renderItem={renderItem}\n      removeClippedSubviews\n      maxToRenderPerBatch={10}\n      windowSize={5}\n    \u002F>\n  );\n}\n\nconst styles = StyleSheet.create({\n  item: { padding: 16, borderBottomWidth: StyleSheet.hairlineWidth },\n});\n```\n\n### KeyboardAvoidingView Form\n\n```tsx\nimport React from 'react';\nimport {\n  KeyboardAvoidingView,\n  Platform,\n  ScrollView,\n  TextInput,\n  StyleSheet,\n  SafeAreaView,\n} from 'react-native';\n\nexport function LoginForm() {\n  return (\n    \u003CSafeAreaView style={styles.safe}>\n      \u003CKeyboardAvoidingView\n        style={styles.flex}\n        behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n      >\n        \u003CScrollView contentContainerStyle={styles.content} keyboardShouldPersistTaps=\"handled\">\n          \u003CTextInput style={styles.input} placeholder=\"Email\" autoCapitalize=\"none\" \u002F>\n          \u003CTextInput style={styles.input} placeholder=\"Password\" secureTextEntry \u002F>\n        \u003C\u002FScrollView>\n      \u003C\u002FKeyboardAvoidingView>\n    \u003C\u002FSafeAreaView>\n  );\n}\n\nconst styles = StyleSheet.create({\n  safe: { flex: 1 },\n  flex: { flex: 1 },\n  content: { padding: 16, gap: 12 },\n  input: { borderWidth: 1, borderRadius: 8, padding: 12, fontSize: 16 },\n});\n```\n\n### Platform-Specific Component\n\n```tsx\nimport { Platform, StyleSheet, View, Text } from 'react-native';\n\nexport function StatusChip({ label }: { label: string }) {\n  return (\n    \u003CView style={styles.chip}>\n      \u003CText style={styles.label}>{label}\u003C\u002FText>\n    \u003C\u002FView>\n  );\n}\n\nconst styles = StyleSheet.create({\n  chip: {\n    paddingHorizontal: 12,\n    paddingVertical: 4,\n    borderRadius: 999,\n    backgroundColor: '#0a7ea4',\n    \u002F\u002F Platform-specific shadow\n    ...Platform.select({\n      ios: { shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.2, shadowRadius: 4 },\n      android: { elevation: 3 },\n    }),\n  },\n  label: { color: '#fff', fontSize: 13, fontWeight: '600' },\n});\n```\n\n## Output Format\n\nWhen implementing React Native features, deliver:\n1. **Component code** — TypeScript, with prop types defined\n2. **Platform handling** — `Platform.select` or `.ios.tsx` \u002F `.android.tsx` splits as needed\n3. **Navigation integration** — route params typed, back-button handling included\n4. **Performance notes** — memo boundaries, key extractor strategy, image caching\n\n## Knowledge Reference\n\nReact Native 0.73+, Expo SDK 50+, Expo Router, React Navigation 7, Reanimated 3, Gesture Handler, AsyncStorage, MMKV, React Query, Zustand\n",{"name":5,"license":15,"metadata":54,"description":7},{"role":55,"scope":56,"author":57,"domain":41,"version":58,"triggers":59,"output-format":45,"related-skills":60},"specialist","implementation","https:\u002F\u002Fgithub.com\u002FJeffallan","1.1.0","React Native, Expo, mobile app, iOS, Android, cross-platform, native module","react-expert, flutter-expert, test-master","optimize-agents-chinese","54861d380d2ee16418f006fd308a3d12581b1e78",".agents\u002Fskill_spec\u002Freact-native-expert","https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config","https:\u002F\u002Fgithub.com\u002FBlake-John","2026-06-29 20:16:16",{"source":8,"skillName":5,"commands":68,"prompt":78,"zipAvailable":79},[69,72,75],{"tool":70,"command":71},"npx","npx skills add Blake-John\u002Fagent-config --skill react-native-expert",{"tool":73,"command":74},"bunx","bunx skills add Blake-John\u002Fagent-config --skill react-native-expert",{"tool":76,"command":77},"pnpm","pnpm dlx skills add Blake-John\u002Fagent-config --skill react-native-expert","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002F.agents\u002Fskill_spec\u002Freact-native-expert\u002FSKILL.md",true,[81,87,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281,285,289,293,297,301,305,309,313,317,323,327,331,335,339,343,347,351,355,359,363,367,371,375,379,383],{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"checklist.md","REFERENCE","参考文档",24919,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fchecklist.md",{"path":88,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":91,"sourceHtmlUrl":92},"customize.toml","OTHER","其他",1556,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fcustomize.toml",{"path":94,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":95,"sourceHtmlUrl":96},"instructions.md",1350,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Finstructions.md",{"path":98,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":99,"sourceHtmlUrl":100},"references\u002Fexpo-router.md",4078,"https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002F.agents\u002Fskill_spec\u002Freact-native-expert\u002Freferences\u002Fexpo-router.md",{"path":102,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":103,"sourceHtmlUrl":104},"references\u002Flist-optimization.md",4434,"https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002F.agents\u002Fskill_spec\u002Freact-native-expert\u002Freferences\u002Flist-optimization.md",{"path":106,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":107,"sourceHtmlUrl":108},"references\u002Fplatform-handling.md",3881,"https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002F.agents\u002Fskill_spec\u002Freact-native-expert\u002Freferences\u002Fplatform-handling.md",{"path":110,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":111,"sourceHtmlUrl":112},"references\u002Fproject-structure.md",4116,"https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002F.agents\u002Fskill_spec\u002Freact-native-expert\u002Freferences\u002Fproject-structure.md",{"path":114,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":115,"sourceHtmlUrl":116},"references\u002Fstorage-hooks.md",4370,"https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002F.agents\u002Fskill_spec\u002Freact-native-expert\u002Freferences\u002Fstorage-hooks.md",{"path":118,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":119,"sourceHtmlUrl":120},"resources\u002Fknowledge\u002Fadr-quality-readiness-checklist.md",25356,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fadr-quality-readiness-checklist.md",{"path":122,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":123,"sourceHtmlUrl":124},"resources\u002Fknowledge\u002Fapi-request.md",17129,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fapi-request.md",{"path":126,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":127,"sourceHtmlUrl":128},"resources\u002Fknowledge\u002Fapi-testing-patterns.md",26976,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fapi-testing-patterns.md",{"path":130,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":131,"sourceHtmlUrl":132},"resources\u002Fknowledge\u002Fauth-session.md",16215,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fauth-session.md",{"path":134,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":135,"sourceHtmlUrl":136},"resources\u002Fknowledge\u002Fburn-in.md",6503,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fburn-in.md",{"path":138,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":139,"sourceHtmlUrl":140},"resources\u002Fknowledge\u002Fci-burn-in.md",22486,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fci-burn-in.md",{"path":142,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":143,"sourceHtmlUrl":144},"resources\u002Fknowledge\u002Fcomponent-tdd.md",16149,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fcomponent-tdd.md",{"path":146,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":147,"sourceHtmlUrl":148},"resources\u002Fknowledge\u002Fcontract-testing.md",38991,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fcontract-testing.md",{"path":150,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":151,"sourceHtmlUrl":152},"resources\u002Fknowledge\u002Fdata-factories.md",15331,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fdata-factories.md",{"path":154,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":155,"sourceHtmlUrl":156},"resources\u002Fknowledge\u002Femail-auth.md",24553,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Femail-auth.md",{"path":158,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":159,"sourceHtmlUrl":160},"resources\u002Fknowledge\u002Ferror-handling.md",22959,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Ferror-handling.md",{"path":162,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":163,"sourceHtmlUrl":164},"resources\u002Fknowledge\u002Ffeature-flags.md",23214,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Ffeature-flags.md",{"path":166,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":167,"sourceHtmlUrl":168},"resources\u002Fknowledge\u002Ffile-utils.md",13745,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Ffile-utils.md",{"path":170,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":171,"sourceHtmlUrl":172},"resources\u002Fknowledge\u002Ffixture-architecture.md",12414,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Ffixture-architecture.md",{"path":174,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":175,"sourceHtmlUrl":176},"resources\u002Fknowledge\u002Ffixtures-composition.md",11249,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Ffixtures-composition.md",{"path":178,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":179,"sourceHtmlUrl":180},"resources\u002Fknowledge\u002Fintercept-network-call.md",13489,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fintercept-network-call.md",{"path":182,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":183,"sourceHtmlUrl":184},"resources\u002Fknowledge\u002Flog.md",11281,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Flog.md",{"path":186,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":187,"sourceHtmlUrl":188},"resources\u002Fknowledge\u002Fnetwork-error-monitor.md",12277,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fnetwork-error-monitor.md",{"path":190,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":191,"sourceHtmlUrl":192},"resources\u002Fknowledge\u002Fnetwork-first.md",16327,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fnetwork-first.md",{"path":194,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":195,"sourceHtmlUrl":196},"resources\u002Fknowledge\u002Fnetwork-recorder.md",15499,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fnetwork-recorder.md",{"path":198,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":199,"sourceHtmlUrl":200},"resources\u002Fknowledge\u002Fnfr-criteria.md",26670,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fnfr-criteria.md",{"path":202,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":203,"sourceHtmlUrl":204},"resources\u002Fknowledge\u002Foverview.md",9663,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Foverview.md",{"path":206,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":207,"sourceHtmlUrl":208},"resources\u002Fknowledge\u002Fpact-broker-webhooks.md",13376,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fpact-broker-webhooks.md",{"path":210,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":211,"sourceHtmlUrl":212},"resources\u002Fknowledge\u002Fpact-consumer-di.md",12005,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fpact-consumer-di.md",{"path":214,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":215,"sourceHtmlUrl":216},"resources\u002Fknowledge\u002Fpact-consumer-framework-setup.md",35846,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fpact-consumer-framework-setup.md",{"path":218,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":219,"sourceHtmlUrl":220},"resources\u002Fknowledge\u002Fpact-mcp.md",8977,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fpact-mcp.md",{"path":222,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":223,"sourceHtmlUrl":224},"resources\u002Fknowledge\u002Fpactjs-utils-consumer-helpers.md",16029,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fpactjs-utils-consumer-helpers.md",{"path":226,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":227,"sourceHtmlUrl":228},"resources\u002Fknowledge\u002Fpactjs-utils-overview.md",10481,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fpactjs-utils-overview.md",{"path":230,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":231,"sourceHtmlUrl":232},"resources\u002Fknowledge\u002Fpactjs-utils-provider-verifier.md",18180,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fpactjs-utils-provider-verifier.md",{"path":234,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":235,"sourceHtmlUrl":236},"resources\u002Fknowledge\u002Fpactjs-utils-request-filter.md",7275,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fpactjs-utils-request-filter.md",{"path":238,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":239,"sourceHtmlUrl":240},"resources\u002Fknowledge\u002Fplaywright-cli.md",14993,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fplaywright-cli.md",{"path":242,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":243,"sourceHtmlUrl":244},"resources\u002Fknowledge\u002Fplaywright-config.md",21457,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fplaywright-config.md",{"path":246,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":247,"sourceHtmlUrl":248},"resources\u002Fknowledge\u002Fprobability-impact.md",19200,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fprobability-impact.md",{"path":250,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":251,"sourceHtmlUrl":252},"resources\u002Fknowledge\u002Frecurse.md",12936,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Frecurse.md",{"path":254,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":255,"sourceHtmlUrl":256},"resources\u002Fknowledge\u002Frisk-governance.md",20965,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Frisk-governance.md",{"path":258,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":259,"sourceHtmlUrl":260},"resources\u002Fknowledge\u002Fselective-testing.md",21846,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fselective-testing.md",{"path":262,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":263,"sourceHtmlUrl":264},"resources\u002Fknowledge\u002Fselector-resilience.md",19784,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fselector-resilience.md",{"path":266,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":267,"sourceHtmlUrl":268},"resources\u002Fknowledge\u002Ftest-healing-patterns.md",21388,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Ftest-healing-patterns.md",{"path":270,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":271,"sourceHtmlUrl":272},"resources\u002Fknowledge\u002Ftest-levels-framework.md",14756,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Ftest-levels-framework.md",{"path":274,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":275,"sourceHtmlUrl":276},"resources\u002Fknowledge\u002Ftest-priorities-matrix.md",11454,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Ftest-priorities-matrix.md",{"path":278,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":279,"sourceHtmlUrl":280},"resources\u002Fknowledge\u002Ftest-quality.md",24580,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Ftest-quality.md",{"path":282,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":283,"sourceHtmlUrl":284},"resources\u002Fknowledge\u002Ftiming-debugging.md",14021,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Ftiming-debugging.md",{"path":286,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":287,"sourceHtmlUrl":288},"resources\u002Fknowledge\u002Fvisual-debugging.md",17480,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fvisual-debugging.md",{"path":290,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":291,"sourceHtmlUrl":292},"resources\u002Fknowledge\u002Fwebhook-module-setup.md",5834,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fwebhook-module-setup.md",{"path":294,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":295,"sourceHtmlUrl":296},"resources\u002Fknowledge\u002Fwebhook-providers.md",6440,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fwebhook-providers.md",{"path":298,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":299,"sourceHtmlUrl":300},"resources\u002Fknowledge\u002Fwebhook-risk-guidance.md",6474,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fwebhook-risk-guidance.md",{"path":302,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":303,"sourceHtmlUrl":304},"resources\u002Fknowledge\u002Fwebhook-template-matchers.md",6011,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fwebhook-template-matchers.md",{"path":306,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":307,"sourceHtmlUrl":308},"resources\u002Fknowledge\u002Fwebhook-testing-fundamentals.md",3185,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fwebhook-testing-fundamentals.md",{"path":310,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":311,"sourceHtmlUrl":312},"resources\u002Fknowledge\u002Fwebhook-timeout-error.md",5726,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fwebhook-timeout-error.md",{"path":314,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":315,"sourceHtmlUrl":316},"resources\u002Fknowledge\u002Fwebhook-waiting-querying.md",7074,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Fknowledge\u002Fwebhook-waiting-querying.md",{"path":318,"resourceType":319,"resourceTypeDesc":320,"sizeBytes":321,"sourceHtmlUrl":322},"resources\u002Ftea-index.csv","ASSET","资产文件",11002,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fresources\u002Ftea-index.csv",{"path":324,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":325,"sourceHtmlUrl":326},"steps-c\u002Fstep-01-preflight-and-context.md",7851,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-c\u002Fstep-01-preflight-and-context.md",{"path":328,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":329,"sourceHtmlUrl":330},"steps-c\u002Fstep-01b-resume.md",2891,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-c\u002Fstep-01b-resume.md",{"path":332,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":333,"sourceHtmlUrl":334},"steps-c\u002Fstep-02-identify-targets.md",6304,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-c\u002Fstep-02-identify-targets.md",{"path":336,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":337,"sourceHtmlUrl":338},"steps-c\u002Fstep-03-generate-tests.md",13195,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-c\u002Fstep-03-generate-tests.md",{"path":340,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":341,"sourceHtmlUrl":342},"steps-c\u002Fstep-03a-subagent-api.md",12600,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-c\u002Fstep-03a-subagent-api.md",{"path":344,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":345,"sourceHtmlUrl":346},"steps-c\u002Fstep-03b-subagent-backend.md",7469,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-c\u002Fstep-03b-subagent-backend.md",{"path":348,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":349,"sourceHtmlUrl":350},"steps-c\u002Fstep-03b-subagent-e2e.md",6485,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-c\u002Fstep-03b-subagent-e2e.md",{"path":352,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":353,"sourceHtmlUrl":354},"steps-c\u002Fstep-03c-aggregate.md",11779,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-c\u002Fstep-03c-aggregate.md",{"path":356,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":357,"sourceHtmlUrl":358},"steps-c\u002Fstep-04-validate-and-summarize.md",3242,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-c\u002Fstep-04-validate-and-summarize.md",{"path":360,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":361,"sourceHtmlUrl":362},"steps-e\u002Fstep-01-assess.md",1253,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-e\u002Fstep-01-assess.md",{"path":364,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":365,"sourceHtmlUrl":366},"steps-e\u002Fstep-02-apply-edit.md",1475,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-e\u002Fstep-02-apply-edit.md",{"path":368,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":369,"sourceHtmlUrl":370},"steps-v\u002Fstep-01-validate.md",1796,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fsteps-v\u002Fstep-01-validate.md",{"path":372,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":373,"sourceHtmlUrl":374},"validation-report-20260127-095021.md",2046,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fvalidation-report-20260127-095021.md",{"path":376,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":377,"sourceHtmlUrl":378},"validation-report-20260127-102401.md",3666,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fvalidation-report-20260127-102401.md",{"path":380,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":381,"sourceHtmlUrl":382},"workflow-plan.md",429,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fworkflow-plan.md",{"path":384,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":385,"sourceHtmlUrl":386},"workflow.yaml",1849,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-testarch-automate\u002Fworkflow.yaml",[388,413,443,466,489,502],{"skillNo":389,"name":390,"nameZh":6,"description":391,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":392,"categories":393,"keywords":394,"publishedAt":49},"01M6EAZFTRV9ED04KDN43NNBND","websocket-engineer","当使用 WebSocket 或 Socket.IO 构建实时通信系统时使用。适用于双向消息通信、Redis 水平扩展、在线状态追踪、房间管理。","https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002Fopencode\u002Fskills\u002Fwebsocket-engineer\u002FSKILL.md",[],[395,396,397,398,45,399,400,401,402,403,404,405,406,407,408,31,409,410,411,412],"websocket","engineer","websocket engineer","architecture","communication","push","messaging","monitoring","server","redis","real-time","api","reviewer","fastapi","nestjs","chat","time","io",{"skillNo":414,"name":415,"nameZh":6,"description":416,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":417,"categories":418,"keywords":426,"publishedAt":49},"01M6EAZAQJDB2F89M9BAXXQ193","security-reviewer","识别安全漏洞，生成带有严重性评级的结构化审计报告，并提供可操作的安全修复建议。在开展安全审计、审查代码漏洞或分析基础设施安全时使用。适用于 SAST 扫描、渗透测试、DevSecOps 实践、云安全审查、依赖审计、密钥扫描或合规检查。生成漏洞报告、优先级建议和合规清单。","https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002Fopencode\u002Fskills\u002Fsecurity-reviewer\u002FSKILL.md",[419,422,425],{"categoryNo":420,"categoryName":421,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":423,"categoryName":424,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[427,407,428,429,430,431,432,433,45,434,435,436,437,406,438,439,440,396,441,442],"security","security reviewer","testing","MCP","review","kubernetes","security analysis","cloud security","analysis","security audit","vulnerability","Bash","生成","安全","scan","penetration",{"skillNo":444,"name":445,"nameZh":6,"description":446,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":447,"categories":448,"keywords":450,"publishedAt":49},"01M6EAZ69SHGY5EC3P0SHJ9H6P","secure-code-guardian","用于实现认证\u002F授权、保护用户输入或防御 OWASP Top 10 漏洞 —— 包括自定义安全实现，例如使用 bcrypt\u002Fargon2 哈希密码、使用参数化语句清理 SQL 查询、配置 CORS\u002FCSP 头部、使用 Zod 验证输入以及设置 JWT token。适用于认证、授权、输入验证、加密、OWASP Top 10 防护、安全会话管理和安全加固。对于预构建的 OAuth\u002FSSO 集成或独立的安全审计，请考虑使用更专业的 skill。","https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002Fopencode\u002Fskills\u002Fsecure-code-guardian\u002FSKILL.md",[449],{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[451,45,452,453,454,398,455,456,457,458,459,460,437,461,440,462,463,407,464,465],"secure","guardian","secure code guardian","github","sql","owasp top 10","authentication","OAuth","encryption","sso","密码","password","zod","Secure Coding","fullstack",{"skillNo":467,"name":468,"nameZh":6,"description":469,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":470,"categories":471,"keywords":473,"publishedAt":49},"01M6EAYPNHN4R8HZZ539DR7A5E","rust-engineer","编写、审查和调试符合 Rust 风格的代码，确保内存安全和零成本抽象。实现所有权模式、管理生命周期、设计 trait 层级、使用 tokio 构建异步应用程序，以及使用 Result\u002FOption 结构化错误处理。适用于构建 Rust 应用程序、解决所有权或借用问题、设计基于 trait 的 API、实现 async\u002Fawait 并发、创建 FFI 绑定，或优化性能和内存安全。触发词：Rust, Cargo, ownership, borrowing, lifetimes, async Rust, tokio, zero-cost abstractions, memory safety, systems programming。","https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002Fopencode\u002Fskills\u002Frust-engineer\u002FSKILL.md",[472],{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[474,396,475,429,476,454,477,478,479,480,481,482,440,483,484,56,485,486,487,488],"rust","rust engineer","design","memory","memory safety","ffi","https","ZeRO","Safety","option","cost","async","patterns","systems","cargo",{"skillNo":490,"name":5,"nameZh":6,"description":491,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":492,"categories":493,"keywords":495,"publishedAt":49},"01M6EAYJ5YERE5C5GNE248S26G","使用 React Native 和 Expo 构建、优化和调试跨平台移动应用。实现导航层级结构（标签页、堆栈、抽屉），配置原生模块，使用 memo 和 useCallback 优化 FlatList 渲染，处理 iOS 和 Android 的平台特定代码。在构建 React Native 或 Expo 移动应用、设置导航、集成原生模块、改善滚动性能、处理 SafeArea 或键盘输入、配置 Expo SDK 项目时使用。","https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002Fopencode\u002Fskills\u002Freact-native-expert\u002FSKILL.md",[494],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[29,32,31,30,41,48,454,496,45,480,497,39,56,498,499,500,501,37,36,35],"sdk","ios","mobile","expo","cross-platform","memo",{"skillNo":503,"name":504,"nameZh":6,"description":505,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":506,"categories":507,"keywords":509,"publishedAt":49},"01M6EAYEGN5FZBHAGF8GQAK64D","react-expert","当你使用 .jsx 或 .tsx 文件构建 React 18+ 应用、Next.js App Router 项目或 create-react-app 时使用。创建组件、实现自定义 hooks、调试渲染问题、将类组件迁移为函数组件、以及实现状态管理。适用于 Server Components、Suspense 边界、useActionState 表单、性能优化或 React 19 特性。","https:\u002F\u002Fgithub.com\u002FBlake-John\u002Fagent-config\u002Fblob\u002Foptimize-agents-chinese\u002Fopencode\u002Fskills\u002Freact-expert\u002FSKILL.md",[508],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[29,31,510,41,454,511,512,513,45,403,514,515,516,517,518,519,520,35,465,521],"react expert","components","component","create","Next.js","zustand","router","hooks","tsx","tanstack query","query","react 19"]