Dynamic Tools

Add or remove tools dynamically based on runtime dependencies.

Dynamic Tools.

1"""
2Dynamic Tools
3=============================
4
5Dynamic Tools.
6"""
7
8from datetime import datetime
9
10from kern.agent import Agent
11from kern.models.openai import OpenAIResponses
12from kern.run import RunContext
13
14
15def get_runtime_tools(run_context: RunContext):
16 """Return tools dynamically based on session state."""
17
18 def get_time() -> str:
19 return datetime.utcnow().isoformat()
20
21 def get_project() -> str:
22 project = (run_context.session_state or {}).get("project", "unknown")
23 return f"Current project: {project}"
24
25 return [get_time, get_project]
26
27
28# ---------------------------------------------------------------------------
29# Create Agent
30# ---------------------------------------------------------------------------
31agent = Agent(
32 name="Dynamic Tools Agent",
33 model=OpenAIResponses(id="gpt-5.2"),
34 tools=get_runtime_tools,
35)
36
37# ---------------------------------------------------------------------------
38# Run Agent
39# ---------------------------------------------------------------------------
40if __name__ == "__main__":
41 agent.print_response(
42 "Use available tools to report current context.",
43 session_state={"project": "cookbook-restructure"},
44 stream=True,
45 )

Run the Example

1# Clone and setup repo
2git clone https://github.com/kern-ai/kern.git
3cd kern/cookbook/02_agents/15_dependencies
4
5# Create and activate virtual environment
6./scripts/demo_setup.sh
7source .venvs/demo/bin/activate
8
9python dynamic_tools.py