@leejungkiin/awkit 1.1.6 → 1.1.9
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.
- package/README.md +51 -1
- package/bin/awk.js +2 -2
- package/core/GEMINI.md +45 -7
- package/package.json +8 -5
- package/skill-packs/neural-memory/skills/nm-memory-sync/SKILL.md +14 -1
- package/skills/ab-test-store-listing/SKILL.md +220 -0
- package/skills/android-aso/SKILL.md +197 -0
- package/skills/app-analytics/SKILL.md +210 -0
- package/skills/app-clips/SKILL.md +163 -0
- package/skills/app-icon-optimization/SKILL.md +170 -0
- package/skills/app-launch/SKILL.md +153 -0
- package/skills/app-marketing-context/SKILL.md +129 -0
- package/skills/app-store-featured/SKILL.md +213 -0
- package/skills/apple-search-ads/SKILL.md +205 -0
- package/skills/asc-metrics/SKILL.md +157 -0
- package/skills/aso-audit/SKILL.md +179 -0
- package/skills/competitor-analysis/SKILL.md +163 -0
- package/skills/competitor-tracking/SKILL.md +185 -0
- package/skills/crash-analytics/SKILL.md +181 -0
- package/skills/gitnexus-intelligence/SKILL.md +224 -0
- package/skills/in-app-events/SKILL.md +176 -0
- package/skills/keyword-research/SKILL.md +141 -0
- package/skills/localization/SKILL.md +165 -0
- package/skills/market-movers/SKILL.md +137 -0
- package/skills/market-pulse/SKILL.md +170 -0
- package/skills/metadata-optimization/SKILL.md +170 -0
- package/skills/monetization-strategy/SKILL.md +175 -0
- package/skills/onboarding-optimization/SKILL.md +194 -0
- package/skills/orchestrator/SKILL.md +306 -25
- package/skills/press-and-pr/SKILL.md +204 -0
- package/skills/rating-prompt-strategy/SKILL.md +184 -0
- package/skills/retention-optimization/SKILL.md +165 -0
- package/skills/review-management/SKILL.md +154 -0
- package/skills/screenshot-optimization/SKILL.md +167 -0
- package/skills/seasonal-aso/SKILL.md +141 -0
- package/skills/spec-gate/SKILL.md +312 -0
- package/skills/subscription-lifecycle/SKILL.md +206 -0
- package/skills/swiftui-pro/references/design.md +44 -0
- package/skills/symphony-enforcer/SKILL.md +92 -11
- package/skills/symphony-orchestrator/SKILL.md +9 -7
- package/skills/systematic-debugging/SKILL.md +32 -7
- package/skills/ua-campaign/SKILL.md +207 -0
- package/skills/verification-gate/SKILL.md +23 -2
- package/workflows/gitnexus.md +123 -0
- package/symphony/LICENSE +0 -21
- package/symphony/README.md +0 -178
- package/symphony/app/api/agents/route.js +0 -152
- package/symphony/app/api/events/route.js +0 -22
- package/symphony/app/api/knowledge/route.js +0 -253
- package/symphony/app/api/locks/route.js +0 -29
- package/symphony/app/api/notes/route.js +0 -125
- package/symphony/app/api/preflight/route.js +0 -23
- package/symphony/app/api/projects/route.js +0 -116
- package/symphony/app/api/roles/route.js +0 -134
- package/symphony/app/api/skills/route.js +0 -82
- package/symphony/app/api/status/route.js +0 -18
- package/symphony/app/api/tasks/route.js +0 -157
- package/symphony/app/api/workflows/route.js +0 -61
- package/symphony/app/api/workspaces/route.js +0 -15
- package/symphony/app/globals.css +0 -2605
- package/symphony/app/layout.js +0 -20
- package/symphony/app/page.js +0 -2122
- package/symphony/cli/index.js +0 -1060
- package/symphony/core/agent-manager.js +0 -357
- package/symphony/core/context-bus.js +0 -100
- package/symphony/core/db.js +0 -223
- package/symphony/core/file-lock-manager.js +0 -154
- package/symphony/core/merge-pipeline.js +0 -234
- package/symphony/core/orchestrator.js +0 -236
- package/symphony/core/task-manager.js +0 -335
- package/symphony/core/workspace-manager.js +0 -168
- package/symphony/jsconfig.json +0 -7
- package/symphony/lib/core.mjs +0 -1034
- package/symphony/mcp/index.js +0 -29
- package/symphony/mcp/server.js +0 -110
- package/symphony/mcp/tools/context.js +0 -80
- package/symphony/mcp/tools/locks.js +0 -99
- package/symphony/mcp/tools/status.js +0 -82
- package/symphony/mcp/tools/tasks.js +0 -216
- package/symphony/mcp/tools/workspace.js +0 -143
- package/symphony/next.config.mjs +0 -7
- package/symphony/package.json +0 -53
- package/symphony/scripts/postinstall.js +0 -49
- package/symphony/symphony.config.js +0 -41
|
@@ -1,58 +1,339 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: orchestrator
|
|
3
|
-
description:
|
|
3
|
+
description: >-
|
|
4
|
+
Autonomous State Machine Gatekeeper — triages task complexity, enforces 5-Gate pipeline,
|
|
5
|
+
and auto-routes to the correct skill. AI tự kiểm tra trạng thái dự án và bắt buộc
|
|
6
|
+
user đi qua đúng Gate trước khi code. User KHÔNG CẦN gọi workflow bằng tay.
|
|
7
|
+
metadata:
|
|
8
|
+
stage: core
|
|
9
|
+
version: "2.1"
|
|
10
|
+
replaces: "1.0"
|
|
11
|
+
tags: [orchestrator, routing, gate, triage, state-machine, core]
|
|
12
|
+
agent: Orchestrator
|
|
13
|
+
trigger: always
|
|
14
|
+
invocation-type: auto
|
|
15
|
+
priority: 0
|
|
4
16
|
---
|
|
5
17
|
|
|
6
|
-
# Orchestrator
|
|
18
|
+
# Orchestrator v2.1 — Autonomous State Machine Gatekeeper
|
|
7
19
|
|
|
8
|
-
|
|
9
|
-
|
|
20
|
+
> **Purpose:** Route mọi request qua hệ thống 5-Gate tự động.
|
|
21
|
+
> AI tự nhận diện project state → tự quyết định gate nào cần chạy.
|
|
22
|
+
> User chỉ cần nói ý tưởng, AI lo phần còn lại.
|
|
10
23
|
|
|
11
|
-
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## ⚡ Core Principle
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
AI LÀ NGƯỜI GIÁM SÁT "CÁN CÂN" CỦA DỰ ÁN.
|
|
30
|
+
- User không cần nhớ workflow nào để gọi
|
|
31
|
+
- AI tự detect thiếu spec → tự hỏi
|
|
32
|
+
- AI tự detect thiếu design → tự phác thảo
|
|
33
|
+
- AI tự detect thiếu tickets → tự tạo
|
|
34
|
+
- Chỉ cho phép code khi TẤT CẢ prerequisites thỏa mãn
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 6 Decision Principles (Auto-decide khi không cần hỏi user)
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
1. Complete > Shortcuts — AI cost rẻ. Implement đủ, kể cả edge cases.
|
|
41
|
+
2. Evidence > Assumptions — Dựa trên data thực tế, không đoán.
|
|
42
|
+
3. Standard > Custom — Ưu tiên thư viện/pattern có sẵn.
|
|
43
|
+
4. Explicit > Implicit — Code rõ ràng, không clever tricks.
|
|
44
|
+
5. Test > Trust — Viết test, không "chắc chắn đúng".
|
|
45
|
+
6. Small > Big — Incremental changes, không big-bang.
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 🎯 STEP 1: Complexity Triage (BẮT BUỘC)
|
|
51
|
+
|
|
52
|
+
Mỗi khi nhận request từ user, orchestrator PHẢI phân loại complexity **TRƯỚC** mọi action khác.
|
|
53
|
+
|
|
54
|
+
### Scoring Criteria
|
|
55
|
+
|
|
56
|
+
```yaml
|
|
57
|
+
factors:
|
|
58
|
+
persistence_change: # Thay đổi Database/Storage/Model
|
|
59
|
+
score: +4
|
|
60
|
+
signals: ["database", "schema", "table", "collection", "model", "migration", "storage"]
|
|
61
|
+
|
|
62
|
+
new_feature: # Feature hoàn toàn mới
|
|
63
|
+
score: +3
|
|
64
|
+
signals: ["tính năng mới", "new feature", "implement", "build", "tạo mới"]
|
|
65
|
+
|
|
66
|
+
multi_file: # Ảnh hưởng nhiều file/module
|
|
67
|
+
score: +2
|
|
68
|
+
signals: [">3 files", "cross-module", "refactor lớn", "architecture"]
|
|
69
|
+
|
|
70
|
+
api_change: # Thay đổi API contract
|
|
71
|
+
score: +2
|
|
72
|
+
signals: ["API", "endpoint", "request", "response", "contract"]
|
|
73
|
+
|
|
74
|
+
ui_only: # Chỉ thay đổi UI/styling
|
|
75
|
+
score: +0
|
|
76
|
+
signals: ["đổi màu", "UI", "layout", "font", "padding", "margin"]
|
|
77
|
+
|
|
78
|
+
single_file_fix: # Sửa 1 file, logic nhỏ
|
|
79
|
+
score: +0
|
|
80
|
+
signals: ["fix typo", "sửa lỗi nhỏ", "update text", "rename"]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Classification
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
TRIVIAL (score 0-2): Bypass ALL gates → Execute trực tiếp
|
|
87
|
+
Examples: đổi màu nút, sửa typo, thêm log, fix linter, update string
|
|
88
|
+
|
|
89
|
+
MODERATE (score 3-5): Gate 3 + 4 + 5
|
|
90
|
+
Examples: thêm UI component, sửa logic business nhỏ, update 1-2 files
|
|
91
|
+
|
|
92
|
+
COMPLEX (score 6-10): ALL 5 Gates bắt buộc
|
|
93
|
+
Examples: thêm feature mới, thay đổi DB schema, refactor architecture, thêm API
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Output Format
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
🔍 TRIAGE: [TRIVIAL|MODERATE|COMPLEX] (score: N/10)
|
|
100
|
+
Factors: [list detected factors]
|
|
101
|
+
Gates required: [list gates]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 🚦 STEP 2: Gate State Check (Cho COMPLEX tasks)
|
|
107
|
+
|
|
108
|
+
Sau khi triage = COMPLEX, orchestrator kiểm tra **tuần tự** từng Gate.
|
|
109
|
+
Dừng tại Gate ĐẦU TIÊN chưa thỏa mãn.
|
|
110
|
+
|
|
111
|
+
### Gate 1: Spec Clarification 🔴
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
CHECK: Tồn tại file mô tả feature này?
|
|
115
|
+
→ Scan: docs/specs/<feature>.md HOẶC docs/BRIEF.md có section liên quan
|
|
116
|
+
→ Hoặc: NeuralMemory có BRIEF/SPEC cho feature này
|
|
117
|
+
|
|
118
|
+
PASS condition: File tồn tại VÀ có nội dung rõ ràng (use cases, target users, scope)
|
|
119
|
+
|
|
120
|
+
FAIL action:
|
|
121
|
+
→ Thông báo user: "Ý tưởng rất hay! Nhưng trước khi bắt tay vào code,
|
|
122
|
+
để tôi hỏi vài câu để chốt rõ yêu cầu đã nhé."
|
|
123
|
+
→ Kích hoạt: brainstorm-agent skill (Phase 2-6)
|
|
124
|
+
→ Output: BRIEF.md hoặc docs/specs/<feature>.md
|
|
125
|
+
→ Sau khi tạo xong → Re-check Gate 1 → Proceed Gate 2
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Gate 2: Architecture & Data Design 🟠
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
CHECK: Tồn tại bản thiết kế kỹ thuật đã được duyệt?
|
|
132
|
+
→ Scan: docs/architecture/<feature>_design.md
|
|
133
|
+
→ HOẶC: implementation_plan.md có section "Data Model" + marker "Approved"
|
|
134
|
+
|
|
135
|
+
PASS condition: File tồn tại VÀ có marker "## Status: Approved"
|
|
136
|
+
|
|
137
|
+
FAIL action:
|
|
138
|
+
→ Thông báo user: "Đã có spec rồi. Giờ để tôi phác thảo thiết kế
|
|
139
|
+
Database và API trước khi code, tránh phải sửa đi sửa lại sau nhé."
|
|
140
|
+
→ Kích hoạt: spec-gate skill
|
|
141
|
+
→ Output: docs/architecture/<feature>_design.md
|
|
142
|
+
→ Yêu cầu user approve design
|
|
143
|
+
→ Sau khi approved → Re-check Gate 2 → Proceed Gate 3
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Gate 3: Task Breakdown (Symphony) 🟡
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
CHECK: Có Symphony tasks liên kết feature này?
|
|
150
|
+
→ symphony_available_tasks → filter by feature keyword/tag
|
|
151
|
+
|
|
152
|
+
PASS condition: ≥1 task tồn tại cho feature này
|
|
153
|
+
|
|
154
|
+
FAIL action:
|
|
155
|
+
→ Đọc design doc từ Gate 2
|
|
156
|
+
→ Auto-generate 3-8 micro-tasks
|
|
157
|
+
→ Tạo Symphony tasks (symphony_create_task cho mỗi task)
|
|
158
|
+
→ Present danh sách cho user confirm
|
|
159
|
+
→ Sau khi confirm → Proceed Gate 4
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Gate 4: Execution 🟢
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
CHECK: Có ticket đang In Progress?
|
|
166
|
+
→ symphony_available_tasks(filter="in_progress")
|
|
167
|
+
|
|
168
|
+
🔍 SEARCH BEFORE BUILDING (BẮT BUỘC trước khi viết code mới):
|
|
169
|
+
Layer 0 — Structural (GitNexus, CHỈ khi .gitnexus/ tồn tại):
|
|
170
|
+
→ gitnexus_impact: Check blast radius của symbol cần sửa
|
|
171
|
+
→ gitnexus_context: Xem 360° callers/callees trước khi code
|
|
172
|
+
→ gitnexus_query: Tìm execution flows liên quan
|
|
173
|
+
Layer 1 — Tried-and-True:
|
|
174
|
+
→ nmem_recall: Tìm similar problems đã giải quyết trong brain
|
|
175
|
+
→ grep_search: Tìm existing utils/patterns trong codebase
|
|
176
|
+
Layer 2 — New-and-Popular:
|
|
177
|
+
→ Tìm thư viện/SDK chuẩn ngành cho problem này
|
|
178
|
+
→ Ưu tiên well-maintained, community-backed solutions
|
|
179
|
+
Layer 3 — First-Principles:
|
|
180
|
+
→ CHỈ build from scratch khi Layer 1+2 không có solution phù hợp
|
|
181
|
+
→ Ghi lý do tại sao existing solutions không đáp ứng
|
|
182
|
+
|
|
183
|
+
⚠️ KHÔNG được skip layers! Log kết quả search vào progress report.
|
|
184
|
+
|
|
185
|
+
ACTION:
|
|
186
|
+
→ Nếu chưa có → Claim task tiếp theo: symphony_claim_task
|
|
187
|
+
→ Code THEO TICKET, THEO DESIGN DOC, THEO search results
|
|
188
|
+
→ Nếu phát hiện cần sửa schema khác design → ⛔ DỪNG:
|
|
189
|
+
"Schema change ngoài approved design detected.
|
|
190
|
+
Quay lại Gate 2 để cập nhật design doc."
|
|
191
|
+
→ Complete ticket → symphony_complete_task
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Gate 5: Verification 🔵
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
ACTION: Auto-trigger sau mỗi Gate 4 completion
|
|
198
|
+
→ verification-gate skill (evidence before claims)
|
|
199
|
+
→ Boil-the-Lake checklist (completeness check)
|
|
200
|
+
→ code-review skill (nếu task phức tạp)
|
|
201
|
+
→ Đối chiếu: code thực tế vs design doc
|
|
202
|
+
→ OK → Task done → Auto-Next (TP4 in symphony-enforcer)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## 🔀 STEP 3: Slash Command Detection (Giữ lại)
|
|
208
|
+
|
|
209
|
+
Nếu user dùng slash command rõ ràng → Load workflow file trực tiếp, SKIP triage.
|
|
12
210
|
|
|
13
|
-
### 1. Slash Command Detection
|
|
14
211
|
```
|
|
15
212
|
User input starts with `/` → Load workflow file directly
|
|
16
213
|
/plan → workflows/lifecycle/plan.md
|
|
17
214
|
/code → workflows/lifecycle/code.md
|
|
18
215
|
/debug → workflows/lifecycle/debug.md
|
|
19
|
-
|
|
216
|
+
/brainstorm → brainstorm-agent skill
|
|
217
|
+
...etc (see GEMINI.md)
|
|
20
218
|
```
|
|
21
219
|
|
|
22
|
-
|
|
220
|
+
> **Note:** Slash commands bypass triage vì user ĐÃ BIẾT mình cần gì.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## 🧠 STEP 4: Intent Detection (Fallback)
|
|
225
|
+
|
|
226
|
+
Nếu KHÔNG phải slash command VÀ triage chưa rõ:
|
|
227
|
+
|
|
23
228
|
```yaml
|
|
24
229
|
code_intent:
|
|
25
|
-
keywords: ["implement", "build", "create", "add", "code", "fix", "viết", "tạo"]
|
|
26
|
-
action:
|
|
230
|
+
keywords: ["implement", "build", "create", "add", "code", "fix", "viết", "tạo", "làm"]
|
|
231
|
+
action: Run triage → route theo complexity
|
|
27
232
|
|
|
28
233
|
debug_intent:
|
|
29
|
-
keywords: ["error", "bug", "crash", "fix", "lỗi", "sửa", "fail"]
|
|
30
|
-
action:
|
|
234
|
+
keywords: ["error", "bug", "crash", "fix", "lỗi", "sửa", "fail", "broken"]
|
|
235
|
+
action: systematic-debugging skill (bypass spec gates — debugging is reactive)
|
|
31
236
|
|
|
32
237
|
plan_intent:
|
|
33
238
|
keywords: ["plan", "design", "architect", "how to", "strategy", "thiết kế"]
|
|
34
|
-
action: Suggest
|
|
239
|
+
action: Suggest Gate 1-2 flow
|
|
240
|
+
|
|
241
|
+
brainstorm_intent:
|
|
242
|
+
keywords: ["brainstorm", "ý tưởng", "idea", "nên làm gì", "what should"]
|
|
243
|
+
action: brainstorm-agent skill
|
|
35
244
|
|
|
36
245
|
context_intent:
|
|
37
246
|
keywords: ["remember", "save", "continue", "where was I", "nhớ", "tiếp"]
|
|
38
|
-
action: Suggest
|
|
247
|
+
action: Suggest /recap or /save-brain
|
|
39
248
|
|
|
40
|
-
|
|
41
|
-
keywords: ["
|
|
42
|
-
action:
|
|
249
|
+
refactor_intent:
|
|
250
|
+
keywords: ["refactor", "rename", "extract", "split", "move", "restructure", "blast radius", "impact"]
|
|
251
|
+
action: gitnexus-intelligence skill (impact analysis + safe refactoring)
|
|
43
252
|
```
|
|
44
253
|
|
|
45
|
-
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 🗣️ Communication Style
|
|
257
|
+
|
|
258
|
+
Orchestrator KHÔNG nói giọng máy móc. Dùng giọng đồng nghiệp senior:
|
|
259
|
+
|
|
260
|
+
```
|
|
261
|
+
❌ "ERROR: Gate 1 not satisfied. Spec document missing."
|
|
262
|
+
✅ "Ý tưởng rất hay! Kinh nghiệm cho thấy nếu không chốt yêu cầu trước,
|
|
263
|
+
sau sửa cực lắm. Để tôi hỏi vài câu rồi mình chốt spec nhé?"
|
|
264
|
+
|
|
265
|
+
❌ "Gate 2 failed. Architecture document required."
|
|
266
|
+
✅ "Đã hiểu yêu cầu rồi. Giờ để tôi phác thảo cấu trúc database
|
|
267
|
+
cho anh xem trước — tránh kiểu vừa làm vừa đập đi xây lại."
|
|
268
|
+
|
|
269
|
+
❌ "Execution blocked. No Symphony task found."
|
|
270
|
+
✅ "Design ngon rồi! Giờ tôi bẻ ra thành 5 task nhỏ trên Symphony
|
|
271
|
+
để track tiến độ nhé."
|
|
46
272
|
```
|
|
47
|
-
|
|
48
|
-
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## 🚫 Anti-Patterns
|
|
277
|
+
|
|
278
|
+
```yaml
|
|
279
|
+
never_do:
|
|
280
|
+
- Cho phép code COMPLEX task mà chưa qua Gate 1-2
|
|
281
|
+
- Tự ý thêm cột DB ngoài approved design
|
|
282
|
+
- Hỏi "Bạn muốn chạy workflow nào?" — AI phải TỰ QUYẾT
|
|
283
|
+
- Tạo Symphony tickets trước khi có design doc (Gate 3 cần Gate 2)
|
|
284
|
+
- Force user qua 5 Gates cho trivial tasks
|
|
285
|
+
- Code mới mà chưa search existing solution (Search Before Building)
|
|
286
|
+
- Đồng ý approach có vấn đề mà không push back (Anti-sycophancy)
|
|
287
|
+
- Skip edge cases / error handling vì "trivial" (Boil the Lake)
|
|
288
|
+
|
|
289
|
+
always_do:
|
|
290
|
+
- Hiển thị triage result trước mọi action
|
|
291
|
+
- Thông báo đang ở Gate nào khi chặn
|
|
292
|
+
- Giữ giọng thân thiện, giải thích LÝ DO chặn
|
|
293
|
+
- Cho phép user override gate: "skip gates" hoặc "bỏ qua"
|
|
294
|
+
- Re-check gates sau mỗi lần user provide input
|
|
295
|
+
- Search NeuralMemory + codebase TRƯỚC khi code mới
|
|
296
|
+
- Report DONE_WITH_CONCERNS nếu có caveats (Completion Status)
|
|
297
|
+
- Escalate sau 3 failed attempts (3-Strike Rule)
|
|
49
298
|
```
|
|
50
299
|
|
|
51
|
-
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 🔗 Skill Relationships
|
|
303
|
+
|
|
52
304
|
```
|
|
53
|
-
|
|
54
|
-
|
|
305
|
+
DELEGATES TO:
|
|
306
|
+
Gate 1 → brainstorm-agent (phỏng vấn → BRIEF.md)
|
|
307
|
+
Gate 2 → spec-gate (thiết kế DB/API → design doc)
|
|
308
|
+
Gate 3 → symphony-enforcer (tạo + track tasks)
|
|
309
|
+
Gate 4 → relevant coding workflow (/code, /codeExpert)
|
|
310
|
+
Gate 5 → verification-gate + code-review
|
|
311
|
+
|
|
312
|
+
WORKS WITH:
|
|
313
|
+
nm-memory-sync (đọc context từ NeuralMemory)
|
|
314
|
+
awf-session-restore (restore state)
|
|
315
|
+
symphony-orchestrator (đảm bảo Symphony server running)
|
|
316
|
+
gitnexus-intelligence (architectural awareness trước khi code)
|
|
317
|
+
|
|
318
|
+
DOES NOT:
|
|
319
|
+
Execute code trực tiếp (delegates to workflows)
|
|
320
|
+
Modify files (chỉ route + enforce gates)
|
|
55
321
|
```
|
|
56
322
|
|
|
57
|
-
|
|
58
|
-
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## 🧩 Edge Cases
|
|
326
|
+
|
|
327
|
+
| Tình huống | Xử lý |
|
|
328
|
+
|-----------|--------|
|
|
329
|
+
| User nói "skip gates" / "bỏ qua" | Cho phép bypass, ghi cảnh báo |
|
|
330
|
+
| Feature đã có partial spec | Gate 1 pass, check Gate 2 |
|
|
331
|
+
| Debug request | Bypass spec gates — debugging is reactive |
|
|
332
|
+
| User follow-up nhỏ sau feature done | Re-triage — thường TRIVIAL |
|
|
333
|
+
| Multiple features cùng lúc | Triage TỪNG feature riêng |
|
|
334
|
+
| Spec tồn tại nhưng outdated | Cảnh báo "Spec cũ, cần update?" |
|
|
335
|
+
| Project chưa có docs/ folder | Tạo folder structure tự động |
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
*orchestrator v2.0 — Autonomous State Machine Gatekeeper for AWKit*
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: press-and-pr
|
|
3
|
+
description: When the user wants to get press coverage, media mentions, or editorial features for their app — including writing press releases, pitching journalists, getting on "best apps" lists, or building an app press kit. Use when the user mentions "press", "PR", "media coverage", "TechCrunch", "journalist", "press release", "app press kit", "get featured in media", "editorial coverage", "review from a blogger", or "app launch announcement". For Apple editorial featuring, see app-store-featured. For launch strategy, see app-launch.
|
|
4
|
+
metadata:
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Press & PR for Apps
|
|
9
|
+
|
|
10
|
+
You help indie developers and app teams get genuine media coverage — which drives installs, backlinks, and App Store credibility.
|
|
11
|
+
|
|
12
|
+
## Why Press Still Matters
|
|
13
|
+
|
|
14
|
+
- **Web referral** in App Store Connect directly tracks installs from press links
|
|
15
|
+
- **Backlinks** from high-authority sites (TechCrunch, The Verge) improve web presence
|
|
16
|
+
- **Social proof** — "As seen on…" on your product page improves conversion
|
|
17
|
+
- **Apple editorial** — press coverage increases editorial featuring consideration
|
|
18
|
+
- **Organic amplification** — articles get shared, creating discovery beyond the original publication
|
|
19
|
+
|
|
20
|
+
## Target Media Tiers
|
|
21
|
+
|
|
22
|
+
### Tier 1 — High impact, harder to get
|
|
23
|
+
|
|
24
|
+
| Publication | Focus | Notes |
|
|
25
|
+
|-------------|-------|-------|
|
|
26
|
+
| TechCrunch | Consumer tech, startups | Exclusives preferred |
|
|
27
|
+
| The Verge | Consumer tech | Curated; quality bar is high |
|
|
28
|
+
| Wired | Tech culture | Long-form, unique angle needed |
|
|
29
|
+
| Fast Company | Innovation, productivity | Strong business angle |
|
|
30
|
+
| 9to5Mac | iOS/macOS apps | App-specific, accessible |
|
|
31
|
+
| MacStories | iOS apps | Very accessible for indie devs |
|
|
32
|
+
|
|
33
|
+
### Tier 2 — Accessible, meaningful reach
|
|
34
|
+
|
|
35
|
+
| Type | Examples |
|
|
36
|
+
|------|---------|
|
|
37
|
+
| App review blogs | AppAdvice, TouchArcade (games), AppShopper |
|
|
38
|
+
| Niche newsletters | App-specific verticals (health, productivity, finance newsletters) |
|
|
39
|
+
| YouTube channels | AppFind, MKBHD (for significant apps), niche channels |
|
|
40
|
+
| Podcasts | App podcast appearances, niche shows |
|
|
41
|
+
|
|
42
|
+
### Tier 3 — Start here
|
|
43
|
+
|
|
44
|
+
| Type | Examples |
|
|
45
|
+
|------|---------|
|
|
46
|
+
| Reddit | r/iphone, r/androidapps, r/productivity (category-specific) |
|
|
47
|
+
| Product Hunt | Launch day visibility |
|
|
48
|
+
| Hacker News | Show HN post for technical/productivity apps |
|
|
49
|
+
| Indie hackers | For indie developer community coverage |
|
|
50
|
+
|
|
51
|
+
## What Makes a Story
|
|
52
|
+
|
|
53
|
+
Press doesn't cover apps — they cover **stories**. Find your angle:
|
|
54
|
+
|
|
55
|
+
| Angle | Example |
|
|
56
|
+
|-------|---------|
|
|
57
|
+
| **Numbers** | "App hit 100K downloads in 7 days with no marketing" |
|
|
58
|
+
| **Problem solved** | "Solo dev built X because no existing tool did Y" |
|
|
59
|
+
| **Unique data** | "Our app analyzed 10M habit logs — here's what we learned" |
|
|
60
|
+
| **Category creation** | "We invented a new category of [type] app" |
|
|
61
|
+
| **David vs Goliath** | Indie beating a Big Tech competitor |
|
|
62
|
+
| **Timely** | Tied to a current news trend or cultural moment |
|
|
63
|
+
| **Human story** | Founder's compelling personal motivation |
|
|
64
|
+
|
|
65
|
+
**Test your angle:** Can you explain the story in 1 sentence that would make someone say "interesting"?
|
|
66
|
+
|
|
67
|
+
## Press Kit
|
|
68
|
+
|
|
69
|
+
Create a `presskit/` folder on your website or a Notion page with:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Press Kit Contents:
|
|
73
|
+
- [ ] App name, one-liner, category
|
|
74
|
+
- [ ] 3 founder photos (high-res, print-quality)
|
|
75
|
+
- [ ] App icon (1024×1024px, PNG)
|
|
76
|
+
- [ ] 5–10 screenshots (phone mockups, high-res)
|
|
77
|
+
- [ ] App preview video (optional but impactful)
|
|
78
|
+
- [ ] 3-sentence company/founder bio
|
|
79
|
+
- [ ] Key stats (downloads, ratings, notable users)
|
|
80
|
+
- [ ] Press quotes / prior coverage (if any)
|
|
81
|
+
- [ ] App Store link + website
|
|
82
|
+
- [ ] Press contact email
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Host at: `yoursite.com/press` or a publicly shared Notion/Google Drive link.
|
|
86
|
+
|
|
87
|
+
## Press Release Structure
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
FOR IMMEDIATE RELEASE
|
|
91
|
+
|
|
92
|
+
[Headline — most newsworthy fact as a statement]
|
|
93
|
+
[Subheadline — supporting detail]
|
|
94
|
+
|
|
95
|
+
[City, Date] — [Hook sentence: what happened and why it matters]
|
|
96
|
+
|
|
97
|
+
[Paragraph 1: The news — who, what, when, where]
|
|
98
|
+
|
|
99
|
+
[Paragraph 2: The why — problem being solved, backstory, unique approach]
|
|
100
|
+
|
|
101
|
+
[Paragraph 3: A quote from the founder]
|
|
102
|
+
"[Quote that adds voice, not just restates facts]" — [Name], [Title], [Company]
|
|
103
|
+
|
|
104
|
+
[Paragraph 4: Key features or data points — 3 max]
|
|
105
|
+
|
|
106
|
+
[Paragraph 5: Availability, pricing, platforms]
|
|
107
|
+
[App Name] is available on [iOS/Android/both] for [free/price]. Download at [App Store link].
|
|
108
|
+
|
|
109
|
+
###
|
|
110
|
+
|
|
111
|
+
About [Company]:
|
|
112
|
+
[2–3 sentences]
|
|
113
|
+
|
|
114
|
+
Media Contact:
|
|
115
|
+
[Name] | [email] | [phone optional]
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Pitching Journalists
|
|
119
|
+
|
|
120
|
+
### The Cold Pitch Email
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Subject: [App Name] — [your angle in 8 words]
|
|
124
|
+
e.g., "Habitica clone reached #1 Health with zero ad spend"
|
|
125
|
+
|
|
126
|
+
Hi [First name],
|
|
127
|
+
|
|
128
|
+
[1 sentence: why you're reaching out to them specifically]
|
|
129
|
+
e.g., "I read your piece on [recent article] — [App Name] is related."
|
|
130
|
+
|
|
131
|
+
[1 sentence: what the app does]
|
|
132
|
+
[1 sentence: the story angle / most interesting stat or fact]
|
|
133
|
+
[1 sentence: why now / why timely]
|
|
134
|
+
|
|
135
|
+
Happy to send a promo code, press kit, or get on a quick call.
|
|
136
|
+
|
|
137
|
+
[Your name]
|
|
138
|
+
[App Store link]
|
|
139
|
+
[Press kit link]
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Rules:**
|
|
143
|
+
- Max 5 sentences in the pitch
|
|
144
|
+
- Personalize the first line for each journalist — no mass blast
|
|
145
|
+
- Don't attach files — link to your press kit
|
|
146
|
+
- Send Tuesday–Thursday, 8–10am recipient's timezone
|
|
147
|
+
- Follow up once after 5 business days — then move on
|
|
148
|
+
|
|
149
|
+
### Finding the Right Journalists
|
|
150
|
+
|
|
151
|
+
1. Search the target publication for recent app reviews in your category
|
|
152
|
+
2. Note the byline — pitch that specific writer
|
|
153
|
+
3. Check their Twitter/X bio for DM preference
|
|
154
|
+
4. Use tools like Hunter.io for email guessing (format: first@publication.com)
|
|
155
|
+
|
|
156
|
+
## Embargo Strategy
|
|
157
|
+
|
|
158
|
+
For major launches, offer an embargo:
|
|
159
|
+
|
|
160
|
+
- Contact journalists 1–2 weeks before launch
|
|
161
|
+
- Offer exclusive access under embargo (story publishes on launch day)
|
|
162
|
+
- One journalist per tier (don't offer the same exclusive to two competing outlets)
|
|
163
|
+
- Provide TestFlight / Play beta access
|
|
164
|
+
|
|
165
|
+
Exclusives dramatically increase pickup from Tier 1 publications.
|
|
166
|
+
|
|
167
|
+
## Product Hunt Launch
|
|
168
|
+
|
|
169
|
+
| Step | When | Action |
|
|
170
|
+
|------|------|--------|
|
|
171
|
+
| Create coming soon | 2 weeks before | Enable "coming soon" to collect followers |
|
|
172
|
+
| Find a hunter | 1 week before | Ask an influential PH user to "hunt" you |
|
|
173
|
+
| Prepare assets | 3 days before | Gallery, tagline, description, first comment |
|
|
174
|
+
| Launch day | Tuesday–Thursday | Ship at 12:01am PST; all-day community engagement |
|
|
175
|
+
| Follow-up post | Launch + 1 week | Share results as a Show HN or maker story |
|
|
176
|
+
|
|
177
|
+
## Output Format
|
|
178
|
+
|
|
179
|
+
### PR Plan
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
Story angle: [one sentence]
|
|
183
|
+
|
|
184
|
+
Media targets:
|
|
185
|
+
Tier 1: [publication + journalist name]
|
|
186
|
+
Tier 2: [2–3 blogs/newsletters]
|
|
187
|
+
Tier 3: Product Hunt, Reddit r/[category], HN
|
|
188
|
+
|
|
189
|
+
Timeline:
|
|
190
|
+
T-14: Press kit ready, press release drafted
|
|
191
|
+
T-10: Embargo pitches sent to Tier 1
|
|
192
|
+
T-7: Follow-ups + Tier 2 pitches
|
|
193
|
+
T-0: Launch + Product Hunt + Tier 3 posts
|
|
194
|
+
T+3: Thank reporters who covered, share articles
|
|
195
|
+
|
|
196
|
+
Press kit: [link]
|
|
197
|
+
Press contact: [email]
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Related Skills
|
|
201
|
+
|
|
202
|
+
- `app-launch` — Full launch strategy (PR is one channel within it)
|
|
203
|
+
- `app-store-featured` — Press coverage supports Apple editorial consideration
|
|
204
|
+
- `ua-campaign` — Complement PR with paid UA on launch week
|