Skip to content

feat(status): distinguish skills vs plugins, hoist status to root#415

Open
christso wants to merge 2 commits into
mainfrom
feat/skill-vs-plugin-labeling
Open

feat(status): distinguish skills vs plugins, hoist status to root#415
christso wants to merge 2 commits into
mainfrom
feat/skill-vs-plugin-labeling

Conversation

@christso
Copy link
Copy Markdown
Contributor

Summary

  • workspace status and plugin list now classify each entry as skill or plugin based on the resolved cache path (root SKILL.md + no skills/ subdir = skill). Output gains a kind label / Type: line in human mode and a kind field in JSON.
  • Hoists status to the root CLI as allagents status so it doesn't need the workspace prefix, mirroring how update is already exposed.

Motivation

After #406 / #408 / #413 added support for installing standalone skill sources (deep URLs into a skills/<name> subpath, single-skill repos), plugin list and workspace status still labeled everything as a "plugin," and a skill that wasn't yet cached showed (not synced) with no indication that it was a skill. The output was misleading — users had to know out-of-band that an entry was actually a skill.

Example diff in real output:

# before
✓ NousResearch/hermes-agent/skills/research/llm-wiki (cached)
✗ andrej-karpathy-skills@karpathy-skills (not synced)

# after
✓ NousResearch/hermes-agent/skills/research/llm-wiki (skill, cached)
✗ andrej-karpathy-skills@karpathy-skills (plugin, not synced)

plugin list:

# before
  ❯ <spec>
    Scope: project

# after
  ❯ <spec>
    Type: skill
    Scope: project

Implementation notes

  • Added kind: 'skill' | 'plugin' to PluginStatus (src/core/status.ts). Classification looks for SKILL.md at the resolved cache path and no skills/ subdir, which matches the auto-wrap layout from feat: support installing standalone skills from flat repos (npx skills ecosystem) #232/feat(skills): support root-level SKILL.md single-skill repos #249.
  • For GitHub plugins with a subpath, classification runs on the resolved subdir (cachePath/subpath), not the repo root — so a deep URL into repo/skills/<name>/ is classified correctly.
  • plugin list calls getWorkspaceStatus to populate a source → kind map. Native-only plugins (no file install) default to plugin.
  • Hoisted status symmetrically to update: exported statusCmd from workspace.ts and registered at root in cli/index.ts. allagents workspace status still works.
  • statusMeta.command renamed from workspace statusstatus so --agent-help status finds it (mirrors syncMeta.command: 'update').

This is a non-breaking, cosmetic-layer fix. It does not change the data model — both kinds still flow through PluginEntry. A deeper "Skill as first-class config type" refactor is a separate follow-up.

Test plan

  • bun run typecheck clean
  • bun run lint clean
  • bun test — 1306 pass / 0 fail (updated 2 tests in agent-help.test.ts for the renamed meta + new root command)
  • bun run build succeeds
  • Manually verified allagents status and allagents plugin list in a real workspace containing both a deep-URL skill and a marketplace skill spec, and confirmed labels are correct in both text and --json modes

🤖 Generated with Claude Code

`workspace status` and `plugin list` labeled every installed entry as a
"plugin" even when the source was a standalone skill (single-skill repo or
deep URL into a `skills/<name>` subpath). That made the output misleading
once support for standalone-skill sources was added in #406/#408/#413.

This change classifies each resolved source as either `skill` (root
SKILL.md, no `skills/` subdir) or `plugin` (everything else) and surfaces
the kind in both human and JSON output:

  workspace status (before):
    ✓ NousResearch/hermes-agent/skills/research/llm-wiki (cached)

  workspace status (after):
    ✓ NousResearch/hermes-agent/skills/research/llm-wiki (skill, cached)

`plugin list` gains a `Type:` line per entry and a kind-broken-down total.

Also hoists `status` to the root surface so `allagents status` works
without `workspace`, mirroring how `update` is already exposed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 27, 2026

Deploying allagents with  Cloudflare Pages  Cloudflare Pages

Latest commit: c822575
Status: ✅  Deploy successful!
Preview URL: https://f76ed338.allagents.pages.dev
Branch Preview URL: https://feat-skill-vs-plugin-labelin.allagents.pages.dev

View logs

Mirrors the CLI labeling added in the previous commit so the interactive
wizard surfaces the same skill/plugin distinction users see in
`allagents status` and `allagents plugin list`.

  status panel (before):
    ✓ <source> (github)

  status panel (after):
    ✓ <source> (skill, github)

  plugins picker hint (before):
    <source>      github · project

  plugins picker hint (after):
    <source>      skill · github · project

Verified end-to-end by driving the wizard through agent-tui against a
temp workspace containing a deep-URL skill source.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant