Paperclip에서 실제 브라우저부터 서버, 데이터베이스, runner까지 검증하는 E2E 평가를 추가·확장합니다. 테스트 데이터와 판정 조건, 증거를 기존 보고서에 연결합니다.
- 전체 사용자 작업 흐름의 평가 추가
- 테스트 데이터와 판정 조건 갱신
- 평가 보고서에 스크린샷과 산출물 추가
Paperclip 소스 버전, npm 배포 버전, 실행 중인 환경에서 화면과 CLI를 실제로 조작해 검증합니다. 버전과 시작 데이터 상태를 기록하고 스크린샷과 로그 등의 증거를 남깁니다.
Verify Paperclip from a source checkout, published npm install, or existing staging or production stack. Select the environment, data state, version, and platform; drive real UI or CLI journeys and capture evidence. Route deployment to the private Cloud skills.
verify-paperclip은 Paperclip 화면과 CLI를 실제로 조작해 설치, 초기 설정, 기존 기능, 업데이트, 에이전트 실행을 검증합니다. 소스 버전, npm 배포 버전, 기존 스테이징 및 운영 환경을 대상으로 버전, 실행 환경, 시작 시 데이터 상태를 명시합니다. 결과는 성공, 실패, 전제 조건 부족, 미실시로 구분하고 스크린샷과 로그 등의 증거를 남깁니다.
수정 후 기능을 확인하거나 배포된 패키지의 설치를 검증할 때 유용합니다. 빈 데이터로 시작하는 초기 설정과 기존 데이터를 사용하는 확인을 구분하므로 실제로 시험한 범위를 명확히 보고할 수 있습니다.
빈 소스 환경을 시작하려면 Node 24.11+, Python 3, lsof, 설치된 의존성이 필요합니다. 브라우저 조작에는 기존 Playwright를 사용합니다. 모델 실행 검증에는 승인된 인증 정보가 필요합니다. 배포는 별도의 비공개 Cloud 스킬이 담당하며, 검증 요청만으로 게시나 운영 배포가 허용되지는 않습니다.
이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.
AI가 SKILL.md의 내용만을 근거로 4가지 관점에서 판정했습니다. 스타 수나 인기도는 판정에 넣지 않았습니다.
총점은 각 항목을 A=25점, B=15점, C=5점으로 더한 값입니다. 2026년 10월 20일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Read the map contract, then use the feature map to select user verification recipes. For API/agent access, read the same-named agent access companion and use the actual permitted agent identity, target and work mode. Follow existing API/runner/MCP fixtures for access proof; a board request does not prove agent access. Report recipe or access drift with evidence; map updates belong to maintain-verification-skill. Read development instructions for current commands.
State what is being tested before starting. Use the requested target; for ordinary feature development, default to the current checkout on the current host with isolated data. Expand into cross-platform or release qualification only when requested or needed to reproduce the problem.
Record these independent dimensions together:
| Target | Use it to prove | Procedure |
|---|---|---|
| Checkout dev server, existing or cloned data | Source behavior against existing state | Checkout modes |
| Checkout with fresh empty data | First-run onboarding and subsequent features | Launch below |
| Checkout test drive, fresh seed or reused data | Features with a configured company/CEO | Checkout modes |
| Published npm canary | End-user installation of a specific prerelease | npm verification |
Published npm stable (latest) | End-user installation of the released package | npm verification |
| Existing staging stack | Deployed build, hosted auth, flags, integrations | Hosted verification |
| Existing production stack | Current production journey within the authorized scope | Hosted verification |
Fresh data does not imply a fresh install. A seeded test drive does not prove onboarding. A source build does not prove npm packaging. A passing staging check does not prove production, and a production Cloud stack does not prove the stable npm install. Report only the combinations actually exercised.
When a requested revision must first be built or deployed, use the skills in the
private paperclip-cloud repo:
deploy-paperclip-stack at .agents/skills/deploy-paperclip-stack/SKILL.md
for a tenant workspace or an explicitly scoped fleet rollout.deploy-cloud-harness at .agents/skills/deploy-cloud-harness/SKILL.md
for the Cloud control plane itself.Locate the authorized Cloud checkout or installed skill by name; do not assume a sibling directory exists. Those skills own build preparation, deployment, migrations, and rollout recovery. Return here with environment, target, resolved source SHA, release/image identity, deployment result, and evidence link. If private access is unavailable, report that prerequisite as blocked and continue checks possible on the supplied target without inventing deploy commands.
A verification request alone does not authorize deployment, npm publication, fleet-default changes, or a production rollout. Preserve explicit deployment instructions already given. Publishing npm packages belongs to the existing release skill; installing one does not require publishing it.
Run from the repository root with Node 24.11+, Python 3, lsof, and dependencies
installed with pnpm install --frozen-lockfile. Browser driving uses the existing
@playwright/test dependency. If Chromium is unavailable, run
node node_modules/@playwright/test/cli.js install chromium, or select an installed
browser with PAPERCLIP_PLAYWRIGHT_CHANNEL=chrome.
Create separate, unique data and evidence directories. Keep the evidence outside the data directory:
VERIFY_DATA_DIR=$(mktemp -d "${TMPDIR:-/tmp}/paperclip-verify-XXXXXX")
VERIFY_EVIDENCE_DIR=$(mktemp -d "${TMPDIR:-/tmp}/paperclip-proof-XXXXXX")
python3 .agents/skills/verify-paperclip/scripts/launch.py \
--data-dir "$VERIFY_DATA_DIR" --evidence-dir "$VERIFY_EVIDENCE_DIR"
Keep this command in a foreground terminal/session. The helper runs the supported
onboard --yes --bind loopback --no-install-service --run command, with isolated
embedded PostgreSQL, a free loopback port, no inherited instance routing or cwd
.env, and no automatic browser opening. It records launch.json in the evidence
directory. Source startup builds its required shared/plugin packages and migrates
the empty database; readiness can take longer on the first run.
This path starts an empty instance without model credentials. Create company and
agent state through the journey being checked. A UI check that stops before model
execution does not prove an agent run. For a preconfigured company/CEO and live
model work, use the documented test-drive
command with an authorized environment-backed credential and --no-browser.
Record its printed data directory, URL, runtime PID and commit before driving;
never use a fake credential to claim provider verification.
For Paperclip-managed reusable services, follow dev-workspace run/verify/fix instead of launching a second server. Its cloned-data/login requirements differ from this empty local instance.
The doctor/stop commands require the real launch.json created by launch.py.
Do not fabricate one for dev servers, npm installs, test drives, or hosted stacks.
Use their own readiness and lifecycle procedures instead.
After startup, and again after any surprising behavior, run:
python3 .agents/skills/verify-paperclip/scripts/doctor.py \
--evidence-dir "$VERIFY_EVIDENCE_DIR"
This read-only check compares the recorded launcher, runtime PID, port owner,
process cwd, configuration, served Git commit, health/bootstrap readiness, root
HTML response, and company-list access. It writes doctor.json or exits nonzero.
Do not trust a root 200 or CLI doctor output alone. The CLI doctor checks whether
the port is available before startup; it is not proof of a running server's
ownership. Browser readiness still requires the expected visible page. Reset or
relaunch a wedged browser even when the process health passes.
Use accessible roles, labels, and placeholders from the latest page state.
Existing Playwright specs in tests/e2e/ supply recipes and selectors; their
configured servers and fixtures are separate from this live instance. Run a named
suite through its own configuration only when that is the evidence needed.
The executable onboarding smoke drives onboarding.md / web-wizard: open
/onboarding in the disposable self-hosted instance,
enter a unique organization name, choose Continue, reach the agent-name field,
reopen /<company-prefix>/onboarding, reload, and corroborate the saved company
through read-only API checks:
node .agents/skills/verify-paperclip/scripts/onboarding-smoke.mjs \
--evidence-dir "$VERIFY_EVIDENCE_DIR"
This covers company creation and setup resumption, with no mocked responses or
provider calls. Hiring, first task execution, and the alternate CLI entry remain
separate journeys. The script requires an empty instance and refuses a non-owned
or non-loopback target. For other features, reuse the owned URL and follow the
map's entry points. Company routes normally require the selected company's
issuePrefix, for example /<PREFIX>/goals; use current navigation rather than
guessing resource URLs. The unprefixed /onboarding route starts naming; use the
company-prefixed onboarding route to resume its agent setup. Check relevant
experimental gates and actor permissions.
For source-checkout CLI checks, discover exact flags with
node cli/node_modules/tsx/dist/cli.mjs cli/src/index.ts <command> --help, then
select the disposable data directory/API/company explicitly. For published npm
checks, use the installed version’s CLI and help instead. API reads can
corroborate UI writes; API-created state does not prove a creation UI.
Include the target dimensions above, then record feature file, sub-feature and entry-point ID, commit/dirty state, target URL, company/user, flags, runtime/harness, live versus simulated dependencies, command, exit code, expected and observed behavior, and evidence links. Report each entry as passed, failed, blocked with its prerequisite, or not run.
The smoke saves before/after/reload screenshots, visible-page text, a Playwright
trace, and result.json with company ID and API corroboration. On failure it
retains the trace, visible state, and failure result; rerun doctor before retrying.
Preserve launch output and relevant application logs without secrets. Reopen or
reload changed state and verify persistence/continuation, not just a success toast.
One passing sub-feature does not certify the entire feature family or other
surfaces. A full maintenance pass must exercise every mapped feature or report
incomplete coverage.
For Paperclip-assigned work, attach important proof through
the artifact workflow. Keep runtime results in
the evidence directory or issue, not in the map. The generated
maps/generated/coverage.json lists page references, not live test health.
A successful retry establishes that a later attempt succeeded. Retain earlier material failures in the verification record, including the failed requirement, relevant logs, and what changed before the retry. Use a focused comparison or reproduction to determine whether the change caused the failure. When useful, check the unchanged baseline under comparable conditions. If the cause remains unknown, state that uncertainty; do not infer an infrastructure fault from a passing retry alone.
Report recovery and resolution separately. A later passing journey can show recovery without explaining the earlier failure. Do not describe acceptance as complete while a relevant requirement remains unverified. Record the remaining gap and the next discriminating check instead of repeating retries until green.
Apply this to failures that bear on the changed behavior or requested acceptance criteria. Independently established infrastructure failures can be tracked separately, with supporting evidence and any checks they prevented still marked blocked or not run. This does not require investigating every unrelated failure.
Close the browser context you created (the smoke does this in finally). Leave
shared dev, staging, and production services running. The remaining cleanup steps
in this section apply only to launch.py instances; use the selected target’s
procedure for other launchers. Stop the helper-owned runtime with:
python3 .agents/skills/verify-paperclip/scripts/stop.py \
--evidence-dir "$VERIFY_EVIDENCE_DIR"
The helper verifies the runtime's port, cwd, and launch ancestry before sending SIGTERM to that PID, then waits for runtime exit and checks that its HTTP listener and embedded database have stopped. Signaling the runtime PID lets the server drain before stopping PostgreSQL; a terminal group interrupt can reach the database first. Do this after failed drives as well as successful runs. If startup fails before a runtime record exists, stop only the foreground session you created and inspect its recorded data directory for residue. Never kill by process name or stop another checkout's server.
Verify the recorded HTTP port has no listener and the owned runtime PID has
exited. Embedded PostgreSQL should stop with the server; inspect only the recorded
data directory if shutdown is incomplete. Retain the data directory for diagnosis
until no owned process uses it; remove only that exact temporary directory when
it is no longer useful. Never delete the evidence directory during teardown.
Confirm screenshots, trace, result.json, launch.json, and doctor.json still
exist after shutdown. A failed launch leaves its evidence intact.
All helper invocations are shown above. launch.py, doctor.py, and stop.py use Python's
standard library and the repo CLI; onboarding-smoke.mjs uses the repo's existing
Playwright dependency. They introduce no new package dependency or test framework.
Run the standard-library ownership test before changing launch/doctor/stop helpers:
python3 -m unittest discover -s .agents/skills/verify-paperclip/tests -v
It starts an owned fixture in another temporary checkout and confirms that both doctor and stop reject its claimed port/PID without stopping the server. A second fixture closes its listener before exiting and proves that cleanup waits for runtime exit. These checks do not qualify Paperclip startup, database readiness, or onboarding.
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Paperclip에서 실제 브라우저부터 서버, 데이터베이스, runner까지 검증하는 E2E 평가를 추가·확장합니다. 테스트 데이터와 판정 조건, 증거를 기존 보고서에 연결합니다.
Paperclip Runner의 동작 평가에 판정 조건, 실행 대상, 보고서 검증 데이터를 추가하고 증거와 실행 이력을 남겨 검증합니다.
실제 브라우저로 웹페이지와 앱을 조작하며 화면과 동작을 검증합니다. 스크린샷, 간단한 양식 입력, 오류 및 통신 기록으로 문제 재현과 결과 확인을 돕습니다.
Paperclip에서 할당받은 AgentMail 수신함으로 작업에 연결된 메일을 확인하고, 새 메일 전송과 답장, 전송 결과 확인까지 수행합니다.
GitHub, GitLab, Perforce 변경의 검토 의견, 자동 검사 실패와 설명 누락을 확인하고, 할 일을 정리하며 요청에 따라 수정과 처리된 스레드 해결을 지원합니다.
구상이나 기존 저장소를 바탕으로 AI 에이전트의 역할, 보고 체계, 작업 인계를 정리하고 규격에 맞는 회사 또는 팀 패키지를 만듭니다.