jupyterlab/plugin-playground/plugin-authoring
Claude Code and agent skill by jupyterlab/plugin-playground
Trust tier 2
- community
Source check pending
Checking that the SKILL.md file is still in the repository.
Bootstrap and iterate TypeScript/TSX JupyterLab plugins in Plugin Playground for plugin development, using command-driven workflows and extension references.
Install
npx vskill@latest install jupyterlab/plugin-playground/plugin-authoringSKILL.md
Plugin Authoring Skill (Playground)
Use this skill to bootstrap and iterate JupyterLab plugins inside Plugin Playground.
Goal
Produce working plugin code that can be loaded with plugin-playground:load-as-extension, using extension points and examples available in the running environment.
Inputs
- Desired behavior (what the plugin should do)
- Optional UI target (command palette, sidebar, status bar, notebook, etc.)
- Optional package constraints (JupyterLab-only APIs vs external AMD modules)
Workflow
- Prepare a TypeScript file
- If the user does not already have a plugin file open or specified, run
plugin-playground:create-new-pluginwith a meaningfulpathargument (for exampleapp.commands.execute('plugin-playground:create-new-plugin', { path: 'status-indicator.ts' })) instead of relying on untitled defaults. - Start from the generated TypeScript scaffold and adapt it.
- Plugin Playground supports schema-backed settings during prototyping (
package.jsonwithjupyterlab.schemaDir, withplugin.jsonfallback for single-plugin cases). - For any plugin with multiple files, settings schema, CSS, SVG, or other local assets, create a package root up front (for example
my-extension/src/index.ts) and include a minimalpackage.jsoninmy-extension/soShare Packageand extension export operate on the full folder. - When creating nested files through AI file commands, create the parent directories first and verify the files appear in the file browser before continuing.
- Focus on TypeScript/TSX plugin code. Do not scaffold Python projects (
pyproject.toml, Python package layout) unless explicitly requested.
Minimal package metadata for Playground prototypes:
- Discover available extension points
- Run
plugin-playground:list-tokensto get available tokens. - Run
plugin-playground:list-commandsto get available commands. - Use optional
queryargument to narrow results: app.commands.execute('plugin-playground:list-tokens', { query: 'status' })app.commands.execute('plugin-playground:list-commands', { query: 'notebook' })
- Discover reference examples
- Run
plugin-playground:list-extension-examples. - Filter by topic with
query(for exampletoolbar,commands,widget,notebook). - Open selected example source/README from the sidebar for implementation details.
- Implement plugin code
- Start from a minimal plugin shape (
id,autoStart,activate). - Add
requirestokens only after confirming availability from step 2. - Add commands with stable, unique IDs (
<namespace>:<action>). - Do not overwrite or reuse built-in JupyterLab command IDs. Plugin Playground skips duplicate command registrations; register a separate command and add it to the relevant palette, menu, toolbar, launcher, or cell toolbar instead.
- Use one or more
.ts/.tsxfiles as needed as complexity grows.
- Load and iterate
- Run
plugin-playground:load-as-extension. - Validate behavior in UI.
- Check the command return value for
ok/status/messageto detect and report loading or autostart errors. - If reloading the same plugin ID repeatedly, ensure cleanup is handled via
deactivate()where needed.
- Export for standalone development
- Run
plugin-playground:export-as-extensionto download a zip for local IDE + git workflows. - For deterministic automation (or when another file is focused), pass an explicit file path:
app.commands.execute('plugin-playground:export-as-extension', { path: 'my-extension/src/index.ts' })- Read export result metadata (
ok,archiveName,rootPath,fileCount,message) and report failures.
- Share a file link for collaboration
- Run
plugin-playground:share-via-linkto create a shareable URL for a single file. - It can target the active file or an explicit path:
app.commands.execute('plugin-playground:share-via-link', { path: 'my-extension/src/index.ts' })- The command keeps the same flow: it copies the generated link to clipboard and also returns metadata (
ok,link,sourcePath,urlLength,message).
- Imports and module safety
- Prefer JupyterLab/Lumino imports first.
- For external packages, ensure AMD-compatible import targets are used.
- Avoid Node/Webpack-only modules that are not AMD-compatible.
Output expectations
- TypeScript-first plugin implementation (
.ts/.tsx) - Clear command IDs and labels
- Minimal required tokens
- No unused imports
References
- JupyterLab Extension Tutorial:
- https://jupyterlab.readthedocs.io/en/stable/extension/extension_tutorial.html
- JupyterLab Extension Examples:
- https://github.com/jupyterlab/extension-examples
Security
- Security scanPassed, 93 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking_agents/skills/plugin-authoring/SKILL.md
Popularity
- Repository stars
- 60
- Repository forks
- 21
- 7-day trend score
- 21
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/jupyterlab/plugin-playground/plugin-authoring)