- Home
- Skills
- Testing & Debugging
- KOReader Plugin Developer (Premium)
Works with the AI Agents you already use
KOReader Plugin Developer (Premium)
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
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
| Layer | Result |
|---|---|
Structure, _meta.lua, wiring, gettext, LuaJIT syntax | Passed (0 errors) |
| API checks vs KOReader source | Not run — index not built yet |
| luacheck | Not run — not installed |
| Headless smoke test | Passed (4/4) — KOReader calls are stubs |
| Emulator / real device | Not run |
Next steps
python3 scripts/sync_api.pythen re-run the validator for real API checks.brew install luacheckand lint.bash scripts/run_emulator.sh <koreader-checkout> wordpeek.kopluginto confirm the button appears.python3 scripts/package_plugin.py wordpeek.koplugin --version 1.0.0to 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
requirepaths, misspelled widget constructor fields and non-existent methods, checked against the KOReader release you pin (built locally from GitHub bysync_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.pywhen you target a newer one. - Unofficial; not affiliated with the KOReader project.
How to use
- 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
Sign in to Agensi
Your agent shows a sign-in link. Sign in and click Allow.
- 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
Allowed Hosts
File Scopes
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.