Skip to content

[BUG] TUI - Non-built-in skill slash commands silently drop user arguments/prompt #200

@flora131

Description

@flora131

Description

When invoking a non-built-in (disk-discovered) skill via a slash command with arguments, the user's prompt/arguments are silently dropped. The skill instructions are loaded and sent to the agent correctly, but the user's request is never included — so the agent responds as if no task was specified, typically prompting the user back to ask what they want to do.

Steps to Reproduce

  1. Have a non-built-in skill registered (e.g., a custom skill defined in .github/skills/, .claude/skills/, or .opencode/skills/ via a SKILL.md file)
  2. In the Atomic terminal, type a slash command with arguments:
    /my-custom-skill Please complete this task for me.
    
  3. Press Enter

Expected Behavior

The agent should receive both the skill's instructions and the user's request ("Please complete this task for me."), and act on the user's request within the context of the skill.

Actual Behavior

The agent receives only the skill's instructions from the SKILL.md file. The user's arguments ("Please complete this task for me.") are silently discarded. The agent then responds based solely on the generic skill prompt — typically asking the user what they'd like to do, even though the user already specified their request.

Root Cause

The argument injection mechanism relies on a $ARGUMENTS placeholder in the skill prompt template. In src/ui/commands/skill-commands.ts, the expandArguments function (line 1292) performs a string replacement:

function expandArguments(prompt: string, args: string): string {
    return prompt.replace(/\$ARGUMENTS/g, args || "[no arguments provided]");
}

This is called from createDiskSkillCommand (line 1691):

const expandedPrompt = expandArguments(body, skillArgs);
context.sendSilentMessage(expandedPrompt);

If the SKILL.md file does not contain the $ARGUMENTS placeholder, String.replace finds no matches and returns the prompt unchanged. The user's arguments are silently discarded with no warning or fallback.

Currently, most disk-discovered skills in the repo (3 out of 4 in .github/skills/) do not include $ARGUMENTS in their templates. The built-in skills defined in BUILTIN_SKILLS do use $ARGUMENTS, so this issue specifically affects non-built-in disk-discovered skills.

Impact

High — This is a core usability issue. Users expect their input after a slash command to be part of the request sent to the agent. When it's silently dropped, users have to repeat themselves, and there's no indication that their original prompt was ignored.

Possible Fixes

  1. Append arguments as fallback: If the skill template doesn't contain $ARGUMENTS, automatically append the user's arguments to the end of the expanded prompt (e.g., \n\nUser request: ${args}).
  2. Warn skill authors: When registering a disk skill, emit a warning if the SKILL.md template lacks $ARGUMENTS and the skill accepts arguments.
  3. Always append context: Regardless of $ARGUMENTS presence, append a structured section with the user's arguments so the agent always has context of what was requested.

Option 1 or 3 would fix the issue without requiring existing skill authors to update their templates.

Affected Code

  • src/ui/commands/skill-commands.ts:1292-1294expandArguments() function
  • src/ui/commands/skill-commands.ts:1650-1696createDiskSkillCommand() function
  • All disk-discovered SKILL.md files that lack $ARGUMENTS placeholder

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions