Cortex

Entities

The core data types in Cortex — Agents, Skills, Traits, Behaviors, Personas, Runs, and more.

All Cortex entities embed the cortex.Entity base type and carry a TypeID identifier. This page provides an overview of every entity and how they relate.

Base entity

type Entity struct {
    CreatedAt time.Time `json:"created_at"`
    UpdatedAt time.Time `json:"updated_at"`
}

Every entity struct embeds cortex.Entity to get automatic timestamp tracking.

Entity overview

Agent Config

The top-level entity. An agent can operate in flat mode (system prompt + tools list) or persona mode (referencing a Persona for its identity).

type Config struct {
    cortex.Entity
    ID              id.AgentID
    Name            string
    Description     string
    AppID           string
    SystemPrompt    string         // flat mode
    Model           string
    Tools           []string       // flat mode
    MaxSteps        int
    MaxTokens       int
    Temperature     float64
    PersonaRef      string         // persona mode
    InlineSkills    []string       // persona mode (inline)
    InlineTraits    []string
    InlineBehaviors []string
    Enabled         bool
}

Skill

Defines what an agent can do. Bundles tools, knowledge sources, and system prompt fragments. See Skills.

Trait

Defines who an agent is. Personality dimensions on bipolar axes that influence runtime parameters. See Traits.

Behavior

Defines what an agent does habitually. Condition-triggered action patterns. See Behaviors.

Persona

The composition entity that brings everything together. See Personas.

Run, Step, ToolCall

Execution entities that record an agent's reasoning process:

  • Run — A single execution of an agent with 6 lifecycle states
  • Step — One reasoning step within a run
  • ToolCall — A tool invocation within a step

See Runs.

Message

A conversation message with role, content, and timestamp. See Memory.

Checkpoint

A point where a run pauses for human approval. See Checkpoints.

Entity relationship diagram

Persona
  ├── SkillAssignment[] ──→ Skill
  │                           └── ToolBinding[]
  │                           └── KnowledgeRef[]
  ├── TraitAssignment[] ──→ Trait
  │                           └── Dimension[]
  │                           └── Influence[]
  ├── Behavior[]         ──→ Behavior
  │                           └── Trigger[]
  │                           └── Action[]
  ├── CognitiveStyle
  ├── CommunicationStyle
  └── Perception

Agent Config
  ├── PersonaRef ──→ Persona (persona mode)
  ├── SystemPrompt + Tools (flat mode)
  └── Run[]
        ├── Step[]
        │     └── ToolCall[]
        ├── Checkpoint[]
        └── Message[] (via Memory)

Store interfaces

Each entity type defines its own store interface. These are composed into the single store.Store composite:

type Store interface {
    agent.Store      // Create, Get, GetByName, Update, Delete, List
    skill.Store      // CreateSkill, GetSkill, GetSkillByName, ...
    trait.Store      // CreateTrait, GetTrait, GetTraitByName, ...
    behavior.Store   // CreateBehavior, GetBehavior, ...
    persona.Store    // CreatePersona, GetPersona, ...
    run.Store        // CreateRun, GetRun, UpdateRun, ListRuns, ...
    memory.Store     // SaveConversation, LoadConversation, ...
    checkpoint.Store // CreateCheckpoint, GetCheckpoint, ...

    Migrate(ctx context.Context) error
    Ping(ctx context.Context) error
    Close() error
}

On this page