@leeguoo/blog-publish
Personal CLI for MisoNote blog publishing workflows.
Install
npm install -g @leeguoo/blog-publish
Requires Node.js 20 or newer.
Install Blog Skill for AI Agents
Install the blog-content-publish skill into your AI coding agent (Claude Code, Cursor, Codex, and 10+ others):
npx skills add leeguooooo/blog
The CLI detects installed agents automatically and writes to ~/.agents/skills/blog-content-publish/ as the canonical location, then symlinks each detected agent (Claude Code → ~/.claude/skills/, Cursor → ~/.cursor/skills/, etc.).
To install globally without prompts:
npx skills add leeguooooo/blog --skill blog-content-publish --yes --global
To preview available skills without installing:
npx skills add leeguooooo/blog --list
Authentication
Interactive login stores a publish token in the local keychain when available:
blog-publish login
blog-publish whoami
blog-publish logout
For CI or one-off automation, pass --token or set PUBLISH_API_TOKEN instead of using login.
Publish
Publish or update a post payload from JSON or Markdown:
blog-publish publish --input ./post.json
blog-publish update --input ./post.md
blog-publish publish --input ./post.md --dry-run
blog-publish publish --input ./post.md --locale zh --slug example --title "Example" --summary "Short summary"
blog-publish publish --input ./deck.md --locale zh --slug ai-roadmap --title "AI Roadmap" --summary "Quarterly deck" --section ai_news --content-type ppt --dry-run
For Markdown input, frontmatter is optional. If the file is plain Markdown, pass required metadata with CLI flags such as --locale, --slug, --title, and --summary.
Common options:
--api-base <url>: override API base
--token <token>: bypass stored credentials
--idempotency-key <key>: stable publish dedupe key
- Markdown metadata flags:
--locale, --slug, --title, --summary, --section, --topic-slug, --tree-path, --tree-label, --tree-order, --content-type, --pair-id, --excerpt, --tags, --source-url, --repo-url, --public-source-label, --producer, --is-premium, --is-private, --password, --status, --published-at, --decision-meta
treePath / --tree-path attaches the post to the public library tree without changing its canonical /posts/<slug>/ URL. Example: --tree-path ai/agents/codex.
contentType: ppt or --content-type ppt publishes a deck-style post while still allowing the same section, tags, and localization workflow as a normal article.
Download And Backup
Download one post or back up a filtered set of posts:
blog-publish download --locale zh --slug example-post --output ./example.md
blog-publish download --locale zh --slug example-post --format json
blog-publish backup --output-dir ./backups/content
blog-publish backup --locale zh --status published --format markdown
backup writes one file per post plus manifest.json.
Assets
Manage uploaded assets from the same CLI:
blog-publish upload --file ./cover.png
blog-publish asset-list
blog-publish asset-info --id <asset-id>
blog-publish asset-delete --id <asset-id>
Use --markdown-only on upload to print the generated Markdown snippet directly.