Repository navigation
De-brand, fix the manifest defects that dropped the subagent, and close the trigger collisions - #1
Merged
Merged
Conversation
The pipeline was always brand-agnostic — it reads whatever is in the user's cached profile — but the manifest description, the brand-profile schema, and two skills named Merget directly, which made a general- purpose plugin read as one company's internal tool. Generalizes the brand-profile template placeholders, the Figma design-system step, the orchestrator's plan example and trigger phrasing, and the manifest description. Replaces the README's Merget-flavored-defaults caveat with what actually happens on a first run: documented fallbacks, surfaced to the user, until a profile exists. Author and copyright are attribution, not branding, and are unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
repository was an npm-style object where the spec requires a string, so 'claude plugin validate --strict' failed outright. The agents override was worse. 'agents' REPLACES its default rather than adding to it, and every accepted form loaded zero agents -- including ['./agents/descript-editor.md'], which passes --strict while silently loading nothing. Removing the key restores default discovery. Verified via 'claude plugin details': Agents (1) descript-editor, where v0.3.0 reported Agents (0). The executor subagent is the centre of the plugin's design and had not been loading since v0.3.0. Dropped the commands override for the same reason -- it pointed at the default path, so it was a no-op carrying replace-semantics risk. All 9 commands still load. Also corrects four documentation claims that outran the code, adds displayName, bumps to 0.4.0, and rebuilds dist/ to match. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The manifest, LICENSE, and README carried 'Kate Merget' while the other three plugin repos and the GitHub account use 'Kate Kruger'. Normalizes to Kate Kruger and drops the kate@merget.ai address, matching gtmplugin's author block and the GitHub-only contact policy. Adds .claude-plugin/marketplace.json so the plugin is installable with '/plugin marketplace add katekruger/descriptmcp'. Verified the source resolves: 'claude plugin marketplace add' succeeds against the branch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
'claude plugin details' shows commands and skills sharing one 21-item
selection namespace, so every command competed with the skill it wraps.
Descriptions rewritten; nothing renamed, so invocation is unchanged.
Skills now lead with the trigger rather than a capability summary, and
name the boundary they do NOT own:
descript-studio dropped the 'mentions Descript' catch-all plus 'edit'
and 'publish', which overlapped every child it routes
to. Now scoped to a whole video with no build underway.
descript-edit dropped the bare stems 'change/make it/fix/adjust/
tweak', which reached cleanup, brandkit and polish.
Now scoped to one change to a video that exists.
clips vs export both claimed 9:16 vertical. Clips owns excerpts cut
out of a longer video; export owns reframing the whole
composition. Each states the other.
Commands became short action labels instead of restating their skill's
trigger vocabulary, so explicit invocation and natural language no longer
compete. The /video-* strings are gone from skill descriptions, so each
string has exactly one owner.
Verified: 67 distinct quoted trigger phrases, zero claimed twice; all 21
components and the subagent still load.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Closes the follow-ups listed in the previous PR body. Governance: SECURITY.md (GitHub private vulnerability reporting, plus what this plugin actually touches -- one HTTPS endpoint, ~/.descript-studio/, nothing else), CODE_OF_CONDUCT.md (Contributor Covenant 2.1, GitHub-only contact, no email anywhere), and a trademark notice appended to LICENSE disclaiming affiliation with Descript, Inc. Tests: 30 stdlib-only checks, no pytest. The load-bearing ones guard the defects this repo has actually shipped -- no component-path overrides in the manifest, no trigger phrase claimed by two components, no doc claim that outruns the code, no secrets or real project IDs, references/ not forked per-skill. CI: validates BOTH manifests (once marketplace.json exists, 'validate .' checks the marketplace and never looks at plugin.json), runs the suite, parses every JSON file, checks version agreement and dist/ freshness, and scans history with gitleaks. Plus dependabot and the issue/PR templates. Version sync: .version-bump.json declares the three locations carrying the version; scripts/bump-version.sh updates them and fails loudly on a missing path. scripts/build-plugin.sh compares bundle CONTENTS rather than archive bytes, since zip embeds mtimes that differ per checkout. Docs: configuration.md and development.md added. ARCHITECTURE.md and SKILLS.md renamed to lowercase via two-step git mv -- CLAUDE.md linked docs/architecture.md, which resolved on macOS only because the filesystem is case-insensitive and would have broken on Linux CI. skills.md trigger text refreshed to match the rewritten descriptions. README gains the subagent, configuration, refusals, development, and contributing sections, and leads install with the marketplace path. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The repo root IS the plugin root (marketplace source './'), so CLAUDE.md sits at the plugin root and 'claude plugin validate --strict' fails on a warning saying it will not load as plugin context. That warning is correct -- CLAUDE.md documents repo development and build-plugin.sh already excludes it from the shipped bundle -- but it is not a defect to fix. Rather than dropping --strict wholesale or deleting a file the standard requires, scripts/validate-manifests.sh validates the marketplace strictly, validates the plugin manifest non-strict, and fails on any error or on any warning other than that one. A new warning still breaks the build. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
De-brands the plugin, fixes two manifest defects that left v0.3.0 partly non-functional, eliminates the trigger collisions, and adds the missing governance, test, and CI layer.
CI is green on this branch: run 33023608790 — every step succeeded, including the CLI manifest validation and a full-history gitleaks scan.
1. What changed, by commit
refactor: remove Merget-specific brandingThe pipeline was always brand-agnostic — it reads whatever is in the cached profile — but the manifest description, the brand-profile schema, and two skills named Merget directly, which made a general-purpose plugin read as one company's internal tool. Generalized the schema placeholders, the Figma design-system step, and the orchestrator's plan example and trigger phrasing.
fix: manifest defects that broke validation and dropped the subagentrepositorywas an npm-style object where the spec requires a string —validate --strictfailed outright.descript-editorhad not loaded since v0.3.0.agentsreplaces its default, and every accepted form loaded zero agents:agentsvalue["./agents"](v0.3.0)["./agents/"],"./agents/"["./agents/descript-editor.md"]The third row is the trap: green validation, silently no agent. Both
agentsandcommandsoverrides removed; all 21 components load from default paths.Corrected four doc claims that outran the code.
chore: normalize author and add marketplace.jsonAuthor was "Kate Merget" while the other three repos and the GitHub account use "Kate Kruger". Normalized, and dropped
kate@merget.aiper the GitHub-only contact policy. Addedmarketplace.json;claude plugin marketplace addresolves it.fix: eliminate trigger collisions— the highest-value behavioral change. Detail in §2.chore: governance, tests, CI, and the remaining docsSECURITY.md,CODE_OF_CONDUCT.md(Covenant 2.1, GitHub-only contact), trademark notice inLICENSE,CLAUDE.md,.version-bump.json,scripts/,tests/(30 checks),.github/(CI, dependabot, 3 issue templates, PR template),docs/configuration.md,docs/development.md, README restructure.ci: validate both manifests with one expected warning allowlisted— see §3.2. Breaking changes
Nothing was renamed. All 21 component names are unchanged, so every existing invocation still works.
Every skill and command description was rewritten, which changes when things fire.
claude plugin detailsproved commands and skills share one 21-item selection namespace, so each command was competing with the skill it wraps.descript-studio"mentions Descript"catch-all plusedit/publish, which overlapped every child it routes todescript-editchange/make it/fix/adjust/tweak, which reached cleanup, brandkit, and polishdescript-clips/descript-export/video-*strings removed so each string has one ownerBehavioral change in the intended direction:
descript-editornow loads, so approved plans hand off to the subagent as designed instead of the orchestrator running passes inline.3. Files moved or deleted
docs/ARCHITECTURE.md→docs/architecture.mdanddocs/SKILLS.md→docs/skills.md, via two-stepgit mvto preserve history across a case-only rename on a case-insensitive filesystem. This was a latent bug:CLAUDE.mdlinksdocs/architecture.md, which resolved on macOS only because the FS is case-insensitive and would have broken on Linux CI.dist/descript-studio.pluginrebuilt in place.4. Verification
Trigger-collision check: 67 distinct quoted trigger phrases, zero claimed by two components. Enforced going forward by
tests/test_descriptions.py::test_no_trigger_phrase_is_claimed_twice.Token cost: always-on ~1,603 (v0.3.0) → ~1,636. The subagent now loads (it previously contributed nothing because it wasn't loading), and the tightened descriptions offset almost all of that.
One expected warning, deliberately allowlisted
The repo root is the plugin root, so
CLAUDE.mdsits at the plugin root and the CLI warns it will not load as plugin context. That is correct —CLAUDE.mddocuments repo development, andbuild-plugin.shexcludes it from the bundle. Rather than dropping--strictor deleting a file the standard requires,scripts/validate-manifests.shvalidates the marketplace strictly, validates the plugin manifest non-strict, and fails on any error or any other warning.Not verified
claude plugin marketplace add <local path>resolves the manifest;/plugin marketplace add katekruger/descriptmcpwill only work once this is onmain.CLAUDE_CONFIG_DIR, not through a marketplace install.5. History findings
None. Full-history scans — mine and gitleaks in CI — found no tokens, API keys, bearer credentials, private keys, Descript project or composition IDs, or committed brand profiles.
.mcp.jsonis Descript's documented public OAuth endpoint with no secret material.tests/test_docs.pynow enforces this on every commit.6. Follow-ups deliberately not done
v0.4.0tag. Tag after merge.dist/descript-studio.plugin.zip— the double-wrapped original download. Kept for provenance and documented indist/README.md, but only the.pluginis freshness-checked. Worth dropping eventually.descript-studio's body is 525 words, over the 500 guidance. Its skill map and pipeline table could move toreferences/. Left alone to keep this PR's skill-body changes to zero.${CLAUDE_PLUGIN_DATA}vs~/.descript-studio/— the spec's data directory is arguably more correct for the brand profile, but switching orphans any existing profile. Left as-is pending your call.CLAUDE.mdmakes that a required step when adding a skill.🤖 Generated with Claude Code