Skip to content

feat(slash): custom slash commands — skills, agents, settings.json, .claude/ compat#2386

Open
JimmyDaddy wants to merge 9 commits into
esengine:v1from
JimmyDaddy:feat/custom-slash-commands
Open

feat(slash): custom slash commands — skills, agents, settings.json, .claude/ compat#2386
JimmyDaddy wants to merge 9 commits into
esengine:v1from
JimmyDaddy:feat/custom-slash-commands

Conversation

@JimmyDaddy
Copy link
Copy Markdown

What

自定义 Slash Command 能力,对标 Claude Code Skills + OpenCode Commands:

  • Skill 自动注册:所有 skill 自动映射为 /name 斜杠命令,/skill <name> 仍保留
  • disableModelInvocation frontmatter:标记后 skill 不出现在模型 index 中,仅 /name 可用
  • settings.json slashCommands:```{"slashCommands": {"deploy": {"command": "npm run deploy"}}}``` → /deploy 直接执行 shell
  • .reasonix/commands/ + .claude/commands/:.md 文件 = 斜杠命令,`$ARGUMENTS` 替换
  • .reasonix/agents/ + .claude/agents/:.md 文件 = subagent 定义,自动注册为 /name
  • /agents 命令:list / show / new / run
  • /slash 命令:list / reload

优先级:.reasonix/commands/ > .claude/commands/ > settings.json > skills/agents

Why

Closes #2026. 用户无需 fork 即可添加自定义工作流命令,Claude Code / OpenCode 项目零迁移。

How to verify

```sh
npm run verify # 318 files, 4104 tests, 0 failures
```

在 .reasonix/commands/ 或 .claude/commands/ 放入 .md 文件 → /name 直接调用。
在 settings.json 配置 slashCommands → /name 执行 shell 命令。

Checklist

  • npm run verify passes locally
  • No Co-Authored-By: Claude trailer in commits
  • Comments follow CONTRIBUTING.md
  • No edits to CHANGELOG.md

…spatch

- SlashContext gets extraHandlers/reloadExtraHandlers hooks
- handleSlash falls back to ctx.extraHandlers after static HANDLERS
- Skill interface adds disableModelInvocation frontmatter support
- SkillStore.roots() adds .reasonix/agents/ + .claude/agents/ scan
- Agent files force runAs:subagent; tools frontmatter maps to allowedTools
Loads project/global settings.json slashCommands, executes shell
commands synchronously as SlashResult, pure TUI-side only.
Scans .md files with YAML frontmatter as slash commands or agent
definitions. Supports $ARGUMENTS substitution. First-write-wins
across dirs; callers stack dirs in priority order.
setExtraSlashSpecs() injects custom commands into suggestSlashCommands,
countAdvancedCommands, detectSlashArgContext. Deduplication keeps
built-in commands dominant. Alias map is cached and invalidated on
spec change.
Merges .reasonix/commands/ > .claude/commands/ > settings.json >
skill/agent auto-registration. Reloadable via /slash reload.
- slash-custom.test.ts: 23 tests (registry, dispatch, suggestions, skills)
- slash-md-commands.test.ts: 31 tests (md loader, agents, /agents handler)
- Adjusted ui-slash-suggestions and slash test counts for new commands
- PlanPanel.tsx: biome-ignore useImportType (classic JSX transform)
@esengine esengine added the v1 Legacy TypeScript line (0.x) — v1 branch, maintenance only label May 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

v1 Legacy TypeScript line (0.x) — v1 branch, maintenance only

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: 提供自定义 Slash Command 的能力

2 participants