# `SuperPi.Harness.Defaults`
[🔗](https://github.com/oleksandr/super-pi-beam/blob/v0.1.0/lib/super_pi/harness/defaults.ex#L1)

Builds the `pi.agent` defaults of a harness declared with `use SuperPi.Harness`.

Each setting resolves in one order: the caller's `opts`, then the harness declaration, then the
application environment, then a fallback.

| Setting | opts | Application environment | Fallback |
|---|---|---|---|
| model | `:model` | `config :super_pi, :default_model` | `"gemini-3-flash-preview"` |
| effort | `:effort` | | `"medium"` |
| executionMode | `:mode` | | `"accept-edits"` |
| workspacePaths | `:workspace_paths` | `:workspace_paths` (`:knowledge_paths` for `workspace: :knowledge_paths`) | working directory |
| systemSections | `:system_sections` | | the declared `prompt` |

The tool loadout is `:all`, `{:only, names}` or `{:except, names}`, resolved against
`SuperPi.Tools.active_llm_tools/0`.

# `build`

```elixir
@spec build(module(), keyword()) :: map()
```

Builds the `pi.agent` map for `module` (a module that used `SuperPi.Harness`).

# `capabilities`

```elixir
@spec capabilities(module()) :: map()
```

Machine-readable summary of `module`, derived from its declaration. `"plugins"` lists plugin ids
in load order; `"tools"` is `"all"`, `%{"only" => names}` or `%{"except" => names}`;
`"workspace"` is the workspace kind; `"network"` is `false` when the workspace turns off the
`:net` capability.

# `default_model`

```elixir
@spec default_model() :: String.t()
```

Model for a harness that does not name one. Set it with `config :super_pi, :default_model`.

# `model_route`

```elixir
@spec model_route() :: keyword()
```

Options for `SuperPi.Plugins.JevRouter` from `config :super_pi, :planning_model` and
`:implementation_model`. A model that is not configured is left out, so the router keeps its own
fallback.

# `resolve_tools`

```elixir
@spec resolve_tools(:all | {:only, [String.t()]} | {:except, [String.t()]}) :: [map()]
```

Resolves a tool loadout against the tool catalog.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
