open-webui / open-webui/open-webui

issue: selecting a skill from the `/` menu inserts `<@id|label>`, which the backend silently ignores

Open
#29,978 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug confirmed issue
Dominant language
Python
Stars
153k
Forks
22.3k
Avg merge
1d 4h
Merged PRs (30d)
194

Description

Before Submitting
  • I searched open and closed issues and discussions for an existing report.
  • I checked whether this is already fixed on the dev branch or latest source.
  • I understand that maintainers want a well-written issue before any code pull request.
  • I am using the latest available version of Open WebUI for my install method.
  • This is not a security vulnerability.
Installation Method

Docker

Open WebUI Version

v0.11.3

Operating System

ubuntu

Browser

No response

Ollama Version

No response

Summary

Selecting a skill from the / command menu produces a mention tag with @ as the
trigger char. The backend's skill-mention regex accepts only $ and /, so the skill
is never loaded. Because the same regex is what strips the markup, the raw tag also
stays in the message and reaches the model, which then improvises a non-existent
skill protocol. Selecting the same skill from the $ menu works.

Steps to reproduce

  1. Create an active skill (e.g. id es).
  2. In a chat, type /, pick that skill from the list, add a question, send.
  3. Inspect the stored message: it contains <@es|label>.

Expected: the skill's full content is injected (the / path is explicitly
supported — see the ch === '/' ? '$' : ch remap in the serializer).

Root cause

/ is the only mention-producing trigger with a custom command that builds the
node by hand, in src/lib/components/chat/MessageInput.svelte:

char: '/',
command: ({ editor, range, props }) => {
    ...
    .insertContentAt(range, [
        { type: 'mention', attrs: props },
        { type: 'text', text: ' ' }
    ])

### Expected Behavior

**Expected:** the skill's full content is injected (the `/` path is explicitly
supported — see the `ch === '/' ? '$' : ch` remap in the serializer).

### Actual Behavior

**Actual:** nothing is injected, the raw tag is left in the user message, and the
model receives `<@es|label>` as literal text.


### Steps to Reproduce

1. Create an active skill (e.g. id `es`).
2. In a chat, type `/`, pick that skill from the list, add a question, send.
3. Inspect the stored message: it contains `<@es|label>`.

### Logs, Screenshots, and Config

**Root cause**

`/` is the only mention-producing trigger with a custom `command` that builds the
node by hand, in `src/lib/components/chat/MessageInput.svelte`:

```js
char: '/',
command: ({ editor, range, props }) => {
    ...
    .insertContentAt(range, [
        { type: 'mention', attrs: props },
        { type: 'text', text: ' ' }
    ])

### Additional Information

_No response_

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in src/lib/components/chat/MessageInput.svelte at the / command's custom command and trace how its mention node is serialized, including the ch === '/' ? '$' : ch remap. Reproduce the issue with an active skill, then verify that selecting it from / produces a tag the backend recognizes, injects the skill content, and does not leave raw markup in the stored message.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
backend, frontend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
74/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.