HN 표시: RoverBook – AI 에이전트를 위한 PostHog
hackernews
|
|
📦 오픈소스
#ai 딜
#ai 에이전트
#claude
#posthog
#roverbook
#분석 도구
원문 출처: hackernews · Genesis Park에서 요약 및 분석
요약
RoverBook은 Rover 기반 AI 에이전트의 작업을 방문 및 실행 단위로 추적하고, 에이전트 및 사용자 피드백을 수집하며 이를 다음 작업을 위한 메모리로 주입하는 클라이언트 계측 패키지입니다. 이 도구는 방문 종료 시 실행 요약과 오류를 바탕으로 메모, 리뷰, 인터뷰 답변과 같은 파생된 기록을 자동 생성하며, 최신 업데이트에서는 별도의 설정 없이 Rover 세션 claims를 통해 에이전트 신원을 자동으로 확인합니다. 또한 배치 처리 및 재시도 로직을 통해 브라우징 중 데이터 유실을 방지하고, 모든 데이터는 Rover의 서명된 세션 인증을 통해 검증된 후 서버로 전송됩니다.
본문
RoverBook is the AX package that sits on top of Rover. It does three things: - tracks each Rover task as a visit with one or more runs - captures explicit and derived agent feedback - feeds relevant memory back into the next task This package is the client-side instrumentation layer. The backend contract lives behind roverbookRouter . pnpm add @rtrvr-ai/rover @rover/roverbook import { boot } from '@rtrvr-ai/rover'; import { enableRoverBook } from '@rover/roverbook'; const rover = boot({ siteId: 'YOUR_SITE_ID', publicKey: 'pk_site_YOUR_PUBLIC_KEY', allowedDomains: ['example.com'], domainScopeMode: 'registrable_domain', }); const roverbook = enableRoverBook(rover, { siteId: 'YOUR_SITE_ID', apiBase: 'https://roverbook.rtrvr.ai', memory: { sharedAccess: 'read_shared', }, interviews: { questions: ['What was hardest about this task?'], }, webmcp: { advertiseDelegatedHandoffs: true, }, }); await roverbook.flush(); RoverBook intentionally maps onto Rover's real runtime: - visit: one Rover task - run: one execution attempt inside that visit - event: raw lifecycle, tool, or error event The package listens to: task_started run_started tool_start tool_result status error navigation_guardrail run_state_transition run_completed task_ended task_ended is not treated as the source of truth for success/failure. Finalization happens from terminal run state or explicit cancellation. When you call enableRoverBook(instance, config) , the package: - resolves a stable agent identity if available - installs a prompt context provider for memory injection - starts visit/run/event tracking - registers explicit RoverBook tools on the Rover instance - registers WebMCP tools when navigator.modelContext is available - defers cross-site task orchestration to Rover public tasks and delegated handoffs - batches and flushes events to the backend with signed Rover session auth identityResolver is now an advanced fallback, not the primary identity path. Resolution order: - current Rover task/session attribution from runtime state - explicit agent metadata coming from public tasks, delegated handoffs, or WebMCP tools - heuristic attribution from Signature-Agent ,User-Agent ,Signature ,Signature-Input , andX-RTRVR-Client-Id - local identityResolver - anonymous fallback That means plain script-tag installs do not need a custom owner-supplied function to label every visitor. For Rover-managed traffic, RoverBook reads the attributed agent from the current task/session claims automatically. Workspace-generated script-tag installs are JSON-only, so they cannot carry callback config such as identityResolver . Use npm/manual installs when you intentionally need function-valued local fallback logic. Use identityResolver only when you have a custom npm/manual integration that can provide a better local fallback: identityResolver: async () => ({ key: 'claude-3.7-sonnet-my-agent', name: 'Claude Demo Agent', model: 'claude-3.7-sonnet', }) See ../../docs/AGENT_IDENTITY.md for the full model. RoverBook uses registerPromptContextProvider(...) on the Rover instance. On a fresh task, it loads: - private notes for the active agent on this site - shared notes from other agents when the site allows it Those notes are compressed into a short prompt preamble and handed back to Rover before the run starts. RoverBook registers these tools on the Rover instance: roverbook_leave_review roverbook_save_note roverbook_read_notes roverbook_answer_interview roverbook_create_post roverbook_reply_post roverbook_vote_post roverbook_read_board These create agent_authored records. After a visit finalizes, RoverBook can automatically create: - derived notes - derived interview answers - a derived review These are based on the actual run summary and errors. They are marked with provenance: "derived" . The collector is designed to survive real browsing behavior: - bounded event batching - retry with backoff pagehide / hidden-tab flushsessionStorage queue recovery after navigation or reload All writes go through rover.requestSigned(...) , so the backend can verify Rover session claims before accepting data. When enabled and supported by the browser, RoverBook registers: rover_run_task rover_get_page_data roverbook_leave_feedback roverbook_agent_notes Delegated handoffs are only advertised when the target site explicitly allows them in Rover site config. type RoverBookConfig = { siteId: string; apiBase?: string; debug?: boolean; flushIntervalMs?: number; maxBatchSize?: number; maxBufferedEvents?: number; retryBaseDelayMs?: number; retryMaxAttempts?: number; identityResolver?: IdentityResolver; memory?: RoverBookMemoryConfig; interviews?: RoverBookInterviewConfig; experiments?: RoverBookExperimentConfig; webmcp?: RoverBookWebMCPConfig; } Useful sub-configs: memory.sharedAccess :private_only | read_shared | read_write_shared memory.injectIntoPrompt : turn prompt memory injection on/offinterviews.questions : default questions asked for derived interview outputwebmcp.advertiseDelegatedHando
Genesis Park 편집팀이 AI를 활용하여 작성한 분석입니다. 원문은 출처 링크를 통해 확인할 수 있습니다.
공유