Someone reports a bug.
vigil reproduces it in a real browser.
문제가 접수되면
vigil이 실제 브라우저로 재현합니다.
Work arrives from a commit, a Jira issue, a log signature, or any command that prints events. The agent reproduces the reported symptom in a real browser and writes a scenario for it. A person approves that scenario, then vigil runs it every day and comments back on the issue. 작업은 커밋, Jira 이슈, 로그 시그니처(같은 오류가 반복되는 패턴), 그리고 이벤트를 출력하는 모든 명령에서 들어옵니다. 에이전트가 보고된 증상을 실제 브라우저에서 재현하고 그 증상의 시나리오를 씁니다. 사람이 그 시나리오를 승인하면 vigil이 매일 실행하고 이슈에 댓글을 남깁니다.
Every script waits for a person before it runs on a schedule모든 스크립트는 일정 실행 전에 사람의 승인을 기다립니다
Five stages. vigil runs the first three by itself, then stops and waits for you.다섯 단계입니다. 앞의 세 단계는 vigil이 혼자 하고, 그다음 멈춰서 사람을 기다립니다.
Take the report접수
Work arrives from commits, Jira issues, log signatures, or any command that prints events.커밋, Jira 이슈, 로그 시그니처, 이벤트를 출력하는 모든 명령에서 작업이 들어옵니다.
Reproduce it재현
The agent drives a real browser to the reported symptom and writes one scenario for it.에이전트가 실제 브라우저로 보고된 증상까지 따라가고, 그 증상의 시나리오를 하나 씁니다.
Repair its own steps자가 수리
A brittle step fails validation, so the agent rewrites it. Repair attempts are capped.불안정한 스텝은 검증에서 걸리고, 에이전트가 다시 씁니다. 수리 횟수에는 상한이 있습니다.
Wait for a person승인 대기
The script sits in 승인 대기 (waiting for approval) with a reproduction verdict: confirmed, disputed or unconfirmed. You approve or reject it.스크립트는 재현 판정(재현됨, 판정 불일치, 재현 안 됨)과 함께 승인 대기에 놓입니다. 사람이 승인하거나 반려합니다.
Run it daily매일 실행
Approval makes a daily runner and writes a comment back to the issue tracker.승인하면 매일 도는 검사가 되고, 이슈 트래커에 댓글이 남습니다.
Give it one URLURL 하나면 됩니다
A supervisor loop reads the QA state every 15 minutes and names the routes no scenario covers. It runs on any pi-compatible model, by default zai/glm-5.3-flash. The model only proposes. Go code validates every action before it becomes a job.슈퍼바이저 루프가 15분마다 QA 상태를 읽고, 아직 시나리오가 없는 화면을 짚습니다. pi 호환 모델이면 무엇이든 쓸 수 있고 기본값은 zai/glm-5.3-flash입니다. 모델은 제안만 합니다. 모든 행동은 Go 코드의 검증을 통과해야 작업이 됩니다.
- Six verbs, nothing else. discover_route, repair_script, validate_candidate, run_scenario, raise_cadence, quarantine. vigil refuses a deletion verb by name, so the supervisor can never remove coverage.허용된 동사는 여섯 개뿐입니다. discover_route, repair_script, validate_candidate, run_scenario, raise_cadence, quarantine. 삭제 동사는 이름만으로 거부하므로 슈퍼바이저는 커버리지를 지울 수 없습니다.
- The route map fills itself in from wherever browsers actually go;
/user/42collapses to/user/:id.라우트 맵은 브라우저가 실제로 간 곳에서 스스로 채워집니다./user/42는/user/:id로 접힙니다. - Named environments. Production is read-only, so vigil refuses to run a mutating scenario there.
run --env prodchecks a fix on the deployed site.환경은 이름으로 구분합니다. 운영 환경은 읽기 전용이라 데이터를 바꾸는 시나리오는 실행하지 않습니다.run --env prod로 배포된 사이트에서 수정 결과를 확인합니다. - One sentence per problem. Every failure is reported as one plain sentence naming its cause. The selector, the error text and the evidence are one click away.문제 하나에 문장 하나. 모든 실패는 원인을 짚는 한 문장으로 보고됩니다. 셀렉터와 오류 원문, 증거는 클릭 한 번 뒤에 있습니다.
- Watch it live. The dashboard (Korean UI, served by
vigil loop --ui) shows what needs a person, today's verification results, running jobs and the schedule window.실시간 대시보드.vigil loop --ui로 뜨는 한국어 대시보드에서 사람이 봐야 할 일, 오늘의 검증 결과, 실행 중인 작업, 스케줄 창을 봅니다.
The model proposes. Code decides.모델은 제안하고, 코드가 결정합니다.
Hard limits that hold no matter what the model says.모델이 뭐라고 하든 지켜지는 하드 리밋.
| Rail장치 | Guarantee보장 내용 |
|---|---|
| rule 12 | A model outage never stops deterministic QA. Scheduled scenarios keep running.모델 장애가 결정적 QA를 멈추지 못합니다. 예약된 시나리오는 계속 돕니다. |
| verb allowlist | Six verbs only. vigil refuses a deletion verb by name, so coverage can grow but the supervisor cannot remove it.동사는 여섯 개뿐입니다. 삭제 동사는 이름만으로 거부하므로 커버리지는 늘기만 하고 슈퍼바이저가 지울 수 없습니다. |
| host allowlist | Browsers only reach hosts you listed. Nothing wanders off-target.브라우저는 허용된 호스트만 접근합니다. 대상 밖으로 나가지 않습니다. |
| task budgets | Hourly task budgets cap how much work the loop can queue.시간당 작업 예산으로 루프가 쌓을 수 있는 작업량을 제한합니다. |
| active hours | A weekly active-hours window, say weekdays 08:00 to 19:00, editable from the live dashboard.주간 활동 시간 창(예: 평일 08:00부터 19:00까지)이며, 라이브 대시보드에서 바로 수정할 수 있습니다. |
| mutation policy | Discovered scenarios run read-only or reversible; destructive actions stay behind policy.발견된 시나리오는 read-only 또는 reversible로만 실행되고, destructive는 정책 뒤에 남습니다. |
| human approval | A script from a queue feature runs on a schedule only after a person approves it. Until then it is never due.큐에서 만들어진 스크립트는 사람이 승인해야 일정에 따라 실행됩니다. 그 전에는 실행 시점이 잡히지 않습니다. |
| read-only env | An environment marked read-only refuses every scenario that changes data.읽기 전용으로 표시한 환경은 데이터를 바꾸는 시나리오를 모두 거부합니다. |
| bounded repair | Self-repair is capped (default configurable, e.g. 3 attempts) before escalating to a human.자가 수리 횟수에 상한이 있고(기본값 설정 가능, 예: 3회) 넘으면 사람에게 넘깁니다. |
Running in five commands명령 다섯 줄이면 켜집니다
Build the Go binary, fetch the browser, point it at your deployed app.Go 바이너리를 빌드하고, 브라우저를 받고, 배포된 앱을 가리키면 끝.
$ git clone https://github.com/cskwork/vigil $ cd vigil && go build ./cmd/vigil $ ./vigil doctor --install # fetches the Lightpanda browser $ cp vigil.example.yaml vigil.yaml # point target.base_url at your deployed app $ ./vigil loop --ui 127.0.0.1:8787
Then open 127.0.0.1:8787. The live board lists what needs a person, today's verification results and the running jobs.이후 127.0.0.1:8787을 엽니다. 라이브 보드에 사람이 봐야 할 일, 오늘의 검증 결과, 실행 중인 작업이 나옵니다.