The eval CLI dumps its resolved config into the run directory's config.toml and echoes it into eval.log. The API key is dumped by reference (api_key_var = "PRIME_API_KEY") — good — but header values are dumped resolved: a client configured with default_headers = {"X-Prime-Team-ID": <team id>} gets the actual team id persisted into both files. Anyone committing run directories as evidence/provenance ships the header value.
Downstream we carry a workaround (prime-tasks-private general-agent/src/general_agent_synth/scripts/run_eval_private.py): an mmap-based in-place redactor polling config.toml + eval.log for the secret strings while the child runs, masking them as <redacted>***. It works (masked files verified in committed batch evidence) but it is ~70 lines of race-prone machinery chasing what the dump could simply not write.
Ask: redact-at-source — either dump header values by reference like api_key_var (e.g. header_vars), or mask any resolved credential-bearing fields in the config dump and log echo. We'll delete the downstream redactor once the dump is clean.
Context: found during a review of the general-agent factory move (the redactor was flagged as over-defensive until frozen evidence proved the persistence is real).
The
evalCLI dumps its resolved config into the run directory'sconfig.tomland echoes it intoeval.log. The API key is dumped by reference (api_key_var = "PRIME_API_KEY") — good — but header values are dumped resolved: a client configured withdefault_headers = {"X-Prime-Team-ID": <team id>}gets the actual team id persisted into both files. Anyone committing run directories as evidence/provenance ships the header value.Downstream we carry a workaround (prime-tasks-private
general-agent/src/general_agent_synth/scripts/run_eval_private.py): an mmap-based in-place redactor pollingconfig.toml+eval.logfor the secret strings while the child runs, masking them as<redacted>***. It works (masked files verified in committed batch evidence) but it is ~70 lines of race-prone machinery chasing what the dump could simply not write.Ask: redact-at-source — either dump header values by reference like
api_key_var(e.g.header_vars), or mask any resolved credential-bearing fields in the config dump and log echo. We'll delete the downstream redactor once the dump is clean.Context: found during a review of the general-agent factory move (the redactor was flagged as over-defensive until frozen evidence proved the persistence is real).