[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-nottelabs--notte":3,"tool-nottelabs--notte":62},[4,18,28,37,45,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":24,"last_commit_at":25,"category_tags":26,"status":17},9989,"n8n","n8n-io\u002Fn8n","n8n 是一款面向技术团队的公平代码（fair-code）工作流自动化平台，旨在让用户在享受低代码快速构建便利的同时，保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点，帮助用户轻松连接 400 多种应用与服务，实现复杂业务流程的自动化。\n\nn8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”：既可以通过直观的可视化界面拖拽节点搭建流程，也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外，n8n 原生集成了基于 LangChain 的 AI 能力，支持用户利用自有数据和模型构建智能体工作流。在部署方面，n8n 提供极高的自由度，支持完全自托管以保障数据隐私和控制权，也提供云端服务选项。凭借活跃的社区生态和数百个现成模板，n8n 让构建强大且可控的自动化系统变得简单高效。",184740,2,"2026-04-19T23:22:26",[16,14,13,15,27],"插件",{"id":29,"name":30,"github_repo":31,"description_zh":32,"stars":33,"difficulty_score":10,"last_commit_at":34,"category_tags":35,"status":17},10095,"AutoGPT","Significant-Gravitas\u002FAutoGPT","AutoGPT 是一个旨在让每个人都能轻松使用和构建 AI 的强大平台，核心功能是帮助用户创建、部署和管理能够自动执行复杂任务的连续型 AI 智能体。它解决了传统 AI 应用中需要频繁人工干预、难以自动化长流程工作的痛点，让用户只需设定目标，AI 即可自主规划步骤、调用工具并持续运行直至完成任务。\n\n无论是开发者、研究人员，还是希望提升工作效率的普通用户，都能从 AutoGPT 中受益。开发者可利用其低代码界面快速定制专属智能体；研究人员能基于开源架构探索多智能体协作机制；而非技术背景用户也可直接选用预置的智能体模板，立即投入实际工作场景。\n\nAutoGPT 的技术亮点在于其模块化“积木式”工作流设计——用户通过连接功能块即可构建复杂逻辑，每个块负责单一动作，灵活且易于调试。同时，平台支持本地自托管与云端部署两种模式，兼顾数据隐私与使用便捷性。配合完善的文档和一键安装脚本，即使是初次接触的用户也能在几分钟内启动自己的第一个 AI 智能体。AutoGPT 正致力于降低 AI 应用门槛，让人人都能成为 AI 的创造者与受益者。",183572,"2026-04-20T04:47:55",[13,36,27,14,15],"语言模型",{"id":38,"name":39,"github_repo":40,"description_zh":41,"stars":42,"difficulty_score":10,"last_commit_at":43,"category_tags":44,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":46,"name":47,"github_repo":48,"description_zh":49,"stars":50,"difficulty_score":24,"last_commit_at":51,"category_tags":52,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",161147,"2026-04-19T23:31:47",[14,13,36],{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":59,"last_commit_at":60,"category_tags":61,"status":17},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[13,27],{"id":63,"github_repo":64,"name":65,"description_en":66,"description_zh":67,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":77,"owner_email":78,"owner_twitter":79,"owner_website":80,"owner_url":81,"languages":82,"stars":99,"forks":100,"last_commit_at":101,"license":102,"difficulty_score":24,"env_os":103,"env_gpu":103,"env_ram":103,"env_deps":104,"category_tags":112,"github_topics":113,"view_count":24,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":122,"updated_at":123,"faqs":124,"releases":155},10047,"nottelabs\u002Fnotte","notte","🌸 Best framework to build web agents, and deploy serverless web automation functions on reliable browser infra.","Notte 是一款专为构建可靠网页自动化智能体（Web Agents）而设计的开源框架。它旨在解决传统网页爬虫和自动化工具在面对复杂动态网站时稳定性差、维护成本高以及难以处理验证码等痛点。通过结合确定性脚本与 AI 大模型的推理能力，Notte 让用户既能用代码精准控制流程，又能在需要灵活决策时调用 AI，从而在提升任务成功率的同时大幅降低运行成本。\n\n这款工具特别适合开发者、数据工程师以及需要大规模网页交互的研究人员使用。无论是抓取动态数据、执行复杂的业务流程，还是模拟真实用户行为进行测试，Notte 都能提供高效支持。其核心技术亮点包括“混合工作流”架构，允许按需切换脚本与 AI 模式；内置的隐身浏览器会话，原生集成验证码识别、代理池及反检测功能；以及企业级的数字身份管理，可自动生成包含邮箱、手机号及自动二次验证的完整数字 persona。Notte 提供了简洁的 Python SDK，支持本地快速部署或通过云端 API 无缝扩展，帮助团队以更低门槛实现高可用的网页自动化方案。","# Rapidly build reliable web automation agents\n\n\u003Cdiv align=\"center\">\n  \u003Cp>\n    The web agent framework built for \u003Cstrong>speed\u003C\u002Fstrong>, \u003Cstrong>cost-efficiency\u003C\u002Fstrong>, \u003Cstrong>scale\u003C\u002Fstrong>, and \u003Cstrong>reliability\u003C\u002Fstrong> \u003Cbr\u002F>\n    → Read more at: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fopen-operator-evals\" target=\"_blank\" rel=\"noopener noreferrer\">open-operator-evals\u003C\u002Fa> • \u003Ca href=\"https:\u002F\u002Fx.com\u002Fnottecore?ref=github\" target=\"_blank\" rel=\"noopener noreferrer\">X\u003C\u002Fa> • \u003Ca href=\"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fnottelabsinc\u002F?ref=github\" target=\"_blank\" rel=\"noopener noreferrer\">LinkedIn\u003C\u002Fa> • \u003Ca href=\"https:\u002F\u002Fnotte.cc?ref=github\" target=\"_blank\" rel=\"noopener noreferrer\">Landing\u003C\u002Fa> • \u003Ca href=\"https:\u002F\u002Fconsole.notte.cc\u002F?ref=github\" target=\"_blank\" rel=\"noopener noreferrer\">Console\u003C\u002Fa>\n  \u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fnottelabs_notte_readme_74a2eb896f9d.png\" alt=\"Notte Logo\" width=\"100%\">\n\u003C\u002Fp>\n\n[![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fnottelabs\u002Fnotte?style=social)](https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fstargazers)\n[![License: SSPL-1.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-SSPL%201.0-blue.svg)](https:\u002F\u002Fspdx.org\u002Flicenses\u002FSSPL-1.0.html)\n[![Python 3.11+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.11+-blue.svg)](https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F)\n[![PyPI version](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fnotte?color=blue)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fnotte\u002F)\n[![PyPI Downloads](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fnottelabs_notte_readme_7e642df86cfa.png)](https:\u002F\u002Fpepy.tech\u002Fprojects\u002Fnotte)\n\n---\n\n# What is Notte?\n\nNotte provides all the essential tools for building and deploying AI agents that interact seamlessly with the web. Our full-stack framework combines AI agents with traditional scripting for maximum efficiency - letting you script deterministic parts and use AI only when needed, cutting costs by 50%+ while improving reliability. We allow you to develop, deploy, and scale your own agents and web automations, all with a single API. Read more in our documentation [here](https:\u002F\u002Fdocs.notte.cc) 🔥\n\n**Opensource Core:**\n- **[Run web agents](#using-python-sdk-recommended)** → Give AI agents natural language tasks to complete on websites\n- **[Structured Output](#structured-output)** → Get data in your exact format with Pydantic models\n- **[Site Interactions](#scraping)** → Observe website states, scrape data and execute actions using Playwright compatible primitives and natural language commands\n\n**API service (Recommended)**\n- **[Stealth Browser Sessions](#session-features)** → Browser instances with built-in CAPTCHA solving, proxies, and anti-detection\n- **[Hybrid Workflows](#workflows)** → Combine scripting and AI agents to reduce costs and improve reliability\n- **[Secrets Vaults](#agent-vault)** → Enterprise-grade credential management to store emails, passwords, MFA tokens, SSO, etc.\n- **[Digital Personas](#agent-persona)** → Create digital identities with unique emails, phones, and automated 2FA for account creation workflows\n\n# Quickstart\n\n```\npip install notte\npatchright install --with-deps chromium\n```\n\n### Run in local mode\n\nUse the following script to spinup an agent using opensource features (you'll need your own LLM API keys):\n\n```python\nimport notte\nfrom dotenv import load_dotenv\nload_dotenv()\n\nwith notte.Session(headless=False) as session:\n    agent = notte.Agent(session=session, reasoning_model='gemini\u002Fgemini-2.5-flash', max_steps=30)\n    response = agent.run(task=\"doom scroll cat memes on google images\")\n```\n\n### Using Python SDK (Recommended)\n\nWe also provide an effortless API that hosts the browser sessions for you - and provide plenty of premium features. To run the agent you'll need to first sign up on the [Notte Console](https:\u002F\u002Fconsole.notte.cc) and create a free Notte API key 🔑\n\n```python\nfrom notte_sdk import NotteClient\nimport os\n\nclient = NotteClient(api_key=os.getenv(\"NOTTE_API_KEY\"))\n\nwith client.Session(open_viewer=True) as session:\n    agent = client.Agent(session=session, reasoning_model='gemini\u002Fgemini-2.5-flash', max_steps=30)\n    response = agent.run(task=\"doom scroll cat memes on google images\")\n```\n\nOur setup allows you to experiment locally, then drop-in replace the import and prefix `notte` objects with `cli` to switch to SDK and get hosted browser sessions plus access to premium features!\n\n# Benchmarks\n\n| Rank | Provider                                                    | Agent Self-Report | LLM Evaluation | Time per Task | Task Reliability |\n| ---- | ----------------------------------------------------------- | ----------------- | -------------- | ------------- | ---------------- |\n| 🏆   | [Notte](https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte)                 | **86.2%**         | **79.0%**      | **47s**       | **96.6%**        |\n| 2️⃣   | [Browser-Use](https:\u002F\u002Fgithub.com\u002Fbrowser-use\u002Fbrowser-use)   | 77.3%             | 60.2%          | 113s          | 83.3%            |\n| 3️⃣   | [Convergence](https:\u002F\u002Fgithub.com\u002Fconvergence-ai\u002Fproxy-lite) | 38.4%             | 31.4%          | 83s           | 50%              |\n\nRead the full story here: [https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fopen-operator-evals](https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fopen-operator-evals)\n\n# Agent features\n\n## Structured output\n\nStructured output is a feature of the agent's run function that allows you to specify a Pydantic model as the `response_format` parameter. The agent will return data in the specified structure.\n\n```python\nfrom notte_sdk import NotteClient\nfrom pydantic import BaseModel\n\nclass HackerNewsPost(BaseModel):\n    title: str\n    url: str\n    points: int\n    author: str\n    comments_count: int\n\nclass TopPosts(BaseModel):\n    posts: list[HackerNewsPost]\n\nclient = NotteClient()\nwith client.Session(open_viewer=True, browser_type=\"chrome\") as session:\n    agent = client.Agent(session=session, reasoning_model='gemini\u002Fgemini-2.5-flash', max_steps=15)\n    response = agent.run(\n        task=\"Go to Hacker News (news.ycombinator.com) and extract the top 5 posts with their titles, URLs, points, authors, and comment counts.\",\n        response_format=TopPosts,\n    )\nprint(response.answer)\n```\n\n## Agent vault\nVaults are tools you can attach to your Agent instance to securely store and manage credentials. The agent automatically uses these credentials when needed.\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\n\nwith client.Vault() as vault, client.Session(open_viewer=True) as session:\n    vault.add_credentials(\n        url=\"https:\u002F\u002Fx.com\",\n        username=\"your-email\",\n        password=\"your-password\",\n    )\n    agent = client.Agent(session=session, vault=vault, max_steps=10)\n    response = agent.run(\n      task=\"go to twitter; login and go to my messages\",\n    )\nprint(response.answer)\n```\n\n## Agent persona\n\nPersonas are tools you can attach to your Agent instance to provide digital identities with unique email addresses, phone numbers, and automated 2FA handling.\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\n\nwith client.Persona(create_phone_number=False) as persona:\n    with client.Session(browser_type=\"chrome\", open_viewer=True) as session:\n        agent = client.Agent(session=session, persona=persona, max_steps=15)\n        response = agent.run(\n            task=\"Open the Google form and RSVP yes with your name\",\n            url=\"https:\u002F\u002Fforms.google.com\u002Fyour-form-url\",\n        )\nprint(response.answer)\n```\n\n# Session features\n\n## Stealth\n\nStealth features include automatic CAPTCHA solving and proxy configuration to enhance automation reliability and anonymity.\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\n\n# Built-in proxies with CAPTCHA solving\nwith client.Session(\n    solve_captchas=True,\n    proxies=True,  # US-based proxy\n    browser_type=\"chrome\",\n    open_viewer=True\n) as session:\n    agent = client.Agent(session=session, max_steps=5)\n    response = agent.run(\n        task=\"Try to solve the CAPTCHA using internal tools\",\n        url=\"https:\u002F\u002Fwww.google.com\u002Frecaptcha\u002Fapi2\u002Fdemo\"\n    )\n\n# Custom proxy configuration\nproxy_settings = ExternalProxy(\n    server=\"http:\u002F\u002Fyour-proxy-server:port\",\n    username=\"your-username\",\n    password=\"your-password\",\n)\n\nwith client.Session(proxies=[proxy_settings]) as session:\n    agent = client.Agent(session=session, max_steps=5)\n    response = agent.run(task=\"Navigate to a website\")\n```\n\n## File download \u002F upload\n\nFile Storage allows you to upload files to a session and download files that agents retrieve during their work. Files are session-scoped and persist beyond the session lifecycle.\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\nstorage = client.FileStorage()\n\n# Upload files before agent execution\nstorage.upload(\"\u002Fpath\u002Fto\u002Fdocument.pdf\")\n\n# Create session with storage attached\nwith client.Session(storage=storage) as session:\n    agent = client.Agent(session=session, max_steps=5)\n    response = agent.run(\n        task=\"Upload the PDF document to the website and download the cat picture\",\n        url=\"https:\u002F\u002Fexample.com\u002Fupload\"\n    )\n\n# Download files that the agent downloaded\ndownloaded_files = storage.list(type=\"downloads\")\nfor file_name in downloaded_files:\n    storage.download(file_name=file_name, local_dir=\".\u002Fresults\")\n```\n\n## Cookies \u002F Auth Sessions\n\nCookies provide a flexible way to authenticate your sessions. While we recommend using the secure vault for credential management, cookies offer an alternative approach for certain use cases.\n\n```python\nfrom notte_sdk import NotteClient\nimport json\n\nclient = NotteClient()\n\n# Upload cookies for authentication\ncookies = [\n    {\n        \"name\": \"sb-db-auth-token\",\n        \"value\": \"base64-cookie-value\",\n        \"domain\": \"github.com\",\n        \"path\": \"\u002F\",\n        \"expires\": 9778363203.913704,\n        \"httpOnly\": False,\n        \"secure\": False,\n        \"sameSite\": \"Lax\"\n    }\n]\n\nwith client.Session() as session:\n    session.set_cookies(cookies=cookies)  # or cookie_file=\"path\u002Fto\u002Fcookies.json\"\n    \n    agent = client.Agent(session=session, max_steps=5)\n    response = agent.run(\n        task=\"go to nottelabs\u002Fnotte get repo info\",\n    )\n    \n    # Get cookies from the session\n    cookies_resp = session.get_cookies()\n    with open(\"cookies.json\", \"w\") as f:\n        json.dump(cookies_resp, f)\n```\n\n## CDP Browser compatibility\n\nYou can plug in any browser session provider you want and use our agent on top. Use external headless browser providers via CDP to benefit from Notte's agentic capabilities with any CDP-compatible browser.\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\ncdp_url = \"wss:\u002F\u002Fyour-external-cdp-url\"\n\nwith client.Session(cdp_url=cdp_url) as session:\n    agent = client.Agent(session=session)\n    response = agent.run(task=\"extract pricing plans from https:\u002F\u002Fwww.notte.cc\u002F\")\n```\n\n# Hybrid workflows\n\nNotte's close compatibility with Playwright allows you to mix web automation primitives with agents for specific parts that require reasoning and adaptability. This hybrid approach cuts LLM costs and is much faster by using scripting for deterministic parts and agents only when needed.\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\n\nwith client.Session(open_viewer=True) as session:\n    # Start with a deterministic navigation\n    session.execute(type=\"goto\", url=\"https:\u002F\u002Fduckduckgo.com\u002F\")\n    session.execute(type=\"fill\", selector=\"internal:role=combobox[name=\\\"Search with DuckDuckGo\\\"i]\", value=\"nottelabs\")\n    agent = client.Agent(session=session, max_steps=3)\n    # Use an agent to reason about the next step\n    agent.run(task=\"Open nottelabs github repository\")\n    # Use a scraping endpoint to extract data\n    data = session.scrape(instructions=\"Extract number of stars\")\n```\n\n# Agent fallback\n\nWorkflows are a powerful way to combine scripting and agents to reduce costs and improve reliability. However, deterministic parts of the workflow can still fail. To gracefully handle these failures with agents, you can use the `AgentFallback` class: \n\n```python\nimport notte\n\nwith notte.Session() as session:\n    _ = session.execute(type=\"goto\", url=\"https:\u002F\u002Fshop.notte.cc\u002F\")\n    _ = session.observe()\n\n    with notte.AgentFallback(session, \"Go to cart\"):\n        # Force execution failure -> trigger an agent fallback to gracefully fix the issue\n        res = session.execute(type=\"click\", id=\"INVALID_ACTION_ID\")\n```\n\n# Scraping\n\nFor fast data extraction, we provide a dedicated scraping endpoint that automatically creates and manages sessions. You can pass custom instructions for structured outputs and enable stealth mode.\n\n```python\nfrom notte_sdk import NotteClient\nfrom pydantic import BaseModel\n\nclient = NotteClient()\n\n# Simple scraping\nresponse = client.scrape(\n    url=\"https:\u002F\u002Fnotte.cc\",\n    scrape_links=True,\n    only_main_content=True\n)\n\n# Structured scraping with custom instructions\nclass Article(BaseModel):\n    title: str\n    content: str\n    date: str\n\nresponse = client.scrape(\n    url=\"https:\u002F\u002Fexample.com\u002Fblog\",\n    response_format=Article,\n    instructions=\"Extract only the title, date and content of the articles\"\n)\n```\n\nOr directly with cURL\n```bash\ncurl -X POST 'https:\u002F\u002Fapi.notte.cc\u002Fscrape' \\\n  -H 'Authorization: Bearer \u003CNOTTE-API-KEY>' \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fnotte.cc\",\n    \"only_main_content\": false,\n  }'\n```\n\n\n**Search:** We've built a cool demo of an LLM leveraging the scraping endpoint in an MCP server to make real-time search in an LLM chatbot - works like a charm! Available here: [https:\u002F\u002Fsearch.notte.cc\u002F](https:\u002F\u002Fsearch.notte.cc\u002F)\n\n# License\n\nThis project is licensed under the Server Side Public License v1.\nSee the [LICENSE](LICENSE) file for details.\n\n# Citation\n\nIf you use notte in your research or project, please cite:\n\n```bibtex\n@software{notte2025,\n  author = {Pinto, Andrea and Giordano, Lucas and {nottelabs-team}},\n  title = {Notte: Software suite for internet-native agentic systems},\n  url = {https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte},\n  year = {2025},\n  publisher = {GitHub},\n  license = {SSPL-1.0}\n  version = {1.4.4},\n}\n```\n\nCopyright © 2025 Notte Labs, Inc.\n","# 快速构建可靠的网页自动化代理\n\n\u003Cdiv align=\"center\">\n  \u003Cp>\n    这是一个为\u003Cstrong>速度\u003C\u002Fstrong>、\u003Cstrong>成本效益\u003C\u002Fstrong>、\u003Cstrong>可扩展性\u003C\u002Fstrong>和\u003Cstrong>可靠性\u003C\u002Fstrong>而打造的网页代理框架\u003Cbr\u002F>\n    → 更多信息请访问： \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fopen-operator-evals\" target=\"_blank\" rel=\"noopener noreferrer\">open-operator-evals\u003C\u002Fa> • \u003Ca href=\"https:\u002F\u002Fx.com\u002Fnottecore?ref=github\" target=\"_blank\" rel=\"noopener noreferrer\">X\u003C\u002Fa> • \u003Ca href=\"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fnottelabsinc\u002F?ref=github\" target=\"_blank\" rel=\"noopener noreferrer\">LinkedIn\u003C\u002Fa> • \u003Ca href=\"https:\u002F\u002Fnotte.cc?ref=github\" target=\"_blank\" rel=\"noopener noreferrer\">官网\u003C\u002Fa> • \u003Ca href=\"https:\u002F\u002Fconsole.notte.cc\u002F?ref=github\" target=\"_blank\" rel=\"noopener noreferrer\">控制台\u003C\u002Fa>\n  \u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fnottelabs_notte_readme_74a2eb896f9d.png\" alt=\"Notte Logo\" width=\"100%\">\n\u003C\u002Fp>\n\n[![GitHub 星标](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fnottelabs\u002Fnotte?style=social)](https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fstargazers)\n[![许可证：SSPL-1.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-SSPL%201.0-blue.svg)](https:\u002F\u002Fspdx.org\u002Flicenses\u002FSSPL-1.0.html)\n[![Python 3.11+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.11+-blue.svg)](https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F)\n[![PyPI 版本](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fnotte?color=blue)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fnotte\u002F)\n[![PyPI 下载量](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fnottelabs_notte_readme_7e642df86cfa.png)](https:\u002F\u002Fpepy.tech\u002Fprojects\u002Fnotte)\n\n---\n\n# Notte 是什么？\n\nNotte 提供了构建和部署能够与网页无缝交互的 AI 代理所需的所有核心工具。我们的全栈框架将 AI 代理与传统脚本相结合，以实现最高效率——允许您对确定性部分进行脚本化，并仅在必要时使用 AI，从而将成本降低 50% 以上，同时提高可靠性。我们让您只需通过一个 API 即可开发、部署和扩展自己的代理及网页自动化任务。更多内容请参阅我们的文档 [这里](https:\u002F\u002Fdocs.notte.cc) 🔥\n\n**开源核心功能：**\n- **[运行网页代理](#using-python-sdk-recommended)** → 向 AI 代理赋予自然语言任务，在网站上完成操作\n- **[结构化输出](#structured-output)** → 使用 Pydantic 模型获取您所需的精确格式数据\n- **[站点交互](#scraping)** → 使用 Playwright 兼容原语和自然语言命令观察网站状态、抓取数据并执行操作\n\n**API 服务（推荐）**\n- **[隐身浏览器会话](#session-features)** → 内置 CAPTCHA 解决、代理和反检测功能的浏览器实例\n- **[混合工作流](#workflows)** → 结合脚本和 AI 代理，降低成本并提高可靠性\n- **[密钥保险库](#agent-vault)** → 企业级凭据管理，用于存储电子邮件、密码、MFA 令牌、SSO 等\n- **[数字身份](#agent-persona)** → 创建具有唯一邮箱、电话和自动 2FA 的数字身份，适用于账户创建流程\n\n# 快速入门\n\n```\npip install notte\npatchright install --with-deps chromium\n```\n\n### 在本地模式下运行\n\n使用以下脚本启动一个基于开源功能的代理（您需要自己的 LLM API 密钥）：\n\n```python\nimport notte\nfrom dotenv import load_dotenv\nload_dotenv()\n\nwith notte.Session(headless=False) as session:\n    agent = notte.Agent(session=session, reasoning_model='gemini\u002Fgemini-2.5-flash', max_steps=30)\n    response = agent.run(task=\"在 Google 图片上疯狂刷猫 meme\")\n```\n\n### 使用 Python SDK（推荐）\n\n我们还提供了一个便捷的 API，为您托管浏览器会话，并提供丰富的高级功能。要运行代理，您需要先在 [Notte 控制台](https:\u002F\u002Fconsole.notte.cc) 上注册，并创建一个免费的 Notte API 密钥 🔑\n\n```python\nfrom notte_sdk import NotteClient\nimport os\n\nclient = NotteClient(api_key=os.getenv(\"NOTTE_API_KEY\"))\n\nwith client.Session(open_viewer=True) as session:\n    agent = client.Agent(session=session, reasoning_model='gemini\u002Fgemini-2.5-flash', max_steps=30)\n    response = agent.run(task=\"在 Google 图片上疯狂刷猫 meme\")\n```\n\n我们的设置允许您先在本地进行实验，然后只需替换导入语句并将 `notte` 对象前缀改为 `cli`，即可切换到 SDK，获得托管浏览器会话以及高级功能！\n\n# 基准测试\n\n| 排名 | 提供者                                                    | 代理自评 | LLM 评估 | 每任务耗时 | 任务可靠性 |\n| ---- | ----------------------------------------------------------- | -------- | ---------- | ---------- | ---------- |\n| 🏆   | [Notte](https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte)                 | **86.2%** | **79.0%** | **47s**    | **96.6%**  |\n| 2️⃣   | [Browser-Use](https:\u002F\u002Fgithub.com\u002Fbrowser-use\u002Fbrowser-use)   | 77.3%    | 60.2%      | 113s       | 83.3%      |\n| 3️⃣   | [Convergence](https:\u002F\u002Fgithub.com\u002Fconvergence-ai\u002Fproxy-lite) | 38.4%    | 31.4%      | 83s        | 50%        |\n\n完整报告请见： [https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fopen-operator-evals](https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fopen-operator-evals)\n\n# 代理功能\n\n## 结构化输出\n\n结构化输出是代理运行函数中的一项功能，允许您通过 `response_format` 参数指定一个 Pydantic 模型。代理将按照指定的结构返回数据。\n\n```python\nfrom notte_sdk import NotteClient\nfrom pydantic import BaseModel\n\nclass HackerNewsPost(BaseModel):\n    title: str\n    url: str\n    points: int\n    author: str\n    comments_count: int\n\nclass TopPosts(BaseModel):\n    posts: list[HackerNewsPost]\n\nclient = NotteClient()\nwith client.Session(open_viewer=True, browser_type=\"chrome\") as session:\n    agent = client.Agent(session=session, reasoning_model='gemini\u002Fgemini-2.5-flash', max_steps=15)\n    response = agent.run(\n        task=\"前往 Hacker News (news.ycombinator.com)，提取前 5 篇帖子的标题、URL、积分、作者和评论数。\",\n        response_format=TopPosts,\n    )\nprint(response.answer)\n```\n\n## 代理保险库\n保险库是可以附加到您的代理实例上的工具，用于安全地存储和管理凭据。代理会在需要时自动使用这些凭据。\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\n\nwith client.Vault() as vault, client.Session(open_viewer=True) as session:\n    vault.add_credentials(\n        url=\"https:\u002F\u002Fx.com\",\n        username=\"your-email\",\n        password=\"your-password\",\n    )\n    agent = client.Agent(session=session, vault=vault, max_steps=10)\n    response = agent.run(\n      task=\"前往 Twitter；登录并进入我的消息\",\n    )\nprint(response.answer)\n```\n\n## 代理角色\n\n角色是您可以附加到代理实例的工具，用于提供具有唯一电子邮件地址、电话号码以及自动处理双因素认证（2FA）功能的数字身份。\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\n\nwith client.Persona(create_phone_number=False) as persona:\n    with client.Session(browser_type=\"chrome\", open_viewer=True) as session:\n        agent = client.Agent(session=session, persona=persona, max_steps=15)\n        response = agent.run(\n            task=\"打开 Google 表单并用您的姓名确认参加\",\n            url=\"https:\u002F\u002Fforms.google.com\u002Fyour-form-url\",\n        )\nprint(response.answer)\n```\n\n# 会话功能\n\n## 隐蔽模式\n\n隐蔽模式功能包括自动解决验证码和代理配置，以提高自动化可靠性和匿名性。\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\n\n# 内置代理与验证码解决功能\nwith client.Session(\n    solve_captchas=True,\n    proxies=True,  # 基于美国的代理\n    browser_type=\"chrome\",\n    open_viewer=True\n) as session:\n    agent = client.Agent(session=session, max_steps=5)\n    response = agent.run(\n        task=\"尝试使用内部工具解决验证码\",\n        url=\"https:\u002F\u002Fwww.google.com\u002Frecaptcha\u002Fapi2\u002Fdemo\"\n    )\n\n# 自定义代理配置\nproxy_settings = ExternalProxy(\n    server=\"http:\u002F\u002Fyour-proxy-server:port\",\n    username=\"your-username\",\n    password=\"your-password\",\n)\n\nwith client.Session(proxies=[proxy_settings]) as session:\n    agent = client.Agent(session=session, max_steps=5)\n    response = agent.run(task=\"访问某个网站\")\n```\n\n## 文件下载\u002F上传\n\n文件存储允许您将文件上传到会话中，并下载代理在工作过程中获取的文件。这些文件仅限于当前会话范围，并且会在会话生命周期结束后继续保留。\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\nstorage = client.FileStorage()\n\n# 在代理执行前上传文件\nstorage.upload(\"\u002Fpath\u002Fto\u002Fdocument.pdf\")\n\n# 创建附带存储的会话\nwith client.Session(storage=storage) as session:\n    agent = client.Agent(session=session, max_steps=5)\n    response = agent.run(\n        task=\"将 PDF 文档上传到网站并下载猫的图片\",\n        url=\"https:\u002F\u002Fexample.com\u002Fupload\"\n    )\n\n# 下载代理下载的文件\ndownloaded_files = storage.list(type=\"downloads\")\nfor file_name in downloaded_files:\n    storage.download(file_name=file_name, local_dir=\".\u002Fresults\")\n```\n\n## Cookies \u002F 认证会话\n\nCookies 提供了一种灵活的方式来认证您的会话。虽然我们建议使用安全保险库来管理凭据，但在某些情况下，Cookies 也是一种替代方案。\n\n```python\nfrom notte_sdk import NotteClient\nimport json\n\nclient = NotteClient()\n\n# 上传用于认证的 cookies\ncookies = [\n    {\n        \"name\": \"sb-db-auth-token\",\n        \"value\": \"base64-cookie-value\",\n        \"domain\": \"github.com\",\n        \"path\": \"\u002F\",\n        \"expires\": 9778363203.913704,\n        \"httpOnly\": False,\n        \"secure\": False,\n        \"sameSite\": \"Lax\"\n    }\n]\n\nwith client.Session() as session:\n    session.set_cookies(cookies=cookies)  # 或者使用 cookie_file=\"path\u002Fto\u002Fcookies.json\"\n    \n    agent = client.Agent(session=session, max_steps=5)\n    response = agent.run(\n        task=\"前往 nottelabs\u002Fnotte 获取仓库信息\",\n    )\n    \n    # 从会话中获取 cookies\n    cookies_resp = session.get_cookies()\n    with open(\"cookies.json\", \"w\") as f:\n        json.dump(cookies_resp, f)\n```\n\n## CDP 浏览器兼容性\n\n您可以插入任何您想要的浏览器会话提供商，并在其上使用我们的代理。通过 CDP 使用外部无头浏览器提供商，您可以在任何兼容 CDP 的浏览器上受益于 Notte 的代理能力。\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\ncdp_url = \"wss:\u002F\u002Fyour-external-cdp-url\"\n\nwith client.Session(cdp_url=cdp_url) as session:\n    agent = client.Agent(session=session)\n    response = agent.run(task=\"从 https:\u002F\u002Fwww.notte.cc\u002F 提取定价计划\")\n```\n\n# 混合工作流\n\nNotte 与 Playwright 的高度兼容性使您能够将 Web 自动化原语与代理相结合，针对需要推理和适应性的特定部分进行操作。这种混合方法可以降低 LLM 成本，并且由于对确定性部分使用脚本而仅在必要时使用代理，因此速度更快。\n\n```python\nfrom notte_sdk import NotteClient\n\nclient = NotteClient()\n\nwith client.Session(open_viewer=True) as session:\n    # 首先进行确定性导航\n    session.execute(type=\"goto\", url=\"https:\u002F\u002Fduckduckgo.com\u002F\")\n    session.execute(type=\"fill\", selector=\"internal:role=combobox[name=\\\"Search with DuckDuckGo\\\"i]\", value=\"nottelabs\")\n    agent = client.Agent(session=session, max_steps=3)\n    # 使用代理来推理下一步\n    agent.run(task=\"打开 nottelabs 的 GitHub 仓库\")\n    # 使用抓取端点提取数据\n    data = session.scrape(instructions=\"提取星标数量\")\n```\n\n# 代理回退\n\n工作流是一种强大的方式，可以结合脚本和代理来降低成本并提高可靠性。然而，工作流中的确定性部分仍然可能失败。为了优雅地处理这些失败情况，您可以使用 `AgentFallback` 类：\n\n```python\nimport notte\n\nwith notte.Session() as session:\n    _ = session.execute(type=\"goto\", url=\"https:\u002F\u002Fshop.notte.cc\u002F\")\n    _ = session.observe()\n\n    with notte.AgentFallback(session, \"前往购物车\"):\n        # 强制执行失败 -> 触发代理回退以优雅地解决问题\n        res = session.execute(type=\"click\", id=\"INVALID_ACTION_ID\")\n```\n\n# 数据抓取\n\n为了快速提取数据，我们提供了一个专门的抓取端点，该端点会自动创建并管理会话。您可以传递自定义指令以生成结构化输出，并启用隐蔽模式。\n\n```python\nfrom notte_sdk import NotteClient\nfrom pydantic import BaseModel\n\nclient = NotteClient()\n\n# 简单抓取\nresponse = client.scrape(\n    url=\"https:\u002F\u002Fnotte.cc\",\n    scrape_links=True,\n    only_main_content=True\n)\n\n# 带有自定义指令的结构化抓取\nclass Article(BaseModel):\n    title: str\n    content: str\n    date: str\n\nresponse = client.scrape(\n    url=\"https:\u002F\u002Fexample.com\u002Fblog\",\n    response_format=Article,\n    instructions=\"仅提取文章的标题、日期和内容\"\n)\n```\n\n或者直接使用 cURL：\n```bash\ncurl -X POST 'https:\u002F\u002Fapi.notte.cc\u002Fscrape' \\\n  -H 'Authorization: Bearer \u003CNOTTE-API-KEY>' \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fnotte.cc\",\n    \"only_main_content\": false,\n  }'\n```\n\n\n**搜索：** 我们构建了一个酷炫的演示，利用 MCP 服务器中的抓取端点，让 LLM 实现 LLM 聊天机器人中的实时搜索——效果非常好！可在以下网址查看：[https:\u002F\u002Fsearch.notte.cc\u002F](https:\u002F\u002Fsearch.notte.cc\u002F)\n\n# 许可证\n\n该项目采用服务器端公共许可证 v1 许可。有关详细信息，请参阅 [LICENSE](LICENSE) 文件。\n\n# 引用\n\n如果您在研究或项目中使用 Notte，请引用：\n\n```bibtex\n@software{notte2025,\n  author = {Pinto, Andrea 和 Giordano, Lucas 和 {nottelabs-team}},\n  title = {Notte：面向互联网原生智能体系统的软件套件},\n  url = {https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte},\n  year = {2025},\n  publisher = {GitHub},\n  license = {SSPL-1.0},\n  version = {1.4.4},\n}\n```\n\n版权所有 © 2025 Notte Labs, Inc.","# Notte 快速上手指南\n\nNotte 是一个专为**速度**、**成本效益**、**可扩展性**和**可靠性**打造的 Web AI Agent 框架。它结合了传统脚本的确定性与 AI 的灵活性，支持混合工作流，可显著降低 LLM 调用成本并提升任务成功率。\n\n## 环境准备\n\n- **操作系统**：Linux, macOS, Windows\n- **Python 版本**：3.11 或更高\n- **依赖项**：\n  - `patchright` (Playwright 的兼容分支)\n  - Chromium 浏览器内核\n  - (可选) LLM API Key (如使用本地模式需自备，如 Gemini, OpenAI 等)\n\n## 安装步骤\n\n1. 安装 Python 包：\n```bash\npip install notte\n```\n\n2. 安装浏览器依赖（推荐安装 Chromium）：\n```bash\npatchright install --with-deps chromium\n```\n\n> 💡 国内用户若遇下载慢，可配置环境变量使用国内镜像源加速浏览器下载：\n> ```bash\n> export PLAYWRIGHT_DOWNLOAD_HOST=https:\u002F\u002Fnpmmirror.com\u002Fmirrors\u002Fplaywright\n> patchright install --with-deps chromium\n> ```\n\n## 基本使用\n\n### 模式一：本地运行（开源核心功能）\n\n适用于本地测试，需自行配置 LLM API Key（通过 `.env` 文件或环境变量）。\n\n```python\nimport notte\nfrom dotenv import load_dotenv\nload_dotenv()\n\nwith notte.Session(headless=False) as session:\n    agent = notte.Agent(session=session, reasoning_model='gemini\u002Fgemini-2.5-flash', max_steps=30)\n    response = agent.run(task=\"doom scroll cat memes on google images\")\n```\n\n### 模式二：使用官方 SDK（推荐）\n\n通过 [Notte Console](https:\u002F\u002Fconsole.notte.cc) 注册获取 `NOTTE_API_KEY`，即可使用托管浏览器会话及高级功能（如自动验证码识别、代理、数字身份等）。\n\n```python\nfrom notte_sdk import NotteClient\nimport os\n\nclient = NotteClient(api_key=os.getenv(\"NOTTE_API_KEY\"))\n\nwith client.Session(open_viewer=True) as session:\n    agent = client.Agent(session=session, reasoning_model='gemini\u002Fgemini-2.5-flash', max_steps=30)\n    response = agent.run(task=\"doom scroll cat memes on google images\")\n```\n\n> ✅ 提示：从本地模式切换到 SDK 模式只需替换导入语句和前缀（`notte` → `client`），代码结构几乎无需改动。\n\n---\n\n现在你已准备好使用 Notte 构建可靠的 Web 自动化 Agent！更多高级功能（结构化输出、凭证保险库、数字人格、混合工作流等）请参考官方文档。","某电商运营团队需要每日从数十个竞品网站自动抓取最新价格、库存状态及促销信息，并整理成结构化报表。\n\n### 没有 notte 时\n- **维护成本极高**：传统爬虫脚本依赖固定的 HTML 选择器，一旦目标网站改版或调整布局，脚本立即失效，需人工频繁修复代码。\n- **反爬对抗困难**：面对验证码、IP 封锁及指纹检测，团队需自行搭建复杂的代理池和绕过方案，开发周期长且稳定性差。\n- **数据清洗繁琐**：抓取到的非结构化文本需要额外编写逻辑进行清洗和格式化，容易出错且难以统一输出标准。\n- **混合流程割裂**：无法灵活结合确定性操作（如登录）与智能决策（如识别动态促销规则），导致自动化链条断裂。\n\n### 使用 notte 后\n- **智能适应变化**：利用 AI 代理理解自然语言指令，即使网页结构微调，notte 也能自主定位元素，大幅减少因网站改版导致的维护工作。\n- **开箱即用的隐身能力**：直接调用 notte 提供的隐形浏览器会话，内置验证码解决、代理轮换及反检测功能，无需重复造轮子。\n- **原生结构化输出**：通过 Pydantic 模型定义需求，notte 直接返回标准的 JSON 数据，省去了后续清洗步骤，确保数据格式精准一致。\n- **混合工作流降本增效**：将固定的登录步骤写成脚本，复杂的促销判断交给 AI，这种“脚本+AI\"的混合模式在提升可靠性的同时降低了 50% 以上的 Token 成本。\n\nnotte 让团队从繁琐的爬虫维护中解放出来，以更低成本和更高可靠性实现了大规模、自适应的网页自动化数据采集。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fnottelabs_notte_d8b4b1b3.png","nottelabs","Notte Labs","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fnottelabs_5430b48c.png","Building the agentic internet",null,"hello@notte.cc","nottecore","https:\u002F\u002Fwww.notte.cc\u002F","https:\u002F\u002Fgithub.com\u002Fnottelabs",[83,87,91,95],{"name":84,"color":85,"percentage":86},"Python","#3572A5",96.9,{"name":88,"color":89,"percentage":90},"JavaScript","#f1e05a",2.3,{"name":92,"color":93,"percentage":94},"Shell","#89e051",0.6,{"name":96,"color":97,"percentage":98},"Makefile","#427819",0.2,1937,178,"2026-04-19T08:24:39","NOASSERTION","未说明",{"notes":105,"python":106,"dependencies":107},"该工具主要作为 Web 自动化代理框架，依赖 Playwright 兼容的浏览器引擎（通过 patchright 安装 Chromium）。运行本地模式时需自备 LLM API 密钥；推荐使用官方 API 服务以获取隐身浏览器会话、验证码自动解决及代理等功能。未提及具体的 GPU 或大内存需求，主要消耗取决于所调用的外部 LLM 服务及浏览器实例数量。","3.11+",[65,108,109,110,111],"patchright","pydantic","python-dotenv","notte-sdk",[14,36,13,27,15],[114,115,116,117,118,119,120,121],"agent","ai","anthropic","automation","browser","llm","openai","web","2026-03-27T02:49:30.150509","2026-04-20T16:49:31.702350",[125,130,135,140,145,150],{"id":126,"question_zh":127,"answer_zh":128,"source_url":129},45129,"遇到 'InvalidAPIKeyError: Invalid API key for gemini\u002Fgemini-2.5-flash' 错误该怎么办？","如果您使用 Google AI Studio 生成的 API 密钥遇到此错误，建议直接联系维护团队获取帮助。您可以预约通话（https:\u002F\u002Fcal.com\u002Fpintoa\u002F15mins）或加入官方 Slack 社区（https:\u002F\u002Fjoin.slack.com\u002Ft\u002Fnottelabs-dev\u002Fshared_invite\u002Fzt-39a8n6hr9-d_BG7RNfytimSpVo5H03mA），以便技术人员协助排查具体的权限配置或密钥有效性问题。","https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fissues\u002F545",{"id":131,"question_zh":132,"answer_zh":133,"source_url":134},45130,"当项目中已预安装 `uvloop` 时，导入 `notte_sdk` 抛出 'ValueError: Can't patch loop of type uvloop.Loop' 异常如何解决？","这是因为 `notte_sdk` 默认尝试应用 `nest_asyncio`，但这与 `uvloop` 冲突。解决方法是在导入 `notte_sdk` 之前设置环境变量 `NOTTE_ENABLE_NEST_ASYNCIO` 为 `false`。代码示例如下：\n\nimport os\nos.environ['NOTTE_ENABLE_NEST_ASYNCIO'] = 'false'\nfrom notte_sdk import NotteClient\n\n注意：不要使用 `NOTTE_DISABLE_NEST_ASYNCIO`，该变量无效。","https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fissues\u002F509",{"id":136,"question_zh":137,"answer_zh":138,"source_url":139},45131,"Notte 是否支持 Node.js SDK？","是的，Notte 已经发布了 Node.js SDK。您可以通过 npm 安装使用：\nnpm install notte-sdk\n\n该 SDK 旨在镜像 Python SDK 的 API 表面，并作为包发布在 npm 上。","https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fissues\u002F167",{"id":141,"question_zh":142,"answer_zh":143,"source_url":144},45132,"如何让 Agent 将执行结果通过电子邮件发送？","目前官方尚未内置直接的“一键发送邮件”功能，但可以通过以下两种方式实现：\n1. **外部模块方式（推荐）**：在代码中获取 Agent 结果后，使用独立的邮件客户端发送。\n   result = agent(task=task, url=url)\n   if result.success:\n       EmailClient(server_url).send(recipient_email=\"xyz@mydomain.com\", content=result.answer)\n2. **自定义配置方式**：社区用户建议在环境变量或配置文件中定义 `EmailConfig`（包含 SMTP 服务器、端口、发件人信息等），并开发一个继承自 `BaseAgent` 的 `EmailAgent` 包装器来自动处理发送逻辑。这需要用户自行实现相关的通知器类（Notifier）。","https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fissues\u002F131",{"id":146,"question_zh":147,"answer_zh":148,"source_url":149},45133,"遇到 'Too many actions executed in the current session' 或持续的 '500 Internal' 错误导致会话中断怎么办？","当遇到因动作数量限制（如超过 20 个动作）或服务器端错误（如 Anthropic 过载）导致的会话强制重置时，简单的重试通常无效。目前的解决方案是检测到此类错误后，在客户端代码中主动启动一个新的会话（New Session）来继续任务。虽然这可能会消耗额外的积分，但在 API 返回明确指示“请开始新会话”时，这是恢复执行的必要步骤。建议监控此类错误频率以优化任务流程。","https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fissues\u002F85",{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},45134,"Notte 是否支持读取 PDF 文件内容？","社区正在积极开发对 PDF 阅读的支持。目前的实现方案是通过集成 `docling` 等工具，允许 Agent 从 PDF 标签页中提取内容。该功能可以通过扩展 Session 配置或在 Agent 集成中添加自定义动作（如 `read_pdf`）来实现。您可以关注相关的 Pull Request（如 #268）以获取最新的代码实现和使用示例。","https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fissues\u002F235",[156,161,166,171,176,181,186,191,196,201,206,211,216,221,226,231,236,241,246,251],{"id":157,"version":158,"summary_zh":159,"released_at":160},359989,"v1.8.12","\u003C!-- 使用 .github\u002Frelease.yml 中的配置在 main 分支生成的发布说明 -->\n\n## 变更内容\n### 变更内容\n* docs: 更新回放 API，使其使用包含预签名 URL 的 ReplayResponse，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F753 中完成\n* 将请求来源名称由 sdk 重命名为 sdk-python，由 @andreakiro 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F755 中完成\n* 默认启用文件存储功能，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F757 中完成\n* feat\u002Fremove credit usage cols：移除信用用量列，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F759 中完成\n* feat: 会话中引入 Vault 功能，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F682 中完成\n* 增加代理步骤数，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F760 中完成\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.8.10...v1.8.12","2026-04-11T18:41:40",{"id":162,"version":163,"summary_zh":164,"released_at":165},359990,"v1.8.11","### 变更内容\n\n* 修复：notte-core 和 notte-sdk 在 1.8.10 版本中的发布不一致问题\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.8.9...v1.8.11","2026-03-30T10:08:28",{"id":167,"version":168,"summary_zh":169,"released_at":170},359991,"v1.8.10","### 变更内容\n\n* 修复：将展开的 Gemini 模式属性标记为可空，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F746 中完成\n* 功能：为 OpenRouter 模型添加缺失的 LlmProvider 条目，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F747 中完成\n* 功能：更新回放功能，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F748 中完成\n* 修复：更新测试用例，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F750 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.8.9...v1.8.10","2026-03-30T09:59:43",{"id":172,"version":173,"summary_zh":174,"released_at":175},359992,"v1.8.9","\u003C!-- 使用 .github\u002Frelease.yml 中的配置在 main 分支生成的发布说明 -->\n\n## 变更内容\n### 变更内容\n* 修复：如果处于无头模式且设置了 cdp_url，则抛出异常，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F743 中完成\n* 修复：在模式转换中扩展 propertyNames 和 additionalProperties，由 @andreakiro 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F745 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.8.8...v1.8.9","2026-03-20T22:19:07",{"id":177,"version":178,"summary_zh":179,"released_at":180},359993,"v1.8.8","### 变更内容\n\n* 功能：由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F738 中引入的三阶段文档 CI 流水线（语法检查 → 类型检查 → 执行）\n* 依赖更新：@dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F672 中将 `uv` 组织下的 9 个依赖升级到最新版本\n* 修复：由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F740 中移除了 `agent.run` 中的 `asyncio`\n\n## 新贡献者\n* @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F672 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.8.7...v1.8.8","2026-03-16T16:46:04",{"id":182,"version":183,"summary_zh":184,"released_at":185},360002,"v1.7.18","\u003C!-- Release notes generated using configuration in .github\u002Frelease.yml at main -->\r\n\r\n## What's Changed\r\n### What's Changed\r\n* add more session info by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F642\r\n* Feat\u002Fadd playgright tips by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F643\r\n* update readme synthax by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F644\r\n* Feat\u002Frename workflow functions by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F645\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.7.17...v1.7.18","2026-01-07T11:12:08",{"id":187,"version":188,"summary_zh":189,"released_at":190},360003,"v1.7.17","\u003C!-- Release notes generated using configuration in .github\u002Frelease.yml at main -->\r\n\r\n## What's Changed\r\n### What's Changed\r\n* Bugfix\u002Fcorrect error on scrape by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F641\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.7.16...v1.7.17","2025-12-24T15:05:21",{"id":192,"version":193,"summary_zh":194,"released_at":195},360004,"v1.7.16","\u003C!-- Release notes generated using configuration in .github\u002Frelease.yml at main -->\r\n\r\n## What's Changed\r\n### What's Changed\r\n* fix: update docs examples to use kwargs instead of dicts by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F632\r\n* chore: another doc update by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F633\r\n* feat: could it be another docs change? by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F634\r\n* update product pricing by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F635\r\n* [scraping pipe] add warnings and fix use_link_placeholder bug by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F636\r\n* feat: scraping selector by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F637\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.7.15...v1.7.16","2025-12-24T11:57:54",{"id":197,"version":198,"summary_zh":199,"released_at":200},360005,"v1.7.15","### What's Changed\r\n* Feat: typing hints for execute by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F629\r\n* fix: remove catch all action type by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F631\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.7.14...v1.7.15","2025-12-15T14:38:06",{"id":202,"version":203,"summary_zh":204,"released_at":205},360006,"v1.7.14","### What's Changed\r\n\r\n* fix cicd errors by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F625\r\n* fix: default to headless=True for console, headless=False for lib by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F626\r\n* restore correct cache cicd by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F627\r\n* chore: set default timeout to 15 minutes by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F628\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.7.13...v1.7.14","2025-12-12T09:22:28",{"id":207,"version":208,"summary_zh":209,"released_at":210},360007,"v1.7.13","### What's Changed\r\n* fix: default to headless by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F623\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.7.12...v1.7.13","2025-11-20T11:01:27",{"id":212,"version":213,"summary_zh":214,"released_at":215},360008,"v1.7.12","## Changes\r\n\r\n* Pregreen cicd by @andreakiro in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F617\r\n* add session requests in session by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F619\r\n* Backport ast fix by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F620\r\n* feat: minor changes by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F622\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.7.11...v1.7.12","2025-11-20T09:44:32",{"id":217,"version":218,"summary_zh":219,"released_at":220},359994,"v1.8.7","### 变更内容\n\n* 添加每周发布版本 wk09，由 @andreakiro 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F722 中完成\n* 修复：一次性评估所有输入，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F723 中完成\n* 修复：重试 Vault 加密操作，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F724 中完成\n* 修复：OpenTelemetry 默认服务名称，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F725 和 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F726 中完成\n* 新增功能：在 AgentFallback 构造函数中添加 response_format 参数，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F727 中完成\n* 修复 SDK 在执行失败时异常消息不匹配的问题，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F720 中完成\n* 修复 CI\u002FCD 问题，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F733 中完成\n* 移除 BatchAgent 和 BatchRemoteAgent，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F729 中完成\n* 修复：移除 arun，改用同步方式，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F732 中完成\n* 新增功能：添加额外的 HTTP 头信息，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F735 中完成\n* 修复：模型提供商相关问题，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F734 中完成\n* 移除 Firefox 支持，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F737 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.8.6...v1.8.7","2026-03-11T13:23:52",{"id":222,"version":223,"summary_zh":224,"released_at":225},359995,"v1.8.6","\u003C!-- 使用 .github\u002Frelease.yml 中的配置生成的发布说明 -->\n\n## 变更内容\n### 变更内容\n* @andreakiro 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F710 中为文档添加了大规模集成\n* 修复：@leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F713 中修复了 JavaScript 和 LLM 解析问题\n* @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F712 中更新了 SDK 文档并增加了警告提示\n* @andreakiro 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F714 中为文档添加了 Stagehand 集成\n* 文档：@sam-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F707 中添加了 Steel 集成\n* 功能\u002F在执行结果中添加时间戳：@giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F715 中实现\n* 功能：在执行结果中添加 TimedSpan 跟踪：@giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F716 中实现\n* 文档\u002F第 8 周：@andreakiro 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F717 中完成\n* 修复\u002FCI\u002FCD 问题：@giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F718 中修复\n* 修复 CI\u002FCD 问题：@giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F719 中修复\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.8.5...v1.8.6","2026-02-23T15:12:25",{"id":227,"version":228,"summary_zh":229,"released_at":230},359996,"v1.8.5","\u003C!-- 使用 .github\u002Frelease.yml 中的配置生成的发布说明 -->\n\n## 变更内容\n### 变更内容\n* 修复 sniptest 生成问题，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F701 中完成\n* 修复：不禁用扩展程序，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F702 中完成\n* 修复：允许使用 Chrome 解决验证码，由 @leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F703 中完成\n* Notte-SDK 修复重新抛出的问题，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F704 中完成\n* 修复 SDK 中的抓取 bug，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F705 中完成\n* 添加 Web 机器人认证功能，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F706 中完成\n* 功能：添加 Web 机器人文档，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F708 中完成\n* 移除符号链接，由 @giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F709 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.8.4...v1.8.5","2026-02-11T15:12:53",{"id":232,"version":233,"summary_zh":234,"released_at":235},359997,"v1.8.4","\u003C!-- 使用 .github\u002Frelease.yml 中的配置在 main 分支生成的发布说明 -->\n\n## 变更内容\n### 变更内容\n* 功能：添加在抓取失败时抛出异常 —— 由 giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F684 中实现\n* 改进观察功能，支持指令类型 —— 由 giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F686 中实现\n* 修复：允许 Cookie 模型中包含额外字段，以兼容 Chrome CDP —— 由 giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F687 中实现\n* 切换至 Gemini 2.5 —— 由 leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F688 中实现\n* 改进文件存储 API —— 由 giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F689 中实现\n* 简化分区键类型 —— 由 giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F691 中实现\n* 功能：评估 JavaScript 操作 —— 由 leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F690 中实现\n* 修复：允许在 fillAction 中使用密码字段 —— 由 leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F679 中实现\n* 修复：Gemini 的 Schema —— 由 leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F693 中实现\n* Cookies 排除非 Playwright 字段 —— 由 giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F694 中实现\n* 修复：使 SDK 节点选择器的默认值更友好 —— 由 leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F695 中实现\n* 修复：Firefox 的 CDP 截图问题 —— 由 leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F696 中实现\n* 添加默认文件选择器 —— 由 giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F697 中实现\n* CI\u002FCD：修复 CI\u002FCD 测试 —— 由 andreakiro 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F699 中实现\n* 增加 OpenRouter 支持 —— 由 giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F700 中实现\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.8.3...v1.8.4","2026-02-09T09:43:50",{"id":237,"version":238,"summary_zh":239,"released_at":240},359998,"v1.8.3","\u003C!-- 使用 .github\u002Frelease.yml 中的配置在 main 分支生成的发布说明 -->\n\n## 变更内容\n### 变更内容\n* 功能：由 leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F675 中实现，降低抓取\u002F观测的延迟\n* 修复：由 leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F677 中实现，支持使用选择器抓取 iframe 内容\n* 功能：由 leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F676 中实现，在轨迹中添加会话信息\n* 新增：由 giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F678 中实现，在响应中添加 viewer_url 字段\n* 修复：由 leo-notte 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F680 中实现，尝试使用 CDP 截图功能\n* 文档\u002F新增配置文件：由 andreakiro 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F681 中完成\n* 新增：由 giordano-lucas 在 https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F683 中实现，添加持久化域名配置文件\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.8.1...v1.8.3","2026-01-30T23:17:52",{"id":242,"version":243,"summary_zh":244,"released_at":245},359999,"v1.8.1","### What's Changed\r\n\r\n* docs v2 by @andreakiro in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F671\r\n* add changelog to docs by @andreakiro in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F673\r\n* fix: allow override response_format \u002F temperature, add kimi 2.5 by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F674\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.8.0...v1.8.1","2026-01-27T13:29:11",{"id":247,"version":248,"summary_zh":249,"released_at":250},360000,"v1.8.0","\u003C!-- Release notes generated using configuration in .github\u002Frelease.yml at main -->\r\n\r\n## What's Changed\r\n### What's Changed\r\n* add explicit max_duration and idle_timeout parameters by @andreakiro in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F624\r\n* add chrome turbo by @andreakiro in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F653\r\n* add browser profile exposure in sdk by @andreakiro in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F651\r\n* shared cache dir by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F652\r\n* use staging update cicd by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F655\r\n* add configurable timeout parameter to session.execute() by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F654\r\n* fix reademe tests by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F658\r\n* [page execute] reduce short timeouts + add conditional tab-change by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F657\r\n* retry on other session failures by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F659\r\n* move webvoyager benchmark gh worklfow on dispatch by @andreakiro in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F660\r\n* add cdp url in session_response by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F661\r\n* use cdp url from sessino response by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F662\r\n* Feat\u002Frename workflow functions api by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F664\r\n* change readme example by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F666\r\n* remove examples by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F667\r\n* Add comprehensive tests for simplified proxy API by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F669\r\n* bugfix\u002F [workflow|function] allow workflow_run_id in run by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F670\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.7.19...v1.8.0","2026-01-26T14:01:20",{"id":252,"version":253,"summary_zh":254,"released_at":255},360001,"v1.7.19","### What's Changed\r\n\r\n* Bugfix\u002Freadonly fs bug by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F646\r\n* move to async file operations by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F648\r\n* use home dir for cache by @giordano-lucas in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F649\r\n* fix: agent fallback action parsing by @leo-notte in https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fpull\u002F650\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fnottelabs\u002Fnotte\u002Fcompare\u002Fv1.7.18...v1.7.19","2026-01-08T16:58:00"]