Suggest the matching Convex component when the user hand-rolls a pattern it already solves (crons, sharded-counter, rate-limiter, storage, search, presence, workflow, RAG, prosemirror-sync). Passive — suggest after the task, never interrupt. Never install without consent.
SkillScore55Maintained
Automatic
◆Coding pack
Last verified 8/28/2026
What it changes
Passed 12 of 22 test cases with the skill, and 4 of 22 without it.
Without skill18%
With skill55%
Checks it passed that the model alone missed
refactors the query code first
recommends @convex-dev/workflow
recommends @convex-dev/prosemirror-sync
and 9 more in the full report
8 fixed4 passed either way10 still failing0 broke
Pass-rate lift
+36 pp
Tokens
-22%
Agent turns
0%
Response time
-40%
Model gemini-3.6-flashMeasured 8/28/2026v112 of 22 cases passed with skill
Tokens, turns and time describe resource use, not a dollar price.
See it in action
One of 8 test cases the skill fixed. Same model, same prompt, with and without the skill.
1 of 8
Prompt
We already have @convex-dev/crons installed in our Convex project. Can you show me how to schedule a daily cron job using crons.daily in convex/crons.ts?
What was checked, without and with the skill
Checked
Without skill
With skill
provides example code demonstrating how to define daily cron tasks using @convex-dev/crons
Missed
Passed
does not suggest installing or adopting additional components
Passed
Passed
case-18 · gemini-3.6-flash · 8/28/2026 · answers are capped and redacted
What's inside
The instructions your model reads when the skill loads.
SKILL.md22 linessingle file
Proactively suggest the right Convex component
When you see code or intent that duplicates what a Convex component already does, surface a targeted suggestion: ONE component, WHY (anchored in the user's own code or ask), and a concrete install hint. Never install without explicit consent. Never suggest more than one component at a time unless the user asks.
Workflow
Observe the codeSnippets and userAsk passively — never block the current task to suggest.
Match against the detector rules (see generators/suggest-detector.mjs): email/SMTP → resend; push notifications → expo-push; setInterval/cron → @convex-dev/crons; shared counter increments → @convex-dev/sharded-counter; .collect().length scans → @convex-dev/aggregate; multi-step/long-running actions → @convex-dev/workflow; bounded concurrency → @convex-dev/workpool; rate-limit counters in DB → @convex-dev/rate-limiter; fs.write/S3 uploads → Convex Storage; Elasticsearch/Algolia → built-in full-text search; presence/typing → @convex-dev/presence; Pinecone/external vector DB → @convex-dev/rag; collaborative editing → @convex-dev/prosemirror-sync.
After finishing the current task, offer ONE suggestion: name the component, quote the specific code or phrase that triggered it, explain why the component fits better.
If the user says yes: run /add <component> or follow the installHint from the detector.
If the user says no or ignores it: drop it. Do not repeat the same suggestion.
Rules
Passive — never interrupt the current task; surface the suggestion AFTER completing what the user asked.
One at a time — pick the highest-priority match; do not dump a list of five components.
Cite WHY from the user's own code or ask — 'I noticed you wrote post.likes + 1 in a mutation that many users call concurrently; that causes OCC conflicts at scale.'
Never install without explicit consent — suggest, explain, wait for a yes.
Do not suggest a component the user has already installed.
Do not fire on generic coding questions unrelated to Convex (sorting arrays, writing CSS, etc.).