Title: Design source canonicalization for multi-skill standalone repo adds · Issue #407 · EntityProcess/allagents · GitHub
Open Graph Title: Design source canonicalization for multi-skill standalone repo adds · Issue #407 · EntityProcess/allagents
X Title: Design source canonicalization for multi-skill standalone repo adds · Issue #407 · EntityProcess/allagents
Description: Problem Standalone skill URLs now install correctly, but adding multiple skills from the same repository can leave config in an ambiguous state. Example starting point: plugins: - source: https://github.com/NousResearch/hermes-agent/tree...
Open Graph Description: Problem Standalone skill URLs now install correctly, but adding multiple skills from the same repository can leave config in an ambiguous state. Example starting point: plugins: - source: https://g...
X Description: Problem Standalone skill URLs now install correctly, but adding multiple skills from the same repository can leave config in an ambiguous state. Example starting point: plugins: - source: https://g...
Opengraph URL: https://github.com/EntityProcess/allagents/issues/407
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Design source canonicalization for multi-skill standalone repo adds","articleBody":"## Problem\nStandalone skill URLs now install correctly, but adding multiple skills from the same repository can leave config in an ambiguous state.\n\nExample starting point:\n```yaml\nplugins:\n - source: https://github.com/NousResearch/hermes-agent/tree/main/skills/research/llm-wiki\n skills:\n - llm-wiki\n```\n\nIf a later command adds another skill from the same repo, the system currently has no clear canonicalization strategy for whether the source should remain the deep skill URL or be promoted to a broader container path.\n\n## Goal\nDefine and implement canonical source promotion for repeated skill adds from the same repo, without expanding the config schema.\n\n## Desired behavior\nWhen multiple skills are added from the same repo, rewrite the stored `source` to the smallest shared container that can express all enabled skills. For example:\n- if all enabled skills are under `skills/research/`, promote to `.../tree/main/skills/research`\n- otherwise, if all are under `skills/`, promote to `.../tree/main/skills`\n- otherwise, promote to the smallest valid plugin/repo root needed\n\nThe resulting config should continue to use the existing model:\n- `plugins[].source`\n- `plugins[].skills` allowlist\n\n## Constraints\n- Do not add new config fields if avoidable\n- Preserve existing plugin and marketplace behavior\n- Avoid duplicate plugin entries for the same GitHub repo identity\n- Keep `skill add`, `skill remove`, `skill list`, and sync behavior coherent after promotion\n\n## Areas to inspect\n- `src/cli/commands/plugin-skills.ts`\n- `src/core/workspace-modify.ts`\n- `src/core/skills.ts`\n- config dedupe / plugin identity logic\n\n## Suggested acceptance criteria\n1. Starting from a deep standalone skill URL, adding a sibling skill from the same subtree rewrites `source` to the shared subtree path\n2. Adding a skill from a different subtree in the same repo rewrites `source` to the next valid shared container\n3. No duplicate plugin entries are created for the same repo identity\n4. Existing follow-up operations continue to work after promotion\n5. Add unit and E2E coverage for canonicalization/promotion cases\n\n## Context\nPR #406 intentionally fixed standalone skill URL installation only. The canonicalization/promotion behavior was left for follow-up because it is a design change, not just a bug fix.","author":{"url":"https://github.com/christso","@type":"Person","name":"christso"},"datePublished":"2026-05-19T10:17:41.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/407/allagents/issues/407"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:2d1f4c2d-9239-03fb-ee1a-bd4b81927aef |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B676:82F2D:417947:584335:6A4DA142 |
| html-safe-nonce | f2871483d80373ec4770499e42e467189661082121cce662856e00e18322035a |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCNjc2OjgyRjJEOjQxNzk0Nzo1ODQzMzU6NkE0REExNDIiLCJ2aXNpdG9yX2lkIjoiMjcyOTg5NzQ5MzA0NzEyNDI5MCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 6d948ac2204dc535279e529c92044a5af92268a8717f79ad8227aa8e82209746 |
| hovercard-subject-tag | issue:4476506901 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/EntityProcess/allagents/407/issue_layout |
| twitter:image | https://opengraph.githubassets.com/ad0f941a1a44e02309662438eb221359b977b839821bee20d13c556623c4834b/EntityProcess/allagents/issues/407 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/ad0f941a1a44e02309662438eb221359b977b839821bee20d13c556623c4834b/EntityProcess/allagents/issues/407 |
| og:image:alt | Problem Standalone skill URLs now install correctly, but adding multiple skills from the same repository can leave config in an ambiguous state. Example starting point: plugins: - source: https://g... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | christso |
| hostname | github.com |
| expected-hostname | github.com |
| None | 06b8a6144231bf3a234f1c2e9993861e07ce98a905912b114aa386c2d7e84b33 |
| turbo-cache-control | no-preview |
| go-import | github.com/EntityProcess/allagents git https://github.com/EntityProcess/allagents.git |
| octolytics-dimension-user_id | 8837957 |
| octolytics-dimension-user_login | EntityProcess |
| octolytics-dimension-repository_id | 1139437609 |
| octolytics-dimension-repository_nwo | EntityProcess/allagents |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1139437609 |
| octolytics-dimension-repository_network_root_nwo | EntityProcess/allagents |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7f13faa65cccc9b729d674da83335d5dcfdfd193 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width