> This page is for version Latest (default).
> For other versions, use one of these documentation indexes:
> - Latest (default): https://docs.nvidia.com/nemo-helix/latest/llms.txt
> - 0.8.0: https://docs.nvidia.com/nemo-helix/v0.8.0/llms.txt
> - 0.7.1: https://docs.nvidia.com/nemo-helix/v0.7.1/llms.txt
> - 0.7.0: https://docs.nvidia.com/nemo-helix/v0.7.0/llms.txt
> - 0.6.0: https://docs.nvidia.com/nemo-helix/v0.6.0/llms.txt
> - 0.5.1: https://docs.nvidia.com/nemo-helix/v0.5.1/llms.txt
> - 0.5.0: https://docs.nvidia.com/nemo-helix/v0.5.0/llms.txt
> - 0.4.0: https://docs.nvidia.com/nemo-helix/v0.4.0/llms.txt
> - 0.3.0: https://docs.nvidia.com/nemo-helix/v0.3.0/llms.txt
> - 0.2.0: https://docs.nvidia.com/nemo-helix/v0.2.0/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo-helix/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo-helix/_mcp/server.

# Manage Audit Configurations

An `AuditConfig` selects which garak probes and detectors run during an audit, how many generations to make per probe, and where the reports land. Configurations are persisted in NeMo Helix entity store and referenced by name from `garak.run(...)`.

## Initialize the SDK

```python
from nemo_garak.sdk import GarakPluginResource
from nemo_helix_plugin.client.client import NemoClient

client = NemoClient.from_config()
garak = GarakPluginResource(client)
```

> **Note**
>
> These examples use the `default` workspace. If your current CLI context uses a different workspace, run `nemo config set --workspace default` first. To check, run `nemo config view`.

## What an AuditConfig Holds

A configuration has four sub-blocks plus a free-form description. Each sub-block has sensible defaults, so a minimal configuration only needs a workspace and a name.

| Sub-block   | What it controls                                                                                  |
| ----------- | ------------------------------------------------------------------------------------------------- |
| `system`    | garak runtime knobs — verbosity, parallelism, lite mode, experimental flags.                      |
| `run`       | Per-probe generation count, random seed, evaluation threshold, optional `probe_tags` filter.      |
| `plugins`   | The probes and detectors to run (`probe_spec`, `detector_spec`) and any plugin-specific options.  |
| `reporting` | Output file prefix and directory, optional taxonomy, and which modules are surfaced in summaries. |

The full field reference is in [Configuration Schema](/documentation/vulnerability-scanning/configurations/schema).

## The Seeded Default

The plugin seeds a `default` configuration in the `system` workspace at install time. Retrieve it to see a reasonable starting point:

```python
default_config = garak.configs.get(workspace="system", name="default")
print(default_config.model_dump_json(indent=2))
```

You can pass `"system/default"` directly to `garak.run(config=..., ...)` to run an audit with the seeded configuration without creating your own.

## Create a Configuration

Build a configuration by populating any of the four sub-blocks. Omitted sub-blocks fall back to their pydantic defaults.

```python
from nemo_garak.entities import (
    AuditPluginsData,
    AuditReportData,
    AuditRunData,
    AuditSystemData,
)

config = garak.configs.create(
    workspace="default",
    name="quick-scan",
    description="Bounded scan using one probe and one generation.",
    system=AuditSystemData(lite=True, parallel_attempts=4),
    run=AuditRunData(generations=1),
    plugins=AuditPluginsData(probe_spec="goodside.Tag", detector_spec="auto"),
    reporting=AuditReportData(report_prefix="quick-scan"),
)
```

The `probe_spec` field takes a comma-separated list of probe categories or fully-qualified probe classes. See [Selecting Probes](/documentation/vulnerability-scanning/configurations/selecting-probes) for the syntax and worked examples.

## List Configurations

```python
listing = garak.configs.list(workspace="default")
for entry in listing["data"]:
    print(entry["name"], entry["description"])
```

`list()` returns the standard envelope (`data`, `pagination`, `sort`); pass `page`, `page_size`, and `sort` keyword arguments for pagination.

## Retrieve a Configuration

```python
config = garak.configs.get(workspace="default", name="quick-scan")
```

## Update a Configuration

`update()` replaces every sub-block — any sub-block you omit resets to its default. Pass each block you want to keep.

```python
updated = garak.configs.update(
    workspace="default",
    name="quick-scan",
    description="Updated probe selection.",
    system=AuditSystemData(parallel_attempts=8),
    run=AuditRunData(generations=5),
    plugins=AuditPluginsData(probe_spec="latentinjection,encoding.InjectROT13"),
    reporting=AuditReportData(report_prefix="quick-scan"),
)
```

## Delete a Configuration

```python
garak.configs.delete(workspace="default", name="quick-scan")
```