Problem
allagents currently stores marketplace aliases in user profile config (~/.allagents/marketplaces.json).
For eval and local workspace scenarios, this creates cross-workspace side effects:
- users may already have a marketplace alias configured globally
- a specific workspace may need a different source (local path vs remote URL)
- changing the global alias affects unrelated workspaces
Goals
- Support workspace-isolated marketplace aliases.
- Keep current behavior backward compatible.
- Make scope explicit in CLI UX.
Proposal
Add project-level marketplace config at:
.allagents/marketplaces.json (workspace root)
Use the same JSON schema as user-level ~/.allagents/marketplaces.json.
CLI changes
plugin marketplace add
- Add
--scope <user|project>
- Default:
user (backward compatible)
- Behavior:
--scope user writes to ~/.allagents/marketplaces.json
--scope project writes to .allagents/marketplaces.json
Examples:
allagents plugin marketplace add ../my-marketplace-repo --scope project
allagents plugin marketplace add https://github.com/org/repo --scope user
plugin marketplace list
- Add
--scope <user|project|all>
- Default:
all
- Output should identify source scope per marketplace entry.
plugin marketplace remove
- Add
--scope <user|project|all>
- Default:
all (remove from both scopes if present)
Resolution behavior (runtime)
When resolving plugin@marketplace:
- Load user marketplaces (
~/.allagents/marketplaces.json) if present.
- Load project marketplaces (
.allagents/marketplaces.json) if present.
- Merge by marketplace name.
- If both define the same name, project-level entry wins.
Warning behavior
If a project marketplace overrides a user marketplace with the same name, print a warning during resolution/sync, for example:
Workspace marketplace <name> overrides user marketplace of the same name.
Suggested config schema (same as current user file)
{
"my-marketplace": {
"source": "local",
"path": "../my-marketplace-repo"
}
}
Compatibility notes
- If
.allagents/marketplaces.json does not exist, behavior is unchanged.
- Existing user-scoped workflows continue to work with no command changes.
Acceptance criteria
add --scope project creates/updates .allagents/marketplaces.json in workspace root.
add with no scope still writes user-level config.
list --scope all shows combined entries with scope/source indicators.
remove --scope project <name> removes only project entry.
remove --scope user <name> removes only user entry.
remove --scope all <name> removes both entries.
- Runtime/plugin resolution uses merged view with project-over-user precedence.
- Override warning is emitted when duplicate name exists in both scopes.
Problem
allagentscurrently stores marketplace aliases in user profile config (~/.allagents/marketplaces.json).For eval and local workspace scenarios, this creates cross-workspace side effects:
Goals
Proposal
Add project-level marketplace config at:
.allagents/marketplaces.json(workspace root)Use the same JSON schema as user-level
~/.allagents/marketplaces.json.CLI changes
plugin marketplace add--scope <user|project>user(backward compatible)--scope userwrites to~/.allagents/marketplaces.json--scope projectwrites to.allagents/marketplaces.jsonExamples:
plugin marketplace list--scope <user|project|all>allplugin marketplace remove--scope <user|project|all>all(remove from both scopes if present)Resolution behavior (runtime)
When resolving
plugin@marketplace:~/.allagents/marketplaces.json) if present..allagents/marketplaces.json) if present.Warning behavior
If a project marketplace overrides a user marketplace with the same name, print a warning during resolution/sync, for example:
Suggested config schema (same as current user file)
{ "my-marketplace": { "source": "local", "path": "../my-marketplace-repo" } }Compatibility notes
.allagents/marketplaces.jsondoes not exist, behavior is unchanged.Acceptance criteria
add --scope projectcreates/updates.allagents/marketplaces.jsonin workspace root.addwith no scope still writes user-level config.list --scope allshows combined entries with scope/source indicators.remove --scope project <name>removes only project entry.remove --scope user <name>removes only user entry.remove --scope all <name>removes both entries.