hikariming/openkoto/openkoto

Claude Code and agent skill by hikariming/openkoto

Trust tier 3
  • community
Source check pending

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/openkoto

SKILL.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 --json on 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:
  • 0 ok
  • 2 usage error: fix the arguments
  • 3 not logged in: ask the user to run koto login; don't try to log in for them
  • 4 plan 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 retry
  • 1 anything 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 --json output, never invent them.
  • Never print or log byok.api_key or KOTO_API_KEY.
  • Don't run koto vocab review. It is an interactive TTY session for humans. To review with the user, use vocab due and vocab grade (see workflows/daily-review.md).

Setup check

bash
koto whoami --json # exit 3 → not logged in; entitlements.cliDailyLimit: 50 on free, null on Plus/Pro

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

TaskCommandJSON result
Accountkoto whoami --json{userId,email,plan,entitlements:{cli,hostedAi,…},credits,apiBase,auth}
Due cardskoto vocab due [--limit N] [--pack P] --json{items:[Vocab],total,date}
List / search cardskoto vocab list [--pack P] [-q text] [--limit N] --json{items:[Vocab],total}
Add wordkoto vocab add <word> [-m meaning] [-r reading] [-e example] [--pack P] [--from articleId] --json{vocab,created,deduped} (duplicates merge, never error)
Grade one reviewkoto vocab grade <id> <1-4> --json{vocab,event}. Grades: 1 again, 2 hard, 3 good, 4 easy
Delete cardkoto vocab rm <id> --json{ok,id}
Import CSVkoto vocab import words.csv [--pack P] --json{imported,deduped,failed:[…],stoppedEarly}
Translate lyricskoto 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 lyricskoto lyrics add song.lrc [--title T] [--artist A] --json{id,title,lines}
List lyricskoto lyrics list --json{items:[{id,title,artist,preview}],total}
Show lyricskoto 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}
Articleskoto article list --json, koto article show <id> --json{items,total} / {article,segments}
Bookskoto 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)
Jobskoto 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 chapterkoto article show <chapterArticleId> --json{article,segments}
Search everythingkoto search <query> [--types book,article,lyrics,vocab] --json{items:[{kind,id,title,subtitle}],total}
Settingskoto 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

  • --byok translates 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 --save is given.
  • Without --byok the CLI uses hosted AI, which needs Pro or AI credits. When that is unavailable it exits 4 (or 1 with HOSTED_AI_NOT_AVAILABLE_YET). Suggest --byok.
  • If aligned is false, some translation values are empty. Fill them in yourself, then write them back with koto lyrics translate … --save, or use the MCP tool save_lyrics_translation.
  • You can also translate the lines yourself: read the lines with koto lyrics show <id> --json, then save them with the MCP tool save_lyrics_translation.

Workflows

  • workflows/lyrics-study.md: translate a song, then pick vocabulary into a word pack
  • workflows/novel-reading.md: browse a book, read or summarise chapters, save words
  • workflows/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

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
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/hikariming/openkoto/openkoto/badge)](https://verified-skill.com/skills/hikariming/openkoto/openkoto)

Something wrong with this skill or its page? Tell us.