一键导入
hashnode
Manage Hashnode blog posts via GraphQL API. Create, update, list, and delete posts. Use when user wants to manage their Hashnode blog from OpenClaw.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Manage Hashnode blog posts via GraphQL API. Create, update, list, and delete posts. Use when user wants to manage their Hashnode blog from OpenClaw.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Orchestrate multi-agent teams with defined roles, task lifecycles, handoff protocols, and review workflows. Use when: (1) Setting up a team of 2+ agents with different specializations, (2) Defining task routing and lifecycle (inbox → spec → build → review → done), (3) Creating handoff protocols between agents, (4) Establishing review and quality gates, (5) Managing async communication and artifact sharing between agents.
Look up any arxiv paper on alphaxiv.org to get a structured AI-generated overview
Socratic questioning protocol + user communication. MANDATORY for complex requests, new features, or unclear requirements. Includes progress reporting and error handling.
Lighthouse-style efficiency audit for OpenClaw. Scores your instance A+ to F across 6 categories (context injection, cron health, session bloat, config, skills, transcripts). Identifies wasted tokens, bloated sessions, misconfigured crons, and model right-sizing opportunities. Zero dependencies (Python stdlib only).
Make your AI agent learn and improve automatically. Reviews sessions, extracts learnings, updates memory files, and compounds knowledge over time. Set up nightly review loops that make your agent smarter every day.
A multi-agent deliberation hub with 3 core agents and extensible extended agents. Can call user workspace skills when needed.
| name | hashnode |
| description | Manage Hashnode blog posts via GraphQL API. Create, update, list, and delete posts. Use when user wants to manage their Hashnode blog from OpenClaw. |
| homepage | https://hashnode.com |
| metadata | {"openclaw":{"emoji":"✍️","requires":{"env":["HASHNODE_TOKEN","HASHNODE_PUBLICATION_ID"]},"primaryEnv":"HASHNODE_TOKEN"}} |
Manage Hashnode blog via the GraphQL API at https://gql.hashnode.com/graphql.
Both vars are injected via systemd environment (no files, no secrets on disk):
Environment=HASHNODE_TOKEN=...
Environment=HASHNODE_PUBLICATION_ID=... # e.g. 624c1b702b09bb392ea5cc94
curl -s -X POST "https://gql.hashnode.com/graphql" \
-H "Authorization: Bearer ${HASHNODE_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"query":"{ me { username publications(first:1) { edges { node { id title } } } } }"}'
curl -s -X POST "https://gql.hashnode.com/graphql" \
-H "Authorization: Bearer ${HASHNODE_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"query":"{ publication(id: \"'"${HASHNODE_PUBLICATION_ID}"'\") { title posts(first: 10) { edges { node { title slug views publishedAt tags { name } } } } } }"}'
TITLE="$1"
CONTENT_MARKDOWN="$2"
TAGS="${3:-[]}"
curl -s -X POST "https://gql.hashnode.com/graphql" \
-H "Authorization: Bearer ${HASHNODE_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"query":"mutation { createStory(input: {title: \"'"${TITLE}"'\", contentMarkdown: \"'"${CONTENT_MARKDOWN}"'\", tags: '"${TAGS}"', publicationId: \"'"${HASHNODE_PUBLICATION_ID}"'\", isDraft: false}) { id slug } }"}'
SLUG="$1"
curl -s -X POST "https://gql.hashnode.com/graphql" \
-H "Authorization: Bearer ${HASHNODE_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"query":"{ publication(id: \"'"${HASHNODE_PUBLICATION_ID}"'\") { post(slug: \"'"${SLUG}"'\") { id title contentMarkdown views publishedAt tags { name } } } }"}'
POST_ID="$1"
curl -s -X POST "https://gql.hashnode.com/graphql" \
-H "Authorization: Bearer ${HASHNODE_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"query":"mutation { deleteStory(postId: \"'"${POST_ID}"'\") { success } }"}'
curl -s -X POST "https://gql.hashnode.com/graphql" \
-H "Authorization: Bearer ${HASHNODE_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"query":"{ publication(id: \"'"${HASHNODE_PUBLICATION_ID}"'\") { title posts(first: 100) { edges { node { views } } } } }"}' | \
python3 -c "import json,sys; d=json.load(sys.stdin); posts=d['data']['publication']['posts']['edges']; total=sum(p['node']['views'] for p in posts); print(f\"Posts: {len(posts)}, Total views: {total}\")"
FILE="$1"
shift || true
TAGS="${*:-[]}"
TITLE=$(head -1 "$FILE" | sed 's/^# //')
CONTENT=$(sed '1d' "$FILE" | python3 -c "import sys,json; print(json.dumps(sys.stdin.read()))")
curl -s -X POST "https://gql.hashnode.com/graphql" \
-H "Authorization: Bearer ${HASHNODE_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"query":"mutation { createStory(input: {title: '"${TITLE}"', contentMarkdown: '"${CONTENT}"', tags: '"${TAGS}"', publicationId: \"'"${HASHNODE_PUBLICATION_ID}"'\", isDraft: false}) { id slug } }"}'
# Example: cross-post an article from letscode.blog to Hashnode
create_post "Article Title Here" "$(cat /path/to/article.md)" '["quran","react","mcp"]'
HASHNODE_PUBLICATION_ID is the numeric publication ID (e.g. 624c1b702b09bb392ea5cc94)publicationIdpublication(id:).posts(first: N)views is a field on the Post type (not viewsCount)