Deploy your own Open-Inspect instance. Use when the user wants to set up, deploy, or onboard to Open-Inspect. Guides through repository setup, credential collection, Terraform deployment, and verification with user handoffs.
70
86%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
High
Do not use without reviewing
You are guiding the user through deploying their own instance of Open-Inspect. This is a multi-phase process requiring user interaction for credential collection and external service configuration.
Use TodoWrite to create a checklist tracking these phases:
First, generate a random suffix suggestion for the user:
echo "Suggested deployment name: $(openssl rand -hex 3)"Use AskUserQuestion to gather:
open-inspect-{deployment_name}.vercel.app and must be unique across all Vercel users.Execute these commands (substitute values from Phase 1):
mkdir -p {directory_path}
gh repo create {github_account}/open-inspect-{name} --private --description "Open-Inspect deployment"
cd {directory_path}
git clone git@github.com:ColeMurray/open-inspect.git .
git remote rename origin upstream
git remote add origin git@github.com:{github_account}/open-inspect-{name}.git
git push -u origin main
npm install
npm run build -w @open-inspect/sharedHand off to user for each service. Use AskUserQuestion to collect credentials.
Tell the user:
*.YOUR-SUBDOMAIN.workers.devCheck wrangler login status, then create bucket:
wrangler whoami
wrangler r2 bucket create open-inspect-{name}-tf-stateTell user to create R2 API Token at R2 → Overview → Manage R2 API Tokens with "Object Read & Write" permission.
team_)modal token newThen set the token:
modal token set --token-id {token_id} --token-secret {token_secret}
modal profile currentsk-ant-)Guide the user through creating a GitHub App. Its App ID, private key, and installation ID are always required for repository access. Its client ID and secret enable GitHub sign-in only when the user selected GitHub:
Open-Inspect-{YourName} (globally unique)https://open-inspect-{deployment_name}.vercel.apphttps://open-inspect-web-{deployment_name}.{subdomain}.workers.devhttps://{your-custom-domain}{deployed-web-app-url}/api/auth/callback/github
After receiving the .pem path, convert to PKCS#8:
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in {pem_path} -out /tmp/github-app-key-pkcs8.pem
cat /tmp/github-app-key-pkcs8.pemOnly if the user selected Google sign-in. Skip for GitHub-only deployments and leave
google_client_id and google_client_secret empty.
Guide user:
https://open-inspect-{deployment_name}.vercel.app/api/auth/callback/google (or your
*.workers.dev web URL if web_platform = "cloudflare")
openid, email, profile scopes (non-sensitive — no Google
verification review required)Then in terraform.tfvars:
google_client_id and google_client_secret (both required together; leave both empty to
disable)allowed_emails (exact addresses, e.g. pm@gmail.com) or
allowed_email_domains. Prefer allowed_emails for shared domains like gmail.com.github_client_id and github_client_secret empty.
Keep the GitHub App ID, private key, and installation ID configured for repository access.The next request to /login shows Google after both credentials are deployed; no separate web flag
or rebuild is required. Google users get the same flat access; their PRs fall back to the App bot
unless the same verified email is also a linked GitHub identity.
Guide user:
app_mentions:read, chat:write, channels:history,
channels:read, groups:history, groups:read, im:history, im:read, files:read,
files:write, reactions:writexoxb-...)files:read forwards user-attached images into sessions; files:write posts generated media back
to Slack. Reinstall the app whenever either scope is added to an existing installation.
echo "token_encryption_key: $(openssl rand -base64 32)"
echo "repo_secrets_encryption_key: $(openssl rand -base64 32)"
echo "internal_callback_secret: $(openssl rand -base64 32)"
echo "nextauth_secret: $(openssl rand -base64 32)"
echo "modal_api_secret: $(openssl rand -hex 32)"
echo "github_webhook_secret: $(openssl rand -hex 32)" # Only if GitHub bot enabledCreate terraform/environments/production/backend.tfvars:
access_key = "{r2_access_key}"
secret_key = "{r2_secret_key}"
bucket = "open-inspect-{name}-tf-state"
endpoints = {
s3 = "https://{cloudflare_account_id}.r2.cloudflarestorage.com"
}Create terraform/environments/production/terraform.tfvars with all collected values. Set:
enable_durable_object_bindings = false
enable_service_bindings = falseIf GitHub bot is enabled, also set:
enable_github_bot = true
github_webhook_secret = "{generated_value}"
github_bot_username = "{app-slug}[bot]"Important: Build the workers before running Terraform (Terraform references the built bundles):
npm run build -w @open-inspect/control-plane -w @open-inspect/slack-bot -w @open-inspect/github-botPhase 1 (bindings disabled):
cd terraform/environments/production
terraform init -backend-config=backend.tfvars
terraform applyPhase 2 (after Phase 1 succeeds): Update tfvars to set both bindings to true, then:
terraform applyAfter Terraform deployment, guide user:
The App Home provides a settings interface where users can configure their preferred Claude model.
https://open-inspect-slack-bot-{deployment_name}.{subdomain}.workers.dev/eventsapp_home_opened, app_mention, message.imhttps://open-inspect-slack-bot-{deployment_name}.{subdomain}.workers.dev/interactionshttps://open-inspect-slack-bot-{deployment_name}.{subdomain}.workers.dev/interactions Required
for searchable Slack repository pickers that use external data sources./invite @BotNameAfter Terraform deployment, guide user:
https://open-inspect-github-bot-{deployment_name}.{subdomain}.workers.dev/webhooks/githubgithub_webhook_secret valueThe bot username is the App's slug with [bot] appended. E.g., if the app is My-Inspect-App, the
bot username is my-inspect-app[bot]. Confirm this matches github_bot_username in
terraform.tfvars.
npx vercel link --project open-inspect-{deployment_name}
npx vercel --prodcurl https://open-inspect-control-plane-{deployment_name}.{subdomain}.workers.dev/health
curl https://{workspace}--open-inspect-api-health.modal.run
curl -I "$(terraform output -raw web_app_url)"Present a deployment summary table. Instruct the user to test: visit the web app, sign in with each configured provider, create a session, and send a prompt.
Ask if user wants GitHub Actions CI/CD. If yes, use gh secret set for all required secrets.
enable_github_bot = true, and
github_bot_username matches the App's bot loginnpm run build -w @open-inspect/control-plane -w @open-inspect/slack-bot -w @open-inspect/github-botnpm run build -w @open-inspect/sharedf3cd32d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.