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.