hikariming/openkoto/openkoto
Claude Code and agent skill by hikariming/openkoto
- community
Checking that the SKILL.md file is still in the repository.
Use the user's OpenKoto language-learning account from the terminal via the `koto` CLI — review due vocabulary (FSRS), add words to word packs, translate and save song lyrics (LRC), add articles, and browse books. Use when the user mentions OpenKoto/koto, their vocabulary or flashcards, lyrics translation, or their reading library.
Install
npx vskill@latest install hikariming/openkoto/openkotoSKILL.md
Purpose
OpenKoto is a language-learning app (iOS / desktop / web) that syncs the user's vocabulary cards, word packs, articles, song lyrics and books through the cloud. The koto CLI reads and writes that cloud library directly, so every change shows up on all of the user's devices right away.
Always drive the CLI with --json and parse stdout. Never scrape the human-readable output.
Hard Rules
- Pass
--jsonon every command. On success stdout is one JSON document. On failure stdout is{"error":{"code","message","exitCode"}}and the process exits non-zero. - Check the exit code first:
0ok2usage error: fix the arguments3not logged in: ask the user to runkoto login; don't try to log in for them4plan or quota: tell the user; free accounts get 50 CLI/MCP calls a day (FREE_LIMIT_REACHED, resets 00:00 UTC; Plus is unlimited) and have storage limits. Don't retry1anything else: report the message- Changes are real and sync to all devices. Before a bulk write (import, more than ~10 adds, overwriting translations), confirm with the user. There is no bulk-delete command;
koto vocab rm <id>deletes one card. Only use it when the user asks. - Ids are opaque strings. Always take them from previous
--jsonoutput, never invent them. - Never print or log
byok.api_keyorKOTO_API_KEY. - Don't run
koto vocab review. It is an interactive TTY session for humans. To review with the user, usevocab dueandvocab grade(see workflows/daily-review.md).
Setup check
If koto is missing: npm i -g @openkoto/cli, then the user runs koto login. The login prints a code and opens the browser. For CI or headless use, set KOTO_API_KEY=ok_live_…, created at openkoto.com → Settings → API keys.
Command reference
| Task | Command | JSON result | |||
|---|---|---|---|---|---|
| Account | koto whoami --json | {userId,email,plan,entitlements:{cli,hostedAi,…},credits,apiBase,auth} | |||
| Due cards | koto vocab due [--limit N] [--pack P] --json | {items:[Vocab],total,date} | |||
| List / search cards | koto vocab list [--pack P] [-q text] [--limit N] --json | {items:[Vocab],total} | |||
| Add word | koto vocab add <word> [-m meaning] [-r reading] [-e example] [--pack P] [--from articleId] --json | {vocab,created,deduped} (duplicates merge, never error) | |||
| Grade one review | koto vocab grade <id> <1-4> --json | {vocab,event}. Grades: 1 again, 2 hard, 3 good, 4 easy | |||
| Delete card | koto vocab rm <id> --json | {ok,id} | |||
| Import CSV | koto vocab import words.csv [--pack P] --json | {imported,deduped,failed:[…],stoppedEarly} | |||
| Translate lyrics | koto lyrics translate song.lrc --to zh [--byok] [--save] [--out f] --json | `{title,artist,targetLanguage,format,engine,aligned,lines:[{startTime,endTime,text,translation}],saved:{id}\ | null,out}` | ||
| Save lyrics | koto lyrics add song.lrc [--title T] [--artist A] --json | {id,title,lines} | |||
| List lyrics | koto lyrics list --json | {items:[{id,title,artist,preview}],total} | |||
| Show lyrics | koto lyrics show <id> --json | {article,segments:[{order,text,translation,startTime,endTime}],meta} | |||
| Export lyrics | `koto lyrics export <id> --format lrc\ | md [--out f] [--no-translation] --json` | {id,format,out,content} | ||
| Add article | `koto article add --file a.md \ | --url https://… [--title T] --json` | {id,title,segments} | ||
| Articles | koto article list --json, koto article show <id> --json | {items,total} / {article,segments} | |||
| Books | koto book list --json, koto book chapters <bookId> --json | {items,total} / {book,items:[{index,title,articleId}],total} | |||
| Import book | `koto book import novel.epub\ | novel.txt --json` | {bookId,title,author,format,chapters,totalChars,fileSize,sha256} | ||
| Translate book (background, credits) | koto book translate <bookId> --to zh [--chapters 1-5] [--watch] --json | {id,status,total} (job) | |||
| Jobs | koto job list --json, koto job status <id> [--watch] --json, koto job cancel <id> | {jobs:[Job]} / Job{id,kind,status,progress,total,error} | |||
| API keys | `koto keys list\ | create [--name N --scopes a,b --expires-days D]\ | revoke <id> --json` | create returns the secret key once | |
| Read a chapter | koto article show <chapterArticleId> --json | {article,segments} | |||
| Search everything | koto search <query> [--types book,article,lyrics,vocab] --json | {items:[{kind,id,title,subtitle}],total} | |||
| Settings | koto config get --json, koto config set <key> [value] | keys: api_base, byok.base_url, byok.api_key, byok.model |
A Vocab object has these fields: id, word, meaning, reading?, example?, usage?, srsState ("new"|"learning"|"review"), dueDate (YYYY-MM-DD), reviewCount, stability, difficulty, lastReviewedAt?, suspendedAt?, packIds[].
Lyrics translation engines
--byoktranslates locally with the user's own OpenAI-compatible provider (koto config set byok.base_url|byok.api_key|byok.model). It costs no OpenKoto credits and works without calling the API unless--saveis given.- Without
--byokthe CLI uses hosted AI, which needs Pro or AI credits. When that is unavailable it exits4(or1withHOSTED_AI_NOT_AVAILABLE_YET). Suggest--byok. - If
alignedisfalse, sometranslationvalues are empty. Fill them in yourself, then write them back withkoto lyrics translate … --save, or use the MCP toolsave_lyrics_translation. - You can also translate the lines yourself: read the lines with
koto lyrics show <id> --json, then save them with the MCP toolsave_lyrics_translation.
Workflows
workflows/lyrics-study.md: translate a song, then pick vocabulary into a word packworkflows/novel-reading.md: browse a book, read or summarise chapters, save wordsworkflows/daily-review.md: run today's review conversationally and report progress
MCP alternative
If the openkoto MCP server is configured, prefer its tools. It is either the remote server https://openkoto.com/mcp or the local npx @openkoto/mcp (see README.md).
- Read:
search_library,list_due_vocab,get_review_stats,get_lyrics,list_books,read_chapter - Write:
add_vocab,update_vocab,review_vocab,save_lyrics_translation,create_lyrics - Hosted AI (spends credits):
translate_lyrics,create_word_pack_from_text
They return the same JSON shapes as the CLI.
Security
- Security scanPassed, 95 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 repositoryCheckingskills/openkoto/SKILL.md
Popularity
- 7-day trend score
- 5
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/hikariming/openkoto/openkoto)