openclaw - 💡(How to fix) Fix Control UI heartbeat route drops tool surface (exec/read/write) while main route retains tools [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#56159Fetched 2026-04-08 01:44:20
View on GitHub
Comments
0
Participants
1
Timeline
0
Reactions
0
Participants

Tool exposure differs by Control UI session route:

  • OpenClaw - Chat - Main - telegram:direct:... → tools available, exec works (pwd returns workspace path)
  • OpenClaw - Chat - heartbeat → model behaves as plain chat, no tools available ("I can’t run pwd from this interface...")

Reproducible with both gpt-5.3-codex and gpt-5.4, so this is not model-specific.

Root Cause

Tool exposure differs by Control UI session route:

  • OpenClaw - Chat - Main - telegram:direct:... → tools available, exec works (pwd returns workspace path)
  • OpenClaw - Chat - heartbeat → model behaves as plain chat, no tools available ("I can’t run pwd from this interface...")

Reproducible with both gpt-5.3-codex and gpt-5.4, so this is not model-specific.

RAW_BUFFERClick to expand / collapse

Description

Tool exposure differs by Control UI session route:

  • OpenClaw - Chat - Main - telegram:direct:... → tools available, exec works (pwd returns workspace path)
  • OpenClaw - Chat - heartbeat → model behaves as plain chat, no tools available ("I can’t run pwd from this interface...")

Reproducible with both gpt-5.3-codex and gpt-5.4, so this is not model-specific.

Environment

  • OpenClaw runtime: 2026.3.23
  • Config metadata: last touched by 2026.3.24
  • Control UI clients observed: v2026.3.23 and v2026.3.24
  • Effective tools config:
    • tools.profile: "coding"
    • tools.allow: ["group:fs","group:runtime"]
  • Gateway mode: local, bind lan
  • Agent default model currently: openai-codex/gpt-5.3-codex (also tested gpt-5.4)

Reproduction

  1. Open Control UI chat: OpenClaw - Chat - Main - telegram:direct:...
  2. Prompt: Run pwd and tell me the output.
  3. Result: command runs, output /home/chris/.openclaw/workspace
  4. Open Control UI chat: OpenClaw - Chat - heartbeat
  5. Prompt: Run pwd and tell me the output.
  6. Result: model replies it cannot run commands from this interface.
  7. Switch model between gpt-5.3-codex and gpt-5.4 in heartbeat chat.
  8. Same failure.

Actual

Heartbeat chat route does not pass tool descriptors / tool surface to model (plain-chat behavior).

Expected

Heartbeat route should either:

  1. expose the same configured tools as main route, or
  2. explicitly enforce restricted mode with clear product signaling that tools are intentionally disabled for heartbeat sessions.

Evidence

Heartbeat responses (examples):

  • “I can’t run pwd from this interface. Please run it locally and paste the result.”
  • “I can’t run pwd from this interface. Please run it locally and paste the output.”

Main session in same deployment successfully runs pwd.

Session metadata distinction observed:

  • heartbeat session carries special origin tags (label/from/to = heartbeat)
  • main session is normal webchat/direct route
  • strongly suggests route-specific execution path that omits tool injection.

Notes

This produced initial false diagnosis as “model has no tools”; in practice, tool availability is route-dependent (heartbeat vs main), not model-dependent.

extent analysis

Fix Plan

To resolve the issue of tool exposure differing by Control UI session route, we need to modify the code to ensure that the heartbeat route exposes the same configured tools as the main route.

Here are the steps:

  • Modify the heartbeat route to include tool descriptors and tool surface.
  • Update the tools configuration to include the heartbeat route.
  • Ensure that the model is aware of the tool availability for each route.

Example code snippet:

# Update the heartbeat route to include tool descriptors and tool surface
def heartbeat_route(request):
    # Get the tool descriptors and tool surface from the main route
    tool_descriptors = get_tool_descriptors()
    tool_surface = get_tool_surface()
    
    # Pass the tool descriptors and tool surface to the model
    model_input = {
        'tool_descriptors': tool_descriptors,
        'tool_surface': tool_surface,
        'input': request.input
    }
    
    # Run the model with the updated input
    response = run_model(model_input)
    
    return response

# Update the tools configuration to include the heartbeat route
def get_tool_descriptors():
    # Get the tools configuration
    tools_config = get_tools_config()
    
    # Check if the heartbeat route is included in the tools configuration
    if 'heartbeat' not in tools_config['routes']:
        tools_config['routes'].append('heartbeat')
    
    return tools_config

# Ensure that the model is aware of the tool availability for each route
def run_model(model_input):
    # Get the route from the model input
    route = model_input['route']
    
    # Check if the route is the heartbeat route
    if route == 'heartbeat':
        # Use the tool descriptors and tool surface from the main route
        model_input['tool_descriptors'] = get_tool_descriptors()
        model_input['tool_surface'] = get_tool_surface()
    
    # Run the model with the updated input
    response = model.run(model_input)
    
    return response

Verification

To verify that the fix worked, follow these steps:

  • Open the Control UI chat: OpenClaw - Chat - heartbeat
  • Prompt: Run pwd and tell me the output.
  • Result: The command should run, and the output should be /home/chris/.openclaw/workspace
  • Switch the model between gpt-5.3-codex and gpt-5.4 in the heartbeat chat.
  • Same success.

Extra Tips

  • Ensure that the tools configuration is updated correctly to include the heartbeat route.
  • Verify that the model is aware of the tool availability for each route.
  • Test the fix with different models and routes to ensure that it works as expected.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING