Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create a minimal working Grammarly example. Use when starting a new Grammarly integration, testing your setup, or learning basic Grammarly API patterns. Trigger with phrases like "grammarly hello world", "grammarly example", "grammarly quick start", "simple grammarly code".
.claude/skills/jeremylongshore-grammarly-hello-world/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 16% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -48% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 1% | 0% |
Score a text document using Grammarly's Writing Score API. Returns an overall score plus sub-scores for engagement, correctness, tone, and clarity.
grammarly-install-auth setupscores-api:read scopetypescript// hello-grammarly.ts import 'dotenv/config'; const TOKEN = process.env.GRAMMARLY_ACCESS_TOKEN!; async function scoreText(text: string) { const response = await fetch('https://api.grammarly.com/ecosystem/api/v2/scores', { method: 'POST', headers: { 'Authorization': `Bearer ${TOKEN}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ text }), }); const result = await response.json(); console.log('Overall Score:', result.overallScore); console.log('Engagement:', result.engagement); console.log('Correctness:', result.correctness); console.log('Clarity:', result.clarity); console.log('Tone:', result.tone); return result; } scoreText('Their going to the store tommorow to buy there supplys for the trip.').catch(console.error);
typescriptasync function detectAI(text: string) { const response = await fetch('https://api.grammarly.com/ecosystem/api/v1/ai-detection', { method: 'POST', headers: { 'Authorization': `Bearer ${TOKEN}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ text }), }); const result = await response.json(); console.log('AI Score:', result.score); // 0-100, higher = more likely AI return result; }
typescriptasync function checkPlagiarism(text: string) { // Step 1: Create score request const createRes = await fetch('https://api.grammarly.com/ecosystem/api/v1/plagiarism', { method: 'POST', headers: { 'Authorization': `Bearer ${TOKEN}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ text }), }); const { id } = await createRes.json(); // Step 2: Poll for results let result; do { await new Promise(r => setTimeout(r, 3000)); const statusRes = await fetch(`https://api.grammarly.com/ecosystem/api/v1/plagiarism/${id}`, { headers: { 'Authorization': `Bearer ${TOKEN}` }, }); result = await statusRes.json(); } while (result.status === 'pending'); console.log('Plagiarism score:', result.score); console.log('Matches:', result.matches?.length || 0); return result; }
bashcurl -X POST https://api.grammarly.com/ecosystem/api/v2/scores \ -H "Authorization: Bearer $GRAMMARLY_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"text": "This is a test sentence."}' | python3 -m json.tool
| Error | Cause | Solution | |-------|-------|----------| | 401 Unauthorized | Token expired | Re-authenticate | | 400 Bad Request | Text too short (< 30 words) | Minimum 30 words required | | 413 Payload Too Large | Text > 100,000 characters | Split into chunks | | 429 Rate Limited | Too many requests | Implement backoff |
Proceed to grammarly-local-dev-loop for development workflow.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 18,484 | 12,979 | -30% | 1 | 1 | 0% | 3,192 | 3,036 | -5% | 0 | 0 | — |
case-02 | fail→pass | 19,442 | 10,360 | -47% | 1 | 1 | 0% | 3,421 | 3,844 | +12% | 0 | 0 | — |
case-03 | fail→pass | 7,105 | 2,829 | -60% | 1 | 1 | 0% | 1,515 | 1,755 | +16% | 0 | 0 | — |
case-04 | pass→pass | 15,876 | 13,466 | -15% | 1 | 1 | 0% | 2,606 | 3,282 | +26% | 0 | 0 | — |
case-05 | pass→pass | 7,432 | 11,613 | +56% | 1 | 1 | 0% | 1,665 | 2,687 | +61% | 0 | 0 | — |
case-06 | pass→pass | 19,330 | 15,253 | -21% | 1 | 1 | 0% | 3,068 | 3,496 | +14% | 0 | 0 | — |
case-07 | fail→pass | 26,204 | 6,328 | -76% | 1 | 1 | 0% | 2,566 | 1,327 | -48% | 0 | 0 | — |
case-08 | pass→pass | 9,895 | 3,497 | -65% | 1 | 1 | 0% | 1,581 | 1,661 | +5% | 0 | 0 | — |
case-09 | pass→pass | 14,991 | 9,654 | -36% | 1 | 1 | 0% | 1,910 | 1,936 | +1% | 0 | 0 | — |
case-10 | pass→pass | 15,280 | 11,618 | -24% | 1 | 1 | 0% | 1,784 | 2,364 | +33% | 0 | 0 | — |
case-11 | fail→pass | 13,423 | 6,119 | -54% | 1 | 1 | 0% | 2,298 | 2,320 | +1% | 0 | 0 | — |
case-12 | pass→pass | 7,932 | 3,803 | -52% | 1 | 1 | 0% | 1,177 | 1,364 | +16% | 0 | 0 | — |
case-13 | pass→pass | 12,338 | 15,543 | +26% | 1 | 1 | 0% | 2,043 | 3,033 | +48% | 0 | 0 | — |
case-14 | fail→pass | 8,667 | 2,977 | -66% | 1 | 1 | 0% | 1,462 | 1,700 | +16% | 0 | 0 | — |
case-15 | pass→pass | 6,887 | 1,934 | -72% | 1 | 1 | 0% | 1,221 | 1,383 | +13% | 0 | 0 | — |
case-16 | fail→pass | 8,851 | 2,531 | -71% | 1 | 1 | 0% | 1,371 | 1,525 | +11% | 0 | 0 | — |
case-17 | pass→pass | 10,831 | 2,431 | -78% | 1 | 1 | 0% | 1,603 | 1,497 | -7% | 0 | 0 | — |
case-18 | pass→pass | 13,841 | 6,468 | -53% | 1 | 1 | 0% | 2,401 | 2,308 | -4% | 0 | 0 | — |
case-19 | pass→pass | 18,437 | 8,109 | -56% | 1 | 1 | 0% | 2,229 | 1,625 | -27% | 0 | 0 | — |
case-20 | pass→pass | 5,885 | 10,392 | +77% | 1 | 1 | 0% | 985 | 1,871 | +90% | 0 | 0 | — |
case-21 | fail→pass | 3,620 | 2,203 | -39% | 1 | 1 | 0% | 580 | 1,388 | +139% | 0 | 0 | — |
case-22 | fail→pass | 15,065 | 7,212 | -52% | 1 | 1 | 0% | 1,569 | 1,355 | -14% | 0 | 0 | — |
case-23 | fail→pass | 13,712 | 2,070 | -85% | 1 | 1 | 0% | 1,536 | 1,406 | -8% | 0 | 0 | — |
case-24 | fail→pass | 13,216 | 7,165 | -46% | 1 | 1 | 0% | 1,990 | 1,477 | -26% | 0 | 0 | — |
case-25 | fail→pass | 14,539 | 8,237 | -43% | 1 | 1 | 0% | 1,586 | 1,767 | +11% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted. The headline lift of +48 percentage points is the difference between those two pass rates over the 25 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.