supercmo-skills 0.1.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. supercmo_skills-0.1.8/.claude-plugin/marketplace.json +19 -0
  2. supercmo_skills-0.1.8/.claude-plugin/plugin.json +9 -0
  3. supercmo_skills-0.1.8/.claude-plugin/supercmo.json +18 -0
  4. supercmo_skills-0.1.8/.codex-plugin/marketplace.json +19 -0
  5. supercmo_skills-0.1.8/.codex-plugin/mcp.json +8 -0
  6. supercmo_skills-0.1.8/.codex-plugin/plugin.json +11 -0
  7. supercmo_skills-0.1.8/.gitattributes +3 -0
  8. supercmo_skills-0.1.8/.github/CODEOWNERS +3 -0
  9. supercmo_skills-0.1.8/.github/ISSUE_TEMPLATE/bug_report.yml +35 -0
  10. supercmo_skills-0.1.8/.github/ISSUE_TEMPLATE/config.yml +8 -0
  11. supercmo_skills-0.1.8/.github/ISSUE_TEMPLATE/skill_request.yml +21 -0
  12. supercmo_skills-0.1.8/.github/PULL_REQUEST_TEMPLATE.md +20 -0
  13. supercmo_skills-0.1.8/.github/dependabot.yml +10 -0
  14. supercmo_skills-0.1.8/.github/workflows/release.yml +108 -0
  15. supercmo_skills-0.1.8/.github/workflows/secret-scan.yml +28 -0
  16. supercmo_skills-0.1.8/.github/workflows/validate.yml +57 -0
  17. supercmo_skills-0.1.8/.gitignore +30 -0
  18. supercmo_skills-0.1.8/.mcp.json +8 -0
  19. supercmo_skills-0.1.8/CONTRIBUTING.md +55 -0
  20. supercmo_skills-0.1.8/LICENSE +202 -0
  21. supercmo_skills-0.1.8/NOTICE +5 -0
  22. supercmo_skills-0.1.8/PKG-INFO +256 -0
  23. supercmo_skills-0.1.8/README.md +235 -0
  24. supercmo_skills-0.1.8/SECURITY.md +35 -0
  25. supercmo_skills-0.1.8/TELEMETRY.md +81 -0
  26. supercmo_skills-0.1.8/assets/logo.png +0 -0
  27. supercmo_skills-0.1.8/bin/install.js +496 -0
  28. supercmo_skills-0.1.8/bin/lib/clihosts.js +71 -0
  29. supercmo_skills-0.1.8/bin/lib/components.js +94 -0
  30. supercmo_skills-0.1.8/bin/lib/config.js +80 -0
  31. supercmo_skills-0.1.8/bin/lib/install.test.js +359 -0
  32. supercmo_skills-0.1.8/bin/lib/jsonhosts.js +138 -0
  33. supercmo_skills-0.1.8/gemini-extension.json +11 -0
  34. supercmo_skills-0.1.8/mcpb/icon.png +0 -0
  35. supercmo_skills-0.1.8/mcpb/manifest.json +61 -0
  36. supercmo_skills-0.1.8/package.json +22 -0
  37. supercmo_skills-0.1.8/pyproject.toml +57 -0
  38. supercmo_skills-0.1.8/scripts/bump_version.py +119 -0
  39. supercmo_skills-0.1.8/scripts/check_catalog_sync.py +53 -0
  40. supercmo_skills-0.1.8/scripts/check_shared_client.py +81 -0
  41. supercmo_skills-0.1.8/scripts/doctor.py +52 -0
  42. supercmo_skills-0.1.8/scripts/installer.sh +51 -0
  43. supercmo_skills-0.1.8/scripts/listing_gate.py +198 -0
  44. supercmo_skills-0.1.8/scripts/package_plugins.py +95 -0
  45. supercmo_skills-0.1.8/scripts/quick_validate.py +253 -0
  46. supercmo_skills-0.1.8/scripts/supercmo_env.py +522 -0
  47. supercmo_skills-0.1.8/scripts/supercmo_skills/__init__.py +23 -0
  48. supercmo_skills-0.1.8/scripts/supercmo_skills/__main__.py +56 -0
  49. supercmo_skills-0.1.8/scripts/supercmo_skills/catalog.py +466 -0
  50. supercmo_skills-0.1.8/scripts/supercmo_skills/client.py +1079 -0
  51. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/__init__.py +8 -0
  52. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/__main__.py +3 -0
  53. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/registry.py +17 -0
  54. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/server.py +122 -0
  55. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/tools/__init__.py +9 -0
  56. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/tools/analyze.py +100 -0
  57. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/tools/audio.py +90 -0
  58. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/tools/extract.py +60 -0
  59. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/tools/image.py +64 -0
  60. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/tools/jobs.py +44 -0
  61. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/tools/setup.py +41 -0
  62. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/tools/stitch.py +30 -0
  63. supercmo_skills-0.1.8/scripts/supercmo_skills/mcp/tools/video.py +73 -0
  64. supercmo_skills-0.1.8/scripts/supercmo_skills/paths.py +19 -0
  65. supercmo_skills-0.1.8/scripts/supercmo_skills/providers/__init__.py +1 -0
  66. supercmo_skills-0.1.8/scripts/supercmo_skills/providers/elevenlabs.py +171 -0
  67. supercmo_skills-0.1.8/scripts/supercmo_skills/providers/fal.py +387 -0
  68. supercmo_skills-0.1.8/scripts/supercmo_skills/providers/firecrawl.py +56 -0
  69. supercmo_skills-0.1.8/scripts/supercmo_skills/providers/gemini.py +131 -0
  70. supercmo_skills-0.1.8/scripts/supercmo_skills/readiness.py +83 -0
  71. supercmo_skills-0.1.8/scripts/supercmo_skills/stitch.py +191 -0
  72. supercmo_skills-0.1.8/scripts/supercmo_skills/telemetry.py +358 -0
  73. supercmo_skills-0.1.8/scripts/supercmo_skills/tool_specs.py +476 -0
  74. supercmo_skills-0.1.8/scripts/sync_skills.py +91 -0
  75. supercmo_skills-0.1.8/server.json +27 -0
  76. supercmo_skills-0.1.8/skills/analyzing-products/SKILL.md +56 -0
  77. supercmo_skills-0.1.8/skills/analyzing-products/evals/eval_cases.json +15 -0
  78. supercmo_skills-0.1.8/skills/analyzing-products/references/photo-analysis.md +44 -0
  79. supercmo_skills-0.1.8/skills/analyzing-products/references/url-extract.md +62 -0
  80. supercmo_skills-0.1.8/skills/generating-audio/SKILL.md +130 -0
  81. supercmo_skills-0.1.8/skills/generating-audio/evals/eval_cases.json +20 -0
  82. supercmo_skills-0.1.8/skills/generating-audio/references/directing-the-read.md +51 -0
  83. supercmo_skills-0.1.8/skills/generating-images/SKILL.md +144 -0
  84. supercmo_skills-0.1.8/skills/generating-images/evals/eval_cases.json +22 -0
  85. supercmo_skills-0.1.8/skills/generating-images/references/format-cinematic.md +22 -0
  86. supercmo_skills-0.1.8/skills/generating-images/references/format-portrait.md +49 -0
  87. supercmo_skills-0.1.8/skills/generating-images/references/format-poster.md +47 -0
  88. supercmo_skills-0.1.8/skills/generating-images/references/prompt-flux.md +13 -0
  89. supercmo_skills-0.1.8/skills/generating-images/references/prompt-gpt-image-2.md +26 -0
  90. supercmo_skills-0.1.8/skills/generating-images/references/prompt-grok.md +11 -0
  91. supercmo_skills-0.1.8/skills/generating-images/references/prompt-nano-banana.md +53 -0
  92. supercmo_skills-0.1.8/skills/generating-images/references/prompt-seedream.md +27 -0
  93. supercmo_skills-0.1.8/skills/generating-videos/SKILL.md +176 -0
  94. supercmo_skills-0.1.8/skills/generating-videos/evals/eval_cases.json +18 -0
  95. supercmo_skills-0.1.8/skills/generating-videos/references/prompt-gemini-omni.md +42 -0
  96. supercmo_skills-0.1.8/skills/generating-videos/references/prompt-grok.md +37 -0
  97. supercmo_skills-0.1.8/skills/generating-videos/references/prompt-kling.md +40 -0
  98. supercmo_skills-0.1.8/skills/generating-videos/references/prompt-seedance.md +51 -0
  99. supercmo_skills-0.1.8/skills/generating-videos/references/prompt-veo.md +61 -0
  100. supercmo_skills-0.1.8/skills/generating-videos/references/prompt-wan.md +42 -0
  101. supercmo_skills-0.1.8/tests/evals/run_eval.py +196 -0
  102. supercmo_skills-0.1.8/tests/test_installer.sh +34 -0
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "superCMO-skills",
3
+ "owner": {
4
+ "name": "SuperCMO",
5
+ "url": "https://getsupercmo.ai"
6
+ },
7
+ "metadata": {
8
+ "description": "Open, model-agnostic, BYO-keys marketing skills for AI agents",
9
+ "version": "0.1.8",
10
+ "repository": "https://github.com/SupercmoHQ/superCMO-skills"
11
+ },
12
+ "plugins": [
13
+ {
14
+ "name": "supercmo",
15
+ "description": "SuperCMO marketing skills — the whole repo installs as one plugin (everything under skills/ ships with it).",
16
+ "source": "./"
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "supercmo",
3
+ "version": "0.1.8",
4
+ "description": "Open, model-agnostic, BYO-keys marketing skills for AI agents. Installing adds the whole skill set as one plugin; each skill also works standalone.",
5
+ "author": {
6
+ "name": "SuperCMO"
7
+ },
8
+ "repository": "https://github.com/SupercmoHQ/superCMO-skills"
9
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "keyword": "SUPERCMO",
3
+ "visible": false,
4
+ "skills": [
5
+ "generating-images",
6
+ "generating-videos",
7
+ "analyzing-products",
8
+ "generating-audio"
9
+ ],
10
+ "agents": [],
11
+ "references": [],
12
+ "scripts": [
13
+ "supercmo_env.py"
14
+ ],
15
+ "mcp_servers": [
16
+ "supercmo"
17
+ ]
18
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "superCMO-skills",
3
+ "owner": {
4
+ "name": "SuperCMO",
5
+ "url": "https://getsupercmo.ai"
6
+ },
7
+ "metadata": {
8
+ "description": "Open, model-agnostic, BYO-keys marketing skills for AI agents",
9
+ "version": "0.1.8",
10
+ "repository": "https://github.com/SupercmoHQ/superCMO-skills"
11
+ },
12
+ "plugins": [
13
+ {
14
+ "name": "supercmo",
15
+ "description": "SuperCMO marketing skills — the whole repo installs as one plugin (everything under skills/ ships with it).",
16
+ "source": "./"
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "supercmo": {
4
+ "command": "uvx",
5
+ "args": ["supercmo-skills@0.1.8"]
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "supercmo",
3
+ "version": "0.1.8",
4
+ "description": "Open, model-agnostic, BYO-keys marketing skills for AI agents. Installing adds the whole skill set as one plugin; each skill also works standalone.",
5
+ "author": {
6
+ "name": "SuperCMO"
7
+ },
8
+ "repository": "https://github.com/SupercmoHQ/superCMO-skills",
9
+ "skills": "./skills/",
10
+ "mcpServers": "./.codex-plugin/mcp.json"
11
+ }
@@ -0,0 +1,3 @@
1
+ # The public projection never ships internal/ — `git archive` excludes it natively,
2
+ # so even a publish that forgets to strip internal/ cannot leak it.
3
+ internal/ export-ignore
@@ -0,0 +1,3 @@
1
+ # Owner-approval gate: every change requires review from a repository owner.
2
+ # (Enable "Require review from Code Owners" in the branch protection rule for this to enforce.)
3
+ * @kshitizkgp @SayoniDuttaRoy
@@ -0,0 +1,35 @@
1
+ name: Bug report
2
+ description: A skill or tool isn't behaving as documented.
3
+ labels: [bug]
4
+ body:
5
+ - type: input
6
+ id: skill
7
+ attributes:
8
+ label: Skill / tool
9
+ placeholder: e.g. generating-images
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: expected
14
+ attributes:
15
+ label: What you expected
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: actual
20
+ attributes:
21
+ label: What actually happened
22
+ validations:
23
+ required: true
24
+ - type: textarea
25
+ id: repro
26
+ attributes:
27
+ label: Steps to reproduce
28
+ description: Include the prompt/command. Redact any credentials.
29
+ validations:
30
+ required: true
31
+ - type: input
32
+ id: env
33
+ attributes:
34
+ label: Environment
35
+ placeholder: e.g. Claude Code 2.1.x, macOS 15
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Security vulnerability
4
+ url: https://github.com/SupercmoHQ/superCMO-skills/blob/main/SECURITY.md
5
+ about: Do not file public issues for security problems — see our security policy.
6
+ - name: Question / discussion
7
+ url: https://github.com/SupercmoHQ/superCMO-skills/discussions
8
+ about: Ask questions and discuss ideas in Discussions.
@@ -0,0 +1,21 @@
1
+ name: Skill request / idea
2
+ description: Propose a new skill or an improvement to an existing one.
3
+ labels: [enhancement]
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: What marketing job should this skill do?
9
+ description: Describe the task and when an operator would reach for it.
10
+ validations:
11
+ required: true
12
+ - type: input
13
+ id: category
14
+ attributes:
15
+ label: Category
16
+ placeholder: ads / seo / social / creative / analytics
17
+ - type: textarea
18
+ id: notes
19
+ attributes:
20
+ label: Anything else
21
+ description: Existing tools it would call, references, prior art.
@@ -0,0 +1,20 @@
1
+ <!-- Thanks for contributing to SuperCMO skills! -->
2
+
3
+ ## What this changes
4
+
5
+ <!-- Brief description. Link any related issue. -->
6
+
7
+ ## Type
8
+
9
+ - [ ] New skill
10
+ - [ ] Change to an existing skill
11
+ - [ ] Shared script / MCP tool (`scripts/`, `scripts/supercmo_skills/mcp/`)
12
+ - [ ] Docs / repo infrastructure
13
+
14
+ ## Checklist
15
+
16
+ - [ ] No credentials, tokens, or secrets are committed (keys come from env vars).
17
+ - [ ] `name` matches the folder; `description` says **what + when** and is ≤ 1024 chars.
18
+ - [ ] Passes local validation — `python3 scripts/quick_validate.py`, `scripts/listing_gate.py`, `scripts/check_shared_client.py` (CI runs the same).
19
+ - [ ] SKILL.md body is under ~500 lines; detail is in `references/`.
20
+ - [ ] Any script that mutates remote state supports `--dry-run` and defaults to paused/inactive.
@@ -0,0 +1,10 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: github-actions
4
+ directory: "/"
5
+ schedule:
6
+ interval: weekly
7
+ - package-ecosystem: pip
8
+ directory: "/"
9
+ schedule:
10
+ interval: weekly
@@ -0,0 +1,108 @@
1
+ name: Release
2
+
3
+ # Tag a release — the tag must match package.json "version". scripts/bump_version.py keeps every
4
+ # manifest + uvx pin in sync from that one value; the assert below re-checks it before publishing.
5
+ # python3 scripts/bump_version.py X.Y.Z then git tag vX.Y.Z && git push origin vX.Y.Z
6
+ #
7
+ # Jobs:
8
+ # release — always: build the plugin bundle + GitHub Release (no external publish).
9
+ # pypi-publish — publishes supercmo-skills to PyPI via OIDC Trusted Publishing (the uvx package
10
+ # + the MCP-registry backing package). GATED by the `pypi` environment.
11
+ # npm-publish — publishes @supercmo/skills to npm via OIDC Trusted Publishing. GATED by `npm`.
12
+ # mcp-registry — registers server.json in the official MCP registry (needs the PyPI package live).
13
+ # GATED by `mcp-registry`.
14
+ #
15
+ # THE GATE: the three publish jobs use protected GitHub Environments. Configure each environment with
16
+ # required reviewers (the Final Launch Check approver) so a tag push PAUSES for approval instead of
17
+ # publishing. A tag alone never publishes.
18
+
19
+ on:
20
+ push:
21
+ tags: ["v*"]
22
+
23
+ permissions: {}
24
+
25
+ jobs:
26
+ release:
27
+ runs-on: ubuntu-latest
28
+ permissions:
29
+ contents: write # create the GitHub Release + upload the asset
30
+ steps:
31
+ - uses: actions/checkout@v4
32
+ - uses: actions/setup-python@v5
33
+ with:
34
+ python-version: "3.11"
35
+ - uses: actions/setup-node@v4
36
+ with:
37
+ node-version: "20"
38
+ - name: Assert tag matches package.json + every manifest version + uvx pin
39
+ run: python3 scripts/bump_version.py --check --tag "$GITHUB_REF_NAME"
40
+ - name: Build plugin bundle
41
+ run: |
42
+ python3 -m pip install --quiet pyyaml
43
+ python3 scripts/package_plugins.py
44
+ - name: Build .mcpb bundle (Smithery / Claude Desktop)
45
+ run: npx --yes @anthropic-ai/mcpb@latest pack mcpb dist/supercmo.mcpb
46
+ - name: Publish GitHub Release (idempotent)
47
+ env:
48
+ GH_TOKEN: ${{ github.token }}
49
+ run: |
50
+ # A pre-launch re-seed force-pushes the same tag, re-triggering this job. Create the release
51
+ # the first time; on a re-run the release already exists, so just refresh the assets
52
+ # instead of failing on "a release with the same tag name already exists".
53
+ if gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then
54
+ gh release upload "$GITHUB_REF_NAME" dist/supercmo-plugin.zip dist/supercmo.mcpb --clobber
55
+ else
56
+ gh release create "$GITHUB_REF_NAME" dist/supercmo-plugin.zip dist/supercmo.mcpb --generate-notes
57
+ fi
58
+
59
+ pypi-publish:
60
+ needs: release
61
+ runs-on: ubuntu-latest
62
+ environment: pypi # protect with required reviewers = the Final Launch Check gate
63
+ permissions:
64
+ id-token: write # OIDC Trusted Publishing — no token stored
65
+ steps:
66
+ - uses: actions/checkout@v4
67
+ - uses: actions/setup-python@v5
68
+ with:
69
+ python-version: "3.11"
70
+ - name: Build wheel + sdist
71
+ run: |
72
+ python3 -m pip install --quiet build
73
+ python3 -m build
74
+ - name: Publish to PyPI (OIDC)
75
+ uses: pypa/gh-action-pypi-publish@release/v1
76
+
77
+ npm-publish:
78
+ needs: release
79
+ runs-on: ubuntu-latest
80
+ environment: npm # protect with required reviewers = the Final Launch Check gate
81
+ permissions:
82
+ contents: read
83
+ id-token: write # OIDC Trusted Publishing — provenance auto-attached, no token
84
+ steps:
85
+ - uses: actions/checkout@v4
86
+ - uses: actions/setup-node@v4
87
+ with:
88
+ node-version: "20"
89
+ registry-url: "https://registry.npmjs.org"
90
+ - run: npm install -g npm@latest # OIDC needs npm >= 11.5.1
91
+ - run: python3 -m pip install --quiet pyyaml # prepublishOnly runs scripts/quick_validate.py
92
+ - run: npm publish --access public
93
+
94
+ mcp-registry:
95
+ needs: pypi-publish # the registry entry points at the PyPI package — it must be live first
96
+ runs-on: ubuntu-latest
97
+ environment: mcp-registry
98
+ permissions:
99
+ id-token: write # `mcp-publisher login github-oidc`
100
+ steps:
101
+ - uses: actions/checkout@v4
102
+ - name: Install mcp-publisher
103
+ run: |
104
+ curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_linux_amd64.tar.gz" | tar xz mcp-publisher
105
+ - name: Publish server.json to the MCP registry
106
+ run: |
107
+ ./mcp-publisher login github-oidc
108
+ ./mcp-publisher publish
@@ -0,0 +1,28 @@
1
+ # Scans every push and PR for committed secrets over the FULL history.
2
+ # Runs the OSS gitleaks binary directly — NOT gitleaks/gitleaks-action@v2, which requires a
3
+ # paid GITLEAKS_LICENSE for org-owned repos (SupercmoHQ) and hard-fails before scanning.
4
+ # The binary is MIT and needs no license. A local gitleaks pre-commit hook is an optional
5
+ # extra for maintainers.
6
+ name: Secret scan
7
+ on:
8
+ push:
9
+ pull_request:
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ jobs:
15
+ gitleaks:
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ with:
20
+ fetch-depth: 0 # full history so gitleaks scans every commit
21
+ - name: Install gitleaks (OSS binary — no org license)
22
+ run: |
23
+ VERSION=8.21.2
24
+ curl -sSfL "https://github.com/gitleaks/gitleaks/releases/download/v${VERSION}/gitleaks_${VERSION}_linux_x64.tar.gz" \
25
+ | sudo tar -xz -C /usr/local/bin gitleaks
26
+ gitleaks version
27
+ - name: Scan full git history
28
+ run: gitleaks detect --source . --redact --verbose --exit-code 1
@@ -0,0 +1,57 @@
1
+ # Blocking validation: structural + frontmatter lint (quick_validate), the listing gate
2
+ # (scripts smoke + spend/social --dry-run; listing_gate.py), and a plugin-bundle build smoke,
3
+ # plus the Agent Skills spec validator (skills-ref) as an advisory check.
4
+ name: Validate
5
+ on:
6
+ push:
7
+ branches: [main, dev]
8
+ pull_request:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ validate:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: actions/setup-python@v5
19
+ with:
20
+ python-version: "3.12"
21
+
22
+ - name: Structural + frontmatter validation (blocking)
23
+ run: |
24
+ pip install pyyaml
25
+ python3 scripts/quick_validate.py
26
+ python3 scripts/sync_skills.py --check # README skills catalog must be in sync
27
+
28
+ - name: Listing gate — scripts smoke + spend/social --dry-run (blocking)
29
+ run: |
30
+ python3 scripts/listing_gate.py --selftest # regression-test the gate logic
31
+ python3 scripts/listing_gate.py
32
+
33
+ - name: Shared-client seam — no raw vendor HTTP (blocking)
34
+ run: python3 scripts/check_shared_client.py
35
+
36
+ - name: Provider-key catalog in sync — registry vs .mcp.json/config.js (blocking)
37
+ run: python3 scripts/check_catalog_sync.py
38
+
39
+ - name: Plugin bundle build smoke (blocking)
40
+ run: python3 scripts/package_plugins.py # must build a complete supercmo-plugin.zip (pyyaml installed above)
41
+
42
+ - name: Agent Skills spec validation (skills-ref)
43
+ # Not yet blocking: the skills-ref CLI interface is young — verify it, then
44
+ # remove continue-on-error to make it a hard gate.
45
+ continue-on-error: true
46
+ run: |
47
+ pip install skills-ref 2>/dev/null \
48
+ || pip install "git+https://github.com/agentskills/agentskills.git#subdirectory=skills-ref" 2>/dev/null \
49
+ || { echo "skills-ref not installable yet — skipping"; exit 0; }
50
+ for d in skills/*/; do
51
+ [ -f "${d}SKILL.md" ] && skills-ref validate "$d" || true
52
+ done
53
+
54
+ - name: Trigger evals (advisory)
55
+ # should-trigger / should-not-trigger per skill. Reports on PRs; never gates merge.
56
+ continue-on-error: true
57
+ run: python3 tests/evals/run_eval.py
@@ -0,0 +1,30 @@
1
+ # Build and package output
2
+ dist/
3
+
4
+ # Python caching
5
+ __pycache__/
6
+ *.pyc
7
+ *.pyo
8
+ *.pyd
9
+ .pytest_cache/
10
+ .coverage
11
+ htmlcov/
12
+
13
+ # Local agents and test staging dirs
14
+ .supercmo/
15
+ .claude/
16
+
17
+ # System specific files
18
+ .DS_Store
19
+ Thumbs.db
20
+
21
+ # Environments
22
+ .env
23
+ .env.*
24
+
25
+ # host-smoke generated media (not committed)
26
+ _signoff-media/
27
+ .gstack/
28
+
29
+ # generated media output (default ./supercmo-media; tools write here)
30
+ supercmo-media/
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "supercmo": {
4
+ "command": "uvx",
5
+ "args": ["supercmo-skills@0.1.8"]
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,55 @@
1
+ # Contributing to SuperCMO Skills
2
+
3
+ Thanks for adding a skill, agent, or MCP tool. This repo is one cross-host plugin: a skill you author
4
+ runs unchanged in Claude Code, Cursor, Codex, Claude Cowork, and other SKILL.md-compatible hosts. Two
5
+ rules are non-negotiable: **bring-your-own-keys** (never a key in the repo) and **route all
6
+ vendor/network calls through `supercmo_env`** (CI enforces it).
7
+
8
+ `skills/generating-images/` is the reference build — match its shape when in doubt.
9
+
10
+ ## Add a skill
11
+
12
+ 1. **Create the folder:** `skills/<your-skill>/` (folder name must equal the `name:` in frontmatter —
13
+ lowercase, hyphenated, `^[a-z0-9]+(-[a-z0-9]+)*$`). `skills/generating-images/` is the reference
14
+ layout to model it on.
15
+ 2. **Frontmatter:** `name`, `description` (state WHAT it does + WHEN to use it, including the trigger
16
+ phrases a user would say), `license: Apache-2.0`, and `metadata:` (`version`, `category`; add
17
+ `writes: spend | social` **only** for skills that spend money or post — it defaults to `none`, so
18
+ most skills omit it, like the reference skill does). No top-level `version`, no `platforms`, no
19
+ angle brackets in `name`/`description`.
20
+ 3. **Keep `SKILL.md` short.** Push doctrine into `references/`, deterministic work into `scripts/`.
21
+ 4. **Scripts are self-contained + BYOK:** stdlib-only where possible; read keys from the environment;
22
+ **import `supercmo_env` and call `supercmo_env._request` / `_request_raw`** for any network — never
23
+ `requests`/`httpx`/`urllib` directly. Anything that mutates remote state (posts, ad spend) must
24
+ support `--dry-run` (preview the request, secrets masked, no network) and default to paused.
25
+ 5. **Tag money/social actions:** set `metadata.writes: spend` or `social` so the listing gate requires
26
+ your `--dry-run`.
27
+ 6. **Add `evals/eval_cases.json`** (schema 2): `trigger_keywords` + should-trigger / should-not-trigger
28
+ `cases`. Copy the shape from `skills/generating-images/evals/`.
29
+ 7. **Validate before you push** (see below). Land each skill as a *complete* PR — folder + `SKILL.md` +
30
+ `evals/` together. Never commit an empty skill folder (the orphan gate fails).
31
+
32
+ ## Add an agent (subagent)
33
+
34
+ The repo ships no subagents — a skill is portable across every host, while a subagent is
35
+ host-specific and starts in a fresh context that does not inherit loaded skills. Reach for one only
36
+ for genuine multi-step orchestration or a distinct reviewer role.
37
+
38
+ - **Bundled role prompt (preferred):** a plain `skills/<name>/agents/<role>.md` with **no
39
+ frontmatter** — spawned inline by the skill, or run as steps if the host has no subagents. Keeps
40
+ the skill self-contained and portable.
41
+ - **Standalone subagent:** an `agents/<name>.md` at the repo root with frontmatter — `name`,
42
+ `description` (the trigger/when-to-delegate), and optional `tools` / `model` / `skills` (preload).
43
+ Add it to `.claude-plugin/supercmo.json` → `agents`.
44
+
45
+ ## Validate (must pass before merge)
46
+
47
+ ```
48
+ python3 scripts/quick_validate.py # skills + agents + plugin manifests lint (blocking)
49
+ python3 scripts/listing_gate.py # scripts compile + spend/social --dry-run (blocking)
50
+ python3 scripts/check_shared_client.py # no raw vendor HTTP — the brokering seam (blocking)
51
+ python3 tests/evals/run_eval.py # trigger evals (advisory)
52
+ ```
53
+
54
+ CI runs the same on every push/PR (`.github/workflows/validate.yml`). Secret scanning
55
+ (`secret-scan.yml`) runs over full history — never commit a key.