Replies: 4 comments
Update (2026-08-14): the ecosystem fallback is SHIPPED and on npmThe plugin route described in this proposal is now fully built, live-verified, and published — no upstream change required:
Two loader contracts discovered along the way, which may be useful upstream signal for the extension surface:
The grammar proposal itself is unchanged and still stands: colon command names as a first-class grammar feature plus a prefix-ownership policy would let the same addressing work natively for any plugin. The ready-to-apply patch lives at |
Update 2 (2026-08-22): release complete — npm, GitHub Release, license corrected
The grammar proposal remains open upstream: colon command names as a first-class grammar feature, patch at |
Update 3 (2026-08-23): UI-decoration companion patch (colon token split)Live testing exposed the presentation half of the same root cause: the user-message renderer ( Patch: include This pairs with the grammar proposal: grammar (host admission) + decoration (client presentation) are the two halves of first-class colon tokens. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Problem
Slash-command names are one flat namespace: the grammar is
^[a-z][a-z0-9_-]*$(seepackages/interaction/commands). Two consequences for plugin-style capability bundles:deploycommand collide with no domain qualifier available; who wins is decided by layer order / scoped shadowing, and neither author can prevent the collision by design./{plugin-id}:{command}(the colon is the structural separator; each plugin skill also gets a generated/plugin:skillcommand). Ports of such plugins to the DeepSeek Harness must flatten or kebab-mangle their names, losing both the addressing convention and the collision guard.The current workaround is a kebab convention (
/solidforge-arm-tools): unambiguous addressing is sacrificed (the prefix boundary is not mechanically parseable — is itsolidforge+arm-toolsorsolidforge-arm+tools?), and it remains convention-only, so nothing stops a second plugin from registering/solidforge-arm-tools.Proposed direction
namespace:segment —[a-z][a-z0-9_-]*(?::[a-z][a-z0-9_-]*)?— in both the registration validation andparseCommand(). Patch + RFC: https://github.com/maskshell/solidforge-dsh/tree/main/docs/upstream (ready-to-apply; 58/58 tests green against 47f9438).namespace:name claims the prefix, and a different package registering the same prefix fails loudly. Details open for discussion (claim attribution, prefix granularity, migration for existing flat names).skill.list//nameinjection layers) and subagent names — those are separate surfaces with their own grammars.Why this matters
This proposal comes from a real port (SolidForge for Claude Code → DeepSeek Harness, https://github.com/maskshell/solidforge-dsh): the port's five skills, role agents, and commands all need domain-qualified addressing to behave like the upstream plugin. The grammar PR is the minimal enabling change; the ownership policy is what turns the prefix from a convention into a guarantee.
All reactions