Website Screenshot

Take screenshots of any website using Notte browser automation.

How to use it

  1. Hit Copy the whole skill.
  2. Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
    ChatGPT: make a Project and paste it into Instructions.
    Neither? Paste it at the top of a new chat — it works for that chat.
  3. Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit gooseworks-ai/goose-skills/skills/research-tools/capabilities/website-screenshot-notte#main ~/.claude/skills/website-screenshot-notte

For one project only, change the path to .claude/skills/website-screenshot-notte.

Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text123 lines
website-screenshot-notte/SKILL.md123 lines4.1 KBpushed 96d agoRawView on GitHub

Website Screenshot

Setup

Read your credentials from ~/.gooseworks/credentials.json:

export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")

If ~/.gooseworks/credentials.json does not exist, tell the user to run: npx gooseworks login

All endpoints use Bearer auth: -H "Authorization: Bearer $GOOSEWORKS_API_KEY"

Take screenshots of any website URL and save them as image files.

Requirements

  • Orthogonal CLI: npm install -g @orth/cli

Workflow

Take a screenshot of a URL in 4 steps:

Step 1: Start a browser session

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/start","body":{"headless":true}}'

Save the session_id from the response.

Step 2: Navigate to the URL

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute","body":{"type":"goto","url":"https://example.com"}}'

Step 3: Take the screenshot

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/screenshot","body":{}}'

For a full-page screenshot:

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/screenshot","body":{"full_page":true}}'

Step 4: Stop the session

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/stop"}'

Full Example

# 1. Start session
SESSION=$(curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/start","body":{"headless":true}}' | python3 -c "import json,sys;d=json.load(sys.stdin);print(json.dumps(d.get('data',d)))" | python3 -c "import sys,json; print(json.load(sys.stdin)['session_id'])")

# 2. Navigate
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/$SESSION/page/execute","body":{"type":"goto","url":"https://example.com"}}'

# 3. Screenshot
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/$SESSION/page/screenshot","body":{}}'

# 4. Cleanup
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/$SESSION/stop"}'

Options

Parameter Description
full_page Set to true to capture the entire scrollable page
headless Set to false to see the browser window (default: true)
viewport_width Custom viewport width in pixels
viewport_height Custom viewport height in pixels

Tips

  • Always stop the session when done to free resources
  • Sessions auto-expire after 3 minutes of idle time
  • Use -o flag to save the screenshot to a file (required for binary data)
  • The output file must not already exist (use a unique name or delete first)
1---
2name: website-screenshot-notte
3description: Take screenshots of any website using Notte browser automation. Use when asked to screenshot, capture, or snap a webpage.
4source: orthogonal
5---
6 
7 
8# Website Screenshot
9 
10## Setup
11 
12Read your credentials from ~/.gooseworks/credentials.json:
13```bash
14export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
15export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")
16```
17 
18If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login`
19 
20All endpoints use Bearer auth: `-H "Authorization: Bearer $GOOSEWORKS_API_KEY"`
21 
22 
23Take screenshots of any website URL and save them as image files.
24 
25## Requirements
26 
27- Orthogonal CLI: `npm install -g @orth/cli`
28 
29## Workflow
30 
31Take a screenshot of a URL in 4 steps:
32 
33### Step 1: Start a browser session
34 
35```bash
36curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
37 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
38 -H "Content-Type: application/json" \
39 -d '{"api":"notte","path":"/sessions/start","body":{"headless":true}}'
40```
41 
42Save the `session_id` from the response.
43 
44### Step 2: Navigate to the URL
45 
46```bash
47curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
48 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
49 -H "Content-Type: application/json" \
50 -d '{"api":"notte","path":"/sessions/{session_id}/page/execute","body":{"type":"goto","url":"https://example.com"}}'
51```
52 
53### Step 3: Take the screenshot
54 
55```bash
56curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
57 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
58 -H "Content-Type: application/json" \
59 -d '{"api":"notte","path":"/sessions/{session_id}/page/screenshot","body":{}}'
60```
61 
62For a full-page screenshot:
63 
64```bash
65curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
66 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
67 -H "Content-Type: application/json" \
68 -d '{"api":"notte","path":"/sessions/{session_id}/page/screenshot","body":{"full_page":true}}'
69```
70 
71### Step 4: Stop the session
72 
73```bash
74curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
75 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
76 -H "Content-Type: application/json" \
77 -d '{"api":"notte","path":"/sessions/{session_id}/stop"}'
78```
79 
80## Full Example
81 
82```bash
83# 1. Start session
84SESSION=$(curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
85 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
86 -H "Content-Type: application/json" \
87 -d '{"api":"notte","path":"/sessions/start","body":{"headless":true}}' | python3 -c "import json,sys;d=json.load(sys.stdin);print(json.dumps(d.get('data',d)))" | python3 -c "import sys,json; print(json.load(sys.stdin)['session_id'])")
88 
89# 2. Navigate
90curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
91 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
92 -H "Content-Type: application/json" \
93 -d '{"api":"notte","path":"/sessions/$SESSION/page/execute","body":{"type":"goto","url":"https://example.com"}}'
94 
95# 3. Screenshot
96curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
97 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
98 -H "Content-Type: application/json" \
99 -d '{"api":"notte","path":"/sessions/$SESSION/page/screenshot","body":{}}'
100 
101# 4. Cleanup
102curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
103 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
104 -H "Content-Type: application/json" \
105 -d '{"api":"notte","path":"/sessions/$SESSION/stop"}'
106```
107 
108## Options
109 
110| Parameter | Description |
111|-----------|-------------|
112| `full_page` | Set to `true` to capture the entire scrollable page |
113| `headless` | Set to `false` to see the browser window (default: true) |
114| `viewport_width` | Custom viewport width in pixels |
115| `viewport_height` | Custom viewport height in pixels |
116 
117## Tips
118 
119- Always stop the session when done to free resources
120- Sessions auto-expire after 3 minutes of idle time
121- Use `-o` flag to save the screenshot to a file (required for binary data)
122- The output file must not already exist (use a unique name or delete first)
123 

Discussion

Alternatives

Also in Scraping & extraction