The experimental `config_to_agent` function provides a simple way to create agents from configuration files or dictionaries.

## Overview

`config_to_agent` allows you to:

-   Create agents from JSON files or dictionaries
-   Use a simple functional interface for agent instantiation
-   Support both file paths and dictionary configurations
-   Leverage the Agent class’s built-in tool loading capabilities

## Basic Usage

### Dictionary Configuration

```python
from strands.experimental import config_to_agent

# Create agent from dictionary
agent = config_to_agent({
    "model": "us.anthropic.claude-3-5-sonnet-20241022-v2:0",
    "prompt": "You are a helpful assistant"
})
```

### File Configuration

```python
from strands.experimental import config_to_agent

# Load from JSON file (with or without file:// prefix)
agent = config_to_agent("/path/to/config.json")
# or
agent = config_to_agent("file:///path/to/config.json")
```

#### Simple Agent Example

```json
{
    "prompt": "You are a helpful assistant."
}
```

#### Coding Assistant Example

```json
{
  "model": "us.anthropic.claude-3-5-sonnet-20241022-v2:0",
  "prompt": "You are a coding assistant. Help users write, debug, and improve their code. You have access to file operations and can execute shell commands when needed.",
  "tools": ["strands_tools.file_read", "strands_tools.editor", "strands_tools.shell"]
}
```

## Configuration Options

### Supported Keys

-   `model`: Model identifier (string) - \[[Only supports AWS Bedrock model provider string](/pr-cms-3708/docs/user-guide/quickstart/index.md#using-a-string-model-id)\]
-   `prompt`: System prompt for the agent (string)
-   `tools`: List of tool specifications (list of strings)
-   `name`: Agent name (string)

### Tool Loading

The `tools` configuration supports Python-specific tool loading formats:

```json
{
  "tools": [
    "strands_tools.file_read",           // Python module path
    "my_app.tools.cake_tool",            // Custom module path
    "/path/to/another_tool.py",          // File path
    "my_module.my_tool_function"         // @tool annotated function
  ]
}
```

The Agent class handles all tool loading internally, including:

-   Loading from module paths
-   Loading from file paths
-   Error handling for missing tools
-   Tool validation

Tool Loading Limitations

Configuration-based agent setup only works for tools that don’t require code-based instantiation. For tools that need constructor arguments or complex setup, use the programmatic approach after creating the agent:

```python
import http.client
from sample_module import ToolWithConfigArg

agent = config_to_agent("config.json")
# Add tools that need code-based instantiation
agent.process_tools([ToolWithConfigArg(http.client.HTTPSConnection("localhost"))])
```

### Model Configurations

The `model` property uses the [string based model id feature](/pr-cms-3708/docs/user-guide/quickstart/index.md#using-a-string-model-id). You can reference [AWS’s Model Id’s](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html) to identify a model id to use. If you want to use a different model provider, you can pass in a model as part of the `**kwargs` of the `config_to_agent` function:

```python
from strands.experimental import config_to_agent
from strands.models.openai import OpenAIModel

# Create agent from dictionary
agent = config_to_agent(
  config={"name": "Data Analyst"},
  model=OpenAIModel(
    client_args={
        "api_key": "<KEY>",
    },
    model_id="gpt-4o",
  )
)
```

Additionally, you can override the `agent.model` attribute of an agent to configure a new model provider:

```python
from strands.experimental import config_to_agent
from strands.models.openai import OpenAIModel

# Create agent from dictionary
agent = config_to_agent(
  config={"name": "Data Analyst"}
)

agent.model = OpenAIModel(
  client_args={
      "api_key": "<KEY>",
  },
  model_id="gpt-4o",
)
```

## Function Parameters

The `config_to_agent` function accepts:

-   `config`: Either a file path (string) or configuration dictionary
-   `**kwargs`: Additional [Agent constructor parameters](/pr-cms-3708/docs/api/python/strands.agent.agent#Agent.__init__) that override config values

```python
# Override config values with valid agent parameters
agent = config_to_agent(
    "/path/to/config.json",
    name="Data Analyst"
)
```

## Best Practices

1.  **Override when needed**: Use kwargs to override configuration values dynamically
2.  **Leverage agent defaults**: Only specify configuration values you want to override
3.  **Use standard tool formats**: Follow Agent class conventions for tool specifications
4.  **Handle errors gracefully**: Catch FileNotFoundError and JSONDecodeError for robust applications

## Related pages

- [Community Built Tools](/pr-cms-3708/docs/user-guide/concepts/tools/community-tools-package/index.md) (1 shared tag)
- [Creating Custom Tools](/pr-cms-3708/docs/user-guide/concepts/tools/custom-tools/index.md) (1 shared tag)
- [Vended Tools](/pr-cms-3708/docs/user-guide/concepts/tools/vended-tools/index.md) (1 shared tag)
- [Instruction Following Evaluator](/pr-cms-3708/docs/user-guide/evals-sdk/evaluators/instruction_following_evaluator/index.md) (1 shared tag)
- [Skills](/pr-cms-3708/docs/user-guide/concepts/plugins/skills/index.md) (1 shared tag)
- [Build with AI](/pr-cms-3708/docs/user-guide/build-with-ai/index.md) (1 shared tag)
- [Model Context Protocol (MCP) Tools](/pr-cms-3708/docs/user-guide/concepts/tools/mcp-tools/index.md) (1 shared tag)
- [Tools Overview](/pr-cms-3708/docs/user-guide/concepts/tools/index.md) (1 shared tag)
- [Prompt Engineering](/pr-cms-3708/docs/user-guide/safety-security/prompt-engineering/index.md) (1 shared tag)
- [Prompts](/pr-cms-3708/docs/user-guide/concepts/agents/prompts/index.md) (1 shared tag)


## Implementation

### Python

- [harness-sdk/strands-py/src/strands/experimental/agent_config.py](https://github.com/strands-agents/harness-sdk/blob/main/strands-py/src/strands/experimental/agent_config.py)
