SKILL.md
Skill definition and agent instructions.
Agent skill
Take a release-ready Omarchy plugin from an exact candidate commit through marketplace submission, verification, update, and publication. Treat official marketplace documents and issue templates as live contracts: refresh them every publishing session instead of relying only on this skill’s examples.
$ npx skills add c11dev/agents --skill omarchy-plugin-publishing
Installs via the skills CLI — portable across Claude Code, Cursor, Codex, Copilot & Gemini.
SKILL.md
Skill definition and agent instructions.
references/forms.md
Reference file.
references/security-hardening.md
Reference file.
references/submission-template.md
Reference file.
references/verification.md
Reference file.
Take a release-ready Omarchy plugin from an exact candidate commit through marketplace submission, verification, update, and publication. Treat official marketplace documents and issue templates as live contracts: refresh them every publishing session instead of relying only on this skill’s examples.
This skill owns public marketplace operations. Local implementation, testing, full security review, local linking, manual testing, versioning, and release-candidate preparation belong to omarchy-plugin-development.
Fetch these at the start of every publishing session:
If current documents conflict with this skill, follow the official documents and update this skill afterward. Stop before submission if authoritative documents cannot be checked.
See references/forms.md for the form map, references/submission-template.md for CLI body structure, references/verification.md for commit-bound states, and references/security-hardening.md for optional repository security practices.
Begin with the release-readiness record produced by omarchy-plugin-development:
If this record does not exist, use omarchy-plugin-development to prepare it before continuing. Do not compress a full source review into marketplace form filling.
Verify the handoff against the repository:
/tree/... path.omarchy plugin validate ., QML lint, and diff hygiene passed on the exact candidate.Before publication, confirm the pushed remote branch head equals the exact reviewed candidate. If the candidate is not pushed yet, keep the local SHA as the proposed target and follow the push approval boundary below.
Choose exactly one path:
Do not use the submission form to update an existing listing. Do not open a duplicate issue to retry a failed request unless the current official contract or an authorized maintainer explicitly requires a new issue.
A new plugin submission already includes commit-bound validation and verification through approved-and-verified; do not file a second verification issue after approval. The verification form is for already-listed snapshots and newer commits.
Marketplace actions are public and plugins execute unsandboxed. Keep the owner in control.
Obtain explicit approval immediately before each action:
A general request to publish does not replace showing the exact prepared action. Before a push, show the full SHA, branch, repository, commit title, and validation result. Before creating or editing an issue, show:
Never store credentials or tokens in plugin source, issues, screenshots, or reports.
Read each checkbox label together with its live description and required/optional state. Do not check a conditional acknowledgment merely because its sentence is factually true.
In particular, the verification form’s Standard installation acknowledgment is currently described as required only when requesting removal of a manual-installation override. Leave it unchecked for ordinary verification or update requests unless that exact override-removal operation applies.
After editing an issue, read the body back and verify every checkbox, target SHA, and operation before reporting success.
Before a first submission, recommend these as optional and non-blocking:
.github/SECURITY.md with supported-version guidance and a private reporting path. Do not direct undisclosed vulnerabilities to public issues.A source policy addition or edit changes the reviewed tree. Return to omarchy-plugin-development to prepare and review a new exact candidate; do not commit or push source hardening from this skill. Ask for explicit approval immediately before changing any GitHub repository security setting. If the owner declines, record the choice and continue; these are not marketplace requirements.
See references/security-hardening.md.
[Plugin]: <manifest name>; never leave only the prefix.Screenshots are not a prerequisite when fields are known from the live form.
Use the verification form, not the new-submission form.
For Verify the currently listed snapshot, provide the plugin ID, repository root URL, and exact full listingValidatedCommit recorded by the marketplace. Do not substitute current HEAD.
For Verify and publish a newer upstream commit, provide the plugin ID, repository root URL, and exact full candidate SHA. Ensure the configured plugin ID set is unchanged. The existing snapshot remains active while validation is pending.
Before creating or editing the request, require the pushed remote branch HEAD to equal the full 40-character candidate SHA. If a push is needed, show the exact action and obtain separate approval first.
Then show every form value and acknowledgment, obtain explicit approval, and create or edit the request. Afterward, confirm bot reports bind to the intended commit rather than merely checking that old labels remain.
Read the current validation, security-baseline, maintainer-review, and publication comments in full. Bind every finding to the exact reviewed commit.
When source changes are required:
omarchy-plugin-development for implementation, tests, full or focused security review, manual testing, and a new exact release-readiness record.Current baseline outcomes are:
passed — eligible for the clean automated verification path;review-required — requires authorized maintainer acceptance of the exact reported capabilities and permitted findings;needs-fixes — requires a corrected repository and new validated commit;For new listings and promoted updates, publication requires the current approved-and-verified workflow. Historical labels or stale comments are insufficient.
Opening or editing a correctly formatted request may update existing bot comments in place instead of adding new comments. Timestamps and old labels alone do not prove that a new commit was checked.
Verify:
If workflow state is unclear, inspect the issue-triggered workflow run and current comments before advising another edit or duplicate request.
Screenshots supplement but never override the live issue template. Request one only when the user asks for visual guidance, reports a UI mismatch, a visible field is ambiguous, or authoritative form content cannot be fetched.
Reuse screenshots already supplied. Ask only for the unresolved section, explain the uncertainty, and avoid credentials, private notifications, unrelated tabs, or personal account data.
Report:
# Omarchy Plugin Publishing Take a release-ready Omarchy plugin from an exact candidate commit through marketplace submission, verification, update, and publication. Treat official marketplace documents and issue templates as live contracts: refresh them every publishing session instead of relying only on this skill's examples. This skill owns public marketplace operations. Local implementation, testing, full security review, local linking, manual testing, versioning, and release-candidate preparation belong to `omarchy-plugin-development`. ## Official sources Fetch these at the start of every publishing session: - Publishing guide: https://omarchyplugins.com/publish.html - CLI and agent submission contract: https://github.com/HANCORE-linux/omarchy-plugin-marketplace/blob/main/SUBMISSION.md - Submission form: https://github.com/HANCORE-linux/omarchy-plugin-marketplace/issues/new?template=submit-plugin.yml - Verification contract: https://github.com/HANCORE-linux/omarchy-plugin-marketplace/blob/main/VERIFICATION.md - Verification form: https://github.com/HANCORE-linux/omarchy-plugin-marketplace/issues/new?template=verify-plugin.yml - Marketplace security policy: https://github.com/HANCORE-linux/omarchy-plugin-marketplace/blob/main/SECURITY.md - GitHub security policy guidance: https://docs.github.com/en/code-security/getting-started/adding-a-security-policy-to-your-repository - GitHub private vulnerability reporting: https://docs.github.com/en/code-security/security-advisories/working-with-repository-security-advisories/configuring-private-vulnerability-reporting-for-a-repository If current documents conflict with this skill, follow the official documents and update this skill afterward. Stop before submission if authoritative documents cannot be checked. See [`references/forms.md`](references/forms.md) for the form map, [`references/submission-template.md`](references/submission-template.md) for CLI body structure, [`references/verification.md`](references/verification.md) for commit-bound states, and [`references/security-hardening.md`](references/security-hardening.md) for optional repository security practices. ## Require a release-readiness handoff Begin with the release-readiness record produced by `omarchy-plugin-development`: - plugin ID, name, and version; - repository root URL; - new listing or existing-listing update; - exact candidate commit SHA, branch name, and currently listed commit when applicable; - clean working-tree status, push status, and whether remote branch HEAD equals the candidate; - tests and validation results; - full security-review scope, findings, fixes, and residual risks; - manual testing; - capabilities, dependencies, privacy behavior, attribution, and preview status; - release-facing commit message. If this record does not exist, use `omarchy-plugin-development` to prepare it before continuing. Do not compress a full source review into marketplace form filling. Verify the handoff against the repository: - The exact candidate commit exists locally and contains the intended manifest version. - The working tree is clean and the committed tree matches the reviewed snapshot. - The repository root contains one plugin, valid manifest, README, license, notices when needed, and an allowed preview without private data. - The root URL has no trailing slash or `/tree/...` path. - The configured plugin ID set is unchanged for an update. - Required tests, `omarchy plugin validate .`, QML lint, and diff hygiene passed on the exact candidate. - Findings are resolved or explicitly recorded as residual risk; do not describe validation or review as a security audit. Before publication, confirm the pushed remote branch head equals the exact reviewed candidate. If the candidate is not pushed yet, keep the local SHA as the proposed target and follow the push approval boundary below. ## Determine the operation Choose exactly one path: 1. **Submit a new plugin** — the plugin is not listed yet. 2. **Verify the currently listed snapshot** — scan the exact commit already recorded by the listing. 3. **Verify and publish a newer upstream commit** — validate and atomically promote a new exact commit. 4. **Respond to feedback** — repair and resubmit after a finding, scan failure, review block, or publication failure. Do not use the submission form to update an existing listing. Do not open a duplicate issue to retry a failed request unless the current official contract or an authorized maintainer explicitly requires a new issue. A new plugin submission already includes commit-bound validation and verification through `approved-and-verified`; do not file a second verification issue after approval. The verification form is for already-listed snapshots and newer commits. ## Approval boundaries Marketplace actions are public and plugins execute unsandboxed. Keep the owner in control. Obtain explicit approval immediately before each action: - pushing the exact release or corrective commit; - changing repository visibility; - enabling or disabling private vulnerability reporting or another repository security setting; - creating a marketplace submission or verification issue; - reopening an issue when resubmitting; - editing an existing marketplace issue to trigger validation again. A general request to publish does not replace showing the exact prepared action. Before a push, show the full SHA, branch, repository, commit title, and validation result. Before creating or editing an issue, show: - exact issue title; - complete issue body or every populated form field; - repository URL and exact 40-character commit SHA; - category and tags when applicable; - every acknowledgment and whether it is checked. Never store credentials or tokens in plugin source, issues, screenshots, or reports. ## Handle acknowledgments literally Read each checkbox label together with its live description and required/optional state. Do not check a conditional acknowledgment merely because its sentence is factually true. In particular, the verification form's **Standard installation acknowledgment** is currently described as required only when requesting removal of a manual-installation override. Leave it unchecked for ordinary verification or update requests unless that exact override-removal operation applies. After editing an issue, read the body back and verify every checkbox, target SHA, and operation before reporting success. ## Recommend optional repository hardening Before a first submission, recommend these as optional and non-blocking: - Add `.github/SECURITY.md` with supported-version guidance and a private reporting path. Do not direct undisclosed vulnerabilities to public issues. - Enable GitHub private vulnerability reporting after the repository is public. - Confirm repository administrators receive security notifications. A source policy addition or edit changes the reviewed tree. Return to `omarchy-plugin-development` to prepare and review a new exact candidate; do not commit or push source hardening from this skill. Ask for explicit approval immediately before changing any GitHub repository security setting. If the owner declines, record the choice and continue; these are not marketplace requirements. See [`references/security-hardening.md`](references/security-hardening.md). ## Submit a new plugin 1. Confirm the plugin is absent from the marketplace and its ID has never been used by another current, retired, or renamed listing. 2. Refresh allowed categories, tags, fields, helper text, and checklist wording from the live contract. 3. Choose one category and one to three tags, then ask the owner to confirm them. 4. Populate the title as `[Plugin]: <manifest name>`; never leave only the prefix. 5. Prepare the browser fields or exact CLI body in the required order. 6. Ask the owner to confirm every checklist statement, especially ownership or permission for source and preview assets. 7. Show the complete proposed title and submission. 8. If visibility must change, show that action and obtain its own explicit approval before making the repository public. 9. If the candidate must be pushed, show the SHA, branch, remote, commit title, and validation result; obtain separate explicit approval, push, and verify remote branch HEAD equals the candidate. 10. After separate explicit approval, create the issue. 11. Record the issue URL and monitor validation, the Automated Security Baseline, remote review, and publication on that issue. Screenshots are not a prerequisite when fields are known from the live form. ## Verify or update an existing listing Use the verification form, not the new-submission form. For **Verify the currently listed snapshot**, provide the plugin ID, repository root URL, and exact full `listingValidatedCommit` recorded by the marketplace. Do not substitute current HEAD. For **Verify and publish a newer upstream commit**, provide the plugin ID, repository root URL, and exact full candidate SHA. Ensure the configured plugin ID set is unchanged. The existing snapshot remains active while validation is pending. Before creating or editing the request, require the pushed remote branch HEAD to equal the full 40-character candidate SHA. If a push is needed, show the exact action and obtain separate approval first. Then show every form value and acknowledgment, obtain explicit approval, and create or edit the request. Afterward, confirm bot reports bind to the intended commit rather than merely checking that old labels remain. ## Respond to feedback Read the current validation, security-baseline, maintainer-review, and publication comments in full. Bind every finding to the exact reviewed commit. When source changes are required: 1. Return to `omarchy-plugin-development` for implementation, tests, full or focused security review, manual testing, and a new exact release-readiness record. 2. Commit locally and capture the full SHA. 3. Show the exact push and obtain approval before pushing. 4. Prefer reopening and editing the existing request when the live contract permits it; do not create a duplicate merely because the old request was closed. 5. Show the complete proposed issue body and obtain separate approval before reopening or editing. 6. Verify the body after editing and confirm new bot reports reference the new exact commit. 7. A concise maintainer comment may summarize concrete fixes, but it does not replace updating the issue's target commit and must not claim a security audit. Current baseline outcomes are: - `passed` — eligible for the clean automated verification path; - `review-required` — requires authorized maintainer acceptance of the exact reported capabilities and permitted findings; - `needs-fixes` — requires a corrected repository and new validated commit; - scan failure or stale/mismatched evidence — fail closed. For new listings and promoted updates, publication requires the current `approved-and-verified` workflow. Historical labels or stale comments are insufficient. ## Interpret issue automation Opening or editing a correctly formatted request may update existing bot comments in place instead of adding new comments. Timestamps and old labels alone do not prove that a new commit was checked. Verify: - issue is open when review is expected; - issue body contains the intended full SHA; - compatibility comment references that SHA; - Automated Security Baseline references that SHA and has a complete result; - required labels describe the current request; - maintainer approval and final publication bind to that same SHA. If workflow state is unclear, inspect the issue-triggered workflow run and current comments before advising another edit or duplicate request. ## Optional screenshot-assisted guidance Screenshots supplement but never override the live issue template. Request one only when the user asks for visual guidance, reports a UI mismatch, a visible field is ambiguous, or authoritative form content cannot be fetched. Reuse screenshots already supplied. Ask only for the unresolved section, explain the uncertainty, and avoid credentials, private notifications, unrelated tabs, or personal account data. ## Completion report Report: - operation performed; - repository visibility and root URL; - plugin ID and version; - exact candidate, pushed, validated, and listed commit SHAs as distinct values; - validation and release-readiness results; - category and tags when submitting; - issue URL and current labels; - bot reports and the exact commit they reference; - current marketplace state and required next action; - security policy and private-vulnerability-reporting status; - unresolved findings, residual risks, or maintainer action.
This reference records the official GitHub issue templates observed on 2026-09-01. Refresh the live templates before use; labels, options, helper text, and required acknowledgments may change.
The marketplace issue chooser currently presents:
Use the first only for a new listing. Use the second for an existing listing.
Issue title prefix: [Plugin]: followed by the human-readable plugin name. GitHub pre-fills the prefix.
| Field | Control | Required | Guidance |
|---|---|---|---|
| Title | Text input | Yes | Append the human-readable manifest.json name to the prefilled prefix. Example: [Plugin]: Hacker Typer. Never leave only [Plugin]:. |
| Repository URL | Text input | Yes | Public GitHub repository root containing the plugin manifest. No trailing slash or /tree/... path. |
| Category | Single-select dropdown | Yes | Defaults to Appearance with no blank choice. Deliberately select the correct category; do not treat the default as a recommendation. |
| Tags | Multi-select dropdown | Yes | Displays None initially. Select one to three reusable tags; more than three are rejected. |
| Suggest a missing tag | Text input | No | Suggest one reusable missing tag; reviewers decide whether to add it. |
| Maintainer notes | Text area | No | Installation, permissions, dependencies, or other reviewer context. |
| Submission checklist | Checkboxes | All five | Confirm each statement with the owner before checking it. |
Categories currently appear in this order. The dropdown marks the current choice with a check; Appearance is initially selected.
Tags appear in a scrollable multi-select menu in this order. The closed control shows None before any tag is selected.
Exact checklist:
Issue title prefix: [Verify]: . GitHub pre-fills the prefix.
| Field | Control | Required | Guidance |
|---|---|---|---|
| Title | Text input | Yes | Append a concise existing-listing identifier. The current template prescribes only the [Verify]: prefix; the exact plugin ID is the clearest suffix. |
| Verification action | Single-select dropdown | Yes | Defaults to Verify the currently listed snapshot with no blank choice. Deliberately choose the action that matches the requested commit. |
| Plugin ID | Text input | Yes | Exact marketplace plugin ID. Multi-plugin sources are handled source-wide. |
| Repository URL | Text input | Yes | Existing public GitHub repository root URL for the listing. |
| Target commit | Text input | Yes | Full 40-character listed snapshot SHA or current repository HEAD, depending on the action. |
| Verification acknowledgment | Checkbox | Yes | Confirm the exact-commit and non-audit statement below. |
| Standard installation acknowledgment | Checkbox | Conditional | Required only when requesting removal of a manual-installation override. Leave unchecked for an ordinary verification or update even when the sentence itself is true. |
Verification actions appear in this order. The dropdown marks the current choice with a check.
Exact required acknowledgment:
I understand that only the exact target commit can become a verified marketplace snapshot and that verification is not a security audit.
Conditional acknowledgment:
I confirm that this listed root plugin supports the standard Omarchy installation path and does not require manual setup.
Do not check the conditional acknowledgment unless the request is specifically asking the marketplace to remove a manual-installation override.
Guide the user from the refreshed official template and repository facts without requiring screenshots. Provide known values—including Title—immediately.
Use a screenshot only when the user requests visual guidance, reports a mismatch, a field is ambiguous, or the authoritative form cannot be fetched. Reuse any screenshot already present in the conversation.
When a screenshot is genuinely needed:
Screenshots are optional supporting evidence, not authorization to submit. Final approval is based on the complete text summary of fields and acknowledgments, not a required screenshot.
# Marketplace form map This reference records the official GitHub issue templates observed on 2026-09-01. Refresh the live templates before use; labels, options, helper text, and required acknowledgments may change. ## Form chooser The marketplace issue chooser currently presents: 1. **Submit a plugin** — “Propose a public Omarchy plugin repository for the marketplace.” 2. **Verify or update a listed plugin** — “Verify the recorded snapshot or validate and publish a newer exact commit.” Use the first only for a new listing. Use the second for an existing listing. ## Submit a plugin Issue title prefix: `[Plugin]: ` followed by the human-readable plugin name. GitHub pre-fills the prefix. | Field | Control | Required | Guidance | | --- | --- | --- | --- | | Title | Text input | Yes | Append the human-readable `manifest.json` name to the prefilled prefix. Example: `[Plugin]: Hacker Typer`. Never leave only `[Plugin]:`. | | Repository URL | Text input | Yes | Public GitHub repository root containing the plugin manifest. No trailing slash or `/tree/...` path. | | Category | Single-select dropdown | Yes | Defaults to **Appearance** with no blank choice. Deliberately select the correct category; do not treat the default as a recommendation. | | Tags | Multi-select dropdown | Yes | Displays **None** initially. Select one to three reusable tags; more than three are rejected. | | Suggest a missing tag | Text input | No | Suggest one reusable missing tag; reviewers decide whether to add it. | | Maintainer notes | Text area | No | Installation, permissions, dependencies, or other reviewer context. | | Submission checklist | Checkboxes | All five | Confirm each statement with the owner before checking it. | Categories currently appear in this order. The dropdown marks the current choice with a check; **Appearance** is initially selected. - Appearance - Desktop - Developer Tools - Hardware - Productivity - System - Widgets - Other Tags appear in a scrollable multi-select menu in this order. The closed control shows **None** before any tag is selected. - AI - Bar - Hyprland - Launcher - Media - Power management - Quickshell - Security - System - Workspaces Exact checklist: - The repository is public and contains installation and removal instructions. - I have documented the plugin license and any external dependencies. - I confirm that I own or have permission to submit this plugin and its preview assets. - The plugin does not overwrite user configuration without explicit consent. - I understand that approval is for listing and is not a security review. ## Verify or update a listed plugin Issue title prefix: `[Verify]: `. GitHub pre-fills the prefix. | Field | Control | Required | Guidance | | --- | --- | --- | --- | | Title | Text input | Yes | Append a concise existing-listing identifier. The current template prescribes only the `[Verify]:` prefix; the exact plugin ID is the clearest suffix. | | Verification action | Single-select dropdown | Yes | Defaults to **Verify the currently listed snapshot** with no blank choice. Deliberately choose the action that matches the requested commit. | | Plugin ID | Text input | Yes | Exact marketplace plugin ID. Multi-plugin sources are handled source-wide. | | Repository URL | Text input | Yes | Existing public GitHub repository root URL for the listing. | | Target commit | Text input | Yes | Full 40-character listed snapshot SHA or current repository HEAD, depending on the action. | | Verification acknowledgment | Checkbox | Yes | Confirm the exact-commit and non-audit statement below. | | Standard installation acknowledgment | Checkbox | Conditional | Required only when requesting removal of a manual-installation override. Leave unchecked for an ordinary verification or update even when the sentence itself is true. | Verification actions appear in this order. The dropdown marks the current choice with a check. - **Verify the currently listed snapshot** - **Verify and publish a newer upstream commit** Exact required acknowledgment: > I understand that only the exact target commit can become a verified marketplace snapshot and that verification is not a security audit. Conditional acknowledgment: > I confirm that this listed root plugin supports the standard Omarchy installation path and does not require manual setup. Do not check the conditional acknowledgment unless the request is specifically asking the marketplace to remove a manual-installation override. ## Optional screenshot protocol Guide the user from the refreshed official template and repository facts without requiring screenshots. Provide known values—including Title—immediately. Use a screenshot only when the user requests visual guidance, reports a mismatch, a field is ambiguous, or the authoritative form cannot be fetched. Reuse any screenshot already present in the conversation. When a screenshot is genuinely needed: 1. State the specific uncertainty it will resolve. 2. Ask for only the next unresolved visible section. 3. Compare its labels and helper text against the refreshed issue template. 4. Resolve the mismatch, then return to direct field guidance. Screenshots are optional supporting evidence, not authorization to submit. Final approval is based on the complete text summary of fields and acknowledgments, not a required screenshot.
These practices are recommended for public Omarchy plugin repositories, but they are not marketplace eligibility requirements and must not block submission when the owner declines them.
Refresh GitHub’s current documentation before changing repository settings:
Prefer .github/SECURITY.md so GitHub recognizes the repository policy. Adapt this template to the actual project and reporting channel:
# Security Policy
## Supported versions
Security fixes are made against the latest release and the `main` branch.
## Reporting a vulnerability
Please report suspected vulnerabilities through [GitHub's private vulnerability reporting](https://github.com/OWNER/REPOSITORY/security/advisories/new). Do not open a public issue for an undisclosed security problem.
Include the affected version, impact, reproduction steps, and any suggested mitigation. Please avoid including sensitive personal data that is not needed to investigate the report.
Before adding it:
OWNER/REPOSITORY with the exact public repository.omarchy-plugin-development to add or edit the policy, rerun release-readiness checks, and produce a new exact candidate. The publisher must not mutate the reviewed source snapshot.GitHub permits owners and administrators of public repositories to enable private vulnerability reporting. Finish repository preparation while private, then make the repository public only with explicit owner approval.
After it is public, check the current state:
gh api repos/OWNER/REPOSITORY/private-vulnerability-reporting
A successful response includes an enabled boolean. A 404 while the repository is private does not prove the feature is unavailable after publication.
Immediately before changing the setting, obtain explicit owner approval. Enable it with:
gh api \
--method PUT \
repos/OWNER/REPOSITORY/private-vulnerability-reporting
Verify afterward:
gh api repos/OWNER/REPOSITORY/private-vulnerability-reporting
Expect {"enabled":true}. Also verify that the repository’s Security area offers Report a vulnerability and that the policy link resolves to /security/advisories/new.
Repository administrators should watch the repository for Security alerts or otherwise configure notifications so private reports are not missed.
Treat this as a separate repository-hardening decision, not part of marketplace approval:
# Optional repository security hardening
These practices are recommended for public Omarchy plugin repositories, but they are not marketplace eligibility requirements and must not block submission when the owner declines them.
Refresh GitHub's current documentation before changing repository settings:
- Security policy: https://docs.github.com/en/code-security/getting-started/adding-a-security-policy-to-your-repository
- Private vulnerability reporting: https://docs.github.com/en/code-security/security-advisories/working-with-repository-security-advisories/configuring-private-vulnerability-reporting-for-a-repository
## Security policy
Prefer `.github/SECURITY.md` so GitHub recognizes the repository policy. Adapt this template to the actual project and reporting channel:
```markdown
# Security Policy
## Supported versions
Security fixes are made against the latest release and the `main` branch.
## Reporting a vulnerability
Please report suspected vulnerabilities through [GitHub's private vulnerability reporting](https://github.com/OWNER/REPOSITORY/security/advisories/new). Do not open a public issue for an undisclosed security problem.
Include the affected version, impact, reproduction steps, and any suggested mitigation. Please avoid including sensitive personal data that is not needed to investigate the report.
```
Before adding it:
1. Replace `OWNER/REPOSITORY` with the exact public repository.
2. Confirm the supported-version statement matches the project's maintenance policy.
3. Do not promise response times or remediation guarantees the maintainer has not approved.
4. Return to `omarchy-plugin-development` to add or edit the policy, rerun release-readiness checks, and produce a new exact candidate. The publisher must not mutate the reviewed source snapshot.
## Private vulnerability reporting
GitHub permits owners and administrators of public repositories to enable private vulnerability reporting. Finish repository preparation while private, then make the repository public only with explicit owner approval.
After it is public, check the current state:
```bash
gh api repos/OWNER/REPOSITORY/private-vulnerability-reporting
```
A successful response includes an `enabled` boolean. A `404` while the repository is private does not prove the feature is unavailable after publication.
Immediately before changing the setting, obtain explicit owner approval. Enable it with:
```bash
gh api \
--method PUT \
repos/OWNER/REPOSITORY/private-vulnerability-reporting
```
Verify afterward:
```bash
gh api repos/OWNER/REPOSITORY/private-vulnerability-reporting
```
Expect `{"enabled":true}`. Also verify that the repository's **Security** area offers **Report a vulnerability** and that the policy link resolves to `/security/advisories/new`.
Repository administrators should watch the repository for **Security alerts** or otherwise configure notifications so private reports are not missed.
## Approval and reporting
Treat this as a separate repository-hardening decision, not part of marketplace approval:
- Ask before enabling or disabling the setting.
- Never include vulnerability details or credentials in public issues, screenshots, or logs.
- If the owner declines, continue marketplace preparation and report the feature as optional and not enabled.
Refresh SUBMISSION.md before using this template. Preserve all six headings, their order, and the exact checklist text required by the current official contract.
Proposed issue title:
[Plugin]: {{plugin_name}}
Proposed issue body:
### Repository URL
{{public_github_repository_root_url}}
### Category
{{category}}
### Tags
{{tag_1}}, {{tag_2}}
### Suggest a missing tag
_No response_
### Maintainer notes
_No response_
### Submission checklist
- [ ] The repository is public and contains installation and removal instructions.
- [ ] I have documented the plugin license and any external dependencies.
- [ ] I confirm that I own or have permission to submit this plugin and its preview assets.
- [ ] The plugin does not overwrite user configuration without explicit consent.
- [ ] I understand that approval is for listing and is not a security review.
Replace the placeholders. Use one to three allowed tags and remove unused tag placeholders and punctuation. Replace _No response_ only when the owner wants to suggest a missing reusable tag or provide maintainer notes.
Before creating the issue:
[ ] to [x].Then, and only then, create the issue using the authenticated GitHub account chosen by the owner:
gh issue create \
--repo HANCORE-linux/omarchy-plugin-marketplace \
--title "[Plugin]: {{plugin_name}}" \
--body-file /tmp/omarchy-plugin-submission.md
# CLI submission template
Refresh `SUBMISSION.md` before using this template. Preserve all six headings, their order, and the exact checklist text required by the current official contract.
Proposed issue title:
```text
[Plugin]: {{plugin_name}}
```
Proposed issue body:
```markdown
### Repository URL
{{public_github_repository_root_url}}
### Category
{{category}}
### Tags
{{tag_1}}, {{tag_2}}
### Suggest a missing tag
_No response_
### Maintainer notes
_No response_
### Submission checklist
- [ ] The repository is public and contains installation and removal instructions.
- [ ] I have documented the plugin license and any external dependencies.
- [ ] I confirm that I own or have permission to submit this plugin and its preview assets.
- [ ] The plugin does not overwrite user configuration without explicit consent.
- [ ] I understand that approval is for listing and is not a security review.
```
Replace the placeholders. Use one to three allowed tags and remove unused tag placeholders and punctuation. Replace `_No response_` only when the owner wants to suggest a missing reusable tag or provide maintainer notes.
Before creating the issue:
1. Confirm the repository URL is public and points to the root.
2. Confirm every checklist statement directly with the owner.
3. Change only the owner-confirmed checklist items from `[ ]` to `[x]`.
4. Show the complete final title and body, including checkbox states.
5. Obtain explicit approval for this exact submission.
Then, and only then, create the issue using the authenticated GitHub account chosen by the owner:
```bash
gh issue create \
--repo HANCORE-linux/omarchy-plugin-marketplace \
--title "[Plugin]: {{plugin_name}}" \
--body-file /tmp/omarchy-plugin-submission.md
```
This reference summarizes the official verification model observed on 2026-08-21. Always refresh VERIFICATION.md, SUBMISSION.md, and the live verification issue template before acting.
Verification binds marketplace evidence to one exact repository commit. It is not a security audit, certification, warranty, endorsement, or guarantee that a plugin is safe. Community plugins remain unsandboxed third-party code.
A branch name, release name, version string, or current repository state is not a substitute for the required full 40-character commit SHA.
A correctly formatted submission triggers compatibility validation and an Automated Security Baseline against the exact validated commit without executing plugin code.
Current baseline outcomes:
passed — complete scan with no findings or review capabilities;review-required — current policy permits a narrowly scoped maintainer review of the exact reported capabilities and non-blocking findings;needs-fixes — repository changes and a newly validated commit are required;A new listing is published only through the current approved-and-verified workflow. A clean current passed result can become Verified automatically through that publication path. A selective review-required result needs an authorized maintainer’s exact-evidence acceptance. Blocking findings and incomplete scans prevent publication.
The historical approved-for-listing label does not publish new submissions.
Use Verify the currently listed snapshot only when targeting the exact commit already stored as listingValidatedCommit.
Required values:
listingValidatedCommit.A clean complete result can publish snapshot verification automatically. Capability-only review-required may require the narrowly authorized maintainer-verified path. Findings, scan failures, stale evidence, or mismatches remain Unverified. Unverified is not an assertion that the plugin is malicious.
Use Verify and publish a newer upstream commit for an existing listing whose repository HEAD should replace the marketplace snapshot.
Required values:
The configured plugin ID set must remain unchanged. Multi-plugin repositories are promoted source-wide. The existing marketplace snapshot remains active while the update is pending.
Validation and the baseline scan the requested commit. Publication performs a fresh scan and requires exact agreement across repository, plugin set, policy, outcome, findings, capabilities, report, approval event, and reviewer evidence. Successful promotion atomically replaces the current snapshot while retaining superseded evidence in history.
Scheduled catalog refreshes may observe that repository branch HEAD differs from the verified snapshot. The marketplace can display Update unverified; existing verification evidence continues to describe only the previously approved exact commit.
Use the newer-upstream verification action to promote the changed commit. Do not imply that an old verification result covers new code.
# Commit-bound plugin verification This reference summarizes the official verification model observed on 2026-08-21. Always refresh `VERIFICATION.md`, `SUBMISSION.md`, and the live verification issue template before acting. ## Meaning and boundary Verification binds marketplace evidence to one exact repository commit. It is not a security audit, certification, warranty, endorsement, or guarantee that a plugin is safe. Community plugins remain unsandboxed third-party code. A branch name, release name, version string, or current repository state is not a substitute for the required full 40-character commit SHA. ## New listing A correctly formatted submission triggers compatibility validation and an Automated Security Baseline against the exact validated commit without executing plugin code. Current baseline outcomes: - `passed` — complete scan with no findings or review capabilities; - `review-required` — current policy permits a narrowly scoped maintainer review of the exact reported capabilities and non-blocking findings; - `needs-fixes` — repository changes and a newly validated commit are required; - scan error, stale report, or evidence mismatch — fail closed. A new listing is published only through the current `approved-and-verified` workflow. A clean current `passed` result can become Verified automatically through that publication path. A selective `review-required` result needs an authorized maintainer's exact-evidence acceptance. Blocking findings and incomplete scans prevent publication. The historical `approved-for-listing` label does not publish new submissions. ## Verify a currently listed snapshot Use **Verify the currently listed snapshot** only when targeting the exact commit already stored as `listingValidatedCommit`. Required values: - exact existing plugin ID; - existing public GitHub repository root URL; - full recorded `listingValidatedCommit`. A clean complete result can publish snapshot verification automatically. Capability-only `review-required` may require the narrowly authorized `maintainer-verified` path. Findings, scan failures, stale evidence, or mismatches remain Unverified. Unverified is not an assertion that the plugin is malicious. ## Publish a newer upstream commit Use **Verify and publish a newer upstream commit** for an existing listing whose repository HEAD should replace the marketplace snapshot. Required values: - exact existing plugin ID; - existing public GitHub repository root URL; - full 40-character current repository HEAD SHA. The configured plugin ID set must remain unchanged. Multi-plugin repositories are promoted source-wide. The existing marketplace snapshot remains active while the update is pending. Validation and the baseline scan the requested commit. Publication performs a fresh scan and requires exact agreement across repository, plugin set, policy, outcome, findings, capabilities, report, approval event, and reviewer evidence. Successful promotion atomically replaces the current snapshot while retaining superseded evidence in history. ## Update-unverified state Scheduled catalog refreshes may observe that repository branch HEAD differs from the verified snapshot. The marketplace can display `Update unverified`; existing verification evidence continues to describe only the previously approved exact commit. Use the newer-upstream verification action to promote the changed commit. Do not imply that an old verification result covers new code. ## Handling failures - Read the current bot-authored validation, baseline, and publication comments. - Do not open duplicate issues for retries. - Fix the repository or existing issue, commit and push, then capture the new SHA. - Obtain owner approval before editing an issue to trigger another run. - Confirm that reports and approval events bind to the same intended commit. - If registration succeeded but deployment or issue finalization failed, ask a maintainer to retry the publication phase; do not resubmit or reapply approval blindly.