Skip to main content

Promote to production

You've got vendor-screen v1 and v2 in sandbox. Now we'll get the workflow to prod, activate it, and set up an API key for future automated deploys.

Step 1 — deploy to prod

culvii deploy vendor-screen.ts --env prod --workspace procurement

(Adjust the workspace name to whatever makes sense for your team. The Console will ask to create it if it doesn't exist.)

You'll see:

✓ Published vendor-screen v1 to prod

Note: it's v1 in prod, not v2. Versions are per-environment. Sandbox went v1, v2 independently of prod.

Step 2 — activate

In the Console, navigate to prod → procurement → workflows → vendor-screen. Click Activate.

The Console asks you to confirm; it shows you the workflow's input schema, output schema, and any triggers. (For our tutorial workflow there are no triggers, so this is mostly a no-op.) Click Activate.

The workflow is now Live in prod. The Console marks it with a "Live" badge. If you had cron triggers or webhooks attached, they'd be armed now.

Run it once manually from the Console with { "vendorId": "V001" } to confirm it works in prod.

Step 3 — create API keys for CI

So far you've been deploying as yourself, using the OAuth session created by culvii login. That works for one-off human-driven deploys. For anything automated — CI on merge to main, scheduled redeploys, integration tests — you'll need an API key.

Create a key for sandbox first:

culvii key create --env sandbox --scope developer --name "github-actions-sandbox"

The CLI prints the secret once:

Created API key:
Fingerprint: ck_sandbox_a3f9...8c2d (last 4)
Secret: ck_sandbox_a3f9b8e6c2d4f7a1...

⚠ This is the only time the secret will be shown. Store it somewhere safe.

Repeat for prod:

culvii key create --env prod --scope developer --name "github-actions-prod"

In your CI provider (GitHub Actions, GitLab CI, whatever you use), store these as secrets:

  • CULVII_API_KEY_SANDBOX = ck_sandbox_…
  • CULVII_API_KEY_PROD = ck_prod_…

A minimal GitHub Actions example:

.github/workflows/deploy.yml
name: Deploy

on:
push:
branches: [main]
workflow_dispatch:
inputs:
env:
type: choice
options: [sandbox, prod]

jobs:
deploy-sandbox:
if: github.event_name == 'push'
runs-on: ubuntu-latest
environment: sandbox
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20 }
- run: npm install -g @culvii/cli
- run: culvii deploy vendor-screen.ts --env sandbox --workspace tutorial --yes
env:
CULVII_API_KEY: ${{ secrets.CULVII_API_KEY_SANDBOX }}

deploy-prod:
if: github.event_name == 'workflow_dispatch' && github.event.inputs.env == 'prod'
runs-on: ubuntu-latest
environment: prod
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20 }
- run: npm install -g @culvii/cli
- run: culvii deploy vendor-screen.ts --env prod --workspace procurement --yes
env:
CULVII_API_KEY: ${{ secrets.CULVII_API_KEY_PROD }}

The --yes flag suppresses interactive prompts (workspace creation, etc.) — required for unattended runs.

This shape — sandbox on every merge, prod via manual dispatch — is the most common starting point. As you build confidence, you can wire prod deploys to a release branch, a tag, or a manual approval gate in your CI provider.

You're done

That's the full developer loop:

  1. Write TypeScript with @culvii/kit.
  2. Iterate with culvii dev against your dev environment.
  3. Deploy to sandbox with culvii deploy --env sandbox.
  4. Deploy and activate in prod.
  5. Hand future deploys to CI via API keys.

Where to go next

  • How-to guides — recipes for specific tasks: connecting MCP, adding a HITL gate, debugging with culvii logs --follow, real internal-API integrations.
  • Concepts — if any of the model felt fuzzy, this is where it gets explained in depth.
  • SDK reference — the precise interfaces of agent, tool, model, workflow.
  • Operator's Guide — if you'll be the one approving HITL gates and reviewing the audit log, this is your home.

If anything broke along the way, email [TODO support@culvii.com] with your run ID. We read every message.