with one click
with one click
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | new-plugin |
| description | Create a new Tinker plugin from the template |
| argument-hint | <plugin-name> [description] |
Create a new Tinker plugin from scratch.
plugin-name: kebab-case name without the tinker- prefix (e.g., base64, color-picker)description: optional short description in EnglishList existing plugins and check if any are functionally similar to the new one:
ls -d tinker-*/
If a similar plugin exists, ask the user whether to copy it as the base instead of tinker-template. Use the user's choice as the copy source in the next step.
Ask the user: does this plugin need Node.js/Electron APIs (file system, OS info, native dialogs beyond tinker.*, etc.)? If yes → advanced (with src/preload/ and src/renderer/). If no → basic (flat src/ layout).
cp -r tinker-<source> tinker-<plugin-name>
Where <source> is either the similar plugin chosen by the user or tinker-template.
package.jsonEdit tinker-<plugin-name>/package.json:
name → "tinker-<plugin-name>"description → provided descriptiontinker.name → Title Case English nametinker.locales.zh-CN.name → Chinese name (ask if unclear)Basic plugin — simplify scripts and paths:
dev / build with single vite commands (no concurrently)tinker.main to "dist/index.html"tinker.preloadIf the source is tinker-template, also restructure the directory:
mv src/renderer/* src/
rm -rf src/renderer src/preload
Then update import paths in index.html and all files under src/ — replace any src/renderer/ references with src/, and fix relative import paths affected by the directory change (e.g. ../../../share/ → ../../share/).
Advanced plugin — keep template scripts as-is, only update name/description.
Also remind the user: icon.png must be replaced with a real icon (200×200 px).
cd tinker-<plugin-name> && npm run build
Fix any TypeScript or build errors before finishing.
The scaffold is complete. Do not modify App.tsx, store.ts, i18n files, or any other source files to implement the plugin's actual functionality. Leave all template content as-is and inform the user that the scaffold is ready for them to implement.