From 3f114031be5b2e0703b0ddb4d646f9383939418c Mon Sep 17 00:00:00 2001 From: "Griffin (AI)" Date: Thu, 24 Sep 2026 06:58:53 -0700 Subject: [PATCH 1/3] Make plugin repository installable in Codex --- .agents/plugins/marketplace.json | 20 +++++++++++++++++ .claude-plugin/marketplace.json | 2 +- .claude-plugin/plugin.json | 2 +- .codex-plugin/plugin.json | 4 ++-- README.md | 37 ++++++-------------------------- documents/plugin-release.md | 18 +++++++++------- plugin.json | 4 ++-- scripts/package-plugin.py | 3 ++- tests/plugin.test.ts | 29 +++++++++++++++++++++++++ 9 files changed, 73 insertions(+), 46 deletions(-) create mode 100644 .agents/plugins/marketplace.json diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json new file mode 100644 index 0000000..c95a593 --- /dev/null +++ b/.agents/plugins/marketplace.json @@ -0,0 +1,20 @@ +{ + "name": "expert-system", + "interface": { + "displayName": "Expert System" + }, + "plugins": [ + { + "name": "expert-system", + "source": { + "source": "local", + "path": "./" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Productivity" + } + ] +} diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 1f255b2..0aac8da 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,7 +1,7 @@ { "name": "expert-system", "owner": { - "name": "STAR MODE", + "name": "Scout Smith LLC", "url": "https://github.com/starmode-base" }, "plugins": [ diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index abe759b..9ad4459 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -3,7 +3,7 @@ "version": "2.0.0", "description": "Curated research, FRED macroeconomic data, and SEC company financials with source provenance.", "author": { - "name": "STAR MODE", + "name": "Scout Smith LLC", "url": "https://github.com/starmode-base" }, "homepage": "https://expert-system.starmode.dev", diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 726eba7..a8bf015 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -3,7 +3,7 @@ "version": "2.0.0", "description": "Curated research, FRED macroeconomic data, and SEC company financials with source provenance.", "author": { - "name": "STAR MODE", + "name": "Scout Smith LLC", "url": "https://github.com/starmode-base" }, "homepage": "https://expert-system.starmode.dev", @@ -15,7 +15,7 @@ "displayName": "Expert System", "shortDescription": "Research, macro data, and company financials", "longDescription": "Curated research, FRED macroeconomic data, and SEC company financials with source provenance.", - "developerName": "STAR MODE", + "developerName": "Scout Smith LLC", "category": "Productivity", "websiteURL": "https://expert-system.starmode.dev", "defaultPrompt": [ diff --git a/README.md b/README.md index 519624d..0f6fecb 100644 --- a/README.md +++ b/README.md @@ -31,41 +31,16 @@ Update with `/plugin marketplace update expert-system` then `/plugin update expe ## Codex installation -Clone the desired release of this repository. Register a local marketplace pointing at that checkout using the bundled plugin-creator skill, or create this temporary marketplace layout: - -```text -expert-system-marketplace/ - .agents/plugins/marketplace.json - plugins/expert-system/ # plugin files from the release archive -``` - -Use this catalog in `.agents/plugins/marketplace.json`: - -```json -{ - "name": "expert-system-local", - "interface": { "displayName": "Expert System" }, - "plugins": [ - { - "name": "expert-system", - "source": { "source": "local", "path": "./plugins/expert-system" }, - "policy": { "installation": "AVAILABLE", "authentication": "ON_INSTALL" }, - "category": "Productivity" - } - ] -} -``` - -Register and install it using a Codex CLI with plugin support: +Register the repository marketplace and install the plugin using a Codex CLI with plugin support: ```sh -codex plugin marketplace add /absolute/path/to/expert-system-marketplace -codex plugin add expert-system@expert-system-local +codex plugin marketplace add starmode-base/expert-system-plugin --ref main +codex plugin add expert-system@expert-system ``` -Alternatively, select that marketplace in the Codex Plugins UI and install Expert System. Complete its OAuth sign-in prompt, then start a new task so the skills and connection are loaded. Ask naturally or select the research, macro, or financials skill. The three summaries support routing; the host discovers tool schemas as needed rather than this plugin eagerly loading them. +Alternatively, select that marketplace in the Codex Plugins UI and install Expert System. Complete its OAuth sign-in prompt, then start a new task so the skills and connection are loaded. Ask naturally or select the research, macro, or financials skill. The three summaries support routing; the host discovers tool schemas as needed rather than this plugin eagerly loading them. For a release candidate, replace `main` with the candidate tag in the marketplace command. -To update, replace the plugin directory with the new release, refresh the marketplace with `codex plugin marketplace upgrade expert-system-local`, and reinstall from the Plugins UI (or remove/add using the CLI). Start a new task. Remove with `codex plugin remove expert-system@expert-system-local`; remove an unused marketplace with `codex plugin marketplace remove expert-system-local`. +To update, refresh the marketplace with `codex plugin marketplace upgrade expert-system` and reinstall from the Plugins UI (or remove/add using the CLI). Start a new task. Remove with `codex plugin remove expert-system@expert-system`; remove an unused marketplace with `codex plugin marketplace remove expert-system`. ## Sign-in and troubleshooting @@ -77,7 +52,7 @@ For a v1 upgrade, uninstall the old plugin, remove its saved plugin API-key conf ## Plugin development and release -The root `plugin.json` and `mcp.json` follow the [portable Agent Plugins format](https://developers.openai.com/plugins/build/plugins). `.claude-plugin/` and `.codex-plugin/` provide client compatibility; both use the same `skills/`. Skill MCP dependencies follow [OpenAI's skill guidance](https://developers.openai.com/plugins/build/skills). The server repository hosts `public/marketplace.json` as a compatibility copy of this repository’s canonical Claude marketplace. Privacy and terms pages are also hosted by the server. +The root `plugin.json` and `mcp.json` follow the [portable Agent Plugins format](https://developers.openai.com/plugins/build/plugins). `.claude-plugin/` and `.codex-plugin/` provide client compatibility; `.agents/plugins/marketplace.json` makes the repository installable as a Codex marketplace. Both clients use the same `skills/`. Skill MCP dependencies follow [OpenAI's skill guidance](https://developers.openai.com/plugins/build/skills). The server repository hosts `public/marketplace.json` as a compatibility copy of this repository’s canonical Claude marketplace. Privacy and terms pages are also hosted by the server. ```sh bun install --frozen-lockfile diff --git a/documents/plugin-release.md b/documents/plugin-release.md index 319239a..584f122 100644 --- a/documents/plugin-release.md +++ b/documents/plugin-release.md @@ -5,30 +5,32 @@ - Plugin and MCP server name: `expert-system`. - Production endpoint: `https://expert-system.starmode.dev/api/mcp`. - Release target: `2.0.0`. Root portable manifests plus Claude and Codex overlays share the three skills. -- OAuth server gate: reported complete by the owner, tested in Claude and Codex before plugin work began. This packaging change does not modify authentication. +- OAuth server gate: production discovery, unauthenticated challenge, and authenticated Codex MCP calls have been verified. Claude's first-login flow still needs an account sign-in to complete. - Supported data surface: `search_takeaways`, `get_recent_takeaways`, `get_takeaways`, `get_documents`, `get_document_content`, `list_macro_series`, `get_macro_observations`, `list_financial_metrics`, `list_company_financial_metrics`, `get_company_financial_metric`, `get_company_financials`. `get_profile` is an additional free account utility. -- The existing plugin repository is the canonical package source. Its v1 root marketplace was moved to `.claude-plugin/marketplace.json`; the server repository retains `public/marketplace.json` as a hosted compatibility copy. Website and policy pages remain in the server repository. +- The existing plugin repository is the canonical package source. Claude uses `.claude-plugin/marketplace.json`; Codex uses `.agents/plugins/marketplace.json`. The server repository retains `public/marketplace.json` as a hosted Claude compatibility copy. Website and policy pages remain in the server repository. ## Validation history and migration checks - Claude plugin and marketplace manifest validators: passed. - Bundled Codex plugin validator: passed. - Root manifests validated against the official Agent Plugins 1.0.0 JSON schemas: passed. -- Six automated packaging checks: identity/version synchronization, credential-free connection shapes, hosted marketplace parity, YAML dependencies and routing metadata, the 11-tool surface, and public policy files. +- Seven automated packaging checks: identity/version synchronization, credential-free connection shapes, both marketplace catalogs and hosted Claude parity, YAML dependencies and routing metadata, the 11-tool surface, and public policy files. - Repository TypeScript, ESLint, and Prettier: passed. - After separation: 349 server tests passed in 26 files. Plugin tests passed independently (five passed, one cross-repository check explicitly skipped); all six passed with `EXPERT_SYSTEM_SERVER_ROOT` set. TypeScript, lint, and formatting passed in both repositories. - Clean temporary Codex profile: marketplace registration, install, removal, and reinstall passed with version 2.0.0. - Clean temporary Claude profile: install, removal, and reinstall passed. `claude plugin details` discovered three skills and one MCP server; it reported approximately 197 always-on tokens, with tool schemas resolved at runtime. -- Installation tests used an archive extracted into an isolated temporary marketplace, with a local Claude source fixture. They do **not** establish GitHub installation or live authenticated skill behavior. +- A later fresh clone of `main` at `fa5b7aa` passed frozen install, repository checks, cross-repository plugin checks, both Claude manifest validators, and the bundled Codex validator. Claude installed from the public GitHub marketplace in an isolated profile and discovered three skills and one MCP server. Because the GitHub source resolves to the default branch, `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1` was needed in this environment to avoid SSH access. +- Codex registered that fresh GitHub repository but could not discover the plugin until `.agents/plugins/marketplace.json` was added. With the new catalog, local candidate install/remove/reinstall succeeded at 2.0.0. Recheck from a fresh clone of the final candidate commit after it is pushed. +- The existing authenticated Codex MCP connection returned live recent/search/full takeaways, bounded document text, macro observations, and company financials. These calls verify production data and OAuth, but not automatic skill routing in a newly installed client. ## Before release -1. Confirm the operator identity and private support contact in the new privacy and terms pages, including retention and provider practices. Deploy the pages before submitting their URLs to directories. The pages are implementation-based initial policies, not a determination of jurisdiction-specific compliance. +1. The operator and private support contact have been set to Scout Smith LLC and `spencer.g.smith6@gmail.com` in the privacy and terms pages. Review retention and provider practices, and deploy the pages before submitting their URLs to directories. The pages are implementation-based initial policies, not a determination of jurisdiction-specific compliance. 2. Run `bun install --frozen-lockfile`, `bun run typecheck`, `bun run lint`, `bun run format:check`, and `bun run plugin:check` in this repository. Run `EXPERT_SYSTEM_SERVER_ROOT=/path/to/expert-system bun run plugin:check` to check the server contract, hosted marketplace copy, and policy files. Without that variable, the cross-repository test is explicitly skipped. 3. Publish the branch to GitHub and validate the exact candidate commit from a fresh clone. Run `bun install --frozen-lockfile`, `bun run plugin:check`, both client manifest validators, and the repository checks. With the bundled Codex skill available, run `python3 /path/to/plugin-creator/scripts/validate_plugin.py .`. -4. For Claude's branch smoke test, add `starmode-base/expert-system-plugin#codex/oauth-plugin-v2` in a clean profile. The marketplace plugin source normally follows the default branch: for a prerelease candidate, set the source `ref` to its candidate tag in both marketplace copies and validate them before publishing. Confirm the installed version and commit, not just installation success. -5. For Codex, extract the candidate plugin archive into a temporary personal marketplace using the README layout. Use an isolated client profile with no preexisting Expert System registrations. Confirm three skills and exactly one server. Remove, reinstall, and compare the installed manifests with the candidate. -6. Exercise upgrade from an actual v1 installation, remove saved plugin API-key configuration, and confirm OAuth reconnect. No v1 installation was present in this checkout, so this remains untested. +4. For Claude's branch smoke test, add `starmode-base/expert-system-plugin` in a clean profile after the candidate reaches the default branch. The marketplace plugin source normally follows the default branch: for a prerelease candidate, set the source `ref` to its candidate tag in both Claude marketplace copies and validate them before publishing. Confirm the installed version and commit, not just installation success. +5. For Codex, register the candidate repository as a marketplace, install `expert-system@expert-system`, and confirm three skills and exactly one server in an isolated client profile. Remove, reinstall, and compare the installed manifests with the candidate. The archive can be checked separately as a portable distribution. +6. Exercise upgrade from an actual v1 installation, remove saved plugin API-key configuration, and confirm OAuth reconnect if such an installation is available. No v1 installation was present in the user profile. A v1 fixture from commit `ea2a74c` is rejected by the current Claude CLI manifest validator (`repository` and `userConfig` fields), so an authentic in-place v1 upgrade remains untested; do not claim this test passed. 7. Complete the behavioral matrix below in both clients. Record client versions, candidate commit, results, and redacted error details. Use the same candidate for the soak and stable release. ## Behavioral matrix diff --git a/plugin.json b/plugin.json index cf71c89..26f233d 100644 --- a/plugin.json +++ b/plugin.json @@ -4,7 +4,7 @@ "version": "2.0.0", "description": "Curated research, FRED macroeconomic data, and SEC company financials with source provenance.", "author": { - "name": "STAR MODE", + "name": "Scout Smith LLC", "url": "https://github.com/starmode-base" }, "homepage": "https://expert-system.starmode.dev", @@ -16,7 +16,7 @@ "displayName": "Expert System", "shortDescription": "Research, macro data, and company financials", "longDescription": "Curated research, FRED macroeconomic data, and SEC company financials with source provenance.", - "developerName": "STAR MODE", + "developerName": "Scout Smith LLC", "category": "Productivity", "websiteURL": "https://expert-system.starmode.dev", "defaultPrompt": [ diff --git a/scripts/package-plugin.py b/scripts/package-plugin.py index 0d2f0b8..288826b 100644 --- a/scripts/package-plugin.py +++ b/scripts/package-plugin.py @@ -7,7 +7,8 @@ ROOT = Path(__file__).resolve().parents[1] FILES = [ "plugin.json", "mcp.json", ".mcp.json", ".claude-plugin/plugin.json", - ".claude-plugin/marketplace.json", ".codex-plugin/plugin.json", "README.md", + ".claude-plugin/marketplace.json", ".codex-plugin/plugin.json", + ".agents/plugins/marketplace.json", "README.md", "documents/plugin-release.md", ] for skill in ("research", "macro", "financials"): diff --git a/tests/plugin.test.ts b/tests/plugin.test.ts index 6983210..bde8dde 100644 --- a/tests/plugin.test.ts +++ b/tests/plugin.test.ts @@ -130,6 +130,35 @@ describe("distributed plugin contract", () => { .strict() .parse(json(".claude-plugin/marketplace.json")); expect(marketplace.plugins[0]?.description).toBe(manifest.description); + expect(marketplace.owner).toEqual(manifest.author); + }); + + it("makes the repository root installable as a Codex plugin", () => { + const marketplace = z + .object({ + name: z.literal("expert-system"), + interface: z.object({ displayName: z.literal("Expert System") }), + plugins: z + .array( + z.object({ + name: z.literal("expert-system"), + source: z.object({ + source: z.literal("local"), + path: z.literal("./"), + }), + policy: z.object({ + installation: z.literal("AVAILABLE"), + authentication: z.literal("ON_INSTALL"), + }), + category: z.literal("Productivity"), + }), + ) + .length(1), + }) + .parse(json(".agents/plugins/marketplace.json")); + expect(marketplace.plugins[0]?.name).toBe( + portable.parse(json("plugin.json")).name, + ); }); it("exposes three routable skills with resolvable MCP dependencies", () => { From 8fe257e5998e0a73dd92e58a742c3b5960d20c75 Mon Sep 17 00:00:00 2001 From: "Griffin (AI)" Date: Thu, 24 Sep 2026 07:01:34 -0700 Subject: [PATCH 2/3] Record candidate validation results --- documents/plugin-release.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documents/plugin-release.md b/documents/plugin-release.md index 584f122..fafaf3b 100644 --- a/documents/plugin-release.md +++ b/documents/plugin-release.md @@ -20,14 +20,14 @@ - Clean temporary Codex profile: marketplace registration, install, removal, and reinstall passed with version 2.0.0. - Clean temporary Claude profile: install, removal, and reinstall passed. `claude plugin details` discovered three skills and one MCP server; it reported approximately 197 always-on tokens, with tool schemas resolved at runtime. - A later fresh clone of `main` at `fa5b7aa` passed frozen install, repository checks, cross-repository plugin checks, both Claude manifest validators, and the bundled Codex validator. Claude installed from the public GitHub marketplace in an isolated profile and discovered three skills and one MCP server. Because the GitHub source resolves to the default branch, `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1` was needed in this environment to avoid SSH access. -- Codex registered that fresh GitHub repository but could not discover the plugin until `.agents/plugins/marketplace.json` was added. With the new catalog, local candidate install/remove/reinstall succeeded at 2.0.0. Recheck from a fresh clone of the final candidate commit after it is pushed. +- Codex registered that fresh GitHub repository but could not discover the plugin until `.agents/plugins/marketplace.json` was added. The pushed candidate at `3f11403` passed frozen install, typecheck, lint, formatting, seven contract tests, and both client validators in a fresh clone. Codex then installed version 2.0.0 directly from the GitHub candidate branch; its cached source resolved to that commit, with three skills and one MCP server. The temporary test installation was removed. - The existing authenticated Codex MCP connection returned live recent/search/full takeaways, bounded document text, macro observations, and company financials. These calls verify production data and OAuth, but not automatic skill routing in a newly installed client. ## Before release 1. The operator and private support contact have been set to Scout Smith LLC and `spencer.g.smith6@gmail.com` in the privacy and terms pages. Review retention and provider practices, and deploy the pages before submitting their URLs to directories. The pages are implementation-based initial policies, not a determination of jurisdiction-specific compliance. 2. Run `bun install --frozen-lockfile`, `bun run typecheck`, `bun run lint`, `bun run format:check`, and `bun run plugin:check` in this repository. Run `EXPERT_SYSTEM_SERVER_ROOT=/path/to/expert-system bun run plugin:check` to check the server contract, hosted marketplace copy, and policy files. Without that variable, the cross-repository test is explicitly skipped. -3. Publish the branch to GitHub and validate the exact candidate commit from a fresh clone. Run `bun install --frozen-lockfile`, `bun run plugin:check`, both client manifest validators, and the repository checks. With the bundled Codex skill available, run `python3 /path/to/plugin-creator/scripts/validate_plugin.py .`. +3. The candidate branch has been published and its `3f11403` code validated from a fresh clone. Repeat exact-commit validation if the candidate changes. Run `bun install --frozen-lockfile`, `bun run plugin:check`, both client manifest validators, and the repository checks. With the bundled Codex skill available, run `python3 /path/to/plugin-creator/scripts/validate_plugin.py .`. 4. For Claude's branch smoke test, add `starmode-base/expert-system-plugin` in a clean profile after the candidate reaches the default branch. The marketplace plugin source normally follows the default branch: for a prerelease candidate, set the source `ref` to its candidate tag in both Claude marketplace copies and validate them before publishing. Confirm the installed version and commit, not just installation success. 5. For Codex, register the candidate repository as a marketplace, install `expert-system@expert-system`, and confirm three skills and exactly one server in an isolated client profile. Remove, reinstall, and compare the installed manifests with the candidate. The archive can be checked separately as a portable distribution. 6. Exercise upgrade from an actual v1 installation, remove saved plugin API-key configuration, and confirm OAuth reconnect if such an installation is available. No v1 installation was present in the user profile. A v1 fixture from commit `ea2a74c` is rejected by the current Claude CLI manifest validator (`repository` and `userConfig` fields), so an authentic in-place v1 upgrade remains untested; do not claim this test passed. From 123e22b962dea45d980615b19ab50de09645b012 Mon Sep 17 00:00:00 2001 From: "Griffin (AI)" Date: Thu, 24 Sep 2026 07:05:59 -0700 Subject: [PATCH 3/3] Use STARMODE as public plugin author --- .claude-plugin/marketplace.json | 4 ++-- .claude-plugin/plugin.json | 4 ++-- .codex-plugin/plugin.json | 6 +++--- plugin.json | 6 +++--- tests/plugin.test.ts | 7 +++++-- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 0aac8da..94f455e 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,8 +1,8 @@ { "name": "expert-system", "owner": { - "name": "Scout Smith LLC", - "url": "https://github.com/starmode-base" + "name": "STARMODE", + "url": "https://www.starmode.dev/" }, "plugins": [ { diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 9ad4459..9428c2c 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -3,8 +3,8 @@ "version": "2.0.0", "description": "Curated research, FRED macroeconomic data, and SEC company financials with source provenance.", "author": { - "name": "Scout Smith LLC", - "url": "https://github.com/starmode-base" + "name": "STARMODE", + "url": "https://www.starmode.dev/" }, "homepage": "https://expert-system.starmode.dev", "repository": "https://github.com/starmode-base/expert-system-plugin", diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index a8bf015..af9805b 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -3,8 +3,8 @@ "version": "2.0.0", "description": "Curated research, FRED macroeconomic data, and SEC company financials with source provenance.", "author": { - "name": "Scout Smith LLC", - "url": "https://github.com/starmode-base" + "name": "STARMODE", + "url": "https://www.starmode.dev/" }, "homepage": "https://expert-system.starmode.dev", "repository": "https://github.com/starmode-base/expert-system-plugin", @@ -15,7 +15,7 @@ "displayName": "Expert System", "shortDescription": "Research, macro data, and company financials", "longDescription": "Curated research, FRED macroeconomic data, and SEC company financials with source provenance.", - "developerName": "Scout Smith LLC", + "developerName": "STARMODE", "category": "Productivity", "websiteURL": "https://expert-system.starmode.dev", "defaultPrompt": [ diff --git a/plugin.json b/plugin.json index 26f233d..503c8f7 100644 --- a/plugin.json +++ b/plugin.json @@ -4,8 +4,8 @@ "version": "2.0.0", "description": "Curated research, FRED macroeconomic data, and SEC company financials with source provenance.", "author": { - "name": "Scout Smith LLC", - "url": "https://github.com/starmode-base" + "name": "STARMODE", + "url": "https://www.starmode.dev/" }, "homepage": "https://expert-system.starmode.dev", "repository": "https://github.com/starmode-base/expert-system-plugin", @@ -16,7 +16,7 @@ "displayName": "Expert System", "shortDescription": "Research, macro data, and company financials", "longDescription": "Curated research, FRED macroeconomic data, and SEC company financials with source provenance.", - "developerName": "Scout Smith LLC", + "developerName": "STARMODE", "category": "Productivity", "websiteURL": "https://expert-system.starmode.dev", "defaultPrompt": [ diff --git a/tests/plugin.test.ts b/tests/plugin.test.ts index bde8dde..e5b09ac 100644 --- a/tests/plugin.test.ts +++ b/tests/plugin.test.ts @@ -12,7 +12,10 @@ const identity = z.object({ name: z.literal("expert-system"), version: z.literal("2.0.0"), description: z.string().min(1), - author: z.object({ name: z.string().min(1), url: z.url() }), + author: z.object({ + name: z.literal("STARMODE"), + url: z.literal("https://www.starmode.dev/"), + }), homepage: z.url(), repository: z.literal( "https://github.com/starmode-base/expert-system-plugin", @@ -23,7 +26,7 @@ const presentation = z.object({ displayName: z.string().min(1), shortDescription: z.string().min(1), longDescription: z.string().min(1), - developerName: z.string().min(1), + developerName: z.literal("STARMODE"), category: z.string().min(1), capabilities: z.array(z.literal("Read")), websiteURL: z.url(),