Works with the AI Agents you already use

    Claude CodeClaude CodeCursorCursorCodex CLICodex CLIMuseMuseDotsDots+21 more

    KOReader Plugin Developer (Premium)

    1

    Build, verify and release KOReader plugins (Lua) for Kobo, Kindle and more. API-aware validator checked against real KOReader source, headless smoke test, 7 templates, emulator launcher, release zip + CI.

    $1

    Secure checkout via Stripe

    Money-back guarantee

    Converts to your local currency at checkout

    Security scanned
    KOReader Plugin Developer (Premium)

    KOReader Plugin Developer (Premium)

    Example session with this skill installed

    Add a "Word Peek" button to KOReader's text-selection dialog that shows the selected text. Scaffold it, verify it, and tell me what you did and didn't check.

    • Read your context and instructions
    • Compiled the koreader plugin developer

    Summary

    Scaffolded wordpeek.koplugin from the reader-hook template, then ran the validator and the headless smoke test. It is a reader-only plugin that adds a

    Word Peek button to the highlight dialog.

    Commands and results

    python3 scripts/new_plugin.py wordpeek "Word Peek" --template reader-hook
    
    # created wordpeek.koplugin
    
    python3 scripts/validate_plugin.py wordpeek.koplugin --strict
    
    # WARN  -: no API index: require paths, fields and methods not checked.
    #          Build it once with scripts/sync_api.py
    # INFO  -: luacheck not found: lint skipped
    # 0 error(s), 1 warning(s), 1 note(s)
    
    python3 scripts/smoke_test.py wordpeek.koplugin
    
    # PASS load main.lua
    # PASS init()
    # PASS onReaderReady()
    # PASS onPageUpdate()
    # 4 check(s), 0 failure(s)
    

    What the plugin does

    self.ui.highlight:addToHighlightDialog("11_wordpeek", function(this)
        return {
            text = _("Word Peek"),
            callback = function()
                local text = util.cleanupSelectedText(this.selected_text.text)
                UIManager:show(InfoMessage:new{ text = text })
                this:onClose()
            end,
        }
    end)
    

    Verification status

    LayerResult
    Structure, _meta.lua, wiring, gettext, LuaJIT syntaxPassed (0 errors)
    API checks vs KOReader sourceNot run — index not built yet
    luacheckNot run — not installed
    Headless smoke testPassed (4/4) — KOReader calls are stubs
    Emulator / real deviceNot run

    Next steps

    1. python3 scripts/sync_api.py then re-run the validator for real API checks.
    2. brew install luacheck and lint.
    3. bash scripts/run_emulator.sh <koreader-checkout> wordpeek.koplugin to confirm the button appears.
    4. python3 scripts/package_plugin.py wordpeek.koplugin --version 1.0.0 to release.

    Connects securely to your tools. The creator never sees your data.

    About this skill

    Stop guessing KOReader APIs. This skill makes your agent write KOReader plugins (*.koplugin, Lua) and then check them against the real KOReader source before telling you they work.

    What you get

    • API-aware validator: flags wrong require paths, misspelled widget constructor fields and non-existent methods, checked against the KOReader release you pin (built locally from GitHub by sync_api.py).
    • Headless smoke test: loads your plugin under LuaJIT with stubbed KOReader modules and runs init, every menu callback, Dispatcher actions and lifecycle handlers.
    • 7 templates: basic, settings, network (HTTP/JSON with timeouts), reader-hook (highlight dialog button), filemanager (long-press button), widget (custom screen), footer-status (status bar value).
    • 12 reference guides: plugin anatomy, widgets, events and Dispatcher, reader hooks, settings and storage, background jobs and battery, user patches, i18n, LuaJIT gotchas, pitfalls, testing, release and CI.
    • Emulator launcher: symlinks your plugin into a KOReader checkout and runs ./kodev run.
    • Release tooling: validated, installable zip plus a GitHub Actions CI/release template.

    Honest reporting

    The skill tells the agent to state which verification layers ran and which did not (emulator, device), and to say so when luajit or luacheck is missing, so a green validator is never presented as "it works".

    Good to know

    • Needs Python 3.8+. LuaJIT and luacheck are optional but recommended. The emulator layer needs your own KOReader checkout.
    • First use downloads a KOReader release tarball from GitHub to build the API index locally. The index is not bundled (KOReader is AGPL-3.0).
    • Static checks and the smoke test cannot prove runtime behaviour; only the emulator or a device can.
    • Unofficial; not affiliated with the KOReader project.

    • Static checks and the headless smoke test cannot prove runtime behaviour. Only the KOReader emulator or a real device can; the skill tells the agent to report which layers were not run.
    • The smoke test uses stubbed KOReader modules, so it can't catch API misuse or layout bugs. It passes cleanly on about 15 of KOReader's 37 bundled plugins, so it works best on small plugins. On large ones, a failure is a lead to check, not proof of a bug.
    • API checks need a one-time download of a KOReader release from GitHub (internet required). The index is built on your machine, not bundled, because KOReader is AGPL-3.0.
    • The emulator layer needs your own built KOReader checkout. The skill doesn't install KOReader for you.
    • Third-party plugins can't ship their own translations. Only strings already in KOReader's catalogue get translated.
    • Written against KOReader v2026.07.1. Internal reader modules change between releases, so re-run sync_api.py when you target a newer one.
    • Unofficial; not affiliated with the KOReader project.

    How to use

    1. 1

      Connect your agent to the Agensi MCP

      Copy the prompt and paste it into Claude, ChatGPT, Cursor or any agent that supports MCP. It sets up the connection for you. Manual setup

    2. 2

      Sign in to Agensi

      Your agent shows a sign-in link. Sign in and click Allow.

    3. 3

      Ask for what you need

      Your agent loads this skill and uses it on your task. It always asks before any payment.

    Reviews

    No reviews yet

    Be one of the first to try it. Every listed skill goes through the trust checks below.

    Security scanned

    Checked by our 8-point scan before listing

    Fresh listing

    Recently published to Agensi

    Money-back guarantee

    Doesn't do what its page promises? You get your money back.

    Trust & safety

    Security scan

    Security scan passed today

    Accounts
    GitHub
    Software
    Python 3.8+Git
    Optional
    LuaJITluacheckKOReader checkout (emulator)

    First run downloads a KOReader release from GitHub to build a local API index (needs internet once). The emulator layer needs your own built KOReader checkout.

    Permissions

    Terminal / Shell
    Network Access
    Read Files
    Write Files

    Allowed Hosts

    github.com

    File Scopes

    *.koplugin/**

    Reads and writes only the plugin directory you point it at. sync_api.py contacts api.github.com and codeload.github.com once to download a KOReader release; run_emulator.sh temporarily symlinks the plugin into a KOReader checkout you provide and removes it on exit.

    Listedtoday

    What's inside

    Frequently Asked Questions

    No for scaffolding, validating and the smoke test. Only the emulator layer needs a built KOReader checkout.

    No. It catches structural and API-name mistakes. The smoke test uses stubs. Only the emulator or a device proves runtime behaviour, and the skill makes the agent say what was not run.

    The latest release by default; pin another with `sync_api.py --tag vYYYY.MM[.N]` or `--source <checkout>`.

    It is generated from KOReader's AGPL-3.0 source, so it is built on your machine instead of being redistributed.

    Yes, any agent that supports the SKILL.md standard. The scripts need Python 3.8+.

    New in Testing & Debugging