Cao MCP Apps
awslabs/cli-agent-orchestrator
Enable, operate, and extend CAO's MCP Apps surface — the host-rendered fleet dashboard visible inside MCP App hosts (Claude Desktop, ChatGPT, VS Code Copilot, Goose, Postman).
Drives the live Open Screenshot Generator editor tool by tool over MCP, using osg mcp to expose the design tools (artboards, elements, backgrounds, fonts, the asset libraries, templates, App Preview…
$ npx skills add dotnetdreamer/open-screenshot-generator --skill editor-tools -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dotnetdreamer/open-screenshot-generator editor-tools --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/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/editor-tools .claude/skills/editor-tools && 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 "editor-tools" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/skills/editor-tools into .claude/skills/editor-tools/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "editor-tools", 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/dotnetdreamer/open-screenshot-generator/tree/main/skills/editor-toolsType 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 dotnetdreamer/open-screenshot-generator --skill editor-tools -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dotnetdreamer/open-screenshot-generator editor-tools --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/editor-tools .agents/skills/editor-tools && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "editor-tools" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/skills/editor-tools into .agents/skills/editor-tools/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "editor-tools", 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 dotnetdreamer/open-screenshot-generator --skill editor-tools -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dotnetdreamer/open-screenshot-generator editor-tools --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/editor-tools .cursor/skills/editor-tools && 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 "editor-tools" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/skills/editor-tools into .cursor/skills/editor-tools/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "editor-tools", 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/dotnetdreamer/open-screenshot-generator.git --path skills/editor-tools--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 dotnetdreamer/open-screenshot-generator --skill editor-tools -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dotnetdreamer/open-screenshot-generator editor-tools --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/editor-tools .gemini/skills/editor-tools && 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 "editor-tools" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/skills/editor-tools into .gemini/skills/editor-tools/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "editor-tools", 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 dotnetdreamer/open-screenshot-generator editor-toolsInstalls 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 dotnetdreamer/open-screenshot-generator --skill editor-tools -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/editor-tools .github/skills/editor-tools && 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 "editor-tools" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/skills/editor-tools into .github/skills/editor-tools/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "editor-tools", 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 dotnetdreamer/open-screenshot-generator --skill editor-tools -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install dotnetdreamer/open-screenshot-generator editor-tools --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/editor-tools .opencode/skills/editor-tools && 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 "editor-tools" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/skills/editor-tools into .opencode/skills/editor-tools/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "editor-tools", 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.
editor-toolsDrives the live Open Screenshot Generator editor tool by tool over MCP, using osg mcp to expose the design tools (artboards, elements, backgrounds, fonts, the asset libraries, templates, App Preview…
Editor Tools is an agent skill from dotnetdreamer/open-screenshot-generator. Drives the live Open Screenshot Generator editor tool by tool over MCP, using osg mcp to expose the design tools (artboards, elements, backgrounds, fonts, the asset libraries, templates, App Preview timelines, 57 locales and PNG export) to any MCP client, plus osg install to write the server entry into a detected agent config. Use this whenever someone wants to edit an existing screenshot project rather than regenerate it, asks to connect the design tools to Claude Code, Cursor, Claude Desktop or VS Code, or says…
Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Agent Workflows, covering MCP servers. It works with Model Context Protocol, Visual Studio Code and Tauri. The repository describes itself as: Open source Canva with CLI/GUI, AI Agent, MCP for App Store and Play Store screenshots. Free alternative to AppScreens, AppLaunchpad and Previewed. The licence is MIT.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 556578e. 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.
Shell commands in SKILL.md call:
npxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.
From 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.
Editor Tools loads about 3.8k tokens when it runs. Until then it costs about 210 tokens; SKILL.md has 2,090 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 dotnetdreamer/open-screenshot-generator at commit 556578e, republished under its MIT licence (© dotnetdreamer). 2,090 words, ~3,793 tokens.
.claude/skills/editor-tools/SKILL.md (or your agent's skills folder).The end state: an MCP client holding a live connection to the real editor, with the user's project open, making precise edits that land as real undo steps in a project file the user can open in the app afterwards.
Nothing here is a reimplementation. Every call lands in the same function a click in the UI lands in, inside the real editor page. That is why an edit you make is indistinguishable from an edit the user made by hand.
npx -y open-screenshot-generator@0 installinstall detects the agent configs on this machine and writes the server entry. Prefer it over
hand editing, especially on Windows where several clients need the command wrapped.
The manual form, for a config it did not know about:
{
"mcpServers": {
"open-screenshot-generator": {
"command": "npx",
"args": ["-y", "open-screenshot-generator@0", "mcp", "--stdio"]
}
}
}--stdio is the default and the right choice: no port, no firewall prompt, no shared secret. Use
--http --port 8722 only when the client cannot spawn a process, and it then speaks Streamable HTTP
at http://127.0.0.1:8722/mcp.
Two behaviours worth knowing so the server does not feel broken:
initialize, ping and tools/list are answered from a manifest generated at build time, with no
browser at all. Every client calls tools/list at session start and paying a browser boot for a
handshake would be unacceptable.tools/call and stays warm for the life of the connection. So
the first real call is slow and every one after it is not.One capability exists here that no other transport has: export_png and export_all with
save: true actually write files. In a browser tab that throws, because a tab cannot write to disk.
For one off calls without a client, the CLI is the same surface:
npx -y open-screenshot-generator@0 call list_artboards
npx -y open-screenshot-generator@0 edit --script osg/edits.jsonosg call prints the raw JSON result on stdout, so it pipes into jq. osg edit --script runs a
list of calls in order, which is the quoting proof form on Windows.
These are not style preferences. Each one is a way to make a call that returns success and changes nothing.
1. One call in flight, always. The tool api closes over the artboards of the render that produced it. Two mutations dispatched in the same tick both read the pre change state and the second silently clobbers the first. The CLI serializes every bridge call for exactly this reason. If you are driving the page yourself, await each response fully before sending the next. The desktop app and the web relay also put concurrent calls in one line, but a call that waits there past its time budget is refused rather than run, so a burst of parallel calls turns into errors, not speed.
2. There is one door, and it is the same door the UI uses. Every mutating tool commits through
the app's single update path, which repositions the boards, writes the project, and pushes one undo
entry. That is why one tool call is one Ctrl+Z, and why add_elements is strictly better than a
loop of add_element: one round trip, one undo step, and nothing is added at all if any entry is
rejected, so you never end up with a half built board.
3. An artboard's position is derived. It is recomputed and overwritten on every update.
Authoring it does nothing. Move a board along the canvas with update_artboard index instead, 0
being leftmost.
4. x/y and width/height are not symmetric. position is written if either x or y
is present, filling the missing one with 0, so update_element with only x also slams the element
to y=0. size is written only when both width and height are present, so a lone width is
dropped with no error at all. Always pass the pairs together.
5. An explicit null clears a property. Omitting it leaves it alone. null is the only way to
remove a shadow, a fillGradient, an animation enter or exit, or a preview duration override.
6. An unknown fontFamily is rejected, not substituted. The error names the closest available
families. This is deliberate: a browser silently falls back to a default serif, which looks like the
design changed for no reason. list_fonts is the allowlist, filterable by script (latin, arabic,
urdu, hebrew, cjk, thai, devanagari, bengali, multilingual).
7. Text does not measure the way you expect. Glyphs render at roughly 3.3x the stored fontSize
and wrap inside the element box, which clips. So ~48 is a phone headline, not 96, and the real ink
bounds cannot be predicted from the props. measure_element returns what the element actually
occupies on the rendered canvas. Use it before aligning anything to a headline's edge.
8. Elements paint in list order, first at the back, and adding one always puts it on top. Use
reorder_element to slide a background behind work you already placed, rather than rebuilding the
board.
9. export_png, export_all and measure_element read the live DOM. They fail if the project is
not open on screen. open_project waits two animation frames before returning for exactly this
reason.
10. Upload an image once. upload_asset returns an asset:<id> reference you can pass to
imageSrc or screenshotSrc as many times as you like, instead of repeating a data URL in every
call. Elements keep the reference and the editor resolves it when it draws, so the bytes are stored
once. A reference that does not exist is refused when you pass it, never drawn as an empty frame.
Pass the whole asset:<id>, not the bare id.
11. A recording is not an asset. upload_asset probes bytes as an image and refuses a video.
Screen recordings go through upload_recording and elements carry only the mediaId it returns.
Prefer an http(s) URL over base64 for anything large: a request body is capped at 32 MiB.
12. Every language tool except two writes the base document. Only set_locale and the locale
arguments read a per language projection. See the store-localization skill.
13. Adding a video-device, video or gesture element, or any animation, switches the whole
project to the video export path. Never put one on a screenshot board.
14. delete_artboard refuses the last board. A project with zero artboards leaves the canvas
stuck loading.
15. Errors come back as data. An unknown tool is a JSON-RPC -32602. A tool that rejected your
arguments is a normal result with isError and a sentence saying what to do. Read the sentence, it
usually names the tool to call instead.
16. Slow tools get a longer budget. export_png, export_all, apply_template,
create_project_from_template, open_project, add_elements, duplicate_artboard,
update_artboard, translate_locales, add_locales, upload_asset and upload_recording are
allowed minutes. Everything else answers in seconds, and a hang means a dialog is open in the page.
| Tool | Reach for it when |
|---|---|
list_artboards | always first. ids, names, sizes, backgrounds, element counts |
get_artboard | you need the element ids and every property on one board |
measure_element | you need the true rendered bounds of text, or to check for clipping |
list_projects | the user means a different project than the open one |
open_project | switching to it. slow, and it waits for the canvas |
create_artboard (width and height, or a preset id like ios-6-3, the required iPhone size
at 1206x2622), duplicate_artboard,
update_artboard (rename, resize, reorder), delete_artboard, set_active_artboard,
set_background (solid or a two stop gradient, and a half filled gradient is refused rather than
stored).
The fastest way to build a store set: build one board properly, duplicate_artboard per screen, then
change only the headline and the screenshot. Rename every board, because the name becomes the
exported file name and a board left as "Blank Artboard" exports as one.
| Tool | Reach for it when |
|---|---|
add_elements | adding anything. batch, atomic, one undo step, back to front |
add_element | a single element, usually inside a larger flow |
update_element | changing anything on an existing layer |
delete_element | removing one |
reorder_element | fixing stacking. front, back, forward, backward, or an index |
transform_elements | moving or scaling several layers as one arrangement |
group_elements | tagging layers so transform_elements can target them later by groupId |
align_elements | lining two or more layers up on one edge of the box they span: left, center-h, right, top, middle-v, bottom |
distribute_elements | evening out the gaps between three or more layers, horizontal or vertical |
Types are text, shape, device, image, video-device, video, gesture. Instead of
type/subType you can pass a libraryId from list_library to drop a ready made palette asset:
vector shapes, arrows, blobs, waves, patterns, photos of people holding phones, store badges, flat
device mockups, 3D posed devices and coloured frames. Prefixes are element:, image:, device:,
device3d: and devicecolor:.
list_templates (101 of them, categories screenshots, apple-watch, mac,
play-feature-graphic), get_template (its fillable slots, with stable element ids),
apply_template (replace every board of the project that is already open with a filled copy of the
template, as one undo step, keeping the project), create_project_from_template (copy it into a new
project, open it, and optionally fill text and screenshots in the same call), list_projects,
open_project, rename_project (the open project's name, nothing else).
When a project is open, and the user expects the design to land in it, use apply_template:
create_project_from_template starts a second project and leaves the open one behind. Both take the
same texts and screenshots. A screenshot src is an asset:<id> ref (from upload_asset, or
one of the screenshots the user uploaded), a data:image URL, an http(s) URL or a path on the site;
anything else is refused before the template is touched. Read the warnings in the result: they
name ids the template does not have and every device frame still showing the template's sample
screenshot.
list_templates deliberately hides the app-preview category, because those boards play a recording.
Preview work goes through list_preview_scenes and add_preview_scene.
list_preview_scenes, add_preview_scene, set_animation, set_preview_duration,
get_preview_timeline, upload_recording, list_recordings. The full doctrine, including Apple
Review Guideline 2.3.4, is in the app-preview-video skill. Two traps worth repeating here:
set_animation refuses recordings and gestures (a recording starts the board, a gesture is timed by
triggerTime), and an exit with no exitStart never fires.
list_library, list_fonts, upload_asset, list_assets, delete_asset.
Config: list_supported_locales, list_locales, add_locales, remove_locales, set_base_locale,
set_locale.
Copy: list_translations, set_localized_text, set_localized_texts, translate_locales,
export_translations_csv, import_translations_csv.
Design: set_locale_override, reset_locale_overrides.
export_png for one board, export_all for the project in canvas order. Both take an optional
locale, which switches the canvas, captures, and switches back.
While iterating, always pass scale: 0.25. A full size board is megabytes of base64 in the
response and there is nothing in it your eye needs at proof time. Switch to save: true for the
final delivery and get paths back instead of a wall of data.
list_artboards to get ids.get_artboard on the one you are changing, to get element ids and current values.add_elements for new layers, update_element for edits.measure_element if text moved or grew.export_png with scale: 0.25 and look at it.export_all with save: true when it is right.Do not skip step 5. You cannot see the canvas, and a design that reads correctly as JSON regularly looks wrong as an image.
A tool returned ok and nothing changed. Almost always rule 4 (a lone width), rule 12 (a
locale edit that went to the base document), or a locale override on a property that is shared until
detached.
"No such element." The id came from a different artboard. Element ids are unique per board, and
several tools accept an artboardId precisely to disambiguate.
Everything hangs after one call. A modal is open in the page, or two mutations went out in one
tick. Re-run with --verbose to see the page console.
measure_element says the element is not on screen. The project is not open. Call open_project.
The first tool call takes 20 seconds. That is the browser boot. Every later call is fast.
The export is a white board. A gradient background was written half filled somewhere. Set it
again through set_background with all three of color1, color2 and angle.
A layer exports but does not show in the preview dialog, or the reverse. That is an app level renderer gap, not a tool problem. Report it rather than working around it in the design.
© dotnetdreamer, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/editor-tools of dotnetdreamer/open-screenshot-generator.
Open the folder on GitHubat commit 556578e
Editor Tools 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 |
|---|---|---|---|---|---|---|
| Editor Tools this skilldotnetdreamer/open-screenshot-generator | 124 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Cao MCP Appsawslabs/cli-agent-orchestrator | 1.4k | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| CC Workflow Studio AI Editorbreaking-brake/cc-wf-studio | 5.4k | — | ~561 | Automated safety check: Pass | Custom licence | |
| Agnixagent-sh/agnix | 445 | — | ~874 | Automated safety check: Pass | Apache-2.0 | |
| Claude Docs Consultantcentminmod/my-claude-code-setup | 2.7k | — | ~959 | Automated safety check: Pass | MIT | |
| Agnixagent-sh/agnix | 445 | — | ~563 | Automated safety check: Pass | Apache-2.0 |
awslabs/cli-agent-orchestrator
Enable, operate, and extend CAO's MCP Apps surface — the host-rendered fleet dashboard visible inside MCP App hosts (Claude Desktop, ChatGPT, VS Code Copilot, Goose, Postman).
breaking-brake/cc-wf-studio
Creates and edits visual agent workflows in CC Workflow Studio through conversation, with the agent reading and writing the canvas over MCP.
agent-sh/agnix
A skill your agent uses when user asks to 'lint agent configs', 'validate skills', 'check CLAUDE.md', 'validate hooks', 'lint MCP'.
centminmod/my-claude-code-setup
Consult official Claude Code documentation from code.claude.com using selective fetching.
agent-sh/agnix
A skill your agent uses when user asks to 'lint agent configs', 'validate skills', 'check CLAUDE.md', 'validate hooks', 'lint MCP'.
woocommerce/woocommerce-ios
Set up the ContextA8C MCP server for accessing Automattic internal resources (Slack, Linear, P2s, GitHub Enterprise, etc.)
dotnetdreamer/open-screenshot-generator
Builds an App Store App Preview video (and a Play Store or landing page promo cut) from a screen recording of the app, using the open-screenshot-generator CLI (osg video): it starts from one of 20…
dotnetdreamer/open-screenshot-generator
Drive Open Screenshot Generator headlessly (puppeteer-core + Edge) to take UI screenshots, add palette elements, upload device screenshots, export artboard PNGs, and regenerate the 3D device…
dotnetdreamer/open-screenshot-generator
Check the latest xtekky/gpt4free releases for provider additions/changes and decide whether Open Screenshot Generator's AI providers need the same.
dotnetdreamer/open-screenshot-generator
Add properly licensed Adobe Stock photos to the Images palette library (e.g.
dotnetdreamer/open-screenshot-generator
Checks that rendered store assets will actually be accepted, and then ships them, using the open-screenshot-generator CLI: osg verify audits the produced PNGs and MP4s against App Store and Google…
dotnetdreamer/open-screenshot-generator
Ships one screenshot design in many App Store and Play Store languages using the open-screenshot-generator CLI (osg localize): it adds store locales to an existing project, writes per language copy…
Categories
Drives the live Open Screenshot Generator editor tool by tool over MCP, using osg mcp to expose the design tools (artboards, elements, backgrounds, fonts, the asset libraries, templates, App Preview…. Editor Tools is an agent skill from dotnetdreamer/open-screenshot-generator. Drives the live Open Screenshot Generator editor tool by tool over MCP, using osg mcp to expose the design tools (artboards, elements, backgrounds, fonts, the asset libraries, templates, App Preview timelines, 57 locales and PNG export) to any MCP client, plus osg install to write the server entry into a detected agent config.
Editor Tools fits situations like: tasks that involve MCP servers.
Run `npx skills add dotnetdreamer/open-screenshot-generator --skill editor-tools -a claude-code`. Or copy the skill folder (skills/editor-tools in dotnetdreamer/open-screenshot-generator) into .claude/skills/editor-tools in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dotnetdreamer/open-screenshot-generator --skill editor-tools -a codex`. Or copy the skill folder (skills/editor-tools in dotnetdreamer/open-screenshot-generator) into .agents/skills/editor-tools 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 dotnetdreamer/open-screenshot-generator --skill editor-tools -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/editor-tools, .gemini/skills/editor-tools, .github/skills/editor-tools and .opencode/skills/editor-tools in your project.
Going by SKILL.md and its folder, Editor Tools needs the command-line tools its instructions call (npx). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. 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.
Editor Tools is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Editor Tools: Cao MCP Apps (awslabs/cli-agent-orchestrator, 1.4k stars), CC Workflow Studio AI Editor (breaking-brake/cc-wf-studio, 5.4k stars), Agnix (agent-sh/agnix, 445 stars) and Claude Docs Consultant (centminmod/my-claude-code-setup, 2.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
dotnetdreamer (a GitHub user) maintains it in dotnetdreamer/open-screenshot-generator, which has 124 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 7, 2026.
Source: dotnetdreamer/open-screenshot-generator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.