You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Address PR review feedback on the suggested-skills section:
- Make useSkills the single source of truth for Added state by writing the
created skill into the React Query cache onSuccess (fixes stale Added that
survived a delete, and the lag that allowed a duplicate click)
- Track in-flight adds in a Set so concurrent adds keep independent pending
state and cannot be double-submitted
- Surface failures with toast.error instead of swallowing the rejection
- Extract the duplicated SkillTile into a shared workspace component
Also document the new BlockMeta.skills field in the add-block and
validate-integration skills (+ blocks AGENTS.md): skills must be grounded in
the block's tools.access and sourced from real online use cases, never invented.
-**`alsoIntegrations`** names other block types (e.g. `'slack'`, `'linear'`) referenced in the template prompt — helps the catalog surface this template when those blocks are selected
666
674
- Place the export **after** the main `{Service}Block` export, at the very bottom of the file
`skills` is an optional array of `SuggestedSkill` (`{ name, description, content }`) shown on the integration's detail page; users click **Add** to create the skill in their workspace. Aim for 3–5 skills for mainstream services, 2–3 for niche/low-level ones.
679
+
680
+
-**`name`** — kebab-case, lowercase letters/numbers/hyphens, ≤ 64 chars, unique within the integration, verb-led (e.g. `summarize-thread`).
681
+
-**`description`** — one line, ≤ 1024 chars: what it does and when to use it.
682
+
-**`content`** — markdown instructions for the agent (literal `\n` for newlines): a `# Title`, then `## Steps` and an output/guidance section. Keep ~600–2000 chars.
683
+
-**Ground every skill in operations the block actually exposes.** Cross-check each skill's steps against the block's `tools.access` list — never describe an action the integration cannot perform (e.g. "receive messages" when the block only sends).
684
+
-**Skills MUST be derived from real, popular use cases found online — never invented.** Before adding a skill, web-search the service's documented use cases (vendor use-case/solutions pages, official docs describing the workflow, reputable "top automations for X" articles). If you cannot source a use case as something people genuinely do with the service, do not add it. Do not hallucinate skills.
685
+
668
686
### Register in the blocksMeta object
669
687
670
688
After adding `{Service}BlockMeta` to the block file, register it in `apps/sim/blocks/registry.ts`:
@@ -888,6 +906,7 @@ All tool IDs referenced in `tools.access` and returned by `tools.config.tool` MU
888
906
-[ ] Outputs match tool outputs
889
907
-[ ] Block registered in `registry.ts` blocks object (alphabetically)
890
908
-[ ]`{Service}BlockMeta` exported at bottom of block file with `tags` and `templates`
909
+
-[ ]`skills` added to `{Service}BlockMeta`, each grounded in the block's `tools.access` and derived from a real online-sourced use case (not invented)
891
910
-[ ]`BlockMeta` imported from `@/blocks/types` alongside `BlockConfig`
892
911
-[ ] Block meta registered in `registry.ts` blocksMeta object (alphabetically)
Copy file name to clipboardExpand all lines: .agents/skills/validate-integration/SKILL.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -207,6 +207,12 @@ For **each tool** in `tools.access`:
207
207
-[ ]`authMode` is set correctly (`AuthMode.OAuth` or `AuthMode.ApiKey`)
208
208
-[ ] Block is registered in `blocks/registry.ts` alphabetically
209
209
210
+
### BlockMeta Skills (catalog)
211
+
-[ ]`{Service}BlockMeta.skills` is present (3–5 for mainstream services, 2–3 for niche/low-level)
212
+
-[ ]**Every skill is grounded** — its steps only use operations the block exposes in `tools.access`; flag any skill that implies an unsupported action (e.g. "receive messages" when the block only sends)
213
+
-[ ]**Every skill is real, not hallucinated** — web-search the service and confirm each skill maps to a popular use case attested online (vendor use-case/solutions pages, official docs describing the workflow, reputable "top automations for X" articles). Rewrite or remove any skill you cannot source as something people genuinely do with the service.
214
+
-[ ] Each skill has a kebab-case `name` (≤64 chars, unique), a one-line `description`, and markdown `content` with `# Title` + `## Steps` + an output/guidance section
215
+
210
216
### Block Inputs
211
217
-[ ]`inputs` section lists all subBlock params that the block accepts
Derive templates from the service's real use cases. Each prompt should name a concrete trigger, transformation, and output — not a generic description of what the service does.
814
823
824
+
`skills` are curated, ready-to-add agent skills shown on the integration's detail page (users click **Add** to create them in their workspace). Two hard rules:
825
+
826
+
-**Ground every skill in operations the block actually exposes** — cross-check each skill's steps against `tools.access`. Never describe an action the integration cannot perform.
827
+
-**Derive skills from real, popular use cases found online — never invent them.** Web-search the service's documented use cases (vendor use-case/solutions pages, official docs describing the workflow, reputable "top automations for X" articles) and only add a skill you can source as something people genuinely do with the service. Do not hallucinate skills.
828
+
815
829
## Checklist Before Finishing
816
830
817
831
-[ ]`integrationType` is set to the correct `IntegrationType` enum value
@@ -831,6 +845,7 @@ Derive templates from the service's real use cases. Each prompt should name a co
831
845
-[ ] Optional/rarely-used fields set to `mode: 'advanced'`
832
846
-[ ] Timestamps and complex inputs have `wandConfig` enabled
833
847
-[ ] Exported `{Service}BlockMeta` with at least 7 templates
848
+
-[ ]`skills` added to `{Service}BlockMeta`, each grounded in `tools.access` and sourced from a real online use case (not invented)
Copy file name to clipboardExpand all lines: .claude/commands/validate-integration.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -197,6 +197,8 @@ For **each tool** in `tools.access`:
197
197
-[ ] Has at least 7 templates, each with `icon`, `title`, `prompt`, `modules`, `category`, and `tags`
198
198
-[ ] Prompts describe concrete use cases, not generic descriptions of what the service does
199
199
-[ ]`alsoIntegrations` is set on any template whose prompt references another service
200
+
-[ ]`skills` present (3–5 mainstream, 2–3 niche), each grounded in `tools.access` — flag any skill implying an unsupported action
201
+
-[ ]**Each skill is real, not hallucinated** — web-search and confirm it maps to a popular use case attested online (vendor use-case pages, official docs describing the workflow, reputable "top automations" articles); rewrite/remove any you cannot source
200
202
201
203
### Block Inputs
202
204
-[ ]`inputs` section lists all subBlock params that the block accepts
Copy file name to clipboardExpand all lines: .cursor/commands/validate-integration.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -186,6 +186,7 @@ For **each tool** in `tools.access`:
186
186
-[ ]`icon` references the correct icon component from `@/components/icons`
187
187
-[ ]`authMode` is set correctly (`AuthMode.OAuth` or `AuthMode.ApiKey`)
188
188
-[ ] Block is registered in `blocks/registry.ts` alphabetically
189
+
-[ ]`{Service}BlockMeta.skills` present (3–5 mainstream, 2–3 niche), each grounded in `tools.access` and confirmed via web search to be a real, popular use case (not hallucinated) — rewrite/remove any you cannot source
189
190
190
191
### Block Inputs
191
192
-[ ]`inputs` section lists all subBlock params that the block accepts
0 commit comments