onboarding
This skill automates Open-Inspect setup, including infrastructure provisioning, CI/CD, and credential handling.
Install
mkdir -p .claude/skills/onboarding && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/6437" && unzip -o skill.zip -d .claude/skills/onboarding && rm skill.zipInstalls to .claude/skills/onboarding
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Deploy your own Open-Inspect instance. Use when the user wants to set up, deploy, or onboard toKey capabilities
- →Provision Open-Inspect infrastructure via Terraform
- →Aggregate cloud service credentials
- →Configure CI/CD pipelines for deployment
- →Verify service integration across Vercel and Modal
How it works
It orchestrates a multi-phase checklist that prompts for specific credentials and triggers Terraform providers to deploy resources sequentially.
Inputs & outputs
When to use onboarding
- →Deploying a new Open-Inspect instance
- →Configuring CI/CD for Open-Inspect
- →Verifying deployment credentials
About this skill
Open-Inspect Deployment Guide
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.
Before Starting
Use TodoWrite to create a checklist tracking these phases:
- Initial setup questions
- Repository setup
- Credential collection (Cloudflare, Vercel if selected, Modal, Anthropic)
- GitHub App creation (+ Google OAuth if enabled)
- Slack App creation (if enabled)
- Security secrets generation
- Terraform configuration
- Terraform deployment (two phases)
- Post-deployment Slack setup (if enabled)
- Post-deployment GitHub Bot setup (if enabled)
- Web app deployment
- Workspace Owner bootstrap
- Verification
- CI/CD setup (optional)
Phase 1: Initial Questions
First, generate a random suffix suggestion for the user:
echo "Suggested deployment name: $(openssl rand -hex 3)"
Use AskUserQuestion to gather:
- Directory location - Where to create the project (default: current directory or ~/workplace/open-inspect-{suffix})
- GitHub account - Which account/org hosts the private repo
- Deployment name - A unique identifier for deployment URLs (e.g., their GitHub username, company name, or the random suffix generated above); Vercel project URLs must be globally unique.
- Web platform - Vercel (default) or Cloudflare Workers. If Cloudflare, ask whether to use a
custom domain; if so, collect the hostname and Cloudflare zone ID. Derive one canonical web app
URL from this choice and the deployment name using Step 3 of
docs/GETTING_STARTED.md; use it for both OAuth callbacks and the GitHub App homepage. - Slack integration - Yes or No
- GitHub bot integration - Yes or No (automated PR reviews and comment-triggered actions)
- Sign-in providers - GitHub, Google, or both. At least one is required.
- Admission mode - Restricted (collect the allowed GitHub usernames, exact verified emails,
email domains, and/or GitHub orgs) or explicitly open to any authenticated user (no allowlists).
Validate the chosen providers and admission mode against the compatibility table and allowlist
rules in Step 5 of
docs/GETTING_STARTED.mdbefore proceeding. - Prerequisites confirmation - Confirm they have Cloudflare, Modal, Anthropic, and GitHub accounts, plus Vercel only if selected above.
Phase 2: Repository Setup
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 [email protected]:ColeMurray/background-agents.git .
git remote rename origin upstream
git remote add origin [email protected]:{github_account}/open-inspect-{name}.git
git push -u origin main
npm install
npm run build -w @open-inspect/shared
Phase 3: Credential Collection
Hand off to user for each service. Use AskUserQuestion to collect credentials.
Cloudflare
Tell the user:
- Account ID: Found in dashboard URL or account overview
- Workers Subdomain: Workers & Pages → Overview, bottom-right panel shows
*.YOUR-SUBDOMAIN.workers.dev - API Token: Create at https://dash.cloudflare.com/profile/api-tokens with template "Edit Cloudflare Workers" + permissions for Workers KV Storage (Edit), Workers R2 Storage (Edit), D1 (Edit), Queues (Edit). For a Cloudflare web app with a custom domain, also grant zone-level Workers Routes (Edit).
R2 Bucket
Check wrangler login status, then create bucket:
wrangler whoami
wrangler r2 bucket create open-inspect-terraform-state
Tell user to create R2 API Token at R2 → Overview → Manage R2 API Tokens with "Object Read & Write" permission.
Vercel (Only If Selected In Phase 1)
- API Token: https://vercel.com/account/tokens
- Team/Account ID: Settings → "Your ID" (even personal accounts have one, usually starts with
team_)
Modal
- Token ID and Secret: https://modal.com/settings or
modal token new - Workspace name: Visible in Modal dashboard URL
Then set the token:
modal token set --token-id {token_id} --token-secret {token_secret}
modal profile current
Anthropic
- API Key: https://console.anthropic.com (starts with
sk-ant-)
Phase 4: GitHub App Setup
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:
- Go to https://github.com/settings/apps → "New GitHub App"
- Name:
Open-Inspect-{YourName}(globally unique) - Homepage URL: The canonical web app URL from Phase 1
- Webhook: Uncheck "Active"
- If GitHub sign-in is selected, set the Callback URL (under "Identifying and authorizing
users"):
{canonical-web-app-url}/api/auth/callback/github- CRITICAL: The origin must exactly match the Homepage URL selected above.
- Repository permissions: Contents (Read & Write), Pull requests (Read & Write), Metadata (Read-only). If the GitHub bot is enabled, also grant Actions (Read-only), Checks (Read-only), and Issues (Read & Write). Pull requests permission also authorizes creating and applying labels to session-created pull requests; labeling does not require Issues permission.
- If GitHub organizations are allowlisted, set Organization permissions: Members (Read-only). Existing Apps need the permission change approved on their installations.
- If GitHub sign-in is enabled, set Account permissions: Email addresses (Read-only). Every GitHub sign-in requires a verified email, regardless of admission mode. Existing Apps need the permission change approved on their installations.
- Create app, note App ID
- If GitHub sign-in is selected, generate a Client Secret and note the Client ID and Client Secret. Otherwise leave both Terraform values empty.
- Generate Private Key (downloads .pem file)
- Install app on account, note Installation ID from URL
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.pem
Phase 4b: Google OAuth Setup (If Enabled)
Only 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://console.cloud.google.com/apis/credentials → "Create Credentials" → "OAuth client ID"
- Application type: Web application
- Authorized redirect URI:
{canonical-web-app-url}/api/auth/callback/google- CRITICAL: Must match the web URL from Phase 1 exactly!
- OAuth consent screen: request only
openid,email,profilescopes (non-sensitive — no Google verification review required) - Note Client ID and Client Secret
Then in terraform.tfvars:
- Set
google_client_idandgoogle_client_secret(both required together; leave both empty to disable) - If Google is the only sign-in provider, leave
github_client_idandgithub_client_secretempty. 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.
Phase 5: Slack App Setup (If Enabled)
Guide user:
- https://api.slack.com/apps → "Create New App" → "From scratch"
- OAuth & Permissions → Add scopes:
assistant:write,app_mentions:read,chat:write,channels:history,channels:read,groups:history,groups:read,im:history,files:read,files:write,reactions:write,users:read,users:read.email - Install to Workspace, note Bot Token (
xoxb-...) - Basic Information → note Signing Secret
- App Home and Event Subscriptions configured AFTER deployment (worker must be running for URL verification)
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.
Phase 6: Generate Security Secrets
echo "token_encryption_key: $(openssl rand -base64 32)"
echo "repo_secrets_encryption_key: $(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 enabled
Phase 7: Terraform Configuration
Create terraform/environments/production/backend.tfvars. The bucket is already fixed as
open-inspect-terraform-state in backend.tf; do not override it here:
access_key = "{r2_access_key}"
secret_key = "{r2_secret_key}"
endpoints = {
s3 = "https://{cloudflare_account_id}.r2.cloudflarestorage.com"
}
Create terraform/environments/production/terraform.tfvars with all collected values. Set:
web_platform = "{vercel_or_cloudflare_from_phase_1}"
enable_durable_object_bindings = false
enable_service_bindings = false
If Phase 1 selected a Cloudflare custom domain, also set cloudflare_custom_domain and
cloudflare_zone_id to the collected hostname and zone ID. Leave both unset otherwise. If Vercel
was not selected, leave vercel_api_token and vercel_team_id unset (not empty strings).
Set enable_slack_bot = false if Slack was declined in Phase 1; Terraform defaults it to true. If
Slack was selected, set enable_slack_bot = true, slack_bot_token, and slack_signing_secret to
the collected values.
Write the restricted-mode comma-separated Phase 1 answers to `allowed_users
Content truncated.
When not to use it
- →Managing existing production deployments
- →General software development workflows
Prerequisites
Limitations
- →Requires significant user-provided secrets
- →Multi-phase deployment prone to environment timeouts
- →Limited to the defined Open-Inspect architecture
How it compares
It acts as an interactive deployment engineer, guiding the setup of sensitive infrastructure rather than simply providing a static script.
Compared to similar skills
onboarding side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| onboarding (this skill) | 1 | 6mo | Review | Intermediate |
| cloudflare | 0 | 4mo | No flags | Beginner |
| terraform-module-library | 7 | 6mo | No flags | Advanced |
| azure-deployment-preflight | 7 | 8mo | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
cloudflare
bilal-chajia
Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), feature flags (Flagship), networking (Tunnel, Spectrum), security (WAF, DDoS), and infrastructure-as-code (Terraform, Pulumi). Use for any Cloudflare development task. Biase
terraform-module-library
wshobson
Build reusable Terraform modules for AWS, Azure, and GCP infrastructure following infrastructure-as-code best practices. Use when creating infrastructure modules, standardizing cloud provisioning, or implementing reusable IaC components.
azure-deployment-preflight
github
Performs comprehensive preflight validation of Bicep deployments to Azure, including template syntax validation, what-if analysis, and permission checks. Use this skill before any deployment to Azure to preview changes, identify potential issues, and ensure the deployment will succeed. Activate when users mention deploying to Azure, validating Bicep files, checking deployment permissions, previewing infrastructure changes, running what-if, or preparing for azd provision.
senior-devops
davila7
Comprehensive DevOps skill for CI/CD, infrastructure automation, containerization, and cloud platforms (AWS, GCP, Azure). Includes pipeline setup, infrastructure as code, deployment automation, and monitoring. Use when setting up pipelines, deploying applications, managing infrastructure, implementing monitoring, or optimizing deployment processes.
devops-iac-engineer
davila7
Implements infrastructure as code using Terraform, Kubernetes, and cloud platforms. Designs scalable architectures, CI/CD pipelines, and observability solutions. Provides security-first DevOps practices and site reliability engineering guidance.
deployment-engineer
sickn33
Expert deployment engineer specializing in modern CI/CD pipelines, GitOps workflows, and advanced deployment automation. Masters GitHub Actions, ArgoCD/Flux, progressive delivery, container security, and platform engineering. Handles zero-downtime deployments, security scanning, and developer experience optimization. Use PROACTIVELY for CI/CD design, GitOps implementation, or deployment automation.