AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Product videos your whole team makes with one prompt.
Anyone on the team describes the video they want in the
ScreenCI web app, pastes one prompt into a coding
agent, and gets back a narrated, auto-zoomed walkthrough of the real app. They
edit narration, voices, and languages in the browser. Engineers keep the
videos in the repository, where each one is a Playwright E2E test: when the
UI ships, CI runs npx screenci export and the videos regenerate, and a flow
that broke fails the run. This package is the CLI and the authoring API behind
all of it.查看完整 README ↗Tutorial videos of your app, from one prompt.
Describe the video in one sentence, paste one prompt into the coding agent you already use, and get back a narrated, auto-zoomed walkthrough of your real app, recorded on your own machine. Edit narration, voices, and languages in the browser. Engineers keep the videos in the repository, where each one is a Playwright E2E test: CI re-records them on every push, and a flow that broke fails the run. This package is the CLI and the authoring API behind all of it.
The raw recording, its timing data, and the text files of the screenci/
folder (the config and the video scripts; set uploadSources: false to keep
them local). Never .env files, lockfiles, your app's source, or your
signed-in browser session. redact(locator) masks secrets in the page before
the frame is captured. Full list:
What ScreenCI sends.
Learn more at screenci.com, or start from Make videos by prompt (no repository needed) and Repository and CI (the engineering hand-off).
npm init screenci@latest
# or (pnpm 11, the --config flags are a temporary workaround)
pnpm --config.minimum-release-age-exclude=screenci --config.enable-global-virtual-store=false dlx screenci@latest init
This scaffolds a self-contained screenci/ directory with its own
dependencies and installs Chromium. The directory is isolated from the
surrounding workspace, which keeps installation reliable inside monorepos.
Then write a video, run it locally, refine it, and export the final output:
npx screenci test # author the video
npx screenci preview # record live previews and print the link
npx screenci export # render and download the finished video
Full docs:
Video scripts are Playwright-style files with a .screenci.ts extension. If you
already know Playwright locators, navigation, and waiting, you already know
most of the automation layer.
// recordings/onboarding.screenci.ts
import { hide, speed, time, video } from 'screenci'
video('Onboarding flow', async ({ page }) => {
await hide(async () => {
await page.goto('https://app.example.com/signup')
})
await page.getByLabel('Email').fill('[email protected]')
await page.getByRole('button', { name: 'Create account' }).click()
await speed(0.5, async () => {
await page.getByRole('button', { name: 'Open dashboard tour' }).click()
})
await time(1000, async () => {
await page.getByRole('button', { name: 'Skip tutorial' }).click()
})
await page.getByRole('heading', { name: 'Dashboard' }).waitFor()
})
Each video() call becomes one output video. The title becomes the filename
and the remote video identity. Inside video(), page is a ScreenCIPage: a
Playwright Page with animated cursor movement and visible typing layered on
top of normal Playwright behavior.
hide() removes setup entirely. speed() and time() keep a section visible
but remap its rendered duration.
| Export | What it does |
|---|---|
defineConfig | Wraps Playwright config with ScreenCI defaults |
video | Declares a video recording test |
video.narration | Declares narration cues (per language or shared) for a video |
hide | Cuts setup or cleanup out of the visible recording |
autoZoom | Smooth camera follow for an interaction block |
zoomTo | Manual camera framing for a locator or point |
resetZoom | Returns from manual framing to the full viewport |
video.overlays | Draws timed overlays (rings, callouts, media) over the video |
voices | Available voice constants such as voices.Ava |
modelTypes | Narration model constants |
See the docs for configuration, narration, camera, and CI setup.
Questions, ideas, or want to show off your videos? Join us on Discord.