OpenWork 기능 플래그를 코딩 전에 등록하고 조직 및 배포 환경별로 단계적으로 공개하며, 문제가 생기면 전체 배포에서 중단하고 공개 완료 후 임시 플래그를 제거합니다. 코드 검사와 진행 중인 작업, 저장 데이터, 기록을 중단 시 어떻게 처리할지도 다룹니다.
- 구현 전에 새 기능 등록
- 지정한 조직부터 단계적으로 공개
- 클라우드와 자체 호스팅 범위 분리
병합이나 배포 전에 읽기 전용으로 과금, 권한, 데이터 변경이 운영 조직에 미치는 영향을 확인합니다. 영향을 받는 화면을 미리 살펴보고, 앞선 점검으로 판단하기 어려운 경우에만 승인 후 PlanetScale 운영 데이터 복사본으로 검증합니다.
Billing, plans, seats, permissions, access rules, auth, flag removals or data migrations that could lock real organizations out or change what they pay. Use before merging or deploying such a change to see exactly which production organizations it affects, prove the UI on production-shaped data, and only with explicit approval test against a PlanetScale copy of real data.
실행 점수 미검증
설치 방법 보기이 스킬은 과금, 요금제, 좌석 수, 권한, 인증, 기능 플래그, 데이터 이전처럼 조직의 이용 조건에 영향을 주는 변경을 배포 전에 검증합니다. 먼저 운영 데이터를 변경하지 않고 현재 규칙과 변경 후 규칙을 비교해 접근 권한이나 요금이 달라지는 조직을 찾습니다. 화면 변경이 있다면 대표적인 테스트 데이터로 실제 화면을 확인합니다. 앞선 확인만으로 답을 얻을 수 없는 경우에 한해 승인을 받은 뒤 PlanetScale의 운영 데이터 복사본을 읽기 전용으로 점검합니다.
조직이 서비스를 이용하지 못하게 되거나 요금이 달라질 수 있는 변경을 병합하거나 배포하기 전에 사용합니다. 실제 영향 범위를 파악하고 필요한 운영 작업, 배포 순서, 롤백 방법을 정리하는 데 도움이 됩니다.
운영 데이터 조회에는 플랫폼 관리 MCP를 사용합니다. PlanetScale 복사본 검증에는 승인, 전용 워크플로, 보호된 환경에 저장된 토큰이 필요합니다. 복사본이 유지되는 동안 운영 브랜치에 준하는 비용이 발생합니다. 채팅, 공개 로그, 이미지에 기밀 정보를 포함하지 않아야 합니다.
이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.
AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.
점수에는 넣지 않았습니다. 2026년 10월 28일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Tests prove the rule you wrote. They do not tell you which real organizations the rule changes. Before a risky change ships, answer three questions in order and stop at the first level that answers them:
Confidentiality (AGENTS.md, hard rule): production names, ids, emails and counts stay in chat. Never put them in a branch, commit, fixture, screenshot, PR or issue. Describe affected organizations generically ("one grandfathered org with ~30 SSO users").
Run the new rule against production inputs without writing anything.
den_query (read-only SQL against
the Den database). Never use admin write tools (den_update_org_plan,
den_set_org_capability, den_set_feature_rollout) during a dry run.dev rule) and after (the PR) for every
organization the rule can touch, and report only the ones that differ, plus
anyone at or near a new limit.den_query traps that produced wrong answers before:
GREATEST(5, JSON_EXTRACT(m,'$.limits.members'))
says '40' < '5'. Always CAST(JSON_UNQUOTE(JSON_EXTRACT(...)) AS UNSIGNED).invitation, session, account, keys and
tokens) and any statement containing a write keyword as a word, including
inside string literals ('%grant%', 'invitation.create.attempted'). Use
LIKE 'invitation.%.attempted', or count placeholder member rows
(joined_at IS NULL) instead of reading invitations.audit_event by org_id and a created_at
range; never scan it whole.feature_rollout and organization_feature, not
organization.metadata.capabilities (a legacy copy).Reproduce each affected shape with generic data and drive the real screens.
evals/worlds/*.ts, generic names such as
"Acme") and prove the journeys in a proof (write-a-spec). Use the fake
Stripe lab (evals/worlds/fake-stripe.ts) when billing must be configured,
or limits that depend on Stripe being set up switch off.pnpm evals:e2e <name> --local, or boot a preview with
preview-my-work (preview-den / preview-full, locally or on Daytona)
and click through by hand. Attach screenshots to the PR (upload-photo).Use only when Levels 1 and 2 cannot answer the question (data-dependent migrations, performance on real volume). Ask the person first and name the cost and the data involved.
Use the Dry run on a copy of production data workflow
(.github/workflows/prod-data-dry-run.yml). It seeds an isolated
dry-run-<run-id>-<attempt> copy from the latest production backup (Data
Branching), runs one read-only check, and attempts deletion when the job ends,
including on failure or cancel. Verify absence after the run; cleanup can fail.
Both --restore and --seed-data can create a branch classified as production.
The token therefore needs read-only production connection and production-branch
deletion permissions. The real source must be deletion-protected, and the job
verifies that protection before creation, credentials and cleanup. The token
cannot change branch protection or write production data. The PlanetScale MCP
has no branch-creation tools.
ee/apps/den-api/scripts/dry-run/<name>.ts on your
branch, using connect.ts (dryRunDb, report, fail, finish). It may
import the PR's own code (for example a pure rule) and must print
aggregates and pass/fail only: this repository is public, so the job
log and summary are public. Start from smoke.ts.gh workflow run prod-data-dry-run.yml --ref <branch> -f check=<name>.ts).
Database access is always read-only. This workflow cannot apply migrations.prod-data-dry-run
environment after reading the check. Approve only checks that print
aggregates.cleanup_only to delete leftover dry-run-* branches.What the workflow needs (set once, by a person, never pasted in chat): on the
prod-data-dry-run environment, a PlanetScale service token limited to the
Den database with read_database, read_branch, create_branch,
delete_branch, connect_branch, read_backups,
restore_production_branch_backup, connect_production_read_only_branch and
delete_production_branch (never connect_production_branch or write_database).
The real source must be deletion-protected first. These scopes also allow
read-only credentials on the live source and deleting other unprotected
production branches in this database; run-name guards limit the workflow,
not the underlying token. Store it only in the protected environment as PLANETSCALE_DRY_RUN_TOKEN_ID /
PLANETSCALE_DRY_RUN_TOKEN, the PlanetScale organization and database names as
variables PLANETSCALE_DRY_RUN_ORG and PLANETSCALE_DRY_RUN_DATABASE, and a restored branch costs as much as the production branch while
it exists.
Guards the workflow already applies: manual runs only, a required reviewer,
no secrets besides the branch connection (no email, Stripe, Slack, connector
or model credentials), masked credentials, one run at a time, a 90 minute
timeout, and branch deletion in an always() step. Never copy rows out of the
branch, never screenshot it, and never point a full Den deployment with real
integrations at it.
/admin (add-a-feature).아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
OpenWork 기능 플래그를 코딩 전에 등록하고 조직 및 배포 환경별로 단계적으로 공개하며, 문제가 생기면 전체 배포에서 중단하고 공개 완료 후 임시 플래그를 제거합니다. 코드 검사와 진행 중인 작업, 저장 데이터, 기록을 중단 시 어떻게 처리할지도 다룹니다.
OpenCode 브라우저 도구를 로컬에서 실행 중인 OpenWork Electron 앱에 연결해 화면을 살펴보고, 작업을 입력해 전송한 뒤 응답을 확인합니다. CDP를 이용한 탐색과 디버깅을 지원합니다.
변경 사항의 추가된 줄에서 고객, 잠재 고객, 협력사 또는 외부 개인을 식별할 수 있는 정보를 확인합니다. 내용을 되풀이하지 않고 위치와 최소 수정 방안을 보고하며, 이미 공개된 정보는 상위 대응으로 넘깁니다.
Claude Code와 Codex 같은 AI 클라이언트를 OpenWork MCP Gateway에 연결해 조직의 스킬, 플러그인, 외부 연결을 사용하도록 안내합니다. 브라우저 인증을 진행하고 기능 검색·실행 도구가 로드되었는지 확인합니다.
외부 기여자의 풀 리퀘스트 코드를 실행하기 전에 난독화, 숨겨진 통신, 의심스러운 의존성, 설치 및 빌드 스크립트를 살펴봅니다. 파일 위치와 관리자가 확인할 사항을 함께 제시합니다.
OpenWork용 OpenCode 플러그인을 만들고 사용자 정의 도구와 훅, 설정 파일 항목을 구성합니다. 도구의 실행 로직을 작성하고 특정 시점에 코드를 실행하도록 설정할 수 있습니다.