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

ux-audit

화면을 하나씩 인터페이스 패턴과 `ux` 체크리스트에 따라 감사합니다. 코드, 렌더링된 스크린샷, 실제 사용자 흐름을 확인하고 근거와 함께 장점과 문제를 기록하며, 일반화할 수 있는 결과를 체크리스트에 반영합니다.

원문원문 설명 보기

Audit a page / surface against the Designing Interfaces pattern language + the ux skill checklists, then land findings. Three layers — static (code), visual (screenshots), dynamic (automated user journey + perf). Use to run a repeatable, standards-based UX review of one screen.

lobehub/lobehub스타 83,500(GitHub 83,500 + cccskills 0)

실행 점수 미검증

설치 방법 보기

이럴 때 유용합니다

  • 화면별로 사용자 경험을 감사할 때
  • 스크린샷으로 화면 표시를 확인할 때
  • 실제 흐름과 성능을 살펴볼 때
  • 결과를 개선 체크리스트에 반영할 때

한국어 소개

할 수 있는 일

ux-audit는 한 번에 화면 하나를 대상으로 인터페이스 패턴과 ux 체크리스트에 따라 검토합니다. L1에서는 코드를 읽어 상태 분기와 입력 내용 저장 등을 확인합니다. 필요하면 L2에서 렌더링된 스크린샷을 보고 시각적 우선순위, 간격, 대비, 반응형 동작을 점검합니다. L3에서는 실제 사용자 흐름을 따라가며 초점 이동과 성능 지표를 확인합니다. 각 발견 사항에는 확인한 단계와 근거가 포함됩니다. 문제뿐 아니라 유지할 만한 장점도 기록하고, 구체적인 문제를 다루거나 일반화할 수 있는 교훈을 ux 체크리스트에 반영할 수 있습니다.

이럴 때 유용합니다

특정 화면을 근거와 함께 검토하고 싶을 때 유용합니다. 코드만으로 알기 어려운 실제 표시 상태나 조작 간 연결을 확인할 때도 적합합니다. 앱 전체를 한 번에 평가하기보다 페이지별로 꾸준히 개선할 때 사용할 수 있습니다.

사용 예시

  • “이 설정 화면의 사용자 경험을 감사하고 장점과 문제를 알려 주세요.”
  • “스크린샷을 사용해 이 화면의 레이아웃을 확인해 주세요.”
  • “로그인된 환경에서 사용자 흐름과 로딩 속도를 살펴봐 주세요.”

주의 사항

한 번에 화면 하나를 감사합니다. L2에는 렌더링된 화면이 필요하고, L3에는 실행 환경과 인증이 필요합니다. L3의 자동 조작에는 acceptance를 사용합니다.

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

문서 점검

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

안전성전송·삭제·명령 실행 등을 명시하고 있는가
B일부 부족L3는 인증된 환경에서 자동 조작하지만 범위와 확인 절차는 제시되지 않았습니다.
도입의 용이성필요한 도구나 API 키가 적고 적혀 있는가
B일부 부족L2에는 렌더링, L3에는 실행 환경과 인증이 필요하지만 설치 절차는 없습니다.

점수에는 넣지 않았습니다. 2026년 10월 26일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.

평가가 다르다고 생각되면 재검토를 요청하기

어느 항목이 왜 다르다고 생각하는지 적어 주세요. 로그인은 필요 없습니다. SKILL.md와 대조해 평가를 다시 만들고 이곳에 반영합니다.

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

포함된 파일(33)

  • SKILL.md19.6 KB
  • agents/openai.yaml43 B
  • references/example/channel.md17.9 KB
  • references/example/chat-input-notice.md7.0 KB
  • references/example/chat.md13.5 KB
  • references/example/community-list.md24.9 KB
  • references/example/create.md14.6 KB
  • references/example/doc.md16.9 KB
  • references/example/eval.md9.0 KB
  • references/example/fleet.md13.6 KB
  • references/example/home-inbox-error.md10.6 KB
  • references/example/home.md9.2 KB
  • references/example/memory.md14.3 KB
  • references/example/oauth-apps.md17.2 KB
  • references/example/onboarding.md16.0 KB
  • references/example/page.md11.0 KB
  • references/example/profile.md13.0 KB
  • references/example/resource.md12.2 KB
  • references/example/self-learning-create.md1.5 KB
  • references/example/self-learning-domain.md1.9 KB
  • references/example/self-learning-lesson.md1.9 KB
  • references/example/self-learning-overview.md2.9 KB
  • references/example/self-learning-rules.md1.8 KB
  • references/example/settings.md21.7 KB
  • references/example/stats.md13.1 KB
  • references/example/task-detail.md14.9 KB
  • references/example/tasks.md17.6 KB
  • references/example/topic.md10.9 KB
  • references/example/topics.md18.4 KB
  • references/layer-1-static.md4.6 KB
  • references/layer-2-visual.md3.1 KB
  • references/layer-3-dynamic.md5.3 KB
  • references/pattern-catalog.md5.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

UX Audit

A repeatable, standards-based UX review of one surface at a time. The benchmark is two things together:

  1. Jenifer Tidwell, Designing Interfaces — the pattern language for what a good interface is made of. See references/pattern-catalog.md.
  2. The ux skill — LobeHub's execution checklists for how a flow should behave.

The audit answers: which patterns does the surface use (and how well), and where is the experience weak (each gap tied to a checklist item). Recurring gaps feed back as new ux checklist items; the audit itself becomes a worked-example reference.

Do one surface per run — a full-app sweep is too much for a single pass. Re-run per page as the product grows; that's the "continuous" part.

Three layers — pick by what you need to catch

An audit is not one activity. A finding is only trustworthy from a layer that can actually see it. Each layer has its own procedure file; run the ones the surface needs.

LayerFileWhat it doesCatchesCost
L1 Staticlayer-1-static.mdRead the codeMissing states/branches (empty/error/retry), no draft persist, absent patterns, structural issuescheap, offline, every audit
L2 Visuallayer-2-visual.mdScreenshots of the rendered surfaceReal visual hierarchy & dominant control, spacing/contrast/alignment, truncation/overflow, how empty/loading/error actually look, responsive breakpoints, dark/lightmedium; needs a render
L3 Dynamiclayer-3-dynamic.mdDrive the real user journey via acceptance + instrumentIn-progress/locked states, forced error/empty states, does step N lead to N+1, focus/keyboard, quantified CLS / LCP / INP / long-taskshigh; needs a running env + auth

Coverage matrix — which layer can conclude what

The core rule: a verdict must come from a layer that can see it. Don't tick a visual or runtime verdict off the code.

Finding typeL1L2L3
Missing empty/error branch, no retry, draft not persisted, absent pattern✅——
Real visual hierarchy / is the dominant control the primary action❌ misleads✅✅
Spacing / alignment / contrast / truncation / overflow / dark mode❌✅—
Off-screen selection; what empty/loading/error actually render as❌✅✅
Responsive breakpoints (narrow / mobile)❌✅✅
In-progress / locked states; forced error / empty; capability-gated❌❌✅
Journey stitching (forward momentum across steps)weakweak✅
Focus order / keyboard reachability❌❌✅
CLS / LCP / INP / long-task numbers❌qualitative only✅
Which of two variants is better (A/B winner)❌ misleads❌ misleads✅ (+analytics)

⚠️ The recurring trap this prevents: ticking "one primary button" or "empty is a real page" from a variant prop in the code. Those are L2 verdicts — confirm them on the render, never from L1 alone.

Tiering — don't run all three every time

  • L1 always — fast, complete-coverage baseline for every surface.
  • Add L2 when the findings are about layout, hierarchy, rendered states, or responsive.
  • Add L3 when you need to walk a journey, force states L1/L2 can't reach, or measure performance (CLS etc.).

--l1 / --l2 / --l3 scopes a run to one layer; default is L1 (+ L2 if screenshots are supplied).

Ground rule: evidence, not vibes

Every finding cites its evidence — file:line (L1), a screenshot you verified with the Read tool (L2), or a captured value / snapshot (L3). Before asserting a load-bearing claim, confirm it in the layer that owns it; a wrong "it's missing" is worse than no finding.

Ground rule: benchmark the surface class, not just our own artifact

Reading our code can only surface flaws in what we built — it is structurally blind to a capability we never built at all, because an entirely-absent affordance leaves no file:line, no dead branch, no half-wired button to grep for. The checklists guard the quality of the states that exist; they do not tell you which states a surface of this class is expected to have.

So before (or alongside) reading code, name the surface's class and its domain conventions: how do the mature, comparable products build this exact screen, and what do they offer that a first version forgets? An OAuth consent screen's class norms, for example (GitHub / Google / Okta): show which identity you're authorizing as and let the user switch account / re-authenticate, name the requesting app, list the scopes, allow deny, and point to later revocation. A file picker, a checkout, a share dialog each carry their own class norms. Write this expected-capability list first, then audit gaps against it — otherwise the audit only ever polishes the paths that already exist and silently blesses a missing one.

❌ The first pass of the OAuth audit measured consent against our internal state checklists only and reported button-hierarchy / retry gaps, while missing the biggest one: the consent screen locks the user into the current identity with no switch-account path (OAuthConsent/Login.tsx) — a class norm every comparable OAuth provider ships. A competitor-norms pass catches this on minute one; a code-only pass never can.

Ground rule: comparing two variants — the winner is an outcome verdict, not a craft verdict

When an audit compares two variants of the same surface ("is Agent or Classic onboarding better?"), the trap is judging which is better made (more polished, more patterns, more AI) when the real question is which better gets the user to their goal. For a gateway / interstitial surface — onboarding, consent, paywall, a loading gate — the two diverge hard: the best version is often the least version, because the surface stands between the user and what they came for. Craft is not outcome, and the richer artifact is routinely the worse one.

So a variant comparison must:

  1. Name the success metric first, then judge against it. Onboarding = completion rate + time-to-value + drop-off, not pattern richness. A checkout = conversion. Write the metric before scoring, or you'll default to scoring craft.
  2. Gate the winner verdict on L3 / analytics. "Which variant is better" is a behavioral outcome — it lives in the coverage matrix's L3 row alongside CLS/INP. From L1/L2 you may compare mechanics ("A's error recovery is more complete", "B is fewer steps"); you may not declare a winner. No funnel data → say "insufficient evidence, here's what I'd need", and stop. A confident winner call with a buried "needs L3" caveat is the failure — the caveat does not license the verdict.
  3. Cost to the user is a first-class axis, inverse-weighted for gateway surfaces. Time, steps, tokens, latency. Past a threshold, richness is a liability on any surface the user wants to get through, not into.
  4. Anchor 意义感 on the user's real goal, not the feature's richness. A flow that detains the user in itself when their goal is elsewhere is less Meaningful even if more engaging — read correctly, 意义感 and 自然 favor the fast path there. Don't mistake "more conversational /more AI /more crafted"for"more meaningful".
  5. Read the org's revealed preference as evidence. Feature flags, which variant is the fallback, which the most-constrained platform is forced onto (desktop), recent reverts. When the universal fallback is variant B, B is the trusted baseline and the burden of proof is on A — don't explain these signals away as "ceiling vs floor".
  6. Pick the right reference class, and weight by the real intent distribution. An AI tool's first-run benchmarks against ChatGPT / Claude / Cursor (near-zero onboarding, straight to the box), not SaaS setup wizards (Notion / Linear) that reward thorough onboarding. Score the modal user (who wants to skip), not the ideal engaged one.

❌ This skill's own miss: an L1 read judged Agent onboarding "better" than Classic because it was more polished /conversational (richer completion panel, name suggestions, view transitions), citing 意义感 ≳ 自然 > 确定性. In production Agent's effective-guidance completion was not high, users found it too slow (they wanted the tool, not a chat), and the org rolled back to Classic. Every error above was present: craft mistaken for outcome, 意义感 scored backwards, cost footnoted, a winner declared from L1 on what is an L3/analytics metric, and the flag-gated /degrades-to-Classic/desktop-excluded signals explained away.

Ground rule: a "redundant" control is a composition question before a subtraction one

When L1 spots two controls that seem to do the same thing, the reflex is subtraction — delete one, hide one, merge them, differentiate the copy. Resist it. Two controls that share an intent often differ in scope, and the honest fix expresses that scope difference in layout — promote the wider-scope one to a visible, titled sibling — not by removing it. Subtraction is a behavior-layer move; the better answer usually lives in the composition layer, which is precisely the half of the benchmark an audit drops when it walks the ux checklists but never opens references/pattern-catalog.md. The checklists speak states, momentum, and draft-safety; they carry no vocabulary for Titled Sections / Grid of Equals / Center Stage, so a checklist-only read reaches for "dedupe" every time. Walk the pattern-catalog pass (L1 step 2) before writing a remedy for any "redundant / overlapping" finding, and ask: same intent, different scope? → the fix is a sibling, not a delete.

❌ The CC AskUserQuestion audit flagged the per-question "write your own" box and the global "Or type directly" escape as redundant and proposed hiding / merging them — a subtraction. They aren't redundant: the per-question box is question-scoped, the escape is whole-form-scoped. The composition-layer answer is to hide the escape when there's one question and render it as a visible peer to the question block when there are several — a Titled Sections move a checklist-only read never surfaced. Skipping the catalog cost the better answer.

Ground rule: report the good, not only the gaps

An audit that only lists what's broken has drifted into a bug report. The mandate is patterns in use and how well — so the strengths are first-class findings, not table decoration. A well-built state machine, a draft that survives a failed save, an open-redirect guard, a smart default: these are the good cases. Name them, cite their file:line, and mark the standouts ✅ 亮点, for three reasons:

  • They teach. A good case is the ✅ half of the 回灌 loop — it becomes the positive example a ux checklist item cites, exactly as a gap becomes the ❌ one. An audit that reports no good cases can only ever sharpen the ❌ side of the checklists.
  • They protect. "Don't regress this" is a finding. The next refactor needs to know which behaviors are load-bearing — the Strengths worth preserving block in example/task-detail.md (the loading/not-found state machine, comment-draft-preserved-on-failure, the run-all preview → confirm flow) and the ✅ 亮点 rows in example/home.md (empty-send → day's-hint fallback, drawer-not-navigate surface contract) are exactly that list.
  • They calibrate severity. A gap reads differently against a surface that is otherwise strong than against one weak throughout; the good cases are the baseline the gaps rank on.

❌ The drift this prevents: an audit whose "Patterns in use" ✅ rows are one-word ticks ("persistent", "strong", "textbook") while every gap gets a paragraph — the good cases demoted to checkboxes. example/task-detail.md is the model to match: each standout pattern carries its file:line and a ✅ 亮点 call-out, so the strengths are as legible as the gaps.

Severity rubric (shared)

  • 🔴 Breaks trust — data / input loss, stuck / permanent states, a misleading "empty" that hides a failure, silent send failure.
  • 🟠 Dead-ends or misleads — no forward path, ambiguous state, missing in-progress feedback, an empty state that isn't a real page.
  • 🟡 Friction / inconsistency / missed delight — predictability, redundant controls, progressive-disclosure gaps, CLS jank. This tier is the easiest to under-report: a pass hunting correctness skews 🔴/🟠 and glides past micro-consistency — sibling elements styled differently (options carry a number chip, the free-text row doesn't), an affordance with no label. When the surface is otherwise solid, deliberately switch into the interface-details lens for one pass, or these never get written down.

Output (shared)

See the worked example, references/example/home.md. Note which layers ran, then:

  1. Patterns in use — table (from L1/L2), grouped by pattern family, with a one-line read; mark each standout ✅ row 亮点 and back it with real evidence (file:line), never a one-word tick.
  2. Strengths / good cases (don't regress) — a dedicated section (## … — Strengths / good cases), not a table footnote: bulleted ✅ 亮点 items, each naming the behavior this surface gets right, its evidence (file:line), and why it's load-bearing — the ✅ half of the 回灌 loop and the "don't regress" list for the next refactor. Flag the ones strong enough to land as ✅ examples in ux (annotate → landed as ux <ref> ✅, wired to the Skill-feedback section). Every audit produces this section — if a surface is genuinely weak throughout, say that explicitly rather than omit it. See example/fleet.md §2 for the shape.
  3. Experience gaps — ranked; each names the finding, the ux checklist item / catalog pattern it violates, the layer + evidence it came from, and a one-line remedy.
  4. Skill feedback — real instances of existing checklist items vs new generalizable gaps worth adding to ux, and good cases worth landing as ✅ examples (see 回灌 below).

Land the findings (shared)

An audit is not finished when the findings are written — it is finished when they are landed. All three steps below are required to close a run:

  • Concrete bugs → fix them in the same run, every 🔴 at minimum. Anything left open stays in the report's gap list with the reason it was not fixed (needs a product decision, a server change, a render to confirm).
  • Generalizable gaps → 回灌 ux (mandatory). Every run must close the loop back into the ux skill: for each finding that generalizes beyond this surface, add / strengthen a ux checklist item (rule + ✅/❌ example in the right module), citing the audited surface as the ❌ example. Add or update a short cue in the ux Quick review only when its existing cues do not cover the requirement; keep examples and implementation details in the module. This is what makes the audit continuous — each run leaves the checklists sharper than it found them. If a run genuinely surfaces no generalizable gap, say so explicitly in the report's Skill-feedback section (only validated-existing-rule instances) — silence is not an acceptable close.
  • Exemplary good cases → 回灌 ux, refining the rule (not just decorating it). The 回灌 loop has two halves: a gap sharpens a checklist item's ❌ example, a good case sharpens its ✅ one. But a good case is only worth landing if it teaches the rule something — the ✅ example is the floor; the goal is to sharpen the rule text or extract a latent sub-rule / checklist item the current rule doesn't yet state. So when an audit finds a pattern done notably well, ask: what technique does this do that the rule doesn't already demand? and fold that back — refine the prose, split a one-trigger rule into its real cases, add a checklist line — citing the surface as the ✅ example. A good case that merely re-illustrates an already-complete rule adds little; a good case that reveals a missing distinction is the point. (e.g. Fleet's scroll-into-view extracted "the re-run trigger has two flavors — async arrival vs. imperative-add-then-paint" and "the scroll axis follows the list direction" into Read §1.3; its skeleton extracted "match the text's width proportion, not just height" into Feedback §4.1 — neither was stated before.)
  • The audit → save it as references/example/<page>.md so the next run has a template.

The audit and the ux skill are a closed loop: ux is the benchmark the audit measures against, and the audit is the mechanism that keeps ux honest. Skipping the 回灌 breaks the loop and reduces the audit to a one-off review.

Related skills

  • ux — the execution checklists this audit measures against, and where generalizable findings get landed.
  • acceptance — the automation framework L3 drives (agent-browser CDP: snapshot / eval / screenshot / GIF). L3 assumes its Step 0 env + auth are green.
  • deep-review — code-level review; this skill is its design-level sibling (deep-review's ux dimension checks flows inside a code review; this skill audits a whole surface).
  • skills-audit — the same "periodic, evidence-based audit" shape, applied to the skill catalog.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

acceptance

무료요약 있음

실제 제품을 적절한 조작 환경에서 실행해 변경 사항을 검증하고, 사용자가 확인할 수 있는 증거를 모아 인수 보고서로 게시합니다. 기존 검증 계획을 확인하거나 점검 항목을 만들고, `lh` CLI로 결과를 게시할 수 있습니다.

  • 변경된 제품 동작을 실제로 확인하기
  • 스크린샷 등 검증 증거 수집하기
  • 검증 계획과 보고서 작성하기
lobehub/lobehub8.4만2026년 10월 26일 업데이트

add-model-provider

무료요약 있음

LobeHub에 AI 모델 제공자를 추가하는 과정을 안내합니다. 런타임 연동, 모델 정보와 설정, 브랜드 표시, 문서화 및 인수 확인을 다루며, 기존 제공자에 모델만 추가하는 경우와 새 연동이 필요한 경우를 구분합니다.

  • LobeHub에 새 AI 모델 제공자 추가하기
  • 제공자의 설정 안내나 설명 갱신하기
  • 모델 추가에 새 제공자 연동이 필요한지 판단하기
lobehub/lobehub8.4만2026년 10월 26일 업데이트

add-setting-env

무료요약 있음

서버 환경 변수로 사용자 설정의 기본값을 지정하도록 구현하는 절차를 안내합니다. 변수 검증, 서버 설정 구성, 사용자 저장소 반영부터 예시 환경 파일과 셀프 호스팅 문서 갱신까지 다룹니다.

  • 환경 변수로 사용자 설정 기본값 지정
  • 설정을 서버 구성과 사용자 저장소에 연결
  • 환경 변수 예시와 문서 갱신
lobehub/lobehub8.4만2026년 10월 26일 업데이트

agent-runtime-hooks

무료요약 있음

에이전트 실행 단계, 도구 호출, 사람의 승인, 컨텍스트 압축, 하위 에이전트 호출에 훅을 등록하는 방법을 안내합니다. 이벤트를 관찰하고 로컬 도구 결과를 모의하거나 설정에 따라 웹훅으로 도구 호출을 허용 또는 거부할 수 있습니다.

  • 에이전트 단계와 오류 기록
  • 테스트 중 도구 결과 모의
  • 웹훅으로 도구 호출 허용 또는 거부
lobehub/lobehub8.4만2026년 10월 26일 업데이트

agent-signal

무료요약 있음

에이전트의 이벤트 기반 백그라운드 작업을 설계하고 구현하도록 돕습니다. 소스, 시그널, 액션, 정책의 역할을 나누고 비동기 처리, 중복 실행 방지, 완료 기록과 관측 기능을 다룹니다.

  • 이벤트로 시작되는 백그라운드 작업 추가
  • 대화 요청과 작업을 분리
  • 액션의 중복 실행 방지
lobehub/lobehub8.4만2026년 10월 26일 업데이트

agent-testing-bot

무료요약 있음

실제 데스크톱 채팅 앱에서 봇 채널의 인수 테스트를 진행합니다. Discord, Slack, Telegram, WeChat, Lark, QQ에서 메시지를 보내고 응답을 기다린 뒤 결과 화면을 캡처합니다. iMessage는 BlueBubbles 브리지를 사용합니다.

  • 실제 Discord 채널에서 봇 응답 확인하기
  • Slack이나 Telegram 대화 경로 테스트하기
  • macOS 앱의 작업 결과 화면으로 기록하기
lobehub/lobehub8.4만2026년 10월 26일 업데이트

lobehub의 스킬 모두 보기

이 스킬의 문제 신고