Git Marketplace Monorepo (Skills + MCP Servers)
npm registry semantics on git-native infrastructure, with PR-based review and automated quality scoring.
Problem Statement
Signet skills and MCP servers are currently local-only. There is no
mechanism for sharing, discovering, or reviewing community-contributed
capabilities. Users cannot publish a skill they built, and agents
cannot install a skill another user published. The existing
/api/skills/install endpoint handles local filesystem installation
but has no concept of a remote registry.
A git-native marketplace avoids the operational burden of hosting a package registry while preserving auditability (every change is a commit), review workflow (PRs), and user-scoped namespacing (directory per publisher).
Goals
- Define a monorepo structure where each publisher owns a namespace directory.
- Automate submission review via a Cloudflare Worker that validates structure, runs safety checks, and generates review JSON artifacts.
- Support both skills (executable tool definitions) and MCP server packages (server config + metadata).
- Integrate with the daemon so
signet skill install @user/skill-nameresolves from the marketplace. - Feed marketplace quality signals (download count, feedback score) into the predictor.
Proposed Capability Set
A. Monorepo Structure
Hosted as a public GitHub repository (e.g., signetai/marketplace):
marketplace/
├── registry.json # auto-generated index of all packages
├── publishers/
│ ├── nicholai/
│ │ ├── profile.json # publisher metadata, verified identity
│ │ ├── web-deploy/
│ │ │ ├── manifest.yaml
│ │ │ ├── skill.md
│ │ │ └── tool.ts
│ │ └── github-review/
│ │ ├── manifest.yaml
│ │ └── server.json
│ └── avery/
│ └── tattoo-ref/
│ ├── manifest.yaml
│ └── skill.md
Each package directory contains a manifest.yaml with:
name: web-deploy
type: skill | mcp-server
version: 1.0.0
description: "Deploy static sites to Cloudflare Pages"
tags: [deploy, cloudflare, web]
entrypoint: tool.ts | server.json
min_signet_version: "0.76.0"
B. Submission Workflow
- Publisher forks the monorepo, adds their package under
publishers/{username}/. - Publisher opens a PR against
main. - The reviews Cloudflare Worker (
workers/reviews/) runs automated checks on PR creation/update:- Manifest schema validation (required fields, valid types).
- Entrypoint file exists and is parseable.
- No filesystem escapes (symlinks,
../references). - Version bump required if package directory already exists.
- Size limits (individual file <100KB, package total <500KB).
- Worker posts a review comment with pass/fail and generates a
review.jsonartifact committed to the PR branch. - Maintainer approval merges the PR. A post-merge hook regenerates
registry.jsonfrom allmanifest.yamlfiles.
C. Registry Index
registry.json is the discovery index, regenerated on every merge
to main via GitHub Action:
{
"version": 2,
"updated_at": "2026-03-24T00:00:00Z",
"packages": [
{
"name": "web-deploy",
"publisher": "nicholai",
"type": "skill",
"version": "1.0.0",
"tags": ["deploy", "cloudflare"],
"downloads": 0,
"score": null
}
]
}
The daemon caches this index locally at
$SIGNET_WORKSPACE/.marketplace/registry.json with a 1-hour TTL.
D. Daemon Integration
GET /api/marketplace/search?q=deploy&type=skill— searches cached registry by name, tags, description. Returns ranked results.POST /api/marketplace/install— clones the package from the monorepo into$SIGNET_WORKSPACE/skills/(skills) or registers the MCP server config (servers). Recordsagent_idon install.GET /api/marketplace/installed— lists locally installed marketplace packages with version and update status.POST /api/marketplace/feedback— records user/agent quality rating (1-5) for an installed package. Aggregated scores flow back to the registry via periodic sync.
E. CLI Integration
signet marketplace search <query>— searches the registry.signet marketplace install @publisher/package— installs.signet marketplace publish— validates local package and opens a PR viagh pr create(requires GitHub CLI auth).signet marketplace update— checks for version bumps on installed packages.
F. Quality Scoring
Package quality score is computed from:
- Automated review pass/fail history.
- Download count (install events across all users, via opt-in telemetry ping to a stats endpoint).
- Agent feedback ratings from
predictor-agent-feedbackpipeline. - Recency of last update.
Scores feed into the predictor as contextual signals when suggesting skills to agents during session-start.
Non-Goals
- Hosting a standalone package registry (npm/PyPI style).
- Paid or monetized packages.
- Automatic skill creation from agent behavior (see
adaptive-skill-lifecycle). - Runtime sandboxing of marketplace packages (trust model is review-gated, not sandboxed).
Integration Contracts
- Predictor Agent Feedback: quality ratings from agents feed into package scores. The predictor’s feedback pipeline provides the signal; the marketplace aggregates it per-package.
- Adaptive Skill Lifecycle: auto-created skills can be promoted
to marketplace packages via
signet marketplace publish. - Multi-Agent: install events scoped to
agent_id(invariant 1). Each agent tracks its own installed packages independently. - Skills API:
POST /api/marketplace/installcalls the existing/api/skills/installinternally for skill-type packages.
Rollout Phases
Phase 1: Monorepo + Manual Review
Create the marketplace repository. Implement manifest validation
in the reviews worker. registry.json generation via GitHub Action.
Daemon caches registry. CLI search and install commands work.
Review is manual (maintainer approves PRs).
Phase 2: Automated Review + Feedback
Reviews worker runs full automated checks and posts structured
review comments. Feedback endpoint live. Quality scores computed.
signet marketplace publish automates PR creation.
Phase 3: Predictor Integration + Discovery
Marketplace scores feed into the predictor feature pipeline. Dashboard surfaces recommended packages based on agent usage patterns. Update notifications in CLI and dashboard.
Validation and Tests
- Schema validation test: submit manifests with missing fields, invalid types, version conflicts — verify rejection messages.
- Install test: install a skill from the marketplace monorepo,
verify it appears in
$SIGNET_WORKSPACE/skills/and in/api/skillsresponse with correctagent_id. - Registry generation test: add/remove package directories, verify
registry.jsonreflects the correct state after rebuild. - Feedback test: submit ratings, verify aggregated score updates in registry and predictor feature export.
Success Metrics
- A skill published via PR is installable within 5 minutes of merge.
- Registry search returns relevant results for single-word queries with <200ms daemon response time.
- Installed marketplace packages survive daemon restart (persisted
in
$SIGNET_WORKSPACE/.marketplace/installed.json).
Open Decisions
- Monorepo hosting —
signetai/marketplaceon GitHub is the default. Should we support self-hosted forks for enterprise users with private marketplace registries? - Version conflict resolution — when a user has a local skill with the same name as a marketplace package, which takes priority? Leaning toward local-wins with a warning.
- Telemetry opt-in — download count tracking requires opt-in telemetry. What is the minimum viable stats endpoint design that preserves privacy?