code-ai-installer 2.3.0 → 2.4.1

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 (126) hide show
  1. package/.agents/skills/karpathy-guidelines/SKILL.md +326 -0
  2. package/.agents/skills/karpathy-guidelines/agents/claude.json +21 -0
  3. package/.agents/skills/karpathy-guidelines/agents/copilot.json +21 -0
  4. package/.agents/skills/karpathy-guidelines/agents/gemini.json +21 -0
  5. package/.agents/skills/karpathy-guidelines/agents/openai.yaml +8 -0
  6. package/.agents/skills/karpathy-guidelines/agents/qwen.json +21 -0
  7. package/.agents/skills/karpathy-guidelines/agents/skill.yaml +25 -0
  8. package/AGENTS.md +13 -0
  9. package/CONTEXT.md +14 -8
  10. package/agents/architect.md +1 -0
  11. package/agents/conductor.md +1 -0
  12. package/agents/devops.md +1 -0
  13. package/agents/product_manager.md +1 -0
  14. package/agents/reviewer.md +1 -0
  15. package/agents/senior_full_stack.md +1 -0
  16. package/agents/tester.md +1 -0
  17. package/agents/ux_ui_designer.md +1 -0
  18. package/dist/installer.d.ts +2 -0
  19. package/dist/installer.js +48 -0
  20. package/dist/platforms/adapters.js +2 -2
  21. package/domains/analytics/.agents/skills/karpathy-guidelines/SKILL.md +326 -0
  22. package/domains/analytics/.agents/skills/karpathy-guidelines/agents/claude.json +21 -0
  23. package/domains/analytics/.agents/skills/karpathy-guidelines/agents/copilot.json +21 -0
  24. package/domains/analytics/.agents/skills/karpathy-guidelines/agents/gemini.json +21 -0
  25. package/domains/analytics/.agents/skills/karpathy-guidelines/agents/openai.yaml +8 -0
  26. package/domains/analytics/.agents/skills/karpathy-guidelines/agents/qwen.json +21 -0
  27. package/domains/analytics/.agents/skills/karpathy-guidelines/agents/skill.yaml +25 -0
  28. package/domains/analytics/AGENTS.md +3 -0
  29. package/domains/analytics/agents/conductor.md +1 -0
  30. package/domains/analytics/agents/data_analyst.md +2 -1
  31. package/domains/analytics/agents/designer.md +1 -0
  32. package/domains/analytics/agents/interviewer.md +1 -0
  33. package/domains/analytics/agents/layouter.md +1 -0
  34. package/domains/analytics/agents/mediator.md +1 -0
  35. package/domains/analytics/agents/researcher.md +1 -0
  36. package/domains/analytics/agents/strategist.md +1 -0
  37. package/domains/analytics/locales/en/.agents/skills/karpathy-guidelines/SKILL.md +325 -0
  38. package/domains/analytics/locales/en/.agents/skills/karpathy-guidelines/agents/claude.json +22 -0
  39. package/domains/analytics/locales/en/.agents/skills/karpathy-guidelines/agents/copilot.json +22 -0
  40. package/domains/analytics/locales/en/.agents/skills/karpathy-guidelines/agents/gemini.json +22 -0
  41. package/domains/analytics/locales/en/.agents/skills/karpathy-guidelines/agents/openai.yaml +8 -0
  42. package/domains/analytics/locales/en/.agents/skills/karpathy-guidelines/agents/qwen.json +22 -0
  43. package/domains/analytics/locales/en/.agents/skills/karpathy-guidelines/agents/skill.yaml +25 -0
  44. package/domains/analytics/locales/en/AGENTS.md +3 -0
  45. package/domains/analytics/locales/en/agents/data_analyst.md +1 -1
  46. package/domains/content/.agents/skills/karpathy-guidelines/SKILL.md +326 -0
  47. package/domains/content/.agents/skills/karpathy-guidelines/agents/claude.json +21 -0
  48. package/domains/content/.agents/skills/karpathy-guidelines/agents/copilot.json +21 -0
  49. package/domains/content/.agents/skills/karpathy-guidelines/agents/gemini.json +21 -0
  50. package/domains/content/.agents/skills/karpathy-guidelines/agents/openai.yaml +8 -0
  51. package/domains/content/.agents/skills/karpathy-guidelines/agents/qwen.json +21 -0
  52. package/domains/content/.agents/skills/karpathy-guidelines/agents/skill.yaml +25 -0
  53. package/domains/content/AGENTS.md +3 -0
  54. package/domains/content/agents/conductor.md +1 -0
  55. package/domains/content/agents/copywriter.md +1 -0
  56. package/domains/content/agents/researcher.md +1 -0
  57. package/domains/content/agents/reviewer.md +1 -0
  58. package/domains/content/agents/strategist.md +1 -0
  59. package/domains/content/agents/visual_concept.md +1 -0
  60. package/domains/content/locales/en/.agents/skills/karpathy-guidelines/SKILL.md +325 -0
  61. package/domains/content/locales/en/.agents/skills/karpathy-guidelines/agents/claude.json +22 -0
  62. package/domains/content/locales/en/.agents/skills/karpathy-guidelines/agents/copilot.json +22 -0
  63. package/domains/content/locales/en/.agents/skills/karpathy-guidelines/agents/gemini.json +22 -0
  64. package/domains/content/locales/en/.agents/skills/karpathy-guidelines/agents/openai.yaml +8 -0
  65. package/domains/content/locales/en/.agents/skills/karpathy-guidelines/agents/qwen.json +22 -0
  66. package/domains/content/locales/en/.agents/skills/karpathy-guidelines/agents/skill.yaml +25 -0
  67. package/domains/content/locales/en/AGENTS.md +3 -0
  68. package/domains/development/.agents/skills/karpathy-guidelines/SKILL.md +326 -0
  69. package/domains/development/.agents/skills/karpathy-guidelines/agents/claude.json +21 -0
  70. package/domains/development/.agents/skills/karpathy-guidelines/agents/copilot.json +21 -0
  71. package/domains/development/.agents/skills/karpathy-guidelines/agents/gemini.json +21 -0
  72. package/domains/development/.agents/skills/karpathy-guidelines/agents/openai.yaml +8 -0
  73. package/domains/development/.agents/skills/karpathy-guidelines/agents/qwen.json +21 -0
  74. package/domains/development/.agents/skills/karpathy-guidelines/agents/skill.yaml +25 -0
  75. package/domains/development/AGENTS.md +3 -0
  76. package/domains/development/agents/architect.md +1 -0
  77. package/domains/development/agents/conductor.md +1 -0
  78. package/domains/development/agents/devops.md +1 -0
  79. package/domains/development/agents/product_manager.md +1 -0
  80. package/domains/development/agents/reviewer.md +1 -0
  81. package/domains/development/agents/senior_full_stack.md +1 -0
  82. package/domains/development/agents/tester.md +1 -0
  83. package/domains/development/agents/ux_ui_designer.md +2 -1
  84. package/domains/development/locales/en/.agents/skills/karpathy-guidelines/SKILL.md +325 -0
  85. package/domains/development/locales/en/.agents/skills/karpathy-guidelines/agents/claude.json +22 -0
  86. package/domains/development/locales/en/.agents/skills/karpathy-guidelines/agents/copilot.json +22 -0
  87. package/domains/development/locales/en/.agents/skills/karpathy-guidelines/agents/gemini.json +22 -0
  88. package/domains/development/locales/en/.agents/skills/karpathy-guidelines/agents/openai.yaml +8 -0
  89. package/domains/development/locales/en/.agents/skills/karpathy-guidelines/agents/qwen.json +22 -0
  90. package/domains/development/locales/en/.agents/skills/karpathy-guidelines/agents/skill.yaml +25 -0
  91. package/domains/development/locales/en/AGENTS.md +3 -0
  92. package/domains/development/locales/en/agents/ux_ui_designer.md +1 -1
  93. package/domains/product/.agents/skills/karpathy-guidelines/SKILL.md +326 -0
  94. package/domains/product/.agents/skills/karpathy-guidelines/agents/claude.json +21 -0
  95. package/domains/product/.agents/skills/karpathy-guidelines/agents/copilot.json +21 -0
  96. package/domains/product/.agents/skills/karpathy-guidelines/agents/gemini.json +21 -0
  97. package/domains/product/.agents/skills/karpathy-guidelines/agents/openai.yaml +8 -0
  98. package/domains/product/.agents/skills/karpathy-guidelines/agents/qwen.json +21 -0
  99. package/domains/product/.agents/skills/karpathy-guidelines/agents/skill.yaml +25 -0
  100. package/domains/product/AGENTS.md +3 -0
  101. package/domains/product/agents/conductor.md +1 -0
  102. package/domains/product/agents/data_analyst.md +1 -0
  103. package/domains/product/agents/designer.md +1 -0
  104. package/domains/product/agents/discovery.md +1 -0
  105. package/domains/product/agents/layouter.md +1 -0
  106. package/domains/product/agents/mediator.md +1 -0
  107. package/domains/product/agents/pm.md +1 -0
  108. package/domains/product/agents/product_strategist.md +1 -0
  109. package/domains/product/agents/tech_lead.md +1 -0
  110. package/domains/product/agents/ux_designer.md +1 -0
  111. package/domains/product/locales/en/.agents/skills/karpathy-guidelines/SKILL.md +325 -0
  112. package/domains/product/locales/en/.agents/skills/karpathy-guidelines/agents/claude.json +22 -0
  113. package/domains/product/locales/en/.agents/skills/karpathy-guidelines/agents/copilot.json +22 -0
  114. package/domains/product/locales/en/.agents/skills/karpathy-guidelines/agents/gemini.json +22 -0
  115. package/domains/product/locales/en/.agents/skills/karpathy-guidelines/agents/openai.yaml +8 -0
  116. package/domains/product/locales/en/.agents/skills/karpathy-guidelines/agents/qwen.json +22 -0
  117. package/domains/product/locales/en/.agents/skills/karpathy-guidelines/agents/skill.yaml +25 -0
  118. package/domains/product/locales/en/AGENTS.md +3 -0
  119. package/locales/en/.agents/skills/karpathy-guidelines/SKILL.md +325 -0
  120. package/locales/en/.agents/skills/karpathy-guidelines/agents/claude.json +22 -0
  121. package/locales/en/.agents/skills/karpathy-guidelines/agents/copilot.json +22 -0
  122. package/locales/en/.agents/skills/karpathy-guidelines/agents/gemini.json +22 -0
  123. package/locales/en/.agents/skills/karpathy-guidelines/agents/openai.yaml +8 -0
  124. package/locales/en/.agents/skills/karpathy-guidelines/agents/qwen.json +22 -0
  125. package/locales/en/.agents/skills/karpathy-guidelines/agents/skill.yaml +25 -0
  126. package/package.json +1 -1
package/dist/installer.js CHANGED
@@ -5,6 +5,8 @@ import { loadSourceCatalog } from "./catalog.js";
5
5
  import { transformContentForTarget } from "./contentTransformer.js";
6
6
  /**
7
7
  * Runs installation for selected target with optional dry-run and backup.
8
+ * For target=google-antugravity, runs legacy prompt.md migration before applyOperations
9
+ * so the migrated <agent>.md ends up under applyOperations' backup/rollback coverage.
8
10
  * @param options Install options.
9
11
  * @returns Install state and write summary.
10
12
  */
@@ -27,6 +29,12 @@ export async function runInstall(options) {
27
29
  selectedAgents: options.selectedAgents,
28
30
  selectedSkills: options.selectedSkills,
29
31
  };
32
+ if (options.target === "google-antugravity" && !options.dryRun) {
33
+ await migrateLegacyGeminiPromptFiles({
34
+ destinationDir: options.destinationDir,
35
+ selectedAgents: options.selectedAgents,
36
+ });
37
+ }
30
38
  const result = await applyOperations({
31
39
  operations,
32
40
  overwriteMode: options.overwriteMode,
@@ -181,6 +189,46 @@ async function deleteInstallState(destinationDir, target, domain) {
181
189
  await fs.remove(stateFile);
182
190
  }
183
191
  }
192
+ /**
193
+ * Renames legacy <agentsDir>/<agent>/prompt.md to <agent>.md for installs
194
+ * created by code-ai-installer <= v2.4.0 on the google-antugravity target.
195
+ * If both files exist (already migrated, but old prompt.md remained as orphan),
196
+ * removes the legacy file. Idempotent and safe to run on every install.
197
+ * Runs before applyOperations so the renamed file is backed up by the normal
198
+ * install transaction; on apply failure rollback restores user-customized content.
199
+ * @param args Migration arguments.
200
+ */
201
+ async function migrateLegacyGeminiPromptFiles(args) {
202
+ const agentsDir = path.join(args.destinationDir, ".gemini", "agents");
203
+ if (!(await fs.pathExists(agentsDir))) {
204
+ return;
205
+ }
206
+ for (const agentName of args.selectedAgents) {
207
+ const legacyPath = path.join(agentsDir, agentName, "prompt.md");
208
+ const newPath = path.join(agentsDir, agentName, `${agentName}.md`);
209
+ const configPath = path.join(agentsDir, agentName, "config.json");
210
+ if (await fs.pathExists(legacyPath)) {
211
+ if (await fs.pathExists(newPath)) {
212
+ await fs.remove(legacyPath);
213
+ }
214
+ else {
215
+ await fs.rename(legacyPath, newPath);
216
+ }
217
+ }
218
+ if (await fs.pathExists(configPath)) {
219
+ try {
220
+ const config = (await fs.readJson(configPath));
221
+ if (config.promptFile === "prompt.md") {
222
+ config.promptFile = `${agentName}.md`;
223
+ await fs.writeJson(configPath, config, { spaces: 2 });
224
+ }
225
+ }
226
+ catch {
227
+ // Malformed config.json — leave it for applyOperations (overwrite mode regenerates it).
228
+ }
229
+ }
230
+ }
231
+ }
184
232
  /**
185
233
  * Returns absolute path to state file for the target.
186
234
  * @param destinationDir Destination root.
@@ -237,7 +237,7 @@ function planForGeminiLayout(layout, catalog, destinationDir, selectedAgents, se
237
237
  }
238
238
  operations.push({
239
239
  sourcePath,
240
- destinationPath: path.join(destinationDir, layout.agentsDir, agentName, "prompt.md"),
240
+ destinationPath: path.join(destinationDir, layout.agentsDir, agentName, `${agentName}.md`),
241
241
  generated: false,
242
242
  transform: {
243
243
  target,
@@ -345,7 +345,7 @@ function renderGeminiAgentConfig(agentName) {
345
345
  return `${JSON.stringify({
346
346
  name: agentName,
347
347
  model: "gemini-2.5-pro",
348
- promptFile: "prompt.md",
348
+ promptFile: `${agentName}.md`,
349
349
  reasoning: "medium",
350
350
  temperature: 0.2,
351
351
  }, null, 2)}\n`;
@@ -0,0 +1,326 @@
1
+ ---
2
+ name: karpathy-guidelines
3
+ description: Правила работы для предотвращения типичных ошибок LLM — сначала думай, делай только нужное, правь точечно, работай от результата.
4
+ license: MIT
5
+ source: https://x.com/karpathy/status/2015883857489522876
6
+ ---
7
+
8
+ # Karpathy Guidelines
9
+
10
+ Правила работы, основанные на наблюдениях Андрея Карпати о типичных ошибках LLM.
11
+
12
+ > Эти правила ставят аккуратность выше скорости. Для совсем тривиальных задач используй здравый смысл.
13
+
14
+ ---
15
+
16
+ ## 1. Сначала думай, потом делай
17
+
18
+ **Не предполагай молча. Не скрывай неопределённость. Называй альтернативы.**
19
+
20
+ Перед тем как приступить:
21
+ - Явно назови свои предположения. Если не уверен — спроси.
22
+ - Если задачу можно понять по-разному — перечисли варианты, не выбирай сам.
23
+ - Если есть более простой путь — скажи об этом. Возражай, когда это уместно.
24
+ - Если что-то непонятно — остановись, назови конкретно что, и спроси.
25
+
26
+ ### Пример: скрытые предположения
27
+
28
+ **Запрос:** "Добавь экспорт пользовательских данных"
29
+
30
+ ❌ **Что делают LLM** — молча предполагают формат, поля и объём:
31
+
32
+ ```python
33
+ def export_users(format='json'):
34
+ users = User.query.all()
35
+ with open('users.json', 'w') as f:
36
+ json.dump([u.to_dict() for u in users], f)
37
+ return f"Exported {len(users)} users"
38
+ ```
39
+
40
+ ✅ **Как надо** — сначала назвать предположения и уточнить:
41
+
42
+ ```
43
+ Прежде чем делать, нужно прояснить:
44
+
45
+ 1. Кого экспортировать: всех пользователей или отфильтрованных? (вопрос приватности)
46
+ 2. Что значит "экспорт": скачать файл, фоновая задача с уведомлением или API endpoint?
47
+ 3. Какие поля включать? (часть данных может быть чувствительной)
48
+ 4. Сколько пользователей обычно? (влияет на архитектуру)
49
+
50
+ Что из этого важнее всего?
51
+ ```
52
+
53
+ ### Пример: несколько трактовок
54
+
55
+ **Запрос:** "Ускорь поиск"
56
+
57
+ ❌ **Что делают LLM** — выбирают одну трактовку и пишут 200 строк оптимизации.
58
+
59
+ ✅ **Как надо:**
60
+
61
+ ```
62
+ "Ускорить поиск" — это может быть разное:
63
+
64
+ 1. Уменьшить время ответа (< 100 мс вместо 500 мс)
65
+ → индексы в БД, кеш частых запросов | ~2 часа
66
+
67
+ 2. Выдерживать больше одновременных запросов
68
+ → async/await, connection pooling | ~4 часа
69
+
70
+ 3. Субъективно казаться быстрее (UX)
71
+ → показывать частичные результаты сразу | ~3 часа
72
+
73
+ Сейчас поиск занимает ~500 мс. Что важнее?
74
+ ```
75
+
76
+ ---
77
+
78
+ ## 2. Делай только то, что просили
79
+
80
+ **Минимум, решающий задачу. Ничего лишнего.**
81
+
82
+ - Не добавляй возможности сверх того, что просили.
83
+ - Не создавай абстракции, если код используется один раз.
84
+ - Не делай код "гибким" и "настраиваемым" без запроса.
85
+ - Не обрабатывай ошибки, которые не могут случиться.
86
+ - Написал 200 строк, а можно 50 — перепиши.
87
+
88
+ Спроси себя: "Сказал бы опытный коллега, что это переусложнено?" Если да — упрости.
89
+
90
+ ### Пример: лишние абстракции
91
+
92
+ **Запрос:** "Добавь функцию расчёта скидки"
93
+
94
+ ❌ **Что делают LLM** — Strategy pattern, ABC, dataclass, конфигуратор:
95
+
96
+ ```python
97
+ class DiscountStrategy(ABC):
98
+ @abstractmethod
99
+ def calculate(self, amount: float) -> float: pass
100
+
101
+ class PercentageDiscount(DiscountStrategy):
102
+ def __init__(self, percentage: float):
103
+ self.percentage = percentage
104
+ def calculate(self, amount: float) -> float:
105
+ return amount * (self.percentage / 100)
106
+
107
+ @dataclass
108
+ class DiscountConfig:
109
+ strategy: DiscountStrategy
110
+ min_purchase: float = 0.0
111
+ max_discount: float = float('inf')
112
+
113
+ # Ещё 40 строк ради одной формулы
114
+ ```
115
+
116
+ ✅ **Как надо:**
117
+
118
+ ```python
119
+ def calculate_discount(amount: float, percent: float) -> float:
120
+ """Calculate discount amount. percent should be 0-100."""
121
+ return amount * (percent / 100)
122
+ ```
123
+
124
+ Усложнять — только когда реально появится несколько типов скидок.
125
+
126
+ ### Пример: возможности "на будущее"
127
+
128
+ **Запрос:** "Сохрани пользовательские настройки в БД"
129
+
130
+ ❌ **Что делают LLM** — кеш, валидатор, флаг merge, уведомления:
131
+
132
+ ```python
133
+ class PreferenceManager:
134
+ def __init__(self, db, cache=None, validator=None):
135
+ ...
136
+ def save(self, user_id, prefs, merge=True, validate=True, notify=False):
137
+ # 50 строк вместо трёх
138
+ ```
139
+
140
+ ✅ **Как надо:**
141
+
142
+ ```python
143
+ def save_preferences(db, user_id: int, preferences: dict):
144
+ db.execute(
145
+ "UPDATE users SET preferences = ? WHERE id = ?",
146
+ (json.dumps(preferences), user_id)
147
+ )
148
+ ```
149
+
150
+ Кеш, валидацию, merge — добавить тогда, когда это реально понадобится.
151
+
152
+ ---
153
+
154
+ ## 3. Трогай только то, что нужно
155
+
156
+ **Правь минимум. Чисти только за собой.**
157
+
158
+ При редактировании существующего кода:
159
+ - Не "улучшай" соседний код, комментарии или форматирование.
160
+ - Не рефактори то, что работает.
161
+ - Сохраняй существующий стиль, даже если ты сделал бы иначе.
162
+ - Заметил лишний код рядом — упомяни, но не трогай.
163
+
164
+ Если после твоих правок что-то стало неиспользуемым:
165
+ - Удали то, что стало ненужным из-за твоих изменений.
166
+ - Не трогай уже существующий мёртвый код без запроса.
167
+
168
+ **Проверка:** каждая изменённая строка должна напрямую относиться к запросу.
169
+
170
+ ### Пример: попутный рефакторинг
171
+
172
+ **Запрос:** "Исправь баг — пустой email вызывает падение валидатора"
173
+
174
+ ❌ **Что делают LLM** — заодно улучшают валидацию email, добавляют валидацию username, меняют комментарии, пишут docstring.
175
+
176
+ ✅ **Как надо — только строки, связанные с пустым email:**
177
+
178
+ ```diff
179
+ def validate_user(user_data):
180
+ # Check email format
181
+ - if not user_data.get('email'):
182
+ + email = user_data.get('email', '')
183
+ + if not email or not email.strip():
184
+ raise ValueError("Email required")
185
+
186
+ # Basic email validation
187
+ - if '@' not in user_data['email']:
188
+ + if '@' not in email:
189
+ raise ValueError("Invalid email")
190
+
191
+ # Check username ← не трогаем, это не в задаче
192
+ if not user_data.get('username'):
193
+ raise ValueError("Username required")
194
+
195
+ return True
196
+ ```
197
+
198
+ ### Пример: дрейф стиля
199
+
200
+ **Запрос:** "Добавь логирование в функцию upload"
201
+
202
+ ❌ **Что делают LLM** — заодно добавляют type hints, меняют одинарные кавычки на двойные, пишут docstring, переформатируют отступы.
203
+
204
+ ✅ **Как надо — сохраняй существующий стиль:**
205
+
206
+ ```diff
207
+ + import logging
208
+ +
209
+ + logger = logging.getLogger(__name__)
210
+ +
211
+ def upload_file(file_path, destination):
212
+ + logger.info(f'Starting upload: {file_path}')
213
+ try:
214
+ with open(file_path, 'rb') as f:
215
+ data = f.read()
216
+
217
+ response = requests.post(destination, files={'file': data})
218
+
219
+ if response.status_code == 200:
220
+ + logger.info(f'Upload successful: {file_path}')
221
+ return True
222
+ else:
223
+ + logger.error(f'Upload failed: {file_path}, status={response.status_code}')
224
+ return False
225
+ except Exception as e:
226
+ - print(f"Error: {e}")
227
+ + logger.exception(f'Upload error: {file_path}')
228
+ return False
229
+ ```
230
+
231
+ Сохранено: одинарные кавычки, нет type hints, тот же стиль boolean-возврата.
232
+
233
+ ---
234
+
235
+ ## 4. Работай от результата
236
+
237
+ **Определи, как выглядит "готово". Проверяй каждый шаг.**
238
+
239
+ Переформулируй задачи в проверяемые цели:
240
+ - "Добавь валидацию" → "Напиши тесты на некорректные данные, затем сделай их зелёными"
241
+ - "Исправь баг" → "Напиши тест, воспроизводящий баг, затем исправь"
242
+ - "Рефакторинг X" → "Убедись, что тесты проходят до и после"
243
+
244
+ Для многошаговых задач — кратко опиши план:
245
+
246
+ ```
247
+ 1. [Шаг] → проверка: [что проверить]
248
+ 2. [Шаг] → проверка: [что проверить]
249
+ 3. [Шаг] → проверка: [что проверить]
250
+ ```
251
+
252
+ Чёткие критерии дают возможность работать самостоятельно. Размытые ("сделай так, чтобы работало") требуют постоянных уточнений.
253
+
254
+ ### Пример: пошаговая реализация с проверкой
255
+
256
+ **Запрос:** "Добавь rate limiting в API"
257
+
258
+ ❌ **Что делают LLM** — реализуют Redis, несколько стратегий, конфигурацию и мониторинг в одном PR на 300 строк без чётких шагов проверки.
259
+
260
+ ✅ **Как надо:**
261
+
262
+ ```
263
+ План:
264
+
265
+ 1. Базовый лимит в памяти (один endpoint)
266
+ Проверка: 100 запросов → первые 10 проходят, остальные получают 429
267
+
268
+ 2. Вынести в middleware (все endpoints)
269
+ Проверка: существующие тесты не сломались
270
+
271
+ 3. Redis вместо памяти (для нескольких серверов)
272
+ Проверка: лимит сохраняется после перезапуска
273
+
274
+ 4. Настройка лимитов per-endpoint
275
+ Проверка: /search — 10/мин, /users — 100/мин
276
+
277
+ Начинаем с первого шага?
278
+ ```
279
+
280
+ ### Пример: сначала воспроизведи баг
281
+
282
+ **Запрос:** "Сортировка ломается при одинаковых значениях"
283
+
284
+ ❌ **Что делают LLM** — сразу меняют логику сортировки, не убедившись, что воспроизвели проблему.
285
+
286
+ ✅ **Как надо:**
287
+
288
+ ```python
289
+ # 1. Сначала — тест, воспроизводящий баг
290
+ def test_sort_with_duplicate_scores():
291
+ scores = [
292
+ {'name': 'Alice', 'score': 100},
293
+ {'name': 'Bob', 'score': 100},
294
+ {'name': 'Charlie', 'score': 90},
295
+ ]
296
+ result = sort_scores(scores)
297
+ # Проблема: при одинаковых score порядок непредсказуем
298
+ assert result[0]['score'] == 100
299
+ assert result[2]['score'] == 90
300
+ assert result[0]['name'] < result[1]['name'] # ожидаем стабильную сортировку
301
+
302
+ # Запускаем тест → он падает → баг подтверждён
303
+
304
+ # 2. Только теперь исправляем
305
+ def sort_scores(scores):
306
+ return sorted(scores, key=lambda x: (-x['score'], x['name']))
307
+
308
+ # Запускаем тест → зелёный
309
+ ```
310
+
311
+ ---
312
+
313
+ ## Сводка: что делать нельзя
314
+
315
+ | Принцип | Типичная ошибка | Правильно |
316
+ |---|---|---|
317
+ | Сначала думай | Молча выбирает формат, поля, трактовку задачи | Называет предположения явно, спрашивает |
318
+ | Делай только то, что просили | Strategy pattern ради одного расчёта | Одна функция — и точка |
319
+ | Трогай только то, что нужно | Правит кавычки и добавляет типы при фиксе бага | Меняет только строки, касающиеся задачи |
320
+ | Работай от результата | "Проанализирую и улучшу" | "Тест воспроизводит баг → исправляю → проверяю регрессии" |
321
+
322
+ ## Главный вывод
323
+
324
+ Переусложнённые решения не выглядят явно неправильными — они следуют паттернам и best practices. Проблема в **моменте**: сложность добавляется раньше, чем она реально нужна.
325
+
326
+ **Хорошее решение — это минимум, который решает задачу сегодня, а не задачу, которая, возможно, появится завтра.**
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "karpathy-guidelines",
3
+ "display_name": "Karpathy Guidelines",
4
+ "description": "Правила работы для предотвращения типичных ошибок LLM — сначала думай, делай только нужное, правь точечно, работай от результата.",
5
+ "default_prompt": "Используй $karpathy-guidelines, когда задача требует соблюдения правил качества: написание кода, ревью, рефакторинг, анализ или проектирование.",
6
+ "triggers": [
7
+ "karpathy-guidelines",
8
+ "karpathy",
9
+ "Karpathy Guidelines",
10
+ "сначала думай потом делай",
11
+ "простота прежде всего",
12
+ "хирургические изменения"
13
+ ],
14
+ "capabilities": [
15
+ "quality",
16
+ "guidelines",
17
+ "best-practices"
18
+ ],
19
+ "tools": [],
20
+ "implicit_invocation": true
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "karpathy-guidelines",
3
+ "display_name": "Karpathy Guidelines",
4
+ "description": "Правила работы для предотвращения типичных ошибок LLM — сначала думай, делай только нужное, правь точечно, работай от результата.",
5
+ "default_prompt": "Используй $karpathy-guidelines, когда задача требует соблюдения правил качества: написание кода, ревью, рефакторинг, анализ или проектирование.",
6
+ "triggers": [
7
+ "karpathy-guidelines",
8
+ "karpathy",
9
+ "Karpathy Guidelines",
10
+ "сначала думай потом делай",
11
+ "простота прежде всего",
12
+ "хирургические изменения"
13
+ ],
14
+ "capabilities": [
15
+ "quality",
16
+ "guidelines",
17
+ "best-practices"
18
+ ],
19
+ "tools": [],
20
+ "implicit_invocation": true
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "karpathy-guidelines",
3
+ "display_name": "Karpathy Guidelines",
4
+ "description": "Правила работы для предотвращения типичных ошибок LLM — сначала думай, делай только нужное, правь точечно, работай от результата.",
5
+ "default_prompt": "Используй $karpathy-guidelines, когда задача требует соблюдения правил качества: написание кода, ревью, рефакторинг, анализ или проектирование.",
6
+ "triggers": [
7
+ "karpathy-guidelines",
8
+ "karpathy",
9
+ "Karpathy Guidelines",
10
+ "сначала думай потом делай",
11
+ "простота прежде всего",
12
+ "хирургические изменения"
13
+ ],
14
+ "capabilities": [
15
+ "quality",
16
+ "guidelines",
17
+ "best-practices"
18
+ ],
19
+ "tools": [],
20
+ "implicit_invocation": true
21
+ }
@@ -0,0 +1,8 @@
1
+ interface:
2
+ display_name: "Karpathy Guidelines"
3
+ short_description: "Поведенческие правила для снижения типичных ошибок LLM — думай перед тем как делать, простота, хирургические изменения, ориентация на цель."
4
+ default_prompt: "Используй $karpathy-guidelines, когда задача требует соблюдения правил качества: написание кода, ревью, рефакторинг, анализ или проектирование."
5
+ dependencies:
6
+ tools: []
7
+ policy:
8
+ allow_implicit_invocation: true
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "karpathy-guidelines",
3
+ "display_name": "Karpathy Guidelines",
4
+ "description": "Правила работы для предотвращения типичных ошибок LLM — сначала думай, делай только нужное, правь точечно, работай от результата.",
5
+ "default_prompt": "Используй $karpathy-guidelines, когда задача требует соблюдения правил качества: написание кода, ревью, рефакторинг, анализ или проектирование.",
6
+ "triggers": [
7
+ "karpathy-guidelines",
8
+ "karpathy",
9
+ "Karpathy Guidelines",
10
+ "сначала думай потом делай",
11
+ "простота прежде всего",
12
+ "хирургические изменения"
13
+ ],
14
+ "capabilities": [
15
+ "quality",
16
+ "guidelines",
17
+ "best-practices"
18
+ ],
19
+ "tools": [],
20
+ "implicit_invocation": true
21
+ }
@@ -0,0 +1,25 @@
1
+ version: 1
2
+ name: "karpathy-guidelines"
3
+ display_name: "Karpathy Guidelines"
4
+ description: "Правила работы для предотвращения типичных ошибок LLM — сначала думай, делай только нужное, правь точечно, работай от результата."
5
+ default_prompt: "Используй $karpathy-guidelines, когда задача требует соблюдения правил качества: написание кода, ревью, рефакторинг, анализ или проектирование."
6
+ triggers:
7
+ - "karpathy-guidelines"
8
+ - "karpathy"
9
+ - "Karpathy Guidelines"
10
+ - "сначала думай потом делай"
11
+ - "простота прежде всего"
12
+ - "хирургические изменения"
13
+ capabilities:
14
+ - "quality"
15
+ - "guidelines"
16
+ - "best-practices"
17
+ tools: []
18
+ invocation:
19
+ explicit: true
20
+ implicit: true
21
+ localization:
22
+ default_locale: "ru"
23
+ available_locales:
24
+ - "ru"
25
+ - "en"
@@ -93,3 +93,6 @@ CONDUCTOR → INTERVIEWER → RESEARCHER → DATA_ANALYST → STRATEGIST → MED
93
93
 
94
94
  ### Верстальщик
95
95
  - $html-pdf-report — генерация HTML/CSS → PDF
96
+
97
+ ### Cross-cutting / Quality (все агенты домена)
98
+ - $karpathy-guidelines — обязателен перед любой нетривиальной задачей
@@ -42,6 +42,7 @@ compliance — анализ не уходит за пределы исследо
42
42
  ## Используемые skills
43
43
 
44
44
  ### Обязательные (каждый раз)
45
+ - **$karpathy-guidelines** — сначала думай, делай только нужное, правь точечно, работай от результата
45
46
  - **$board** — управление доской задач, трекинг статусов гейтов, метрики прогресса
46
47
  - **$handoff** — формирование handoff-конвертов и межсессионных файлов
47
48
  - **$gates** — контроль гейтов, проверка deliverables, severity (Blocker/Gap/Note)
@@ -45,6 +45,7 @@ Alpha и обязан: (1) провести собственный анализ
45
45
  ## Используемые skills
46
46
 
47
47
  ### Обязательные (каждый раз)
48
+ - **$karpathy-guidelines** — сначала думай, делай только нужное, правь точечно, работай от результата
48
49
  - **`$gates`** — проверка deliverable по AN-xx criteria перед передачей
49
50
  - **`$handoff`** — формирование конверта для Strategist
50
51
 
@@ -327,7 +328,7 @@ Data quality: Verified XX% | Estimated XX% | Assumed XX%
327
328
  ## Анализ по фреймворкам
328
329
 
329
330
  ### Фреймворк 1: [Название]
330
- **Skill:** $skill-name
331
+ **Skill:** `<skill-name>`
331
332
  **Quality Gate:** ✅ Пройден (N/N чекбоксов)
332
333
 
333
334
  **Результат:**
@@ -40,6 +40,7 @@
40
40
  ## Используемые skills
41
41
 
42
42
  ### Обязательные (каждый раз)
43
+ - **$karpathy-guidelines** — сначала думай, делай только нужное, правь точечно, работай от результата
43
44
  - **`$report-design`** — проектирование макета: структура, визуализации, иерархия, палитра
44
45
  - **`$gates`** — проверка deliverable по DS-xx criteria перед передачей Layouter
45
46
  - **`$handoff`** — формирование конверта для Layouter
@@ -43,6 +43,7 @@
43
43
  ## Используемые skills
44
44
 
45
45
  ### Обязательные (каждый раз)
46
+ - **$karpathy-guidelines** — сначала думай, делай только нужное, правь точечно, работай от результата
46
47
  - **`$gates`** --- проверка deliverable по INT-xx criteria перед передачей
47
48
  - **`$handoff`** --- приём handoff от COND-01 + формирование конверта с Research Brief
48
49
  - **`$board`** --- обновление статуса INT-01
@@ -39,6 +39,7 @@
39
39
  ## Используемые skills
40
40
 
41
41
  ### Обязательные (каждый раз)
42
+ - **$karpathy-guidelines** — сначала думай, делай только нужное, правь точечно, работай от результата
42
43
  - **`$html-pdf-report`** — полный протокол генерации HTML: CSS, Chart.js, Mermaid, компоненты, тестирование
43
44
  - **`$gates`** — проверка deliverable по LY-xx criteria + Release Gate
44
45
  - **`$handoff`** — приём от DS-01 + передача на Release Gate
@@ -41,6 +41,7 @@
41
41
  ## Используемые skills
42
42
 
43
43
  ### Обязательные (каждый раз)
44
+ - **$karpathy-guidelines** — сначала думай, делай только нужное, правь точечно, работай от результата
44
45
  - **`$gates`** --- проверка deliverable по MED-xx criteria перед передачей
45
46
  - **`$handoff`** --- приём от COND-04 + формирование конверта с Mediated Conclusion
46
47
  - **`$board`** --- обновление статуса MED-01
@@ -46,6 +46,7 @@
46
46
  ## Используемые skills
47
47
 
48
48
  ### Обязательные (каждый раз)
49
+ - **$karpathy-guidelines** — сначала думай, делай только нужное, правь точечно, работай от результата
49
50
  - **`$web-research`** — веб-поиск и верификация данных. Запускается **всегда**. Протокол: тирование источников (T1/T2/T3), 3-уровневая достоверность, аудит-трейл, контр-поиск, метрики качества.
50
51
  - **`$gates`** — проверка deliverable по RES-xx criteria (web-search = Blocker, dependency check)
51
52
  - **`$handoff`** — приём от COND-xx + формирование конверта для AN-xx
@@ -49,6 +49,7 @@ Reasoning всегда `high` — стратегические рекоменд
49
49
  ## Используемые skills
50
50
 
51
51
  ### Обязательные (каждый раз)
52
+ - **$karpathy-guidelines** — сначала думай, делай только нужное, правь точечно, работай от результата
52
53
  - **`$gates`** — проверка deliverable по ST-xx criteria (прослеживаемость, dependency check)
53
54
  - **`$handoff`** — приём от AN-xx + формирование конверта для Conductor
54
55
  - **`$board`** — обновление статуса ST-xx