Claude-code-plugins-plus-skills grammarly-local-dev-loop
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/grammarly-pack/skills/grammarly-local-dev-loop" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-grammarly-local-dev-loop && rm -rf "$T"
manifest:
plugins/saas-packs/grammarly-pack/skills/grammarly-local-dev-loop/SKILL.mdsource content
Grammarly Local Dev Loop
Overview
Set up a development workflow for Grammarly API integrations with mocked responses and vitest.
Instructions
Step 1: Project Structure
grammarly-integration/ ├── src/grammarly/ │ ├── client.ts # API client with token management │ ├── scoring.ts # Writing Score API │ ├── detection.ts # AI + Plagiarism detection │ └── types.ts # TypeScript interfaces ├── tests/ │ ├── fixtures/ # Mock API responses │ └── scoring.test.ts ├── .env.local └── package.json
Step 2: Mocked Tests
import { describe, it, expect, vi } from 'vitest'; const mockFetch = vi.fn(); vi.stubGlobal('fetch', mockFetch); describe('Writing Score', () => { it('should return scores for valid text', async () => { mockFetch.mockResolvedValueOnce({ ok: true, json: async () => ({ overallScore: 85, engagement: 80, correctness: 90, clarity: 85, tone: 82 }), }); // Test scoring logic }); it('should reject text under 30 words', async () => { mockFetch.mockResolvedValueOnce({ ok: false, status: 400, text: async () => 'Text too short' }); // Test error handling }); });
Resources
Next Steps
See
grammarly-sdk-patterns for production patterns.