Skip to content

[Question] Why do plugin skills use / prefix while standalone skills use $ in web UI? #342

@axisrow

Description

@axisrow

Question

In native Claude Code CLI, both plugin skills and standalone skills are invoked via /skill-name. However, in the hapi web interface, there is a difference:

  • Plugin skills (e.g., feature-dev:feature-dev) are accessible via / prefix in the autocomplete — they are registered as slash commands through scanPluginCommands() which scans <pluginDir>/commands/
  • Standalone skills (from ~/.claude/skills/) are only accessible via $ prefix — a separate trigger character with a separate discovery mechanism (listSkills())

Context

In web/src/router.tsx (lines 276-281), the autocomplete routing splits by prefix:

if (query.startsWith('$')) {
    return await getSkillSuggestions(query)  // standalone skills
}
return await getSlashSuggestions(query)      // slash commands + plugin commands

Standalone skills are served by a separate RPC endpoint (listSkills) and use $, while plugin commands are included in the slash commands list (listSlashCommands) and use /.

Is this intentional design, or should standalone skills also be accessible via / to match native Claude Code CLI behavior? Are there specific reasons for keeping $ as a separate trigger for standalone skills?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions