Skip to main content
plurai_sim/plurai.config.yaml is the one configuration file for a simulated agent. The scan writes most of it from your agent’s code, and you review it on the mocking map. A few keys are answers only you can give, and the plugin never writes them for you. Commit this file. It is the same on every machine and in every clone.

Keys you set

These keys record your decisions. The scan carries them over unchanged when it rewrites the file.

anonymize

Sets the anonymization posture for this Environment. With true, every upload scrubs personal data on your machine before it leaves. With false or absent, data is uploaded as-is, under the Terms of Service and the Privacy Policy you accepted at sign-up.
true requires the plurai[anonymize] extra and a spaCy English model. Without them, uploads refuse to run. After an Environment has uploaded under one posture, switching to the other is refused: start a new Environment instead. See Data and privacy.

approve_harness_edits

Approves, in advance, fixes to the Harness when nobody is there to answer, for example in CI. When someone can be asked, the plugin always asks. With false or absent, those fixes stay unapplied and appear in the Report.
The value must be a YAML boolean. A quoted "true" approves nothing. The approval covers simulate.py and the runner declared in harness.entry_wrapper.

workspace

Names the workspace. The mapping form also says who runs the commands. With run_driver: headless, every question the flow would ask takes its declared default, and anything only a person can supply (a key, credentials) stops the flow with a finding instead of a guess.
PLURAI_SIM_NONINTERACTIVE=1 in the environment does the same as run_driver: headless. An explicit run_driver: interactive wins over the variable.

Keys the scan writes

Review these on the mocking map. Change them by saying what is wrong in chat, or by re-running /simulation-scan-agent, rather than by hand.

project

String. The name of the project under test.

shape

How the runner drives your agent. dialog runs a conversation. pipeline sends one structured input and reads one structured output.

agent

Mapping. Where your agent lives and how it is built: framework, module, graph_variable, state_class, checkpointer, entry_point.

agent_context

Mapping. The fields your agent expects before the first turn, such as the signed-in user. Each field under fields has a type, required and description. precondition: true means scenario generation must fill it with a non-empty, coherent value.

agent.io

Mapping, optional. What your agent can be handed in a message. Omit it for an agent that takes plain text and never opens the conversation.
The key is the literal root key agent.io, not io nested under agent.

tools

Mapping of tool name to its declaration. The most important field is mode: Each tool also carries a descriptor (description, arguments, return fields, business rules, error cases) that the backend uses to generate a faithful mock.

render_actions

List of strings. Actions your agent emits that are not tool calls, such as showing a table or an image. render_actions: [] declares that there are none.

world_state

Mapping. The records the mock environment holds and how they are reset.

harness

Mapping, optional. Declares a runner of your own that simulate.py imports to reach the agent.
The runner then counts as part of the Harness. It appears on the mocking map, the same consent covers edits to it, and an edit to it marks earlier Runs stale. Adding the declaration marks the existing Runs stale once.

Other scan-managed keys

Next steps

Scan your agent

How the scan writes this file.

Data and privacy

What anonymize changes.