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

dogfood

브라우저에서 웹 앱을 직접 조작해 폼, 화면 이동, 레이아웃 문제와 JavaScript 오류를 확인합니다. 재현 절차와 스크린샷을 담아 심각도와 유형별로 보고서를 작성합니다.

원문원문 설명 보기

Exploratory QA of web apps: find bugs, evidence, reports.

AI 평가80점/ 100설치 방법 보기

이럴 때 유용합니다

  • 출시 전 주요 사용자 흐름 점검
  • 폼에 정상값, 잘못된 값, 빈 값 입력
  • 레이아웃 문제와 JavaScript 오류 기록
  • 증거가 있는 버그를 심각도순으로 정리

한국어 소개

할 수 있는 일

웹 앱을 직접 조작하며 문제를 찾고 증거가 포함된 보고서를 작성합니다. 테스트할 페이지와 기능을 계획하고 링크, 버튼, 폼, 키보드 조작, 화면 이동을 확인합니다. 정상 입력뿐 아니라 잘못된 값과 빈 값도 시도하며 레이아웃 문제와 JavaScript 오류를 살펴봅니다. 발견한 문제는 중복을 정리하고 심각도와 유형을 지정해 report.md에 모읍니다.

이럴 때 유용합니다

출시 전에 사용자의 조작 흐름을 따라 앱을 점검하거나, 개발 담당자가 재현할 수 있는 형태로 문제를 전달할 때 유용합니다. 전체 사이트를 확인하거나 로그인과 검색 같은 특정 기능에 집중할 수 있습니다. 보고서에는 확인한 범위와 미확인 부분, 테스트를 막은 사유도 기록합니다.

사용 예시

  • “이 URL의 가입 폼을 빈 값과 잘못된 입력까지 포함해 확인해 주세요.”
  • “주요 화면 이동을 점검하고 재현 절차와 스크린샷을 포함해 보고해 주세요.”

주의 사항

페이지 이동, 클릭, 텍스트 입력, 스크린샷 촬영, 콘솔 확인 등을 지원하는 브라우저 도구가 필요합니다. 대상 URL과 테스트 범위를 지정해야 합니다. 출력 위치를 생략하면 이미지와 보고서를 ./dogfood-output에 저장합니다.

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

객관 평가

AI가 SKILL.md의 내용만을 근거로 4가지 관점에서 판정했습니다. 스타 수나 인기도는 판정에 넣지 않았습니다.

지시의 명확성언제 쓰고 무엇을 하는지 알 수 있는가
A양호대상 URL과 범위를 입력으로 받아 브라우저로 문제를 조사하고 보고하는 목적을 명시합니다.
절차의 구체성절차·입출력·예시가 구체적으로 적혀 있는가
A양호계획부터 보고까지 다섯 단계와 재현 절차, 스크린샷 등 보고서 필수 항목을 제시합니다.
안전성전송·삭제·명령 실행 등을 명시하고 있는가
B일부 부족가입, 결제 과정과 빈 값 제출을 시험하지만 실제 데이터 영향과 확인 절차는 설명하지 않습니다.
도입의 용이성필요한 도구나 API 키가 적고 적혀 있는가
B일부 부족필요한 브라우저 도구 이름은 나열하지만 설치나 연결 절차는 없습니다.

총점은 각 항목을 A=25점, B=15점, C=5점으로 더한 값입니다. 2026년 10월 20일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.

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

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

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

포함된 파일(3)

  • SKILL.md8.4 KB
  • references/issue-taxonomy.md3.6 KB
  • templates/dogfood-report-template.md1.5 KB

SKILL.md(원문)

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

Dogfood: Systematic Web Application QA Testing

Overview

This skill guides you through systematic exploratory QA testing of web applications with browser_exec. You will navigate the application, interact with elements, capture evidence of issues, and produce a structured bug report.

Prerequisites

  • The browser toolset must be enabled (browser_exec). browser_exec runs Python with pre-imported helpers (new_tab, goto_url, wait_for_load, page_info, js, fill_input, click_at_xy, capture_screenshot, cdp); browser state persists across calls, Python variables do not.
  • A target URL and testing scope from the user

Inputs

The user provides:

  1. Target URL — the entry point for testing
  2. Scope — what areas/features to focus on (or "full site" for comprehensive testing)
  3. Output directory (optional) — where to save screenshots and the report (default: ./dogfood-output)

Workflow

Follow this 5-phase systematic workflow:

Phase 1: Plan

  1. Create the output directory structure:
    {output_dir}/
    ├── screenshots/       # Evidence screenshots
    └── report.md          # Final report (generated in Phase 5)
    
  2. Identify the testing scope based on user input.
  3. Build a rough sitemap by planning which pages and features to test:
    • Landing/home page
    • Navigation links (header, footer, sidebar)
    • Key user flows (sign up, login, search, checkout, etc.)
    • Forms and interactive elements
    • Edge cases (empty states, error pages, 404s)

Phase 2: Explore

Batch each step's actions into one browser_exec call. For each page or feature in your plan:

  1. Navigate with a console hook installed. Register the hook on the tab before navigating so errors thrown during page load are captured too:

    # Open page with console-error capture
    HOOK = """window.__qa_errors = [];
    const _e = console.error;
    console.error = (...a) => { window.__qa_errors.push(a.map(String).join(' ')); _e(...a); };
    addEventListener('error', e => window.__qa_errors.push('uncaught: ' + e.message));
    addEventListener('unhandledrejection', e => window.__qa_errors.push('rejection: ' + String(e.reason)));"""
    new_tab('about:blank')  # first call only: the hook binds to the current tab
    cdp('Page.addScriptToEvaluateOnNewDocument', source=HOOK)
    goto_url("https://example.com/page")
    wait_for_load()
    print(page_info())
    print(js('window.__qa_errors || []'))
    

    Re-register the hook at the start of any later call that navigates. Silent JS errors are high-value findings.

  2. Read the page structure — list visible interactive elements with their viewport centres (use cdp('Accessibility.getFullAXTree') and filter in Python when you need roles/names):

    # List interactive elements
    print(js("""(() => [...document.querySelectorAll('a,button,input,select,textarea,[role=button]')]
      .filter(e => e.offsetParent).slice(0, 80).map((e, i) => { const r = e.getBoundingClientRect();
        return {i, tag: e.tagName, text: (e.innerText || e.value || e.getAttribute('aria-label') || '').trim().slice(0, 60),
                id: e.id, name: e.name, x: Math.round(r.x + r.width / 2), y: Math.round(r.y + r.height / 2)}; }))()"""))
    
  3. Visually assess the page: call capture_screenshot() and inspect the attached image for layout issues, broken elements, or accessibility concerns. If your model cannot view images, pass the printed path to vision_analyze.

  4. Test interactive elements systematically:

    • Click buttons and links: js("document.querySelector('#submit').click()"), or click_at_xy(x, y) with a centre from step 2
    • Fill forms: fill_input('input[name=email]', 'test input')
    • Test keyboard navigation: cdp('Input.dispatchKeyEvent', type='keyDown', key='Tab', code='Tab', windowsVirtualKeyCode=9) followed by the matching keyUp, then js('document.activeElement.outerHTML.slice(0, 200)') to see where focus landed; same pattern with key='Enter', code='Enter', windowsVirtualKeyCode=13
    • Scroll through content: js('window.scrollBy(0, 800)')
    • Go back: js('history.back()'), then wait_for_load()
    • Test form validation with invalid inputs
    • Test empty submissions
  5. After each interaction, in the same call, check for:

    • Console errors: print(js('window.__qa_errors || []'))
    • Visual changes: capture_screenshot() and compare with the previous one
    • Expected vs actual behavior (page_info(), or js() reading the relevant element)

Phase 3: Collect Evidence

For every issue found:

  1. Take a screenshot showing the issue: capture_screenshot() prints the saved path. Copy it to {output_dir}/screenshots/ under a descriptive name (e.g. issue-03-broken-login.png) — you will reference it in the report.

  2. Record the details:

    • URL where the issue occurs
    • Steps to reproduce
    • Expected behavior
    • Actual behavior
    • Console errors (if any)
    • Screenshot path
  3. Classify the issue using the issue taxonomy (see references/issue-taxonomy.md):

    • Severity: Critical / High / Medium / Low
    • Category: Functional / Visual / Accessibility / Console / UX / Content

Phase 4: Categorize

  1. Review all collected issues.
  2. De-duplicate — merge issues that are the same bug manifesting in different places.
  3. Assign final severity and category to each issue.
  4. Sort by severity (Critical first, then High, Medium, Low).
  5. Count issues by severity and category for the executive summary.

Phase 5: Report

Generate the final report using the template at templates/dogfood-report-template.md.

The report must include:

  1. Executive summary with total issue count, breakdown by severity, and testing scope
  2. Per-issue sections with:
    • Issue number and title
    • Severity and category badges
    • URL where observed
    • Description of the issue
    • Steps to reproduce
    • Expected vs actual behavior
    • Screenshot references (use MEDIA:<screenshot_path> for inline images)
    • Console errors if relevant
  3. Summary table of all issues
  4. Testing notes — what was tested, what was not, any blockers

Save the report to {output_dir}/report.md.

Tools Reference

All browser actions are browser_exec calls; these are the helpers and idioms used above.

Actionbrowser_exec idiom
Go to a URLnew_tab(url) once (or new_tab('about:blank') before registering the hook), then goto_url(url); follow with wait_for_load()
Page statepage_info()
DOM / accessibility treejs(...) extraction, or cdp('Accessibility.getFullAXTree') filtered in Python
Clickjs("document.querySelector(sel).click()") or click_at_xy(x, y)
Type into an inputfill_input(selector, text)
Scrolljs('window.scrollBy(0, 800)')
Go backjs('history.back()')
Press a keycdp('Input.dispatchKeyEvent', type='keyDown', key=..., code=..., windowsVirtualKeyCode=...) + keyUp
Screenshotcapture_screenshot() (image attached to the result; text-only models use vision_analyze on the path)
JS console errorshook via cdp('Page.addScriptToEvaluateOnNewDocument', source=HOOK), read with `js('window.__qa_errors

Tips

  • Always read window.__qa_errors after navigating and after significant interactions. Silent JS errors are among the most valuable findings.
  • Batch each sub-procedure into one browser_exec call (navigate, wait, extract, act, check errors) — fewer round-trips, and the hook stays in place.
  • Take a capture_screenshot() when you need to reason about element positions or when DOM extraction is ambiguous; click_at_xy takes the centres from the element listing.
  • Test with both valid and invalid inputs — form validation bugs are common.
  • Scroll through long pages — content below the fold may have rendering issues.
  • Test navigation flows — click through multi-step processes end-to-end.
  • Check responsive behavior by noting any layout issues visible in screenshots.
  • Don't forget edge cases: empty states, very long text, special characters, rapid clicking.
  • When reporting screenshots to the user, include MEDIA:<screenshot_path> so they can see the evidence inline.

리뷰

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

댓글

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

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

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

0 / 1,000자

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

같은 저장소의 스킬

1password

무료요약 있음AI 평가 100점

1Password에 저장한 비밀번호와 API 키를 명령과 설정 템플릿에 사용합니다. CLI 설치와 인증부터 비밀 값 조회 및 환경 변수 전달까지 안내합니다.

  • 1Password CLI 설치와 설정
  • 저장된 API 키로 명령 실행
  • 설정 템플릿에 비밀 값 삽입
NousResearch/hermes-agent25.6만2026년 10월 23일 업데이트

3-statement-model

무료요약 있음AI 평가 90점

손익계산서·재무상태표·현금흐름표를 수식으로 연결한 Excel 모델을 만듭니다. 실적과 예측 가정을 입력하고 시나리오를 비교하며 세 재무제표의 일관성을 단계별로 확인합니다.

  • 재무 템플릿에 실적 입력
  • 세 재무제표가 연동되는 예측 작성
  • 기본·상향·하향 시나리오 비교
NousResearch/hermes-agent25.6만2026년 10월 23일 업데이트

accelerate

무료요약 있음AI 평가 80점

기존 PyTorch 학습 코드를 적은 수정으로 여러 GPU나 컴퓨터에 맞게 구성합니다. 혼합 정밀도, 메모리 절약 설정과 학습 실행 방법을 안내합니다.

  • 단일 GPU 학습을 여러 GPU로 옮깁니다
  • 혼합 정밀도 학습을 설정합니다
  • DeepSpeed나 FSDP로 메모리를 절약합니다
NousResearch/hermes-agent25.6만2026년 10월 23일 업데이트

actual-setup

무료요약 있음AI 평가 100점

Hermes에서 Actual Computer로 자신의 기기에 AI 모델을 실행하도록 연결을 설정합니다. 중계 서비스와 로컬 연결, 모델 선택, 응답 확인 및 오류 점검을 다룹니다.

  • Actual 키로 Hermes를 연결합니다
  • 자신의 기기에서 모델을 실행합니다
  • 로컬 모델을 찾아 내려받고 불러옵니다
NousResearch/hermes-agent25.6만2026년 10월 23일 업데이트

adversarial-ux-test

무료요약 있음AI 평가 80점

기술에 익숙하지 않고 쉽게 불만을 느끼는 사용자로 앱을 시험합니다. 혼란스러운 조작과 이탈 원인을 찾고, 개선 과제와 개인적 불만을 나눠 수정안을 정리합니다.

  • 출시나 시연 전에 사용성을 확인합니다
  • 신규 사용자의 경험을 점검합니다
  • 가입과 결제 과정의 어려움을 찾습니다
NousResearch/hermes-agent25.6만2026년 10월 23일 업데이트

agent-merge-conflict-arbiter

무료요약 있음AI 평가 100점

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

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

NousResearch의 스킬 모두 보기

이 스킬의 문제 신고