Public: anyone can read this; the crew can change it.
The plugin install lines in mcp.json and /llms.txt work for someone with no clone of the forge #8359
Check · Review · Land · Live done — Landed and live in production.
The plugin install lines in `/.well-known/mcp.json` and `/llms.txt` now work in an empty directory. `tsc` and `test/mcp-card-plugins.test.ts` plus `test/connect-harness.test.ts` pass, and I pushed. I did not run `scripts/fast.ts`, and I did not boot the app and fetch the card.
shipped production is serving it deploy 7cfd21c
The plugin install lines in /.well-known/mcp.json and /llms.txt now work in an empty directory. tsc and test/mcp-card-plugins.test.ts plus test/connect-harness.test.ts pass, and I pushed. I did not run scripts/fast.ts, and I did not boot the app and fetch the card.
- Card: each entry in
pluginsnow hassource, the clone URL${origin}/trevato/forge.git, built from the running origin.installis a function of the origin inHARNESS_PLUGINS(src/core/mcp_card.ts). - Claude Code line:
git clone --depth 1 --filter=blob:none --sparse <source> forge-plugin && git -C forge-plugin sparse-checkout set plugins/claude-code && claude --plugin-dir forge-plugin/plugins/claude-code. - OpenCode line:
mkdir -p .opencode/plugin && curl -fsSL ${origin}/trevato/forge/raw/main/plugins/opencode/forge.ts -o .opencode/plugin/forge.ts. /llms.txt: the plugin lines come from the sameHARNESS_PLUGINSdata (src/web/standards.ts). Each line now also prints the source URL and says the repository must be public.- Test:
test/mcp-card-plugins.test.tschecks that the card and/llms.txtboth carry the origin-relative source and the same install lines. It also checks that no line has a bareplugins/path or acp, apart from thesparse-checkout setargument.
Not done:
- The repo name
trevato/forgeis a constant (PLUGIN_REPO), not read from the forge, and the card does not check whether that repository is public. I put the "must be public" caveat in the/llms.txttext, not in the card'sinstallline, so the card is silent about visibility. Say if you want the card to look the repository up and note it when it is private. - I left the
claude --plugin-dir plugins/claude-codecommand insrc/web/pages/account.ts,plugins/claude-code/README.mdandtest/connect-harness.test.ts. These describe a command run from inside a clone, which is a separate surface from the card.
The card and /llms.txt now carry install lines that work in an empty directory. On the preview, the card shows source and both lines built from the running origin. The forge answers the clone URL (200 without auth) and the raw plugin file (200), so the lines resolve on the real forge. The change is small and the card and llms.txt share one data list, so they cannot drift. The test would fail without it.
Two things I would do next:
- Make PLUGIN_REPO and the
mainbranch in the OpenCode curl line come from the forge (repo and default branch) instead of constants. Make the card say when the repository is private, rather than only llms.txt. - Align the other surfaces that still show
claude --plugin-dir plugins/claude-code(src/web/pages/account.ts, the plugin README) so a person off the account page does not get the clone-only form. The test`s bare-path regex chain is hard to read; a plain assertion per line would be clearer.
On the preview the clone URL points at the preview origin, which returns 401/404 for those paths. This is expected for a preview and fine on the real forge.
The plugin install lines in
/.well-known/mcp.jsonand/llms.txtnow work in an empty directory.tscandtest/mcp-card-plugins.test.tsplustest/connect-harness.test.tspass, and I pushed. I did not runscripts/fast.ts, and I did not boot the app and fetch the card.pluginsnow hassource, the clone URL${origin}/trevato/forge.git, built from the running origin.installis a function of the origin inHARNESS_PLUGINS(src/core/mcp_card.ts).git clone --depth 1 --filter=blob:none --sparse <source> forge-plugin && git -C forge-plugin sparse-checkout set plugins/claude-code && claude --plugin-dir forge-plugin/plugins/claude-code.mkdir -p .opencode/plugin && curl -fsSL ${origin}/trevato/forge/raw/main/plugins/opencode/forge.ts -o .opencode/plugin/forge.ts./llms.txt: the plugin lines come from the sameHARNESS_PLUGINSdata (src/web/standards.ts). Each line now also prints the source URL and says the repository must be public.test/mcp-card-plugins.test.tschecks that the card and/llms.txtboth carry the origin-relative source and the same install lines. It also checks that no line has a bareplugins/path or acp, apart from thesparse-checkout setargument.Not done:
trevato/forgeis a constant (PLUGIN_REPO), not read from the forge, and the card does not check whether that repository is public. I put the "must be public" caveat in the/llms.txttext, not in the card'sinstallline, so the card is silent about visibility. Say if you want the card to look the repository up and note it when it is private.claude --plugin-dir plugins/claude-codecommand insrc/web/pages/account.ts,plugins/claude-code/README.mdandtest/connect-harness.test.ts. These describe a command run from inside a clone, which is a separate surface from the card.Closes #8324