autobrowse

3周前发布 7 0 0 0

browserbase/skills#autobrowse

Skill 安装

多 Agent 安装
npx skills add https://github.com/browserbase/skills --skill autobrowse

使用 npx skills 快速安装,支持将 Skill 添加到多个兼容的 AI Agent。

Skill 调研报告

browserbase/skills#autobrowse

Skill 更新日志

版本列表
无版本号
harden(autobrowse): restrict trace artifacts to owner-only permissions (#139) Autobrowse trace artifacts (trace.json, messages.json, summary.md, and screenshots) can contain cookies, auth headers, bearer tokens, passwords from form POSTs, private URLs, and screenshots of authenticated pages. Previously these were written with fs.writeFileSync / fs.mkdirSync using default permissions, which inherit the process umask (typically 0644 files / 0755 dirs). On a shared host -- CI runners, shared dev boxes, or multi-tenant containers -- that leaves the trace tree readable by other local users and processes. This restricts trace artifacts to the owner: - run dir + screenshots/ created with mode 0700; the run dir is also chmod'd explicitly since mkdirSync's mode only applies to dirs it creates (a pre-existing parent could otherwise stay traversable). - trace.json / messages.json / summary.md written with mode 0600. - lockDownTrace() sweeps the run dir at the end to cover files written by subprocesses (screenshots from the browse CLI, .o11y artifacts) whose creation mode we don't control. Symlinks (the `latest` link) are skipped. 0700/0600 are unaffected by the process umask, so the result is consistent regardless of host configuration. The owner -- the same user the self-improvement loop runs as -- retains full read/write, so the loop is unaffected; only cross-user access is removed. Co-authored-by: Claude Opus 4.8 (1M context)
无版本号
[STG-2254] chore: bring merged skills up to agent-skills standards (#135) * chore: bring merged skills up to agent-skills standards - Add MIT LICENSE.txt to browser-to-api, company-research, event-prospecting - Normalize autobrowse LICENSE year to 2026 and license frontmatter to MIT - Add license/compatibility/allowed-tools frontmatter where missing (agent-experience, cookie-sync, fetch, functions, safe-browser, search) - README: drop stale site-debugger/bb-usage rows, add agent-experience, autobrowse, browser-to-api, company-research, event-prospecting rows - Remove banned .env.example from autobrowse (update README setup snippet) Co-Authored-By: Claude Fable 5 * fix: drop BROWSERBASE_PROJECT_ID from autobrowse setup line Addresses review feedback from shrey150 --------- Co-authored-by: Claude Fable 5
无版本号
feat(autobrowse): scripts/codegen.mjs — multi-framework runnable-script generator (#125) * feat(autobrowse): scripts/codegen.mjs — multi-framework runnable-script generator Migrates the script-generation apparatus from browse.sh's sandbox prompt into autobrowse itself, so any caller (browse.sh, a developer using autobrowse standalone, future apps) can convert a converged trace into a runnable script with one CLI invocation. What this PR adds: scripts/codegen.mjs orchestrator (~340 lines) codegen/prompts/playwright.md framework-specific system prompt codegen/prompts/stagehand.md framework-specific system prompt codegen/scaffolds/{fw}/package.json pinned deps, self-contained codegen/scaffolds/{fw}/tsconfig.json standard ESM/strict codegen/runners/{fw}.mjs spawn npx tsx + parse JSON result references/playwright-cdp-bridge.md canonical CDP-attach patterns (moved from browse.sh) Pipeline per framework (see scripts/codegen.mjs header): 1. Build context from task.md + unified-events.jsonl + descriptors.ndjson + strategy.md + the framework's prompt template + the cdp-bridge doc. 2. Cache key over sha256(framework + prompt-version + task + trace + descriptors). Hit short-circuits with $0 cost. 3. Single Anthropic completion → emit . to the output dir. 4. Drop scaffold files (package.json, tsconfig) per framework. 5. If --verify: invoke the framework's runner against a fresh BB session. On failure, feed the error back into a rewrite call up to --max-retries times. 6. Emit one JSON line per framework on stdout. Non-zero exit if any selected framework failed. CLI surface: --task required --workspace default ./autobrowse --run default: newest passing run-NNN --frameworks default: playwright; builtins: playwright,stagehand --verify | --no-verify default: --verify --max-retries N default 2 --cache-dir / --out / --force / --dry-run / --cache-only / --model --prompt-template custom template for --frameworks=custom No new top-level deps (uses the @anthropic-ai/sdk that evaluate.mjs already imports). Smoke-tested with --help, --dry-run, --cache-only error paths. Companion change in browse.sh (separate PR): collapse the §4b `for target in playwright stagehand` bash loop and §5 SCRIPT_FLAGS construction into a single `codegen.mjs --frameworks $SKILL_FRAMEWORKS` call; delete prompts/playwright-cdp-bridge.md and src/lib/agent-runtime/ script-references.ts (the doc + bundling logic both live in autobrowse now); drop the playwright/stagehand/tsx/zod install block and the playwright-best-practices-skill clone from src/lib/dispatch.ts. Co-Authored-By: Claude Opus 4.7 (1M context) * fix(codegen): framework-tagged filenames in --out mode Without this, --out with multiple frameworks selected would have both writing to /.ts and overwriting each other. Fix: - Default (no --out): per-framework subdir, file named after the task (e.g. tasks/acme/playwright/acme.ts) — feels like a standalone project. - --out : flat, framework-named files (/playwright.ts + /stagehand.ts) — for callers like browse.sh that flatten everything into one upload-staging dir. Runners updated to take --script instead of --task (the basename is what codegen.mjs decides per the rule above). No interface change to codegen.mjs's CLI — same flags, same JSON output. Co-Authored-By: Claude Opus 4.7 (1M context) * fix(codegen): teach playwright prompt to use APIRequestContext for HTTP/RPC workflows Empirically across 13 non-browser-method skills tested, the agent's emit behavior is inconsistent: CLI (7/7) skipped codegen entirely — correct (CLI setup guides don't wrap into a script). MCP (5) 2 emitted, 3 skipped. Of the 2 that emitted: - packrift: used @playwright/test + APIRequestContext to drive the MCP JSON-RPC server (no browser). Genuinely valuable conformance test. - hiveround: emitted chromium.connectOverCDP + DOM scrape, ignoring the MCP method label entirely. fetch (8) 6 emitted; all 6 used the browser path even when fetch + cheerio could have done the job in 30 lines vs ~400. api (2) chess.com used Playwright-as-fetch (goto + JSON.parse(body) via residential proxy — correct for Cloudflare bypass). sfgov used a similar pattern. Both kept the browser session because they needed the proxy. The packrift case proves the agent CAN write API-RPC scripts via APIRequestContext — it just doesn't always pick that path. Refine playwright.md with an explicit "approach selection" section at the top that branches between API path and browser path based on: - recommended_method in task.md - whether the trace shows real DOM interaction vs HTTP-only calls - whether the data lives in client-rendered DOM vs HTTP response body API path uses `import { request, type APIRequestContext } from "playwright"` (playwright already in the scaffold; @playwright/test is NOT required — plain throw + Zod handles assertions/validation). Browser path is unchanged. Bump PROMPT_TEMPLATE_VERSION to "2" so the cache key invalidates and existing cached outputs don't shadow the refined prompt. stagehand.md untouched in this commit — Stagehand fundamentally needs a browser, so for HTTP-only workflows the right answer is "don't emit a Stagehand script at all", which needs a separate codegen.mjs change (allow runners to signal "not applicable"). Follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) * Revert "fix(codegen): teach playwright prompt to use APIRequestContext for HTTP/RPC workflows" This reverts commit aac0acc1733f5a2a7cc7b0104a6cf2e1c7474b88. * fix(codegen): address 6 PR #125 review threads Six findings from cursor + shubh24 on the codegen PR: 1. (HIGH / blocker) Rewrite verify uses wrong script name `verify(framework, outDir, TASK)` on the rewrite path passes the bare task slug; `verify()` then resolves it as a missing file basename (TASK lacks the .ts extension that scriptBasename carries). This silently disabled the verify→rewrite loop. Fix: pass scriptBasename on both the initial and retry call sites, matching the variable used to write the file at L375. 2. (MEDIUM) Cache hit allowed one extra rewrite On cache hit, `attempts` stayed at 0 through the first failed verify, so the loop condition `attempts < MAX_RETRIES + 1` allowed MAX_RETRIES+1 rewrites for cached runs vs MAX_RETRIES for uncached. --max-retries was therefore inconsistent. Initialize attempts to 1 on both paths so the bound matches. Update the result-object's `cached` flag accordingly: was `!!cached && attempts === 0` (now never true with the new init), now `!!cached && cost === 0` — same semantic ("no LLM call was made for this output"), now expressed via cost which is the load-bearing signal anyway. 3. (MEDIUM) Forced --run path unchecked `pickRun` returned any --run value without checking that `traces//` exists. Codegen would then proceed with empty trace/events/descriptors while logs reported the forced run id as if it were a real input. Add an fs.existsSync gate on FORCED_RUN and a distinct error message when the named dir is missing. 4. (LOW) `ranner_missing` typo Producer (L301) and consumer (L385) shared the misspelling, so the break-on-missing-runner path worked, but it was fragile — fix one without the other and the retry loop would silently stop stopping. Renamed both to `runner_missing`. 5. (DRY) Stagehand runner was 95% identical to Playwright runner Factored the shared spawn-tsx-and-parse-JSON logic into codegen/runners/lib/tsx-runner.mjs (runTsxTarget({label, extraEnv, installEnv, preflight})). The per-framework runners now hold only their genuine differences: - playwright.mjs: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 for install+run - stagehand.mjs: ANTHROPIC_API_KEY preflight check Net: ~120 lines collapsed to ~25 each + ~110 in the shared lib. 6. (REGRESSION fix) Scaffold versions had no env override browse.sh's old dispatch.ts used resolveVersion('PLAYWRIGHT_VERSION', …) / 'STAGEHAND_VERSION' / 'TSX_VERSION' / 'ZOD_VERSION' so a deployment could canary a new framework version without a code change. Moving the pins into autobrowse's scaffold/package.json as literals dropped that. Restore the knob: codegen.mjs now reads {PLAYWRIGHT,STAGEHAND,TSX,ZOD,DOTENV}_VERSION env vars (with a semver guard) and interpolates them into the scaffold via the existing template-interpolation pass. Defaults match the previous literals. Bump PROMPT_TEMPLATE_VERSION to "2" so any cached outputs from the buggy verify-loop path get re-emitted. Co-Authored-By: Claude Opus 4.7 (1M context) * fix(codegen): make scaffold `npm start` use generated script name When --out is set, emitted scripts are named .ts but scaffolded package.json hardcoded `tsx {{TASK}}.ts`, so standalone `npm start` in the out dir targeted a nonexistent file. Thread {{SCRIPT}} through dropScaffold and update both scaffolds to `tsx {{SCRIPT}}`. Co-Authored-By: Claude Opus 4.7 (1M context) * fix(codegen): merge package.json deps across frameworks in shared --out dir When --out is set and multiple frameworks share one outDir (browse.sh passes --frameworks playwright,stagehand --out ), framework #1 wrote package.json with its deps and verify ran npm install. Framework #2's dropScaffold hit `if exists(dst) continue` and silently skipped its package.json, so @browserbasehq/stagehand was never declared or installed. The runner's `skip install if node_modules exists` gate then skipped re-install, and verify died at `Cannot find package '@browserbasehq/stagehand'` before any browser work — burning all MAX_RETRIES on an unfixable error. Fix: - dropScaffold: when package.json already exists, deep-merge the scaffold's dependencies/devDependencies in instead of skipping. - tsx-runner: replace `!exists(node_modules)` gate with a sha256 stamp of package.json written under node_modules/.codegen-pkg-hash, so framework #2's merged deps trigger a re-install. Co-Authored-By: Claude Opus 4.7 (1M context) * fix(codegen): correct Stagehand prompt for the v3 API The Stagehand codegen prompt described the old connectOverCDP/attach pattern, so generated scripts failed verify against @browserbasehq/stagehand 3.4.0: - passed the Anthropic key as the top-level `apiKey` (which is the Browserbase key in v3), so session lookup 404'd with "Session not found" - bare `modelName: "claude-opus-4-5"` — v3 wants `model: { modelName: "anthropic/", apiKey }` (provider-prefixed) - `stagehand.page` / `page.extract()` — v3 uses `stagehand.context.pages()[0]` and `stagehand.extract(instruction, schema)` on the instance - REQUEST_RELEASE teardown — v3 owns the session, so use `stagehand.close()` Rewrite the prompt to teach the v3 own-session pattern. BROWSERBASE_API_KEY alone is sufficient (the project is inferred from the key; no projectId). Verified end-to-end: `codegen --frameworks playwright,stagehand --out --verify` now passes both frameworks on the first attempt against live Browserbase sessions (google-news task). Co-Authored-By: Claude Opus 4.8 (1M context) * fix(codegen): --cache-only must also short-circuit the rewrite loop Previously --cache-only only blocked generation on a cache miss; a cached script that failed verify would still enter the rewrite loop and call the Anthropic API, contradicting the documented "no LLM call" CI semantics. Bail out of the rewrite loop when CACHE_ONLY is set. Co-Authored-By: Claude Opus 4.7 (1M context) * fix(codegen): raise verify() timeout above runner worst case verify() spawned the runner with a 5min cap, but tsx-runner internally allows up to 3min for npm install + 5min for the tsx run (8min worst case). The parent could SIGTERM a healthy runner mid-script, leaving verify with no {passed:boolean} JSON line — codegen then treated the script as broken and burned a retry. Bump verify's cap to 10min so the parent always exceeds the child's bounded internals. Co-Authored-By: Claude Opus 4.7 (1M context) * fix(codegen): always set PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD on install In shared --out mode, framework #2 (e.g. stagehand) inherits playwright in its merged package.json via dropScaffold, so stagehand's install would trigger playwright's postinstall and try to fetch ~hundreds of MB of chromium — almost always blowing the 3min install budget and failing verify on a healthy script. Set PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 unconditionally in the install env (we always connectOverCDP, never need local browsers). Per-runner installEnv still wins via the spread order. Co-Authored-By: Claude Opus 4.7 (1M context) --------- Co-authored-by: Claude Opus 4.7 (1M context) Co-authored-by: shubh24
无版本号
autobrowse: add opt-in --browser-trace integration (#121) * autobrowse: add opt-in --browser-trace integration Wire the sibling browser-trace skill into the autobrowse loop behind a default-off --browser-trace flag. When set, each iteration pre-creates a Browserbase --keep-alive session, attaches bb-capture as a passive CDP observer, and runs evaluate.mjs with --connect-url so every inner browse call is rewritten to attach via --cdp $connectUrl --session autobrowse-main. browse stop is suppressed under trace mode so the named daemon survives the iteration. The --cdp attach mode is the key: --remote routes Network.*/Console.* events only to the driving client, so the trace observer sees nothing useful. --cdp gives the observer the full per-page firehose, matching the canonical pattern documented in browser-trace's SKILL.md. Default path is unchanged; --browser-trace implies --env remote. Co-Authored-By: Claude Opus 4.7 (1M context) * autobrowse: preflight browser-trace + teach cross-trace hypothesis - Add a fail-fast preflight in the traced-path block: if ${CLAUDE_SKILL_DIR}/../browser-trace/scripts/bb-capture.mjs is missing, bail with an install hint pointing at github.com/browserbase/skills. Prevents the harness from blowing up halfway through with "no such file or directory" on bb-capture.mjs. - Make explicit in "Read the trace" + "Form one hypothesis" that under --browser-trace there are now TWO complementary traces: trace.json (what the agent did, per turn) and cdp/summary.json (what the browser did, per page). Document the cross-reference pattern: find the failing page in cdp/summary.json, then jump back to trace.json for the turn whose command produced it. Hypotheses should cite both — "the click went through but /api/checkout returned 403" beats "the click failed." Co-Authored-By: Claude Opus 4.7 (1M context) * autobrowse: thread --browser-trace through multi-task sub-agents Closes the gap flagged in PR #121 review: /autobrowse --tasks a,b --browser-trace would silently fall back to the untraced path inside each spawned sub-agent because the sub-agent prompt template said only "Use --env " without mentioning --browser-trace. The sub-agent prompt now explicitly requires the traced-path loop block (pre-create session, bb-capture, --connect-url to evaluate.mjs, stop+ bisect, release) when the parent invocation passed --browser-trace. Co-Authored-By: Claude Opus 4.7 (1M context) * autobrowse: unified event log as primary --browser-trace artifact Per design feedback (Derek): the two-trace cross-reference UX from the prior commits puts friction on the outer agent. Replace it with a single time-ordered NDJSON stream that joins the agent's turn log (trace.json) and the browser-trace CDP firehose (cdp/raw.ndjson) into one source-tagged file the outer agent reads first each iteration. New: skills/autobrowse/scripts/unify-trace.mjs - Joins trace.json + cdp/raw.ndjson by wall-clock timestamp - Reuses bisect-cdp.mjs's monotonic→wall-clock conversion logic (anchor on first monotonic CDP timestamp + manifest.started_at) - Filters out noisy/redundant CDP methods (dataReceived, ExtraInfo, frame Started/Stopped Loading, executionContextCreated, ...) so the unified log stays scannable - Inline summary fields per browser-event family (url+status+mime for Network.*, level+text for Console.*, name for Page.lifecycle, etc.); full payloads remain in the cdp/ drill-down files - Annotates each browser row with page_id, derived by walking top-level Page.frameNavigated events in the same order bisect-cdp uses SKILL.md changes: - Traced-path block now invokes unify-trace.mjs after bisect-cdp - "Read the trace" section rewritten: unified-events.jsonl is the primary path; structured files (cdp/summary.json, trace.json, cdp/network/failed.jsonl, etc.) are documented as agent-consumable drill-downs for queries the stream doesn't naturally answer - "Form one hypothesis" updated: hypothesis must cite a specific line/timestamp in unified-events.jsonl or name the drill-down file Verified end-to-end on news.ycombinator.com → first story's article: 6 turns, $0.31, 126-event unified log (113 browser + 13 agent), strictly time-ordered, no leaked sessions. No changes to evaluate.mjs or browser-trace. Default path (no --browser-trace) is unchanged — no unify step runs. Co-Authored-By: Claude Opus 4.7 (1M context) * autobrowse: unique daemon name per session + MAX_TURNS env override Two small fixes surfaced by v3.1 verification: 1. Static bug: --browser-trace hardcoded the local browse-daemon name as "autobrowse-main". Two parallel evaluate.mjs invocations (SKILL.md Step-3 multi-task sub-agents) would collide on that socket. Derive a per-process daemon name from a sha1 hash of the connectUrl (autobrowse-) so each Browserbase session gets its own local daemon. Deterministic, no deps beyond node:crypto. 2. QOL: MAX_TURNS is now overridable via the MAX_TURNS env var (default 30). Useful for testing failure-first recovery without patching source. No effect on default invocations. Verification (v3.1, /tmp/autobrowse-eval-v2): - Part 1: joiner's page_id walk matches bisect-cdp exactly (no drift). - Part 2: SKIP_METHODS audit — Network.dataReceived + *ExtraInfo etc. are filtered correctly; ExtraInfo headers remain accessible via drill-down (cdp/raw.ndjson, query.mjs). Known limitation: header-based hypotheses need drill-down today. - Part 3: parallel-daemon contention fixed (this commit). Unit-level verified: different connectUrls → different daemon names. - Part 4: failure-first single-arm on httpbin-form-incomplete - iter 1 (MAX_TURNS=15, --browser-trace): max_turns failure at $0.38; agent burned 4 turns on verification checks (turns 11-14) before submit clicked at turn 15. POST went through (200 OK in unified log) but agent ran out of turns before reading response. - Manual outer-agent step: read unified-events.jsonl, cited specific events (POST line + 4 verification turns), wrote evidence-grounded strategy.md update telling iter 2 to skip the verification loop. - iter 2: 12 turns, $0.27, status=completed, echoed_custname matches. - Net: unified-log evidence drove a real recovery on a failure-first task. ~$0.65 total v3.1 spend. Co-Authored-By: Claude Opus 4.7 (1M context) * autobrowse: export O11Y_RUN_ID so browse CLI can emit descriptors Pair to the descriptor-capture change landing in the browse CLI: every page-driving browse call (click/fill/select/goto/wait/etc.) now side-channels a rich node descriptor to $O11Y_ROOT/$O11Y_RUN_ID/cdp/descriptors.ndjson when both env vars are set. The CLI was already gated on O11Y_ROOT — adding O11Y_RUN_ID lets it know which run subdirectory to write into without inferring from the most-recently-modified dir. Two lines change in the traced-path loop block: - export O11Y_RUN_ID="$RUN_ID" alongside O11Y_ROOT - documentation note on what descriptors.ndjson is and that the outer agent should skip it when reading the trace (it feeds downstream codegen, not hypothesis formation) No effect when --browser-trace is unset or when the CLI doesn't yet have the descriptor-capture utility — the new env var is harmless. Co-Authored-By: Claude Opus 4.7 (1M context) --------- Co-authored-by: Claude Opus 4.7 (1M context) Co-authored-by: ziruihao
无版本号
Update skills to use verified Browserbase sessions (#106)
无版本号
docs: rename bb/browse-cli references to unified browse CLI (#111) * docs: rename bb/browse-cli references to unified browse CLI The `@browserbasehq/cli` (bb) and `@browserbasehq/browse-cli` packages were merged into a single `browse` package (`npm install -g browse`). Update all skill docs, scripts, and examples to use the new command surface: - `bb fetch|search|sessions|projects|contexts|extensions` → `browse cloud ...` - `bb functions ...` → `browse functions ...` - `bb templates ...` → `browse templates ...` - `bb skills install` → `browse skills install` - `bb browse ` → top-level `browse ` (open, get, click, …) - `pnpm bb dev|publish` → `browse functions dev|publish` - `# bb call N/TOTAL` enforcement comments → `# browse call N/TOTAL` - `bbFetch`/`bbBrowseMarkdown` helpers in extract_page.mjs renamed and reworked to call the new `browse cloud fetch` / `browse get markdown` surface. - bb-capture.mjs / bb-finalize.mjs shell out to `browse cloud sessions ...` SDK variable names (`const bb = new Browserbase()`) and the `x-bb-api-key` HTTP header are untouched. Co-Authored-By: Claude Opus 4.7 (1M context) * fix: align browse command examples with 0.6 * docs: note deprecated context upload refresh * docs: clarify cdp flag usage in trace example * docs: rely on cdp daemon persistence in trace example * docs(browser-trace): drop redundant target flags on follow-up commands The browse daemon caches the target after the first command, so commands that follow `browse open --cdp 9222` (or `--remote --session "$SID"`) don't need to repeat the target flag. Addresses PR #111 review comments about `--cdp` repetition in EXAMPLES.md. Co-Authored-By: Claude Opus 4.7 (1M context) * docs: clarify cdp daemon behavior * fix(extract_page): drop redundant --local --headless on `browse get` The browse daemon caches the target after `browse open --local --headless`, so the follow-up `browse get markdown` call shouldn't repeat the mode flags. Matches the convention from skills/browser/SKILL.md ("put --local, --remote, --auto-connect, or --cdp on the first browser command") and the same fix Shrey applied to browser-trace in 5468e0e. Addresses the Cursor Bugbot finding on PR #111. Co-Authored-By: Claude Opus 4.7 (1M context) * docs: align browse lifecycle examples * docs: remove stale fill flag reference * docs: tighten browse skill migration wording * docs: clarify browse stop mode switching * docs: verify browse command caveats --------- Co-authored-by: Claude Opus 4.7 (1M context) Co-authored-by: Shrey Pandya
无版本号
docs(autobrowse): replace slusa-payment with amazon-add-to-cart in examples (#74) Co-authored-by: Claude Opus 4.7 (1M context)
无版本号
feat: autobrowse skill — self-improving browser automation (#71) * feat: add autobrowse skill — self-improving browser automation Auto-research loop for building reliable browser navigation skills. Inner agent browses the site, outer agent reads the trace and improves strategy.md. Repeat until it passes consistently. - SKILL.md: /autobrowse skill (single + parallel task modes via sub-agents) - scripts/evaluate.ts: inner agent harness (Anthropic API + browse CLI) - references/: example-task.md and example-skill.md templates - README, EXAMPLES, REFERENCE docs Co-Authored-By: Claude Sonnet 4.6 (1M context) * docs: replace example-skill.md with real graduated SF 311 skill 17 iterations, 3/3 consecutive passes, remote env. Shows real site-specific gotchas: named Browserbase sessions, ESRI map location, Verint form patterns, XPath vs ref tradeoffs. Co-Authored-By: Claude Sonnet 4.6 (1M context) * feat: sync SKILL.md with latest improvements - structured skill.md graduation template (not just copying strategy.md) - graduate at max iterations too, not just on pass rate - persistent session reports in reports/ with per-iteration cost table - richer sub-agent prompt with key learnings output - cost column in multi-task report table Co-Authored-By: Claude Sonnet 4.6 (1M context) * docs: sync example-skill.md with latest sf-311 skill - remove --session flags (skills must be portable, not session-coupled) - add Known Failure Point section (turn budget exhaustion pattern) - correct wait syntax docs (browse wait load / browse wait timeout N) - 22 iterations, updated gotchas order Co-Authored-By: Claude Sonnet 4.6 (1M context) * fix: address all 5 bugbot findings - [high] block shell metacharacters (;|&|`$()) to prevent injection bypass - [medium] fix npm evaluate script path: evaluate.ts → scripts/evaluate.ts - [low] fix tsconfig include: *.ts → scripts/**/*.ts - [low] lastAssistantText += (accumulate, not overwrite) - [low] remove unused deps: @browserbasehq/stagehand, zod Co-Authored-By: Claude Sonnet 4.6 (1M context) * fix autobrowse bugbot findings * fix autobrowse pricing and symlink handling * feat: add demo-video skill — Remotion launch video learnings Captures full pipeline from storytelling to render: - IDEA ENGINE narrative structure - Remotion gotchas (extrapolateLeft, staticFile, durationInFrames) - Browserbase brand colors and typography - UI mocking patterns with real reference video analysis - Audio production (background, SFX, ffmpeg generation) - Content authenticity (real failures vs invented ones) - Render quality settings (CRF 8 for Twitter masters) Co-Authored-By: Claude Sonnet 4.6 (1M context) * Revert "feat: add demo-video skill — Remotion launch video learnings" This reverts commit 07e7794e3252aec4ee9ce1ac16de81e2e373c2f6. * refactor(autobrowse): convert evaluate.ts to .mjs, follow agentskills.io conventions - Converted scripts/evaluate.ts → scripts/evaluate.mjs (plain ESM JavaScript) - Removed tsx, typescript, @types/node devDependencies - Removed tsconfig.json (no longer needed) - Added --help flag with full usage documentation - Moved diagnostics to stderr, structured JSON result to stdout - Added license field to SKILL.md frontmatter - Updated all references from tsx/evaluate.ts to node/evaluate.mjs Co-Authored-By: Claude Opus 4.6 (1M context) * feat(autobrowse): graduate skills to ~/.claude/skills/ instead of git Graduated skills now install as Claude Code slash commands at ~/.claude/skills//SKILL.md instead of committing a local skill.md file. Removed all git commit references from the loop — the working directory (tasks/, traces/, strategy.md) doesn't need to be a git repo. Co-Authored-By: Claude Opus 4.6 (1M context) * fix(autobrowse): correct ref format, add workspace flag, fail-fast on missing key Three fixes surfaced while running the google-flights task from an empty strategy baseline: 1. Ref format: the inner agent was told to click by @ref (e.g. @0-5), but browse snapshot emits refs as [X-Y] (e.g. [0-5], [2-147]). The agent hallucinated @-refs which the CLI silently accepted as no-ops, burning 30 turns without useful interaction. Updated both the TOOLS description and the system prompt to document [X-Y] format with examples, and added a "never invent refs" rule. 2. Ref counter: the live stderr log and summary writer counted @ chars in snapshot output, which always returned 0 for real snapshots. Switched to /\[\d+-\d+\]/g so outer agents can see the real ref count. 3. Workspace + key UX: added --workspace flag (default ./autobrowse) so tasks/, traces/, and reports/ land in CWD instead of under ~/.claude/skills/autobrowse/. This avoids the permission friction of writing inside Claude's home dir during training. Added ensureApiKey() that fails fast with a clear setup message when ANTHROPIC_API_KEY is missing — no more outer-agent key-hunting paths. SKILL.md updated to document natural-language invocation (URL drops and free-form goals, not just --task ), the new CWD-based workspace flow, and the new ref format / wait semantics. Verified on google-flights: empty-strategy baseline now sees 1157 real refs and drives the form correctly (previously 0 refs, total blindness). With a 9-line strategy, completes in 5 turns / \$0.16. Co-Authored-By: Claude Opus 4.7 (1M context) * fix(autobrowse): address bugbot findings on evaluate.mjs and SKILL.md - Guard lastAssistantText overwrite: only update when the turn produced text, so a final tool_use-only response doesn't wipe prior output (bugbot 3061376570). - Drop redundant reasoningText; the two variables held identical values (bugbot 3061376573). - Reorder tool-result branches: check error before isSnapshot/isScreenshot in both live log and summary writer, so a failed snapshot reports as error, not as "0 refs" (bugbot 3061606988). - Track completion via explicit flag set on end_turn / no-tool-use, not via `turn < MAX_TURNS`: a clean finish on turn 30 was misreported as max_turns (bugbot 3065604864). - Replace personal home path with generic placeholder in the sub-agent prompt template (bugbot 3118916022). Co-Authored-By: Claude Opus 4.7 (1M context) * fix(autobrowse): align wait guidance with browse cli * fix(autobrowse): mark truncated runs incomplete --------- Co-authored-by: Claude Sonnet 4.6 (1M context) Co-authored-by: Shrey Pandya

暂无评论

none
暂无评论...