Ops Desktop logo

Ops Desktop

Organization
Lifecycle-Innovations-Limited
ops-desktop

OPS on-demand: This skill should be used when the user asks to "control the desktop", "click on…

Overview

PublisherLifecycle-Innovations-Limited
Repositoryclaude-ops
Skill nameops-desktop
Stars
543
Forks
64
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by Lifecycle-Innovations-Limited on GitHub. Read the source before you install it.

Installation

Install the Ops Desktop AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-desktop
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git /tmp/claude-ops
mkdir -p .claude/skills
cp -r /tmp/claude-ops/claude-ops/skills/ops-desktop .claude/skills/ops-desktop
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Ops Desktop in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Ops Desktop on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Ops Desktop is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

OPS ► DESKTOP

Load ops-rules before acting. Public repo (no personal data). Outbound: one draft → one approval → one send. If AskUserQuestion / Workflow are missing, follow Rule 10 in ops-rules (Hermes: numbered options / two-turn Telegram card; delegate_task).

/ops:desktop drives a real GUI desktop (Linux noVNC pool, partial macOS / Windows support) through the desktop-act FastMCP server. Use it for tasks that browser-only automation can't reach: native dialogs, OS file pickers, multi-window flows, screen-recording verification.

The MCP tool schemas are deferred. Load them with ToolSearch on demand:

ToolSearch select:mcp__desktop-act__acquire_desktop,mcp__desktop-act__screenshot,mcp__desktop-act__click,mcp__desktop-act__type_text,mcp__desktop-act__release_desktop

Runtime Context

Before any route runs, resolve:

  1. Plugin root: ${CLAUDE_PLUGIN_ROOT} — used to locate the launcher.
  2. MCP launcher: ${CLAUDE_PLUGIN_ROOT}/mcp-servers/desktop-act-launcher.py — auto-discovers an installed desktop-act marketplace or, if absent, clones from $DESKTOP_ACT_REPO (default https://github.com/Lifecycle-Innovations-Limited/desktop-act.git) and bootstraps a venv on first run.
  3. noVNC default: http://<box-host>:6082 — primary desktop. acquire_desktop() provisions extra sessions on :6082+.
  4. Mobile / SSH mode: if $SSH_CONNECTION, $SSH_CLIENT, or $SSH_TTY is set, emit compact text-only output per Rule 7 (no banners, no tables, plain lines). The noVNC URL is the one piece the user definitely needs — print it once on a copy-able line.

Routing table

Parse $ARGUMENTS and route. First token decides:

First argRoute
(empty) / statusPrint MCP status, default noVNC URL, active sessions, and platform support note
listmcp__desktop-act__list_desktops — show pool state
release <id>mcp__desktop-act__release_desktop(session_id) — free a session
release-allRelease every session this skill has open this turn
anything elseTreat as a goal — acquire → observe → drive → verify → release

Anything else: treat the whole argument string as the goal.


Route — status (default)

  1. Probe the MCP via mcp__desktop-act__status (auto-load schema first).
  2. Print compact summary — plugin connected? venv ready? pool size? default URL?
  3. If the MCP is not reachable, the launcher likely needs to bootstrap. Show:
    • one-line install command (/plugin marketplace add <repo> && /plugin install desktop-act)
    • or the env override (export DESKTOP_ACT_COMMAND=/path/to/run.sh)
    • or the bootstrap repo (export DESKTOP_ACT_REPO=https://...)
  4. Mobile/SSH mode: drop banners, output 4–6 plain lines.

Route — list

ToolSearch select:mcp__desktop-act__list_desktops

Call it. Format as session_id · display · vnc · last_used. Linux only renders full info; macOS/Windows fall back to a "limited platform" note.

Route — release <id> / release-all

Per Rule 5 (destructive actions): release_desktop tears down the X server. Ask before bulk release:

AskUserQuestion: Release session abcd1234?
  [Release]  [Skip]

For release-all, batch confirm once.


Route — goal (default for free-form $ARGUMENTS)

The autonomous loop. Use this when the owner types /ops:desktop open the AWS console and screenshot the ECS cluster page.

Step 1 — Acquire

python
# Load schemas
ToolSearch select:mcp__desktop-act__acquire_desktop,mcp__desktop-act__screenshot,...

session = mcp__desktop-act__acquire_desktop()
session_id = session["session_id"]
display    = session["display"]      # e.g. ":51"
novnc_url  = session["novnc_url"]    # e.g. http://host:6082

Print the noVNC URL on a line by itself so the user can watch live. On mobile, the URL is the most useful thing — surface it FIRST.

Step 2 — Observe

python
shot = mcp__desktop-act__screenshot(session_id=session_id)
Read(file_path=shot["path"])   # let Claude see the screen

If you need window-level metadata before clicking blindly:

python
windows = mcp__desktop-act__list_windows(session_id=session_id)

Step 3 — Drive

Two modes:

A. Streaming primitives — full reasoning visibility, per-action transparency. Preferred for sensitive flows (anything touching credentials, billing pages, destructive UIs).

python
mcp__desktop-act__launch_app(session_id, app="firefox")
mcp__desktop-act__click(session_id, x=640, y=400)
mcp__desktop-act__type_text(session_id, text="ECS clusters")
mcp__desktop-act__keypress(session_id, key="Return")
mcp__desktop-act__scroll(session_id, direction="down", amount=3)
mcp__desktop-act__screenshot(session_id)   # verify

B. Autonomous loop — hands the goal to act() which runs claude-agent-sdk against the OAuth-bundled CLI (no API key needed; rides Claude Max). Faster but less observable.

python
result = mcp__desktop-act__act(
    session_id=session_id,
    goal="$ARGUMENTS",
    max_iterations=20,
)

For multi-step macros, prefer batch (single round-trip) or act_step (one micro-step at a time with explicit verification).

Step 4 — Verify

Always screenshot and Read the path once at the end before claiming the goal is done. If the verification screenshot doesn't show the expected state, iterate or escalate to the user.

Step 5 — Release

Always release in the same turn, even on failure:

python
mcp__desktop-act__release_desktop(session_id=session_id)

If the user wants to keep the session for follow-up actions, ask first via AskUserQuestion:

Keep session abcd1234 alive for follow-up?
  [Keep]  [Release]

Cross-platform notes

OSStatusNotes
LinuxFullX11 + Xvnc + websockify + python-xlib. Multi-desktop pool live.
macOSPartialServer runs; native X11 calls no-op. Browser tools still work.
WindowsPartialServer runs via Python launcher. Native automation requires manual.

On non-Linux platforms, prefer Kapture (mcp__kapture__*) or Playwright for browser-only tasks. The launcher prints a clear "limited platform" notice if it can't bring up a full session.

Safety

  • Outbound comms (Rule 6): if a goal involves sending email/messages/forms, stage the draft and ask before pressing Send. Per-message approval, never batch.
  • Destructive UI clicks: anything that says "Delete", "Terminate", "Force quit" routes through AskUserQuestion first per Rule 5.
  • Credentials: never type passwords into a goal string — leave it for the owner to fill in the live noVNC viewer.
  • Session isolation: each invocation of /ops:desktop gets its own session_id. Don't pass session IDs between concurrent agents or skills.

Examples

/ops:desktop                                    # status
/ops:desktop list                               # pool state
/ops:desktop release abcd1234                   # free session
/ops:desktop open the AWS ECS console and screenshot the my-project-api cluster
/ops:desktop launch Firefox and navigate to https://example.com

$ARGUMENTS

$ARGUMENTS

Frequently asked questions

What does the Ops Desktop AI skill do?

OPS on-demand: This skill should be used when the user asks to "control the desktop", "click on…

Why use Ops Desktop on TypingMind?

Because you install it once and use it with any model. Ops Desktop is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Ops Desktop in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-desktop. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Ops Desktop?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Ops Desktop?

As many as you like. As long as a model supports skills, you can use Ops Desktop with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Ops Desktop AI skill free?

Yes. It is published on GitHub by Lifecycle-Innovations-Limited under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇