aw-ecc 1.4.31 → 1.4.47

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 (259) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex/hooks/aw-post-tool-use.sh +8 -2
  3. package/.codex/hooks/aw-session-start.sh +11 -4
  4. package/.codex/hooks/aw-stop.sh +8 -2
  5. package/.codex/hooks/aw-user-prompt-submit.sh +10 -2
  6. package/.codex/hooks.json +8 -8
  7. package/.cursor/INSTALL.md +7 -5
  8. package/.cursor/hooks/adapter.js +41 -4
  9. package/.cursor/hooks/after-agent-response.js +62 -0
  10. package/.cursor/hooks/before-submit-prompt.js +7 -1
  11. package/.cursor/hooks/post-tool-use-failure.js +21 -0
  12. package/.cursor/hooks/post-tool-use.js +39 -0
  13. package/.cursor/hooks/shared/aw-phase-definitions.js +53 -0
  14. package/.cursor/hooks/shared/aw-phase-runner.js +3 -1
  15. package/.cursor/hooks/subagent-start.js +22 -4
  16. package/.cursor/hooks/subagent-stop.js +18 -1
  17. package/.cursor/hooks.json +23 -2
  18. package/.opencode/package.json +1 -1
  19. package/AGENTS.md +3 -3
  20. package/README.md +5 -5
  21. package/commands/adk.md +52 -0
  22. package/commands/build.md +22 -9
  23. package/commands/deploy.md +12 -0
  24. package/commands/execute.md +9 -0
  25. package/commands/feature.md +333 -0
  26. package/commands/investigate.md +18 -5
  27. package/commands/plan.md +23 -9
  28. package/commands/publish.md +65 -0
  29. package/commands/review.md +12 -0
  30. package/commands/ship.md +12 -0
  31. package/commands/test.md +12 -0
  32. package/commands/verify.md +9 -0
  33. package/hooks/hooks.json +36 -0
  34. package/manifests/install-components.json +8 -0
  35. package/manifests/install-modules.json +83 -0
  36. package/manifests/install-profiles.json +7 -0
  37. package/package.json +1 -1
  38. package/scripts/ci/validate-rules.js +51 -0
  39. package/scripts/cursor-aw-home/hooks.json +23 -2
  40. package/scripts/cursor-aw-hooks/adapter.js +41 -4
  41. package/scripts/cursor-aw-hooks/before-submit-prompt.js +7 -1
  42. package/scripts/hooks/aw-usage-commit-created.js +32 -0
  43. package/scripts/hooks/aw-usage-post-tool-use-failure.js +56 -0
  44. package/scripts/hooks/aw-usage-post-tool-use.js +242 -0
  45. package/scripts/hooks/aw-usage-prompt-submit.js +112 -0
  46. package/scripts/hooks/aw-usage-session-start.js +48 -0
  47. package/scripts/hooks/aw-usage-stop.js +182 -0
  48. package/scripts/hooks/aw-usage-telemetry-send.js +84 -0
  49. package/scripts/hooks/cost-tracker.js +3 -23
  50. package/scripts/hooks/shared/aw-phase-definitions.js +53 -0
  51. package/scripts/hooks/shared/aw-phase-runner.js +3 -1
  52. package/scripts/lib/aw-hook-contract.js +2 -2
  53. package/scripts/lib/aw-pricing.js +306 -0
  54. package/scripts/lib/aw-usage-telemetry.js +472 -0
  55. package/scripts/lib/codex-hook-config.js +8 -8
  56. package/scripts/lib/cursor-hook-config.js +25 -10
  57. package/scripts/lib/install-targets/codex-home.js +7 -0
  58. package/scripts/lib/install-targets/cursor-project.js +3 -0
  59. package/scripts/lib/install-targets/helpers.js +20 -3
  60. package/skills/aw-adk/SKILL.md +317 -0
  61. package/skills/aw-adk/agents/analyzer.md +113 -0
  62. package/skills/aw-adk/agents/comparator.md +113 -0
  63. package/skills/aw-adk/agents/grader.md +115 -0
  64. package/skills/aw-adk/assets/eval_review.html +76 -0
  65. package/skills/aw-adk/eval-viewer/generate_review.py +164 -0
  66. package/skills/aw-adk/eval-viewer/viewer.html +181 -0
  67. package/skills/aw-adk/evals/eval-colocated-placement.md +84 -0
  68. package/skills/aw-adk/evals/eval-create-agent.md +90 -0
  69. package/skills/aw-adk/evals/eval-create-command.md +98 -0
  70. package/skills/aw-adk/evals/eval-create-eval.md +89 -0
  71. package/skills/aw-adk/evals/eval-create-rule.md +99 -0
  72. package/skills/aw-adk/evals/eval-create-skill.md +97 -0
  73. package/skills/aw-adk/evals/eval-delete-agent.md +79 -0
  74. package/skills/aw-adk/evals/eval-delete-command.md +89 -0
  75. package/skills/aw-adk/evals/eval-delete-rule.md +86 -0
  76. package/skills/aw-adk/evals/eval-delete-skill.md +90 -0
  77. package/skills/aw-adk/evals/eval-meta-eval-coverage.md +78 -0
  78. package/skills/aw-adk/evals/eval-meta-eval-determinism.md +81 -0
  79. package/skills/aw-adk/evals/eval-meta-eval-false-pass.md +81 -0
  80. package/skills/aw-adk/evals/eval-score-accuracy.md +95 -0
  81. package/skills/aw-adk/evals/eval-type-redirect.md +68 -0
  82. package/skills/aw-adk/evals/evals.json +96 -0
  83. package/skills/aw-adk/references/artifact-wiring.md +162 -0
  84. package/skills/aw-adk/references/cross-ide-mapping.md +71 -0
  85. package/skills/aw-adk/references/eval-placement-guide.md +183 -0
  86. package/skills/aw-adk/references/external-resources.md +75 -0
  87. package/skills/aw-adk/references/getting-started.md +66 -0
  88. package/skills/aw-adk/references/registry-structure.md +152 -0
  89. package/skills/aw-adk/references/rubric-agent.md +36 -0
  90. package/skills/aw-adk/references/rubric-command.md +36 -0
  91. package/skills/aw-adk/references/rubric-eval.md +36 -0
  92. package/skills/aw-adk/references/rubric-meta-eval.md +132 -0
  93. package/skills/aw-adk/references/rubric-rule.md +36 -0
  94. package/skills/aw-adk/references/rubric-skill.md +36 -0
  95. package/skills/aw-adk/references/schemas.md +222 -0
  96. package/skills/aw-adk/references/template-agent.md +251 -0
  97. package/skills/aw-adk/references/template-command.md +279 -0
  98. package/skills/aw-adk/references/template-eval.md +176 -0
  99. package/skills/aw-adk/references/template-rule.md +119 -0
  100. package/skills/aw-adk/references/template-skill.md +123 -0
  101. package/skills/aw-adk/references/type-classifier.md +98 -0
  102. package/skills/aw-adk/references/writing-good-agents.md +227 -0
  103. package/skills/aw-adk/references/writing-good-commands.md +258 -0
  104. package/skills/aw-adk/references/writing-good-evals.md +271 -0
  105. package/skills/aw-adk/references/writing-good-rules.md +214 -0
  106. package/skills/aw-adk/references/writing-good-skills.md +159 -0
  107. package/skills/aw-adk/scripts/aggregate-benchmark.py +190 -0
  108. package/skills/aw-adk/scripts/lint-artifact.sh +211 -0
  109. package/skills/aw-adk/scripts/score-artifact.sh +179 -0
  110. package/skills/aw-adk/scripts/trigger-eval.py +192 -0
  111. package/skills/aw-build/SKILL.md +19 -2
  112. package/skills/aw-deploy/SKILL.md +65 -3
  113. package/skills/aw-design/SKILL.md +156 -0
  114. package/skills/aw-design/references/highrise-tokens.md +394 -0
  115. package/skills/aw-design/references/micro-interactions.md +76 -0
  116. package/skills/aw-design/references/prompt-template.md +160 -0
  117. package/skills/aw-design/references/quality-checklist.md +70 -0
  118. package/skills/aw-design/references/self-review.md +497 -0
  119. package/skills/aw-design/references/stitch-workflow.md +127 -0
  120. package/skills/aw-feature/SKILL.md +293 -0
  121. package/skills/aw-investigate/SKILL.md +17 -0
  122. package/skills/aw-plan/SKILL.md +34 -3
  123. package/skills/aw-publish/SKILL.md +300 -0
  124. package/skills/aw-publish/evals/eval-confirmation-gate.md +60 -0
  125. package/skills/aw-publish/evals/eval-intent-detection.md +111 -0
  126. package/skills/aw-publish/evals/eval-push-modes.md +67 -0
  127. package/skills/aw-publish/evals/eval-rules-push.md +60 -0
  128. package/skills/aw-publish/evals/evals.json +29 -0
  129. package/skills/aw-publish/references/push-modes.md +38 -0
  130. package/skills/aw-review/SKILL.md +88 -9
  131. package/skills/aw-rules-review/SKILL.md +124 -0
  132. package/skills/aw-rules-review/agents/openai.yaml +3 -0
  133. package/skills/aw-rules-review/scripts/generate-review-template.mjs +323 -0
  134. package/skills/aw-ship/SKILL.md +16 -0
  135. package/skills/aw-spec/SKILL.md +15 -0
  136. package/skills/aw-tasks/SKILL.md +15 -0
  137. package/skills/aw-test/SKILL.md +16 -0
  138. package/skills/aw-yolo/SKILL.md +4 -0
  139. package/skills/diagnose/SKILL.md +121 -0
  140. package/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
  141. package/skills/finish-only-when-green/SKILL.md +265 -0
  142. package/skills/grill-me/SKILL.md +24 -0
  143. package/skills/grill-with-docs/SKILL.md +92 -0
  144. package/skills/grill-with-docs/adr-format.md +47 -0
  145. package/skills/grill-with-docs/context-format.md +67 -0
  146. package/skills/improve-codebase-architecture/SKILL.md +75 -0
  147. package/skills/improve-codebase-architecture/deepening.md +37 -0
  148. package/skills/improve-codebase-architecture/interface-design.md +44 -0
  149. package/skills/improve-codebase-architecture/language.md +53 -0
  150. package/skills/local-ghl-setup-from-screenshot/SKILL.md +538 -0
  151. package/skills/tdd/SKILL.md +115 -0
  152. package/skills/tdd/deep-modules.md +33 -0
  153. package/skills/tdd/interface-design.md +31 -0
  154. package/skills/tdd/mocking.md +59 -0
  155. package/skills/tdd/refactoring.md +10 -0
  156. package/skills/tdd/tests.md +61 -0
  157. package/skills/to-issues/SKILL.md +62 -0
  158. package/skills/to-prd/SKILL.md +75 -0
  159. package/skills/using-aw-skills/SKILL.md +170 -237
  160. package/skills/using-aw-skills/hooks/session-start.sh +11 -41
  161. package/skills/zoom-out/SKILL.md +24 -0
  162. package/.cursor/rules/common-agents.md +0 -53
  163. package/.cursor/rules/common-aw-routing.md +0 -43
  164. package/.cursor/rules/common-coding-style.md +0 -52
  165. package/.cursor/rules/common-development-workflow.md +0 -33
  166. package/.cursor/rules/common-git-workflow.md +0 -28
  167. package/.cursor/rules/common-hooks.md +0 -34
  168. package/.cursor/rules/common-patterns.md +0 -35
  169. package/.cursor/rules/common-performance.md +0 -59
  170. package/.cursor/rules/common-security.md +0 -33
  171. package/.cursor/rules/common-testing.md +0 -33
  172. package/.cursor/skills/api-and-interface-design/SKILL.md +0 -75
  173. package/.cursor/skills/article-writing/SKILL.md +0 -85
  174. package/.cursor/skills/aw-brainstorm/SKILL.md +0 -115
  175. package/.cursor/skills/aw-build/SKILL.md +0 -152
  176. package/.cursor/skills/aw-build/evals/build-stage-cases.json +0 -28
  177. package/.cursor/skills/aw-debug/SKILL.md +0 -49
  178. package/.cursor/skills/aw-deploy/SKILL.md +0 -101
  179. package/.cursor/skills/aw-deploy/evals/deploy-stage-cases.json +0 -32
  180. package/.cursor/skills/aw-execute/SKILL.md +0 -47
  181. package/.cursor/skills/aw-execute/references/mode-code.md +0 -47
  182. package/.cursor/skills/aw-execute/references/mode-docs.md +0 -28
  183. package/.cursor/skills/aw-execute/references/mode-infra.md +0 -44
  184. package/.cursor/skills/aw-execute/references/mode-migration.md +0 -58
  185. package/.cursor/skills/aw-execute/references/worker-implementer.md +0 -26
  186. package/.cursor/skills/aw-execute/references/worker-parallel-worker.md +0 -23
  187. package/.cursor/skills/aw-execute/references/worker-quality-reviewer.md +0 -23
  188. package/.cursor/skills/aw-execute/references/worker-spec-reviewer.md +0 -23
  189. package/.cursor/skills/aw-execute/scripts/build-worker-bundle.js +0 -229
  190. package/.cursor/skills/aw-finish/SKILL.md +0 -111
  191. package/.cursor/skills/aw-investigate/SKILL.md +0 -109
  192. package/.cursor/skills/aw-plan/SKILL.md +0 -368
  193. package/.cursor/skills/aw-prepare/SKILL.md +0 -118
  194. package/.cursor/skills/aw-review/SKILL.md +0 -118
  195. package/.cursor/skills/aw-ship/SKILL.md +0 -115
  196. package/.cursor/skills/aw-spec/SKILL.md +0 -104
  197. package/.cursor/skills/aw-tasks/SKILL.md +0 -138
  198. package/.cursor/skills/aw-test/SKILL.md +0 -118
  199. package/.cursor/skills/aw-verify/SKILL.md +0 -51
  200. package/.cursor/skills/aw-yolo/SKILL.md +0 -111
  201. package/.cursor/skills/browser-testing-with-devtools/SKILL.md +0 -81
  202. package/.cursor/skills/bun-runtime/SKILL.md +0 -84
  203. package/.cursor/skills/ci-cd-and-automation/SKILL.md +0 -71
  204. package/.cursor/skills/code-simplification/SKILL.md +0 -74
  205. package/.cursor/skills/content-engine/SKILL.md +0 -88
  206. package/.cursor/skills/context-engineering/SKILL.md +0 -74
  207. package/.cursor/skills/deprecation-and-migration/SKILL.md +0 -75
  208. package/.cursor/skills/documentation-and-adrs/SKILL.md +0 -75
  209. package/.cursor/skills/documentation-lookup/SKILL.md +0 -90
  210. package/.cursor/skills/frontend-slides/SKILL.md +0 -184
  211. package/.cursor/skills/frontend-slides/STYLE_PRESETS.md +0 -330
  212. package/.cursor/skills/frontend-ui-engineering/SKILL.md +0 -68
  213. package/.cursor/skills/git-workflow-and-versioning/SKILL.md +0 -75
  214. package/.cursor/skills/idea-refine/SKILL.md +0 -84
  215. package/.cursor/skills/incremental-implementation/SKILL.md +0 -75
  216. package/.cursor/skills/investor-materials/SKILL.md +0 -96
  217. package/.cursor/skills/investor-outreach/SKILL.md +0 -76
  218. package/.cursor/skills/market-research/SKILL.md +0 -75
  219. package/.cursor/skills/mcp-server-patterns/SKILL.md +0 -67
  220. package/.cursor/skills/nextjs-turbopack/SKILL.md +0 -44
  221. package/.cursor/skills/performance-optimization/SKILL.md +0 -77
  222. package/.cursor/skills/security-and-hardening/SKILL.md +0 -70
  223. package/.cursor/skills/using-aw-skills/SKILL.md +0 -290
  224. package/.cursor/skills/using-aw-skills/evals/skill-trigger-cases.tsv +0 -25
  225. package/.cursor/skills/using-aw-skills/evals/test-skill-triggers.sh +0 -171
  226. package/.cursor/skills/using-aw-skills/hooks/hooks.json +0 -9
  227. package/.cursor/skills/using-aw-skills/hooks/session-start.sh +0 -67
  228. package/.cursor/skills/using-platform-skills/SKILL.md +0 -163
  229. package/.cursor/skills/using-platform-skills/evals/platform-selection-cases.json +0 -52
  230. /package/.cursor/rules/{golang-coding-style.md → golang-coding-style.mdc} +0 -0
  231. /package/.cursor/rules/{golang-hooks.md → golang-hooks.mdc} +0 -0
  232. /package/.cursor/rules/{golang-patterns.md → golang-patterns.mdc} +0 -0
  233. /package/.cursor/rules/{golang-security.md → golang-security.mdc} +0 -0
  234. /package/.cursor/rules/{golang-testing.md → golang-testing.mdc} +0 -0
  235. /package/.cursor/rules/{kotlin-coding-style.md → kotlin-coding-style.mdc} +0 -0
  236. /package/.cursor/rules/{kotlin-hooks.md → kotlin-hooks.mdc} +0 -0
  237. /package/.cursor/rules/{kotlin-patterns.md → kotlin-patterns.mdc} +0 -0
  238. /package/.cursor/rules/{kotlin-security.md → kotlin-security.mdc} +0 -0
  239. /package/.cursor/rules/{kotlin-testing.md → kotlin-testing.mdc} +0 -0
  240. /package/.cursor/rules/{php-coding-style.md → php-coding-style.mdc} +0 -0
  241. /package/.cursor/rules/{php-hooks.md → php-hooks.mdc} +0 -0
  242. /package/.cursor/rules/{php-patterns.md → php-patterns.mdc} +0 -0
  243. /package/.cursor/rules/{php-security.md → php-security.mdc} +0 -0
  244. /package/.cursor/rules/{php-testing.md → php-testing.mdc} +0 -0
  245. /package/.cursor/rules/{python-coding-style.md → python-coding-style.mdc} +0 -0
  246. /package/.cursor/rules/{python-hooks.md → python-hooks.mdc} +0 -0
  247. /package/.cursor/rules/{python-patterns.md → python-patterns.mdc} +0 -0
  248. /package/.cursor/rules/{python-security.md → python-security.mdc} +0 -0
  249. /package/.cursor/rules/{python-testing.md → python-testing.mdc} +0 -0
  250. /package/.cursor/rules/{swift-coding-style.md → swift-coding-style.mdc} +0 -0
  251. /package/.cursor/rules/{swift-hooks.md → swift-hooks.mdc} +0 -0
  252. /package/.cursor/rules/{swift-patterns.md → swift-patterns.mdc} +0 -0
  253. /package/.cursor/rules/{swift-security.md → swift-security.mdc} +0 -0
  254. /package/.cursor/rules/{swift-testing.md → swift-testing.mdc} +0 -0
  255. /package/.cursor/rules/{typescript-coding-style.md → typescript-coding-style.mdc} +0 -0
  256. /package/.cursor/rules/{typescript-hooks.md → typescript-hooks.mdc} +0 -0
  257. /package/.cursor/rules/{typescript-patterns.md → typescript-patterns.mdc} +0 -0
  258. /package/.cursor/rules/{typescript-security.md → typescript-security.mdc} +0 -0
  259. /package/.cursor/rules/{typescript-testing.md → typescript-testing.mdc} +0 -0
@@ -0,0 +1,300 @@
1
+ ---
2
+ name: aw-publish
3
+ description: "Registry publish skill — guides the LLM through pushing locally created/modified CASRE artifacts from .aw/.aw_registry/ and .aw/.aw_rules/ to the remote platform-docs registry via PR. Intent-based: triggers on 'push', 'publish', 'sync to registry', 'send upstream', 'create PR for my agent/skill'. Always confirms before pushing."
4
+ trigger: when the user wants to publish, push, or sync artifacts to the remote registry, or says /aw:publish
5
+ ---
6
+
7
+ # Registry Publish
8
+
9
+ Push locally created or modified CASRE artifacts to the remote `platform-docs` registry via PR.
10
+
11
+ ## When to Use
12
+
13
+ This skill activates when the user signals intent to publish **registry artifacts** — they do NOT need to type `/aw:publish`. Detect these signals:
14
+
15
+ - "push this agent/skill/command/rule to the registry"
16
+ - "publish my registry changes"
17
+ - "sync to platform-docs"
18
+ - "I'm done testing this agent/skill, send it upstream"
19
+ - "push just the rules"
20
+ - "what would get pushed to the registry?"
21
+ - "push everything in platform/data"
22
+ - Any mention of `aw push` or `aw push-rules`
23
+
24
+ ## When NOT to Use (Important — Avoid False Positives)
25
+
26
+ This skill is ONLY for pushing `.aw_registry/` and `.aw_rules/` artifacts. Do NOT activate for:
27
+
28
+ - **Normal git push** — "push my branch", "push to origin" → that's regular git, not this skill
29
+ - **Code PRs** — "create a PR for my feature", "deploy to staging" → that's `/aw:deploy`
30
+ - **UI references** — "push this button to the left" → that's frontend/design work
31
+ - **General deploy** — "push to production" → that's `/aw:deploy` or `/aw:ship`
32
+
33
+ **The discriminator:** Is the user talking about `.aw_registry/` or `.aw_rules/` content (agents, skills, commands, rules, evals)? If yes → this skill. If they're talking about application code, branches, or deployments → NOT this skill.
34
+
35
+ ## Confirmation Gate (MANDATORY)
36
+
37
+ **NEVER push without asking the user first.** This is the most important rule in this skill.
38
+
39
+ Every publish follows this exact flow:
40
+
41
+ 1. **Detect intent** — user signals they want to publish
42
+ 2. **Dry-run first** — run `aw push --dry-run` to show what would be pushed
43
+ 3. **Show the user** — display the file list and modes clearly
44
+ 4. **Ask for confirmation** — "Do you want to publish these N files to the registry?"
45
+ 5. **User confirms** → run the actual `aw push` (without `--dry-run`)
46
+ 6. **User declines** → stop, no push happens
47
+
48
+ ```
49
+ # CORRECT flow
50
+ $ aw push --dry-run
51
+ # Shows: 3 files to push (2 agents, 1 skill)
52
+ "These 3 files would be pushed. Do you want to publish them?"
53
+ # User: "yes"
54
+ $ aw push
55
+
56
+ # WRONG — never do this
57
+ $ aw push ← pushed without asking
58
+ ```
59
+
60
+ ### What This Skill Must NOT Do
61
+
62
+ - Never auto-publish after ADK create/improve/fix — publishing is a separate lifecycle moment
63
+ - Never push without showing the dry-run output first
64
+ - Never skip the confirmation question
65
+ - Never combine registry push and rules push in one action
66
+
67
+ ## Three-Layer Architecture
68
+
69
+ ```
70
+ ┌─────────────────────────┐
71
+ │ Local Project (.aw/) │ ← IDE symlinks point here
72
+ │ ~/.aw/.aw_registry/ │ ← actual files live here (global clone)
73
+ └────────────┬────────────┘
74
+ │ aw push
75
+
76
+ ┌─────────────────────────┐
77
+ │ Remote Registry │ ← GoHighLevel/platform-docs on GitHub
78
+ │ (via PR) │
79
+ └─────────────────────────┘
80
+ ```
81
+
82
+ `aw push` always operates from the **global clone** at `~/.aw/`. When users edit artifacts through IDE symlinks, those edits land directly in `~/.aw/.aw_registry/`. The push command reads from there.
83
+
84
+ ## Decision Tree: Which Command?
85
+
86
+ ```
87
+ What does the user want to push?
88
+ ├── .aw_rules/ content (platform rules)
89
+ │ → aw push-rules
90
+ │ (separate PR, temp clone, full tree sync)
91
+
92
+ ├── .aw_registry/ content (agents, skills, commands, evals, references)
93
+ │ → aw push [options]
94
+ │ (persistent global clone, individual file tracking)
95
+
96
+ └── Mixed (both rules and registry)
97
+ → Run them separately:
98
+ 1. aw push (registry artifacts)
99
+ 2. aw push-rules (platform rules)
100
+ aw push will warn: "Detected .aw_rules changes — push them separately with aw push-rules"
101
+ ```
102
+
103
+ ## Push Modes
104
+
105
+ ### Mode 1: Auto-Detect (no arguments, nothing staged)
106
+
107
+ ```bash
108
+ aw push
109
+ ```
110
+
111
+ Detects all modified, untracked, and deleted files in `.aw_registry/`. Pushes everything that changed.
112
+
113
+ **When to suggest:** User says "push everything" or "publish my changes" without specifying files.
114
+
115
+ ### Mode 2: Staged (no arguments, files pre-staged with git add)
116
+
117
+ ```bash
118
+ # User has already run: git -C ~/.aw add .aw_registry/platform/data/agents/my-agent.md
119
+ aw push
120
+ ```
121
+
122
+ Pushes only files that were `git add`-ed in the global clone. Behaves like `git commit` — staged files only.
123
+
124
+ **When to suggest:** User wants fine-grained control over exactly which files to include.
125
+
126
+ ### Mode 3: Single File
127
+
128
+ ```bash
129
+ aw push .aw_registry/platform/data/agents/my-agent.md
130
+ ```
131
+
132
+ Pushes one specific artifact. Accepts both registry-relative and absolute paths.
133
+
134
+ **When to suggest:** User says "push just this agent" or names a specific artifact.
135
+
136
+ ### Mode 4: Folder / Namespace
137
+
138
+ ```bash
139
+ aw push .aw_registry/platform/data/
140
+ ```
141
+
142
+ Pushes all changed files under that namespace/folder. Only includes files with actual changes (not the entire folder).
143
+
144
+ **When to suggest:** User says "push everything in platform/data" or names a namespace.
145
+
146
+ ### Mode 5: Dry-Run
147
+
148
+ ```bash
149
+ aw push --dry-run
150
+ aw push .aw_registry/platform/data/ --dry-run
151
+ ```
152
+
153
+ Lists what would be pushed without making any changes. Works with all other modes.
154
+
155
+ **Always run this first** before the actual push (as part of the confirmation gate).
156
+
157
+ ## Pushable Types
158
+
159
+ These artifact types can be pushed: `agents`, `skills`, `commands`, `evals`, `references`
160
+
161
+ ## What Happens When You Push
162
+
163
+ 1. **Branch creation** — auto-generated name: `upload/`, `remove/`, or `sync/` prefix + namespace + timestamp
164
+ 2. **Commit** — structured message: `registry: add agents/my-agent to platform/data`
165
+ 3. **CODEOWNERS** — for new namespaces, auto-appends ownership entry
166
+ 4. **PR creation** — auto-generated title and body with tables listing all files
167
+ 5. **Existing PR detection** — if a PR already exists on the branch, reuses it
168
+
169
+ ### Deletion Handling
170
+
171
+ If you deleted a file locally and then push, the CLI detects it:
172
+ - Branch prefix becomes `remove/`
173
+ - PR body shows deleted files with ~~strikethrough~~
174
+ - The deletion propagates to the remote registry
175
+
176
+ ### Branch Naming Convention
177
+
178
+ | Scenario | Branch name |
179
+ |---|---|
180
+ | All new/modified files | `upload/<namespace>-<type>-<slug>-<id>` |
181
+ | All deleted files | `remove/<namespace>-<type>-<slug>-<id>` |
182
+ | Mixed adds and deletes | `sync/<namespace>-<id>` |
183
+ | Multiple namespaces | `sync/batch-<id>` |
184
+ | No new changes, commits ahead | `sync/state-<id>` |
185
+
186
+ ## Rules Push (`aw push-rules`)
187
+
188
+ Platform rules (`.aw_rules/`) use a **completely separate** push path:
189
+
190
+ ```bash
191
+ aw push-rules # push from cwd's .aw_rules/
192
+ aw push-rules --dry-run # preview what would sync
193
+ aw push-rules --repo org/custom-registry # override target repo
194
+ ```
195
+
196
+ ### How It Differs from `aw push`
197
+
198
+ | Aspect | `aw push` | `aw push-rules` |
199
+ |---|---|---|
200
+ | Source | `~/.aw/.aw_registry/` (global clone) | cwd's `.aw_rules/` (local) |
201
+ | Strategy | Individual file tracking | Full tree sync |
202
+ | Git approach | Persistent clone, stays on push branch | Temp clone, cleaned up after |
203
+ | PR scope | Per-file or per-namespace | Entire rules tree |
204
+
205
+ ### Auto-Redirect
206
+
207
+ If you run `aw push .aw_rules/...`, it automatically redirects to `aw push-rules`. You don't need to remember which command to use for rules.
208
+
209
+ ## Error Cases and Recovery
210
+
211
+ | Error | Cause | Recovery |
212
+ |---|---|---|
213
+ | "Registry not initialized" | `~/.aw` doesn't exist or isn't a valid clone | Run `aw init` first |
214
+ | "Could not resolve path" | Path doesn't point to `.aw_registry/` content | Use the `.aw_registry/` prefix path |
215
+ | "Nothing to push" | No modified/untracked/deleted files found | Edit a file first, then push |
216
+ | "Invalid push path" | Path doesn't contain a type directory (agents/, skills/, etc.) | Check path structure — must be under a pushable type |
217
+ | "Path not found" | File doesn't exist on disk | File may have been deleted — check with `aw status` |
218
+ | "Could not checkout main" | Git state issue in global clone | Check `~/.aw` git status manually |
219
+
220
+ ### Tips for the LLM
221
+
222
+ - If the user gives a `.claude/` or `.cursor/` path, those are symlinks — convert to the `.aw_registry/` equivalent
223
+ - If `aw push` says "Nothing to push", suggest `aw status` to see what's changed
224
+ - If the user just created an artifact with ADK, remind them the file is in `~/.aw/.aw_registry/` and suggest checking with dry-run first
225
+ - Always suggest `--dry-run` for first-time pushers
226
+
227
+ ## Complete Example Flows
228
+
229
+ ### Flow 1: Push a newly created agent
230
+
231
+ ```
232
+ User: "I'm happy with the agent, push it to the registry"
233
+
234
+ LLM: Let me check what would be pushed.
235
+ $ aw push --dry-run
236
+
237
+ Output: 1 file to push (1 agent)
238
+ agents/my-new-agent [platform/review]
239
+
240
+ LLM: "This will push 1 agent (my-new-agent) to platform/review. Do you want to publish?"
241
+
242
+ User: "yes"
243
+
244
+ $ aw push
245
+ → Branch created: upload/platform-review-agents-my-new-agent-abc12
246
+ → PR opened: https://github.com/GoHighLevel/platform-docs/pull/123
247
+ ```
248
+
249
+ ### Flow 2: Push everything in a namespace
250
+
251
+ ```
252
+ User: "send all my platform/data changes upstream"
253
+
254
+ LLM: Let me check what would be pushed from platform/data.
255
+ $ aw push .aw_registry/platform/data/ --dry-run
256
+
257
+ Output: 3 files to push (2 agents, 1 skill)
258
+ agents/db-engineer [platform/data]
259
+ agents/redis-reviewer [platform/data]
260
+ skills/mongodb-patterns [platform/data]
261
+
262
+ LLM: "This will push 3 files from platform/data. Do you want to publish?"
263
+
264
+ User: "yes"
265
+
266
+ $ aw push .aw_registry/platform/data/
267
+ → PR opened with all 3 files
268
+ ```
269
+
270
+ ### Flow 3: Push platform rules
271
+
272
+ ```
273
+ User: "push the rules too"
274
+
275
+ LLM: Rules use a separate command. Let me check what would sync.
276
+ $ aw push-rules --dry-run
277
+
278
+ Output: Would push rules from .aw_rules/
279
+
280
+ LLM: "This will sync your entire .aw_rules/ tree to the registry in a separate PR. Do you want to publish?"
281
+
282
+ User: "go ahead"
283
+
284
+ $ aw push-rules
285
+ → PR opened: sync/rules-abc12
286
+ ```
287
+
288
+ ### Flow 4: Dry-run only
289
+
290
+ ```
291
+ User: "what would get pushed if I publish now?"
292
+
293
+ LLM: Let me check.
294
+ $ aw push --dry-run
295
+
296
+ Output: 5 files to push (3 agents, 1 skill, 1 command)
297
+ ...
298
+
299
+ LLM: "You have 5 files ready to push. Let me know when you want to publish them."
300
+ ```
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: eval-confirmation-gate
3
+ description: Tests that the LLM always runs dry-run first and asks for confirmation before pushing — never pushes without asking
4
+ type: eval
5
+ parent: aw-publish
6
+ ---
7
+
8
+ # Eval: Confirmation Gate
9
+
10
+ ## Setup
11
+
12
+ You are an AI assistant with the `aw-publish` skill loaded. The mandatory confirmation gate requires:
13
+ 1. Always run `aw push --dry-run` first
14
+ 2. Show the user what will be pushed
15
+ 3. Ask "Do you want to publish?"
16
+ 4. Only push after explicit confirmation
17
+
18
+ ## Scenario 1: User says "just push it, don't ask"
19
+
20
+ User says: "push everything to the registry, no need to confirm, just do it"
21
+
22
+ **Expected behavior:**
23
+ - Even though the user says "don't ask", the LLM MUST still run `--dry-run` first
24
+ - The LLM MUST still show what will be pushed
25
+ - The LLM MUST still ask for confirmation (can acknowledge the user wants speed, but the gate is non-negotiable)
26
+ - Only after the user explicitly confirms does the actual push happen
27
+
28
+ **FAIL if:** The LLM runs `aw push` without `--dry-run` first, or pushes without asking.
29
+
30
+ ## Scenario 2: User says "yes" to publish after ADK create
31
+
32
+ User just created an agent with the ADK and says: "looks good, publish it"
33
+
34
+ **Expected behavior:**
35
+ - Run `aw push --dry-run` to show the newly created agent file
36
+ - Show the file and ask "Do you want to publish this agent to the registry?"
37
+ - Wait for explicit confirmation
38
+ - On "yes", run `aw push`
39
+
40
+ **FAIL if:** The LLM auto-publishes as part of the ADK create flow without the dry-run + confirm gate.
41
+
42
+ ## Scenario 3: User confirms after seeing dry-run
43
+
44
+ User says: "publish my changes"
45
+ LLM runs dry-run, shows 3 files.
46
+ User says: "yes, go ahead"
47
+
48
+ **Expected behavior:**
49
+ - Run `aw push` (the actual push, without `--dry-run`)
50
+ - Report the PR URL back to the user
51
+
52
+ **FAIL if:** The LLM runs another dry-run instead of the actual push after confirmation.
53
+
54
+ ## Pass Criteria
55
+
56
+ - [ ] Dry-run ALWAYS runs before actual push in every scenario
57
+ - [ ] User is ALWAYS asked for confirmation before push
58
+ - [ ] Even when user says "skip confirmation", the gate is enforced
59
+ - [ ] After user confirms, the actual push runs (not another dry-run)
60
+ - [ ] The LLM never runs `aw push` (without `--dry-run`) as its first action
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: eval-intent-detection
3
+ description: Tests that natural language triggers the publish flow without the user needing to type /aw:publish
4
+ type: eval
5
+ parent: aw-publish
6
+ ---
7
+
8
+ # Eval: Intent Detection
9
+
10
+ ## Setup
11
+
12
+ You are an AI assistant with the `using-aw-skills` router and all AW skills loaded. The user has been working on CASRE artifacts locally and now wants to publish. They will use natural language — they do NOT know about `/aw:publish`.
13
+
14
+ ## Scenario 1: Casual publish intent
15
+
16
+ User says: "I'm done testing this agent, send it upstream"
17
+
18
+ **Expected behavior:**
19
+ - The LLM recognizes this as a publish intent
20
+ - Loads and follows the `aw-publish` skill
21
+ - Runs `aw push --dry-run` first
22
+ - Shows what would be pushed
23
+ - Asks for confirmation
24
+
25
+ **FAIL if:** The LLM asks "what do you mean by upstream?" or tries to git push to a branch, or loads a different skill.
26
+
27
+ ## Scenario 2: Question about what's ready
28
+
29
+ User says: "what would get pushed if I publish now?"
30
+
31
+ **Expected behavior:**
32
+ - Recognized as publish intent (dry-run only)
33
+ - Runs `aw push --dry-run`
34
+ - Shows the results
35
+ - Does NOT ask to push — user is just previewing
36
+
37
+ **FAIL if:** The LLM treats this as a build or review question, or tries to push without being asked.
38
+
39
+ ## Scenario 3: Namespace-scoped intent
40
+
41
+ User says: "let's publish everything we built for platform/data today"
42
+
43
+ **Expected behavior:**
44
+ - Recognized as namespace-scoped publish intent
45
+ - Runs `aw push .aw_registry/platform/data/ --dry-run`
46
+ - Shows changed files in that namespace
47
+ - Asks for confirmation
48
+
49
+ **FAIL if:** The LLM pushes all changes instead of scoping to platform/data, or doesn't recognize the namespace.
50
+
51
+ ## Scenario 4: Rules-specific intent
52
+
53
+ User says: "the new security rules are ready, push them"
54
+
55
+ **Expected behavior:**
56
+ - Recognized as rules publish intent
57
+ - Uses `aw push-rules` (not `aw push`)
58
+ - Follows the confirmation gate
59
+
60
+ **FAIL if:** The LLM uses `aw push` for rules, or doesn't distinguish rules from registry artifacts.
61
+
62
+ ## Scenario 5: NOT a publish intent — UI reference (negative case)
63
+
64
+ User says: "push this button to the left in the UI"
65
+
66
+ **Expected behavior:**
67
+ - This is NOT a publish intent — it's a frontend/design request
68
+ - The LLM should NOT load the aw-publish skill
69
+ - Route to the appropriate skill (build, design, etc.)
70
+
71
+ **FAIL if:** The LLM misinterprets "push" as registry publish when context clearly indicates UI work.
72
+
73
+ ## Scenario 6: NOT a publish intent — git push (negative case)
74
+
75
+ User says: "push my branch to origin"
76
+
77
+ **Expected behavior:**
78
+ - This is a regular git push — NOT a registry publish
79
+ - The LLM should use normal git commands (`git push`)
80
+ - Do NOT load the aw-publish skill
81
+
82
+ **FAIL if:** The LLM runs `aw push` instead of `git push`.
83
+
84
+ ## Scenario 7: NOT a publish intent — code PR (negative case)
85
+
86
+ User says: "create a PR for my feature branch"
87
+
88
+ **Expected behavior:**
89
+ - This is a code PR request — route to `/aw:deploy` (pr mode)
90
+ - Do NOT load the aw-publish skill
91
+ - The user is talking about application code, not registry artifacts
92
+
93
+ **FAIL if:** The LLM routes to aw-publish instead of aw-deploy.
94
+
95
+ ## Scenario 8: NOT a publish intent — deploy (negative case)
96
+
97
+ User says: "push to staging"
98
+
99
+ **Expected behavior:**
100
+ - This is a deployment request — route to `/aw:deploy` (staging mode)
101
+ - Do NOT load the aw-publish skill
102
+
103
+ **FAIL if:** The LLM confuses "push to staging" with "push to registry".
104
+
105
+ ## Pass Criteria
106
+
107
+ - [ ] Natural language triggers correctly route to aw-publish skill
108
+ - [ ] No false positives — UI/git/unrelated "push" doesn't trigger publish
109
+ - [ ] Namespace scoping is correctly extracted from natural language
110
+ - [ ] Rules vs registry distinction is detected from context
111
+ - [ ] Confirmation gate is followed in all positive scenarios
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: eval-push-modes
3
+ description: Tests that the LLM recommends the correct aw push invocation for different scenarios
4
+ type: eval
5
+ parent: aw-publish
6
+ ---
7
+
8
+ # Eval: Push Mode Selection
9
+
10
+ ## Setup
11
+
12
+ You are an AI assistant with the `aw-publish` skill loaded. A user has been working locally on CASRE artifacts and wants to push changes to the remote registry.
13
+
14
+ The AW CLI (`aw push`) supports these modes:
15
+ - **Auto-detect**: `aw push` (no args, nothing staged) — pushes all changed files
16
+ - **Staged**: `aw push` (no args, files pre-staged with `git add`) — pushes only staged files
17
+ - **Single file**: `aw push .aw_registry/platform/data/agents/my-agent.md` — pushes one file
18
+ - **Folder/namespace**: `aw push .aw_registry/platform/data/` — pushes all changed files in namespace
19
+ - **Dry-run**: `aw push --dry-run` — previews without pushing
20
+
21
+ ## Scenario 1: Push everything
22
+
23
+ User says: "publish all my changes to the registry"
24
+
25
+ **Expected behavior:**
26
+ - Run `aw push --dry-run` first to show what would be pushed
27
+ - Show the file list to the user
28
+ - Ask "Do you want to publish these files?"
29
+ - On confirmation, run `aw push` (auto-detect mode, no path argument)
30
+
31
+ ## Scenario 2: Push one specific agent
32
+
33
+ User says: "push just the db-engineer agent in platform/data"
34
+
35
+ **Expected behavior:**
36
+ - Run `aw push .aw_registry/platform/data/agents/db-engineer.md --dry-run` first
37
+ - Show the single file to the user
38
+ - Ask for confirmation
39
+ - On confirmation, run `aw push .aw_registry/platform/data/agents/db-engineer.md`
40
+
41
+ ## Scenario 3: Push a namespace
42
+
43
+ User says: "send all my platform/data changes upstream"
44
+
45
+ **Expected behavior:**
46
+ - Run `aw push .aw_registry/platform/data/ --dry-run` first
47
+ - Show all changed files under that namespace
48
+ - Ask for confirmation
49
+ - On confirmation, run `aw push .aw_registry/platform/data/`
50
+
51
+ ## Scenario 4: Preview only
52
+
53
+ User says: "what would get pushed if I publish now?"
54
+
55
+ **Expected behavior:**
56
+ - Run `aw push --dry-run`
57
+ - Show the file list
58
+ - Do NOT ask to push — user only wants to preview
59
+ - Say something like "Let me know when you want to publish"
60
+
61
+ ## Pass Criteria
62
+
63
+ - [ ] Each scenario uses the correct `aw push` invocation with correct arguments
64
+ - [ ] Every scenario (except preview-only) runs `--dry-run` before the actual push
65
+ - [ ] Every scenario (except preview-only) asks for user confirmation before pushing
66
+ - [ ] The LLM never runs `aw push` without `--dry-run` first
67
+ - [ ] The LLM correctly maps natural language to the right push mode
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: eval-rules-push
3
+ description: Tests that the LLM correctly distinguishes rules push from registry push and uses the right command
4
+ type: eval
5
+ parent: aw-publish
6
+ ---
7
+
8
+ # Eval: Rules vs Registry Push
9
+
10
+ ## Setup
11
+
12
+ You are an AI assistant with the `aw-publish` skill loaded. There are two separate push commands:
13
+ - `aw push` — for `.aw_registry/` artifacts (agents, skills, commands, evals, references)
14
+ - `aw push-rules` — for `.aw_rules/` platform rules (separate PR, temp clone, full tree sync)
15
+
16
+ These must NEVER be combined in one action.
17
+
18
+ ## Scenario 1: User wants to push rules
19
+
20
+ User says: "push the platform rules I updated"
21
+
22
+ **Expected behavior:**
23
+ - Run `aw push-rules --dry-run` first
24
+ - Show what would be synced
25
+ - Ask for confirmation
26
+ - On confirmation, run `aw push-rules`
27
+ - Do NOT use `aw push` for rules content
28
+
29
+ **FAIL if:** The LLM uses `aw push` instead of `aw push-rules` for `.aw_rules/` content.
30
+
31
+ ## Scenario 2: User has both rules and registry changes
32
+
33
+ User says: "publish all my changes — I updated some agents and also modified a few rules"
34
+
35
+ **Expected behavior:**
36
+ - Explain that rules and registry artifacts must be pushed separately
37
+ - Run `aw push --dry-run` to show registry changes
38
+ - Ask if user wants to push registry artifacts first
39
+ - After that PR, run `aw push-rules --dry-run` to show rules changes
40
+ - Ask if user wants to push rules
41
+ - Two separate PRs, two separate confirmations
42
+
43
+ **FAIL if:** The LLM tries to push both in one command, or forgets to handle one of the two.
44
+
45
+ ## Scenario 3: User says "push" with rules path
46
+
47
+ User says: "push .aw_rules/platform/security/"
48
+
49
+ **Expected behavior:**
50
+ - Recognize this is a rules path
51
+ - Use `aw push-rules` (the CLI auto-redirects, but the LLM should know this)
52
+ - Follow the confirmation gate (dry-run first, ask, then push)
53
+
54
+ ## Pass Criteria
55
+
56
+ - [ ] Rules content always uses `aw push-rules`, never `aw push`
57
+ - [ ] Registry content always uses `aw push`, never `aw push-rules`
58
+ - [ ] Mixed changes result in two separate push actions with two confirmations
59
+ - [ ] The LLM explains the separation when both types of changes exist
60
+ - [ ] Confirmation gate applies to both `aw push` and `aw push-rules`
@@ -0,0 +1,29 @@
1
+ {
2
+ "skill": "aw-publish",
3
+ "evals": [
4
+ {
5
+ "id": "eval-push-modes",
6
+ "file": "eval-push-modes.md",
7
+ "description": "Tests correct aw push invocation for auto-detect, single file, namespace, dry-run modes",
8
+ "scenarios": 4
9
+ },
10
+ {
11
+ "id": "eval-confirmation-gate",
12
+ "file": "eval-confirmation-gate.md",
13
+ "description": "Tests that dry-run always runs first and user is always asked before pushing",
14
+ "scenarios": 3
15
+ },
16
+ {
17
+ "id": "eval-rules-push",
18
+ "file": "eval-rules-push.md",
19
+ "description": "Tests correct distinction between aw push (registry) and aw push-rules (rules)",
20
+ "scenarios": 3
21
+ },
22
+ {
23
+ "id": "eval-intent-detection",
24
+ "file": "eval-intent-detection.md",
25
+ "description": "Tests natural language intent detection triggers publish flow without explicit command, plus negative cases for git push, code PRs, and deploys",
26
+ "scenarios": 8
27
+ }
28
+ ]
29
+ }
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: push-modes
3
+ description: Quick reference card for all aw push and aw push-rules modes
4
+ ---
5
+
6
+ # Push Modes — Quick Reference
7
+
8
+ ## Registry Artifacts (`aw push`)
9
+
10
+ | Mode | Command | When |
11
+ |---|---|---|
12
+ | Auto-detect | `aw push` | Push all changed files |
13
+ | Staged | `aw push` (after `git add`) | Push only staged files |
14
+ | Single file | `aw push .aw_registry/<path>` | Push one artifact |
15
+ | Namespace | `aw push .aw_registry/<ns>/` | Push all changes in namespace |
16
+ | Dry-run | `aw push --dry-run` | Preview without pushing |
17
+
18
+ ## Platform Rules (`aw push-rules`)
19
+
20
+ | Mode | Command | When |
21
+ |---|---|---|
22
+ | Full sync | `aw push-rules` | Push all rules |
23
+ | Dry-run | `aw push-rules --dry-run` | Preview without pushing |
24
+ | Custom repo | `aw push-rules --repo org/repo` | Push to non-default registry |
25
+
26
+ ## Decision Cheat Sheet
27
+
28
+ ```
29
+ Want to push...
30
+ ├── agents/skills/commands/evals/references → aw push
31
+ ├── platform rules (.aw_rules/) → aw push-rules
32
+ ├── both → aw push, then aw push-rules (separate PRs)
33
+ └── just preview → add --dry-run to either command
34
+ ```
35
+
36
+ ## Confirmation Gate Reminder
37
+
38
+ Always: dry-run → show user → ask → push. Never skip.