Confirmation Required with History

This example demonstrates human-in-the-loop functionality while maintaining conversation history. It shows how user confirmation works when the agent has access to previous conversation context.

Create a Python file

1import json
2
3import httpx
4from kern.agent import Agent
5from kern.db.sqlite import SqliteDb
6from kern.models.openai import OpenAIResponses
7from kern.tools import tool
8from kern.utils import pprint
9from rich.console import Console
10from rich.prompt import Prompt
11
12console = Console()
13
14
15@tool(requires_confirmation=True)
16def get_top_hackernews_stories(num_stories: int) -> str:
17 """Fetch top stories from Hacker News.
18
19 Args:
20 num_stories (int): Number of stories to retrieve
21
22 Returns:
23 str: JSON string containing story details
24 """
25 # Fetch top story IDs
26 response = httpx.get("https://hacker-news.firebaseio.com/v0/topstories.json")
27 story_ids = response.json()
28
29 # Yield story details
30 all_stories = []
31 for story_id in story_ids[:num_stories]:
32 story_response = httpx.get(
33 f"https://hacker-news.firebaseio.com/v0/item/{story_id}.json"
34 )
35 story = story_response.json()
36 if "text" in story:
37 story.pop("text", None)
38 all_stories.append(story)
39 return json.dumps(all_stories)
40
41
42agent = Agent(
43 model=OpenAIResponses(id="gpt-5.2"),
44 tools=[get_top_hackernews_stories],
45 add_history_to_context=True,
46 num_history_runs=2,
47 markdown=True,
48 db=SqliteDb(db_file="tmp/example.db"),
49)
50
51agent.run("What can you do?")
52
53run_response = agent.run("Fetch the top 2 hackernews stories.")
54if run_response.is_paused:
55 for requirement in run_response.active_requirements:
56 if requirement.needs_confirmation:
57 # Ask for confirmation
58 console.print(
59 f"Tool name [bold blue]{requirement.tool_execution.tool_name}({requirement.tool_execution.tool_args})[/] requires confirmation."
60 )
61 message = (
62 Prompt.ask("Do you want to continue?", choices=["y", "n"], default="y")
63 .strip()
64 .lower()
65 )
66
67 if message == "n":
68 requirement.reject()
69 else:
70 requirement.confirm()
71
72run_response = agent.continue_run(
73 run_id=run_response.run_id,
74 requirements=run_response.requirements,
75)
76pprint.pprint_run_response(run_response)

Set up your virtual environment

1uv venv --python 3.12
2source .venv/bin/activate
1uv venv --python 3.12
2.venv\Scripts\activate

Install dependencies

1uv pip install -U kern-ai openai httpx rich

Export your OpenAI API key

1export OPENAI_API_KEY="your_openai_api_key_here"
1$Env:OPENAI_API_KEY="your_openai_api_key_here"

Run Agent

1python confirmation_required_with_history.py