Actor Profiles

The profile_json schema defines an actor's identity, capabilities, and operational boundaries.

Every actor stores its configuration in a profile_json field -- a structured JSON object that contains identity, model routing, permissions, prompt stack, dispatch rules, and more. This profile is the canonical source from which all runtime configuration files are generated.

Profile structure

The profile follows a normalized YAML frontmatter format (ADR-0056) with these top-level sections:

SectionPurpose
identityRole name, title, expertise domains, working style
routingModel route alias and override policy
runtimePermission profile, tool restrictions, resource limits
costCost class and budget constraints
avatarDiceBear style, seed, colors, or custom upload reference
prompt_stackLayered instruction files from global rules to task context
dispatchTicket creation rules, escalation behavior
telemetryMetrics collection preferences
export_targetsWhich runtime adapters to generate for

Identity

The identity section defines who the actor is and what it specializes in:

identity:
  display_name: "Security Architect"
  title: "Senior Security Architect"
  slug: "security-architect"
  domains:
    - security
    - infrastructure
    - compliance
  working_style: "methodical"
  communication_tone: "precise"
  output_format: "structured"
FieldTypeDescription
display_namestringHuman-readable name shown in UI and generated files
titlestringFull role title
slugstringURL-safe identifier, used as avatar seed
domainsstring[]Expertise areas, used for filtering and routing
working_stylestringHow the actor approaches work (e.g., "methodical", "iterative", "exploratory")
communication_tonestringTone of agent output (e.g., "precise", "conversational", "formal")
output_formatstringPreferred output structure (e.g., "structured", "narrative")

Routing

The routing section defines which AI model the actor uses via route aliases -- stable names that resolve to provider/model pairs at export time:

routing:
  route_alias: "premium-security-reasoning"
  override_policy: "project"
FieldTypeDescription
route_aliasstringReference to a Model Route (e.g., premium-security-reasoning, local-coder-main)
override_policystringWhether the project can override the route (actor, project, none)

Route aliases decouple actor definitions from volatile provider model IDs. Instead of storing anthropic/claude-opus-4-8 directly, actors reference a route alias that is resolved from the Model Route catalog at export time. See Model Routing for details.

Runtime

The runtime section defines the actor's permission profile and operational boundaries:

runtime:
  permission_profile: "builder"
  max_concurrent_tasks: 3
  tool_restrictions:
    - "no_direct_db_access"
  recommended_skills:
    - nexus-init
    - nexus-sec-scan
    - nexus-code-review
  recommended_plugins:
    - nexus-compaction-plus
    - nexus-cost-control
FieldTypeDescription
permission_profilestringNamed profile: readonly, reviewer, writer, builder, operator
max_concurrent_tasksnumberMaximum parallel tasks (soft limit)
tool_restrictionsstring[]Additional tool-level constraints
recommended_skillsstring[]Skills this actor recommends for projects it is assigned to
recommended_pluginsstring[]Plugins this actor recommends

See the Actor System overview for the full permission matrix.

Cost and telemetry

cost:
  cost_class: "premium"
  budget_alert_threshold: 0.8

telemetry:
  collect_token_usage: true
  collect_session_metrics: true
FieldTypeDescription
cost_classstringCost tier: local, balanced, premium
budget_alert_thresholdnumberAlert when budget usage exceeds this ratio (0.0-1.0)
collect_token_usagebooleanWhether to track token consumption per session
collect_session_metricsbooleanWhether to track session duration, entry count, etc.

Avatar

Actors have visual identities via DiceBear-generated avatars or custom uploads:

avatar:
  provider: "dicebear"
  style: "bottts-neutral"
  seed: "security-architect"
  background_color: "#1a1a2e"
  custom_url: null
FieldTypeDescription
providerstringAvatar source: dicebear or custom
stylestringDiceBear style (e.g., bottts-neutral)
seedstringDeterministic seed for avatar generation (defaults to actor slug)
background_colorstringBackground color for the avatar
custom_urlstringURL to a custom avatar image (when provider is custom)

DiceBear avatars are pre-generated from the slug seed, converted to SVG, and cached in S3/Supabase storage. Custom SVG uploads are disabled until sanitization is implemented -- use PNG or WebP for custom avatars.

Prompt stack

The prompt stack defines the layered instruction set that shapes the actor's behavior. It follows a 7-layer hierarchy from global rules down to task-specific context:

LayerPurposeExample
1. Global rulesPlatform-wide constraintsCoding discipline, security policies
2. Project rulesProject-specific directivesDeployment conventions, tech stack rules
3. Actor identityWho the actor isRole definition, expertise domains
4. Actor methodsHow the actor worksWorking style, communication patterns
5. Tool policyWhat tools are available/restrictedPermission profile, tool restrictions
6. Output contractExpected output formatStructured vs narrative, language requirements
7. Task contextCurrent task detailsSession state, active dispatches
prompt_stack:
  - layer: "global_rules"
    source: "platform"
  - layer: "project_rules"
    source: "directives"
  - layer: "actor_identity"
    source: "profile"
  - layer: "actor_methods"
    source: "profile"
  - layer: "tool_policy"
    source: "permission_profile"
  - layer: "output_contract"
    source: "profile"
  - layer: "task_context"
    source: "session"

Layers are assembled at export time and materialized into the generated AGENTS.md and runtime configuration files.

Dispatch configuration

Controls how the actor interacts with the Dispatch system:

dispatch:
  can_create_followup_tickets: true
  escalation_target: "project-lead"
  auto_acknowledge: false
  default_priority: "normal"
FieldTypeDescription
can_create_followup_ticketsbooleanWhether the actor can create new dispatches
escalation_targetstringActor slug to escalate to when blocked
auto_acknowledgebooleanAutomatically acknowledge incoming dispatches
default_prioritystringDefault priority for created dispatches

Vita

Personalized actors can have a vita_json field -- a backstory that adds depth to the actor's identity. This is optional and primarily used for promoted (personalized) actors:

vita:
  backstory: "15 years of experience in fintech security..."
  specializations:
    - "OWASP Top 10 auditing"
    - "SOC 2 compliance"
  certifications:
    - "CISSP"
    - "AWS Security Specialty"

The vita is included in the actor's prompt stack at the identity layer, providing the agent with contextual background that shapes its responses and decision-making style.

Was this page helpful?