---
title: "Dynamic Agents"
description: "Learn how to create agents with dynamic system prompts that update automatically using real time data"
---

## Dynamic System Prompts

Agents support dynamic system prompts that can include live data through template functions. These functions are executed each time the agent runs, providing fresh context.

Use `{module::function}` syntax to embed dynamic values:

```python
agent = Agent(
    name="dynamic_agent",
    model="openai/gpt-4o-mini",
    system_prompt="""You are a time-aware assistant.
    Current time: {datetime::datetime.now}."""
)
```

The previous example used a built-in function (datetime). You can also create your own custom functions:

```python
# my_functions.py
def get_server_status():
    """Get server status."""
    status = check_server()  # Calls external function
    return f"Server: {status}"

agent = Agent(
    name="custom_agent", 
    model="openai/gpt-4o-mini",
    system_prompt="""You are a helpful assistant.
    Status: {my_functions::get_server_status}."""
)
```

You can also pass dynamic parameters to these functions using `RunContext` data that you previously set in the context.

```python
# my_functions.py
from timbal.core import Tool, Agent
from timbal.state import get_run_context

def get_user_language():
    return get_run_context().get_data(".input.language")

def set_user_language(l):
  context = get_run_context().set_data("user_lang", "catalan")

agent = Agent(
    name="multilang_agent",
    model="openai/gpt-4o-mini",
    pre_hook=set_user_language,
    system_prompt="Answer in {my_functions::get_user_language}."
)

await agent(prompt="Which is the capital of Germany?").collect()
```

The response will be in Catalan.

**Benefits:**

- Real-time context: System prompts reflect current state
- Dynamic behavior: Agent adapts to changing conditions
- Automatic execution: Functions run on each conversation
- Performance: Template resolution is fast and cached
- Sync/Async: Handles both sync and async functions automatically
