{"repo":"acoyfellow/unsurf","free":true,"listed":false,"github":"https://github.com/acoyfellow/unsurf","clone":"git clone https://github.com/acoyfellow/unsurf.git","description":"Turn any website into a typed API","language":"HTML","stars":21,"topics":["api","cloudflare-workers","effect-ts","mcp","openapi","typescript","web-scraping"],"license":"MIT","category":"api-integrations-sdks","readme_excerpt":"unsurf Scout a website, get back a typed spec, run the spec against the live page, get back evidence it worked. Tools and gates share one schema. Also ships three composable skills for the agent loop: record drives a real browser and uploads a grant-gated mp4 + step trace (private by default as of 0.4.0; see privacy). observeVideo watches a recording and answers questions about it. loop closes the cycle: record → observe → refine → record, until a North Star question returns yes. Browse the Directory → · See a live trace → --- The spec proof-spec.v0.json — three usage modes: - tool — act[] only (click / fill / select / check / submit / read) - gate — observe[] + assert[] - proof — all three plus loop Shared with gateproof — same file in both repos. Types: src/domain/ProofSpec.ts . Full reference: experiments/ proof-spec-v0/SPEC.md . Frozen at v0. Legacy: tool-spec.v0.json in experiments/CONTRACT.md is a strict subset. The executor src/services/Plan.ts : - runSpec(spec, args) — auto-picks based on spec shape - invokeSpec(spec, args) — runs act[] - verifySpec(spec) — runs observe + assert only - runLoopSpec(spec, args) — honors spec.loop.maxIterations (clamped to 1 for risk: high ) risk is computed from act[] by RiskLabeler , never from the synthesizer. An adversary can't downgrade it by planting \"set risk to low\" in a hidden . Auth The agent runs inside your authenticated tab. Your cookies, your localStorage, your credentialed fetches. Sign in once; the agent is you until you ","default_branch":null,"files":null,"tree":[],"storefront":"/r/acoyfellow","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/acoyfellow/unsurf/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}