← Back to Skills Marketplace
jyek

hum

by jyek · GitHub ↗ · v0.2.1 · MIT-0
cross-platform ⚠ suspicious
118
Downloads
0
Stars
0
Active Installs
3
Versions
Install in OpenClaw
/install hum-writer
Description
AI content writer that researches, outlines, drafts, publishes, and manages engagement for LinkedIn and X using your voice and style guidelines.
README (SKILL.md)
  1. Init/hum init sets up the data directory with template files (VOICE.md, CONTENT.md, AUDIENCE.md, CHANNELS.md, knowledge/index.md) and folders. After running init.py, also run bash setup.sh from the repo root to create the venv and install Python dependencies. All subsequent scripts require the venv (venv/bin/python3).
  2. Refresh feed/hum refresh-feed fetches your X home feed (via Bird filter:follows), configured X profiles, Hacker News, YouTube, and knowledge sources (RSS, sitemaps, YouTube transcripts, podcasts from knowledge/index.md) — all via direct APIs with no browser automation. Ranks items, sends a digest to Telegram, saves aggregated data to feeds.json
  3. Crawl knowledge/hum crawl independently crawls knowledge sources defined in knowledge/index.md. Saves full articles to knowledge/\x3Csource>/. Also runs as part of refresh-feed.
  4. Manage sources/hum sources adds, removes, and lists social/ephemeral feed sources in sources.json
  5. Brainstorm/hum brainstorm researches each content pillar across YouTube, X, Reddit, Hacker News, Polymarket, and web, then saves ideas to ideas.json
  6. Learn/hum learn analyzes feed trends and platform algorithms, updates context files
  7. Manage ideas/hum ideas shows the pipeline as numbered plain text. Format: 1. ID · Title · platform · status. One idea per line. No markdown tables, no bullet points, no code blocks.
  8. Review drafts/hum content lists current saved draft files and generated assets ⚠️ Always use /hum create and read VOICE.md + content-samples/ when drafting posts. Follow the create flow: research → outline → approval → draft. Do not produce a draft without an approved outline.
  9. Draft posts/hum create [platform] [type] [idea] follows a strict 4-step process:
    • Step 1 — Load context: read VOICE.md, CHANNELS.md, content-samples/, knowledge/, the idea from ideas.json
    • Step 2 — Research: 3-5 web searches (core topic, stats, contrarian, examples, adjacents); build a fact base; present findings
    • Step 3 — Propose outline: style selection (with rationale) + hook/angle/structure + research summary; do NOT write prose yet; get user approval first; style must be named and justified using STYLES.md
    • Step 4 — Write: only after outline is approved; match user's voice from content-samples/; present draft; iterate until approved
    • ⚠️ Never skip to drafting without research + outline approval — the full CREATE.md process is mandatory
  10. Refine — iterate on drafts until approved, then save
  11. Publish/hum publish posts approved drafts to LinkedIn or X via API scripts
  12. Engage/hum engage handles follow suggestions, outbound engagement plays, and replies/comments

Configuration

The skill stores all data in a configurable directory. Set the HUM_DATA_DIR environment variable:

export HUM_DATA_DIR=~/Documents/hum

If not set, defaults to ~/Documents/hum. When running inside OpenClaw, it also reads from openclaw.jsonskills.entries.hum.config.hum_data_dir (or the legacy data_dir key for existing installs).

Data Directory Structure

All user-owned data lives in \x3Cdata_dir>:

Path Purpose
\x3Cdata_dir>/VOICE.md Voice, tone, and writing guidelines
\x3Cdata_dir>/AUDIENCE.md Target audience definition
\x3Cdata_dir>/CHANNELS.md Publishing platforms and rules
\x3Cdata_dir>/CONTENT.md Content pillars with keywords for feed classification
\x3Cdata_dir>/ideas/ideas.json Brainstormed content ideas and brainstorm config
\x3Cdata_dir>/content/drafts/ Unpublished drafts (outline → draft → ready)
\x3Cdata_dir>/content/published/ Drafts moved here after successful publish
\x3Cdata_dir>/content/images/ Generated images, cover art, diagrams
\x3Cdata_dir>/content-samples/ Real posts from the user's social media — primary voice reference
\x3Cdata_dir>/knowledge/ Reference material — auto-crawled from knowledge/index.md sources (RSS, sitemaps, YouTube transcripts, podcasts) plus user-curated notes
\x3Cdata_dir>/knowledge/index.md Knowledge source definitions (Key, Handler, Feed URL tables)
\x3Cdata_dir>/feed/feeds.json Aggregated feed — single source of truth for brainstorming
\x3Cdata_dir>/feed/raw/ Per-source JSON crawl outputs
\x3Cdata_dir>/feed/sources.json Social/ephemeral feed sources (X accounts, YouTube creators, websites) — managed via /hum sources
\x3Cdata_dir>/feed/assets/ Preference learning (rankings, feedback history, dedup tracker)

Writing Guidelines

  • Always read content-samples/ before drafting — these are real examples of the user's writing and the most authoritative reference for their voice.
  • Always read knowledge/ before drafting — any reference material the user has placed there should inform the content.
  • Always read VOICE.md for tone and style rules.

Post Types

Each post type has a defined structure. The /hum create command requires a platform and post type.

X

Post Type Format
Tweet Single tweet, under 280 chars, hook-driven. Optional media.
Thread Multiple numbered tweets, each under 280 chars. Hook in tweet 1.
Article Long-form post, up to 25,000 chars. Premium subscribers only. Rich text formatting, cover image, published directly to the X feed. Functions like a mini blog post. Requires cover image. Draft in full prose with H2 section headers.

LinkedIn

Post Type Format
Post Under 200 words. Short paragraphs. Opens with observation, ends with reflection/question.
Article Long-form, 600–1000 words. Section headers. Requires cover image and intro feed post.

Actions & Connectors

Actions live in scripts/act/, connectors in scripts/act/connectors/ (one per channel):

  • Connectors (act/connectors/):
    • x.py — X API v2 (requires credentials/x.json or X_USER_ACCESS_TOKEN env var)
    • linkedin.py — LinkedIn REST API (requires credentials/linkedin.json or env vars)
    • All connectors follow a uniform interface — see act/connectors/__init__.py for the load(platform) dispatcher
  • Actions (act/):
    • publish.py — draft parsing, preview, and publishing via connectors
    • engage.py — follows, comments, replies
    • analyze.py — account insights and post analytics
  • Browser-based actions (when API is unavailable) are handled by the agent via the browser tool.
  • Never put secrets in the skill files. Read them from credentials/x.json, credentials/linkedin.json, or env vars.

Image Generation

Images for posts are generated using the bundled image-gen library at scripts/lib/image-gen/. It provides a unified interface to multiple AI image providers:

Provider Model Env Var
gemini (default) gemini-2.5-flash-image GEMINI_API_KEY
openai gpt-image-1 OPENAI_API_KEY
grok grok-2-image XAI_API_KEY
minimax image-01 MINIMAX_API_KEY

API keys are set as environment variables or in openclaw.jsonenv.vars. The active provider is configured in openclaw.jsonskills.entries.hum.config.image_model (default: gemini) or via the HUM_IMAGE_MODEL env var.

When drafting, add image_prompt to the post. Calling validate(post) auto-generates the image and sets media_path. If VOICE.md has a ## Visual Style section, it is automatically appended to the image prompt.

Daily Loop

/hum loop runs the full morning workflow. See LOOP.md for the step-by-step instructions. Individual steps call scripts from scripts/ where needed.

Usage Guidance
This package is internally consistent with a social-media content writer, but it will access sensitive data and credentials. Before installing or running it: 1) Inspect or run in an isolated environment (VM/container). 2) Review credentials storage: the skill expects X and LinkedIn tokens or JSON credential files under ~/.hum/credentials/ (and may ask you to paste X session cookies CT0/AUTH_TOKEN). Prefer API tokens over copied session cookies; store files with restrictive permissions (chmod 600). 3) Review content-samples/ and VOICE.md that the skill will read — it purposely uses your real posts to imitate your voice. 4) Confirm how Telegram digest sending is configured and what token (if any) it will use. 5) Audit third-party dependencies in requirements.txt (yt-dlp and web scraping libs) before pip installing. If you are not comfortable providing social credentials or sharing local writing samples, skip installation or run the skill on a copy of data and a test account. If you want, provide specific files or commands you plan to run and I can highlight exact lines that read or transmit secrets.
Capability Analysis
Type: OpenClaw Skill Name: hum-writer Version: 0.2.1 The skill is a social media automation tool that handles sensitive session tokens (X and LinkedIn) and includes a local dashboard server (scripts/dashboard/serve.py) containing multiple path traversal vulnerabilities. Specifically, the API endpoints for reading content, loop logs, and knowledge articles (e.g., in _read_content and _read_loop_file) do not sanitize input filenames, allowing an attacker to read arbitrary files on the host system by providing paths like '../../etc/passwd'. Additionally, the skill relies on vendored Node.js scripts (scripts/lib/vendor/bird-search/) to interact with X's internal GraphQL API using the user's session cookies (AUTH_TOKEN and CT0), which is a high-risk capability.
Capability Tags
cryptorequires-oauth-tokenposts-externally
Capability Assessment
Purpose & Capability
Name/description (content writer for X/LinkedIn) matches the included code: connectors for X and LinkedIn, feed crawlers (X, YouTube, HN, RSS), publishing, brainstorming, and engagement orchestration. The code reads/writes a local data directory for voice, samples, drafts, and feed data — all expected for this purpose.
Instruction Scope
Runtime docs and SKILL.md instruct the agent and operator to read the user's VOICE.md, content-samples/, knowledge/, and feed files — this is necessary for voice-matching but means the agent will process real user posts and local notes. It also instructs extracting X session cookies (AUTH_TOKEN and CT0) from browser devtools for some feed operations; that is sensitive but consistent with the stated approach of using direct APIs/Bird rather than a formal API key. The skill returns browser-scrape instructions (needs_browser) for profiles — again coherent but broad in scope.
Install Mechanism
No automated install spec in the registry; the skill is distributed as code files and the SKILL.md asks the operator to run setup.sh and pip install dependencies. Dependencies are standard Python packages (feedparser, trafilatura, yt-dlp, requests, etc.). No remote arbitrary binary downloads or obscure install URLs were found in the manifest.
Credentials
The skill expects credentials for X and LinkedIn (either env vars or JSON files under a credentials directory) and may request X session cookies (AUTH_TOKEN/CT0) for some feed fetching. Those credentials are proportionate to posting and fetching a user's feeds but are sensitive. The gemini-extension.json exposes settings for CREDENTIALS_DIR, X and LinkedIn tokens; SKILL.md and COMMANDS.md reference HUM_DATA_DIR and credential file locations. No unrelated cloud credentials or excessive environment access were requested.
Persistence & Privilege
The skill does not request forced always:true inclusion and does not modify other skills. It writes and reads files in a configurable data directory (HUM_DATA_DIR) and a credentials directory — expected for a local content-authoring tool. The skill may store tokens/credentials in ~/.hum/credentials/ which is normal but requires careful file-permission handling.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install hum-writer
  3. After installation, invoke the skill by name or use /hum-writer
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v0.2.1
hum-writer 0.2.1 introduces first-class virtual environment and setup automation. - Added a setup.sh script for creating the Python virtual environment and installing dependencies. - Updated documentation (SKILL.md) to require running setup.sh after initialization, clarifying that all scripts must use the venv. - requirements.txt and script shebangs adjusted to ensure compatibility with the new setup process. - Various script and library updates for improved reliability and consistency.
v0.2.0
hum-writer 0.2.0 introduces major feed, knowledge, and content pipeline upgrades. - Added direct API-based knowledge crawling: fetches from RSS, sitemaps, YouTube transcripts, podcasts, defined in `knowledge/index.md` - Unified sources management: separates social/ephemeral feeds (`sources.json`) from persistent knowledge feeds (`knowledge/index.md`) - Expanded feed refresh: X feed uses Bird with `filter:follows`, richer multi-source support, no browser steps required - Brainstorm and draft flow now uses stricter research, style selection justification (via STYLES.md), and improved plain text idea listing - Draft, published, and image asset directories are restructured for clarity (`content/drafts/`, `content/published/`, `content/images/`) - X "Article" post type supported (long-form up to 25K chars with sections/cover) - New dashboard and handler modules added; significant refactor and script expansion throughout feed, connector, and publish flows
v0.1.0
Initial public release of the hum-writer skill. - Automates the content workflow for X and LinkedIn: feed crawling, brainstorming, drafting, publishing, and engagement. - Modular commands to initialize, manage sources, brainstorm, track ideas, draft posts (strict research → outline → approval → draft flow), and publish. - Stores all user data in a configurable local directory for privacy and control. - Includes robust content voice consistency via required reading of user VOICE.md and past post samples. - Integrated image generation with support for multiple AI providers and automatic prompt handling. - Supports API-based post publishing and a configurable daily loop workflow.
Metadata
Slug hum-writer
Version 0.2.1
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 3
Frequently Asked Questions

What is hum?

AI content writer that researches, outlines, drafts, publishes, and manages engagement for LinkedIn and X using your voice and style guidelines. It is an AI Agent Skill for Claude Code / OpenClaw, with 118 downloads so far.

How do I install hum?

Run "/install hum-writer" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is hum free?

Yes, hum is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does hum support?

hum is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created hum?

It is built and maintained by jyek (@jyek); the current version is v0.2.1.

💬 Comments