ccc115a/se/school-analytics
Claude Code and agent skill by ccc115a/se
- community
Checking that the SKILL.md file is still in the repository.
Fetch and analyze OpenCode School enrollment and progress data from Cloudflare KV
Install
npx vskill@latest install ccc115a/se/school-analyticsSKILL.md
When to use
Use this skill when asked about enrollments, student counts, progress stats, lesson completion rates, exercise completions, demographics, or any analytics about OpenCode School students.
Requirements
Requires the Cloudflare MCP server (github.com/cloudflare/mcp). The cloudflare-api_execute tool provides a pre-set accountId variable and a cloudflare.request() helper for authenticated API calls.
Data source
Student records are stored in Cloudflare KV. To find the namespace ID, read wrangler.jsonc from the project root and find the KV namespace with binding PROGRESS. Use its id value.
Fetching all keys
Use the Cloudflare API, not the wrangler CLI. wrangler kv key list returns only 25 keys and has no pagination flag.
List keys via GET /accounts/{accountId}/storage/kv/namespaces/{namespaceId}/keys with a limit of 1000. The response includes result_info.cursor for pagination -- keep fetching until the cursor is absent or the result set is empty. Each key object has a name field.
Fetching all values
Fetch each value via GET /accounts/{accountId}/storage/kv/namespaces/{namespaceId}/values/{key} (URL-encode the key). The API returns the value as a JSON string, not a parsed object -- always JSON.parse() the result. Fetch in parallel batches of ~20 to stay under rate limits.
Record schema
Each student record has these fields:
createdAt-- ISO 8601 string, set at enrollment timeupdatedAt-- ISO 8601 string, updated on every writecompletedLessons-- array; items are either bare strings (legacy format) or objects withslug,completedAt,source, and optionalmodel. Normalize by extracting theslugfield from objects.completedExercises-- same shape ascompletedLessonsprofile-- optional object with fields:codingExperience,aiTools,editor,terminalComfort,learningStyle,depthPreference,languages,osdeviceId-- optional UUID string, present only if the client sent one at enrollment
Aggregate inside the sandbox
The cloudflare-api_execute tool truncates responses over ~6000 tokens. Always compute aggregates (counts, buckets, funnels) inside the sandbox function. Never return raw student records.
Common analyses
- Time-window filtering: compare
createdAtagainst a cutoff timestamp - Hourly/daily enrollment rates: bucket by the date or date-hour portion of
createdAt - Lesson completion funnel: count how many students completed each lesson slug
- Exercise completions: count how many students completed each exercise slug
- Profile demographics: count by
profile.os,profile.editor,profile.codingExperience - Progress depth: bucket students by number of lessons completed (0, 1-3, 4-7, 8+, all)
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking_more/refbook/opencode.school/.opencode/skills/school-analytics/SKILL.md
Popularity
- Repository stars
- 92
- Repository forks
- 34
- 7-day trend score
- 23
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/ccc115a/se/school-analytics)