# Agent ## Automate `client.agent.automate(AgentAutomateParamsbody, RequestOptionsoptions?): AutomateEvent | Stream` **post** `/automate` Execute AI-powered browser automation tasks using natural language with optional geotargeting. This endpoint **always streams** responses using Server-Sent Events (SSE). **Streaming Response:** - All responses are streamed using Server-Sent Events (`text/event-stream`) - Real-time progress updates and results as they're generated **Geotargeting:** - Optionally specify a country code for geotargeted browsing **Use Cases:** - Web scraping and data extraction - Form filling and interaction - Navigation and information gathering - Multi-step web workflows - Content analysis from web pages ### Parameters - `body: AgentAutomateParams` - `task: string` The task description in natural language - `data?: unknown` JSON data to provide context for form filling or complex tasks - `geo_target?: GeoTarget` Optional geotargeting parameters for proxy requests - `country?: string` Country code using ISO 3166-1 alpha-2 standard (2 letters, e.g., "US", "GB", "JP"). See: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 - `guardrails?: string` Safety constraints for execution - `maxIterations?: number` Maximum task iterations - `maxValidationAttempts?: number` Maximum validation attempts - `url?: string` Starting URL for the task ### Returns - `AutomateEvent` - `data?: unknown` Event payload data - `event?: string` The event type (e.g., start, agent:processing, complete) ### Example ```typescript import Tabstack from '@tabstack/sdk'; const client = new Tabstack({ apiKey: process.env['TABSTACK_API_KEY'], // This is the default and can be omitted }); const automateEvent = await client.agent.automate({ task: 'Find the top 3 trending repositories and extract their names, descriptions, and star counts', guardrails: "browse and extract only, don't interact with repositories", url: 'https://github.com/trending', }); console.log(automateEvent.data); ``` ## Research `client.agent.research(AgentResearchParamsbody, RequestOptionsoptions?): ResearchEvent | Stream` **post** `/research` Execute AI-powered research queries that search the web, analyze sources, and synthesize comprehensive answers. This endpoint **always streams** responses using Server-Sent Events (SSE). **Streaming Response:** - All responses are streamed using Server-Sent Events (`text/event-stream`) - Real-time progress updates as research progresses through phases **Research Modes:** - `fast` - Quick answers with minimal web searches - `balanced` - Standard research with multiple iterations (default) **Use Cases:** - Answering complex questions with cited sources - Synthesizing information from multiple web sources - Research reports on specific topics - Fact-checking and verification tasks ### Parameters - `body: AgentResearchParams` - `query: string` The research query or question to answer - `fetch_timeout?: number` Timeout in seconds for fetching web pages - `mode?: "fast" | "balanced"` Research mode: fast (quick answers), balanced (standard research, default) - `"fast"` - `"balanced"` - `nocache?: boolean` Skip cache and force fresh research ### Returns - `ResearchEvent` - `data?: unknown` Event payload data - `event?: "phase" | "progress" | "complete" | "error"` The event type: phase, progress, complete, or error - `"phase"` - `"progress"` - `"complete"` - `"error"` ### Example ```typescript import Tabstack from '@tabstack/sdk'; const client = new Tabstack({ apiKey: process.env['TABSTACK_API_KEY'], // This is the default and can be omitted }); const researchEvent = await client.agent.research({ query: 'What are the latest developments in quantum computing?', }); console.log(researchEvent.data); ``` ## Domain Types ### Automate Event - `AutomateEvent` - `data?: unknown` Event payload data - `event?: string` The event type (e.g., start, agent:processing, complete) ### Research Event - `ResearchEvent` - `data?: unknown` Event payload data - `event?: "phase" | "progress" | "complete" | "error"` The event type: phase, progress, complete, or error - `"phase"` - `"progress"` - `"complete"` - `"error"`