Agent skill

UI Remote

by jetperch in jetperch/pyjoulescope_ui

Attach to and drive the running Joulescope UI via its --tcp-server remote-control interface.

Apache-2.0Auto-check passedData & Analytics

Install UI Remote

skills CLI
$ npx skills add jetperch/pyjoulescope_ui --skill ui-remote -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jetperch/pyjoulescope_ui ui-remote --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jetperch/pyjoulescope_ui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ui-remote .claude/skills/ui-remote && rm -rf skills-src

Use ~/.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/

Facts

Skill name
ui-remote
GitHub stars
111
Token cost
~1.7k tokens
SKILL.md length
721 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
Apache-2.0

At a glance

Attach to and drive the running Joulescope UI via its --tcp-server remote-control interface.

  • Works in 5 steps: Check for a live UI: python… → server.json exists but ping fails →… → No UI running and the task needs one →… → …
  • Asked to screenshot the UI
  • SKILL.md covers Attach or launch — decision tree, The verification loop, CLI cheat sheet and Direct client use, plus 3 more sections
  • Calls python

What it does

UI Remote is an agent skill from jetperch/pyjoulescope_ui. Attach to and drive the running Joulescope UI via its --tcp-server remote-control interface. Use when asked to screenshot the UI, verify a UI change visually, switch views (multimeter/oscilloscope/file), read or change UI settings, inspect widget state, click/drag/type in the UI, watch live statistics, or launch the UI for verification. Not for editing UI source code — only for interacting with a live UI process.

Its SKILL.md is about 1.7k 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 Data & Analytics, covering Statistics. It works with Python. The repository describes itself as: Joulescope graphical user interface. The licence is Apache-2.0.

When your agent uses it

  • Asked to screenshot the UI
  • Verify a UI change visually
  • Switch views (multimeter/oscilloscope/file)
  • Change UI settings

Example prompts

  • “/ui-remote”

Requirements

  • Python 3

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Check for a live UI: python ci/uitest/cli.py ping
  2. server.json exists but ping fails → stale file from a hard kill. Tell the
  3. No UI running and the task needs one → launch it yourself with Bash
  4. Never use ci/uitest/harness.py::UiSession on the user's real UI. Its
  5. Closing: only close a UI that you launched yourself, with a plain

What it can do on your machine

Read from SKILL.md and the folder at commit 6b75d2f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • python

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

UI Remote loads about 1.7k tokens when it runs. Until then it costs about 107 tokens; SKILL.md has 721 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~107
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from jetperch/pyjoulescope_ui at commit 6b75d2f, republished under its Apache-2.0 licence (© jetperch). 721 words, ~1,680 tokens.

Download SKILL.mdSave it as .claude/skills/ui-remote/SKILL.md (or your agent's skills folder).
name
ui-remote
description
Attach to and drive the running Joulescope UI via its --tcp-server remote-control interface. Use when asked to screenshot the UI, verify a UI change visually, switch views (multimeter/oscilloscope/file), read or change UI settings, inspect widget state, click/drag/type in the UI, watch live statistics, or launch the UI for verification. Not for editing UI source code — only for interacting with a live UI process.

Driving the Joulescope UI remotely

The UI started with --tcp-server exposes remote PubSub + Qt inspection on localhost (default port 21861). Authoritative protocol/API doc: docs/tcp_server.md. One-shot helper for everything below: python ci/uitest/cli.py <cmd> (run from the repo root, in the Python environment where joulescope_ui is importable).

Attach or launch — decision tree

  1. Check for a live UI: python ci/uitest/cli.py ping

    • Exit 0 → connected; output includes the active view. Proceed.
    • Exit 2 → no UI with --tcp-server. Credentials live in %LOCALAPPDATA%\joulescope\server.json ({'token','port'}); the file is deleted on clean exit, so its presence normally means a live UI.
  2. server.json exists but ping fails → stale file from a hard kill. Tell the user; do not silently delete it. Launching a new UI overwrites it.

  3. No UI running and the task needs one → launch it yourself with Bash run_in_background:

    python -m joulescope_ui --tcp-server

    Wait in two stages: poll for server.json to appear (≤30 s), then poll ping until it succeeds. The token regenerates on every launch — never cache credentials across launches.

  4. Never use ci/uitest/harness.py::UiSession on the user's real UI. Its stop() publishes !close with config_clear, which wipes the developer's real UI configuration. UiSession is for isolated pytest runs only.

  5. Closing: only close a UI that you launched yourself, with a plain cli.py publish "registry/ui/actions/!close" null (no config clear). Never publish !close to a UI the user was already running.

The verification loop

The core workflow for "verify this UI change":

  1. Act (publish a setting, click, switch view).
  2. Verify state: query the topic, or use publish ... --wait (read-after-write). publish is fire-and-forget with no ack — never sleep-and-hope.
  3. Screenshot to the session scratchpad, numbered for before/after pairs: python ci/uitest/cli.py screenshot <scratchpad>/ui_01.png
  4. Read the PNG (the Read tool renders images) and decide.

CLI cheat sheet

All commands print one JSON object. Exit codes: 0 ok, 2 UI not running/stale creds, 3 timeout, 4 server error. Globals: --timeout (default 15 s), --port, --token, --server-json.

CommandExample
pingcli.py ping — attach check, reports active view
screenshotcli.py screenshot out.png --widget WaveformWidget:0
querycli.py query registry/view/settings/active
publishcli.py publish registry/view/settings/active view:multimeter --wait
viewcli.py view multimeter | oscilloscope | file (waits, prints old→new)
enumcli.py enum registry — discover the topic tree
inspectcli.py inspect --depth 3 or cli.py inspect central_widget
findcli.py find --class WaveformWidget / --name my_button / --text "1.5.1" — prints usable widget paths
actioncli.py action click --path my_button; cli.py action resize --kwargs '{"width":1280,"height":800}'
devicescli.py devices — connected Joulescopes (model, serial)
statscli.py stats --duration 2 — sample live statistics safely

PowerShell quoting for JSON args: wrap in single quotes (--kwargs '{"x":1}'). Available action names: click, drag, key, cursor, resize, menu_invoke, menu_close, menu_items, set_property, get_property, call (see docs/tcp_server.md).

Show full SKILL.md (281 more words)Show less

Direct client use

For anything the CLI doesn't cover (persistent subscriptions, numpy signal data), write a script:

python
import sys
sys.path.insert(0, 'ci')
from uitest.discover import find_credentials
from joulescope_ui.tcp_client import Client

creds = find_credentials()          # {'token','port'} or None
with Client(**creds, timeout=15.0) as c:
    print(c.query('registry/view/settings/active'))

Pointers: full client API and wire protocol → docs/tcp_server.md. Wait/interaction helpers (wait_for, open_file, wait_for_statistics, record_start/stop, export_range, is_waveform_rendered) → ci/uitest/harness.py (pytest only — see warning above). Widget-tree search → ci/uitest/qt.py.

Topics and widget paths

  • registry/view/settings/active — view:multimeter | view:oscilloscope | view:file
  • registry/view/actions/!widget_open / !widget_close
  • registry/+/events/statistics/!data — live statistics (subscribe)
  • Discover the rest: cli.py enum registry, then drill down.

Widget paths are slash-separated objectName values with ClassName:index fallback (0-based among same-class siblings), e.g. central_widget/WaveformWidget:0. An empty path targets the ACTIVE window — an open dialog steals targeting; dismiss dialogs first (Escape key action or menu_close).

Pitfalls

  • Never publish registry/ui/actions/!close or anything config-clearing to the user's own UI session.
  • publish has no ack — verify via query, --wait, or a screenshot.
  • The library's default client timeout is 5 s; the CLI already uses 15 s. Use more for device operations, file open, or export.
  • The token changes every launch, and a stale server.json survives a hard kill — always ping before trusting it.
  • Streaming signal topics deliver numpy arrays over binary frames — don't try to JSON-print them; use stats for quick numbers.
  • Subscriptions cover the topic's subtree, and a + segment matches any one segment (e.g. registry/+/events/statistics/!data); callbacks receive the concrete topic.
  • Offscreen or unpainted OpenGL waveform: hit-test geometry stays empty and waveform mouse interactions silently no-op. Waveform interaction needs a real, visible display (is_waveform_rendered in the harness checks this).
  • No CLI flags for port or window size — resize via action resize.
  • Blank screenshot → the window may be minimized; ask the user to restore it.

Reference map

  • docs/tcp_server.md — protocol, full client API, all qt_action kwargs.
  • ci/uitest/harness.py — launch-and-own UiSession harness (pytest only).
  • ci/uitest/README.md + ci/uitest/test_*.py — worked interaction examples (menus, drag, export, markers).

© jetperch, 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

Files

Just SKILL.md in .claude/skills/ui-remote of jetperch/pyjoulescope_ui.

Open the folder on GitHubat commit 6b75d2f

Compare with similar skills

UI Remote 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.

UI Remote compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
UI Remote this skilljetperch/pyjoulescope_ui111—~1.7kAutomated safety check: PassApache-2.0
StatsmodelszLanqing/codex-claude-academic-skills4.6k16 repos~4.9kAutomated safety check: PassBSD-3-Clause
Rota Bench Regression Analysisoracle/graalpython1.7k—~1.6kAutomated safety check: PassCustom licence
Querying Indonesian Gov Datasuryast/indonesia-gov-apis172—~997Automated safety check: PassMIT
MatlabzLanqing/codex-claude-academic-skills4.6k9 repos~2.3kAutomated safety check: NotesGPL-3.0
Meridian MMM Model Buildinggoogle/meridian1.6k—~2.5kAutomated safety check: PassApache-2.0

Similar skills

  • Statsmodels

    zLanqing/codex-claude-academic-skills

    Statistical models library for Python. An agent skill from zLanqing/codex-claude-academic-skills.

    4.6k GitHub starsUsed in 16 repos~4.9k tokens
    Data & AnalyticsAuto-check passed
  • Official

    Analyze recent GraalPy benchmark regressions on master as part of the weekly rota.

    1.7k GitHub stars~1.6k tokensUpdated yesterday
    Data & AnalyticsAuto-check passed
  • Querying Indonesian Gov Data

    suryast/indonesia-gov-apis

    Query 57 Indonesian government APIs and data sources — BPJPH halal certification, BPOM food safety, OJK financial legality, BPS statistics, BMKG weather/earthquakes, Bank Indonesia exchange rates…

    172 GitHub stars~997 tokensUpdated yesterday
    Data & AnalyticsAuto-check passed
  • Matlab

    zLanqing/codex-claude-academic-skills

    MATLAB and GNU Octave numerical computing for matrix operations, data analysis, visualization, and scientific computing.

    4.6k GitHub starsUsed in 9 repos~2.3k tokens
    Data & AnalyticsAuto-check: notes
  • Official

    Takes a user through building a Meridian marketing mix model, from loading CSV data and mapping columns to running EDA, fitting and saving the model.

    1.6k GitHub stars~2.5k tokensUpdated today
    Data & AnalyticsAuto-check passed
  • Statistical Data Analysis

    lingzhi227/agent-research-skills

    Writes statistical analysis code for experimental data, runs it through a four-round review, and reports effect sizes, p-values and confidence intervals.

    383 GitHub stars~886 tokensUpdated 7 mo ago
    Data & AnalyticsAuto-check passed

Works with

Questions about UI Remote

What does UI Remote do?

Attach to and drive the running Joulescope UI via its --tcp-server remote-control interface. UI Remote is an agent skill from jetperch/pyjoulescope_ui. Attach to and drive the running Joulescope UI via its --tcp-server remote-control interface.

When should I use UI Remote?

UI Remote fits situations like: asked to screenshot the UI; verify a UI change visually; switch views (multimeter/oscilloscope/file); change UI settings.

How do I install UI Remote in Claude Code?

Run `npx skills add jetperch/pyjoulescope_ui --skill ui-remote -a claude-code`. Or copy the skill folder (.claude/skills/ui-remote in jetperch/pyjoulescope_ui) into .claude/skills/ui-remote in your project. Claude Code loads it when a task matches its description.

How do I install UI Remote in Codex?

Run `npx skills add jetperch/pyjoulescope_ui --skill ui-remote -a codex`. Or copy the skill folder (.claude/skills/ui-remote in jetperch/pyjoulescope_ui) into .agents/skills/ui-remote in your project. Codex loads it when a task matches its description.

Can I use UI Remote in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jetperch/pyjoulescope_ui --skill ui-remote -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ui-remote, .gemini/skills/ui-remote, .github/skills/ui-remote and .opencode/skills/ui-remote in your project.

What does UI Remote need to run?

Going by SKILL.md and its folder, UI Remote needs the command-line tools its instructions call (python). Our summary lists: Python 3.

Does UI Remote access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is UI Remote safe to install?

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.

What licence does UI Remote use?

UI Remote 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.

How many tokens does UI Remote use?

About 1.7k tokens (SKILL.md is roughly 6.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to UI Remote?

Skills that share tags, products or a category with UI Remote: Statsmodels (zLanqing/codex-claude-academic-skills, 4.6k stars), Rota Bench Regression Analysis (oracle/graalpython, 1.7k stars), Querying Indonesian Gov Data (suryast/indonesia-gov-apis, 172 stars) and Matlab (zLanqing/codex-claude-academic-skills, 4.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains UI Remote?

jetperch (a GitHub organization) maintains it in jetperch/pyjoulescope_ui, which has 111 GitHub stars. The repository was last updated on September 15, 2026.

Source: jetperch/pyjoulescope_ui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.