Skip to content

Crew

A crew of the organisation's Belai library: a named set of worker agents a host runs together. Fields, YAML, HCL and CLI samples, and how apply treats it.

Checked against config-schemas@v1.15.0, terraform-provider-resolve@82cb23c, cli@v4.9.1

A crew of the organisation’s Belai library: a named set of worker agents a host runs together. A crew’s display name is unique in the library; a document naming a crew nobody declared adopts it. Members name agent profiles by their name, as the console’s crew editor does; whether each exists and is a worker is checked by the host when it installs the crew. Every apply that changes it saves a new version; deleting the document hides the crew and keeps its versions.

apiVersion vulnetix.com/v1
kind Crew
Group AI libraries
Status Served. The config engine plans and applies it.
Objects per tenant many, keyed by metadata.name
Token and role An owner or admin session, or a vmt_ config management token with the owner or admin role that lists Crew in its kinds. See Management tokens.
Terraform resource vulnetix_crew, imported by name (see Terraform and OpenTofu)
CLI vulnetix config apply, CLI v3.168.0 and later.
Pinned schema v1.15.0/Crew.schema.json
Newest schema latest/Crew.schema.json
First released in v1.6.0
Print the built-in copy vulnetix config schema Crew

Minimal

Only the fields the kind requires. From examples/Crew/minimal.yaml.

YAML

# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/Crew.schema.json
apiVersion: vulnetix.com/v1
kind: Crew
metadata:
  name: review-crew
spec:
  members:
    - profile: reviewer

HCL (resource vulnetix_crew)

# Only the arguments the kind requires. From config-schemas examples/Crew/minimal.yaml.

resource "vulnetix_crew" "review_crew" {
  name = "review-crew"
  members = [
    {
      profile = "reviewer"
    },
  ]
}

CLI (applies it)

export VULNETIX_CONFIG_TOKEN=vmt_...   # a config management token
vulnetix config apply -f - --manager gitops:acme/platform --auto-approve <<'EOF'
# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/Crew.schema.json
apiVersion: vulnetix.com/v1
kind: Crew
metadata:
  name: review-crew
spec:
  members:
    - profile: reviewer
EOF

Advanced

Every field the kind supports, with a when expression where it takes one. From examples/Crew/advanced.yaml.

YAML

# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/Crew.schema.json
apiVersion: vulnetix.com/v1
kind: Crew
metadata:
  name: release-crew
  annotations:
    owner: platform-team
spec:
  displayName: Release crew
  description: Reviews, tests and writes the notes for every release branch.
  members:
    - profile: reviewer
      replicas: 2
    - profile: security-reviewer
  onePerRepo: true

HCL (resource vulnetix_crew)

# Every argument the kind supports. From config-schemas examples/Crew/advanced.yaml.

resource "vulnetix_crew" "release_crew" {
  name         = "release-crew"
  description  = "Reviews, tests and writes the notes for every release branch."
  display_name = "Release crew"
  members = [
    {
      profile  = "reviewer"
      replicas = 2
    },
    {
      profile = "security-reviewer"
    },
  ]
  one_per_repo = true
  annotations = {
    owner = "platform-team"
  }
}

CLI (applies it)

export VULNETIX_CONFIG_TOKEN=vmt_...   # a config management token
vulnetix config apply -f - --manager gitops:acme/platform --auto-approve <<'EOF'
# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/Crew.schema.json
apiVersion: vulnetix.com/v1
kind: Crew
metadata:
  name: release-crew
  annotations:
    owner: platform-team
spec:
  displayName: Release crew
  description: Reviews, tests and writes the notes for every release branch.
  members:
    - profile: reviewer
      replicas: 2
    - profile: security-reviewer
  onePerRepo: true
EOF

Fields

Paths use dots for nesting and [] for the items of a list. Required means required whenever the parent object is present. A default is what the server uses when the field is left out.

Field Type Required Default Allowed values Description
apiVersion string yes exactly vulnetix.com/v1 The document format version. Every kind in this release is vulnetix.com/v1.
kind string yes exactly Crew Always Crew.
metadata object yes no other keys
metadata.name string yes pattern ^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$ The object’s name, unique per kind within a tenant. It is the natural key: plan, apply, export and the Terraform provider all address an object by kind and name.
metadata.org string no format uuid The tenant (organization UUID) the document belongs to. When set, plan and apply refuse to run against any other tenant.
metadata.labels object no map of string to string (length 0 to 256); keys match ^[a-z0-9]([a-z0-9._/-]{0,61}[a-z0-9])?$ Free key/value labels. Stored with the object, never interpreted by the server.
metadata.annotations object no map of string to string (length 0 to 4096) Free key/value notes for people and tools, such as a ticket link.
spec object yes no other keys
spec.displayName string no pattern ^\S(.*\S)?$; length 1 to 128 The crew’s name in the library: one line of at most 128 characters, not starting belai:. Defaults to metadata.name.
spec.description string no length 0 to 500 One line of at most 500 characters.
spec.members array of object yes 1 to 8 items The agents in the crew, 1 to 8.
spec.members[].profile string yes length 1 to 128 The name of an agent profile in the library (its front matter name).
spec.members[].replicas integer no 1 to 8 How many copies of the agent run, 1 to 8. Left out, one.
spec.onePerRepo boolean no Run at most one copy of the crew per repository.

Applying this kind

  • Command. vulnetix config apply -f <file>; the CLI line above says from which release. Plan first with vulnetix config plan: it shows each object as create, update, delete or no change, with a planHash that apply then holds to. Apply writes in one transaction.
  • Manager. Each object records the manager that applied it (terraform, console or gitops:<repo>). --prune deletes only objects its own manager owns. See The manager and the config engine.
  • Status. Applied, Unchanged or Deleted, with no other status fields. The phases the engine reports are explained under status phases.

How apply treats it

The canonical crew JSON is saved as a new version. Display names are unique in the library, and a document for a crew nobody declared adopts it. Members are checked by the host at install. Delete hides the crew.

Terraform and OpenTofu

The resource is vulnetix_crew in the vulnetix/resolve provider. Its arguments are the spec in snake case, beside name, labels and annotations from metadata. The Minimal and Advanced HCL are above. The provider’s own reference is vulnetix_crew.

Import an object that already exists by its name:

# Import an existing Crew by its name (metadata.name).
terraform import vulnetix_crew.review_crew review-crew

Install, authentication and how state is read: Terraform and OpenTofu.

Check a file with vulnetix config validate -f <file>. See Validate documents. In an editor, start the file with the schema comment.

Edit this pageSources: config-schemas/schemas/Crew.schema.json, config-schemas/schemas/common.schema.json, config-schemas/examples/Crew/minimal.yaml, config-schemas/examples/Crew/advanced.yaml, terraform-provider-resolve/examples/resources/vulnetix_crew/minimal.tf, terraform-provider-resolve/examples/resources/vulnetix_crew/advanced.tf, vdb-site/docs/platform-iac-engine.md, vdb-site/api/internal/handler/config_engine_kinds.go, vdb-site/api/internal/config/crew.go
esc
↑ ↓ move↵ openSearches in your browser. A key like autonomy.max or a code like threshold_required jumps straight to it.