File size: 4,930 Bytes
6a7089a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
# Headless vs Headed

PinchTab instances can run Chrome in two modes:

- **Headless**: no visible browser window
- **Headed**: visible browser window

You usually run one server with `pinchtab`, then start instances in either mode through the API or CLI.

---

## Headless mode

Headless is the default mode for managed instances.

```bash
curl -X POST http://localhost:9867/instances/start \
  -H "Content-Type: application/json" \
  -d '{"mode":"headless"}'
# CLI Alternative
pinchtab instance start
# Response
{
  "id": "inst_0a89a5bb",
  "profileId": "prof_278be873",
  "profileName": "instance-1741400000000000000",
  "port": "9868",
  "headless": true,
  "status": "starting"
}
```

### Good fit for

- agents and automation
- CI and batch jobs
- containers and remote servers
- higher-throughput workloads

### Tradeoffs

- no visible browser window
- debugging usually happens through snapshots, screenshots, text extraction, and logs

---

## Headed mode

Headed mode launches a visible Chrome window.

```bash
curl -X POST http://localhost:9867/instances/start \
  -H "Content-Type: application/json" \
  -d '{"mode":"headed"}'
# CLI Alternative
pinchtab instance start --mode headed
# Response
{
  "id": "inst_1b9a5dcc",
  "profileId": "prof_278be873",
  "profileName": "instance-1741400000000000001",
  "port": "9869",
  "headless": false,
  "status": "starting"
}
```

### Good fit for

- development
- debugging
- local testing
- visual verification
- human-in-the-loop workflows

### Tradeoffs

- requires a display environment
- usually uses more CPU and memory than headless mode

---

## Side-by-side comparison

| Aspect | Headless | Headed |
|---|---|---|
| Visibility | No window | Visible window |
| Debugging | Snapshot- and log-based | Direct visual feedback |
| Display required | No | Yes |
| CI use | Strong fit | Usually poor fit |
| Local development | Fine | Usually easier |
| Resource usage | Lower | Higher |

---

## Recommended workflows

## Development workflow

Use a visible browser while you are building and validating the flow:

```bash
curl -X POST http://localhost:9867/instances/start \
  -H "Content-Type: application/json" \
  -d '{"mode":"headed"}'
# CLI Alternative
pinchtab instance start --mode headed
```

When you need persistence, create a profile first:

```bash
curl -X POST http://localhost:9867/profiles \
  -H "Content-Type: application/json" \
  -d '{"name":"dev"}'
# Response
{
  "status": "created",
  "id": "prof_278be873",
  "name": "dev"
}
```

Then launch the profile in headed mode:

```bash
curl -X POST http://localhost:9867/instances/start \
  -H "Content-Type: application/json" \
  -d '{"profileId":"prof_278be873","mode":"headed"}'
# CLI Alternative
pinchtab instance start --profileId prof_278be873 --mode headed
# Response
{
  "id": "inst_ea2e747f",
  "profileId": "prof_278be873",
  "profileName": "dev",
  "port": "9868",
  "headless": false,
  "status": "starting"
}
```

## Production workflow

Use headless mode for repeatable unattended work:

```bash
for i in 1 2 3; do
  curl -s -X POST http://localhost:9867/instances/start \
    -H "Content-Type: application/json" \
    -d '{"mode":"headless"}' | jq .
done
# CLI Alternative
for i in 1 2 3; do
  pinchtab instance start
done
```

---

## Inspecting a headless instance

You can debug a headless instance through tab APIs.

List the instance tabs:

```bash
curl http://localhost:9867/instances/inst_0a89a5bb/tabs | jq .
# Response
[
  {
    "id": "CDP_TARGET_ID",
    "instanceId": "inst_0a89a5bb",
    "url": "https://pinchtab.com",
    "title": "PinchTab"
  }
]
```

Then inspect the tab:

```bash
curl http://localhost:9867/tabs/CDP_TARGET_ID/snapshot | jq .
```

```bash
curl http://localhost:9867/tabs/CDP_TARGET_ID/text | jq .
```

```bash
curl http://localhost:9867/tabs/CDP_TARGET_ID/screenshot > page.jpg
```

---

## Display requirements

Headed instances need a display environment.

### macOS

Headed mode works with the native desktop session.

### Linux

Headless works anywhere.
Headed mode needs X11 or Wayland.

```bash
ssh -X user@server 'pinchtab instance start --mode headed'
```

### Windows

Headed mode works with the native desktop session.

### Docker

Headless is the normal choice in containers:

```bash
docker run -d -p 9867:9867 pinchtab/pinchtab
curl -X POST http://localhost:9867/instances/start \
  -H "Content-Type: application/json" \
  -d '{"mode":"headless"}'
```

---

## Dashboard

The dashboard lets you monitor running instances and profiles while you use either mode.

Useful views:

- Monitoring: running instances, status, tabs, and optional memory metrics
- Profiles: saved profiles, launch actions, and live details
- Settings: runtime and dashboard preferences

---

## Summary

- Use **headless** for unattended automation and scale.
- Use **headed** for local debugging and human-visible workflows.
- Choose the mode per instance, not per server.