{"slug": "ovid-a-pi-extension-that-makes-it-record-proof-its-features-actually-work", "title": "Ovid: A pi extension that makes it record proof its features actually work", "summary": "Ovid, a new extension for the pi coding agent, automatically verifies features by recording terminal and browser videos of e2e tests and attaching them to pull requests. The tool runs on macOS and Linux, requires Node.js and Chromium, and generates polished videos with window chrome, captions, and cursor effects. Ovid aims to make feature verification cheap and reliable without relying on LLMs.", "body_md": "ovid makes [pi](https://github.com/earendil-works/pi) verify the features it builds and record a polished terminal + browser videos of each verification onto your PR. The verifications are ordinary code (assertions decide pass/fail), so re-running them is cheap and no LLM is needed.\n\nWorks on any-language projects (Node is only needed to run ovid). Today it plugs into the pi coding agent; support for others (Codex, Claude Code) may come later.\n\nOvid works on macOS and Linux. On Linux you also need a C/C++ toolchain (`build-essential`\n\n+ `python3`\n\n), Chromium's system libs (`npx playwright install --with-deps chromium`\n\n), and a system `ffmpeg`\n\nwith the `drawtext`\n\nfilter (`apt-get install -y ffmpeg`\n\n) as the bundled ffmpeg-static lacks drawtext there. Run `npx ovid doctor`\n\nbefore installing ovid to check.\n\n```\ncd your-project\nnpm i -D @srinivasa314/ovid       # Node ≥20; also needs Chromium (`npx playwright install chromium`) and `gh`\nnpx ovid init                     # scaffolds config, the spec guide, and the pi extension\n```\n\nThen use pi as normal. (Note: You have to trust the project the first time so the extension loads or pass `-a`\n\nin headless/CI). When you ask the agent to build something and open a PR, it will, on its own:\n\n- write and run an ovid e2e test for the change,\n- review the recorded keyframes\n- attach the terminal+browser video + per-step notes to the PR\n\nNew tests are always shown with a video; tests it only *modified* are included at its discretion.\n\npi opened [this PR](https://github.com/Srinivasa314/ovid/pull/1) for the sample app, adding full-text search across the API, web UI, and `flask notes`\n\nCLI. It attached this video of its own e2e test (multiple terminals plus the browser, on one timeline):\n\n- Terminal + browser in one video, stitched on a shared timeline as a focus-cut (cuts to whichever surface is active).\n- Multiple terminals (named, long-lived shells) and multiple browser tabs/pages in a single test.\n- Polished output: mac window chrome, titlebar labels, lower-third captions, a moving cursor + click-ripple, readable pacing\n- configurable (viewport, video size/fps, pacing) via\n`ovid.config.ts`\n\n. - Lazy rendering: videos are produced only when you need them, like when a PR is created or a test fails so passing runs stay fast.\n\nYou can drive ovid yourself too but its primarily for agents. Write specs in `ovid/*.spec.ts`\n\n, use `ovid.terminal(cmd, opts)`\n\nfor shells and `ovid.browser(caption, fn)`\n\nfor a Playwright page. The full docs are in `ovid/WRITING-OVID-E2E-TESTS.md`\n\n.\n\n| Command | What it does |\n|---|---|\n`npx ovid init` |\nScaffold config, guide, `.gitignore` , pi extension |\n`npx ovid test [filter]` |\nRun specs (records raw artifacts; videos render lazily — only on failure) |\n`npx ovid render [filter]` |\nRender saved runs into `final.mp4` /`.gif` (e.g. to view a passing run) |\n`npx ovid publish [--apply]` |\nExtract keyframes / upload media + create-or-update the PR |\n`npx ovid doctor` |\nCheck external components (Chromium, ffmpeg, git, gh) |\n\nA generated spec looks like this:\n\n``` js\nimport { test, expect } from \"@srinivasa314/ovid/test\";\n\ntest(\"note persists\", async ({ ovid }) => {\n  await ovid.terminal(\"flask --app api/app.py run -p 3001\", { name: \"API\", waitFor: /Running on/ });\n  await ovid.browser(\"Create a note\", async (page) => {\n    await page.goto(\"http://localhost:3000\");\n    await page.getByRole(\"button\", { name: \"Save\" }).click();\n    await expect(page.getByText(\"Buy milk\")).toBeVisible();\n  });\n});\n```\n\nA spec drives terminals and browsers and asserts behavior in code. ovid runs it while recording the real shell and the live browser against a shared timeline, then stitches a video showing them, then overlays window chrome, captions, and a cursor.\n\nBuilt with: node-pty + an asciinema cast replayed in headless xterm.js (terminal), @playwright/test + playwright-recorder-plus (browser), a timeline-driven focus-cut composited with ffmpeg.\n\n`examples/notes/`\n\na Flask API + SQLite + vanilla web UI application and a `flask notes`\n\nCLI, with ovid specs covering both multi-server and mixed terminal+browser flows.\n\nv0 targets macOS and Linux, local, single-machine. Parallel execution, CI, and remote runs are future work.", "url": "https://wpnews.pro/news/ovid-a-pi-extension-that-makes-it-record-proof-its-features-actually-work", "canonical_source": "https://github.com/Srinivasa314/ovid", "published_at": "2026-07-01 00:10:50+00:00", "updated_at": "2026-07-01 00:49:32.395155+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "ai-tools"], "entities": ["Ovid", "pi", "Playwright", "ffmpeg", "Chromium", "Node.js", "GitHub", "Flask"], "alternates": {"html": "https://wpnews.pro/news/ovid-a-pi-extension-that-makes-it-record-proof-its-features-actually-work", "markdown": "https://wpnews.pro/news/ovid-a-pi-extension-that-makes-it-record-proof-its-features-actually-work.md", "text": "https://wpnews.pro/news/ovid-a-pi-extension-that-makes-it-record-proof-its-features-actually-work.txt", "jsonld": "https://wpnews.pro/news/ovid-a-pi-extension-that-makes-it-record-proof-its-features-actually-work.jsonld"}}