Skip to main content

evilo

Maintain the evilo Kotlin Multiplatform manga reader and its Wasmline source-plugin contracts. Use when changing evilo modules, Compose screens, Gradle configuration, source loading, or Android, desktop, browser, and iOS entry points. This skill does not authorize changes to the upstream Wasmline repository or automatic validation.

Source facts

Repository
crowforkotlin/evilo
Last source activity
November 9, 2026 at 06:19
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
evilo
description
Maintain the evilo Kotlin Multiplatform manga reader and its Wasmline source-plugin contracts. Use when changing evilo modules, Compose screens, Gradle configuration, source loading, or Android, desktop, browser, and iOS entry points. This skill does not authorize changes to the upstream Wasmline repository or automatic validation.
# evilo development Use this skill and its referenced guides as the source of project-specific instructions. Keep project rules in `.agents/skills/`; do not create a separate root instruction file. ## Select the owning module Read the relevant implementation before editing. Use [the module guide](references/module-guide.md) when adding modules, changing source sets, moving application entry points, or editing Gradle configuration. - `core/model` owns serializable manga, chapter, and image-page data. - `core/source-api` owns `MangaSource`, `MangaSourceService`, and transport data. - `core/source-runtime` owns Wasmline loading and loaded-service lifetimes. - `feature/library` owns library UI and state. Add other features as KMP modules when their implementation is requested; do not create empty feature modules. - `app/src` owns application composition and desktop, browser, and iOS entry points. `app/android` and `app/ios` are platform launchers, not business modules. The current application is a foundation: `App()` supplies an empty library state. Do not describe source installation, persistence, downloads, or image reading as implemented unless the relevant code exists and the claimed result was observed. ## Locate code If a repository has a `.codegraph/` directory at its root, use `codegraph_explore` before grep/find or reading files to understand or locate code. If the MCP tool is unavailable, use `codegraph explore "<symbol names or question>"` from that repository. Name files or symbols to request their current source and call paths. If there is no index, use ordinary source inspection; do not create an index unless the user requests one. ## Keep the plugin contract portable `MangaSourceService` extends Wasmline's synchronous `WasmlineService`. Do not add service properties, suspending methods, overloads, generic methods, default parameters, or `vararg` without checking upstream support first. Keep plugin request construction and response parsing separate from asynchronous host network I/O. `MangaSource` may suspend; `MangaSourceService` must not. Pass request context explicitly so concurrent host requests do not depend on a plugin's mutable last-request state. Preserve source-qualified `MangaId` values. Review `SOURCE_API_VERSION` whenever changing serialized models or service signatures; protocol constants are not application release versions and do not belong in `project.properties`. Use Wasmline's signed-manifest loader rather than accepting arbitrary raw module paths from application UI. Preserve error details and close acquired handles on negotiation failure. Normal source disposal closes that source, not the global Wasmline runtime. Do not swallow coroutine cancellation. HTTP clients, trusted keys, caches, repository URLs, and any proxy are supplied explicitly. Do not copy upstream sample trust keys. When implementing HTTP, enforce host-approved URL/redirect and credential policies and response limits; a plugin signature is not network authorization. Do not claim browser CORS can be bypassed with Wasm. ## Configuration and platform work Read [the configuration section](../../../README.md#configuration) for value ownership. Reuse the version catalog in `build-logic`; do not duplicate dependency versions in module scripts. Keep `project.properties` compatible with both Java properties and Xcode configuration syntax. Keep Android, JVM, both iOS ARM64 targets, JS, and Wasm JS in shared-module target declarations. Only plugin-contract/model modules also need Wasm WASI. Do not remove Apple targets merely because the current machine is not macOS. If upstream Wasmline API details are needed, inspect the explicitly supplied checkout or published source. Treat it as read-only unless upstream edits are requested. Use `wasmline.localPath` for an opt-in composite, not an absolute build path. ## Execution and reporting Use direct engineering communication: name the files, symbols, commands, and observed changes. Keep comments and repository documentation in English; answer in the user's language. Avoid undefined labels and unsupported success claims. Preserve unrelated working-tree changes. Do not create branches, commit, or push unless the user explicitly requests those operations. Implementation requests do not authorize validation. Do not run Gradle, tests, builds, packaging, linters, formatters, validators, application servers, or device commands without a specific user request. This includes Gradle configuration tasks, skill validators, `git diff --check`, and validation hidden in scripts. Reading files and Git status/diffs remains allowed. Report implementation separately from validation. State "not run" when relevant, and select manual commands from [the README](../../../README.md#manual-commands) with their platform prerequisites. Never claim a configured target was built or run based only on source inspection.
View on GitHub