โ† All skills
Tencent SkillHub ยท Developer Tools

Ghost Admin

Ghost CMS content management via Admin API v5.x. Use when: (1) creating, editing, or publishing blog posts or static pages, (2) managing tags, (3) uploading...

skill openclawclawhub Free
0 Downloads
0 Stars
0 Installs
0 Score
High Signal

Ghost CMS content management via Admin API v5.x. Use when: (1) creating, editing, or publishing blog posts or static pages, (2) managing tags, (3) uploading...

โฌ‡ 0 downloads โ˜… 0 stars Unverified but indexed

Install for OpenClaw

Quick setup
  1. Download the package from Yavira.
  2. Extract the archive and review SKILL.md first.
  3. Import or place the package into your OpenClaw setup.

Requirements

Target platform
OpenClaw
Install method
Manual import
Extraction
Extract archive
Prerequisites
OpenClaw
Primary doc
SKILL.md

Package facts

Download mode
Yavira redirect
Package format
ZIP package
Source platform
Tencent SkillHub
What's included
README.md, SKILL.md, config.example.json, references/api.md, references/troubleshooting.md, scripts/_retry.py

Validation

  • Use the Yavira download entry.
  • Review SKILL.md after the package is downloaded.
  • Confirm the extracted package contains the expected setup assets.

Install with your agent

Agent handoff

Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.

  1. Download the package from Yavira.
  2. Extract it into a folder your agent can access.
  3. Paste one of the prompts below and point your agent at the extracted folder.
New install

I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.

Upgrade existing

I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.

Trust & source

Release facts

Source
Tencent SkillHub
Verification
Indexed source record
Version
1.2.0

Documentation

ClawHub primary doc Primary doc: SKILL.md 16 sections Open source page

Ghost Skill

Full Ghost Admin API v5 client. HS256 JWT auth and all HTTP calls via stdlib (urllib) - zero external dependencies. Credentials: ~/.openclaw/secrets/ghost_creds ยท Config: ~/.openclaw/config/ghost/config.json

Trigger phrases

Load this skill immediately when the user says anything like: "create / write / draft a blog post / article" "publish this post / article", "make this live on Ghost" "update / edit [post title or slug]", "change the title of my post" "unpublish / revert to draft [post]" "create / add a tag", "list my tags on Ghost" "create / update / publish a page" "upload this image to Ghost" "list my posts / drafts", "show me what's in draft" "schedule this post for [date]" "what's on my Ghost site?", "show site info"

Quick Start

python3 scripts/ghost.py config # verify credentials + active config python3 scripts/ghost.py site # test connection + show site info python3 scripts/ghost.py posts --limit 3 --fields "id,title,status"

Setup

python3 scripts/setup.py # interactive: credentials + permissions + connection test python3 scripts/init.py # validate all configured permissions against live instance init.py only runs write/delete tests when allow_delete=true. When allow_delete=false, write tests are skipped - no test artifacts are created, so none can be left behind. Manual - ~/.openclaw/secrets/ghost_creds (chmod 600): GHOST_URL=https://your-ghost.example.com GHOST_ADMIN_KEY=id:secret_hex Admin API Key: Ghost Admin โ†’ Settings โ†’ Integrations โ†’ Add custom integration โ†’ copy Admin API Key. config.json - behavior restrictions: KeyDefaultEffectallow_publishfalseallow status=published (enable explicitly to publish)allow_deletefalseallow delete posts/pages/tagsallow_member_accessfalseenable member read/writedefault_status"draft"status applied when not specifieddefault_tags[]tags always merged into new postsreadonly_modefalseoverride: block all writes

Storage & credentials

The skill reads and writes the following paths. All usage is intentional and documented: PathWritten byPurpose~/.openclaw/secrets/ghost_credssetup.pyGhost credentials (GHOST_URL, GHOST_ADMIN_KEY). chmod 600. Never committed.~/.openclaw/config/ghost/config.jsonsetup.pyBehavior restrictions (allow_publish, allow_delete, etc.). No secrets. Not in skill dir - survives clawhub updates. Credentials can also be provided via environment variables (GHOST_URL, GHOST_ADMIN_KEY). The skill checks env vars first. Cleanup on uninstall: clawhub uninstall ghost-admin removes the skill directory. To also remove credentials and config: python3 scripts/setup.py --cleanup On reinstall, any existing config at ~/.openclaw/config/ghost/config.json is picked up automatically.

Module usage

from scripts.ghost import GhostClient gc = GhostClient() post = gc.create_post("My Title", html="<p>Body</p>", status="draft") gc.publish_post(post["id"])

CLI reference

# Posts python3 scripts/ghost.py posts --status published --limit 10 python3 scripts/ghost.py posts --tag devops --fields "id,title,published_at" python3 scripts/ghost.py post <id_or_slug> python3 scripts/ghost.py post-create "Title" --html "<p>...</p>" --status draft python3 scripts/ghost.py post-create "Title" --html-file body.html --tags "DevOps,Linux" python3 scripts/ghost.py post-create "Title" --html-file body.html --feature-image "https://..." python3 scripts/ghost.py post-update <id> --fields-json '{"title":"New","custom_excerpt":"..."}' python3 scripts/ghost.py post-publish <id> python3 scripts/ghost.py post-unpublish <id> python3 scripts/ghost.py post-delete <id> # requires allow_delete: true # Pages python3 scripts/ghost.py pages python3 scripts/ghost.py page-create "About" --html "<p>...</p>" python3 scripts/ghost.py page-publish <id> # Tags python3 scripts/ghost.py tags python3 scripts/ghost.py tag-create "DevOps" --slug devops --desc "DevOps content" python3 scripts/ghost.py tag-delete <id> # requires allow_delete: true # Images python3 scripts/ghost.py image-upload ./image.png --alt "Description" # Members & newsletters (read) python3 scripts/ghost.py members --limit 20 # requires allow_member_access: true python3 scripts/ghost.py newsletters python3 scripts/ghost.py tiers # Account python3 scripts/ghost.py site python3 scripts/ghost.py me python3 scripts/ghost.py config

Draft โ†’ review โ†’ publish

gc = GhostClient() # 1. Create draft post = gc.create_post( title="My Article", html=article_html, tags=[{"name": "DevOps"}, {"name": "Linux"}], meta_description="Short SEO description", status="draft", ) draft_url = f"{gc.base_url}/ghost/#/editor/post/{post['id']}" # 2. Return preview link to user for review # โ†’ f"Draft created: {draft_url}" # 3. After user approval: gc.publish_post(post["id"]) # โ†’ f"Published: {post['url']}"

Research โ†’ structured post

# Create a post with full SEO metadata post = gc.create_post( title="Why Rust is Taking Over Systems Programming", html=content_html, custom_excerpt="A technical deep-dive into Rust's memory model and adoption trends.", meta_title="Rust Systems Programming 2025", meta_description="Why Rust is replacing C++ in systems programming in 2025.", og_title="Rust is Taking Over Systems Programming", tags=[{"name": "Rust"}, {"name": "Systems"}], feature_image="https://example.com/rust.png", status="draft", )

Content audit by tag

result = gc.list_posts(limit="all", tag="devops", fields="id,title,status,published_at") posts = result["posts"] drafts = [p for p in posts if p["status"] == "draft"] published = [p for p in posts if p["status"] == "published"] # โ†’ summarize backlog for user

Batch tag creation

for name in ["DevOps", "Security", "Linux", "Cloud"]: try: gc.create_tag(name, slug=name.lower()) except Exception: pass # already exists

Ideas

Set allow_publish: false + default_status: draft for a "suggest only" mode Use default_tags in config for auto-tagging (e.g. always add "AI-assisted") Draft from a research summary, share preview link, publish after human review List posts --status draft to surface the content backlog for triage Upload a feature image first, then embed the returned URL in post HTML

Notes

updated_at conflict guard: update_post/update_page auto-fetches updated_at if omitted. HTML content: Ghost v5 stores Lexical internally but html import works perfectly for agent-generated content. allow_publish: false: Status is silently capped to "draft" - no error raised. JWT tokens: Generated fresh per request (5-min TTL), no caching needed. Slug: Auto-generated from title if omitted. Override with --slug for clean URLs.

Combine with

SkillWorkflowsummarizeSummarize a URL / PDF โ†’ draft a Ghost post from the summarytavily-searchResearch a topic โ†’ structured Ghost draft with sourcesnextcloudSave draft .md to NC โ†’ review โ†’ publish to GhostgmailForward a newsletter / article โ†’ draft Ghost post from itapi-gateway (linkedin)Publish Ghost post โ†’ cross-post excerpt to LinkedIn

API reference

See references/api.md for endpoint details, NQL filters, field list, and error codes.

Troubleshooting

See references/troubleshooting.md for common errors and fixes.

Category context

Code helpers, APIs, CLIs, browser automation, testing, and developer operations.

Source: Tencent SkillHub

Largest current source with strong distribution and engagement signals.

Package contents

Included in package
4 Docs1 Scripts1 Config
  • SKILL.md Primary doc
  • README.md Docs
  • references/api.md Docs
  • references/troubleshooting.md Docs
  • scripts/_retry.py Scripts
  • config.example.json Config