本文へ移動
cccskills
無料GitHub で公開日本語紹介

inspecting-hermes-desktop-dom

起動中のHermesデスクトップアプリに接続し、画面要素のDOMやCSS、適用中のスタイル、コンソール出力を調べるスキルです。

原文原文の説明を見る

Read the live Hermes desktop DOM/CSS over CDP.

NousResearch/hermes-agentスター 258,442(GitHub 258,442 + cccskills 0)

実行スコア 未検証

インストール方法を見る

こんなときに便利

  • 起動中のアプリでUI変更を確認したいとき
  • 要素に適用中のCSSルールを調べたいとき
  • コンポーネントのセレクターを特定したいとき
  • 画面のコンソールエラーを読みたいとき

日本語での紹介

できること

開発中のHermesデスクトップアプリに接続し、実際に描画されたDOMやCSSをChrome DevTools Protocol(CDP)経由で読み取ります。要素が表示されているか、計算後のスタイルやサイズ、適用されたCSSルール、レンダラーのコンソール出力などを確認できます。見た目をコードから推測する代わりに、実際の画面でどのルールが適用されたかを調べる用途に向いています。

こんなときに便利

UIの変更が起動中のアプリに反映されたか確認したいときや、スタイルが効かない原因、安定して使える要素セレクターを調べたいときに便利です。色や余白の印象など、見た目の良し悪しを判断する用途ではなく、DOMやスタイルの事実確認に使います。

使い方の例

  • 「起動中の画面で、この要素の計算済みpaddingを調べてください」
  • 「このリンクにどのCSSルールが適用されているか確認してください」
  • 「レンダラーのコンソールエラーを読み取ってください」

注意点

Hermesデスクトップアプリの開発サーバー起動時に開くCDPポートが必要です。パッケージ版ではポートが開きません。接続できない場合はユーザーのアプリを再起動せず、別の分離したインスタンスを使います。画面の美しさやレイアウトの印象は、この方法だけでは判断できません。

この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。

資料チェック

SKILL.md の記述から、注意が要る操作と導入の前提を AI が確認しました。点数は実際に動かした結果(実行検証)だけで付けています。

安全面送信・削除・コマンド実行などの扱いが明示されているか
A良好ユーザーのアプリを再起動せず、分離インスタンスを使うよう明記されている。
導入のしやすさ必要なツールや API キーが少ないか、書かれているか
B一部不足開発サーバーのCDPポートが前提で、環境変数による変更・無効化も記載されている。

点数には入れていません。 2026年10月30日 時点で AI(OpenAI Codex)が判定しました。目安なので、入れる前に原文も確認してください。

評価が違うと思ったら、見直しを依頼する

どの項目が、なぜ違うと思うかを書いてください。ログインは不要です。内容を SKILL.md と照らし合わせて評価を作り直し、この欄に反映します。

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

含まれるファイル(1)

  • SKILL.md6.1 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Inspecting the live Hermes desktop DOM

Overview

When you are developing apps/desktop and the user is running that same app (hgui / npm run dev), you can read the live rendered DOM of the window they are looking at — computed styles, geometry, which CSS rule actually won, console output — instead of inferring it from .tsx and being wrong.

Dev-server runs open a Chrome DevTools Protocol port on 127.0.0.1:9222 automatically. The renderer is a Chromium page, so everything DevTools can read, a script can read.

This does not replace looking at it. CDP answers factual questions ("what is the computed padding", "did this element render", "which selector matches"). It cannot tell you whether the result looks good. Colour balance, spacing feel, and "is this ugly" still need the user's eyes or a screenshot. Answer facts with CDP; hand aesthetics to the user.

When to Use

  • Verifying a UI change actually took effect in the running app
  • "Why is this element still X?" — find the winning rule before editing anything
  • Locating a stable selector for a component you're about to change
  • Checking a design token's computed value on a real node
  • Reading renderer console errors the user mentions but can't copy out

Don't use for: perf profiling or heap work (node-inspect-debugger, debugging-hermes-desktop), or anything where the real question is "does this look right".

The port

Open on 127.0.0.1:9222 for any dev-server run. Closed in exactly two cases (apps/desktop/electron/dev-cdp.ts):

  • packaged builds — always, and no environment value overrides it;
  • no HERMES_DESKTOP_DEV_SERVER — an unpackaged electron . against dist/ is how the packaged app gets smoke tested, so it behaves like one.

HERMES_DESKTOP_CDP_PORT moves the port (=9333) or disables it (=off).

Check before doing anything else:

curl -s --max-time 3 http://127.0.0.1:${HERMES_DESKTOP_CDP_PORT:-9222}/json/version

Empty → no port. Do not guess another port silently.

Never relaunch the user's app to get a port. That destroys their session and their state. Launch your own isolated instance instead (below).

Reading the DOM

apps/desktop/scripts/eval.mjs is the one-liner:

cd apps/desktop
node scripts/eval.mjs "document.querySelectorAll('[data-slot]').length"

For multi-step work use the shared client — it has target discovery and promise-aware eval:

import { CDP, SELECTORS } from './scripts/perf/lib/cdp.mjs'

const cdp = await CDP.connect({ port: 9222, match: '5174' })
const out = await cdp.eval(`JSON.stringify({
  radius: getComputedStyle(document.documentElement).getPropertyValue('--radius-scalar').trim(),
  composer: !!document.querySelector('[data-slot="composer-rich-input"]')
})`)
cdp.close()

SELECTORS in scripts/perf/lib/cdp.mjs holds the stable data-slot hooks (composer, thread viewport, assistant message, turn pair, profile rail). Prefer them over inventing a querySelector — they are updated as a unit when components move.

The question this is best at: which rule won?

Editing every call site because a style "isn't applying" is the classic waste. Read the real node first:

const el = document.querySelector('[data-slot="aui_assistant-message-root"] a')
JSON.stringify({
  ownClasses: el.className,
  weight: getComputedStyle(el).fontWeight,
  parents: (() => {
    const out = []
    let n = el
    while ((n = n.parentElement) && out.length < 6) out.push(n.className)
    return out
  })()
})

If the node carries no class of its own, the value is inherited — sweeping call sites will not fix it, and you need the ancestor rule. A plugin stylesheet (e.g. @tailwindcss/typography's prose a { font-weight: 500 }) routinely beats a utility class; override on the shared class, not at each usage.

Your own isolated instance

When there is no port, or you must not disturb the user's window:

cd apps/desktop
HERMES_HOME=$HOME/.hermes/cache/scratch/cdp-probe-home \
HERMES_DESKTOP_DEV_SERVER=http://127.0.0.1:5174 \
HERMES_DESKTOP_CDP_PORT=9333 \
  npx electron . --user-data-dir=$HOME/.hermes/cache/scratch/cdp-probe-userdata

The separate --user-data-dir dodges Electron's single-instance lock, so it cannot collide with a running hgui; the separate HERMES_HOME keeps it away from real sessions. Pick a port other than 9222 for the same reason. Run it in the background and kill it when done.

npm run perf:serve does the same with a temp HERMES_HOME baked in, if you also want the perf harness.

Pitfalls

  • Never kill the user's dev server or app to "free" anything. A mid-serve kill nukes Chromium's socket pool, and the resulting ERR_NETWORK_CHANGED gets blamed on whatever you just changed.
  • A throwaway HERMES_HOME has no backend. The app logs ECONNREFUSED for hermes:api and may exit on its own. The renderer still mounts and the DOM is readable — read promptly, and don't mistake a self-exited probe for a broken port. Chromium logs DevTools listening on ws://127.0.0.1:<port>/… when it binds; that line is the proof the port opened.
  • Poll, don't probe once. A just-launched app needs a second or two before the port answers.
  • Never dump the whole DOM. The desktop renders hundreds of nodes and outerHTML will bury your context. Project down to a small JSON object inside the evaluated expression.
  • Pass match to CDP.connect. Without it you may attach to the pet overlay, quick-entry window, or a devtools target instead of the main window.
  • cdp.eval returns the value; raw Runtime.evaluate double-nests it (.result.result.value). Use the wrapper.
  • import.meta.env.DEV is true under vite dev in this repo. The note in apps/desktop/scripts/profile-typing-lag.md claiming otherwise is stale.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

1password

無料概要あり

1Passwordに保存したパスワードやAPIキーを、コマンド実行や設定テンプレートで使うためのスキル。CLIの導入、認証、秘密情報の取得・受け渡しを案内します。

  • 1Password CLIの導入と設定
  • 保存済みAPIキーでコマンド実行
  • 設定テンプレートへの秘密情報の埋め込み
NousResearch/hermes-agent25.8万2026年10月29日 更新

3-statement-model

無料概要あり

損益計算書・貸借対照表・キャッシュフロー計算書を数式で連動させるExcelモデルを作ります。実績と予測の入力、前提を変えた比較、財務三表の整合性確認を段階的に進めます。

  • 財務テンプレートへの実績入力
  • 財務三表が連動する予測の作成
  • 基本・上振れ・下振れシナリオの比較
NousResearch/hermes-agent25.8万2026年10月29日 更新

accelerate

無料概要あり

既存のPyTorch学習コードを少ない変更で複数GPUや複数マシン向けに整え、混合精度やメモリを節約する設定、学習の起動方法まで案内します。

  • 単一GPUの学習を複数GPUへ移したいとき
  • 混合精度で学習したいとき
  • DeepSpeedやFSDPでメモリを節約
NousResearch/hermes-agent25.8万2026年10月29日 更新

actual-setup

無料概要あり

HermesでActual Computerを使い、自分の機器でAIモデルを動かすための接続設定を支援します。中継サービスとローカル接続に対応し、モデル選択や応答確認も扱います。

  • ActualのキーでHermesを接続
  • ローカル環境でモデルを動かしたいとき
  • ローカルモデルの取得と読み込み
NousResearch/hermes-agent25.8万2026年10月29日 更新

adversarial-ux-test

無料概要あり

技術が苦手で不満を抱きやすい利用者になりきってアプリを試し、操作の分かりにくさや離脱の原因を発見。実際の改善課題と個人的な不満を分け、修正案をまとめます。

  • 公開やデモ前に使いやすさを確認したいとき
  • 新規ユーザーの体験を点検したいとき
  • 登録・課金でのつまずきを探したいとき
NousResearch/hermes-agent25.8万2026年10月29日 更新

2つのエージェントが別々に加えた変更のGit競合を、双方の差分と意図から中立的に解決。競合箇所ごとの判断理由を記録し、ビルドやテストで統合結果を確認します。

  • 2つのエージェントのブランチ競合を解消
  • 並行したworktreeの変更を統合
  • 競合する設計判断の理由を確認したいとき
NousResearch/hermes-agent25.8万2026年10月29日 更新

NousResearch のスキルをすべて見る

このスキルの問題を報告する