Skip to content

Setting Up Agent Generators

An agent generator produces agents (and their payloads) from an agent template. The Generators interpreter (prompt Consortium (Generators)) is where you view agent templates, create generators from them, manage running generators, and work with the payloads they produce.

Switch into it from any connected interpreter with the generators command.

Agent templates, generators, and payloads

Three concepts are involved:

  • An agent template is a reusable definition describing a kind of agent and the options needed to configure one. Templates are loaded on the server from agent profiles. See the framework Agents Overview.
  • An agent generator is created from a template with a specific set of option values. Starting a generator produces payloads.
  • A payload is the concrete artifact a generator produces, which can be downloaded and delivered to a target. Payloads are covered in Managing Payloads.

As with listeners, you do not author templates from the client: you create generators from templates. Configuring a template and creating a generator happens in the "use agent template" context, covered in Using Agent Templates.

The generators interpreter

On entry, the Generators interpreter lists all current agent generators and all available agent templates. It subscribes to AGENT_GENERATOR_CREATED and AGENT_GENERATOR_REMOVED events so its listings and completions stay current. Payload completions are kept current for every connected interpreter (see Managing Payloads).

Commands available here:

Command Description
list List all agent generators
template list List all agent templates
template info <template_id> Show details of an agent template
use <template_id> Enter the template's context to configure and create a generator
info <generator_id> Show details of a generator
start <generator_id> Start a generator to produce payloads
stop <generator_id> Stop a running generator
cancel <generator_id> Cancel a generator
update <generator_id> <param> <value> [<value> ...] Update a non-running generator's parameters
rename <generator_id> <name> Rename an existing generator
describe <generator_id> <description> Change an existing generator's description
delete <generator_id> Delete a non-running generator

rename and describe act on a generator that already exists. To choose the name and description a generator is born with, pass -n/--name and -d/--description to the create command inside the template's context. See Using Agent Templates.

Generator IDs, template IDs, and (for update) parameter names all tab complete. The payload command used to work with the payloads a generator produces is available here as it is in every connected interpreter, covered in Managing Payloads.

The typical workflow

  1. Enter the Generators interpreter with generators.
  2. Browse the available templates with template list, and inspect one with template info <template_id>.
  3. Enter its context with use <template_id> to configure options and create a generator. See Using Agent Templates.
  4. Back in the Generators interpreter, confirm the generator and its payloads with list and payload list.
  5. Download the produced payload with payload download <payload_id> and deliver it to a target. See Managing Payloads.

When a delivered payload runs and connects back through its compatible listener, the agent checks in and appears in the Agents interpreter.

Managing generators

Once a generator exists you control its lifecycle directly:

start <generator_id>                               # start a non-running generator
stop <generator_id>                                # stop a running generator
update <generator_id> <param> <value> [<value> ...]  # update a non-running generator
cancel <generator_id>                              # forcefully cancel a running generator
delete <generator_id>                              # delete a non-running generator

Stop a generator before updating or deleting it. Parameter values use the same typing rules as template options: annotate an individual value (for example 30:int) or use -t/--value-type for every value. Run update --help-full for detailed examples.