Launch HN: Intuned (YC S22) – 以代码形式构建并运行可靠的浏览器自动化程序
Launch HN: Intuned (YC S22) – Build and run reliable browser automations as code

原始链接: https://intunedhq.com

Intuned Web Tasks 允许用户通过简单的自然语言指令,实现基于浏览器的自动化工作流,例如网页抓取、爬取和表单填写。 **工作流程:** 1. **启动:** 如果未指定任务,请询问用户想要自动执行的操作,并提供如数据提取或文件下载等示例。 2. **执行:** 获取任务后,请让用户在 Intuned CLI、TypeScript SDK 或 Python SDK 之间进行选择。 3. **配置:** 仅在适用时使用 `startUrl`、`outputSchema` 和 `parameters` 等可选参数。 4. **复用:** 针对后续任务或类似任务,务必使用 `reuseKey` 以提高性能和效率,参考提供的 YC 目录抓取示例。 **实现选项:** * **CLI:** `intuned platform webtasks run ""` * **TypeScript:** `client.webTasks.run({...})` * **Python:** `client.web_tasks.run(body={...})` 系统会自动生成并管理这些任务,通过复用既有逻辑来优化后续运行。有关详细配置和高级选项,请参阅[官方文档](https://intunedhq.com/docs/main/07-web-tasks/overview.md)。

Intuned 是一个旨在简化针对无 API 网站的浏览器自动化创建、部署和维护的平台。该服务由 Faisal 和 Ahmad(YC S22)创立,致力于解决浏览器自动化领域的核心难题:维护。 **核心功能:** * **混合方案:** 与在运行时运行的纯 AI 代理不同,Intuned 将自动化生成并执行为代码(基于 Playwright 的 TypeScript 或 Python)。这确保了可预测性、速度和成本效益。 * **基础设施与可观测性:** 该平台提供托管运行环境,负责处理会话管理、并发和日志记录。 * **AI 驱动的维护:** Intuned 将 AI 代理与基础设施集成,提供“AI 修复”和“自愈”功能。如果自动化因网站变更而失败,系统可以分析日志并提出或自动部署代码修复。 * **反爬虫保护:** 为绕过严格的自动化防御机制,Intuned 使用了定制的 Chromium 构建版本和先进的隐身技术。 Intuned 面向管理复杂爬虫或 RPA 任务的开发者及团队。与专注于 AI 驱动的运行时执行的竞品不同,Intuned 的差异化优势在于将 AI 作为工具,以管理和维护稳定、基于代码的自动化流程。
相关文章

原文
const companySchema = z.array(
  z.object({
    name: z.string(),
    location: z.string(),
  }),
);

await webTasks.run({
  task: "Scrape YC companies. Return name, batch, description, and URL.",
  startUrl: "https://www.ycombinator.com/companies",
  parameters: { batch: "S24" },
  outputSchema: companySchema,
  reuseKey: "yc_companies_scraper",
});

// ✓ created skill yc_companies_scraper
// ✓ wrote reusable helpers
// ✓ returned 247 companies · 6m 12s · $0.84 AI + 0.10 compute hrs

await webTasks.run({
  task: "Scrape YC companies. Return name, batch, description, and URL.",
  startUrl: "https://www.ycombinator.com/companies",
  parameters: { batch: "W24" },
  outputSchema: companySchema,
  reuseKey: "yc_companies_scraper",
});

// ✓ reused skill yc_companies_scraper
// ✓ returned 208 companies · 58s · $0.12 AI + 0.02 compute hrs
class Company(BaseModel):
    name: str
    location: str

await web_tasks.run(
    task="Scrape YC companies. Return name, batch, description, and URL.",
    start_url="https://www.ycombinator.com/companies",
    parameters={"batch": "S24"},
    output_schema=list[Company],
    reuse_key="yc_companies_scraper",
)

# ✓ created skill yc_companies_scraper
# ✓ wrote reusable helpers
# ✓ returned 247 companies · 6m 12s · $0.84 AI + 0.10 compute hrs

await web_tasks.run(
    task="Scrape YC companies. Return name, batch, description, and URL.",
    start_url="https://www.ycombinator.com/companies",
    parameters={"batch": "W24"},
    output_schema=list[Company],
    reuse_key="yc_companies_scraper",
)

# ✓ reused skill yc_companies_scraper
# ✓ returned 208 companies · 58s · $0.12 AI + 0.02 compute hrs
Intuned Web Tasks runs browser automations from natural-language instructions —
scraping, crawling, form filling, multi-step actions, and downloading files. Use it
whenever the user asks to extract data from, act on, or pull files from a website.

## Flow
If no task has been given yet, ask what they want to automate in one line and offer
1–2 examples — e.g. "What would you like to automate? For example, 'scrape all
companies from the YC directory' or 'download every PDF from a site'."

When the user gives you an automation task:
1. Ask whether to trigger via the **Intuned CLI** or the **SDK** (TypeScript or Python).
2. Trigger it, using their request as the `task`. Don't ask anything else
   unless a required input is missing.

## Optional inputs
Include these only when they apply and you can infer them from the task — never ask for them:
- `parameters` — dynamic inputs that change between runs.
- `outputSchema` — JSON Schema, only when extracting structured data.
- `startUrl` — only when known; the agent infers it otherwise.
- `reuseKey` — when you re-run the same or similar task (e.g. to change a limit or
  parameter), reuse the `reuse.key` the previous run returned, or a key the user gives
  you. Only omit it for a brand-new task; the server then generates one — keep it and
  reuse it on follow-ups for the same/similar task. Never ask whether the task is repetitive.

## CLI
Install first if missing: `npm install -g @Intuned/cli`, verify with `intuned -v`.
  intuned platform webtasks run "<task>" --json
Add `--reuse-key <key>` when re-running the same/similar task (the prior run's key) or when the user provided one.

## TypeScript SDK (`npm install @Intuned/client`)
  import { IntunedClient } from "@Intuned/client";

  await client.webTasks.run({
    task: "<what to do>",
    startUrl: "<url, optional>",
    parameters: { /* optional */ },
    outputSchema: { /* jsonSchema, optional */ },
    // reuseKey: the prior run's key on follow-ups, or one the user gave
  });

## Python SDK (`pip install intuned-client`)
  from intuned_client import IntunedClient

  client.web_tasks.run(body={
    "task": "<what to do>",
    "start_url": "<url, optional>",
    "parameters": {}, // optional
    "output_schema": {}, // optional
  })

## Docs
Refer here for more options and details:
https://intunedhq.com/docs/main/07-web-tasks/overview.md
联系我们 contact @ memedata.com