Khazix WeChat Article Writer
KKKKhazix/khazix-skills
Writes long-form WeChat official account articles in the personal style of the Khazix account, from briefs, links, PDFs or rough notes, with a topic quality check.
Every Framer operation from your terminal — CMS sync, bulk upload, site migration, and a local database no other...
$ npx skills add mvanhorn/printing-press-library --skill pp-framer -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mvanhorn/printing-press-library pp-framer --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .claude/skills && cp -r skills-src/cli-skills/pp-framer .claude/skills/pp-framer && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pp-framer" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-framer into .claude/skills/pp-framer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-framer", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-framerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mvanhorn/printing-press-library --skill pp-framer -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mvanhorn/printing-press-library pp-framer --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .agents/skills && cp -r skills-src/cli-skills/pp-framer .agents/skills/pp-framer && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pp-framer" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-framer into .agents/skills/pp-framer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-framer", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mvanhorn/printing-press-library --skill pp-framer -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mvanhorn/printing-press-library pp-framer --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/cli-skills/pp-framer .cursor/skills/pp-framer && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pp-framer" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-framer into .cursor/skills/pp-framer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-framer", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mvanhorn/printing-press-library.git --path cli-skills/pp-framer--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mvanhorn/printing-press-library --skill pp-framer -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mvanhorn/printing-press-library pp-framer --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/cli-skills/pp-framer .gemini/skills/pp-framer && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pp-framer" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-framer into .gemini/skills/pp-framer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-framer", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mvanhorn/printing-press-library pp-framerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mvanhorn/printing-press-library --skill pp-framer -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .github/skills && cp -r skills-src/cli-skills/pp-framer .github/skills/pp-framer && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pp-framer" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-framer into .github/skills/pp-framer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-framer", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mvanhorn/printing-press-library --skill pp-framer -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mvanhorn/printing-press-library pp-framer --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/cli-skills/pp-framer .opencode/skills/pp-framer && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pp-framer" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-framer into .opencode/skills/pp-framer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-framer", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pp-framerEvery Framer operation from your terminal — CMS sync, bulk upload, site migration, and a local database no other...
Pp Framer is an agent skill from mvanhorn/printing-press-library. Every Framer operation from your terminal — CMS sync, bulk upload, site migration, and a local database no other... Trigger phrases: sync CMS content to Framer, import blog posts into Framer, publish my Framer site, migrate site to Framer, upload assets to Framer, check Framer project status.
Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Writing & Content, covering Blog and article writing. The repository describes itself as: Official library of CLIs generated by the CLI Printing Press. Endorsed, tested, and community-contributed. The licence is Apache-2.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0fdcc7a. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadBashFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
goclaudenpxFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
old-site.comframer.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
FRAMER_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pp Framer loads about 5.2k tokens when it runs. Until then it costs about 79 tokens; SKILL.md has 2,273 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Read, BashAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from mvanhorn/printing-press-library at commit 0fdcc7a, republished under its Apache-2.0 licence (© mvanhorn). 2,273 words, ~5,216 tokens.
.claude/skills/pp-framer/SKILL.md (or your agent's skills folder).<!-- GENERATED FILE — DO NOT EDIT.
This file is a verbatim mirror of library/developer-tools/framer/SKILL.md,
regenerated post-merge by tools/generate-skills/. Hand-edits here are
silently overwritten on the next regen. Edit the library/ source instead.
See the repository agent guide, section "Generated artifacts: registry.json, cli-skills/". -->
This skill drives the framer-pp-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:
$HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows:npx -y @mvanhorn/printing-press-library install framer --cli-onlyframer-pp-cli --version$PATH for the agent/runtime that will invoke this skill.If the npx install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.6 or newer). This installs into $GOPATH/bin (default $HOME/go/bin), so add that directory to $PATH instead:
go install github.com/mvanhorn/printing-press-library/library/developer-tools/framer/cmd/framer-pp-cli@latestIf --version reports "command not found" after install, the runtime cannot see the binary directory on $PATH. Do not proceed with skill commands until verification succeeds.
Framer's Server API is powerful but locked behind a JavaScript SDK with no CLI. framer-pp-cli wraps every API method with offline search, dry-run previews, multi-project management, and migration automation that turns site porting from days into hours.
framer-pp-cli is a Go binary that orchestrates a Node.js framer-api subprocess — the bridge (bridge/framer-bridge.mjs) — which speaks Framer's Server API over WebSocket. Any live command (anything that touches the project: publish, changes, pages, nodes, assets, code, redirects, sync, doctor, components, collections, items, project) shells out to this bridge, so Node.js 18+ must be present at runtime. The Go-only install path (go install …) still needs Node at runtime for these live commands — only the local-store commands (snapshot, diff, dashboard, search, cms-sync, cms-validate, cms-schema-diff, styles-import, code-pull, code-push, migrate-scrape, i18n-push, redirects-generate) work fully offline against the local SQLite store.
Run framer-pp-cli doctor to verify Node, the framer-api bridge, and live connectivity in one step.
Every live / bridge command reads its connection details from the environment. Set these before any command that talks to Framer, or the bridge errors out immediately.
| Variable | Required | Purpose |
|---|---|---|
FRAMER_API_KEY | Yes | Per-project API key from Framer Site Settings → General. Authenticates the bridge to the Server API. |
FRAMER_PROJECT_URL | Yes (all live/bridge commands) | Your Framer project URL, copied from the Framer editor's address bar. Without it every bridge command (publish, changes, pages, nodes, sync, doctor, redirects, collections, items, assets, code, components, project) fails with FRAMER_PROJECT_URL not set. |
FRAMER_BRIDGE_TIMEOUT | No | Go duration string (e.g. 5m; default 120s) capping how long a single bridge subprocess may run before it is killed. |
export FRAMER_API_KEY="$(your-secret-source)"
export FRAMER_PROJECT_URL="https://framer.com/projects/<your-project>" # required for live commands
export FRAMER_BRIDGE_TIMEOUT="5m" # optional
framer-pp-cli doctor # confirms both vars + Node bridge + connectivityLocal-store commands (snapshot, diff, dashboard, search, etc.) do not require FRAMER_PROJECT_URL once data has been synced, but the initial sync that populates the store does.
Use framer-pp-cli when you need to automate Framer operations from scripts, CI/CD pipelines, or AI agents. Especially valuable for site migrations (importing content, uploading assets, generating redirects), multi-project management, and CMS content pipelines. Not for visual design work — use the Framer editor for that.
These capabilities aren't available in any other tool for this API.
snapshot — Track your Framer project's evolution over time with full structural snapshots and visual diffs
When an agent needs to understand what changed in a project between two points in time, this is the only way
framer-pp-cli snapshot --label 'before-redesign' && framer-pp-cli diff latest~1 latest --jsondashboard — Query across all registered Framer projects at once — stale CMS, unpublished changes, collection health
When an agent manages multiple client sites and needs a single command to find which projects need attention
framer-pp-cli dashboard --jsoncms-schema-diff — Declare CMS schema in YAML and diff it against the live project — infrastructure-as-code for Framer CMS
When an agent needs to verify CMS schema matches the expected structure before syncing content
framer-pp-cli cms-schema-diff ./schema.yaml --jsoncms-validate — Find broken collection references, orphan items, and circular refs across your CMS
When CMS grows past 3-4 collections, broken references become invisible — this surfaces them
framer-pp-cli cms-validate --jsoncms-sync — Import CMS content from CSV/JSON/Sheets with a preview diff before committing changes
When an agent needs to bulk-update CMS content safely without risking accidental overwrites or deletions
framer-pp-cli cms-sync ./blog-posts.csv --collection Blog --dry-run --jsonnodes set — Set node attributes through the live Framer bridge
When an agent needs to update canvas node attributes by ID
framer-pp-cli nodes set abc123 --json --dry-runpublish — Create a preview deployment, then optionally promote it to production
When an agent needs a shareable preview URL or an explicit production deploy
framer-pp-cli publish --jsoncode-push — Edit TSX components locally in your editor, then push to Framer — eliminates copy-paste workflow
When a developer needs to edit Framer components in their preferred editor without the copy-paste dance
framer-pp-cli code-pull HeroSection -o hero.tsx && vim hero.tsx && framer-pp-cli code-push hero.tsx --name HeroSectionmigrate-scrape — Planned stub for scraping a site into a Framer migration plan
Do not use for production migration planning yet; the command reports that this feature is planned
framer-pp-cli migrate-scrape https://old-site.com --depth 3 --dry-run --jsonassets upload — Upload a directory of images and auto-bind them to CMS items by filename-to-slug matching
When an agent needs to upload dozens of images and link them to the right CMS records in one operation
framer-pp-cli assets upload --dry-run --jsoni18n-push — Planned stub for syncing translations between standard i18n formats and Framer localization
Do not use for production translation sync yet; the command reports that this feature is planned
framer-pp-cli i18n-push translations.csv --format csv --dry-runredirects-generate — Planned stub for generating redirect maps from an old sitemap
Do not use for production redirect generation yet; the command reports that this feature is planned
framer-pp-cli redirects-generate --old-sitemap https://old-site.com/sitemap.xml --jsonstyles-import — Import CSS variables or Tailwind config as Framer color and text styles — no manual recreation
When porting a site with an existing design system, this eliminates hours of manual style recreation
framer-pp-cli styles-import --from tailwind.config.js --jsonThis CLI uses Chrome-compatible HTTP transport for browser-facing endpoints. It does not require a resident browser process for normal API calls.
The shipped binary exposes a bridge-flattened surface: the primary live operations are single leaf commands (no list/preview/deploy subcommands), while CMS, nodes, and a handful of others keep nested subcommands. Every command below exists in the binary — verify any of them with framer-pp-cli <command> --help.
These talk to the Framer Server API through the Node.js bridge. They require FRAMER_API_KEY and FRAMER_PROJECT_URL.
publish — Create a preview deployment, then optionally promote to production. Single command (no preview/deploy subcommands); pass --yes to auto-deploy.
framer-pp-cli publish — Preview, print the URL + deployment ID, prompt to deployframer-pp-cli publish --yes — Non-interactive: auto-deploy to productionchanges — List added, removed, and modified paths since last publish (single command, no subcommands).
framer-pp-cli changes — Show changed paths as a table or JSONpages — List pages from the live project (single command, no subcommands).
framer-pp-cli pages — List all pagesnodes — Canvas node operations.
framer-pp-cli nodes get <id> — Get a node by ID with all attributesframer-pp-cli nodes children <id> — List children of a nodeframer-pp-cli nodes set <id> — Set attributes on a nodeframer-pp-cli nodes move <id> — Move a node to a new parent / reorder by indexframer-pp-cli nodes clone <id> — Clone a nodeframer-pp-cli nodes create-frame — Create a new frame node on the canvasframer-pp-cli nodes remove <id> — Remove a node from the canvasassets — Image asset upload.
framer-pp-cli assets upload — Upload images to Framer and get back asset URLscode — Code file management (live).
framer-pp-cli code list — List all code files in the projectframer-pp-cli code get <id> — Get a code file's contentcomponents — Component operations.
framer-pp-cli components add — Add a code component instance to the canvas by URL or nameredirects — URL redirect management (live).
framer-pp-cli redirects list — List all project redirectsframer-pp-cli redirects add --from /old --to /new — Add a redirectcollections — List CMS collections directly from the Framer API (live).
framer-pp-cli collections — List collections with fields and item countsitems — List CMS items in a collection (live).
framer-pp-cli items — List items in the specified collectioncms-fields — Add, remove, or reorder collection fields.
framer-pp-cli cms-fields --collection-id <id> — Manage a collection's fieldsfonts — Font management.
framer-pp-cli fonts — List all available fonts with weights and stylesproject — Framer project management.
framer-pp-cli project get — Get project name, ID, and metadataframer-pp-cli project user — Get current authenticated user infosync — Sync all Framer project data into the local store (single command).
framer-pp-cli sync — Pull collections, items, pages, code, etc. into local SQLitedoctor — Verify the live API connection via the Node.js bridge.
framer-pp-cli doctor — Check Node, the framer-api bridge, and connectivityWhen you know what you want to do but not which command does it, ask the CLI directly:
framer-pp-cli which "<capability in your own words>"which resolves a natural-language capability query to the best matching command from this CLI's curated feature index. Exit code 0 means at least one match; exit code 2 means no confident match — fall back to --help or use a narrower query.
These commands are declared by the spec author and require separate hand-written wiring; the generator does not emit Cobra registration for them. They are listed here for discoverability and are intentionally outside ## Command Reference so the verify-skill unknown-command check does not treat them as generator-owned paths.
framer-pp-cli dashboard — Multi-project status dashboard showing stale CMS, unpublished changes, and collection healthframer-pp-cli snapshot — Take a full structural snapshot of the current project into local SQLiteframer-pp-cli diff <snapshot_a> <snapshot_b> — Diff two project snapshots to see structural changes over timeframer-pp-cli migrate-scrape <url> — Scrape an existing website to generate a Framer migration manifest (currently a stub)framer-pp-cli cms-sync <source_file> — Sync CMS content from CSV or JSON with dry-run previewframer-pp-cli cms-schema-diff <schema.yaml> — Compare a local CMS schema definition against live Framer collectionsframer-pp-cli cms-validate — Find broken collection references, orphan items, and circular refs across CMSframer-pp-cli styles-import <file> — Import CSS variables or Tailwind config as Framer color and text styles (local preview/dry-run)framer-pp-cli code-push <file> — Push a local TSX/JS file or preview the change with --dry-runframer-pp-cli code-pull <code_file_id> — Pull a Framer code file from the local store to a local TSX fileframer-pp-cli redirects-generate — Planned stub for redirect map generationframer-pp-cli i18n-push <translations_file> — Planned stub for Framer localization syncframer-pp-cli cms-sync ./posts.csv --collection Blog --dry-run && framer-pp-cli cms-sync ./posts.csv --collection BlogPreview the import diff first, then commit the changes
framer-pp-cli styles-import --from tailwind.config.js --json --select name,valueImport your entire Tailwind color palette as Framer styles
framer-pp-cli code-pull HeroSection --output hero.tsxPull a Framer code file to edit locally, then push back with code-push
framer-pp-cli redirects-generate --dry-run --jsonShow the current planned-stub response for redirect map generation
framer-pp-cli publish --jsonCreate a preview deployment and get the shareable URL (add --yes to promote to production)
Framer uses per-project API keys generated in Site Settings → General. Provide the key and project URL via the environment (see Environment Variables): set FRAMER_API_KEY and FRAMER_PROJECT_URL before any live command. Live commands require Node.js 18+ and the framer-api npm package as a runtime bridge.
To reuse the same flag set across invocations (e.g. a scheduled agent), save a named profile and apply it with --profile <name> — see Named Profiles. For status across multiple synced projects at once, use framer-pp-cli dashboard.
Run framer-pp-cli doctor to verify setup (Node + bridge + connectivity + env vars).
Add --agent to any command. Expands to: --json --compact --no-input --no-color --yes.
Pipeable — JSON on stdout, errors on stderr
Filterable — --select keeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs:
framer-pp-cli changes --agent --select id,name,statusPreviewable — --dry-run shows the request without sending
Offline-friendly — sync/search commands can use the local SQLite store when available
Non-interactive — never prompts, every input is a flag
Explicit retries — use --idempotent only when an already-existing create should count as success, and --ignore-missing only when a missing delete target should count as success
Commands that read from the local store or the API wrap output in a provenance envelope:
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}Parse .results for data and .meta.source to know whether it's live or local. A human-readable N results (live) summary is printed to stderr only when stdout is a terminal AND no machine-format flag (--json, --csv, --compact, --quiet, --plain, --select) is set — piped/agent consumers and explicit-format runs get pure JSON on stdout.
When you (or the agent) notice something off about this CLI, record it:
framer-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
framer-pp-cli feedback --stdin < notes.txt
framer-pp-cli feedback list --json --limit 10Entries are stored locally at ~/.framer-pp-cli/feedback.jsonl. They are never POSTed unless FRAMER_FEEDBACK_ENDPOINT is set AND either --send is passed or FRAMER_FEEDBACK_AUTO_SEND=true. Default behavior is local-only.
Write what surprised you, not a bug report. Short, specific, one line: that is the part that compounds.
Every command accepts --deliver <sink>. The output goes to the named sink in addition to (or instead of) stdout, so agents can route command results without hand-piping. Three sinks are supported:
| Sink | Effect |
|---|---|
stdout | Default; write to stdout only |
file:<path> | Atomically write output to <path> (tmp + rename) |
webhook:<url> | POST the output body to the URL (application/json or application/x-ndjson when --compact) |
Unknown schemes are refused with a structured error naming the supported set. Webhook failures return non-zero and log the URL + HTTP status on stderr.
A profile is a saved set of flag values, reused across invocations. Use it when a scheduled agent calls the same command every run with the same configuration - HeyGen's "Beacon" pattern.
framer-pp-cli profile save briefing --json
framer-pp-cli --profile briefing changes
framer-pp-cli profile list --json
framer-pp-cli profile show briefing
framer-pp-cli profile delete briefing --yesExplicit flags always win over profile values; profile values win over defaults. agent-context lists all available profiles under available_profiles so introspecting agents discover them at runtime.
| Code | Meaning |
|---|---|
| 0 | Success |
| 2 | Usage error (wrong arguments) |
| 3 | Resource not found |
| 4 | Authentication required |
| 5 | API error (upstream issue) |
| 7 | Rate limited (wait and retry) |
| 10 | Config error |
Parse $ARGUMENTS:
help, or --help → show framer-pp-cli --help outputinstall → ends with mcp → MCP installation; otherwise → see Prerequisites above--agent)go install github.com/mvanhorn/printing-press-library/library/developer-tools/framer/cmd/framer-pp-mcp@latestclaude mcp add framer-pp-mcp -- framer-pp-mcpclaude mcp listwhich framer-pp-cli
If not found, offer to install (see Prerequisites at the top of this skill).--agent flag:framer-pp-cli <command> [subcommand] [args] --agentframer-pp-cli <command> --help.© mvanhorn, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in cli-skills/pp-framer of mvanhorn/printing-press-library.
Open the folder on GitHubat commit 0fdcc7a
Pp Framer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pp Framer this skillmvanhorn/printing-press-library | 2.1k | — | ~5.2k | Automated safety check: Notes | Apache-2.0 | |
| Khazix WeChat Article WriterKKKKhazix/khazix-skills | 21k | 2 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Figurevectorize-io/hindsight | 47k | — | ~1.9k | Automated safety check: Pass | MIT | |
| SepiaNanako0129/sepia | 3k | — | ~3.6k | Automated safety check: Pass | MIT | |
| Blog Post Draftingluongnv89/claude-howto | 42k | — | ~2.1k | Automated safety check: Pass | MIT | |
| Notion To Blogwasp-lang/wasp | 19k | — | ~922 | Automated safety check: Pass | MIT |
KKKKhazix/khazix-skills
Writes long-form WeChat official account articles in the personal style of the Khazix account, from briefs, links, PDFs or rough notes, with a topic quality check.
vectorize-io/hindsight
Draw an animated figure (boxes, arrows, moving data) as one self-contained SVG for a GitHub README, PR, issue or blog post.
Nanako0129/sepia
Make AI-generated writing read as human-written, in fiction and in professional prose.
luongnv89/claude-howto
Guides drafting a blog post from an idea and optional source material: research, brainstorming, outlining and version-tracked drafts, with user approval at each step.
wasp-lang/wasp
Transfer a blog post from Notion to the Wasp blog. An agent skill from wasp-lang/wasp.
nteract/semiotic
Author a new entry for the Semiotic blog. An agent skill from nteract/semiotic.
mvanhorn/printing-press-library
Desktop automation through the real Rust agent-desktop CLI, published in Printing Press through a small bridge.
mvanhorn/printing-press-library
Search, browse, and download Google Fonts from the terminal via the gfonts CLI.
mvanhorn/printing-press-library
The free, offline Trigger phrases: search 1688 for, find a factory on 1688 for, wholesale price on 1688 for, who is the cheapest supplier on 1688 for, compare 1688 suppliers for, use 1688, run 1688.
mvanhorn/printing-press-library
Inspect known Activity Japan plan IDs or URLs, compare dated prices and sessions, check language-sitemap coverage, and hand off to canonical booking pages.
mvanhorn/printing-press-library
Every Admin By Request portal action, plus a local SQLite mirror of audit, events, inventory and requests for ad-hoc...
mvanhorn/printing-press-library
macOS screen capture, window recording, GIF conversion, and agent evidence bundles from the terminal.
Categories
Every Framer operation from your terminal — CMS sync, bulk upload, site migration, and a local database no other... Pp Framer is an agent skill from mvanhorn/printing-press-library. Every Framer operation from your terminal — CMS sync, bulk upload, site migration, and a local database no other...
Pp Framer fits situations like: phrases: sync CMS content to Framer; import blog posts into Framer; publish my Framer site; migrate site to Framer.
Run `npx skills add mvanhorn/printing-press-library --skill pp-framer -a claude-code`. Or copy the skill folder (cli-skills/pp-framer in mvanhorn/printing-press-library) into .claude/skills/pp-framer in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mvanhorn/printing-press-library --skill pp-framer -a codex`. Or copy the skill folder (cli-skills/pp-framer in mvanhorn/printing-press-library) into .agents/skills/pp-framer in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mvanhorn/printing-press-library --skill pp-framer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pp-framer, .gemini/skills/pp-framer, .github/skills/pp-framer and .opencode/skills/pp-framer in your project.
Going by SKILL.md and its folder, Pp Framer needs the command-line tools its instructions call (go, claude and npx) and credentials named FRAMER_API_KEY. Our summary lists: Node.js; A credential in FRAMER_API_KEY. Its frontmatter pre-approves these tools: Read, Bash.
SKILL.md names 2 domains. In commands or code: old-site.com and framer.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Pp Framer is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pp Framer: Khazix WeChat Article Writer (KKKKhazix/khazix-skills, 21k stars), Figure (vectorize-io/hindsight, 47k stars), Sepia (Nanako0129/sepia, 3k stars) and Blog Post Drafting (luongnv89/claude-howto, 42k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mvanhorn (a GitHub user) maintains it in mvanhorn/printing-press-library, which has 2,053 GitHub stars. The repository holds 505 skills in this directory. The repository was last updated on October 7, 2026.
Source: mvanhorn/printing-press-library on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.