feat(cli): rename skills → skill (plural alias kept)#380
Conversation
…l alias kept) The wider Agent Skills ecosystem (gh skill, agentskills.io) uses the singular form. Adopt `allagents skill <subcommand>` as the canonical name and keep the plural as a permanent, byte-identical alias. - `src/cli/index.ts`: register the group as `skill: skillsCmd` and rewrite the first arg `skills` to `skill` before dispatch so both invocations share the same cmd-ts hotPath (gate (2): byte-identical output for `allagents skill` vs `allagents skills`). - `src/cli/commands/plugin-skills.ts`: change `skillsCmd.name` from `skills` to `skill`. Update JSON envelope `command` fields and in-message hint strings. - `src/cli/metadata/plugin-skills.ts`: rename `command:` values to `skill *` and update all `examples:` to use the singular. - `src/cli/agent-help.ts`: wire the skill metas into `allCommands` so they are discoverable, and normalize `--agent-help "skills X"` lookups to `skill X`. - `README.md`, `docs/**`: switch user-facing examples to the singular and document the plural as an alias. - `tests/unit/cli/agent-help.test.ts`: expand fixture and expected name list. Closes #373
Deploying allagents with
|
| Latest commit: |
6532f57
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://9f0adccd.allagents.pages.dev |
| Branch Preview URL: | https://fix-373-skill-singular.allagents.pages.dev |
Code Review: ✅ APPROVE (with non-blocking suggestions)ApproachThe implementation diverges from the issue's suggested Correctness
CLAUDE.md compliance
Verification gateAll five checks from #373 appear satisfied by the diff. Overlap with #379The PR body correctly flags overlap with #371/#379. Whichever lands second needs a rebase — the metadata Non-blocking suggestions1. Add a unit test for the alias normalization — the new argv rewrite in test('rewrites leading "skills" to "skill"', () => {
expect(normalizeSkillsAlias(['skills', 'list'])).toEqual(['skill', 'list']);
expect(normalizeSkillsAlias(['skill', 'list'])).toEqual(['skill', 'list']);
expect(normalizeSkillsAlias(['workspace', 'sync'])).toEqual(['workspace', 'sync']);
expect(normalizeSkillsAlias([])).toEqual([]);
});This would also test that 2. Extract the duplicated normalization — the same Not blocking — the immediate behavior is correct and the verification gate is satisfied. |
Summary
Adopt
allagents skill <subcommand>as the canonical singular form, matchinggh skilland the agentskills.io ecosystem. The pluralallagents skills <subcommand>remains a permanent, byte-identical alias — no deprecation warning, no breaking change.skillsarg toskillbefore cmd-ts dispatch makes both invocations share the samehotPath, so they produce identical help/output (gate 2).--agent-help "skills X"lookups are normalized so existing automation that uses the plural still resolves.Test plan
bun run buildbun test(1191 pass / 0 fail)allagents skills→allagents skill(with backward-compatible plural alias) #373 (all five checks):allagents skill list >/dev/nullsucceeds;allagents skill --help | grep 'allagents skill'matches.allagents skills list >/dev/nullsucceeds;diff <(allagents skill 2>&1) <(allagents skills 2>&1)shows no diff.allagents --agent-help | jq '.commands | map(.command) | any(. == "skill list")'→true.allagents --help | grep 'skill'matches.grep -E '^\s*\$\s*allagents skills ' README.mdreturns no matches.Closes #373