Description
Bug: run_skill_script approval handshake leaves function call unanswered in local Inspector
Environment
|
|
agent-framework-foundry-hosting |
1.0.0b260721 |
agent-framework-foundry |
1.10.2 |
| Agent type |
ResponsesHostServer (Responses API) |
| Run mode |
Local (azd ai agent run) |
| Inspector |
Agent Inspector (VS Code / Foundry Toolkit) |
| OS |
Windows 11 |
Description
When using a SkillsProvider with a script_runner and the default approval mode, approving the run_skill_script tool call in the Agent Inspector does not complete correctly. The tool block shows a red ✗ and the function call result is never submitted back to the Responses API. On the next turn the API rejects the request with a 400 error.
Steps to Reproduce
-
Create an agent with a file-based skill and a script_runner (you can use the 07-skills example provided by Microsoft):
skills_provider = SkillsProvider.from_paths(
skill_paths=Path(__file__).parent / "skills",
script_runner=run_local_skill_script,
# default: approvals enabled for all tools
)
agent = Agent(client=client, context_providers=[skills_provider], ...)
server = ResponsesHostServer(agent)
server.run()
-
Start the agent locally with azd ai agent run or F5 to start the service and open the Agent Inspector
-
Open the Agent Inspector and send a message that triggers run_skill_script (e.g. "Greet me" with a greet-user skill).
-
The Inspector shows an approval dialog for load_skill → approve it. ✅
-
The Inspector shows run_skill_script but stays there forever
Actual Behavior
-
After run_skill_script, the tool block shows a red ✗ and the agent hangs.
-
The script runner function is never called (confirmed by adding logging before and inside the function — the entry log never appears).
-
On the next conversation turn, the Responses API returns:
server_error: (
"<class 'agent_framework_foundry._chat_client.FoundryChatClient'> service failed to complete the prompt:
Error code: 400 - {'error': {'message': 'No tool output found for function call call_<id>.',
'type': 'invalid_request_error', 'param': 'input', 'code': None}}",
BadRequestError(...)
)
Expected Behavior
After the approval, the framework should:
- Call the registered
script_runner.
- Submit the returned string as the tool output to the Responses API.
- Allow the model to continue and produce a final reply.
Root Cause Hypothesis
The approval round-trip for run_skill_script uses the Responses API's function call / tool output mechanism. After the user clicks Approve in the Inspector, the hosting layer (ResponsesHostServer) fails to deliver the tool output back to the API in the follow-up request, leaving the function call call_<id> dangling. The API then rejects the next request because the conversation history contains an unresolved function call with no corresponding tool output.
The script_runner itself is never invoked — the failure occurs inside the framework before the runner is reached.
Workaround
Pass disable_run_skill_script_approval=True (and optionally disable_load_skill_approval=True) to SkillsProvider.from_paths(). This is safe for trusted local scripts and bypasses the broken approval round-trip entirely:
skills_provider = SkillsProvider.from_paths(
skill_paths=Path(__file__).parent / "skills",
script_runner=run_local_skill_script,
disable_load_skill_approval=True,
disable_run_skill_script_approval=True,
)
### Code Sample
```markdown
Error Messages / Stack Traces
: (
"<class 'agent_framework_foundry._chat_client.FoundryChatClient'> service failed to complete the prompt:
Error code: 400 - {'error': {'message': 'No tool output found for function call call_<id>.',
'type': 'invalid_request_error', 'param': 'input', 'code': None}}",
BadRequestError(...)
)
Package Versions
agent-framework-foundry-hosting: 1.0.0b260721, agent-framework-foundry: 1.10.2
Python Version
Python 3.13
Additional Context
With default approval values:
Screenshot 1: Waiting for approval

Screenshot 2: After approval was accepted
Screenshot 3: In second round (entered the same prompt to trigger the skill, 'Greet me')
After the workaround:
Screenshot 4: After disabling the approvals

Description
Bug:
run_skill_scriptapproval handshake leaves function call unanswered in local InspectorEnvironment
agent-framework-foundry-hosting1.0.0b260721agent-framework-foundry1.10.2ResponsesHostServer(Responses API)azd ai agent run)Description
When using a
SkillsProviderwith ascript_runnerand the default approval mode, approving therun_skill_scripttool call in the Agent Inspector does not complete correctly. The tool block shows a red ✗ and the function call result is never submitted back to the Responses API. On the next turn the API rejects the request with a400error.Steps to Reproduce
Create an agent with a file-based skill and a
script_runner(you can use the 07-skills example provided by Microsoft):Start the agent locally with
azd ai agent runorF5to start the service and open the Agent InspectorOpen the Agent Inspector and send a message that triggers
run_skill_script(e.g."Greet me"with agreet-userskill).The Inspector shows an approval dialog for
load_skill→ approve it. ✅The Inspector shows
run_skill_scriptbut stays there foreverActual Behavior
After
run_skill_script, the tool block shows a red ✗ and the agent hangs.The script runner function is never called (confirmed by adding logging before and inside the function — the entry log never appears).
On the next conversation turn, the Responses API returns:
Expected Behavior
After the approval, the framework should:
script_runner.Root Cause Hypothesis
The approval round-trip for
run_skill_scriptuses the Responses API's function call / tool output mechanism. After the user clicks Approve in the Inspector, the hosting layer (ResponsesHostServer) fails to deliver the tool output back to the API in the follow-up request, leaving the function callcall_<id>dangling. The API then rejects the next request because the conversation history contains an unresolved function call with no corresponding tool output.The
script_runneritself is never invoked — the failure occurs inside the framework before the runner is reached.Workaround
Pass
disable_run_skill_script_approval=True(and optionallydisable_load_skill_approval=True) toSkillsProvider.from_paths(). This is safe for trusted local scripts and bypasses the broken approval round-trip entirely:Error Messages / Stack Traces
: ( "<class 'agent_framework_foundry._chat_client.FoundryChatClient'> service failed to complete the prompt: Error code: 400 - {'error': {'message': 'No tool output found for function call call_<id>.', 'type': 'invalid_request_error', 'param': 'input', 'code': None}}", BadRequestError(...) )Package Versions
agent-framework-foundry-hosting: 1.0.0b260721, agent-framework-foundry: 1.10.2
Python Version
Python 3.13
Additional Context
With default approval values:

Screenshot 1: Waiting for approval
Screenshot 2: After approval was accepted
Screenshot 3: In second round (entered the same prompt to trigger the skill, 'Greet me')
After the workaround:
Screenshot 4: After disabling the approvals
