Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Sync Bunpro Japanese grammar learning progress from the API to local storage for analysis and insights. Use when the user wants to backup their Bunpro progre...
Sync Bunpro Japanese grammar learning progress from the API to local storage for analysis and insights. Use when the user wants to backup their Bunpro progre...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Sync your Bunpro grammar learning progress locally for analysis and insights. โ ๏ธ Important: This uses a community-documented API. The official Bunpro API Key from settings does NOT work - you need the Frontend API Token from your browser.
This skill fetches your Japanese grammar progress from Bunpro and stores it in a local SQLite database. Track SRS stages, review forecasts, JLPT progress, and identify grammar leeches (items that keep falling back).
Bunpro has two different API tokens that serve different purposes:
Found at: bunpro.jp/settings/account Looks like: d406663ff421af27c87caaa62eefdb7a (32 hex characters) Does NOT work with the Frontend API endpoints this skill uses Returns 401 Unauthorized errors
Found in: Browser DevTools โ Console or Application Storage Looks like: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9... (long JWT, 200+ chars) This is what the skill requires Expires periodically (you'll need to refresh it)
Method 1: Console (Recommended) Go to bunpro.jp and log in Press F12 to open DevTools Click the Console tab Paste this JavaScript and press Enter: Object.fromEntries( new URLSearchParams( document.cookie.replace(/; /g, '&') ) ).frontend_api_token Copy the long string that appears (starts with eyJ) Method 2: Local Storage Go to bunpro.jp and log in Press F12 โ Application tab (or Storage in Firefox) In the left sidebar, expand Local Storage โ https://bunpro.jp Look for token, authToken, or frontend_api_token Copy the value (starts with eyJ) Method 3: Network Tab Go to bunpro.jp and log in Press F12 โ Network tab Refresh the page Look for any API call (like /user or /queue) Click it โ Headers โ Request Headers Find Authorization: Bearer eyJ... Copy the part after "Bearer " โ ๏ธ Token Expiry: The Frontend API Token expires eventually (days/weeks). When you get 401 errors, repeat the steps above to get a fresh token.
# Using environment variable (recommended) export BUNPRO_FRONTEND_API_TOKEN="eyJ0eXAiOiJKV1Qi..." python3 scripts/sync.py # Or pass token directly (less secure) python3 scripts/sync.py --token "eyJ0eXAiOiJKV1Qi..." # Store in specific directory python3 scripts/sync.py --data-dir ~/bunpro-data
# Only user info python3 scripts/sync.py --user-only # Only study queue python3 scripts/sync.py --queue-only # Only reviews python3 scripts/sync.py --reviews-only
python3 scripts/sync.py --full
Your account info including level, XP, buncoin, lifetime status.
Grammar content including title, meaning, structure, JLPT level, unit/lesson.
Your SRS progress on each grammar point (stage, next review, burned status).
Items scheduled for future review.
Items currently available for review (includes is_leech flag).
Aggregated statistics (SRS overview, forecasts, JLPT progress, activity).
Review session history (last session, last 24h).
Internal table tracking last sync timestamps.
-- Grammar mastery by JLPT level SELECT jlpt_level, COUNT(*) as total, SUM(CASE WHEN burned = 1 THEN 1 ELSE 0 END) as burned FROM reviews r JOIN grammar_points g ON r.grammar_point_id = g.id GROUP BY jlpt_level; -- Upcoming reviews SELECT DATE(next_review) as day, COUNT(*) FROM reviews WHERE next_review > datetime('now') GROUP BY day ORDER BY day LIMIT 7; -- Grammar leeches SELECT g.title, g.meaning, d.streak, r.srs_stage_string FROM due_items d JOIN grammar_points g ON d.reviewable_id = g.id LEFT JOIN reviews r ON d.reviewable_id = r.reviewable_id WHERE d.is_leech = 1 ORDER BY d.streak ASC;
# Show SRS distribution python3 scripts/queries.py srs # Show upcoming review forecast python3 scripts/queries.py forecast # Show grammar mastery by JLPT level python3 scripts/queries.py grammar --jlpt 5 # Show currently due reviews python3 scripts/queries.py due # Show grammar leeches python3 scripts/queries.py leeches # Show overall progress python3 scripts/queries.py progress # Show recent activity python3 scripts/queries.py activity
Base URL: https://api.bunpro.jp/api/frontend Auth: Bearer JWT token from browser (not settings API key) Rate limits: Unknown - be reasonable Stability: Community-documented, may change without notice Permission: Reverse-engineered with permission from Bunpro team
401 Unauthorized: Token expired (get fresh one from browser) Using wrong token type (need Frontend API Token, not settings API key) Token format should be JWT (eyJ0eXAi...) 500 Server Error: Bunpro API may be down Endpoint may have changed Check Bunpro Community API docs Empty data: You're in vacation mode (check bunpro.jp) No reviews done yet Different endpoint structure than expected
Bunpro Community API GitHub Bunpro Community Forum API Discussion Postman Collection references/api-structure.md - Full endpoint documentation
scripts/sync.py - Main sync tool with CLI scripts/queries.py - Query helper with common reports references/api-structure.md - Bunpro API reference
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.