← ClaudeAtlas

playwright-cdplisted

Use when pulling a requirement out of Notion or Slack into local markdown — body, every comment, and the attachments — because the decisions live in the comments and the attachments expire. Covers the case where there is no API token (company workspace, no integration allowed), the UI Export button is disabled or missing by permission, and access exists only through a logged-in browser. Also use when a scrape produced wrong markdown (tables repeated, cells duplicated, sidebar text in the body), when only the top level of a Notion page came out, or when a headless browser lands on a login screen.
xtieume/testcase · ★ 4 · DevOps & Infrastructure · score 74
Install: claude install-skill xtieume/testcase
# Playwright CDP ## Overview Read Notion pages and Slack threads into local markdown, by calling each service's own web API from inside a browser that is already logged in. Core principle: **do not scrape the DOM, and do not copy a browser profile.** Attach over the Chrome DevTools Protocol (CDP) to a browser this skill owns, then call the same endpoints the web app itself calls. For GitHub there is nothing to build: `gh pr view <n> --json body,comments,reviews` and `gh api repos/<repo>/pulls/<n>/comments` already return everything, with credentials `gh` holds. Use those directly. Reading is the main job and touches nothing: those endpoints only fetch data or produce a download. **`slack-post.mjs` is the one exception — it writes.** See *Posting to Slack* below before using it. ## What comes out The same shape for both sources, per document: ``` <out>/ <Name>.md # body <Name>.comments.md # every comment, numbered #1..#n, anchored <a id="c-n"> assets/<Name>/ # attachments, downloaded ``` The reason for that shape, and the thing to preserve in any new extractor: - **Comments are half the requirement.** Scope changes, the answer to an open question and the final formula are decided in comments, not in the body. Notion's own export drops them entirely. - **A commented item in the body carries `> 💬 n comment → [#a–#b](<Name>.comments.md#c-a)`**, so a claim can be walked back to the comment that decided it. - **Everything deep-links back**: Notio