본문으로 건너뛰기
cccskills
무료GitHub에 공개한국어 소개

inspecting-hermes-desktop-dom

Chrome DevTools Protocol(CDP)로 실행 중인 Hermes 데스크톱 앱을 살펴봅니다. 실제 렌더링된 요소와 계산된 CSS, 적용된 규칙, 콘솔 출력을 확인해 UI 변경 사항이나 스타일 문제를 점검할 수 있습니다.

원문원문 설명 보기

Read the live Hermes desktop DOM/CSS over CDP.

NousResearch/hermes-agent스타 258,450(GitHub 258,450 + cccskills 0)

실행 점수 미검증

설치 방법 보기

이럴 때 유용합니다

  • 실행 중인 앱에서 UI 변경 확인
  • 요소에 적용된 CSS 규칙 확인
  • 안정적으로 쓸 컴포넌트 선택자 찾기
  • 렌더러 콘솔 오류 읽기

한국어 소개

할 수 있는 일

개발 중 실행되는 Hermes 데스크톱 앱에 연결해 Chrome DevTools Protocol(CDP)로 실제 렌더링된 DOM과 CSS를 읽습니다. 요소가 화면에 나타났는지, 계산된 스타일과 크기는 무엇인지, 어떤 CSS 규칙이 적용되었는지, 렌더러 콘솔에 무엇이 출력되었는지 확인할 수 있습니다. 소스 코드만 보고 추측하는 대신 앱이 실제로 표시하는 내용을 점검할 수 있습니다.

이럴 때 유용합니다

UI 변경이 실행 중인 앱에 반영되었는지 확인하거나, 스타일이 적용되지 않는 이유를 찾거나, 컴포넌트에 사용할 선택자를 찾을 때 유용합니다. 이 기능은 DOM과 스타일에 관한 사실을 확인합니다. 색상이나 여백, 전체 레이아웃이 보기 좋은지는 판단하지 않습니다.

사용 예시

  • “실행 중인 화면에서 이 요소의 계산된 padding을 확인해 주세요.”
  • “이 링크에 실제로 적용된 CSS 규칙을 찾아 주세요.”
  • “렌더러 콘솔 오류를 읽어 주세요.”

주의 사항

Hermes 데스크톱 개발 서버가 CDP 포트를 열어야 합니다. 패키지 버전 앱에서는 포트가 열리지 않습니다. 연결할 수 없더라도 사용자의 앱을 재시작하지 말고, 별도의 격리된 인스턴스를 사용합니다. 이 방법만으로는 화면의 미적 완성도나 레이아웃의 인상을 판단할 수 없습니다.

이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.

문서 점검

AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.

안전성전송·삭제·명령 실행 등을 명시하고 있는가
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 / 1,000자

이 양식은 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일 업데이트

agent-merge-conflict-arbiter

무료요약 있음

두 에이전트가 각각 수정한 브랜치의 Git 충돌을 양쪽 변경 내용과 의도에 따라 중립적으로 해결합니다. 충돌별 판단 이유를 기록하고 빌드나 테스트로 통합 결과를 확인합니다.

  • 두 에이전트의 브랜치 충돌 해결
  • 병렬 worktree의 변경 내용 통합
  • 충돌하는 설계 판단의 이유 확인
NousResearch/hermes-agent25.8만2026년 10월 29일 업데이트

NousResearch의 스킬 모두 보기

이 스킬의 문제 신고