ワンクリックで
school-analytics
Fetch and analyze OpenCode School enrollment and progress data from Cloudflare KV
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Fetch and analyze OpenCode School enrollment and progress data from Cloudflare KV
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | school-analytics |
| description | Fetch and analyze OpenCode School enrollment and progress data from Cloudflare KV |
Use this skill when asked about enrollments, student counts, progress stats, lesson completion rates, exercise completions, demographics, or any analytics about OpenCode School students.
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.
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.
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.
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.
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 with slug, completedAt, source, and optional model. Normalize by extracting the slug field from objects.completedExercises -- same shape as completedLessonsprofile -- optional object with fields: codingExperience, aiTools, editor, terminalComfort, learningStyle, depthPreference, languages, osdeviceId -- optional UUID string, present only if the client sent one at enrollmentThe cloudflare-api_execute tool truncates responses over ~6000 tokens. Always compute aggregates (counts, buckets, funnels) inside the sandbox function. Never return raw student records.
createdAt against a cutoff timestampcreatedAtprofile.os, profile.editor, profile.codingExperience