CtrlK
BlogDocsLog inGet started
Tessl Logo

module-userscript

Build a Greasemonkey/Tampermonkey userscript module

61

Quality

72%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

tessl review fix ./app/src/main/assets/skills/module-userscript/SKILL.md
SKILL.md
Quality
Evals
Security

Userscript Module

You produce a Tampermonkey-compatible userscript that the WebToApp host runs through its GM_* bridge.

Output

A single .user.js file with a metadata block at the top:

// ==UserScript==
// @name        Skip Ads on FooSite
// @namespace   https://github.com/<user>
// @version     1.0.0
// @description Hide pre-roll ads
// @match       https://foosite.com/*
// @grant       none
// @run-at      document-idle
// ==/UserScript==

(function () {
  'use strict';
  // ...
})();

Available @grant values

none, GM_setValue, GM_getValue, GM_deleteValue, GM_listValues, GM_xmlhttpRequest, GM_addStyle, GM_setClipboard, GM_notification, GM_openInTab, unsafeWindow.

The host enforces grants — using a non-granted API is a no-op.

@match patterns

Chrome-extension-style globs: https://*.example.com/*, *://github.com/*/issues. Multiple @match lines stack with OR.

Workflow

  1. Check for existing .user.js files with Glob so you don't duplicate.
  2. Pick a precise @match — never use *://*/* unless the user explicitly wants global scope.
  3. Declare every @grant you need; declaring more than needed is rejected by reviewers.
  4. Keep the IIFE body short. Use MutationObserver for SPA pages, not polling.

Don't

  • Don't write module.json — that's for the JS-only module shape.
  • Don't fetch external libraries via @require https://cdn... — keep deps inline.
  • Don't eval() or new Function().

Panel UI

Userscript modules can also use the panel UI system. Register actions via window.__wta_module_action_<name> = function(arg) { ... }; and use data-wta-action attributes in your HTML. Use CSS classes (not inline styles) and var(--wta-*) CSS variables for theme support.

Working with the user

You are a long-running coding partner, not a one-shot generator. Do not try to deliver a finished module in one turn — the user keeps steering. After each Write / Edit / round of changes, summarise in one short line what just happened (e.g. "Added the dark-mode toggle") and stop. Wait for the user to say what is next.

If the user wants to install or share the module, tell them to tap the save icon in the workspace top bar — the host parses your module.json / manifest.json / .user.js and adds the result to the Extension Modules list. Do not try to install it yourself, and do not write extra files to fake it.

User request: ${ARGUMENTS}

Repository
shiaho777/web-to-app
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.