@su-record/vibe 2.11.0 → 2.12.2

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 (265) hide show
  1. package/README.en.md +23 -28
  2. package/README.md +10 -9
  3. package/dist/cli/auth.d.ts +2 -2
  4. package/dist/cli/auth.js +12 -12
  5. package/dist/cli/auth.js.map +1 -1
  6. package/dist/cli/commands/codex-proxy.d.ts +1 -1
  7. package/dist/cli/commands/codex-proxy.js +11 -11
  8. package/dist/cli/commands/codex-proxy.js.map +1 -1
  9. package/dist/cli/commands/config.d.ts +1 -1
  10. package/dist/cli/commands/config.d.ts.map +1 -1
  11. package/dist/cli/commands/config.js +22 -21
  12. package/dist/cli/commands/config.js.map +1 -1
  13. package/dist/cli/commands/info.d.ts.map +1 -1
  14. package/dist/cli/commands/info.js +9 -7
  15. package/dist/cli/commands/info.js.map +1 -1
  16. package/dist/cli/commands/info.test.d.ts +2 -0
  17. package/dist/cli/commands/info.test.d.ts.map +1 -0
  18. package/dist/cli/commands/info.test.js +41 -0
  19. package/dist/cli/commands/info.test.js.map +1 -0
  20. package/dist/cli/commands/init.d.ts +2 -2
  21. package/dist/cli/commands/init.d.ts.map +1 -1
  22. package/dist/cli/commands/init.js +20 -16
  23. package/dist/cli/commands/init.js.map +1 -1
  24. package/dist/cli/commands/setup.d.ts +1 -1
  25. package/dist/cli/commands/setup.js +24 -24
  26. package/dist/cli/commands/setup.js.map +1 -1
  27. package/dist/cli/commands/skills.d.ts.map +1 -1
  28. package/dist/cli/commands/skills.js +8 -7
  29. package/dist/cli/commands/skills.js.map +1 -1
  30. package/dist/cli/commands/update.d.ts.map +1 -1
  31. package/dist/cli/commands/update.js +28 -16
  32. package/dist/cli/commands/update.js.map +1 -1
  33. package/dist/cli/commands/upgrade.d.ts +7 -0
  34. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  35. package/dist/cli/commands/upgrade.js +30 -3
  36. package/dist/cli/commands/upgrade.js.map +1 -1
  37. package/dist/cli/commands/upgrade.test.d.ts +2 -0
  38. package/dist/cli/commands/upgrade.test.d.ts.map +1 -0
  39. package/dist/cli/commands/upgrade.test.js +15 -0
  40. package/dist/cli/commands/upgrade.test.js.map +1 -0
  41. package/dist/cli/index.d.ts +1 -1
  42. package/dist/cli/index.js +23 -24
  43. package/dist/cli/index.js.map +1 -1
  44. package/dist/cli/llm/antigravity-commands.d.ts +25 -0
  45. package/dist/cli/llm/antigravity-commands.d.ts.map +1 -0
  46. package/dist/cli/llm/antigravity-commands.js +142 -0
  47. package/dist/cli/llm/antigravity-commands.js.map +1 -0
  48. package/dist/cli/llm/claude-commands.d.ts.map +1 -1
  49. package/dist/cli/llm/claude-commands.js +3 -1
  50. package/dist/cli/llm/claude-commands.js.map +1 -1
  51. package/dist/cli/llm/config.js +7 -7
  52. package/dist/cli/llm/config.js.map +1 -1
  53. package/dist/cli/llm/gemini-commands.d.ts.map +1 -1
  54. package/dist/cli/llm/gemini-commands.js +7 -4
  55. package/dist/cli/llm/gemini-commands.js.map +1 -1
  56. package/dist/cli/llm/gpt-commands.d.ts.map +1 -1
  57. package/dist/cli/llm/gpt-commands.js +3 -3
  58. package/dist/cli/llm/gpt-commands.js.map +1 -1
  59. package/dist/cli/llm/help.js +4 -4
  60. package/dist/cli/llm/index.d.ts +1 -1
  61. package/dist/cli/llm/index.d.ts.map +1 -1
  62. package/dist/cli/llm/index.js +1 -1
  63. package/dist/cli/llm/index.js.map +1 -1
  64. package/dist/cli/llm.d.ts +2 -2
  65. package/dist/cli/llm.js +2 -2
  66. package/dist/cli/postinstall/constants.js +6 -6
  67. package/dist/cli/postinstall/constants.js.map +1 -1
  68. package/dist/cli/postinstall/inline-skills.js +5 -5
  69. package/dist/cli/postinstall/inline-skills.js.map +1 -1
  70. package/dist/cli/postinstall/main.d.ts.map +1 -1
  71. package/dist/cli/postinstall/main.js +14 -9
  72. package/dist/cli/postinstall/main.js.map +1 -1
  73. package/dist/cli/setup/CodexHooks.d.ts +20 -0
  74. package/dist/cli/setup/CodexHooks.d.ts.map +1 -0
  75. package/dist/cli/setup/CodexHooks.js +50 -0
  76. package/dist/cli/setup/CodexHooks.js.map +1 -0
  77. package/dist/cli/setup/CodexHooks.test.d.ts +2 -0
  78. package/dist/cli/setup/CodexHooks.test.d.ts.map +1 -0
  79. package/dist/cli/setup/CodexHooks.test.js +23 -0
  80. package/dist/cli/setup/CodexHooks.test.js.map +1 -0
  81. package/dist/cli/setup/LegacyMigration.js +2 -2
  82. package/dist/cli/setup/ProjectSetup.d.ts +4 -4
  83. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  84. package/dist/cli/setup/ProjectSetup.js +21 -19
  85. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  86. package/dist/cli/setup/index.d.ts +1 -0
  87. package/dist/cli/setup/index.d.ts.map +1 -1
  88. package/dist/cli/setup/index.js +1 -0
  89. package/dist/cli/setup/index.js.map +1 -1
  90. package/dist/cli/setup.d.ts +2 -1
  91. package/dist/cli/setup.d.ts.map +1 -1
  92. package/dist/cli/setup.js +2 -1
  93. package/dist/cli/setup.js.map +1 -1
  94. package/dist/cli/types.d.ts +7 -9
  95. package/dist/cli/types.d.ts.map +1 -1
  96. package/dist/cli/utils/cli-detector.d.ts +5 -5
  97. package/dist/cli/utils/cli-detector.d.ts.map +1 -1
  98. package/dist/cli/utils/cli-detector.js +18 -14
  99. package/dist/cli/utils/cli-detector.js.map +1 -1
  100. package/dist/cli/utils/cli-detector.test.d.ts +2 -0
  101. package/dist/cli/utils/cli-detector.test.d.ts.map +1 -0
  102. package/dist/cli/utils/cli-detector.test.js +51 -0
  103. package/dist/cli/utils/cli-detector.test.js.map +1 -0
  104. package/dist/infra/lib/ReviewRace.d.ts +4 -4
  105. package/dist/infra/lib/ReviewRace.d.ts.map +1 -1
  106. package/dist/infra/lib/ReviewRace.js +16 -16
  107. package/dist/infra/lib/ReviewRace.js.map +1 -1
  108. package/dist/infra/lib/SkillRepository.js +7 -7
  109. package/dist/infra/lib/antigravity/auth.d.ts +18 -0
  110. package/dist/infra/lib/antigravity/auth.d.ts.map +1 -0
  111. package/dist/infra/lib/antigravity/auth.js +32 -0
  112. package/dist/infra/lib/antigravity/auth.js.map +1 -0
  113. package/dist/infra/lib/antigravity/capabilities.d.ts +28 -0
  114. package/dist/infra/lib/antigravity/capabilities.d.ts.map +1 -0
  115. package/dist/infra/lib/antigravity/capabilities.js +178 -0
  116. package/dist/infra/lib/antigravity/capabilities.js.map +1 -0
  117. package/dist/infra/lib/antigravity/chat.d.ts +34 -0
  118. package/dist/infra/lib/antigravity/chat.d.ts.map +1 -0
  119. package/dist/infra/lib/antigravity/chat.js +160 -0
  120. package/dist/infra/lib/antigravity/chat.js.map +1 -0
  121. package/dist/infra/lib/antigravity/completion.d.ts +12 -0
  122. package/dist/infra/lib/antigravity/completion.d.ts.map +1 -0
  123. package/dist/infra/lib/antigravity/completion.js +13 -0
  124. package/dist/infra/lib/antigravity/completion.js.map +1 -0
  125. package/dist/infra/lib/antigravity/constants.d.ts +8 -0
  126. package/dist/infra/lib/antigravity/constants.d.ts.map +1 -0
  127. package/dist/infra/lib/antigravity/constants.js +11 -0
  128. package/dist/infra/lib/antigravity/constants.js.map +1 -0
  129. package/dist/infra/lib/antigravity/index.d.ts +13 -0
  130. package/dist/infra/lib/antigravity/index.d.ts.map +1 -0
  131. package/dist/infra/lib/antigravity/index.js +12 -0
  132. package/dist/infra/lib/antigravity/index.js.map +1 -0
  133. package/dist/infra/lib/antigravity/models.d.ts +11 -0
  134. package/dist/infra/lib/antigravity/models.d.ts.map +1 -0
  135. package/dist/infra/lib/antigravity/models.js +38 -0
  136. package/dist/infra/lib/antigravity/models.js.map +1 -0
  137. package/dist/infra/lib/antigravity/orchestration.d.ts +33 -0
  138. package/dist/infra/lib/antigravity/orchestration.d.ts.map +1 -0
  139. package/dist/infra/lib/antigravity/orchestration.js +62 -0
  140. package/dist/infra/lib/antigravity/orchestration.js.map +1 -0
  141. package/dist/infra/lib/antigravity/types.d.ts +115 -0
  142. package/dist/infra/lib/antigravity/types.d.ts.map +1 -0
  143. package/dist/infra/lib/antigravity/types.js +5 -0
  144. package/dist/infra/lib/antigravity/types.js.map +1 -0
  145. package/dist/infra/lib/codex-proxy.d.ts +1 -1
  146. package/dist/infra/lib/codex-proxy.js +9 -9
  147. package/dist/infra/lib/codex-proxy.js.map +1 -1
  148. package/dist/infra/lib/config/GlobalConfigManager.d.ts +6 -3
  149. package/dist/infra/lib/config/GlobalConfigManager.d.ts.map +1 -1
  150. package/dist/infra/lib/config/GlobalConfigManager.js +47 -37
  151. package/dist/infra/lib/config/GlobalConfigManager.js.map +1 -1
  152. package/dist/infra/lib/config/GlobalConfigManager.test.d.ts +2 -0
  153. package/dist/infra/lib/config/GlobalConfigManager.test.d.ts.map +1 -0
  154. package/dist/infra/lib/config/GlobalConfigManager.test.js +9 -0
  155. package/dist/infra/lib/config/GlobalConfigManager.test.js.map +1 -0
  156. package/dist/infra/lib/constants.js +1 -1
  157. package/dist/infra/lib/constants.js.map +1 -1
  158. package/dist/infra/lib/gemini/auth.d.ts +3 -3
  159. package/dist/infra/lib/gemini/auth.js +9 -9
  160. package/dist/infra/lib/gemini/auth.js.map +1 -1
  161. package/dist/infra/lib/llm/auth/AuthProfileManager.d.ts +3 -3
  162. package/dist/infra/lib/llm/auth/AuthProfileManager.d.ts.map +1 -1
  163. package/dist/infra/lib/llm/auth/AuthProfileManager.js.map +1 -1
  164. package/dist/infra/lib/llm/auth/AuthProfileManager.test.js +8 -8
  165. package/dist/infra/lib/llm/auth/AuthProfileManager.test.js.map +1 -1
  166. package/dist/infra/lib/llm/auth/ConfigManager.js +2 -2
  167. package/dist/infra/lib/llm/auth/ConfigManager.js.map +1 -1
  168. package/dist/infra/lib/llm/auth/TokenRefresher.d.ts +1 -1
  169. package/dist/infra/lib/llm/auth/TokenRefresher.js +1 -1
  170. package/dist/infra/lib/llm/auth/index.js +1 -1
  171. package/dist/infra/lib/llm/auth/index.js.map +1 -1
  172. package/dist/infra/lib/llm/index.d.ts +1 -1
  173. package/dist/infra/lib/llm/index.js +1 -1
  174. package/dist/infra/lib/llm/types.d.ts +3 -3
  175. package/dist/infra/lib/llm/types.d.ts.map +1 -1
  176. package/dist/infra/lib/llm/types.js +1 -1
  177. package/dist/infra/lib/llm/utils/stream.js +1 -1
  178. package/dist/infra/lib/llm/utils/stream.js.map +1 -1
  179. package/dist/infra/lib/llm-availability.d.ts +5 -5
  180. package/dist/infra/lib/llm-availability.d.ts.map +1 -1
  181. package/dist/infra/lib/llm-availability.js +13 -10
  182. package/dist/infra/lib/llm-availability.js.map +1 -1
  183. package/dist/infra/lib/llm-availability.test.d.ts +2 -0
  184. package/dist/infra/lib/llm-availability.test.d.ts.map +1 -0
  185. package/dist/infra/lib/llm-availability.test.js +36 -0
  186. package/dist/infra/lib/llm-availability.test.js.map +1 -0
  187. package/dist/infra/lib/ui-ux/UiUxWorkflow.d.ts.map +1 -1
  188. package/dist/infra/lib/ui-ux/UiUxWorkflow.js +23 -5
  189. package/dist/infra/lib/ui-ux/UiUxWorkflow.js.map +1 -1
  190. package/dist/infra/orchestrator/AgentExecutor.d.ts.map +1 -1
  191. package/dist/infra/orchestrator/AgentExecutor.js +30 -1
  192. package/dist/infra/orchestrator/AgentExecutor.js.map +1 -1
  193. package/dist/infra/orchestrator/AgentManifestCache.js +1 -1
  194. package/dist/infra/orchestrator/AgentManifestCache.js.map +1 -1
  195. package/dist/infra/orchestrator/BackgroundManager.js +2 -2
  196. package/dist/infra/orchestrator/BackgroundManager.js.map +1 -1
  197. package/dist/infra/orchestrator/CodexAgentRuntime.d.ts +12 -0
  198. package/dist/infra/orchestrator/CodexAgentRuntime.d.ts.map +1 -0
  199. package/dist/infra/orchestrator/CodexAgentRuntime.js +94 -0
  200. package/dist/infra/orchestrator/CodexAgentRuntime.js.map +1 -0
  201. package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts +2 -0
  202. package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts.map +1 -0
  203. package/dist/infra/orchestrator/CodexAgentRuntime.test.js +37 -0
  204. package/dist/infra/orchestrator/CodexAgentRuntime.test.js.map +1 -0
  205. package/dist/infra/orchestrator/LLMCluster.d.ts +11 -11
  206. package/dist/infra/orchestrator/LLMCluster.d.ts.map +1 -1
  207. package/dist/infra/orchestrator/LLMCluster.js +22 -22
  208. package/dist/infra/orchestrator/LLMCluster.js.map +1 -1
  209. package/dist/infra/orchestrator/MultiLlmResearch.d.ts +3 -3
  210. package/dist/infra/orchestrator/MultiLlmResearch.d.ts.map +1 -1
  211. package/dist/infra/orchestrator/MultiLlmResearch.js +17 -17
  212. package/dist/infra/orchestrator/MultiLlmResearch.js.map +1 -1
  213. package/dist/infra/orchestrator/SmartRouter.d.ts +2 -2
  214. package/dist/infra/orchestrator/SmartRouter.js +7 -7
  215. package/dist/infra/orchestrator/SmartRouter.js.map +1 -1
  216. package/dist/infra/orchestrator/SmartRouter.test.js +74 -74
  217. package/dist/infra/orchestrator/SmartRouter.test.js.map +1 -1
  218. package/dist/infra/orchestrator/agentDiscovery.d.ts +1 -1
  219. package/dist/infra/orchestrator/agentDiscovery.js +4 -4
  220. package/dist/infra/orchestrator/agentDiscovery.js.map +1 -1
  221. package/dist/infra/orchestrator/index.d.ts +17 -17
  222. package/dist/infra/orchestrator/index.d.ts.map +1 -1
  223. package/dist/infra/orchestrator/index.js +30 -30
  224. package/dist/infra/orchestrator/index.js.map +1 -1
  225. package/dist/infra/orchestrator/orchestrator.d.ts +4 -4
  226. package/dist/infra/orchestrator/orchestrator.d.ts.map +1 -1
  227. package/dist/infra/orchestrator/orchestrator.js +5 -5
  228. package/dist/infra/orchestrator/orchestrator.js.map +1 -1
  229. package/dist/infra/orchestrator/parallelResearch.d.ts.map +1 -1
  230. package/dist/infra/orchestrator/parallelResearch.js +11 -0
  231. package/dist/infra/orchestrator/parallelResearch.js.map +1 -1
  232. package/dist/infra/orchestrator/types.d.ts +7 -8
  233. package/dist/infra/orchestrator/types.d.ts.map +1 -1
  234. package/dist/infra/orchestrator/types.js +17 -18
  235. package/dist/infra/orchestrator/types.js.map +1 -1
  236. package/dist/tools/spec/specGenerator.d.ts +1 -1
  237. package/dist/tools/spec/specGenerator.js +1 -1
  238. package/hooks/antigravity-hooks.json +73 -0
  239. package/hooks/scripts/__tests__/codex-hook-adapter.test.js +31 -0
  240. package/hooks/scripts/__tests__/hook-payload.test.js +29 -0
  241. package/hooks/scripts/__tests__/llm-orchestrate-antigravity.test.js +63 -0
  242. package/hooks/scripts/codex-hook-adapter.js +124 -0
  243. package/hooks/scripts/codex-review-gate.js +7 -3
  244. package/hooks/scripts/devlog-gen.js +1 -1
  245. package/hooks/scripts/hook-payload.js +64 -0
  246. package/hooks/scripts/lib/dispatcher.js +20 -0
  247. package/hooks/scripts/llm-orchestrate.js +40 -44
  248. package/hooks/scripts/prompt-dispatcher.js +9 -9
  249. package/hooks/scripts/stop-notify.js +1 -1
  250. package/hooks/scripts/utils.js +1 -1
  251. package/package.json +1 -1
  252. package/skills/brand-assets/SKILL.md +11 -11
  253. package/skills/docs/SKILL.md +10 -5
  254. package/skills/event-comms/SKILL.md +1 -1
  255. package/skills/event-ops/SKILL.md +4 -4
  256. package/skills/spec/SKILL.md +29 -29
  257. package/skills/spec-review/SKILL.md +23 -23
  258. package/skills/tool-fallback/SKILL.md +2 -2
  259. package/skills/tool-fallback/rubrics/fallback-chain.md +2 -2
  260. package/skills/vibe.event/SKILL.md +1 -1
  261. package/skills/vibe.review/SKILL.md +13 -13
  262. package/skills/vibe.run/SKILL.md +30 -30
  263. package/skills/vibe.spec/SKILL.md +4 -4
  264. package/skills/vibe.utils/SKILL.md +17 -17
  265. package/hooks/gemini-hooks.json +0 -73
@@ -1,28 +1,28 @@
1
1
  /**
2
- * UserPromptSubmit Hook - LLM 오케스트레이션 (GPT/Gemini/Claude)
2
+ * UserPromptSubmit Hook - LLM 오케스트레이션 (GPT/Antigravity/Claude)
3
3
  *
4
4
  * Usage:
5
5
  * node llm-orchestrate.js <provider> <mode> "prompt"
6
6
  * node llm-orchestrate.js <provider> <mode> "systemPrompt" "prompt"
7
7
  *
8
- * provider: gpt | gemini | claude
8
+ * provider: gpt | antigravity | claude
9
9
  * mode: orchestrate | orchestrate-json | image | analyze-image
10
10
  *
11
11
  * Image Mode:
12
- * node llm-orchestrate.js gemini image "prompt" --output "./image.png"
13
- * node llm-orchestrate.js gemini image "prompt" --output "./image.png" --size "1920x1080"
12
+ * node llm-orchestrate.js antigravity image "prompt" --output "./image.png"
13
+ * node llm-orchestrate.js antigravity image "prompt" --output "./image.png" --size "1920x1080"
14
14
  *
15
15
  * Features:
16
- * - CLI-based: GPT → codex exec, Geminigemini -p, Claude → claude --print
16
+ * - CLI-based: GPT → codex exec, Antigravityagy -p, Claude → claude --print
17
17
  * - Exponential backoff retry (3 attempts)
18
- * - Auto fallback: gpt ↔ gemini
18
+ * - Auto fallback: gpt ↔ antigravity
19
19
  * - Overload/rate-limit detection
20
- * - Image generation (Gemini API, Gemini Flash Image model)
21
- * - Image analysis (Gemini API multimodal)
20
+ * - Image generation (Google image model)
21
+ * - Image analysis (Google multimodal model)
22
22
  *
23
23
  * Analyze-Image Mode:
24
- * node llm-orchestrate.js gemini analyze-image "./image.png" "Analyze this UI"
25
- * node llm-orchestrate.js gemini analyze-image "./image.png" "prompt" --system "system prompt"
24
+ * node llm-orchestrate.js antigravity analyze-image "./image.png" "Analyze this UI"
25
+ * node llm-orchestrate.js antigravity analyze-image "./image.png" "prompt" --system "system prompt"
26
26
  *
27
27
  * Input: JSON from stdin with { prompt: string } (when no CLI args)
28
28
  */
@@ -36,7 +36,7 @@ import { execSync, spawn } from 'child_process';
36
36
  const LIB_URL = getLibBaseUrl();
37
37
  const DEFAULT_SYSTEM_PROMPT = 'You are a helpful assistant.';
38
38
 
39
- const provider = process.argv[2] || 'gemini';
39
+ const provider = process.argv[2] || 'antigravity';
40
40
  const mode = process.argv[3] || 'orchestrate';
41
41
 
42
42
  // WHY 3 retries: Enough to ride out brief 503/overload blips (typically 1-2
@@ -102,7 +102,7 @@ function resolveModel(providerName, config) {
102
102
  if (providerName === 'gpt-spark') return config.models?.gptCodexSpark || 'gpt-5.3-codex-spark';
103
103
  if (providerName === 'gpt-codex') return config.models?.gptCodex || 'gpt-5.3-codex';
104
104
  if (providerName === 'gpt') return config.models?.gpt || 'gpt-5.5';
105
- if (providerName === 'gemini') return config.models?.gemini || 'gemini-3.1-pro-preview';
105
+ if (providerName === 'antigravity') return config.models?.antigravity || 'antigravity';
106
106
  if (providerName === 'claude') return 'claude';
107
107
  return providerName;
108
108
  }
@@ -160,7 +160,7 @@ function sleep(ms) {
160
160
  }
161
161
 
162
162
  // ============================================
163
- // Image Generation (delegates to gemini-api)
163
+ // Image Generation (delegates to Google image API)
164
164
  // ============================================
165
165
 
166
166
  function parseImageArgs(args) {
@@ -180,7 +180,7 @@ function parseImageArgs(args) {
180
180
  }
181
181
 
182
182
  // ============================================
183
- // Image Analysis (delegates to gemini-api)
183
+ // Image Analysis (delegates to Google image API)
184
184
  // ============================================
185
185
 
186
186
  function parseAnalyzeImageArgs(args) {
@@ -267,19 +267,16 @@ function callCodexCli(prompt, sysPrompt, jsonMode, model, timeoutMs) {
267
267
  });
268
268
  }
269
269
 
270
- function callGeminiCli(prompt, sysPrompt, jsonMode, model, timeoutMs) {
270
+ function callAntigravityCli(prompt, sysPrompt, jsonMode, timeoutMs) {
271
271
  const fullPrompt = buildCliPrompt(prompt, sysPrompt, jsonMode);
272
- // -p headless 모드, stdin으로 프롬프트 전달 (stdin is appended to -p value)
273
- const args = ['-p', '.', '-o', 'text'];
274
- if (model) args.push('-m', model);
272
+ const args = ['-p', fullPrompt];
275
273
  const effectiveTimeout = timeoutMs || CLI_TIMEOUT_MS;
276
274
 
277
275
  return new Promise((resolve, reject) => {
278
- const proc = spawnCli('gemini', args, {
279
- stdio: ['pipe', 'pipe', 'pipe'],
276
+ const proc = spawnCli('agy', args, {
277
+ stdio: ['ignore', 'pipe', 'pipe'],
280
278
  timeout: effectiveTimeout,
281
279
  });
282
- proc.stdin.end(fullPrompt);
283
280
 
284
281
  let stdout = '';
285
282
  let stderr = '';
@@ -290,12 +287,12 @@ function callGeminiCli(prompt, sysPrompt, jsonMode, model, timeoutMs) {
290
287
  if (code === 0 && stdout.trim()) {
291
288
  resolve(stdout.trim());
292
289
  } else {
293
- reject(new Error(`gemini cli failed (code ${code}): ${(stderr || stdout).slice(0, 500)}`));
290
+ reject(new Error(`antigravity cli failed (code ${code}): ${(stderr || stdout).slice(0, 500)}`));
294
291
  }
295
292
  });
296
293
 
297
294
  proc.on('error', (err) => {
298
- reject(new Error(`gemini cli spawn error: ${err.message}`));
295
+ reject(new Error(`antigravity cli spawn error: ${err.message}`));
299
296
  });
300
297
  });
301
298
  }
@@ -352,9 +349,8 @@ async function callProvider(providerName, prompt, sysPrompt, jsonMode, timeoutMs
352
349
  return await callCodexCli(prompt, sysPrompt, jsonMode, model, timeoutMs);
353
350
  }
354
351
 
355
- if (providerName === 'gemini') {
356
- const model = vibeConfig.models?.gemini || process.env.GEMINI_MODEL || 'gemini-3.1-pro-preview';
357
- return await callGeminiCli(prompt, sysPrompt, jsonMode, model, timeoutMs);
352
+ if (providerName === 'antigravity') {
353
+ return await callAntigravityCli(prompt, sysPrompt, jsonMode, timeoutMs);
358
354
  }
359
355
 
360
356
  if (providerName === 'claude') {
@@ -398,8 +394,8 @@ async function callWithRetry(providerName, prompt, sysPrompt, jsonMode, timeoutM
398
394
  async function main() {
399
395
  // Image mode handling
400
396
  if (mode === 'image') {
401
- if (provider !== 'gemini') {
402
- console.log('[IMAGE] Error: Image generation only supports gemini provider');
397
+ if (provider !== 'antigravity') {
398
+ console.log('[IMAGE] Error: Image generation only supports antigravity provider');
403
399
  return;
404
400
  }
405
401
 
@@ -415,7 +411,7 @@ async function main() {
415
411
  fs.mkdirSync(outputDir, { recursive: true });
416
412
  }
417
413
 
418
- const modelLabel = imageArgs.model === 'nano-banana-pro' ? 'Gemini Pro Image' : 'Gemini Flash Image';
414
+ const modelLabel = imageArgs.model === 'nano-banana-pro' ? 'Google Pro Image' : 'Google Flash Image';
419
415
  console.error(`[IMAGE] Generating with ${modelLabel}...`);
420
416
  console.error(` Prompt: ${imageArgs.prompt}`);
421
417
  console.error(` Size: ${imageArgs.size}`);
@@ -423,8 +419,8 @@ async function main() {
423
419
  console.error(` Output: ${imageArgs.output}`);
424
420
 
425
421
  try {
426
- const geminiApi = await import(`${LIB_URL}gemini-api.js`);
427
- const image = await geminiApi.generateImage(imageArgs.prompt, { size: imageArgs.size, model: imageArgs.model });
422
+ const googleApi = await import(`${LIB_URL}gemini-api.js`);
423
+ const image = await googleApi.generateImage(imageArgs.prompt, { size: imageArgs.size, model: imageArgs.model });
428
424
  fs.writeFileSync(imageArgs.output, image.data);
429
425
  const stats = fs.statSync(imageArgs.output);
430
426
  const sizeKB = (stats.size / 1024).toFixed(1);
@@ -448,8 +444,8 @@ async function main() {
448
444
 
449
445
  // Analyze-image mode handling
450
446
  if (mode === 'analyze-image') {
451
- if (provider !== 'gemini') {
452
- console.log('[ANALYZE-IMAGE] Error: Image analysis only supports gemini provider');
447
+ if (provider !== 'antigravity') {
448
+ console.log('[ANALYZE-IMAGE] Error: Image analysis only supports antigravity provider');
453
449
  return;
454
450
  }
455
451
 
@@ -473,17 +469,17 @@ async function main() {
473
469
  return;
474
470
  }
475
471
 
476
- console.error(`[ANALYZE-IMAGE] Analyzing image with Gemini...`);
472
+ console.error(`[ANALYZE-IMAGE] Analyzing image with Google multimodal model...`);
477
473
  console.error(` Image: ${absolutePath}`);
478
474
  console.error(` Prompt: ${analyzeArgs.prompt}`);
479
475
 
480
476
  try {
481
- const geminiApi = await import(`${LIB_URL}gemini-api.js`);
477
+ const googleApi = await import(`${LIB_URL}gemini-api.js`);
482
478
  const options = {};
483
479
  if (analyzeArgs.systemPrompt) {
484
480
  options.systemPrompt = analyzeArgs.systemPrompt;
485
481
  }
486
- const analysis = await geminiApi.analyzeImage(absolutePath, analyzeArgs.prompt, options);
482
+ const analysis = await googleApi.analyzeImage(absolutePath, analyzeArgs.prompt, options);
487
483
 
488
484
  console.log(JSON.stringify({
489
485
  success: true,
@@ -564,7 +560,7 @@ async function main() {
564
560
  const prefixPatterns = {
565
561
  gpt: /^(gpt[-.\s]|지피티-|vibe-gpt-)\s*/i,
566
562
  'gpt-codex': /^(gpt[-.\s]|지피티-|vibe-gpt-)\s*/i,
567
- gemini: /^(gemini[-.\s]|제미나이-|vibe-gemini-)\s*/i,
563
+ antigravity: /^(antigravity[-.\s]|agy[-.\s]|안티그래비티-|vibe-antigravity-)\s*/i,
568
564
  };
569
565
  const cleanPrompt = prompt.replace(prefixPatterns[provider] || /^/, '').trim();
570
566
  const jsonMode = mode === 'orchestrate-json';
@@ -585,8 +581,8 @@ async function main() {
585
581
 
586
582
  // Provider chain: primary → cross fallback
587
583
  // 프록시 모드 (주관=GPT): 보조로 Claude CLI 사용
588
- // 직접 모드 (주관=Claude): 보조로 GPT/Gemini 사용
589
- const providerLabels = { gpt: 'GPT', 'gpt-codex': 'GPT Codex', gemini: 'Gemini', claude: 'Claude' };
584
+ // 직접 모드 (주관=Claude): 보조로 GPT/Antigravity 사용
585
+ const providerLabels = { gpt: 'GPT', 'gpt-codex': 'GPT Codex', antigravity: 'Antigravity', claude: 'Claude' };
590
586
  const isGpt = provider === 'gpt' || provider === 'gpt-codex' || provider === 'gpt-spark';
591
587
  const isClaude = provider === 'claude';
592
588
  const claudeSecondary = useClaudeAsSecondary();
@@ -594,13 +590,13 @@ async function main() {
594
590
  let providerChain;
595
591
  if (isClaude) {
596
592
  // 명시적 claude 호출
597
- providerChain = ['claude', 'gemini'];
593
+ providerChain = ['claude', 'antigravity'];
598
594
  } else if (isGpt) {
599
- // GPT 주관 → claude fallback (vibe-codex), gemini fallback (직접 모드)
600
- providerChain = claudeSecondary ? [provider, 'claude'] : [provider, 'gemini'];
595
+ // GPT 주관 → claude fallback (vibe-codex), antigravity fallback (직접 모드)
596
+ providerChain = claudeSecondary ? [provider, 'claude'] : [provider, 'antigravity'];
601
597
  } else {
602
- // gemini 주관 → claude fallback (vibe-codex), gpt fallback (직접 모드)
603
- providerChain = claudeSecondary ? ['gemini', 'claude'] : ['gemini', 'gpt'];
598
+ // Antigravity 주관 → claude fallback (vibe-codex), gpt fallback (직접 모드)
599
+ providerChain = claudeSecondary ? ['antigravity', 'claude'] : ['antigravity', 'gpt'];
604
600
  }
605
601
 
606
602
  const vibeConfig = readVibeConfig();
@@ -6,7 +6,7 @@
6
6
  * 이 디스패처가 stdin에서 prompt를 읽고, 패턴 매칭 후 해당 스크립트만 실행.
7
7
  *
8
8
  * 이점:
9
- * - 외부 LLM 호출(GPT/Gemini)이 패턴 매칭 없이 발동하지 않음
9
+ * - 외부 LLM 호출(GPT/Antigravity)이 패턴 매칭 없이 발동하지 않음
10
10
  * - context window에 불필요한 응답이 주입되지 않음
11
11
  * - 단일 프로세스에서 매칭 후 필요한 스크립트만 fork
12
12
  */
@@ -82,7 +82,7 @@ const DISPATCH_RULES = [
82
82
  label: 'e2e-echo',
83
83
  },
84
84
 
85
- // 외부 LLM 호출 (GPT/Gemini) - 패턴 매칭 필수
85
+ // 외부 LLM 호출 (GPT/Antigravity) - 패턴 매칭 필수
86
86
  {
87
87
  pattern: /아키텍처.*(검토|리뷰|분석)|architecture.*(review|analyz)|설계.*검토|구조.*분석.*해/i,
88
88
  script: 'llm-orchestrate.js',
@@ -92,8 +92,8 @@ const DISPATCH_RULES = [
92
92
  {
93
93
  pattern: /(UI|UX).*(리뷰|검토|피드백|개선)|사용자.*경험.*검토|디자인.*리뷰|design.*feedback/i,
94
94
  script: 'llm-orchestrate.js',
95
- args: ['gemini', 'orchestrate', 'You are a UI/UX expert. Analyze and provide feedback.'],
96
- label: 'gemini-uiux',
95
+ args: ['antigravity', 'orchestrate', 'You are a UI/UX expert. Analyze and provide feedback.'],
96
+ label: 'antigravity-uiux',
97
97
  },
98
98
  {
99
99
  pattern: /디버깅.*해|버그.*찾아|find.*bug|debug.*this.*code/i,
@@ -104,8 +104,8 @@ const DISPATCH_RULES = [
104
104
  {
105
105
  pattern: /코드.*정적.*분석|코드.*분석.*해줘|analyze.*code.*quality/i,
106
106
  script: 'llm-orchestrate.js',
107
- args: ['gemini', 'orchestrate', 'You are a code analysis expert. Review and analyze the code.'],
108
- label: 'gemini-analysis',
107
+ args: ['antigravity', 'orchestrate', 'You are a code analysis expert. Review and analyze the code.'],
108
+ label: 'antigravity-analysis',
109
109
  },
110
110
  {
111
111
  pattern: /코드.*리뷰|code.*review|PR.*리뷰|리뷰.*해줘.*코드/i,
@@ -128,10 +128,10 @@ const DISPATCH_RULES = [
128
128
  label: 'test-gpt',
129
129
  },
130
130
  {
131
- pattern: /^test-gemini/i,
131
+ pattern: /^test-(antigravity|agy)/i,
132
132
  script: 'llm-orchestrate.js',
133
- args: ['gemini', 'orchestrate', 'You are a helpful assistant. Answer the user\'s question clearly and concisely.'],
134
- label: 'test-gemini',
133
+ args: ['antigravity', 'orchestrate', 'You are a helpful assistant. Answer the user\'s question clearly and concisely.'],
134
+ label: 'test-antigravity',
135
135
  },
136
136
  ];
137
137
 
@@ -12,7 +12,7 @@
12
12
  * - TELEGRAM_CHAT_ID: Telegram chat ID
13
13
  * - SLACK_WEBHOOK_URL: Slack webhook URL
14
14
  *
15
- * 설정 파일: .claude/vibe/config.json
15
+ * 설정 파일: .vibe/config.json
16
16
  * {
17
17
  * "notifications": {
18
18
  * "onStop": true,
@@ -274,7 +274,7 @@ const DEFAULT_COST = { input: 0.003, output: 0.010 };
274
274
  /**
275
275
  * LLM 호출 비용을 JSONL로 로깅
276
276
  *
277
- * @param {string} provider - 프로바이더 (gpt, gemini)
277
+ * @param {string} provider - 프로바이더 (gpt, antigravity)
278
278
  * @param {string} model - 모델명
279
279
  * @param {number} inputLen - 입력 문자 수
280
280
  * @param {number} outputLen - 출력 문자 수
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@su-record/vibe",
3
- "version": "2.11.0",
3
+ "version": "2.12.2",
4
4
  "description": "AI Coding Framework for Claude Code — 56 agents, 45 skills, multi-LLM orchestration",
5
5
  "type": "module",
6
6
  "main": "dist/cli/index.js",
@@ -2,7 +2,7 @@
2
2
  name: brand-assets
3
3
  invocation: [auto]
4
4
  tier: standard
5
- description: "Auto-generate app icons (iOS/Android/PWA), favicons, and OG images from SPEC brand information using Gemini Image API. Use when the project needs visual brand assets, when user mentions 'icon', 'favicon', 'logo', or 'brand assets', or when a SPEC defines brand colors/identity but no assets exist yet. Outputs multiple sizes and formats ready for deployment. Not for complex illustration or marketing graphics — focused on app identity assets."
5
+ description: "Auto-generate app icons (iOS/Android/PWA), favicons, and OG images from SPEC brand information using the Antigravity image backend. Use when the project needs visual brand assets, when user mentions 'icon', 'favicon', 'logo', or 'brand assets', or when a SPEC defines brand colors/identity but no assets exist yet. Outputs multiple sizes and formats ready for deployment. Not for complex illustration or marketing graphics — focused on app identity assets."
6
6
  triggers: [icon, favicon, brand, logo, app icon, branding, assets]
7
7
  priority: 65
8
8
  ---
@@ -14,11 +14,11 @@ Auto-generate app icons and favicons based on SPEC brand information.
14
14
 
15
15
  - First-time project setup with `/vibe.run`
16
16
  - When SPEC contains brand/design information
17
- - When Gemini API key is configured
17
+ - When Antigravity API key is configured
18
18
 
19
19
  ## Prerequisites
20
20
 
21
- - Gemini API key configured (`vibe gemini key <key>`)
21
+ - Antigravity API key configured (`vibe antigravity key <key>`)
22
22
  - SPEC with brand context (app name, colors, style)
23
23
 
24
24
  ## Generated Assets
@@ -61,7 +61,7 @@ Extract: name, colors, style keywords
61
61
  Generate Prompt: "App icon for [name], [style], [colors]..."
62
62
  |
63
63
  v
64
- Gemini Image API (gemini-2.5-flash-image)
64
+ Antigravity image backend
65
65
  |
66
66
  v
67
67
  Resize & Convert: All platform sizes
@@ -74,14 +74,14 @@ Save to: public/ or assets/
74
74
 
75
75
  1. First `/vibe.run` execution (no existing icons)
76
76
  2. SPEC contains brand/design context
77
- 3. Gemini API key is available
77
+ 3. Antigravity API key is available
78
78
  4. `--generate-icons` flag passed
79
79
 
80
80
  ## Skip Conditions
81
81
 
82
82
  - Icons already exist (unless `--regenerate-icons`)
83
83
  - No brand info in SPEC
84
- - Gemini API not configured
84
+ - Antigravity API not configured
85
85
 
86
86
  ## Prompt Template
87
87
 
@@ -105,8 +105,8 @@ Requirements:
105
105
 
106
106
  ```bash
107
107
  # [LLM_SCRIPT] = {{CORE_PATH}}/hooks/scripts/llm-orchestrate.js
108
- # Generate via llm-orchestrate (when Gemini configured)
109
- node "[LLM_SCRIPT]" gemini image "App icon for MyApp, primary color #2F6BFF, square format 1:1, simple recognizable design, works well at small sizes, no text or letters, solid or gradient background, modern minimalist" --output "./public/app-icon.png"
108
+ # Generate via llm-orchestrate (when Antigravity configured)
109
+ node "[LLM_SCRIPT]" antigravity image "App icon for MyApp, primary color #2F6BFF, square format 1:1, simple recognizable design, works well at small sizes, no text or letters, solid or gradient background, modern minimalist" --output "./public/app-icon.png"
110
110
  ```
111
111
 
112
112
  ## Integration with /vibe.run
@@ -114,14 +114,14 @@ node "[LLM_SCRIPT]" gemini image "App icon for MyApp, primary color #2F6BFF, squ
114
114
  During Phase 1 (Setup), if brand assets don't exist:
115
115
 
116
116
  1. Parse SPEC for brand context
117
- 2. Generate icon via Gemini Image API
117
+ 2. Generate icon via Antigravity image backend
118
118
  3. Create all size variants
119
119
  4. Place in appropriate directories
120
120
  5. Update manifest files if needed
121
121
 
122
122
  ## Fallback Strategy
123
123
 
124
- If Gemini Image fails:
124
+ If Antigravity image generation fails:
125
125
  1. Generate text-based monogram icon (first letter)
126
126
  2. Use project primary color as background
127
127
  3. Create simple geometric placeholder
@@ -145,4 +145,4 @@ public/
145
145
  - [ ] Icons work at small sizes (recognizable at 16x16)
146
146
  - [ ] No text/letters in icon (illegible at small sizes)
147
147
  - [ ] `site.webmanifest` updated with icon paths
148
- - [ ] Fallback generated if Gemini API unavailable
148
+ - [ ] Fallback generated if Antigravity API unavailable
@@ -107,8 +107,9 @@ graph TD
107
107
  |---|---|---|
108
108
  | Claude Code | `CLAUDE.md` | 100% (Primary) |
109
109
  | Codex | `AGENTS.md` | 100% (Primary) |
110
+ | Antigravity CLI | `GEMINI.md` | 100% |
110
111
 
111
- Gemini CLI / Cursor are not supported — do not generate or check `GEMINI.md`.
112
+ Cursor is not supported — do not generate or check Cursor-specific context files.
112
113
 
113
114
  **Source of truth:**
114
115
  - **`CLAUDE.md` is the content SSOT.** Always edit it first; `AGENTS.md` is a regenerated derivative.
@@ -116,13 +117,17 @@ Gemini CLI / Cursor are not supported — do not generate or check `GEMINI.md`.
116
117
 
117
118
  **Procedure (applies to both creation and modification):**
118
119
 
119
- 1. **Detect state** — check which of `CLAUDE.md` / `AGENTS.md` exist in project root. **`CLAUDE.md` is always the SSOT**; if missing, create it first (never derive from AGENTS.md).
120
+ 1. **Detect state** — check which of `CLAUDE.md` / `AGENTS.md` / `GEMINI.md` exist in project root. **`CLAUDE.md` is always the SSOT**; if missing, create it first (never derive from AGENTS.md).
120
121
  2. **For `AGENTS.md`**:
121
122
  - **If missing** → create by cloning `CLAUDE.md` + applying CLI substitution (below).
122
123
  - **If exists** → regenerate from current `CLAUDE.md` + substitution, preserving user-specific additions outside the VIBE block.
123
- 3. **CLI substitution for `AGENTS.md`** (Codex): `Claude Code` → `Codex` · `~/.claude/` → `~/.codex/` · `.claude/` → `.codex/` · `CLAUDE.md` → `AGENTS.md`. `CLAUDE.md` itself gets no substitution.
124
- 4. **Validate every touched file (whether newly created or modified)** via the `claude-md-guide` `agents-md` skill chain see validation block below. **Never write or save without running this step.**
125
- 5. Report per file: created / updated / skipped / validation warnings.
124
+ 3. **For `GEMINI.md`**:
125
+ - **If missing** create by cloning `CLAUDE.md` + applying Antigravity substitution.
126
+ - **If exists** regenerate from current `CLAUDE.md` + substitution, preserving user-specific additions outside the VIBE block.
127
+ 4. **CLI substitution for `AGENTS.md`** (Codex): `Claude Code` → `Codex` · `~/.claude/` → `~/.codex/` · `.claude/` → `.codex/` · `CLAUDE.md` → `AGENTS.md`. `CLAUDE.md` itself gets no substitution.
128
+ 5. **CLI substitution for `GEMINI.md`** (Antigravity): `Claude Code` → `Antigravity CLI` · `~/.claude/` → `~/.gemini/` · `.claude/` → `.gemini/` · `CLAUDE.md` → `GEMINI.md`.
129
+ 6. **Validate every touched file (whether newly created or modified)** via the `claude-md-guide` → `agents-md` skill chain — see validation block below. **Never write or save without running this step.**
130
+ 7. Report per file: created / updated / skipped / validation warnings.
126
131
 
127
132
  **Idempotent:** Re-running re-syncs the behavioral block and re-applies substitutions without duplication.
128
133
 
@@ -159,7 +159,7 @@ This session's topic: {topic}
159
159
  |---------|----------|
160
160
  | Aligo API timeout/error | Retry once after 5s. If still failing, output the SMS text as plain text for manual sending |
161
161
  | Aligo auth error | Prompt user to verify API key in `~/.vibe/config.json` |
162
- | Gmail auth expired | Prompt user to re-authenticate: `! gemini auth login` or refresh OAuth token |
162
+ | Gmail auth expired | Prompt user to refresh the Gmail OAuth token |
163
163
  | Gmail quota exceeded | Save email as `.eml` file for manual sending later |
164
164
  | SNS post generation fails | Output post text as markdown for manual copy-paste |
165
165
 
@@ -138,7 +138,7 @@ API is read-only → Claude outputs plan → user manually configures.
138
138
  ## Image Generation
139
139
 
140
140
  ### Model
141
- Gemini (`gemini-3-pro-image-preview`)
141
+ Antigravity image backend
142
142
 
143
143
  ### Specs by Community
144
144
 
@@ -162,7 +162,7 @@ Gemini (`gemini-3-pro-image-preview`)
162
162
 
163
163
  ### Smart Resizing
164
164
  - Same ratio → Pillow scale only (no API call)
165
- - Different ratio → Gemini re-generate (pass original as reference, no white margins)
165
+ - Different ratio → Antigravity re-generate (pass original as reference, no white margins)
166
166
 
167
167
  ## Settlement
168
168
 
@@ -202,7 +202,7 @@ Free — no settlement needed
202
202
 
203
203
  | Failure | Recovery |
204
204
  |---------|----------|
205
- | Gemini image API unavailable | Skip image generation, use text-only placeholder slide with community colors |
206
- | Gemini image quality too low | Retry with simplified prompt (remove detail, keep core subject) |
205
+ | Antigravity image API unavailable | Skip image generation, use text-only placeholder slide with community colors |
206
+ | Antigravity image quality too low | Retry with simplified prompt (remove detail, keep core subject) |
207
207
  | PPTX generation error | Output slide content as markdown with speaker notes for manual assembly |
208
208
  | Nametag HTML render issue | Simplify to basic table layout, remove custom fonts |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: spec
3
- description: PTCF 구조 SPEC 한 문서 작성 — parallel research (GPT/Gemini/Claude agents), ambiguity scan, 100-point quality gate. plan 파일 입력 → .vibe/specs/{feature}.md + .vibe/features/{feature}.feature 생성.
3
+ description: PTCF 구조 SPEC 한 문서 작성 — parallel research (GPT/Antigravity/Claude agents), ambiguity scan, 100-point quality gate. plan 파일 입력 → .vibe/specs/{feature}.md + .vibe/features/{feature}.feature 생성.
4
4
  when_to_use: vibe.spec orchestrator의 Phase 3에서 호출. 직접 호출 금지 — /vibe.spec 사용.
5
5
  user-invocable: false
6
6
  tier: core
@@ -100,21 +100,21 @@ User: 1 hour, disallow, confirm
100
100
 
101
101
  When image files (`.png`, `.jpg`, `.jpeg`, `.webp`) are provided as input, analyze them using the best available method:
102
102
 
103
- - **Gemini Enabled**: `llm-orchestrate.js gemini analyze-image` (Gemini Flash - best image recognition)
104
- - **Gemini Disabled**: Claude Opus Read tool (built-in multimodal, existing behavior)
103
+ - **Antigravity Enabled**: `llm-orchestrate.js antigravity analyze-image` (Antigravity Flash - best image recognition)
104
+ - **Antigravity Disabled**: Claude Opus Read tool (built-in multimodal, existing behavior)
105
105
 
106
- **Gemini enabled - analyze via llm-orchestrate.js:**
106
+ **Antigravity enabled - analyze via llm-orchestrate.js:**
107
107
 
108
108
  ```bash
109
109
  # [LLM_SCRIPT] = {{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js
110
- node "[LLM_SCRIPT]" gemini analyze-image "./designs/login-wireframe.png" "Analyze this UI design image. Identify all UI elements, layout structure, colors, typography, and component hierarchy. Output a structured breakdown."
110
+ node "[LLM_SCRIPT]" antigravity analyze-image "./designs/login-wireframe.png" "Analyze this UI design image. Identify all UI elements, layout structure, colors, typography, and component hierarchy. Output a structured breakdown."
111
111
  ```
112
112
 
113
113
  Parse the JSON result: `{ success: true, analysis: "..." }` → use `analysis` field content.
114
114
 
115
115
  If `success: false`, fall back to Claude Read tool.
116
116
 
117
- **Gemini disabled - analyze via Claude Read tool:**
117
+ **Antigravity disabled - analyze via Claude Read tool:**
118
118
 
119
119
  Use the Read tool directly on the image file. Claude can read images natively.
120
120
 
@@ -123,7 +123,7 @@ Use the Read tool directly on the image file. Claude can read images natively.
123
123
  /vibe.spec "designs/login-wireframe.png"
124
124
 
125
125
  🖼️ Image analysis: designs/login-wireframe.png
126
- (via Gemini Flash / Claude Opus)
126
+ (via Antigravity Flash / Claude Opus)
127
127
 
128
128
  📋 Detected UI elements:
129
129
  - Email input field
@@ -150,20 +150,20 @@ Use the Read tool directly on the image file. Claude can read images natively.
150
150
 
151
151
  Collect requirements through conversation with the user and create an **AI-executable PTCF structured SPEC document**.
152
152
 
153
- > **PTCF**: Persona, Task, Context, Format - Google Gemini prompt optimization framework
153
+ > **PTCF**: Persona, Task, Context, Format - Google Antigravity prompt optimization framework
154
154
 
155
- ## External LLM Integration (GPT/Gemini)
155
+ ## External LLM Integration (GPT/Antigravity)
156
156
 
157
- When GPT/Gemini are enabled, they are automatically utilized during SPEC creation:
157
+ When GPT/Antigravity are enabled, they are automatically utilized during SPEC creation:
158
158
 
159
159
  ```
160
160
  /vibe.spec "feature"
161
161
 
162
162
  [Claude] Draft SPEC
163
163
 
164
- [Parallel Research] GPT + Gemini + Claude agents (8 parallel)
164
+ [Parallel Research] GPT + Antigravity + Claude agents (8 parallel)
165
165
 
166
- [SPEC Review] GPT + Gemini parallel review
166
+ [SPEC Review] GPT + Antigravity parallel review
167
167
 
168
168
  [Claude] Finalize SPEC
169
169
  ```
@@ -171,7 +171,7 @@ When GPT/Gemini are enabled, they are automatically utilized during SPEC creatio
171
171
  **Setup:**
172
172
  ```bash
173
173
  vibe gpt key <key> # Enable GPT
174
- vibe gemini key <key> # Enable Gemini
174
+ vibe antigravity key <key> # Enable Antigravity
175
175
  vibe status # Check current settings
176
176
  ```
177
177
 
@@ -408,7 +408,7 @@ ls .vibe/research/<slug>/paper.md 2>/dev/null
408
408
  1. Read `.vibe/research/<slug>/paper.md`
409
409
  2. Read `.vibe/research/<slug>/awesome-list.md` (if present)
410
410
  3. Inject the **Findings**, **Recommendation**, and **Security considerations** sections verbatim into SPEC Context, prefixed with `> Source: .vibe/research/<slug>/paper.md (cached {{FILE_MTIME}})`
411
- 4. **Skip step 3** (parallel research) entirely — do not re-run GPT/Gemini/Claude agents
411
+ 4. **Skip step 3** (parallel research) entirely — do not re-run GPT/Antigravity/Claude agents
412
412
  5. Print: `✅ Research cache hit: <slug> (saved ~30s of LLM calls)`
413
413
 
414
414
  **Cache invalidation:**
@@ -457,11 +457,11 @@ node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Best practices for [FEATURE] wit
457
457
  # 2. GPT: Security (codex — code review & analysis)
458
458
  node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Security vulnerabilities for [FEATURE] with [STACK]. Focus: CVE database, known exploits. Return JSON: {vulnerabilities: [], mitigations: [], checklist: []}"
459
459
 
460
- # 3. Gemini: Best practices
461
- node "[LLM_SCRIPT]" gemini orchestrate-json "Best practices for [FEATURE] with [STACK]. Focus: latest trends, framework updates. Return JSON: {patterns: [], antiPatterns: [], libraries: []}"
460
+ # 3. Antigravity: Best practices
461
+ node "[LLM_SCRIPT]" antigravity orchestrate-json "Best practices for [FEATURE] with [STACK]. Focus: latest trends, framework updates. Return JSON: {patterns: [], antiPatterns: [], libraries: []}"
462
462
 
463
- # 4. Gemini: Security
464
- node "[LLM_SCRIPT]" gemini orchestrate-json "Security advisories for [FEATURE] with [STACK]. Focus: latest patches, recent incidents. Return JSON: {advisories: [], patches: [], incidents: []}"
463
+ # 4. Antigravity: Security
464
+ node "[LLM_SCRIPT]" antigravity orchestrate-json "Security advisories for [FEATURE] with [STACK]. Focus: latest patches, recent incidents. Return JSON: {advisories: [], patches: [], incidents: []}"
465
465
  ```
466
466
 
467
467
  **Concrete example - run all 4 in parallel:**
@@ -472,11 +472,11 @@ node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Best practices for passkey authe
472
472
  # GPT security (codex — code review & analysis)
473
473
  node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Security vulnerabilities for passkey authentication with React, Supabase. Focus: CVE database, known exploits. Return JSON: {vulnerabilities: [], mitigations: [], checklist: []}"
474
474
 
475
- # Gemini best practices
476
- node "[LLM_SCRIPT]" gemini orchestrate-json "Best practices for passkey authentication with React, Supabase. Focus: latest trends, framework updates. Return JSON: {patterns: [], antiPatterns: [], libraries: []}"
475
+ # Antigravity best practices
476
+ node "[LLM_SCRIPT]" antigravity orchestrate-json "Best practices for passkey authentication with React, Supabase. Focus: latest trends, framework updates. Return JSON: {patterns: [], antiPatterns: [], libraries: []}"
477
477
 
478
- # Gemini security
479
- node "[LLM_SCRIPT]" gemini orchestrate-json "Security advisories for passkey authentication with React, Supabase. Focus: latest patches, recent incidents. Return JSON: {advisories: [], patches: [], incidents: []}"
478
+ # Antigravity security
479
+ node "[LLM_SCRIPT]" antigravity orchestrate-json "Security advisories for passkey authentication with React, Supabase. Focus: latest patches, recent incidents. Return JSON: {advisories: [], patches: [], incidents: []}"
480
480
  ```
481
481
 
482
482
  **ALSO run Claude research agents in parallel using Task tool:**
@@ -488,9 +488,9 @@ node "[LLM_SCRIPT]" gemini orchestrate-json "Security advisories for passkey aut
488
488
  | `codebase-patterns` | Similar patterns in existing codebase | Glob, Grep |
489
489
  | `security-advisory` | Security advisories for [feature] | WebSearch |
490
490
 
491
- **Total: 4 GPT/Gemini calls (Bash) + 4 Claude agents (Task) = 8 parallel research tasks**
491
+ **Total: 4 GPT/Antigravity calls (Bash) + 4 Claude agents (Task) = 8 parallel research tasks**
492
492
 
493
- **🚨 GPT/Gemini MUST be called via Bash with llm-orchestrate.js! 🚨**
493
+ **🚨 GPT/Antigravity MUST be called via Bash with llm-orchestrate.js! 🚨**
494
494
 
495
495
  #### 3.0.1 Agent Teams — Research Collaboration
496
496
 
@@ -511,7 +511,7 @@ node "[LLM_SCRIPT]" gemini orchestrate-json "Security advisories for passkey aut
511
511
  - ❌ DO NOT skip research step
512
512
  - ❌ DO NOT ask user "should I run research?"
513
513
  - ✅ ALWAYS run after requirements confirmed
514
- - ✅ Show "Running parallel research (Claude + GPT + Gemini)..." message
514
+ - ✅ Show "Running parallel research (Claude + GPT + Antigravity)..." message
515
515
  - ✅ Include all agent + LLM results in SPEC Context
516
516
  - ✅ Run all 4 Bash LLM calls in parallel + 4 Task agents in parallel
517
517
 
@@ -525,7 +525,7 @@ node "[LLM_SCRIPT]" gemini orchestrate-json "Security advisories for passkey aut
525
525
  **When UI/UX keywords are detected, run 3 agents sequentially in parallel with research:**
526
526
 
527
527
  ```
528
- [Parallel Research] GPT + Gemini + Claude agents
528
+ [Parallel Research] GPT + Antigravity + Claude agents
529
529
  ↓ (concurrent execution)
530
530
  [UI/UX Intelligence]
531
531
  ① ui-industry-analyzer (Haiku) → industry analysis + design strategy
@@ -970,7 +970,7 @@ If score is below 100, attempt automatic fixes:
970
970
 
971
971
  ### 8. SPEC Draft Complete - Handoff to Review
972
972
 
973
- **🚨 IMPORTANT: GPT/Gemini review is now a SEPARATE command**
973
+ **🚨 IMPORTANT: GPT/Antigravity review is now a SEPARATE command**
974
974
 
975
975
  After SPEC draft is complete (score ≥ 95):
976
976
 
@@ -1129,11 +1129,11 @@ Claude: Thank you. SPEC has been refined.
1129
1129
  📊 Quality score: 92/100 (A)
1130
1130
 
1131
1131
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1132
- 🔍 SPEC REVIEW (Gemini)
1132
+ 🔍 SPEC REVIEW (Antigravity)
1133
1133
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1134
1134
 
1135
1135
  📤 Sending SPEC...
1136
- 📝 Gemini feedback:
1136
+ 📝 Antigravity feedback:
1137
1137
  1. [Edge] Ball speed increase logic undefined
1138
1138
  2. [Security] Need score manipulation prevention
1139
1139