Mowenskill Clean

v1.0.3

Publish, edit, or configure notes on Mowen (墨问) via Open API. Use when user mentions 墨问, mowen, 发布笔记, publish note, or wants to create social-media-style not...

0· 145·1 current·1 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for jacobluo/mowenskill.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Mowenskill Clean" (jacobluo/mowenskill) from ClawHub.
Skill page: https://clawhub.ai/jacobluo/mowenskill
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Required env vars: MOWEN_API_KEY
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install mowenskill

ClawHub CLI

Package manager switcher

npx clawhub@latest install mowenskill
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description (publish/edit/configure Mowen notes) match the declared env var (MOWEN_API_KEY) and the included script which calls the documented open.mowen.cn APIs. No unrelated credentials or binaries are requested.
Instruction Scope
SKILL.md instructions mirror the script's behavior: building NoteAtom JSON, uploading images (remote or local), creating/editing notes, and returning noteId. The runtime instructions do not request unrelated system files or extraneous credentials. Note: the script will read any local file paths you include for image uploads and then upload them to the storage endpoint returned by the API (expected behavior for image upload).
Install Mechanism
No install spec; skill is instruction + Python code that uses only the standard library. Nothing is downloaded from third-party URLs or installed automatically.
Credentials
Only a single environment variable (MOWEN_API_KEY) is required and declared as the primary credential. That is proportional to a skill that calls Mowen's Open API. The SKILL.md and code do not reference other hidden env variables.
Persistence & Privilege
Skill is not forced-always and uses normal, user-invocable behavior. It does not request persistent platform privileges or modify other skills' settings.
Assessment
This skill appears to do what it claims, but exercise normal caution: only provide a MOWEN_API_KEY you trust (create a scoped or revokable key if possible), inspect the included scripts before running, and avoid passing local file paths that reference sensitive files (the script will read and upload any local files you specify as images to the storage endpoint returned by the API). If you want extra safety, run the script in an isolated environment, use an API key with limited quotas/permissions, and review tests in tests/test_publish_note.py which mock network calls to validate local logic.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

EnvMOWEN_API_KEY
Primary envMOWEN_API_KEY
latestvk971m8a99b88syzygr44g2mvgd83d3z6
145downloads
0stars
4versions
Updated 1mo ago
v1.0.3
MIT-0

墨问笔记发布 (Mowen Note Publisher)

Overview

Publish rich-text notes (text, images, formatting) to 墨问 via its Open API. This skill covers three operations: creating new notes, editing existing notes (API-created only), and modifying note settings (privacy, sharing, expiration). A Python script (scripts/publish_note.py) handles all API calls, image uploads, and NoteAtom construction with zero third-party dependencies.

Prerequisites

  • API Key: Obtain from 墨问小程序 → 我的 → 设置 → 开放平台 → 创建 API Key
  • Environment: Set MOWEN_API_KEY environment variable, or pass via --api-key argument
  • Python 3: Required for running the publish script (macOS has it pre-installed)

Workflow Decision Tree

User Request
    │
    ├── "发布/创建笔记" or "publish note"
    │   └── ACTION: create
    │       ├── Has images? → Upload images first (see Image Handling)
    │       ├── Build input JSON with paragraphs, tags, autoPublish
    │       └── Run: publish_note.py --action create
    │
    ├── "编辑/修改笔记内容" or "edit note"
    │   └── ACTION: edit (requires noteId from previous create)
    │       ├── ⚠️ Only API-created notes can be edited
    │       ├── Build input JSON with new paragraphs
    │       └── Run: publish_note.py --action edit --note-id <ID>
    │
    └── "修改笔记设置/隐私" or "change note settings"
        └── ACTION: settings (requires noteId)
            └── Run: publish_note.py --action settings --note-id <ID> --privacy <N>

Creating a Note (Step by Step)

1. Gather Content from User

Collect the note content. Identify:

  • Text paragraphs (plain text or rich text with bold/highlight/links)
  • Images (local file paths or URLs)
  • Tags (optional, max 10, each ≤ 30 chars)
  • Whether to auto-publish (default: draft)
  • Privacy setting (default: public)

2. Prepare Input JSON

Build a JSON object following this schema:

{
  "paragraphs": [
    "Plain text paragraph",
    [{"text": "Bold text", "bold": true}, " and normal text"],
    {"type": "heading", "level": 1, "text": "Title"},
    {"type": "image", "src": "https://example.com/photo.jpg"},
    {"type": "image", "src": "/path/to/local/photo.jpg", "width": 1080, "height": 720},
    {"type": "blockquote", "text": "A quote"},
    {"type": "bulletList", "items": ["Item 1", "Item 2"]},
    {"type": "orderedList", "items": ["First", "Second"]}
  ],
  "tags": ["tag1", "tag2"],
  "autoPublish": true,
  "privacyType": 1
}

Paragraph types:

TypeFormatDescription
Plain text"string"Simple text paragraph
Rich text[{...}, ...]Array of text items with optional bold, highlight, link
Heading{"type":"heading", "level":1, "text":"..."}h1-h6 heading
Image{"type":"image", "src":"..."}Image (URL, local path, or fileId)
Quote{"type":"blockquote", "text":"..."} or {"type":"quote", "text":"..."}Block quote
Bullet list{"type":"bulletList", "items":["..."]}Unordered list
Ordered list{"type":"orderedList", "items":["..."]}Numbered list
Raw node{"type":"raw", "node":{...}}Direct NoteAtom node passthrough

Privacy types: public = public, private = self-only, rule = custom rules (with noShare/expireAt)

3. Save Input and Run Script

Save the JSON to a temporary file and execute:

python {SKILL_DIR}/scripts/publish_note.py --action create --input /tmp/note_input.json

Or pipe directly via stdin:

echo '<json>' | python {SKILL_DIR}/scripts/publish_note.py --action create

The script outputs a JSON result with noteId on stdout. Save this noteId — it is needed for subsequent edit or settings operations.

4. Report Result

Inform the user of the created note's ID and status (draft vs published).

Editing a Note

⚠️ Limitation: Only notes created via the API can be edited. Notes created in the 墨问 mini-program cannot be edited through this API.

To edit, provide the noteId (from a previous create) and new content:

python {SKILL_DIR}/scripts/publish_note.py --action edit --note-id <NOTE_ID> --input /tmp/note_edit.json

The input JSON format is identical to creation (the paragraphs field). The entire note content will be replaced.

Modifying Note Settings

To change privacy, sharing, or expiration settings:

# Set to private
python {SKILL_DIR}/scripts/publish_note.py --action settings --note-id <NOTE_ID> --privacy private

# Set to public
python {SKILL_DIR}/scripts/publish_note.py --action settings --note-id <NOTE_ID> --privacy public

# Set custom rule: forbid sharing with expiration
python {SKILL_DIR}/scripts/publish_note.py --action settings --note-id <NOTE_ID> --privacy rule --no-share --expire-at 1735689600

Image Handling

The script automatically handles images found in paragraphs:

  • URL images (http:// or https://): Uploaded via remote upload API (< 30MB)
  • Local file paths: Uploaded via local upload API (< 50MB, formats: gif/jpeg/jpg/png/webp)
  • Existing fileId: Passed through directly (no upload needed)

Image upload is automatic — simply include image entries in the paragraphs array and the script handles the rest. Optionally provide width and height for better rendering.

Rate limiting (1 req/sec) is automatically enforced between API calls.

API Reference

For complete API documentation including endpoint details, NoteAtom structure specification, request/response examples, and error codes, refer to:

📄 references/mowen_api.md

Key search patterns for the reference file:

  • ## 1. 笔记创建 — Create endpoint details
  • ## 2. 笔记编辑 — Edit endpoint details
  • ## 3. 笔记设置 — Settings endpoint details
  • ## 4. NoteAtom 结构定义 — Full NoteAtom schema with all node types
  • ## 5. 图片上传 — Image upload (local + remote) procedures
  • ## 7. 限频与配额汇总 — Rate limits and daily quotas

Common Use Cases

Publish a simple text note

{
  "paragraphs": [
    "今天天气真好,适合出门散步 ☀️"
  ],
  "tags": ["日常", "心情"],
  "autoPublish": true
}

Publish a note with images and formatting

{
  "paragraphs": [
    {"type": "heading", "level": 1, "text": "周末探店记录"},
    "今天去了一家超棒的咖啡店!",
    {"type": "image", "src": "https://example.com/coffee.jpg"},
    [{"text": "拿铁", "bold": true}, "味道超赞,推荐指数 ⭐⭐⭐⭐⭐"],
    {"type": "image", "src": "/Users/me/photos/cake.jpg", "width": 1080, "height": 1080},
    {"type": "blockquote", "text": "生活需要一点甜"},
    {"type": "bulletList", "items": ["环境优雅", "咖啡好喝", "甜品精致"]}
  ],
  "tags": ["探店", "咖啡", "美食"],
  "autoPublish": true
}

Edit a previously created note

# Original creation returned noteId = "note_abc123"
python publish_note.py --action edit --note-id note_abc123 --input updated_content.json

Make a note private

python publish_note.py --action settings --note-id note_abc123 --privacy private

Comments

Loading comments...