AgentProfile
An agent of the organisation's Belai library: the markdown agent definition Belai writes, and the files the agent uses beside it. Fields, YAML, HCL and CLI samples, and how apply treats it.
An agent of the organisation’s Belai library: the markdown agent definition Belai writes, and the files the agent uses beside it. The profile is identified by the id in the definition’s front matter, so the same agent backed up from a host and declared here is one profile, and that id cannot change under a metadata.name. Every apply that changes it saves a new version, as a save in the console does; deleting the document hides the profile and keeps its versions and files. A profile nobody declared is exported under its name.
apiVersion |
vulnetix.com/v1 |
kind |
AgentProfile |
| 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 AgentProfile in its kinds. See Management tokens. |
| Terraform resource | vulnetix_agent_profile, imported by name (see Terraform and OpenTofu) |
| CLI | vulnetix config apply, CLI v3.168.0 and later. |
| Pinned schema | v1.15.0/AgentProfile.schema.json |
| Newest schema | latest/AgentProfile.schema.json |
| First released in | v1.6.0 |
| Print the built-in copy | vulnetix config schema AgentProfile |
Minimal
Only the fields the kind requires. From examples/AgentProfile/minimal.yaml.
YAML
# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/AgentProfile.schema.json
apiVersion: vulnetix.com/v1
kind: AgentProfile
metadata:
name: reviewer
spec:
body: |
---
id: 6f1c2b8a-3d4e-4f5a-9b6c-7d8e9f0a1b2c
name: reviewer
---
You review pull requests for correctness and security.
HCL (resource vulnetix_agent_profile)
# Only the arguments the kind requires. From config-schemas examples/AgentProfile/minimal.yaml.
resource "vulnetix_agent_profile" "reviewer" {
name = "reviewer"
body = "---\nid: 6f1c2b8a-3d4e-4f5a-9b6c-7d8e9f0a1b2c\nname: reviewer\n---\nYou review pull requests for correctness and security.\n"
}
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/AgentProfile.schema.json
apiVersion: vulnetix.com/v1
kind: AgentProfile
metadata:
name: reviewer
spec:
body: |
---
id: 6f1c2b8a-3d4e-4f5a-9b6c-7d8e9f0a1b2c
name: reviewer
---
You review pull requests for correctness and security.
EOF
Advanced
Every field the kind supports, with a when expression where it takes one. From examples/AgentProfile/advanced.yaml.
YAML
# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/AgentProfile.schema.json
apiVersion: vulnetix.com/v1
kind: AgentProfile
metadata:
name: security-reviewer
labels:
team: appsec
spec:
body: |
---
id: 0b7e4d2c-9a1f-4c3e-8d5b-2f6a7e8c9d01
name: security-reviewer
display_name: Security reviewer
palette: ["#0f172a", "#1e293b", "#38bdf8", "#f8fafc"]
---
You review pull requests for injection, authorization and secrets
handling, and cite the checklist in checklists/review.md.
files:
- path: checklists/review.md
body: |
- Inputs are validated at the boundary.
- Every route checks the caller's role.
- path: checklists/secrets.md
file: agents/security-reviewer/secrets.md
---
# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/AgentProfile.schema.json
apiVersion: vulnetix.com/v1
kind: AgentProfile
metadata:
name: release-notes
spec:
file: agents/release-notes.md
HCL (resource vulnetix_agent_profile)
# Every argument the kind supports. From config-schemas examples/AgentProfile/advanced.yaml.
resource "vulnetix_agent_profile" "security_reviewer" {
name = "security-reviewer"
body = "---\nid: 0b7e4d2c-9a1f-4c3e-8d5b-2f6a7e8c9d01\nname: security-reviewer\ndisplay_name: Security reviewer\npalette: [\"#0f172a\", \"#1e293b\", \"#38bdf8\", \"#f8fafc\"]\n---\nYou review pull requests for injection, authorization and secrets\nhandling, and cite the checklist in checklists/review.md.\n"
files = [
{
body = "- Inputs are validated at the boundary.\n- Every route checks the caller's role.\n"
path = "checklists/review.md"
},
{
file = "agents/security-reviewer/secrets.md"
path = "checklists/secrets.md"
},
]
labels = {
team = "appsec"
}
}
resource "vulnetix_agent_profile" "release_notes" {
name = "release-notes"
file = "agents/release-notes.md"
}
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/AgentProfile.schema.json
apiVersion: vulnetix.com/v1
kind: AgentProfile
metadata:
name: security-reviewer
labels:
team: appsec
spec:
body: |
---
id: 0b7e4d2c-9a1f-4c3e-8d5b-2f6a7e8c9d01
name: security-reviewer
display_name: Security reviewer
palette: ["#0f172a", "#1e293b", "#38bdf8", "#f8fafc"]
---
You review pull requests for injection, authorization and secrets
handling, and cite the checklist in checklists/review.md.
files:
- path: checklists/review.md
body: |
- Inputs are validated at the boundary.
- Every route checks the caller's role.
- path: checklists/secrets.md
file: agents/security-reviewer/secrets.md
---
# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/AgentProfile.schema.json
apiVersion: vulnetix.com/v1
kind: AgentProfile
metadata:
name: release-notes
spec:
file: agents/release-notes.md
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 AgentProfile |
Always AgentProfile. | |
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.body |
string | no | length 1 to 65536 | The agent definition: markdown with front matter between — lines, holding id (a lower-case UUID) and name, and optionally display_name, avatar_id and a palette of four #rrggbb colours. At most 64 KiB. | |
spec.file |
string | no | length 1 to 1024 | A file holding the agent definition, the same as body. | |
spec.files |
array of object | no | 0 to 32 items | Files the agent uses, written beside the definition when a host installs it. At most 32 files of up to 256 KiB each and 2 MiB in all, each UTF-8 text. | |
spec.files[].path |
string | yes | length 1 to 1024 | Where the file is written, relative to the agent: one line, no .. segment, naming a file. | |
spec.files[].body |
string | no | length 1 to 262144 | The file’s contents. | |
spec.files[].file |
string | no | length 1 to 1024 | A file holding the contents, the same as body. |
Rules
Conditions the schema enforces beyond each field’s own type. vulnetix config validate and the engine’s plan report a document that breaks one.
| On | Rule |
|---|---|
spec |
Exactly one of body or file is set. |
spec.files[] |
Exactly one of body or file is set. |
Applying this kind
- Command.
vulnetix config apply -f <file>; the CLI line above says from which release. Plan first withvulnetix config plan: it shows each object as create, update, delete or no change, with aplanHashthat apply then holds to. Apply writes in one transaction. - Manager. Each object records the manager that applied it (
terraform,consoleorgitops:<repo>).--prunedeletes 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 profile is identified by the id in the definition’s front matter, which cannot change under a name.
- The definition is checked by the shared library validator (
internal/libraryitem). - Apply saves a new version with its files. An unchanged body is no new version.
- Delete hides the profile. Versions and files stay.
Terraform and OpenTofu
The resource is vulnetix_agent_profile 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_agent_profile.
Import an object that already exists by its name:
# Import an existing AgentProfile by its name (metadata.name).
terraform import vulnetix_agent_profile.reviewer reviewer
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.