fullpage-screenshot
An open agent skill for capturing full-page screenshots of a website at several viewport widths in one run.
make install # into ~/.claude/skills
make capture URL=https://example.com # or run it directly
width requested captured height status
375 375 375 4205 ok
768 768 773 3865 OVERFLOWS BY 5px
992 992 992 2707 ok
- Whole page, not the viewport. Uses the browser's own full-page capture, so sticky headers appear once rather than in every stitched slice.
- Waits for images. A full-page capture otherwise races image decoding.
- Finds a Chrome you already have instead of downloading another one.
- Reports horizontal overflow for free. A full-page capture expands to fit overflow, so a captured width above the requested width is a responsive bug.
- Handles pages that need setting up - basic auth, cookie banners, state
toggles - through
--authand--prepare.
See SKILL.md for the full interface and references/troubleshooting.md when a browser will not start.
Layout
fullpage-screenshot/ the skill itself - this is what an agent reads
SKILL.md metadata and instructions
scripts/capture.mjs the capture script
references/ troubleshooting, loaded only when needed
skill.json package manifest, for registries
Makefile install, validate, run
The skill sits in a subdirectory rather than at the repository root because the
Agent Skills spec requires the name in
the frontmatter to match its parent directory name. The repository is named for
people browsing GitHub; the directory is named for the spec.
Validated with the reference implementation:
make validate # npx skills-ref validate ./fullpage-screenshot
# Valid skill: ./fullpage-screenshot
Install
git clone https://github.com/mad-coders/fullpage-screenshot-ai-skill
cd fullpage-screenshot-ai-skill
make install
make check
| target | what it does |
|---|---|
make install |
copy into ~/.claude/skills/fullpage-screenshot and install puppeteer-core |
make install-project |
into ./.claude/skills instead, so it travels with a repo |
make link |
symlink rather than copy, so git pull updates the installed skill |
make check |
confirm it is installed, and report which browsers actually launch |
make uninstall |
remove it |
make capture URL=... |
run a capture without remembering the flags |
How Claude finds it
Claude Code reads SKILL.md from two places, and the directory name has to
match the name in the frontmatter:
~/.claude/skills/fullpage-screenshot/SKILL.md personal, every project
<project>/.claude/skills/fullpage-screenshot/SKILL.md project, shared via git
Agents load a skill progressively: the name and description at startup for
every skill, the rest of SKILL.md once the skill is chosen, and anything in
scripts/ or references/ only when it is actually needed. That is why the
troubleshooting notes live in references/ rather than in SKILL.md - they
cost nothing until something breaks.
The description in the frontmatter is the whole discovery surface. Claude
decides whether a skill applies by matching the task against that one line, so
it names the situations rather than the implementation - "screenshot a site",
"full-page captures", "check a page across breakpoints". A description that
said "wraps puppeteer" would never match anything a person actually asks for.
Skills are listed when a session starts, so open a new session after installing.
Then either ask for the thing - "take full-page screenshots of example.com at
mobile and desktop" - or invoke it directly with /fullpage-screenshot.
Licence
MIT - see LICENSE.
No comments yet
Be the first to share your take.