-
-
Notifications
You must be signed in to change notification settings - Fork 38.4k
feat: slim, receipted profile plugin carriers for the plugin install path #2788
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
montjeffrey
wants to merge
27
commits into
affaan-m:main
Choose a base branch
from
montjeffrey:feat/profile-plugins
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+8,101
−28
Open
Changes from 25 commits
Commits
Show all changes
27 commits
Select commit
Hold shift + click to select a range
af403cd
feat(plugins): generate slim profile plugins from selective-install m…
montjeffrey 8bfd1f1
fix(plugins): address profile-plugin review findings
montjeffrey 1c58cef
feat(hooks): add skill-router prompt hook and /plugin-profiles command
montjeffrey e0e02bb
fix(hooks): harden skill-router per review findings
montjeffrey 61f3baa
chore: sync catalog counts and command registry for /plugin-profiles
montjeffrey 483d3fe
fix(plugins): close review findings on profile plugins and skill router
claude abfd71e
Merge branch 'main' into feat/profile-plugins
montjeffrey 1e1b03b
Merge remote-tracking branch 'upstream/main' into feat/profile-plugins
montjeffrey 18919a4
chore: sync catalog counts after merging main
montjeffrey 9a6d3cd
feat(plugins): fail-closed, receipted, self-contained profile carriers
montjeffrey add7b88
refactor(hooks): move the skill router to its own opt-in PR
montjeffrey 68b3a3c
docs(tr): report 95 commands after /plugin-profiles
montjeffrey 0d0df38
fix(plugins): reject symlinked sources in generated carriers
montjeffrey a9aadcd
test(plugins): cover the on-demand catalog copy path for symlink reje…
montjeffrey 0a95c2e
refactor(plugins): split plugin-profiles.js into a bounded module dir…
montjeffrey cb71499
feat(plugins): refuse dynamic requires the staged carrier cannot load
montjeffrey 6c1e8a8
feat(plugins): make the token ledger conservative and provider-measur…
montjeffrey 0ce5bec
feat(plugins): resolve the context surface through one binding seam
montjeffrey 2ff9a55
test(plugins): make the personal-path check assert instead of opting out
montjeffrey da95daf
fix(install): ship the command entry scripts' runtime closure
montjeffrey 9ef04d6
feat(skills): make plugin-profiles a canonical skill with a command shim
montjeffrey e59e802
docs(plugins): make the session-context saving reproducible
montjeffrey 769e17a
fix(tests): update the surfaces the new module and skill changed
montjeffrey f2f673d
test(install): expand the pinned module lists for commands-runtime
montjeffrey f1a6d0b
docs(plugins): refresh ledger numbers after the plugin-profiles skill…
montjeffrey b7c8994
fix(plugins): omit commands whose runtime needs an unshippable npm pa…
montjeffrey 4eed1a2
fix(plugins): revoke carrier ownership when the tree contains a symlink
montjeffrey File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| --- | ||
| description: Generate and manage slim ECC profile plugin carriers - list profiles, plan the listing ledger and capability decision, generate a receipted plugin, and activate it per project. | ||
| argument-hint: "[list | plan <profile> | generate <profile> | activate <plugin-name>]" | ||
| --- | ||
|
greptile-apps[bot] marked this conversation as resolved.
|
||
|
|
||
| # Plugin Profiles Command | ||
|
|
||
| Manage slim ECC profile plugin carriers from inside Claude Code. A carrier is | ||
| a standalone plugin generated from an install selection: it lists only the | ||
| selected skills, agents, and commands, keeps the rest of the skill catalog | ||
| reachable on demand inside the plugin, and records how it was built in | ||
| `ecc-profile.json`. | ||
|
|
||
| This command is a thin entry point over the `plugin-profiles` skill. Follow | ||
| that skill for the full workflow and rules. | ||
|
|
||
| ## What This Command Does | ||
|
|
||
| 1. `list` - show the available install-profile projections and their module counts. | ||
| 2. `plan <profile>` - report the context surface, the token ledger with its | ||
| method label and budget verdict, and the capability decision. | ||
| 3. `generate <profile>` - dry run first, resolve every blocker with the user, | ||
| then generate and show the receipt digests. | ||
| 4. `activate <plugin-name>` - offer to write the per-project opt-in to | ||
| `.claude/settings.json`, merging rather than overwriting, and only after | ||
| showing the JSON and getting confirmation. | ||
|
|
||
| Two things the skill is strict about, repeated here because they are the easy | ||
| mistakes: a narrow context selection never authorizes the hook runtime, so | ||
| never choose `--hooks` for the user; and the default ledger over-counts, so | ||
| "OVER budget" may be a false positive that `--measure provider` clears. | ||
|
|
||
| Profile ids (`minimal`, `developer`, `opencode`, ...) are **install-profile | ||
| projections**, not context profiles: ECC has no canonical context-profile | ||
| registry yet, so every receipt records `registry: install-profiles@unbound`. | ||
|
|
||
| ## Example | ||
|
|
||
| ``` | ||
| User: /plugin-profiles generate opencode | ||
|
|
||
| Assistant: (runs plan, then generate --dry-run) | ||
| Ledger 8,323 tokens - OVER the 8,000 budget. That estimate over-counts by | ||
| design; --measure provider would give the real number. No hook runtime in | ||
| this selection, so no capability decision is needed. | ||
| Proceed with --allow-over-budget, raise the budget, or narrow the selection? | ||
| User: allow it | ||
| Assistant: (generates, reports path + receipt digests, offers activation) | ||
| ``` | ||
|
|
||
| ## Related | ||
|
|
||
| - `plugin-profiles` skill - full workflow, blocker table, receipt reading, rules | ||
| - `docs/PLUGIN-PROFILES.md` - design rules, fail-closed behaviour, receipt schema | ||
| - Source: `scripts/plugin-profiles.js`, `scripts/lib/plugin-profiles/` | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This adds the
plugin-profilescommand without updatingdocs/COMMAND-REGISTRY.json. The checked-in registry still contains 94 commands and noplugin-profilesentry, while the registry generator discovers this command;npm run command-registry:checkexits 1 and instructs contributors to regenerate the file. Runnpm run command-registry:writeand commit the resulting registry update.Artifacts
Evidence from the check
Command output from the check
Prompt To Fix With AI