Publishing
Publish your plugin to the Omniscio Marketplace so other Omniscio users can discover and install it.
Overview
The publish workflow is:
- Build and package your plugin
- Authenticate with GitHub (automatic on first publish)
- Upload the
.amcpluginarchive to the marketplace - Wait for review (manual review by the marketplace team)
- Published -- your plugin appears in Omniscio's marketplace browser
Prerequisites
- A GitHub account
- A built and validated plugin (run
npx amc-plugin validatefirst)
Step 1: Build and Package
Make sure your plugin builds cleanly and passes validation:
npm run build
npx amc-plugin validate
npx amc-plugin packageExpected output:
Manifest validated
Compiling TypeScript...
Build complete
PASS: Manifest schema
PASS: SDK version declared (2.0.0)
PASS: UI entry point exists
PASS: TypeScript compilation
PASS: No banned imports
All checks PASSED
Packaged: my-plugin-1.0.0.amcplugin (0.01 MB)TIP
If you skip the package step, the publish command runs it automatically.
What Your Listing Shows
There is no listing form. Everything the marketplace page shows comes from the package you upload:
| On the listing | Source | Limits |
|---|---|---|
| Name, description, author, category, license, icon, tags | manifest.json → plugin.* | see the manifest reference |
| Long description (Overview tab) | the README.md next to manifest.json, packaged automatically by amc-plugin package (CLI 3.1 and later) | markdown only, 64 KB; use absolute https:// image URLs, a repo-relative path cannot load |
| Screenshot gallery | plugin.screenshots, a list of image URLs you host | up to 8 http(s) URLs, 2048 characters each |
| Support tab | plugin.links with any of homepage, support, privacy, contact, repository | each an http(s) URL, all optional |
| Ratings and downloads | users and the marketplace | nothing to supply |
amc-plugin preflight (and the preflight that runs inside publish) prints one Listing line: pass when the README, screenshots and support links are all present, otherwise a warning that names what is missing. It never blocks a publish, so a plugin with nothing to show can still ship.
Older CLIs drop the README
Before CLI 3.1, amc-plugin package shipped only dist/ and assets/ (or a flat plugin's entry-point folders), so a README in your repository never reached the marketplace. Upgrade with npm install -D @agent-mc/plugin-cli@^3.1.0, or publish with npx @agent-mc/plugin-cli@latest publish, then publish a new version — the listing updates when that version is approved.
Step 2: Publish
Run the publish command from your plugin directory:
npx amc-plugin publishFirst-Time Authentication
On first publish, the CLI opens your browser to the Omniscio Marketplace sign-in page for GitHub OAuth authentication:
Opening browser for GitHub sign-in...
If the browser doesn't open, visit: https://amc-marketplace-jls.web.app?session=A1B2C3
Waiting for sign-in...
.....
Signed in as your-github-usernameAfter signing in, the CLI stores your token locally at ~/.amc/marketplace-token. Subsequent publishes reuse it, and when it expires the CLI renews it silently in the background using the stored refresh token — so you should only see the browser flow again if you sign out or your access is revoked.
Upload
After authentication, the CLI locates (or creates) the .amcplugin file and uploads it:
Uploading my-plugin-1.0.0.amcplugin (0.01 MB)...
Submitted for review (submission ID: abc123)
Run `amc-plugin status` to check progress, or use --watch to wait.Adding a Changelog
Include a changelog message for the marketplace listing:
npx amc-plugin publish --changelog "Added dark mode support and fixed sidebar badge count"Watch Mode
Use --watch to poll for the review decision instead of checking manually:
npx amc-plugin publish --watchThe CLI polls every 30 seconds for up to 3 hours:
Uploading my-plugin-1.0.0.amcplugin (0.01 MB)...
Submitted for review (submission ID: abc123)
Watching for review decision...
......
Plugin published!If the submission is rejected, the CLI prints the reviewer's feedback and exits with a non-zero code:
Rejected: Plugin must handle errors in the onEnable lifecycle hookStep 3: Check Status
Check the review status of your submissions at any time:
npx amc-plugin statusOutput:
Submissions for "my-plugin":
[?] my-plugin v1.0.0 — pending (5/17/2026)Status icons:
| Icon | Status | Meaning |
|---|---|---|
[?] | pending | Awaiting review |
[OK] | approved | Published to the marketplace |
[X] | rejected | Review failed -- see feedback |
When run from a plugin directory (with a manifest.json), the status command filters to show only submissions for that plugin. Run it from any other directory to see all your submissions across all plugins.
If rejected, the feedback is shown:
Submissions for "my-plugin":
[X] my-plugin v1.0.0 — rejected (5/17/2026)
Feedback: Plugin must handle errors in the onEnable lifecycle hookRe-Submitting After Changes
After a rejection or when publishing an update:
- Fix the issues or make your changes
- Bump the version in
manifest.json(in theplugin.versionfield) - Rebuild, validate, and publish:
npm run build
npx amc-plugin validate
npx amc-plugin publish --changelog "Fixed onEnable error handling"Each submission is tracked independently. You can see the full history with amc-plugin status.
Review Process
Submissions go through these states:
pending --> approved (published to marketplace)
--> rejected (feedback provided)The review checks for:
- Valid manifest schema and SDK version compatibility
- No banned imports (
electron,better-sqlite3,worker_threads,child_process— the last two in both their bare andnode:-prefixed spellings) - Correct entry points (UI and/or backend files exist)
- Package size within the 50 MB limit
- Security review of plugin behavior
You will hit the banned-import rule before review, not at it
amc-plugin publish runs the same scan as part of its preflight and refuses to upload on a hit, so this is not a surprise you discover days later in a rejection. --skip-preflight bypasses it deliberately, but the rule still applies at review — and, more to the point, at runtime: marketplace plugin backends run under Node's --permission, which blocks these modules, so a plugin built on one installs and then fails every call.
WARNING
The marketplace enforces a 50 MB package size limit. The amc-plugin package command warns you if your archive exceeds this.
Authentication Management
Check Current Identity
npx amc-plugin whoamiOutput:
Signed in as: your-github-username (uid: abc123)If not signed in:
Not signed in. Run `amc-plugin publish` to authenticate.Sign Out
npx amc-plugin logoutOutput:
Signed out (was: your-github-username)This deletes the stored token at ~/.amc/marketplace-token. The next publish command will prompt for authentication again.
Token Storage
The CLI stores your marketplace authentication token at:
~/.amc/marketplace-tokenThe token includes your GitHub username, Firebase UID, and an expiration timestamp. It is automatically refreshed when needed, and expired tokens trigger a new browser-based sign-in flow.
CLI Command Summary
| Command | Description |
|---|---|
amc-plugin publish | Upload plugin to the marketplace |
amc-plugin publish --watch | Upload and poll until approved/rejected |
amc-plugin publish --changelog "..." | Upload with a changelog message |
amc-plugin status | Check submission review status |
amc-plugin whoami | Show authenticated GitHub username |
amc-plugin logout | Clear stored authentication token |