The root subject of every action is an Actor, not an agent name.
cortex_actors (:1500)id, project_id, slug, kind ∈ {agent, human, system}, status ∈ {active, historical, system, retired}, display_name, metadataagents (:1249)name, project, role, model, capabilities, status, runtime_state, actor_id → Actorcortex.roles (:1084, platform) and public.roles (:2392, local)name, display_name, permissions jsonb, is_builtin, status; local: project, name, default_capabilities jsonb, description, is_builtin, source_file (PK project+name)cortex_actor_aliases (:1482)agent_profiles, profile_bundlescortex_projects (:1571)fk_identity_v2_*_project_id); project_key, display_name, status, repo_root| Action | Surface |
|---|---|
| Register agent | cortex-add-agent → POST /agents |
| Soft-remove agent | cortex-remove-agent → POST /admin/agents/remove (admin token; roster-only, history preserved, reversible) |
| Boot actor | cortex-boot <agent> → GET /boot/<agent> (identity + facts + recent history + current work-product briefs) |
| Rename project | migration rewrites agent_name to <slug>@<newproject> (actor identity follows the project) |
Interface — Actor: anything that can act. kind distinguishes AI workers from human operators (Amad is an actor; CTO approvals are actor-attributed decisions) from system processes (Beat, relay workers).