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.
"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.
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.
Other scan-managed keys
Next steps
Scan your agent
How the scan writes this file.
Data and privacy
What
anonymize changes.