epress-publisher
Publish blog posts, upload images, and manage content on an epress blogging node via its GraphQL API. Supports creating Markdown articles and uploading media files (images, videos, PDFs). Use when the user wants to: publish a blog post, write an article, upload an image or media file, create content on an epress node, or interact with an epress blogging platform. This SKILL.md is self-hosted at the root of each epress node. The host you fetched it from IS the node — use that origin as EPRESS_NODE_URL.
Best use case
epress-publisher is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Publish blog posts, upload images, and manage content on an epress blogging node via its GraphQL API. Supports creating Markdown articles and uploading media files (images, videos, PDFs). Use when the user wants to: publish a blog post, write an article, upload an image or media file, create content on an epress node, or interact with an epress blogging platform. This SKILL.md is self-hosted at the root of each epress node. The host you fetched it from IS the node — use that origin as EPRESS_NODE_URL.
Teams using epress-publisher should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/public/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How epress-publisher Compares
| Feature / Agent | epress-publisher | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Publish blog posts, upload images, and manage content on an epress blogging node via its GraphQL API. Supports creating Markdown articles and uploading media files (images, videos, PDFs). Use when the user wants to: publish a blog post, write an article, upload an image or media file, create content on an epress node, or interact with an epress blogging platform. This SKILL.md is self-hosted at the root of each epress node. The host you fetched it from IS the node — use that origin as EPRESS_NODE_URL.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# epress Publisher
Publish text posts and media files to an epress blog node via its GraphQL API.
## Workflow
1. **Determine the node URL.** The origin from which this SKILL.md was fetched is the epress node. Parse scheme + host (e.g. `https://garbin.top`) and use it as `EPRESS_NODE_URL`.
2. **Authenticate.** Confirm that `EPRESS_JWT_TOKEN` is available. If missing, ask the user to generate one from their epress dashboard (Settings > API Tokens) with `create:publications` scope.
3. **Choose the right tool.**
- `publish_post` for Markdown text content.
- `publish_file` for binary media (images, videos, PDFs, etc.) via multipart upload.
4. **Generate or validate the slug.** A slug is always required. If the user provides one, validate it. Otherwise auto-generate one from the content using 3-5 English keywords, lowercased, hyphen-joined, matching `/^[a-z0-9]+(-[a-z0-9]+)*$/`, max 60 characters.
5. **Show the slug** to the user before publishing (e.g. "Publishing with slug: `my-slug`").
6. **Call the API** at `{EPRESS_NODE_URL}/api/graphql` with the appropriate mutation and authorization header.
7. **Return the public URL.** On success the API returns `{ id, slug }`. Build the URL as `{EPRESS_NODE_URL}/publications/{slug}` (or fall back to `/{id}` if slug is empty).
## Publish a Text Post
```bash
curl -s -X POST {EPRESS_NODE_URL}/api/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {EPRESS_JWT_TOKEN}" \
-d '{
"query": "mutation Create($input: CreatePublicationInput!) { createPublication(input: $input) { id slug } }",
"variables": {
"input": { "type": "POST", "body": "# My Post\nContent here.", "slug": "my-post" }
}
}'
```
**Response:**
```json
{"data": {"createPublication": {"id": "abc123", "slug": "my-post"}}}
```
Public URL: `{EPRESS_NODE_URL}/publications/my-post`
## Upload a Media File
Uses the [GraphQL multipart request spec](https://github.com/jaydenseric/graphql-multipart-request-spec):
```bash
curl -s -X POST {EPRESS_NODE_URL}/api/graphql \
-H "Authorization: Bearer {EPRESS_JWT_TOKEN}" \
-F 'operations={"query":"mutation Create($input: CreatePublicationInput!) { createPublication(input: $input) { id slug } }","variables":{"input":{"type":"FILE","file":null,"description":"Photo caption","slug":"my-photo"}}}' \
-F 'map={"0":["variables.input.file"]}' \
-F '0=@photo.jpg'
```
The `description` field is required at runtime even though the schema marks it optional. Omitting it causes `VALIDATION_FAILED`.
## Error Recovery
| HTTP Status | Cause | Action |
|-------------|-------|--------|
| 401 | Token invalid or expired | Ask user to regenerate JWT |
| 403 | Token missing `create:publications` scope | Ask user to issue a new token with correct scope |
| VALIDATION_FAILED | Missing required field (e.g. description on file upload) | Check parameters and retry |
For `publish_file`, the `description` field is enforced at runtime even though the GraphQL schema marks it optional. Always include it or ask the user for one before proceeding.Related Skills
tool-x-article-publisher
Publish Markdown to X (Twitter) Articles as a draft (never auto-publish). Use when the user asks to publish/post an article to X Articles, convert Markdown to X Articles rich text, or mentions "X article", "publish to X", "post to Twitter articles". Converts Markdown → HTML, pastes rich text, and inserts images deterministically.
managing-depression-screening
Administers and interprets PHQ-9 with severity-based treatment pathways and safety assessment. Use when screening for depression, interpreting PHQ scores, or initiating mental health treatment.
mobile-publisher
Use when planning, configuring, or maintaining a Salesforce Mobile Publisher branded app — a customer-facing or partner-facing mobile app distributed through Apple App Store or Google Play, built on either the Experience Cloud (LWR/Aura) Mobile Publisher template or the Field Service Mobile Publisher template. Triggers: 'salesforce mobile publisher branded app', 'experience cloud mobile app store distribution', 'mobile publisher push notifications certificate', 'app store review rejection salesforce', 'mobile publisher version policy update'. NOT for the standard Salesforce Mobile App customization (use lightning-app-builder-advanced), NOT for Field Service Lightning offline configuration (use fsl-mobile-app-setup), NOT for hybrid web apps embedded in WebView.
depression-support
Daily support for depression with mood tracking, behavioral activation, and self-care
bear-blog-publisher
Publish blog posts to Bear Blog platform.
csdn-publisher
写文章并发布到 CSDN。使用浏览器自动化 + 扫码登录。支持通过 Telegram 发送二维码,无需 VNC。集成 blog-writer 写作方法论,产出高质量、有个人风格的技术文章。
mastodon-publisher
Publish content to Mastodon. Use when you need to post a Mastodon status.
wordpress-publisher
Publish content directly to WordPress sites via REST API with full Gutenberg block support. Create and publish posts/pages, auto-load and select categories from website, generate SEO-optimized tags, preview articles before publishing, and generate Gutenberg blocks for tables, images, lists, and rich formatting. Use when user wants to publish to WordPress, post to blog, create WordPress article, update WordPress post, or convert markdown to Gutenberg blocks.
publisher-identity-verifier
Helps verify publisher identity integrity in AI agent ecosystems.
X-Publisher
Publish tweets to X (Twitter) using the official Tweepy library. Supports text-only tweets, tweets with images or videos, and returns detailed publish results including tweet ID and URL. Requires X API credentials (API Key, API Secret, Access Token, Access Token Secret).
skill-publisher-claw-skill
Prepare Claw skills for public release. Use when publishing skills to GitHub or ClawdHub - covers security audit, portability, documentation, git hygiene. Triggers: publish skill, release skill, audit skill, skill checklist, prepare skill for release.
skill-multi-publisher
One-command publish a Claude Code skill to ALL major marketplaces: GitHub (npx skills), ClawHub, and community marketplaces (composiohq/awesome-claude-skills, anthropics/skills, daymade/claude-code-skills, obra/superpowers-marketplace). Validates SKILL.md, auto-generates missing files, creates repos, publishes, and submits PRs to community directories.