← Browse

@dvcrn/poststash

B

Schedule posts and threads to Threads and X via PostStash

skillclaude

Install

agr install @dvcrn/poststash --target claude

Writes 4 files into .claude/skills/, pinned to git-acea362e.

  • .claude/skills/poststash/README.md
  • .claude/skills/poststash/SKILL.md
  • .claude/skills/poststash/package.json
  • .claude/skills/poststash/tsconfig.json

Document


name: poststash description: "Schedule posts and threads to Threads and X via PostStash" homepage: https://poststash.com/docs/api

PostStash Skill

Schedule posts and threads to Threads and X directly from your OpenClaw agent.

Setup

  1. Get an API key from the PostStash dashboard
  2. Set the environment variable:
    POSTSTASH_API_KEY=ps_live_...
    
  3. Install: clawhub install poststash

API key format: ps_live_ followed by 64 hex characters.


Tools

poststash.schedule_to_threads

Schedule a single post to Threads.

Input:

  • text (string, required) — Post content (max 500 characters)
  • scheduled_at (string, optional) — ISO 8601 timestamp; defaults to now
  • status (string, optional) — "Ready" (publishes at scheduled_at) or "Draft" (saves without scheduling); defaults to "Ready"

Output:

  • post_id — UUID of the scheduled post
  • content — Post text
  • schedule — Scheduled timestamp (ISO 8601)
  • status — Post status (Ready, Draft, Published, Failed)
  • platforms — Array of target platforms

poststash.schedule_to_x

Schedule a single post to X (Twitter).

Input: Same as schedule_to_threads.

Output: Same as schedule_to_threads.


poststash.schedule_thread

Schedule a thread (2–20 posts) to Threads or X.

Input:

  • platform (string, required) — "threads" or "x"
  • posts (array, required) — Array of { text: string } objects (2–20 items)
  • scheduled_at (string, optional) — ISO 8601 timestamp; defaults to now
  • status (string, optional) — "Ready" or "Draft"; defaults to "Ready"

Output:

  • thread_id — UUID grouping all thread posts
  • posts — Array of scheduled post objects with id, content, thread_position

poststash.get_post

Fetch a scheduled or published post along with its analytics.

Input:

  • post_id (string, required) — Post UUID from a schedule response

Output:

  • post — Full post object (id, content, platforms, schedule, status, published, sent_at)
  • analytics — Array of per-platform analytics with metrics (views, likes, replies, reposts, quotes)

poststash.list_posts

List posts for your account (scoped to the context of your API key).

Input:

  • status (string, optional) — Filter by "Draft", "Ready", "Published", or "Failed"
  • published (boolean, optional) — true or false
  • limit (number, optional) — Results per page (default: 20, max: 100)
  • offset (number, optional) — Pagination offset (default: 0)

Output:

  • posts — Array of post objects
  • total — Total number of matching posts
  • limit / offset — Pagination info

Example Agent Usage

const result = await agent.invoke({
  tools: ["poststash.schedule_to_threads"],
  input: "Schedule a post about AI to Threads tomorrow at 2pm",
});

const thread = await agent.invoke({
  tools: ["poststash.schedule_thread"],
  input: "Create a 3-part thread on building in public on X, schedule for Friday 10am",
});

Repository README

Describes dvcrn/openclaw-skills-marketplace as a whole, which may contain artifacts other than this one. Where this artifact had no useful description of its own, its summary was taken from here.

OpenClaw Skills Marketplace For Claude

This repository is an automatic conversion of openclaw/skills into the Claude Skills marketplace format so the skills can be installed and used directly in Claude.

It takes the OpenClaw skill corpus and rewrites it into a Claude-compatible marketplace with:

  • a root marketplace manifest at .claude-plugin/marketplace.json
  • one Claude plugin per OpenClaw skill under plugins/
  • a generation report at reports/generate-marketplace.json

Use In Claude

Add this marketplace in Claude with:

/plugin marketplace add dvcrn/openclaw-skills-marketplace

Then install any generated plugin from the marketplace:

/plugin install <plugin-name>@openclaw-skills

Example:

/plugin install 0x-professor--agentic-mcp-server-builder@openclaw-skills

What This Repo Does

The generator reads canonical OpenClaw source skills from:

openclaw-skills/skills/<owner>/<slug>/

Each source skill is expected to contain:

  • _meta.json
  • SKILL.md or lowercase skill.md

The conversion process:

  • maps each OpenClaw skill to one Claude plugin
  • normalizes lowercase skill.md to SKILL.md
  • extracts Claude plugin root assets like agents/, hooks/, .mcp.json, .lsp.json, and settings.json
  • preserves nested skills/ trees when a source package already behaves like a multi-skill plugin
  • skips malformed inputs and records them in reports/generate-marketplace.json

Regenerate The Entire Marketplace

To rebuild the full marketplace from the openclaw-skills submodule:

mise run generate

That regenerates:

  • .claude-plugin/marketplace.json
  • plugins/<plugin-id>/...
  • reports/generate-marketplace.json

The generator replaces previous generated output under .claude-plugin/, plugins/, and reports/ on each run.

If you want the explicit underlying task name, this still works too:

mise run generate_marketplace

For small development runs:

python3 scripts/generate_marketplace.py --source openclaw-skills/skills --output . --limit 10

Validate And Test

Run the generator tests:

mise run test

Validate the generated marketplace:

claude plugin validate .

Notes

  • Plugin ids are generated as <owner>--<slug> after sanitization.
  • Nested source skills/ directories are preserved as plugin content rather than treated as separate top-level source skills.
  • The upstream OpenClaw source is included as the openclaw-skills submodule.

Trustgrade B

  • passBody integrity

    Whether the stored document is plausibly the kind of file the artifact declares, rather than something fetched by mistake.

  • passType matchnot applicable to this artifact type

    Whether the artifact is really the kind of thing its metadata claims it is.

  • passFreshness

    How long since the source repository was last pushed to.

  • passPrompt injection

    Scans the artifact's own text for instructions aimed at your agent rather than at you.

  • warnLicenseno SPDX license detected

    Whether the source repository declares an SPDX license permissive enough to redistribute.

How the grade is calculated

Each check contributes 0 points when it passes, 1 when it warns, and 2 when it fails. The total maps to a letter:

  • Aevery check passed
  • Bone warning
  • Ctwo warnings
  • Dprompt injection or body integrity failed, or three warnings
  • Fone of those failed, and something else is wrong

These are automated hygiene checks, not a security audit, and not a dependency or vulnerability scan. A grade of A means nothing was flagged — not that the artifact is safe.

Versions

  • git-acea362e56f82026-07-31