ai-engineering-init 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. package/.claude/agents/code-reviewer.md +139 -0
  2. package/.claude/agents/project-manager.md +159 -0
  3. package/.claude/audio/completed.wav +0 -0
  4. package/.claude/commands/add-todo.md +255 -0
  5. package/.claude/commands/check.md +210 -0
  6. package/.claude/commands/crud.md +454 -0
  7. package/.claude/commands/dev.md +503 -0
  8. package/.claude/commands/init-docs.md +681 -0
  9. package/.claude/commands/next.md +251 -0
  10. package/.claude/commands/progress.md +242 -0
  11. package/.claude/commands/start.md +199 -0
  12. package/.claude/commands/sync.md +307 -0
  13. package/.claude/commands/update-status.md +428 -0
  14. package/.claude/docs/Mixin/344/275/277/347/224/250/346/214/207/345/215/227.md +299 -0
  15. package/.claude/docs/README.md +167 -0
  16. package/.claude/docs//345/211/215/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +599 -0
  17. package/.claude/docs//345/220/216/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +726 -0
  18. package/.claude/docs//345/267/245/344/275/234/346/265/201/345/274/200/345/217/221/346/214/207/345/215/227.md +714 -0
  19. package/.claude/docs//345/267/245/345/205/267/347/261/273/344/275/277/347/224/250/346/214/207/345/215/227.md +463 -0
  20. package/.claude/docs//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/350/247/204/350/214/203.md +390 -0
  21. package/.claude/docs//346/226/260/345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213/350/247/204/350/214/203.md +688 -0
  22. package/.claude/docs//346/226/260/351/241/271/347/233/256/345/274/200/345/217/221/346/265/201/347/250/213.md +365 -0
  23. package/.claude/docs//346/241/206/346/236/266/350/257/264/346/230/216.md +393 -0
  24. package/.claude/docs//350/267/257/347/224/261/351/205/215/347/275/256/346/214/207/345/215/227.md +246 -0
  25. package/.claude/framework-config.json +73 -0
  26. package/.claude/hooks/pre-tool-use.js +117 -0
  27. package/.claude/hooks/skill-forced-eval.js +167 -0
  28. package/.claude/hooks/stop.js +58 -0
  29. package/.claude/settings.json +41 -0
  30. package/.claude/skills/add-skill/SKILL.md +352 -0
  31. package/.claude/skills/api-development/SKILL.md +560 -0
  32. package/.claude/skills/architecture-design/SKILL.md +756 -0
  33. package/.claude/skills/backend-annotations/SKILL.md +674 -0
  34. package/.claude/skills/banana-image/CHANGELOG.md +37 -0
  35. package/.claude/skills/banana-image/README.md +146 -0
  36. package/.claude/skills/banana-image/SKILL.md +164 -0
  37. package/.claude/skills/banana-image/assets/logo.png +0 -0
  38. package/.claude/skills/banana-image/references/advanced-usage.md +189 -0
  39. package/.claude/skills/banana-image/scripts/apply_template.py +125 -0
  40. package/.claude/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  41. package/.claude/skills/banana-image/scripts/batch_prep.py +82 -0
  42. package/.claude/skills/banana-image/scripts/package-lock.json +1437 -0
  43. package/.claude/skills/banana-image/scripts/package.json +18 -0
  44. package/.claude/skills/banana-image/scripts/requirements.txt +10 -0
  45. package/.claude/skills/banana-image/templates/poster.json +22 -0
  46. package/.claude/skills/banana-image/templates/product.json +17 -0
  47. package/.claude/skills/banana-image/templates/social.json +22 -0
  48. package/.claude/skills/banana-image/templates/thumbnail.json +17 -0
  49. package/.claude/skills/brainstorm/SKILL.md +648 -0
  50. package/.claude/skills/bug-detective/SKILL.md +1206 -0
  51. package/.claude/skills/code-patterns/SKILL.md +590 -0
  52. package/.claude/skills/collaborating-with-codex/SKILL.md +174 -0
  53. package/.claude/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  54. package/.claude/skills/collaborating-with-gemini/SKILL.md +194 -0
  55. package/.claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  56. package/.claude/skills/crud-development/SKILL.md +649 -0
  57. package/.claude/skills/data-permission/SKILL.md +599 -0
  58. package/.claude/skills/database-ops/SKILL.md +407 -0
  59. package/.claude/skills/error-handler/SKILL.md +371 -0
  60. package/.claude/skills/file-oss-management/SKILL.md +863 -0
  61. package/.claude/skills/git-workflow/SKILL.md +375 -0
  62. package/.claude/skills/json-serialization/SKILL.md +357 -0
  63. package/.claude/skills/leniu-api-development/SKILL.md +803 -0
  64. package/.claude/skills/leniu-architecture-design/SKILL.md +598 -0
  65. package/.claude/skills/leniu-backend-annotations/SKILL.md +664 -0
  66. package/.claude/skills/leniu-code-patterns/SKILL.md +365 -0
  67. package/.claude/skills/leniu-crud-development/SKILL.md +1110 -0
  68. package/.claude/skills/leniu-data-permission/SKILL.md +256 -0
  69. package/.claude/skills/leniu-database-ops/SKILL.md +426 -0
  70. package/.claude/skills/leniu-error-handler/SKILL.md +462 -0
  71. package/.claude/skills/leniu-java-amount-handling/SKILL.md +461 -0
  72. package/.claude/skills/leniu-java-code-style/SKILL.md +510 -0
  73. package/.claude/skills/leniu-java-concurrent/SKILL.md +400 -0
  74. package/.claude/skills/leniu-java-entity/SKILL.md +751 -0
  75. package/.claude/skills/leniu-java-export/SKILL.md +560 -0
  76. package/.claude/skills/leniu-java-logging/SKILL.md +832 -0
  77. package/.claude/skills/leniu-java-mq/SKILL.md +338 -0
  78. package/.claude/skills/leniu-java-mybatis/SKILL.md +640 -0
  79. package/.claude/skills/leniu-java-report-query-param/SKILL.md +291 -0
  80. package/.claude/skills/leniu-java-task/SKILL.md +367 -0
  81. package/.claude/skills/leniu-java-total-line/SKILL.md +195 -0
  82. package/.claude/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  83. package/.claude/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  84. package/.claude/skills/leniu-mealtime/SKILL.md +215 -0
  85. package/.claude/skills/leniu-redis-cache/SKILL.md +316 -0
  86. package/.claude/skills/leniu-security-guard/SKILL.md +520 -0
  87. package/.claude/skills/leniu-utils-toolkit/SKILL.md +380 -0
  88. package/.claude/skills/openspec-apply-change/SKILL.md +156 -0
  89. package/.claude/skills/openspec-archive-change/SKILL.md +114 -0
  90. package/.claude/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  91. package/.claude/skills/openspec-continue-change/SKILL.md +118 -0
  92. package/.claude/skills/openspec-explore/SKILL.md +290 -0
  93. package/.claude/skills/openspec-ff-change/SKILL.md +101 -0
  94. package/.claude/skills/openspec-new-change/SKILL.md +74 -0
  95. package/.claude/skills/openspec-onboard/SKILL.md +529 -0
  96. package/.claude/skills/openspec-sync-specs/SKILL.md +138 -0
  97. package/.claude/skills/openspec-verify-change/SKILL.md +168 -0
  98. package/.claude/skills/performance-doctor/SKILL.md +627 -0
  99. package/.claude/skills/project-navigator/SKILL.md +305 -0
  100. package/.claude/skills/redis-cache/SKILL.md +839 -0
  101. package/.claude/skills/scheduled-jobs/SKILL.md +633 -0
  102. package/.claude/skills/security-guard/SKILL.md +748 -0
  103. package/.claude/skills/sms-mail/SKILL.md +766 -0
  104. package/.claude/skills/social-login/SKILL.md +668 -0
  105. package/.claude/skills/store-pc/SKILL.md +366 -0
  106. package/.claude/skills/task-tracker/SKILL.md +307 -0
  107. package/.claude/skills/tech-decision/SKILL.md +393 -0
  108. package/.claude/skills/tenant-management/SKILL.md +603 -0
  109. package/.claude/skills/test-development/SKILL.md +755 -0
  110. package/.claude/skills/ui-pc/SKILL.md +438 -0
  111. package/.claude/skills/utils-toolkit/SKILL.md +615 -0
  112. package/.claude/skills/websocket-sse/SKILL.md +716 -0
  113. package/.claude/skills/workflow-engine/SKILL.md +676 -0
  114. package/.claude/templates//345/276/205/345/212/236/346/270/205/345/215/225/346/250/241/346/235/277.md +56 -0
  115. package/.claude/templates//351/234/200/346/261/202/346/226/207/346/241/243/346/250/241/346/235/277.md +85 -0
  116. package/.claude/templates//351/241/271/347/233/256/347/212/266/346/200/201/346/250/241/346/235/277.md +43 -0
  117. package/.codex/skills/add-skill/SKILL.md +352 -0
  118. package/.codex/skills/add-todo/SKILL.md +269 -0
  119. package/.codex/skills/api-development/SKILL.md +693 -0
  120. package/.codex/skills/architecture-design/SKILL.md +628 -0
  121. package/.codex/skills/backend-annotations/SKILL.md +664 -0
  122. package/.codex/skills/banana-image/CHANGELOG.md +37 -0
  123. package/.codex/skills/banana-image/README.md +146 -0
  124. package/.codex/skills/banana-image/SKILL.md +164 -0
  125. package/.codex/skills/banana-image/assets/logo.png +0 -0
  126. package/.codex/skills/banana-image/references/advanced-usage.md +189 -0
  127. package/.codex/skills/banana-image/scripts/apply_template.py +125 -0
  128. package/.codex/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  129. package/.codex/skills/banana-image/scripts/batch_prep.py +82 -0
  130. package/.codex/skills/banana-image/scripts/package-lock.json +1437 -0
  131. package/.codex/skills/banana-image/scripts/package.json +18 -0
  132. package/.codex/skills/banana-image/scripts/requirements.txt +10 -0
  133. package/.codex/skills/banana-image/templates/poster.json +22 -0
  134. package/.codex/skills/banana-image/templates/product.json +17 -0
  135. package/.codex/skills/banana-image/templates/social.json +22 -0
  136. package/.codex/skills/banana-image/templates/thumbnail.json +17 -0
  137. package/.codex/skills/brainstorm/SKILL.md +648 -0
  138. package/.codex/skills/bug-detective/SKILL.md +1206 -0
  139. package/.codex/skills/check/SKILL.md +367 -0
  140. package/.codex/skills/code-patterns/SKILL.md +442 -0
  141. package/.codex/skills/collaborating-with-codex/SKILL.md +174 -0
  142. package/.codex/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  143. package/.codex/skills/collaborating-with-gemini/SKILL.md +194 -0
  144. package/.codex/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  145. package/.codex/skills/crud/SKILL.md +265 -0
  146. package/.codex/skills/crud-development/SKILL.md +637 -0
  147. package/.codex/skills/data-permission/SKILL.md +591 -0
  148. package/.codex/skills/database-ops/SKILL.md +553 -0
  149. package/.codex/skills/dev/SKILL.md +187 -0
  150. package/.codex/skills/error-handler/SKILL.md +361 -0
  151. package/.codex/skills/file-oss-management/SKILL.md +863 -0
  152. package/.codex/skills/git-workflow/SKILL.md +375 -0
  153. package/.codex/skills/init-docs/SKILL.md +194 -0
  154. package/.codex/skills/json-serialization/SKILL.md +357 -0
  155. package/.codex/skills/leniu-api-development/SKILL.md +803 -0
  156. package/.codex/skills/leniu-architecture-design/SKILL.md +594 -0
  157. package/.codex/skills/leniu-backend-annotations/SKILL.md +662 -0
  158. package/.codex/skills/leniu-code-patterns/SKILL.md +365 -0
  159. package/.codex/skills/leniu-crud-development/SKILL.md +1110 -0
  160. package/.codex/skills/leniu-data-permission/SKILL.md +256 -0
  161. package/.codex/skills/leniu-database-ops/SKILL.md +426 -0
  162. package/.codex/skills/leniu-error-handler/SKILL.md +462 -0
  163. package/.codex/skills/leniu-java-amount-handling/SKILL.md +461 -0
  164. package/.codex/skills/leniu-java-code-style/SKILL.md +510 -0
  165. package/.codex/skills/leniu-java-concurrent/SKILL.md +400 -0
  166. package/.codex/skills/leniu-java-entity/SKILL.md +751 -0
  167. package/.codex/skills/leniu-java-export/SKILL.md +560 -0
  168. package/.codex/skills/leniu-java-logging/SKILL.md +832 -0
  169. package/.codex/skills/leniu-java-mq/SKILL.md +338 -0
  170. package/.codex/skills/leniu-java-mybatis/SKILL.md +640 -0
  171. package/.codex/skills/leniu-java-report-query-param/SKILL.md +291 -0
  172. package/.codex/skills/leniu-java-task/SKILL.md +367 -0
  173. package/.codex/skills/leniu-java-total-line/SKILL.md +195 -0
  174. package/.codex/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  175. package/.codex/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  176. package/.codex/skills/leniu-mealtime/SKILL.md +215 -0
  177. package/.codex/skills/leniu-redis-cache/SKILL.md +316 -0
  178. package/.codex/skills/leniu-security-guard/SKILL.md +520 -0
  179. package/.codex/skills/leniu-utils-toolkit/SKILL.md +378 -0
  180. package/.codex/skills/next/SKILL.md +137 -0
  181. package/.codex/skills/openspec-apply-change/SKILL.md +156 -0
  182. package/.codex/skills/openspec-archive-change/SKILL.md +114 -0
  183. package/.codex/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  184. package/.codex/skills/openspec-continue-change/SKILL.md +118 -0
  185. package/.codex/skills/openspec-explore/SKILL.md +290 -0
  186. package/.codex/skills/openspec-ff-change/SKILL.md +101 -0
  187. package/.codex/skills/openspec-new-change/SKILL.md +74 -0
  188. package/.codex/skills/openspec-onboard/SKILL.md +529 -0
  189. package/.codex/skills/openspec-sync-specs/SKILL.md +138 -0
  190. package/.codex/skills/openspec-verify-change/SKILL.md +168 -0
  191. package/.codex/skills/performance-doctor/SKILL.md +627 -0
  192. package/.codex/skills/progress/SKILL.md +193 -0
  193. package/.codex/skills/project-navigator/SKILL.md +286 -0
  194. package/.codex/skills/redis-cache/SKILL.md +829 -0
  195. package/.codex/skills/scheduled-jobs/SKILL.md +633 -0
  196. package/.codex/skills/security-guard/SKILL.md +739 -0
  197. package/.codex/skills/sms-mail/SKILL.md +766 -0
  198. package/.codex/skills/social-login/SKILL.md +668 -0
  199. package/.codex/skills/start/SKILL.md +154 -0
  200. package/.codex/skills/store-pc/SKILL.md +491 -0
  201. package/.codex/skills/sync/SKILL.md +149 -0
  202. package/.codex/skills/task-tracker/SKILL.md +307 -0
  203. package/.codex/skills/tech-decision/SKILL.md +393 -0
  204. package/.codex/skills/tenant-management/SKILL.md +603 -0
  205. package/.codex/skills/test-development/SKILL.md +755 -0
  206. package/.codex/skills/ui-pc/SKILL.md +475 -0
  207. package/.codex/skills/update-status/SKILL.md +159 -0
  208. package/.codex/skills/utils-toolkit/SKILL.md +593 -0
  209. package/.codex/skills/websocket-sse/SKILL.md +716 -0
  210. package/.codex/skills/workflow-engine/SKILL.md +676 -0
  211. package/.cursor/agents/code-reviewer.md +139 -0
  212. package/.cursor/agents/project-manager.md +159 -0
  213. package/.cursor/commands/opsx-apply.md +152 -0
  214. package/.cursor/commands/opsx-archive.md +157 -0
  215. package/.cursor/commands/opsx-bulk-archive.md +242 -0
  216. package/.cursor/commands/opsx-continue.md +114 -0
  217. package/.cursor/commands/opsx-explore.md +174 -0
  218. package/.cursor/commands/opsx-ff.md +94 -0
  219. package/.cursor/commands/opsx-new.md +69 -0
  220. package/.cursor/commands/opsx-onboard.md +525 -0
  221. package/.cursor/commands/opsx-sync.md +134 -0
  222. package/.cursor/commands/opsx-verify.md +164 -0
  223. package/.cursor/mcp.json +22 -0
  224. package/.cursor/skills/add-skill/SKILL.md +352 -0
  225. package/.cursor/skills/api-development/SKILL.md +560 -0
  226. package/.cursor/skills/architecture-design/SKILL.md +756 -0
  227. package/.cursor/skills/backend-annotations/SKILL.md +674 -0
  228. package/.cursor/skills/banana-image/CHANGELOG.md +37 -0
  229. package/.cursor/skills/banana-image/README.md +146 -0
  230. package/.cursor/skills/banana-image/SKILL.md +164 -0
  231. package/.cursor/skills/banana-image/assets/logo.png +0 -0
  232. package/.cursor/skills/banana-image/references/advanced-usage.md +189 -0
  233. package/.cursor/skills/banana-image/scripts/apply_template.py +125 -0
  234. package/.cursor/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  235. package/.cursor/skills/banana-image/scripts/batch_prep.py +82 -0
  236. package/.cursor/skills/banana-image/scripts/package-lock.json +1437 -0
  237. package/.cursor/skills/banana-image/scripts/package.json +18 -0
  238. package/.cursor/skills/banana-image/scripts/requirements.txt +10 -0
  239. package/.cursor/skills/banana-image/templates/poster.json +22 -0
  240. package/.cursor/skills/banana-image/templates/product.json +17 -0
  241. package/.cursor/skills/banana-image/templates/social.json +22 -0
  242. package/.cursor/skills/banana-image/templates/thumbnail.json +17 -0
  243. package/.cursor/skills/brainstorm/SKILL.md +648 -0
  244. package/.cursor/skills/bug-detective/SKILL.md +1206 -0
  245. package/.cursor/skills/code-patterns/SKILL.md +590 -0
  246. package/.cursor/skills/collaborating-with-codex/SKILL.md +174 -0
  247. package/.cursor/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  248. package/.cursor/skills/collaborating-with-gemini/SKILL.md +194 -0
  249. package/.cursor/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  250. package/.cursor/skills/crud-development/SKILL.md +649 -0
  251. package/.cursor/skills/data-permission/SKILL.md +599 -0
  252. package/.cursor/skills/database-ops/SKILL.md +407 -0
  253. package/.cursor/skills/error-handler/SKILL.md +371 -0
  254. package/.cursor/skills/file-oss-management/SKILL.md +863 -0
  255. package/.cursor/skills/git-workflow/SKILL.md +375 -0
  256. package/.cursor/skills/json-serialization/SKILL.md +357 -0
  257. package/.cursor/skills/leniu-api-development/SKILL.md +803 -0
  258. package/.cursor/skills/leniu-architecture-design/SKILL.md +598 -0
  259. package/.cursor/skills/leniu-backend-annotations/SKILL.md +664 -0
  260. package/.cursor/skills/leniu-code-patterns/SKILL.md +365 -0
  261. package/.cursor/skills/leniu-crud-development/SKILL.md +1110 -0
  262. package/.cursor/skills/leniu-data-permission/SKILL.md +256 -0
  263. package/.cursor/skills/leniu-database-ops/SKILL.md +426 -0
  264. package/.cursor/skills/leniu-error-handler/SKILL.md +462 -0
  265. package/.cursor/skills/leniu-java-amount-handling/SKILL.md +461 -0
  266. package/.cursor/skills/leniu-java-code-style/SKILL.md +510 -0
  267. package/.cursor/skills/leniu-java-concurrent/SKILL.md +400 -0
  268. package/.cursor/skills/leniu-java-entity/SKILL.md +751 -0
  269. package/.cursor/skills/leniu-java-export/SKILL.md +560 -0
  270. package/.cursor/skills/leniu-java-logging/SKILL.md +832 -0
  271. package/.cursor/skills/leniu-java-mq/SKILL.md +338 -0
  272. package/.cursor/skills/leniu-java-mybatis/SKILL.md +640 -0
  273. package/.cursor/skills/leniu-java-report-query-param/SKILL.md +291 -0
  274. package/.cursor/skills/leniu-java-task/SKILL.md +367 -0
  275. package/.cursor/skills/leniu-java-total-line/SKILL.md +195 -0
  276. package/.cursor/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  277. package/.cursor/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  278. package/.cursor/skills/leniu-mealtime/SKILL.md +215 -0
  279. package/.cursor/skills/leniu-redis-cache/SKILL.md +316 -0
  280. package/.cursor/skills/leniu-security-guard/SKILL.md +520 -0
  281. package/.cursor/skills/leniu-utils-toolkit/SKILL.md +380 -0
  282. package/.cursor/skills/openspec-apply-change/SKILL.md +156 -0
  283. package/.cursor/skills/openspec-archive-change/SKILL.md +114 -0
  284. package/.cursor/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  285. package/.cursor/skills/openspec-continue-change/SKILL.md +118 -0
  286. package/.cursor/skills/openspec-explore/SKILL.md +290 -0
  287. package/.cursor/skills/openspec-ff-change/SKILL.md +101 -0
  288. package/.cursor/skills/openspec-new-change/SKILL.md +74 -0
  289. package/.cursor/skills/openspec-onboard/SKILL.md +529 -0
  290. package/.cursor/skills/openspec-sync-specs/SKILL.md +138 -0
  291. package/.cursor/skills/openspec-verify-change/SKILL.md +168 -0
  292. package/.cursor/skills/performance-doctor/SKILL.md +627 -0
  293. package/.cursor/skills/project-navigator/SKILL.md +305 -0
  294. package/.cursor/skills/redis-cache/SKILL.md +839 -0
  295. package/.cursor/skills/scheduled-jobs/SKILL.md +633 -0
  296. package/.cursor/skills/security-guard/SKILL.md +748 -0
  297. package/.cursor/skills/sms-mail/SKILL.md +766 -0
  298. package/.cursor/skills/social-login/SKILL.md +668 -0
  299. package/.cursor/skills/store-pc/SKILL.md +366 -0
  300. package/.cursor/skills/task-tracker/SKILL.md +307 -0
  301. package/.cursor/skills/tech-decision/SKILL.md +393 -0
  302. package/.cursor/skills/tenant-management/SKILL.md +603 -0
  303. package/.cursor/skills/test-development/SKILL.md +755 -0
  304. package/.cursor/skills/ui-pc/SKILL.md +438 -0
  305. package/.cursor/skills/utils-toolkit/SKILL.md +615 -0
  306. package/.cursor/skills/websocket-sse/SKILL.md +716 -0
  307. package/.cursor/skills/workflow-engine/SKILL.md +676 -0
  308. package/AGENTS.md +669 -0
  309. package/CLAUDE.md +205 -0
  310. package/README.md +205 -0
  311. package/bin/index.js +179 -0
  312. package/init.sh +178 -0
  313. package/package.json +27 -0
@@ -0,0 +1,174 @@
1
+ ---
2
+ name: collaborating-with-codex
3
+ description: |
4
+ 与 OpenAI Codex CLI 协同开发。将编码任务委托给 Codex 进行原型开发、调试分析和代码审查。
5
+
6
+ 触发场景:
7
+ - 需要算法实现或复杂逻辑分析
8
+ - 需要代码审查和 Bug 分析
9
+ - 需要生成 Unified Diff 补丁
10
+ - 用户明确要求使用 Codex 协作
11
+ - 复杂后端逻辑的原型设计
12
+
13
+ 触发词:Codex、协作、多模型、原型、Diff、算法分析、代码审查、codex协同
14
+
15
+ 前置要求:
16
+ - 已安装 Codex CLI (npm install -g @openai/codex)
17
+ - 已配置 OpenAI API Key
18
+ ---
19
+
20
+ # 与 Codex CLI 协同开发
21
+
22
+ > 通过 Python 桥接脚本调用 Codex CLI,获取算法实现和代码审查建议。
23
+
24
+ ## 快速开始
25
+
26
+ ```bash
27
+ # 相对路径(推荐,在项目根目录执行)
28
+ python .claude/skills/collaborating-with-codex/scripts/codex_bridge.py --cd . --PROMPT "Your task"
29
+ ```
30
+
31
+ **输出**: JSON 格式,包含 `success`、`SESSION_ID`、`agent_messages` 和可选的 `error`。
32
+
33
+ ## 参数说明
34
+
35
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
36
+ |------|------|------|--------|------|
37
+ | `--PROMPT` | str | ✅ | - | 发送给 Codex 的任务指令(使用英语) |
38
+ | `--cd` | Path | ✅ | - | 工作目录根路径 |
39
+ | `--sandbox` | Literal | ❌ | `read-only` | 沙箱策略:`read-only`/`workspace-write`/`danger-full-access` |
40
+ | `--SESSION_ID` | UUID | ❌ | `None` | 会话 ID(继续之前的对话) |
41
+ | `--skip-git-repo-check` | bool | ❌ | `True` | 允许在非 Git 仓库运行 |
42
+ | `--return-all-messages` | bool | ❌ | `False` | 返回完整推理信息 |
43
+ | `--image` | List[Path] | ❌ | `None` | 附加图片文件到提示词 |
44
+ | `--model` | str | ❌ | `None` | 指定模型(仅用户明确要求时使用) |
45
+ | `--yolo` | bool | ❌ | `False` | 跳过所有审批与沙箱限制(危险) |
46
+
47
+ ## 使用模式
48
+
49
+ ### 1. 基础调用(只读模式)
50
+
51
+ ```bash
52
+ python .claude/skills/collaborating-with-codex/scripts/codex_bridge.py \
53
+ --cd . \
54
+ --PROMPT "Analyze the authentication flow in the login module"
55
+ ```
56
+
57
+ ### 2. 多轮会话
58
+
59
+ **始终保存 SESSION_ID** 用于后续对话:
60
+
61
+ ```bash
62
+ # 第一轮:分析代码
63
+ python .claude/skills/collaborating-with-codex/scripts/codex_bridge.py \
64
+ --cd "/project" \
65
+ --PROMPT "Analyze the AdServiceImpl class"
66
+
67
+ # 后续轮次:使用 SESSION_ID 继续
68
+ python .claude/skills/collaborating-with-codex/scripts/codex_bridge.py \
69
+ --cd "/project" \
70
+ --SESSION_ID "uuid-from-previous-response" \
71
+ --PROMPT "Now write unit tests for the add method"
72
+ ```
73
+
74
+ ### 3. 获取 Unified Diff 补丁
75
+
76
+ ```bash
77
+ python .claude/skills/collaborating-with-codex/scripts/codex_bridge.py \
78
+ --cd "/project" \
79
+ --PROMPT "Generate a unified diff to add logging to AdServiceImpl. OUTPUT: Unified Diff Patch ONLY."
80
+ ```
81
+
82
+ ### 4. 调试模式(返回完整信息)
83
+
84
+ ```bash
85
+ python .claude/skills/collaborating-with-codex/scripts/codex_bridge.py \
86
+ --cd "/project" \
87
+ --PROMPT "Debug this error: NullPointerException in line 42" \
88
+ --return-all-messages
89
+ ```
90
+
91
+ ## 返回值结构
92
+
93
+ **成功时:**
94
+ ```json
95
+ {
96
+ "success": true,
97
+ "SESSION_ID": "550e8400-e29b-41d4-a716-446655440000",
98
+ "agent_messages": "模型回复内容..."
99
+ }
100
+ ```
101
+
102
+ **失败时:**
103
+ ```json
104
+ {
105
+ "success": false,
106
+ "error": "错误信息描述"
107
+ }
108
+ ```
109
+
110
+ ## 协作工作流
111
+
112
+ ### 推荐场景
113
+
114
+ | 场景 | 说明 |
115
+ |------|------|
116
+ | **后端逻辑分析** | Codex 擅长复杂算法和后端逻辑 |
117
+ | **代码审查** | 获取代码质量和潜在问题的反馈 |
118
+ | **Debug 分析** | 利用其强大的调试能力定位问题 |
119
+ | **原型设计** | 快速获取实现思路(返回 Diff 而非直接修改) |
120
+
121
+ ### 重要约束
122
+
123
+ 1. **只读模式**: 始终使用 `--sandbox read-only`,禁止 Codex 直接修改文件
124
+ 2. **英语交互**: 与 Codex 交互时使用英语,获得更好效果
125
+ 3. **中文输出强制**: Codex 倾向于输出英文,必须在每次 PROMPT 末尾追加以下约束:
126
+ ```
127
+ IMPORTANT LANGUAGE RULES:
128
+ - All SQL COMMENT values MUST be in Chinese (e.g., COMMENT '用户名' NOT COMMENT 'username')
129
+ - All Java/code comments (Javadoc, inline //, block /* */) MUST be in Chinese
130
+ - All field descriptions, table descriptions MUST be in Chinese
131
+ - Variable names and class names remain in English (camelCase/PascalCase)
132
+ ```
133
+ 4. **Diff 输出**: 在 PROMPT 中明确要求 `OUTPUT: Unified Diff Patch ONLY`
134
+ 5. **重构代码**: 将 Codex 的输出视为"脏原型",由 Claude 重构为生产代码(**特别检查注释和 COMMENT 是否为中文,不是则修正**)
135
+ 6. **后台运行**: 对于长时间任务,使用 `Run in the background`
136
+
137
+ ## 与本项目的集成
138
+
139
+ ### 典型用例:后端模块分析
140
+
141
+ ```bash
142
+ # 分析 Service 层实现
143
+ python .claude/skills/collaborating-with-codex/scripts/codex_bridge.py \
144
+ --cd . \
145
+ --PROMPT "Analyze the three-layer architecture (Controller -> Service -> Mapper) in ruoyi-modules/ruoyi-system. Focus on how buildQueryWrapper is implemented in Service layer."
146
+ ```
147
+
148
+ ### 典型用例:代码审查
149
+
150
+ ```bash
151
+ # 审查新增的业务模块
152
+ python .claude/skills/collaborating-with-codex/scripts/codex_bridge.py \
153
+ --cd "/project" \
154
+ --PROMPT "Review the XxxServiceImpl.java for potential bugs, security issues, and adherence to the project's three-layer architecture pattern (Controller -> Service -> Mapper, NO DAO layer). OUTPUT: Review comments with specific line numbers."
155
+ ```
156
+
157
+ ## 安装前置
158
+
159
+ ```bash
160
+ # 安装 Codex CLI
161
+ npm install -g @openai/codex
162
+
163
+ # 配置 API Key(可选,如果未设置环境变量)
164
+ codex auth login
165
+ ```
166
+
167
+ ## 故障排除
168
+
169
+ | 问题 | 解决方案 |
170
+ |------|---------|
171
+ | `codex: command not found` | 确保已安装并添加到 PATH |
172
+ | `SESSION_ID` 获取失败 | 检查网络连接和 API Key |
173
+ | 输出被截断 | 使用 `--return-all-messages` 获取完整信息 |
174
+ | Windows 路径问题 | 使用正斜杠 `/` 或双反斜杠 `\\` |
@@ -0,0 +1,275 @@
1
+ """
2
+ Codex Bridge Script for Claude Agent Skills.
3
+ Wraps the Codex CLI to provide a JSON-based interface for Claude.
4
+ """
5
+ from __future__ import annotations
6
+
7
+ import json
8
+ import re
9
+ import os
10
+ import sys
11
+ import queue
12
+ import subprocess
13
+ import threading
14
+ import time
15
+ import shutil
16
+ import argparse
17
+ from pathlib import Path
18
+ from typing import Generator, List, Optional
19
+
20
+
21
+ def _get_windows_npm_paths() -> List[Path]:
22
+ """Return candidate directories for npm global installs on Windows."""
23
+ if os.name != "nt":
24
+ return []
25
+ paths: List[Path] = []
26
+ env = os.environ
27
+ if prefix := env.get("NPM_CONFIG_PREFIX") or env.get("npm_config_prefix"):
28
+ paths.append(Path(prefix))
29
+ if appdata := env.get("APPDATA"):
30
+ paths.append(Path(appdata) / "npm")
31
+ if localappdata := env.get("LOCALAPPDATA"):
32
+ paths.append(Path(localappdata) / "npm")
33
+ if programfiles := env.get("ProgramFiles"):
34
+ paths.append(Path(programfiles) / "nodejs")
35
+ return paths
36
+
37
+
38
+ def _augment_path_env(env: dict) -> None:
39
+ """Prepend npm global directories to PATH if missing."""
40
+ if os.name != "nt":
41
+ return
42
+ path_key = next((k for k in env if k.upper() == "PATH"), "PATH")
43
+ path_entries = [p for p in env.get(path_key, "").split(os.pathsep) if p]
44
+ lower_set = {p.lower() for p in path_entries}
45
+ for candidate in _get_windows_npm_paths():
46
+ if candidate.is_dir() and str(candidate).lower() not in lower_set:
47
+ path_entries.insert(0, str(candidate))
48
+ lower_set.add(str(candidate).lower())
49
+ env[path_key] = os.pathsep.join(path_entries)
50
+
51
+
52
+ def _resolve_executable(name: str, env: dict) -> str:
53
+ """Resolve executable path, checking npm directories for .cmd/.bat on Windows."""
54
+ if os.path.isabs(name) or os.sep in name or (os.altsep and os.altsep in name):
55
+ return name
56
+ path_key = next((k for k in env if k.upper() == "PATH"), "PATH")
57
+ if resolved := shutil.which(name, path=env.get(path_key)):
58
+ return resolved
59
+ if os.name == "nt":
60
+ for base in _get_windows_npm_paths():
61
+ for ext in (".cmd", ".bat", ".exe"):
62
+ candidate = base / f"{name}{ext}"
63
+ if candidate.is_file():
64
+ return str(candidate)
65
+ return name
66
+
67
+
68
+ def run_shell_command(cmd: List[str], stdin_data: Optional[str] = None) -> Generator[str, None, None]:
69
+ """Execute a command and stream its output line-by-line.
70
+
71
+ Args:
72
+ cmd: Command and arguments as a list
73
+ stdin_data: Optional string to pass to the process via stdin
74
+ """
75
+ env = os.environ.copy()
76
+ _augment_path_env(env)
77
+
78
+ popen_cmd = cmd.copy()
79
+ exe_path = _resolve_executable(cmd[0], env)
80
+ popen_cmd[0] = exe_path
81
+
82
+ process = subprocess.Popen(
83
+ popen_cmd,
84
+ shell=False,
85
+ stdin=subprocess.PIPE if stdin_data else subprocess.DEVNULL,
86
+ stdout=subprocess.PIPE,
87
+ stderr=subprocess.STDOUT,
88
+ universal_newlines=True,
89
+ encoding='utf-8',
90
+ errors='replace',
91
+ env=env,
92
+ )
93
+
94
+ # Write stdin data if provided, then close stdin
95
+ if stdin_data and process.stdin:
96
+ try:
97
+ process.stdin.write(stdin_data)
98
+ process.stdin.close()
99
+ except (BrokenPipeError, OSError):
100
+ pass
101
+
102
+ output_queue: queue.Queue[Optional[str]] = queue.Queue()
103
+ GRACEFUL_SHUTDOWN_DELAY = 0.3
104
+
105
+ def is_turn_completed(line: str) -> bool:
106
+ try:
107
+ data = json.loads(line)
108
+ return data.get("type") == "turn.completed"
109
+ except (json.JSONDecodeError, AttributeError, TypeError):
110
+ return False
111
+
112
+ def read_output() -> None:
113
+ if process.stdout:
114
+ for line in iter(process.stdout.readline, ""):
115
+ stripped = line.strip()
116
+ output_queue.put(stripped)
117
+ if is_turn_completed(stripped):
118
+ time.sleep(GRACEFUL_SHUTDOWN_DELAY)
119
+ process.terminate()
120
+ break
121
+ process.stdout.close()
122
+ output_queue.put(None)
123
+
124
+ thread = threading.Thread(target=read_output)
125
+ thread.start()
126
+
127
+ while True:
128
+ try:
129
+ line = output_queue.get(timeout=0.5)
130
+ if line is None:
131
+ break
132
+ yield line
133
+ except queue.Empty:
134
+ if process.poll() is not None and not thread.is_alive():
135
+ break
136
+
137
+ try:
138
+ process.wait(timeout=5)
139
+ except subprocess.TimeoutExpired:
140
+ process.kill()
141
+ process.wait()
142
+ thread.join(timeout=5)
143
+
144
+ while not output_queue.empty():
145
+ try:
146
+ line = output_queue.get_nowait()
147
+ if line is not None:
148
+ yield line
149
+ except queue.Empty:
150
+ break
151
+
152
+ def windows_escape(prompt):
153
+ """Windows style string escaping for newlines and special chars in prompt text."""
154
+ result = prompt.replace('\n', '\\n')
155
+ result = result.replace('\r', '\\r')
156
+ result = result.replace('\t', '\\t')
157
+ return result
158
+
159
+
160
+ def configure_windows_stdio() -> None:
161
+ """Configure stdout/stderr to use UTF-8 encoding on Windows."""
162
+ if os.name != "nt":
163
+ return
164
+ for stream in (sys.stdout, sys.stderr):
165
+ reconfigure = getattr(stream, "reconfigure", None)
166
+ if callable(reconfigure):
167
+ try:
168
+ reconfigure(encoding="utf-8")
169
+ except (ValueError, OSError):
170
+ pass
171
+
172
+
173
+ def main():
174
+ configure_windows_stdio()
175
+ parser = argparse.ArgumentParser(description="Codex Bridge")
176
+ parser.add_argument("--PROMPT", required=True, help="Instruction for the task to send to codex.")
177
+ parser.add_argument("--cd", required=True, help="Set the workspace root for codex before executing the task.")
178
+ parser.add_argument("--sandbox", default="read-only", choices=["read-only", "workspace-write", "danger-full-access"], help="Sandbox policy for model-generated commands. Defaults to `read-only`.")
179
+ parser.add_argument("--SESSION_ID", default="", help="Resume the specified session of the codex. Defaults to `None`, start a new session.")
180
+ parser.add_argument("--skip-git-repo-check", action="store_true", default=True, help="Allow codex running outside a Git repository (useful for one-off directories).")
181
+ parser.add_argument("--return-all-messages", action="store_true", help="Return all messages (e.g. reasoning, tool calls, etc.) from the codex session. Set to `False` by default, only the agent's final reply message is returned.")
182
+ parser.add_argument("--image", action="append", default=[], help="Attach one or more image files to the initial prompt. Separate multiple paths with commas or repeat the flag.")
183
+ parser.add_argument("--model", default="", help="The model to use for the codex session. This parameter is strictly prohibited unless explicitly specified by the user.")
184
+ parser.add_argument("--yolo", action="store_true", help="Run every command without approvals or sandboxing. Only use when `sandbox` couldn't be applied.")
185
+ parser.add_argument("--profile", default="", help="Configuration profile name to load from `~/.codex/config.toml`. This parameter is strictly prohibited unless explicitly specified by the user.")
186
+
187
+ args = parser.parse_args()
188
+
189
+ cmd = ["codex", "exec", "--sandbox", args.sandbox, "--cd", args.cd, "--json"]
190
+
191
+ if args.image:
192
+ cmd.extend(["--image", ",".join(args.image)])
193
+
194
+ if args.model:
195
+ cmd.extend(["--model", args.model])
196
+
197
+ if args.profile:
198
+ cmd.extend(["--profile", args.profile])
199
+
200
+ if args.yolo:
201
+ cmd.append("--yolo")
202
+
203
+ if args.skip_git_repo_check:
204
+ cmd.append("--skip-git-repo-check")
205
+
206
+ if args.SESSION_ID:
207
+ cmd.extend(["resume", args.SESSION_ID])
208
+
209
+ PROMPT = args.PROMPT
210
+
211
+ # Use stdin to pass PROMPT (use '-' as placeholder) to avoid shell argument parsing issues
212
+ cmd.append('-')
213
+
214
+ # Execution Logic
215
+ all_messages = []
216
+ agent_messages = ""
217
+ success = True
218
+ err_message = ""
219
+ thread_id = None
220
+
221
+ for line in run_shell_command(cmd, stdin_data=PROMPT):
222
+ try:
223
+ line_dict = json.loads(line.strip())
224
+ all_messages.append(line_dict)
225
+ item = line_dict.get("item", {})
226
+ item_type = item.get("type", "")
227
+ if item_type == "agent_message":
228
+ agent_messages = agent_messages + item.get("text", "")
229
+ if line_dict.get("thread_id") is not None:
230
+ thread_id = line_dict.get("thread_id")
231
+ if "fail" in line_dict.get("type", ""):
232
+ success = False if len(agent_messages) == 0 else success
233
+ err_message += "\n\n[codex error] " + line_dict.get("error", {}).get("message", "")
234
+ if "error" in line_dict.get("type", ""):
235
+ error_msg = line_dict.get("message", "")
236
+ is_reconnecting = bool(re.match(r'^Reconnecting\.\.\.\s+\d+/\d+$', error_msg))
237
+
238
+ if not is_reconnecting:
239
+ success = False if len(agent_messages) == 0 else success
240
+ err_message += "\n\n[codex error] " + error_msg
241
+
242
+ except json.JSONDecodeError:
243
+ err_message += "\n\n[json decode error] " + line
244
+ continue
245
+
246
+ except Exception as error:
247
+ err_message += "\n\n[unexpected error] " + f"Unexpected error: {error}. Line: {line!r}"
248
+ success = False
249
+ break
250
+
251
+ if thread_id is None:
252
+ success = False
253
+ err_message = "Failed to get `SESSION_ID` from the codex session. \n\n" + err_message
254
+
255
+ if len(agent_messages) == 0:
256
+ success = False
257
+ err_message = "Failed to get `agent_messages` from the codex session. \n\n You can try to set `return_all_messages` to `True` to get the full reasoning information. " + err_message
258
+
259
+ if success:
260
+ result = {
261
+ "success": True,
262
+ "SESSION_ID": thread_id,
263
+ "agent_messages": agent_messages,
264
+ }
265
+
266
+ else:
267
+ result = {"success": False, "error": err_message}
268
+
269
+ if args.return_all_messages:
270
+ result["all_messages"] = all_messages
271
+
272
+ print(json.dumps(result, indent=2, ensure_ascii=False))
273
+
274
+ if __name__ == "__main__":
275
+ main()
@@ -0,0 +1,194 @@
1
+ ---
2
+ name: collaborating-with-gemini
3
+ description: |
4
+ 与 Google Gemini CLI 协同开发。将编码任务委托给 Gemini 进行前端原型、UI设计和代码审查。
5
+
6
+ 触发场景:
7
+ - 需要前端/UI/样式原型设计
8
+ - 需要 CSS/React/Vue 组件设计
9
+ - 需要代码审查和 Bug 分析
10
+ - 用户明确要求使用 Gemini 协作
11
+ - 复杂前端逻辑的原型设计
12
+
13
+ 触发词:Gemini、协作、多模型、前端原型、UI设计、CSS、样式、gemini协同
14
+
15
+ 前置要求:
16
+ - 已安装 Gemini CLI (npm install -g @google/gemini-cli)
17
+ - 已配置 Google API Key
18
+
19
+ 注意:Gemini 对后端逻辑理解有缺陷,后端任务优先使用 Codex。
20
+ ---
21
+
22
+ # 与 Gemini CLI 协同开发
23
+
24
+ > 通过 Python 桥接脚本调用 Gemini CLI,获取前端原型和 UI 设计建议。
25
+
26
+ ## 快速开始
27
+
28
+ ```bash
29
+ # 相对路径(推荐,在项目根目录执行)
30
+ python .claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py --cd . --PROMPT "Your task"
31
+ ```
32
+
33
+ **输出**: JSON 格式,包含 `success`、`SESSION_ID`、`agent_messages` 和可选的 `error`。
34
+
35
+ ## 参数说明
36
+
37
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
38
+ |------|------|------|--------|------|
39
+ | `--PROMPT` | str | ✅ | - | 发送给 Gemini 的任务指令(使用英语) |
40
+ | `--cd` | Path | ✅ | - | 工作目录根路径 |
41
+ | `--sandbox` | bool | ❌ | `False` | 是否启用沙箱模式 |
42
+ | `--SESSION_ID` | str | ❌ | `""` | 会话 ID(继续之前的对话) |
43
+ | `--return-all-messages` | bool | ❌ | `False` | 返回完整推理信息 |
44
+ | `--model` | str | ❌ | `None` | 指定模型(仅用户明确要求时使用) |
45
+
46
+ ## 使用模式
47
+
48
+ ### 1. 基础调用
49
+
50
+ ```bash
51
+ python .claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py \
52
+ --cd . \
53
+ --PROMPT "Design a responsive card component for product display"
54
+ ```
55
+
56
+ ### 2. 多轮会话
57
+
58
+ **始终保存 SESSION_ID** 用于后续对话:
59
+
60
+ ```bash
61
+ # 第一轮:设计 UI
62
+ python .claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py \
63
+ --cd "/project" \
64
+ --PROMPT "Design a mobile-first login page with form validation"
65
+
66
+ # 后续轮次:使用 SESSION_ID 继续
67
+ python .claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py \
68
+ --cd "/project" \
69
+ --SESSION_ID "uuid-from-previous-response" \
70
+ --PROMPT "Add dark mode support to the login page design"
71
+ ```
72
+
73
+ ### 3. 获取 Unified Diff 补丁
74
+
75
+ ```bash
76
+ python .claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py \
77
+ --cd "/project" \
78
+ --PROMPT "Generate a unified diff to improve the CSS layout of Home.vue. OUTPUT: Unified Diff Patch ONLY."
79
+ ```
80
+
81
+ ### 4. 调试模式(返回完整信息)
82
+
83
+ ```bash
84
+ python .claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py \
85
+ --cd "/project" \
86
+ --PROMPT "Debug this styling issue: elements overflow on mobile" \
87
+ --return-all-messages
88
+ ```
89
+
90
+ ## 返回值结构
91
+
92
+ **成功时:**
93
+ ```json
94
+ {
95
+ "success": true,
96
+ "SESSION_ID": "550e8400-e29b-41d4-a716-446655440000",
97
+ "agent_messages": "模型回复内容..."
98
+ }
99
+ ```
100
+
101
+ **失败时:**
102
+ ```json
103
+ {
104
+ "success": false,
105
+ "error": "错误信息描述"
106
+ }
107
+ ```
108
+
109
+ ## 协作工作流
110
+
111
+ ### 推荐场景
112
+
113
+ | 场景 | 说明 |
114
+ |------|------|
115
+ | **前端/UI/UX** | Gemini 擅长 CSS、样式和视觉设计 |
116
+ | **组件设计** | React/Vue 组件的原型设计 |
117
+ | **响应式布局** | 移动端适配和布局优化 |
118
+ | **样式审查** | CSS 代码质量和最佳实践 |
119
+
120
+ ### 重要约束
121
+
122
+ 1. **上下文限制**: Gemini 上下文 < 32k tokens,避免过长输入
123
+ 2. **英语交互**: 与 Gemini 交互时使用英语,获得更好效果
124
+ 3. **中文输出强制**: Gemini 倾向于输出英文,必须在每次 PROMPT 末尾追加以下约束:
125
+ ```
126
+ IMPORTANT LANGUAGE RULES:
127
+ - All SQL COMMENT values MUST be in Chinese (e.g., COMMENT '用户名' NOT COMMENT 'username')
128
+ - All Java/code comments (Javadoc, inline //, block /* */) MUST be in Chinese
129
+ - All field descriptions, table descriptions MUST be in Chinese
130
+ - Variable names and class names remain in English (camelCase/PascalCase)
131
+ ```
132
+ 4. **Diff 输出**: 在 PROMPT 中明确要求 `OUTPUT: Unified Diff Patch ONLY`
133
+ 5. **后端逻辑**: Gemini 对后端逻辑理解有缺陷,后端任务优先使用 Codex
134
+ 6. **重构代码**: 将 Gemini 的输出视为"脏原型",由 Claude 重构为生产代码(**特别检查注释和 COMMENT 是否为中文,不是则修正**)
135
+ 7. **后台运行**: 对于长时间任务,使用 `Run in the background`
136
+
137
+ ## 与本项目的集成
138
+
139
+ ### 典型用例:后端代码审查
140
+
141
+ ```bash
142
+ # 审查后端 Controller 代码
143
+ python .claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py \
144
+ --cd . \
145
+ --PROMPT "Review the RESTful API design in ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/. Focus on path conventions (/list, /{id}) and proper use of @SaCheckPermission."
146
+ ```
147
+
148
+ ### 典型用例:Service 层代码审查
149
+
150
+ ```bash
151
+ # 审查 Service 实现
152
+ python .claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py \
153
+ --cd "/project" \
154
+ --PROMPT "Review the XxxServiceImpl.java for buildQueryWrapper implementation, MapstructUtils usage, and adherence to three-layer architecture (no DAO layer). OUTPUT: Review comments."
155
+ ```
156
+
157
+ ### 典型用例:Entity 设计审查
158
+
159
+ ```bash
160
+ # 审查 Entity 设计
161
+ python .claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py \
162
+ --cd "/project" \
163
+ --PROMPT "Review the Entity classes in ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/ for proper TenantEntity inheritance, @TableLogic usage, and field naming conventions."
164
+ ```
165
+
166
+ ## 安装前置
167
+
168
+ ```bash
169
+ # 安装 Gemini CLI
170
+ npm install -g @google/gemini-cli
171
+
172
+ # 配置 API Key
173
+ gemini auth login
174
+ ```
175
+
176
+ ## 故障排除
177
+
178
+ | 问题 | 解决方案 |
179
+ |------|---------|
180
+ | `gemini: command not found` | 确保已安装并添加到 PATH |
181
+ | `SESSION_ID` 获取失败 | 检查网络连接和 API Key |
182
+ | 输出被截断 | 使用 `--return-all-messages` 获取完整信息 |
183
+ | 上下文过长 | 减少输入内容,分批处理 |
184
+ | Windows 路径问题 | 使用正斜杠 `/` 或双反斜杠 `\\` |
185
+
186
+ ## Gemini vs Codex 选择指南
187
+
188
+ | 任务类型 | 推荐模型 | 原因 |
189
+ |---------|---------|------|
190
+ | 前端 UI/CSS | Gemini | 视觉设计能力强 |
191
+ | 后端逻辑 | Codex | 算法和逻辑分析强 |
192
+ | 组件样式 | Gemini | CSS 和布局专长 |
193
+ | API 设计 | Codex | 接口设计和架构 |
194
+ | 代码审查 | 两者皆可 | 双模型交叉验证更好 |