PATH first:
npm i -g @tappify/cli installs the same CLI.
The Claude Code plugin
The plugin is theclaude-plugin directory of the Tappify source. It is not on
a published marketplace yet, so add your checkout as one by path:
/reload-plugins. To try it without
installing, claude --plugin-dir /path/to/claude-plugin loads it for one
session, and claude plugin validate /path/to/claude-plugin reads the manifest
back to you.
Both lines stay once the marketplace is published — installing reaches
marketplaces you have already added, so only the argument to the first line
changes:
/tappify:new-extension scaffolds an extension, runs it on the sandbox
project, and publishes the first release.
The MCP server
The CLI serves it:tappify login wrote.
Every result carries
ok: true beside the keys above, which are the keys the
matching command’s --json prints where a command matches. A failure is
{ "ok": false, "error": { "what": …, "why": …, "fix": … } }. cwd is
optional everywhere it appears, and falls back to the directory the server
started in.
extension_doctor runs the whole set: the manifest and registry checks, then
your build, typecheck, lint, tests and the axe pass. extension_validate runs
only the four that need no build and no network beyond the cached registry, so
it is the one to call in a loop while you write the manifest.
extension_publish never publishes on the first call. It runs the project’s
build script when there is one, then the checks without the tooling set — no
typecheck, lint, tests or axe pass, which is why extension_doctor comes
first. Called with confirm: false it returns what would ship —
the bundle size, the entries, the scopes, the notes — and only confirm: true
uploads. Describing a release registers nothing: the extension id is claimed,
and Tappify’s own checks run against the bundle, only on the call you confirm.
notes is required on both calls, up to 1000 characters.
The VS Code extension
It is not on the Marketplace yet. Build thevsix from the checkout and
install that:
tappify.extension.json against the published schema and
completes every field. A manifest with a $schema line uses the hosted schema;
one without falls back to the copy bundled in the extension, so the file
validates with no network.
Twenty-one snippets write manifest entries under the tap- prefix:
tap-manifest for a whole manifest, and one for each contribution kind, from
tap-widget to tap-work.
Five commands run the CLI in a terminal named Tappify, reused across
commands, in the first folder of the workspace:
Add a contribution asks which kind in the editor and passes it on the command
line. Publish asks for nothing in the editor: the CLI asks for the release
notes in the terminal, where what you type goes to the CLI and not to your
shell.
What a model reads
Any page also serves its Markdown source: add
.md to the URL.
Rules an agent should hold
An agent building an extension is bound by the same rules a person is, and two of them are worth stating outright:- The registry is the source of truth for pages, slots, charts, tables, scopes,
categories and events. Read it with
extension_registry; a guessed slot fails the checks. src/tappify.d.tsis generated. Change the manifest or a schema and reruntappify extension types; a hand edit is overwritten by the next command.