Skip to content

[Feat] Add instance-wide skill marketplace - #2427

Closed
roomote-roomote[bot] wants to merge 1 commit into
developfrom
feature/global-skill-marketplace-1s7t4hkxaqpml
Closed

[Feat] Add instance-wide skill marketplace#2427
roomote-roomote[bot] wants to merge 1 commit into
developfrom
feature/global-skill-marketplace-1s7t4hkxaqpml

Conversation

@roomote-roomote

Copy link
Copy Markdown
Contributor

​Opened on behalf of @daniel-lxs. Follow up by mentioning @roomote-roomote, in the web UI, or in Slack.

What changed

  • Restore marketplace search and one-click installation in the shared Skills catalog, without an environment selector or environment requirement.
  • Snapshot each installed skill's exact SKILL.md, source revision, and bounded supporting files into the instance-wide store so Fast Sessions and coding tasks load the same content.
  • Preserve creator/admin management, duplicate rejection, packaged > instance > environment > repository precedence, and the existing untrusted-guidance boundary.
  • Add resource path, file count, per-file, per-bundle, and aggregate runtime limits; retain executable bits for safe regular files and reject symlinks or unsafe paths.
  • Update focused persistence, authorization, Fast, worker, SDK, and responsive UI coverage, public docs, and the patch changeset.

Why this change was made

The marketplace UI was removed because it was coupled to environment-scoped installation. Published skills should instead join the current shared catalog and work consistently in Fast and coding execution without reviving the legacy environment workflow.

Impact

Any active member can install a marketplace skill for the whole instance. Installations are immutable snapshots until edited or deleted, supporting resources are retained, and catalog list responses expose only metadata rather than transferring encoded bundles.

Existing environment YAML installs are not migrated, changed, or removed. Draft PR #2424 separately restores collapsed manual environment-skill management; the two branches overlap only in apps/docs/skills.mdx and apps/web/src/components/settings/InstanceSkills.client.test.tsx, and this branch intentionally does not modify its page-level environment integration.

Live verification installed vercel-react-best-practices from the public marketplace, preserved its exact main document and 75 resources, and loaded rules/async-parallel.md through both Fast and coding materialization. Focused suites, docs checks, repository lint/typechecks/knip, and pre-push gates passed.

Screenshots

Global skill marketplace on desktop

Global skill marketplace on mobile

@roomote-community

roomote-community Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

2 issues outstanding. See task

  • Marketplace installs fail for valid skills beyond the Fast discovery cap (packages/cloud-agents/src/server/fast-agent/fast-agent-settings-skill-source.ts:377).
  • Resume-time ownership hashing can read an unbounded locally modified skill bundle into memory (apps/worker/src/run-task/agent-home.ts:538).

Reviewed a93d6a2

options.executeGit,
);
try {
const record = snapshot.records.find(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

loadFastAgentSettingsMarketplaceSnapshot only retains the first 128 discovered SKILL.md records (and only the first 256 candidates) before this lookup. Marketplace search is not constrained to that subset, so selecting a valid skill that sorts later in a source with more than 128 skills always reaches this branch and reports it as un-installable. The install path needs an exact-name lookup that is independent of the Fast discovery cap.

} finally {
fs.closeSync(documentFd);
if (entry.version === 2) {
const files = readSafeSkillFiles(directory);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This recursive ownership check reads every file under a prior v2 skill with no per-file or aggregate limit. A task can modify its persisted HOME between runs, so adding a very large file under an installed skill makes the next resume synchronously load it all into memory before deciding not to delete the locally extended directory. Bound the walk with stat/aggregate limits before readFileSync so a modified runtime cannot OOM the worker.

@roomote-roomote

roomote-roomote Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

Blocked because PR #2427 was closed without merge while this fix run was investigating it.

Verified outstanding work:

  • Exact marketplace installs incorrectly inherit the capped Fast discovery snapshot.
  • Resume ownership hashing reads locally modified bundle files without size bounds.
  • The failed Test check is an outdated explicit-instance-skill fixture missing the new document/resources shape.

No code was pushed and no review threads were resolved. Reopen #2427 or authorize a follow-up PR to continue.

@daniel-lxs daniel-lxs closed this Sep 9, 2026
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