You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(tinyfish): surface run profile diagnostics and a wall-clock cap (#7489)
* feat(tinyfish): surface run profile diagnostics and a wall-clock cap
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ej1gsFPVzN5xZZ3QzvK8bD
* fix(tinyfish): reject a malformed numeric cap instead of dropping it
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ej1gsFPVzN5xZZ3QzvK8bD
* docs(tinyfish): document the null case on the profile metadata fields
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ej1gsFPVzN5xZZ3QzvK8bD
* docs(tinyfish): describe a null profileId as unknown, not as proof
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ej1gsFPVzN5xZZ3QzvK8bD
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: apps/docs/content/docs/integrations/tinyfish.mdx
+21-1Lines changed: 21 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -78,6 +78,7 @@ Run a TinyFish web agent against a website and wait for it to finish, returning
78
78
|`browserProfile`| string | No | Browser engine: "lite" \(standard\) or "stealth" \(anti-detection\). Not a Browser Context Profile — use useProfile for saved logins |
79
79
|`agentMode`| string | No | Agent behavior: "default" or "strict" \(fail fast\)|
80
80
|`maxSteps`| number | No | Maximum tool-call steps before the agent stops \(1-500, default 150\)|
81
+
|`maxDurationSeconds`| number | No | Maximum wall-clock seconds before the agent stops. Unlimited by default, so a run stalled on a slow page is only bounded by the step cap |
81
82
|`outputSchema`| json | No | JSON Schema draft-07 contract the run result must satisfy |
82
83
|`proxyEnabled`| boolean | No | Route the run through TinyFish’s Tetra proxy |
83
84
|`proxyCountryCode`| string | No | Proxy country: US, GB, CA, DE, FR, JP, or AU |
@@ -112,6 +113,10 @@ Run a TinyFish web agent against a website and wait for it to finish, returning
112
113
| ↳ `retryAfter`| number | Suggested retry delay in seconds, null when not retryable |
|`profileHint`| object | Present when TinyFish believes a Browser Context Profile would fix this failed run, such as one that stopped at a login wall |
117
+
| ↳ `message`| string | Why a Browser Context Profile would help this run |
118
+
| ↳ `setupUrl`| string | Path on the TinyFish dashboard that sets up a profile for the blocked domain |
119
+
| ↳ `reason`| string | auth_wall \(the run hit a login\) or bot_challenge \(the site blocked automation\)|
115
120
116
121
### TinyFish Start Agent Run
117
122
@@ -126,6 +131,7 @@ Queue a TinyFish web agent run and return its run ID immediately, without waitin
126
131
|`browserProfile`| string | No | Browser engine: "lite" \(standard\) or "stealth" \(anti-detection\). Not a Browser Context Profile — use useProfile for saved logins |
127
132
|`agentMode`| string | No | Agent behavior: "default" or "strict" \(fail fast\)|
128
133
|`maxSteps`| number | No | Maximum tool-call steps before the agent stops \(1-500, default 150\)|
134
+
|`maxDurationSeconds`| number | No | Maximum wall-clock seconds before the agent stops. Unlimited by default, so a run stalled on a slow page is only bounded by the step cap |
129
135
|`outputSchema`| json | No | JSON Schema draft-07 contract the run result must satisfy |
130
136
|`proxyEnabled`| boolean | No | Route the run through TinyFish’s Tetra proxy |
131
137
|`proxyCountryCode`| string | No | Proxy country: US, GB, CA, DE, FR, JP, or AU |
@@ -184,6 +190,12 @@ Get the status, extracted result, and step history of a TinyFish automation run
184
190
|`browserConfig`| object | Proxy settings the run executed with |
185
191
| ↳ `proxyEnabled`| boolean | Whether a proxy was used |
186
192
| ↳ `proxyCountryCode`| string | Proxy country code |
193
+
|`profileAttached`| boolean | Whether the run actually started from a Browser Context Profile, null when the API omits it — treat null as unknown rather than as false |
194
+
|`profileId`| string | Browser Context Profile the run attached. Null covers both no profile and a payload that omitted the field, so read profileAttached alongside it rather than reading null as proof |
195
+
|`profileHint`| object | Present when TinyFish believes a Browser Context Profile would fix this failed run |
196
+
| ↳ `message`| string | Why a Browser Context Profile would help this run |
197
+
| ↳ `setupUrl`| string | Path on the TinyFish dashboard that sets up a profile for the blocked domain |
198
+
| ↳ `reason`| string | auth_wall \(the run hit a login\) or bot_challenge \(the site blocked automation\)|
187
199
|`videoUrl`| string | Presigned recording URL, expires 15 minutes after it is issued |
188
200
|`steps`| array | Steps the agent took during the run |
189
201
| ↳ `id`| string | Step identifier |
@@ -261,6 +273,12 @@ List TinyFish automation runs, optionally filtered by status, goal text, or crea
261
273
| ↳ `browserConfig`| object | Proxy settings the run executed with |
262
274
| ↳ `proxyEnabled`| boolean | Whether a proxy was used |
263
275
| ↳ `proxyCountryCode`| string | Proxy country code |
276
+
| ↳ `profileAttached`| boolean | Whether the run actually started from a Browser Context Profile, null when the API omits it — treat null as unknown rather than as false |
277
+
| ↳ `profileId`| string | Browser Context Profile the run attached. Null covers both no profile and a payload that omitted the field, so read profileAttached alongside it rather than reading null as proof |
278
+
| ↳ `profileHint`| object | Present when TinyFish believes a Browser Context Profile would fix this failed run |
279
+
| ↳ `message`| string | Why a Browser Context Profile would help this run |
280
+
| ↳ `setupUrl`| string | Path on the TinyFish dashboard that sets up a profile for the blocked domain |
281
+
| ↳ `reason`| string | auth_wall \(the run hit a login\) or bot_challenge \(the site blocked automation\)|
264
282
|`total`| number | Total runs matching the filters |
265
283
|`nextCursor`| string | Cursor for the next page, null when there are no more results |
266
284
|`hasMore`| boolean | Whether more results follow this page |
@@ -371,7 +389,9 @@ List the Browser Context Profiles saved on the TinyFish account, with the ids an
371
389
| ↳ `name`| string | Profile name, such as "Salesforce Production" |
372
390
| ↳ `proxyCountryCode`| string | Country the profile proxies through, null when it has no proxy |
373
391
| ↳ `fingerprintSeed`| string | Seed for the browser fingerprint the profile replays, null when the API omits it |
392
+
| ↳ `domainCount`| number | How many domains the profile holds saved state for, null when the API omits it. Zero means it was created but never logged into |
374
393
| ↳ `createdAt`| string | ISO 8601 timestamp when the profile was created, null when the API omits it |
375
-
| ↳ `isDefault`| boolean | Whether runs with no Browser Profile ID use this one, null when the API does not report it |
394
+
| ↳ `updatedAt`| string | ISO 8601 timestamp when the profile was last saved, null when the API omits it |
395
+
| ↳ `isDefault`| boolean | Whether runs with no Browser Profile ID use this one, null when the API omits it |
description: 'Maximum wall-clock seconds before the agent stops',
554
+
},
523
555
proxyEnabled: {type: 'boolean',description: 'Route the run through the Tetra proxy'},
524
556
proxyCountryCode: {type: 'string',description: 'Proxy country code'},
525
557
useVault: {type: 'boolean',description: 'Allow vault credentials during the run'},
@@ -578,7 +610,7 @@ Return ONLY the comma-separated URL list - no explanations, no extra text.`,
578
610
runs: {
579
611
type: 'json',
580
612
description:
581
-
'Runs matching the list filters [{runId, status, goal, createdAt, startedAt, finishedAt, numOfSteps, result, schemaValidation, error, streamingUrl, browserConfig}]',
613
+
'Runs matching the list filters [{runId, status, goal, createdAt, startedAt, finishedAt, numOfSteps, result, schemaValidation, error, streamingUrl, browserConfig, profileAttached, profileId, profileHint}]',
582
614
},
583
615
total: {type: 'number',description: 'Total runs matching the list filters'},
584
616
nextCursor: {type: 'string',description: 'Cursor for the next page of runs'},
@@ -596,10 +628,23 @@ Return ONLY the comma-separated URL list - no explanations, no extra text.`,
596
628
description:
597
629
'Vault credentials available to a run [{itemId, connectionId, label, vaultName, domains, fieldMetadata, hasTotp}]',
598
630
},
631
+
profileId: {
632
+
type: 'string',
633
+
description: 'Browser Context Profile the run attached, null when none did',
634
+
},
635
+
profileAttached: {
636
+
type: 'boolean',
637
+
description: 'Whether the run actually started from a Browser Context Profile',
638
+
},
639
+
profileHint: {
640
+
type: 'json',
641
+
description:
642
+
'Set when TinyFish believes a Browser Context Profile would fix a failed run {message, setupUrl, reason} — reason is auth_wall or bot_challenge',
643
+
},
599
644
profiles: {
600
645
type: 'json',
601
646
description:
602
-
'Browser Context Profiles a run can start from [{profileId, name, proxyCountryCode, fingerprintSeed, createdAt, isDefault}]. Every field but profileId and name can be null when the API omits it',
647
+
'Browser Context Profiles a run can start from [{profileId, name, proxyCountryCode, fingerprintSeed, domainCount, createdAt, updatedAt, isDefault}]. Every field but profileId and name can be null when the API omits it',
'Read a failed TinyFish run and decide whether to retry, reword the goal, or escalate. Use when an automation returns FAILED or a workflow keeps burning steps without a result.',
720
765
content:
721
-
'# Diagnose A Failed Run\n\nA failed automation comes back as a normal 200 response with the failure inside the run, so read `status` before trusting `result`.\n\n## Steps\n1. Read `error.category`. `AGENT_FAILURE` means the goal or the page is the problem — reword the goal or start the run closer to the target. `SYSTEM_FAILURE` is TinyFish-side; wait `error.retryAfter` seconds and retry the same input. `BILLING_FAILURE` means the TinyFish wallet is empty and no retry will help. `UNKNOWN` should be treated as retryable once.\n2. Compare `numOfSteps` against the Max Steps you set. Hitting the cap means the agent was still working, so raise the cap or narrow the goal.\n3. If an Output Schema was set, read `schemaValidation.errors` — a run can reach the right page and still fail on one mistyped field, and `rePromptAttempts` shows how hard TinyFish already tried to repair it.\n4. For an async run, call Get Run and read the `steps` list to find the last action before the failure. `videoUrl` gives a recording, but the link expires 15 minutes after it is issued.\n\n## Output\nState the category, the concrete cause, and the single next action. Quote `error.message` rather than paraphrasing it, and do not retry a `BILLING_FAILURE` or an `AGENT_FAILURE` without changing the input first.',
766
+
'# Diagnose A Failed Run\n\nA failed automation comes back as a normal 200 response with the failure inside the run, so read `status` before trusting `result`.\n\n## Steps\n1. Read `error.category`. `AGENT_FAILURE` means the goal or the page is the problem — reword the goal or start the run closer to the target. `SYSTEM_FAILURE` is TinyFish-side; wait `error.retryAfter` seconds and retry the same input. `BILLING_FAILURE` means the TinyFish wallet is empty and no retry will help. `UNKNOWN` should be treated as retryable once.\n2. Read `profileHint` whenever it is set — TinyFish attaches it only when a Browser Context Profile would likely fix the run, so it outranks the category above. `reason` is `auth_wall` (the agent hit a login) or `bot_challenge` (the site blocked automation); the fix is to set up a profile for that domain and rerun with Use Browser Profile on, not to reword the goal.\n3. Compare `numOfSteps` against the Max Steps you set. Hitting the cap means the agent was still working, so raise the cap or narrow the goal. If the run instead stopped early on a slow page, set Max Duration.\n4. If an Output Schema was set, read `schemaValidation.errors` — a run can reach the right page and still fail on one mistyped field, and `rePromptAttempts` shows how hard TinyFish already tried to repair it.\n5. For an async run, call Get Run and read the `steps` list to find the last action before the failure. `videoUrl` gives a recording, but the link expires 15 minutes after it is issued.\n\n## Output\nState the category, the concrete cause, and the single next action. Quote `error.message` rather than paraphrasing it, and do not retry a `BILLING_FAILURE` or an `AGENT_FAILURE` without changing the input first.',
0 commit comments