openclaw - 💡(How to fix) Fix [Bug]: Plugin tool is exposed in TUI/webchat, but runtime invocation bypasses or corrupts installed plugin executor arguments [1 comments, 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#68606Fetched 2026-04-19 15:09:39
View on GitHub
Comments
1
Participants
1
Timeline
2
Reactions
0
Participants
Timeline (top)
commented ×1labeled ×1

Summary

In a fresh OpenClaw TUI/webchat session, BlinkAI plugin tools are exposed as
callable tools and can be invoked. However, at least one tool,
blinkai_location_save, does not execute as expected through the OpenClaw
runtime bridge even though:

  • the Blink backend endpoint works correctly when called directly,
  • the installed plugin source/dist code appears correct,
  • the tool is visible in the session tool registry.

This suggests an OpenClaw plugin tool execution/binding bug, not a Blink API
bug.

Environment

  • Surface: openclaw-tui / webchat
  • Session key: agent:main:main
  • Installed plugin id: blinkai
  • Installed package: blinkai-openclaw-1.0.5.tgz
  • Installed hook path: /Users/alex/.openclaw/hooks/blinkai-openclaw

Relevant config:

  • plugin enabled in openclaw.json
  • plugin allowed in plugins.allow
  • plugin also present in tools.alsoAllow
  • session tool schema includes Blink tools, including blinkai_location_save

Expected behavior

Calling blinkai_location_save with:

{                                                                             
  "name": "Home",                                                             
  "note": "Saved from current Blink live location"                            
}

should save the current location with:

  • name: "Home"
  • note: "Saved from current Blink live location"

Actual behavior

The tool call succeeds, uses current live coordinates, but the saved place
returned by Blink has:

  • name: ""
  • note: null

Example result:

  {                                                                             
    "ok": true,                                                                 
    "summary": "Saved location .",                                              
    "data": {                                                                   
      "saved": true,                                                            
      "replaced": false,                                                        
      "place": {                                                                
        "name": "",                                                             
        "latitude": 45.75730083390444,                                          
        "longitude": 22.902830673894204,                                        
        "radiusMeters": 180,                                                    
        "note": null,                                                           
        "source": "openclaw",                                                   
        "updatedAt": "2026-04-18T14:24:50.445402Z"                              
      }                                                                         
    }                                                                           
  }

Why this appears to be an OpenClaw bug

Root Cause

Suspected root causes

Code Example

{                                                                             
    "name": "Home",                                                             
    "note": "Saved from current Blink live location"                            
  }

---

{                                                                             
    "ok": true,                                                                 
    "summary": "Saved location .",                                              
    "data": {                                                                   
      "saved": true,                                                            
      "replaced": false,                                                        
      "place": {                                                                
        "name": "",                                                             
        "latitude": 45.75730083390444,                                          
        "longitude": 22.902830673894204,                                        
        "radiusMeters": 180,                                                    
        "note": null,                                                           
        "source": "openclaw",                                                   
        "updatedAt": "2026-04-18T14:24:50.445402Z"                              
      }                                                                         
    }                                                                           
  }

---

{                                                                             
    "name": "Home Test B",                                                      
    "note": "note-b"                                                            
  }

---

const payload = {                                                             
    name: resolvedName,                                                         
    ...buildOptionalLocationPayload( normalizedArgs),                           
    ...(normalizedArgs.note != null && String(normalizedArgs.note).trim () ? {  
note: String(normalizedArgs.note).trim () } : {}),                              
    source: String(normalizedArgs.source ?? 'openclaw').trim() || 'openclaw',   
  };

---

{                                                                             
    "tool": "blinkai_location_save",                                            
    "arguments": {                                                              
      "name": "Home",                                                           
      "note": "Saved from current Blink live location"                          
    }                                                                           
  }

---

{                                                                           
      "name": "Home",                                                           
      "note": "Saved from current Blink live location"                          
    }

---
RAW_BUFFERClick to expand / collapse

Bug type

Behavior bug (incorrect output/state without crash)

Beta release blocker

No

Summary

Summary

In a fresh OpenClaw TUI/webchat session, BlinkAI plugin tools are exposed as
callable tools and can be invoked. However, at least one tool,
blinkai_location_save, does not execute as expected through the OpenClaw
runtime bridge even though:

  • the Blink backend endpoint works correctly when called directly,
  • the installed plugin source/dist code appears correct,
  • the tool is visible in the session tool registry.

This suggests an OpenClaw plugin tool execution/binding bug, not a Blink API
bug.

Environment

  • Surface: openclaw-tui / webchat
  • Session key: agent:main:main
  • Installed plugin id: blinkai
  • Installed package: blinkai-openclaw-1.0.5.tgz
  • Installed hook path: /Users/alex/.openclaw/hooks/blinkai-openclaw

Relevant config:

  • plugin enabled in openclaw.json
  • plugin allowed in plugins.allow
  • plugin also present in tools.alsoAllow
  • session tool schema includes Blink tools, including blinkai_location_save

Expected behavior

Calling blinkai_location_save with:

{                                                                             
  "name": "Home",                                                             
  "note": "Saved from current Blink live location"                            
}

should save the current location with:

  • name: "Home"
  • note: "Saved from current Blink live location"

Actual behavior

The tool call succeeds, uses current live coordinates, but the saved place
returned by Blink has:

  • name: ""
  • note: null

Example result:

  {                                                                             
    "ok": true,                                                                 
    "summary": "Saved location .",                                              
    "data": {                                                                   
      "saved": true,                                                            
      "replaced": false,                                                        
      "place": {                                                                
        "name": "",                                                             
        "latitude": 45.75730083390444,                                          
        "longitude": 22.902830673894204,                                        
        "radiusMeters": 180,                                                    
        "note": null,                                                           
        "source": "openclaw",                                                   
        "updatedAt": "2026-04-18T14:24:50.445402Z"                              
      }                                                                         
    }                                                                           
  }

Why this appears to be an OpenClaw bug

1. Direct Blink API calls work correctly

Direct POSTs to Blink using the same token/base URL succeed and preserve both
name and note.

Successful direct payload:

  {                                                                             
    "name": "Home Test B",                                                      
    "note": "note-b"                                                            
  }

Response preserves both fields.

Also confirmed that Blink rejects wrapper/synonym payloads like:

  • label
  • title
  • placeName
  • { "payload": { "name": "..." } }

with validation errors requiring top-level name.

So the Blink backend contract is clear and functioning.

2. Installed plugin code appears correct

Installed file:

  • /Users/alex/.openclaw/hooks/blinkai-openclaw/dist/tools/places.js

saveLocation() constructs:

  const payload = {                                                             
    name: resolvedName,                                                         
    ...buildOptionalLocationPayload( normalizedArgs),                           
    ...(normalizedArgs.note != null && String(normalizedArgs.note).trim () ? {  
note: String(normalizedArgs.note).trim () } : {}),                              
    source: String(normalizedArgs.source ?? 'openclaw').trim() || 'openclaw',   
  };

So if it receives name and note, it should forward them.

3. Session tool schema shows the tool is present

/Users/alex/.openclaw/agents/main/sessions/sessions.json for agent:main:main
shows Blink tools in the active tool schema, including blinkai_location_save.

So this is not simple non-exposure anymore.

4. Instrumentation in the installed plugin function did not fire

A debug append was added inside the installed saveLocation() implementation to
write a JSONL trace file when entered.

Expected debug file:

  • ~/.openclaw/extensions/blinkai/places-debug.jsonl

After invoking blinkai_location_save, the file was not created.

This suggests the observed tool call may not actually be executing the installed plugin function path, even though the tool is visible and returns a result.

Minimal repro

  1. Install BlinkAI plugin from archive and enable it.
  2. Ensure Blink tools appear in the session tool registry.
  3. Start a fresh openclaw-tui/webchat direct session.
  4. Invoke:
  {                                                                             
    "tool": "blinkai_location_save",                                            
    "arguments": {                                                              
      "name": "Home",                                                           
      "note": "Saved from current Blink live location"                          
    }                                                                           
  }
  1. Observe returned place has empty name and null note.
  2. Directly call Blink /location/save with the same payload and observe correct behavior.

Suspected root causes

Likely one of:

  1. plugin tool args are being transformed or dropped before invocation
  2. OpenClaw is executing a cached/generated tool binding rather than the current installed plugin function
  3. TUI/webchat plugin tools use a different execution bridge than expected,
    bypassing the installed module path
  4. tool schema exposure and runtime executor binding are coming from different
    registry snapshots

Conclusion

This appears to be an OpenClaw plugin tool execution/binding bug on the
TUI/webchat path, not a Blink plugin packaging bug and not a Blink backend API
bug.

Steps to reproduce

. Install and enable the BlinkAI plugin in OpenClaw.
2. Ensure Blink tools appear in the active session tool schema, including
blinkai_location_save.
3. Start a fresh openclaw-tui / webchat direct session.
4. Call blinkai_location_save with:

  {                                                                           
    "name": "Home",                                                           
    "note": "Saved from current Blink live location"                          
  }
  1. Observe that the tool call succeeds, but the returned saved place has:
    • name: ""
    • note: null
  2. Then directly call Blink’s /location/save endpoint with the same payload and token.
  3. Observe that the direct API call correctly preserves:
    • name: "Home"
    • note: "Saved from current Blink live location"

Expected behavior

The arguments should be passed correctly.

Seems just strings have this issue

Actual behavior

Strings are not passed

OpenClaw version

lastest one

Operating system

Mac

Install method

oficial way from the website

Model

gpt-5.4

Provider / routing chain

openai-codex

Additional provider/model setup details

No response

Logs, screenshots, and evidence

Impact and severity

No response

Additional information

No response

extent analysis

TL;DR

The issue is likely due to OpenClaw's plugin tool execution or binding bug, causing the blinkai_location_save tool to not pass string arguments correctly.

Guidance

  1. Verify plugin installation: Ensure the BlinkAI plugin is correctly installed and enabled in OpenClaw, and its tools are exposed in the session tool registry.
  2. Check tool invocation: Confirm that the blinkai_location_save tool is being invoked correctly with the expected arguments, and that the issue is not due to a misconfiguration or incorrect usage.
  3. Investigate OpenClaw's execution bridge: Look into how OpenClaw executes plugin tools, specifically the TUI/webchat path, to determine if there's an issue with the execution bridge or binding.
  4. Test with different data types: Try passing non-string arguments to the blinkai_location_save tool to see if the issue is specific to strings or a more general problem.

Example

No specific code example is provided, as the issue seems to be related to OpenClaw's internal workings. However, you can try modifying the saveLocation() function in the places.js file to log or debug the payload object being constructed to see if the issue lies in the data being passed.

Notes

The issue appears to be specific to OpenClaw's TUI/webchat path and may not be related to the Blink backend API or the plugin's packaging. The fact that direct API calls to Blink work correctly suggests that the issue is with OpenClaw's plugin tool execution or binding.

Recommendation

Apply a workaround by modifying the saveLocation() function to handle string arguments differently, or wait for an update to OpenClaw that addresses the plugin tool execution or binding bug.

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…

FAQ

Expected behavior

The arguments should be passed correctly.

Seems just strings have this issue

Still need to ship something?

×6

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

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix [Bug]: Plugin tool is exposed in TUI/webchat, but runtime invocation bypasses or corrupts installed plugin executor arguments [1 comments, 1 participants]