-
Notifications
You must be signed in to change notification settings - Fork 22
Description
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
- Have a non-built-in skill registered (e.g., a custom skill defined in
.github/skills/,.claude/skills/, or.opencode/skills/via aSKILL.mdfile) - In the Atomic terminal, type a slash command with arguments:
/my-custom-skill Please complete this task for me. - 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
- 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}). - Warn skill authors: When registering a disk skill, emit a warning if the
SKILL.mdtemplate lacks$ARGUMENTSand the skill accepts arguments. - Always append context: Regardless of
$ARGUMENTSpresence, 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-1294—expandArguments()functionsrc/ui/commands/skill-commands.ts:1650-1696—createDiskSkillCommand()function- All disk-discovered
SKILL.mdfiles that lack$ARGUMENTSplaceholder