AO Desktop App Launcher
OrchestratorInc/agent-orchestrator
Launches, restarts and troubleshoots the real AO Electron desktop app from a checkout, with isolated or real local data and checks for stale processes.
Author, package, and debug NextCoWork plugins — the single entry point.
$ npx skills add AIDotNet/NextCoWork --skill plugin-builder -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install AIDotNet/NextCoWork plugin-builder --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/AIDotNet/NextCoWork.git skills-src && mkdir -p .claude/skills && cp -r skills-src/resources/skills/plugin-builder .claude/skills/plugin-builder && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "plugin-builder" agent skill from https://github.com/AIDotNet/NextCoWork/tree/main/resources/skills/plugin-builder into .claude/skills/plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-builder", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/AIDotNet/NextCoWork/tree/main/resources/skills/plugin-builderType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add AIDotNet/NextCoWork --skill plugin-builder -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install AIDotNet/NextCoWork plugin-builder --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AIDotNet/NextCoWork.git skills-src && mkdir -p .agents/skills && cp -r skills-src/resources/skills/plugin-builder .agents/skills/plugin-builder && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "plugin-builder" agent skill from https://github.com/AIDotNet/NextCoWork/tree/main/resources/skills/plugin-builder into .agents/skills/plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-builder", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add AIDotNet/NextCoWork --skill plugin-builder -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install AIDotNet/NextCoWork plugin-builder --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AIDotNet/NextCoWork.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/resources/skills/plugin-builder .cursor/skills/plugin-builder && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "plugin-builder" agent skill from https://github.com/AIDotNet/NextCoWork/tree/main/resources/skills/plugin-builder into .cursor/skills/plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-builder", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/AIDotNet/NextCoWork.git --path resources/skills/plugin-builder--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add AIDotNet/NextCoWork --skill plugin-builder -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install AIDotNet/NextCoWork plugin-builder --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AIDotNet/NextCoWork.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/resources/skills/plugin-builder .gemini/skills/plugin-builder && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "plugin-builder" agent skill from https://github.com/AIDotNet/NextCoWork/tree/main/resources/skills/plugin-builder into .gemini/skills/plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-builder", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install AIDotNet/NextCoWork plugin-builderInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add AIDotNet/NextCoWork --skill plugin-builder -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/AIDotNet/NextCoWork.git skills-src && mkdir -p .github/skills && cp -r skills-src/resources/skills/plugin-builder .github/skills/plugin-builder && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "plugin-builder" agent skill from https://github.com/AIDotNet/NextCoWork/tree/main/resources/skills/plugin-builder into .github/skills/plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-builder", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add AIDotNet/NextCoWork --skill plugin-builder -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install AIDotNet/NextCoWork plugin-builder --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AIDotNet/NextCoWork.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/resources/skills/plugin-builder .opencode/skills/plugin-builder && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "plugin-builder" agent skill from https://github.com/AIDotNet/NextCoWork/tree/main/resources/skills/plugin-builder into .opencode/skills/plugin-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-builder", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
plugin-builderAuthor, package, and debug NextCoWork plugins — the single entry point.
Plugin Builder is an agent skill from AIDotNet/NextCoWork. Author, package, and debug NextCoWork plugins — the single entry point. Covers the manifest (package.json) and the permission model with per-call capability gates, every contribution point (commands, menus, keybindings, custom editors, views, web apps, agent tools, card views, configuration, bundled Skills) including which install cleanly but do nothing yet, the ncw:doc document channel, result / live-progress / interactive cards, the nextcowork runtime API namespaces, the sandbox and isolation model, and build +…
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including reference files (for example `references/agent-tools.md`, `references/contribution-points.md` and `references/custom-editors.md`).
It sits in Development, covering Authorization and RBAC, Project scaffolding and Debugging. It works with npm. The repository describes itself as: Open Cowork - Opensource Claude Cowork for Windows & macOS & Linux. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit c253cae. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are jsonc and typescript).
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
bilibili.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Plugin Builder loads about 2.4k tokens when it runs, and up to ~16k if it reads all its reference files. Until then it costs about 229 tokens; SKILL.md has 876 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from AIDotNet/NextCoWork at commit c253cae, republished under its Apache-2.0 licence (© AIDotNet). 876 words, ~2,399 tokens.
.claude/skills/plugin-builder/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.Build plugins that extend the NextCoWork desktop app and its AI agent. A plugin is a self-contained package that runs sandboxed and talks to the host over a small, permissioned RPC surface.
The details live in references/, next to this SKILL.md. Read the file that matches the task; this page alone is not enough to write a working plugin.
| Task | Reference |
|---|---|
Every contributes key, what it does, and which ones do nothing yet | references/contribution-points.md |
| Manifest fields, the permission model, what needs which capability | references/manifest-permissions.md |
| Method → permission, one row per RPC | references/permission-map.md |
| Taking over file types (custom editors), views, the document channel | references/custom-editors.md |
| Contributing agent tools, result / live / interactive cards | references/agent-tools.md |
| Runtime API namespaces (workspace / net / process / storage / secrets / window / tabs / …) | references/runtime-api.md |
| Build, ZIP layout, installer checks, market publish | references/packaging.md |
How to open them: the paths above are relative to this Skill's own package directory — the directory holding this SKILL.md. Bundled Skills are installed into the app's global Skill root (<userData>/skills/plugin-builder/), which differs between dev and packaged builds; if you don't know it, locate the package first (for example a Glob search for **/skills/plugin-builder/SKILL.md) and read the reference by its absolute path. Do not look for them relative to the user's workspace — they are not part of it.
Every plugin runs with no access to the host DOM or Node. Two surfaces exist:
BrowserWindow (sandbox, contextIsolation, nodeIntegration:false) on a dedicated session partition, serving your main ESM entry from ncw-plugin://<publisher>.<name>/. This is where activate() and your tool/command handlers run.contributes.views, contributes.customEditors, contributes.cardViews) rendered in a cross-origin ncw-plugin:// iframe inside the main window. Sandboxed: no popups, no modals, no top-navigation. Views cannot import nextcowork — that shim only loads in the host window; views talk to the host exclusively through the document channel and the theme shim (see references/custom-editors.md).You reach the host only through the nextcowork module API (host window side). Every capability is gated by a permission the user granted, plus an argument gate (path inside the workspace, host in hostPermissions, command in allowedCommands).
<publisher>.<name>/
├── package.json # the manifest (required)
├── dist/
│ ├── extension.js # single-file ESM entry (manifest.main)
│ ├── views/*.html # view / cardView HTML (optional)
│ └── ...
├── l10n/ # zh-CN.json + en-US.json (required if you use %keys%)
└── icon.png # optional (≤256 KB)Install by ZIP (top-level single dir named <publisher>.<name>), from a directory in dev, or from the market.
If all you want is to bring a website in ("open Bilibili in a tab"), you do not need an
entry module, a bundler, or a host process. Declare "kind": "webapp" and one webApps
entry — that's the whole package:
{
"publisher": "ncw", "name": "bilibili", "kind": "webapp",
"displayName": "哔哩哔哩", "description": "…", "version": "0.1.0",
"engines": { "nextcowork": "^0.3.0" }, "l10n": "./l10n",
"permissions": [],
"hostPermissions": ["https://www.bilibili.com/*"],
"contributes": { "webApps": [
{ "id": "home", "title": "%app.home%", "icon": "tv", "url": "https://www.bilibili.com/" }
] }
}Installing it puts an entry in the sidebar; clicking it opens the site in a workspace tab,
signed in already (it shares the workspace browser session). Full rules —
including why main in a webapp manifest is an error rather than an ignored field —
in references/manifest-permissions.md. Working example: examples/ncw.bilibili.
package.json:
{
"publisher": "acme", "name": "hello", "displayName": "Hello", "description": "demo",
"version": "0.1.0", "engines": { "nextcowork": "^0.3.0" }, "main": "./dist/extension.js",
"l10n": "./l10n", "activationEvents": ["onTool:say_hello"],
"permissions": [],
"contributes": { "tools": [{ "name": "say_hello", "title": "%tool.hello%", "shape": "orchestration" }] }
}dist/extension.js:
import * as ncw from 'nextcowork'
export function activate(context) {
context.subscriptions.push(
ncw.tools.registerTool('say_hello', {
description: 'Greet someone.',
inputSchema: { type: 'object', properties: { name: { type: 'string' } }, required: ['name'] },
readOnly: true, destructive: false, needsNetwork: false,
async invoke({ input }) {
return { content: [{ text: `Hello, ${input.name}!` }] }
}
})
)
}l10n/zh-CN.json → { "plugin.acme.hello.tool.hello": "打个招呼" }, l10n/en-US.json → { "plugin.acme.hello.tool.hello": "Say hello" }.
Declared plugins wake lazily on the first matching event. Waking a plugin wakes its declared dependencies first.
onStartup — wakes at launch. The market rejects this by default (memory risk). Avoid unless essential.onCommand:<commandId>, onCustomEditor:<viewType>, onTool:<toolName>, onView:<viewId>, onWorkspaceContains:<glob>★ The event you declare must be one the host actually dispatches: onCommand: fires when the user runs the command; onCustomEditor: fires when a tab opens for that viewType — the host wakes the plugin before mounting the view iframe, because view files are only servable for plugins that have been spawned at least once (an unwoken plugin's iframe is a bare 403 "forbidden"). Prefer these specific events over onStartup.
Idle plugins sleep after ~5 minutes; the next event re-wakes them. Sleeping stops your background code but does not stop serving your view files.
permissions.request() for anything outside permissions ∪ optionalPermissions is silently denied. See references/manifest-permissions.md for what each capability unlocks, per API call.inputSchema is not validated by the host — validate input yourself.content text.connect() needs both the plugins permission and a declared dependencies entry.nextcowork must be external in the host-side bundle; views must bundle everything (CSP gives no network). See references/packaging.md.Inspect the host implementation when behavior is unclear: manifest schema src/shared/plugin/manifest.ts, RPC + permissions src/shared/plugin/protocol.ts, permission model src/shared/plugin/permission.ts, contribution points src/shared/plugin/contribution.ts, custom editor matching src/shared/plugin/custom-editor.ts, lifecycle src/main/plugin/manager.ts, protocol/CSP src/main/plugin/protocol.ts, cards src/renderer/src/views/chat/CardRenderer.tsx, full typed API packages/plugin-api/nextcowork.d.ts.
Plugin views (custom editors) are React-ready: the host serves react, react-dom and its own control kit as nextcowork/ui over an injected import map, so a view bundle carries neither. Mark them external, import Button / Dialog / TextArea from nextcowork/ui and the document channel from nextcowork/view. See references/custom-editors.md.
Working examples live in examples/ — ncw.bilibili (zero-code web app: three files, no JavaScript), acme.note-editor (React view on the host kit, zero dependencies), acme.excalidraw (custom editor + command + onStartup), acme.image-studio (image editor over the document channel's base64 branch, zero permissions), acme.markdown-studio (editor + rich split view, zero permissions, code-split chunks).
© AIDotNet, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 7 other files (references) in resources/skills/plugin-builder of AIDotNet/NextCoWork.
Open the folder on GitHubat commit c253cae
Plugin Builder next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Plugin Builder this skillAIDotNet/NextCoWork | 638 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| AO Desktop App LauncherOrchestratorInc/agent-orchestrator | 13k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Debugging and Error Recoveryaddyosmani/agent-skills | 102k | 1 repos | ~2.6k | Automated safety check: Pass | MIT | |
| EasyEDA Pro API Bridgeeasyeda/easyeda-api-skill | 855 | — | ~7.8k | Automated safety check: Pass | MIT | |
| Qwen Code Memory Leak DebuggerQwenLM/qwen-code | 28k | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Tsed CLItsedio/tsed | 3.1k | — | ~2.7k | Automated safety check: Pass | MIT |
OrchestratorInc/agent-orchestrator
Launches, restarts and troubleshoots the real AO Electron desktop app from a checkout, with isolated or real local data and checks for stale processes.
addyosmani/agent-skills
Applies a stop-the-line rule and a step-by-step triage when tests fail, builds break or something stops working, aiming at the root cause instead of guesses.
easyeda/easyeda-api-skill
Gives an agent the EasyEDA Pro API reference and a WebSocket bridge to run code in a live EasyEDA client, for PCB, schematic and library work and extension development.
QwenLM/qwen-code
Walks through capturing and comparing V8 heap snapshots to find memory leaks in the Qwen Code Node.js CLI, using tmux and the chrome-devtools CLI.
tsedio/tsed
Scaffolds Ts.ED v8 projects and generates files with the Ts.ED CLI v7, through its MCP server (tools set-workspace, init-project, list-templates, get-template, generate-file) or the tsed binary…
bgauryy/octocode
Researches code with evidence: traces callers, imports and cross-repo links, diagnoses failures and reports findings with exact file and line references and a confidence label.
AIDotNet/NextCoWork
Create, install, validate, update, and diagnose NextCoWork Skills.
Works with
Categories
Author, package, and debug NextCoWork plugins — the single entry point. Plugin Builder is an agent skill from AIDotNet/NextCoWork. Author, package, and debug NextCoWork plugins — the single entry point.
Plugin Builder fits situations like: scaffolding a plugin; choosing what to contribute; reviewing a manifest; debugging a permission.
Run `npx skills add AIDotNet/NextCoWork --skill plugin-builder -a claude-code`. Or copy the skill folder (resources/skills/plugin-builder in AIDotNet/NextCoWork) into .claude/skills/plugin-builder in your project. Claude Code loads it when a task matches its description.
Run `npx skills add AIDotNet/NextCoWork --skill plugin-builder -a codex`. Or copy the skill folder (resources/skills/plugin-builder in AIDotNet/NextCoWork) into .agents/skills/plugin-builder in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AIDotNet/NextCoWork --skill plugin-builder -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/plugin-builder, .gemini/skills/plugin-builder, .github/skills/plugin-builder and .opencode/skills/plugin-builder in your project.
SKILL.md names no scripts, command-line tools or credentials: Plugin Builder is instructions for the agent only.
SKILL.md names 1 domain. In commands or code: bilibili.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Plugin Builder is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 14k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Plugin Builder: AO Desktop App Launcher (OrchestratorInc/agent-orchestrator, 13k stars), Debugging and Error Recovery (addyosmani/agent-skills, 102k stars), EasyEDA Pro API Bridge (easyeda/easyeda-api-skill, 855 stars) and Qwen Code Memory Leak Debugger (QwenLM/qwen-code, 28k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
AIDotNet (a GitHub organization) maintains it in AIDotNet/NextCoWork, which has 638 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 2, 2026.
Source: AIDotNet/NextCoWork on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.