Every field the control plane knows about a trajectory. For outcome-forward guidance,
see Trajectories and Agent-mode trajectories.
POST /org/{org}/ws/{workspace}/worlds/trajectories
| Field | Type | Default | Notes |
|---|
manifest_id | UUID | — | Required. The completed manifest to sample against. |
name | string or null | null | Display name for the trajectory batch. |
project_id | UUID or null | manifest’s project | Must match parent manifest. |
goal | string | "Domain Admins" | Natural-language target. |
count | int | 1 | 1–100 trajectories per job. |
strategy | strategy enum | "random" | See Strategies. |
max_steps | int | 100 | 1–1,000 steps per trajectory. |
seed | int | 42 | Deterministic seed. |
threads | int | 1 | 1–16 parallel workers inside the Worlds backend. |
only_successful | bool | false | Discard trajectories that didn’t satisfy the goal. |
mode | mode enum | "kali" | See Modes. |
runtime_id | UUID or null | null | Required with mode=agent. |
capability_name | string or null | null | Required with mode=agent. |
agent_name | string or null | null | Select one agent from the capability. |
mode | Description |
|---|
kali | Deterministic Kali-flavored algorithmic sampler. |
c2 | Command-and-control flavored algorithmic sampler. |
agent | Runs a capability-bound agent from a specified runtime. Requires runtime_id + capability_name. |
strategy | Behavior |
|---|
random | Uniform random over applicable commands. |
greedy | Prefer commands that advance the goal. |
recon-first | Enumerate early, exploit later. |
smart-random | Weighted random biased toward productive commands. |
GET /org/{org}/ws/{workspace}/worlds/trajectories/{trajectory-id} returns:
| Field | Type | Notes |
|---|
id | string | Trajectory UUID. |
manifest_id | string | Parent manifest. |
organization_id | string | |
workspace_id | string | |
created_by | string or null | User ID. |
project_id | string or null | |
source_job_id | string or null | The trajectory_generation job that produced this trajectory. |
sequence_index | int ≥ 0 | Position within the batch when count > 1. |
name | string or null | Batch display name. |
goal | string | |
strategy | strategy enum | |
seed | int | |
max_steps | int ≥ 1 | |
success | bool or null | Null while running or when unknown. |
termination_reason | string or null | Backend-defined; not enumerated on the control plane. |
step_count | int ≥ 0 | |
summary | object | Redacted summary — see Credential redaction. |
artifact_refs | object | Paths to stored step records and training datasets. |
created_at | ISO 8601 string | |
Attached to the trajectory job when mode=agent. Fields:
| Field | Type | Notes |
|---|
runtime_id | UUID | The runtime resolved at submission. |
runtime_digest | string | Pinned runtime content hash. |
capability_name | string | |
capability_version | string | |
capability_artifact_digest | string | Capability bundle hash. |
capability_runtime_digest | string | How the capability resolved on the runtime. |
agent_name | string or null | Named agent inside the capability, if selected. |
Snapshots are immutable once the job is submitted. See
Agent-mode trajectories for why.
Trajectory summaries strip password and hash fields from initial_state.credentials
before leaving the control plane. username and domain are preserved so identity
context is readable. This applies to every summary surface — trajectory list, trajectory
get, replay payload’s initial_state.
GET /org/{org}/ws/{workspace}/worlds/trajectories/{trajectory-id}/replay returns:
| Field | Type | Notes |
|---|
id | string | Trajectory UUID. |
source_format | raw, atif, or worlds | Which source produced this replay. |
goal | string | |
success | bool or null | |
termination_reason | string or null | |
step_count | int ≥ 0 | |
session_id | string or null | |
backend_trajectory_id | string or null | Worlds backend identifier. |
goal_spec | string or null | Original goal specification. |
initial_state | object or null | Redacted initial state. |
node_names | object | Map from node ID → {name, node_type}. |
artifact_source | string | Provenance of the artifacts dereferenced for this payload. |
steps | list of step objects | See below. |
| Field | Type | Notes |
|---|
step_number | int ≥ 0 | |
source | string | "worlds" by default; backend-extended for agent-mode. |
message | string or null | Human-readable step message. |
command | string or null | Full command text invoked. |
command_name | string or null | Short command identifier. |
exit_code | int or null | |
stdout | string or null | |
stderr | string or null | |
output | string or null | Combined output when stdout/stderr aren’t separated. |
technique_type | string or null | Categorization (e.g. credential access). |
failed | bool or null | Step-level failure flag. |
failure_reason | string or null | |
target | object or null | Structured target descriptor. |
state_before | object or null | Attacker-visible state snapshot before the step. |
state_after | object or null | Snapshot after the step. |
temporal | object or null | Step timing metadata. |
details | object | Any step-specific structured data. |
Trajectory datasets are stored in ATIF (Agent Trajectory Interchange Format). The SDK
reads ATIF directly via dreadnode.training.etl.worlds.
| Field | Notes |
|---|
schema_version | ATIF version. |
session_id | Unique session identifier. |
agent | {name, version, model_name}. |
extra | {goal, initial_state} — see below. |
steps | List of AtifStep. |
trajectory_id | Trajectory UUID. |
seed | Generation seed. |
success | Boolean. |
termination_reason | String or null. |
step_count | Integer. |
worlds_summary | Denormalized trajectory summary for convenience. |
| Field | Notes |
|---|
goal | {target_type, target_name, description}. |
initial_state | {host, principal, domain, credentials[]}. Credentials are redacted — username and domain only. |
| Field | Notes |
|---|
step_id | Integer step number. |
source | "user", "agent", or "system". |
message | Human-readable message. |
reasoning_content | Preserved assistant reasoning. |
tool_calls | List of {tool_call_id, function_name, arguments}. |
observation | {results[]} where each result is {source_call_id, tool_call_id, content, is_error}. |
Agent-mode trajectories can also be stored as AgentTrainingRecord — an OpenAI-compatible
shape:
| Field | Notes |
|---|
messages | List of {role, content, tool_calls?, tool_call_id?}. Role is system, user, assistant, or tool. |
tools | Extracted tool schemas for the run. |
metadata | Free-form run metadata. |
SDK helpers like load_sft_conversations_from_worlds_dataset and
load_rl_prompt_rows_from_worlds_dataset normalize both formats.
| Endpoint | Required scope |
|---|
All GET routes | WORLDS_READ |
POST /trajectories, POST /jobs/{id}/cancel | WORLDS_WRITE |