openclaw - 💡(How to fix) Fix [Bug]: tools.profile: "coding" [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#62516Fetched 2026-04-08 03:03:12
View on GitHub
Comments
0
Participants
1
Timeline
1
Reactions
0
Author
Participants
Timeline (top)
labeled ×1

With top-level "tools.profile": "coding" configured, openclaw agent --agent main --json --message "List every tool available to you right now." produced systemPromptReport.tools.entries: [] in the JSON output.

Root Cause

With top-level "tools.profile": "coding" configured, openclaw agent --agent main --json --message "List every tool available to you right now." produced systemPromptReport.tools.entries: [] in the JSON output.

Code Example

Observed command outputs:

openclaw config get agents

{
  "defaults": {
    "model": {
      "primary": "openai-codex/gpt-5.4",
      "fallbacks": [
        "ollama/qwen3.5:9b"
      ]
    },
    "models": {
      "openai-codex/gpt-5.4": {
        "alias": "GPT-5.4"
      },
      "ollama/qwen3.5:9b": {
        "alias": "Qwen 3.5 9B"
      }
    },
    "workspace": "/home/claw/.openclaw/workspace"
  },
  "list": [
    {
      "id": "main",
      "model": "openai-codex/gpt-5.4",
      "tools": {
        "allow": [
          "browser",
          "gmail-tools",
          "gmail_send",
          "gmail_search",
          "gmail_read"
        ],
        "deny": [
          "exec",
          "web_search",
          "web_fetch"
        ]
      }
    }
  ]
}

openclaw plugins inspect browser

Browser
id: browser
Status: loaded
Tools:
(anonymous)

openclaw plugins inspect gmail-tools

Gmail Tools
id: gmail-tools
Status: loaded
Tools:
gmail_search [optional]
gmail_read [optional]
gmail_send [optional]

Before removing tools.profile:

"systemPromptReport": {
  ...
  "tools": {
    "listChars": 0,
    "schemaChars": 0,
    "entries": []
  }
}

After removing tools.profile and restarting:

"systemPromptReport": {
  ...
  "tools": {
    "entries": [
      { "name": "gmail_search" },
      { "name": "gmail_read" },
      { "name": "gmail_send" },
      { "name": "browser" }
    ]
  }
}

After removing tools.profile, these commands also completed successfully:

    Use gmail_search to find the 3 most recent emails from the last 7 days and summarize sender and subject only.
    Use browser to report browser status only.
RAW_BUFFERClick to expand / collapse

Bug type

Behavior bug (incorrect output/state without crash)

Beta release blocker

No

Summary

With top-level "tools.profile": "coding" configured, openclaw agent --agent main --json --message "List every tool available to you right now." produced systemPromptReport.tools.entries: [] in the JSON output.

Steps to reproduce

  1. Configure ~/.openclaw/openclaw.json with:

    agents.list[0].id = "main" agents.list[0].tools.allow = ["browser", "gmail-tools", "gmail_send", "gmail_search", "gmail_read"] top-level "tools.profile": "coding" plugins enabled for browser and gmail-tools

  2. run: openclaw gateway restart openclaw agent --agent main --json --message "List every tool available to you right now."

  3. Observe that the JSON output contains: "tools": { "entries": [] }

  4. Remove top-level "tools.profile" from ~/.openclaw/openclaw.json

  5. run: openclaw gateway restart openclaw agent --agent main --json --message "List every tool available to you right now."

  6. Observe that the JSON output now contains tool entries for:

    gmail_search gmail_read gmail_send browser

Expected behavior

After removing "tools.profile", the same command injected tool entries for gmail_search, gmail_read, gmail_send, and browser. Based on that observed behavior, the expected result is that these tools are injected for this agent configuration.

Actual behavior

When "tools.profile": "coding" was present, the command completed successfully but the JSON output included:

"systemPromptReport": { ... "tools": { "entries": [] } }

The model reply in that run said no live external tools were available. After removing "tools.profile" and restarting the gateway, the same command returned injected tool entries for gmail_search, gmail_read, gmail_send, and browser.

OpenClaw version

2026.4.5 (3e72c03)

Operating system

Linux, Pop!_OS

Install method

npm

Model

openai-codex/gpt-5.4

Provider / routing chain

openai-codex

Additional provider/model setup details

Agent config observed via openclaw config get agents:

{ "defaults": { "model": { "primary": "openai-codex/gpt-5.4", "fallbacks": [ "ollama/qwen3.5:9b" ] } }, "list": [ { "id": "main", "model": "openai-codex/gpt-5.4", "tools": { "allow": [ "browser", "gmail-tools", "gmail_send", "gmail_search", "gmail_read" ], "deny": [ "exec", "web_search", "web_fetch" ] } } ] }

Relevant redacted config shape observed from ~/.openclaw/openclaw.json:

{ "tools": { "profile": "coding" }, "plugins": { "load": { "paths": [ "~/.openclaw/openclaw-tools/gmail-tools" ] }, "entries": { "browser": { "enabled": true }, "gmail-tools": { "enabled": true }, "openai": { "enabled": true }, "ollama": { "enabled": true } } } }

Logs, screenshots, and evidence

Observed command outputs:

openclaw config get agents

{
  "defaults": {
    "model": {
      "primary": "openai-codex/gpt-5.4",
      "fallbacks": [
        "ollama/qwen3.5:9b"
      ]
    },
    "models": {
      "openai-codex/gpt-5.4": {
        "alias": "GPT-5.4"
      },
      "ollama/qwen3.5:9b": {
        "alias": "Qwen 3.5 9B"
      }
    },
    "workspace": "/home/claw/.openclaw/workspace"
  },
  "list": [
    {
      "id": "main",
      "model": "openai-codex/gpt-5.4",
      "tools": {
        "allow": [
          "browser",
          "gmail-tools",
          "gmail_send",
          "gmail_search",
          "gmail_read"
        ],
        "deny": [
          "exec",
          "web_search",
          "web_fetch"
        ]
      }
    }
  ]
}

openclaw plugins inspect browser

Browser
id: browser
Status: loaded
Tools:
(anonymous)

openclaw plugins inspect gmail-tools

Gmail Tools
id: gmail-tools
Status: loaded
Tools:
gmail_search [optional]
gmail_read [optional]
gmail_send [optional]

Before removing tools.profile:

"systemPromptReport": {
  ...
  "tools": {
    "listChars": 0,
    "schemaChars": 0,
    "entries": []
  }
}

After removing tools.profile and restarting:

"systemPromptReport": {
  ...
  "tools": {
    "entries": [
      { "name": "gmail_search" },
      { "name": "gmail_read" },
      { "name": "gmail_send" },
      { "name": "browser" }
    ]
  }
}

After removing tools.profile, these commands also completed successfully:

    Use gmail_search to find the 3 most recent emails from the last 7 days and summarize sender and subject only.
    Use browser to report browser status only.

Impact and severity

Affected users/systems/channels: observed on a local OpenClaw CLI + gateway setup using openclaw agent --agent main --json Severity: blocks tool use for the tested agent configuration Frequency: observed consistently before removing "tools.profile" and resolved after removing it Consequence: the agent run had no injected tools in systemPromptReport.tools.entries, and tool-using prompts did not have access to browser/Gmail tools until the config was changed

Additional information

openclaw config get agents.main returned:

Config path not found: agents.main

openclaw agent --help showed supported flags including --json, --local, --message, --timeout, and --verbose.

One tweak I’d recommend before filing:

change “Operating system” from Linux, Pop!_OS to the exact output of uname -a or /etc/os-release if you want it cleaner and more defensible. If not, this is still usable.

extent analysis

TL;DR

Removing the top-level "tools.profile" configuration from ~/.openclaw/openclaw.json resolves the issue of missing tool entries in the JSON output.

Guidance

  1. Verify the configuration: Check the ~/.openclaw/openclaw.json file for the presence of the "tools.profile" configuration and its value.
  2. Remove "tools.profile": Remove the top-level "tools.profile" configuration from ~/.openclaw/openclaw.json to resolve the issue.
  3. Restart the gateway: After removing "tools.profile", restart the OpenClaw gateway using openclaw gateway restart to apply the changes.
  4. Test the agent: Run the OpenClaw agent with the --json flag and verify that the tool entries are present in the JSON output.
  5. Check tool availability: Test the availability of tools by running commands that use the tools, such as Use gmail_search to find the 3 most recent emails from the last 7 days and summarize sender and subject only.

Example

No code snippet is provided as the issue is related to configuration and not code.

Notes

The exact cause of the issue is not specified, but removing the "tools.profile" configuration resolves the problem. It is recommended to test the agent and tools after removing the configuration to ensure that they are working as expected.

Recommendation

Apply the workaround by removing the top-level "tools.profile" configuration from ~/.openclaw/openclaw.json, as it resolves the issue of missing tool entries in the JSON output.

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

After removing "tools.profile", the same command injected tool entries for gmail_search, gmail_read, gmail_send, and browser. Based on that observed behavior, the expected result is that these tools are injected for this agent configuration.

Still need to ship something?

×6

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

Back to top recommendations

TRENDING