Source profileQuality 94/100

typefully/agent-skills/skills/typefully/SKILL.md

typefully

Create, schedule, and manage social media posts via Typefully. ALWAYS use this skill when asked to draft, schedule, post, or check tweets, posts, threads, or social media content for Twitter/X, LinkedIn, Threads, Bluesky, Mastodon, or Substack Notes, or when the user drops a Typefully draft URL such as https://typefully.com/?a=<social_set_id>&d=<draft_id>.

Source repository stars
56
Declared platforms
0
Static risk flags
2
Last source update
2026-08-05
Source checked
2026-08-25

Decision brief

What it does: where it fits

Create, schedule, and publish social media content across X, LinkedIn, Threads, Bluesky, Mastodon, and Substack Notes using Typefully. Run everything through ./scripts/typefully.js (Node.js 18+, no dependencies). All commands output JSON.

Best for

  • ALWAYS use this skill when asked to draft, schedule, post, or check tweets, posts, threads, or social media content for Twitter/X, LinkedIn, Threads, Bluesky, Mastodon, or Substack Notes, or when the user drops a Typefu…

Not for

  • Tasks that require unconfirmed production actions or broad system permissions.
  • Environments where the pinned source and install steps cannot be inspected.

Compatibility matrix

Platform support, with evidence labels

PlatformStatusEvidenceWhat to check
CodexNot declaredNo explicit evidencePortability before use
Claude CodeNot declaredNo explicit evidencePortability before use
CursorNot declaredNo explicit evidencePortability before use
Gemini CLINot declaredNo explicit evidencePortability before use
Open the compatibility checker

Installation

Inspect first. Install second.

The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

Source-detected install commandSource
npx skills add https://github.com/typefully/agent-skills --skill "skills/typefully"
Safe inspection promptEditorial

Inspect the Agent Skill "typefully" from https://github.com/typefully/agent-skills/blob/051a266090f8f655801b835bd359abc073e7dec3/skills/typefully/SKILL.md at commit 051a266090f8f655801b835bd359abc073e7dec3. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

Workflow

What the source asks the agent to do

  1. 01

    Dropped Typefully draft URLs

    When the user gives you a Typefully draft URL, use this skill instead of browsing or scraping the Typefully web UI.

    https://typefully.com/?a=&d= maps to:https://typefully.com/?d= can use the configured default social set:When the user gives you a Typefully draft URL, use this skill instead of browsing or scraping the Typefully web UI.
  2. 02

    Reference guides

    Load these only when the task needs them:

    Load these only when the task needs them:
  3. 03

    1. Choose a social set

    A "social set" is what users call an "account" — the connected platforms for one identity. Most commands work without a socialsetid once a default is configured. Pass it positionally (drafts:list 123) or as --social-set-id 123.

    Run config:show. If defaultsocialset is set, the CLI uses it automatically — proceed.Otherwise run social-sets:list. If only one exists, use it.If multiple exist with no default, ask the user, then offer to save it: config:set-default.
  4. 04

    2. Create drafts

    For the same content on several platforms, pass multiple platforms to a single draft:

    If --platform is omitted, the first connected platform is auto-selected. Named platforms: x, linkedin, threads, bluesky, mastodon, substack (Substack Notes), xarticle.Split a thread with --- on its own line. Exception: substack takes a single post per draft — no threads. For a thread plus a Substack Note, use the one-draft pattern below to give substack its own single-post content.Substack Notes media: images and GIFs only (up to 6) — video is rejected.
  5. 05

    One draft per post — always

    For the same content on several platforms, pass multiple platforms to a single draft:

    For the same content on several platforms, pass multiple platforms to a single draft:When content should differ per platform (e.g. an X thread plus a tailored LinkedIn post), still use one draft — create with the first platform, then drafts:update to add another with different content:Never create multiple drafts unless the user explicitly wants separate drafts per platform.

Permission review

Static risk signals and limitations

Reads files

low · line 66

The documentation asks the agent to read local files, directories, or repositories.

Read content from a file with `--file ./post.txt` instead of `--text`.

Network access

medium · line 105

The documentation includes network, browsing, or remote request actions.

./scripts/typefully.js drafts:create --platform linkedin,threads --text "Read this https://example.com" --hide-link-preview

Reads files

low · line 185

The documentation asks the agent to read local files, directories, or repositories.

| `--file <path>` | Read content from a file instead of `--text` | create, update |

Evidence record

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score94/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars56SourceRepository attention, not individual Skill quality
Compatibility0 platformsSourceDeclared in the catalog source record
Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

Pinned source

Provenance and original SKILL.md

Repository
typefully/agent-skills
Skill path
skills/typefully/SKILL.md
Commit
051a266090f8f655801b835bd359abc073e7dec3
License
MIT
Collected
2026-08-25
Default branch
main
View the original SKILL.md

Typefully Skill

Create, schedule, and publish social media content across X, LinkedIn, Threads, Bluesky, Mastodon, and Substack Notes using Typefully. Run everything through ./scripts/typefully.js (Node.js 18+, no dependencies). All commands output JSON.

Script paths below are relative to this skill's directory. Resolve them based on where the skill is installed.

Freshness check: If more than 30 days have passed since the last-updated date above, tell the user the skill may be outdated and point them to the update methods in references/setup.md.

Authentication failures: If the CLI returns "API key not found", "Authentication failed", "HTTP 401", or any invalid/expired-key message, tell the user to run ./scripts/typefully.js setup or update TYPEFULLY_API_KEY, then stop. Do not hunt for credentials or fall back to the Typefully web UI, browser scraping, or a localhost dev server. See references/setup.md.

Dropped Typefully draft URLs

When the user gives you a Typefully draft URL, use this skill instead of browsing or scraping the Typefully web UI.

  • https://typefully.com/?a=<social_set_id>&d=<draft_id> maps to:

    ./scripts/typefully.js drafts:get <social_set_id> <draft_id>
    
  • https://typefully.com/?d=<draft_id> can use the configured default social set:

    ./scripts/typefully.js drafts:get <draft_id> --use-default
    

For draft comments, replies, resolving, or edits on a dropped draft URL, first fetch the draft with the mapping above, then load references/comments.md when comment workflow details are needed.

Reference guides

Load these only when the task needs them:

GuideUse when you need to...
references/setup.mdConfigure the API key, fix an "API key not found" error, set up CI, or check whether the skill is up to date
references/comments.mdAdd, reply to, resolve, or delete comments on a draft, or edit a draft that already has comments
references/platforms/x.mdPull X (formerly Twitter) analytics, quote or reply to a post, post to a community, or add disclosure labels
references/platforms/linkedin.mdMention a company or person on LinkedIn
references/platforms/x-articles.mdWrite or edit a long-form X Article (standalone platform)

1. Choose a social set

A "social set" is what users call an "account" — the connected platforms for one identity. Most commands work without a social_set_id once a default is configured. Pass it positionally (drafts:list 123) or as --social-set-id 123.

To decide which social set to use:

  1. Run config:show. If default_social_set is set, the CLI uses it automatically — proceed.
  2. Otherwise run social-sets:list. If only one exists, use it.
  3. If multiple exist with no default, ask the user, then offer to save it: config:set-default.
  4. Reuse a social set already resolved earlier in the session without asking again.

2. Create drafts

./scripts/typefully.js drafts:create --text "Your post"
  • If --platform is omitted, the first connected platform is auto-selected. Named platforms: x, linkedin, threads, bluesky, mastodon, substack (Substack Notes), x_article.
  • Split a thread with --- on its own line. Exception: substack takes a single post per draft — no threads. For a thread plus a Substack Note, use the one-draft pattern below to give substack its own single-post content.
  • Substack Notes media: images and GIFs only (up to 6) — video is rejected.
  • Attach media with --media, tags with --tags, internal notes with --scratchpad, an internal name with --title.
  • Read content from a file with --file ./post.txt instead of --text.

One draft per post — always

For the same content on several platforms, pass multiple platforms to a single draft:

./scripts/typefully.js drafts:create --platform x,linkedin --text "Big announcement!"
./scripts/typefully.js drafts:create --all --text "Posting everywhere!"   # all connected platforms

When content should differ per platform (e.g. an X thread plus a tailored LinkedIn post), still use one draft — create with the first platform, then drafts:update to add another with different content:

./scripts/typefully.js drafts:create --platform linkedin --text "Excited to share..."   # -> id draft-123
./scripts/typefully.js drafts:update draft-123 --platform x --text "🧵 Thread time!" --use-default

Never create multiple drafts unless the user explicitly wants separate drafts per platform.

--all excludes x_article. X Articles are standalone and cannot be combined with any other platform — see references/platforms/x-articles.md.

--all includes substack when connected. Since Substack Notes take a single post, --all with thread content errors — exclude substack via --platform, or give it its own single-post content with drafts:update.

Scratchpad notes

When the user asks to add notes, ideas, or context to a draft, use --scratchpaddo NOT write to local files. Scratchpad notes attach to the draft in Typefully, are visible in the UI, stay private, and are never published.

./scripts/typefully.js drafts:create --text "My post" --scratchpad "Ideas: 1) Add stats 2) Include quote"

Link previews

When a post contains a URL, Typefully automatically fetches Open Graph metadata for the last URL in the text and publishes a rich link-preview card on LinkedIn, Threads, Bluesky, and Substack Notes. No flag is needed — it just works. X and Mastodon unfurl links themselves after publishing. On Substack Notes the card is skipped when the note has images (images and the link card are mutually exclusive there).

To publish the URL as plain text with no card, pass --hide-link-preview. Suppression is supported on LinkedIn, Threads, and Substack Notes only (matching the Typefully editor); the flag errors if none of these platforms is targeted, and is ignored for other platforms in a mixed-platform draft:

./scripts/typefully.js drafts:create --platform linkedin,threads --text "Read this https://example.com" --hide-link-preview
./scripts/typefully.js drafts:update draft-123 --hide-link-preview --use-default   # hide the card on an existing draft

3. Schedule & publish

./scripts/typefully.js drafts:create --text "..." --schedule next-free-slot   # or an ISO time, or "now"
./scripts/typefully.js drafts:schedule <draft_id> --time next-free-slot --use-default
./scripts/typefully.js drafts:publish <draft_id> --use-default
./scripts/typefully.js drafts:create --text "..." --plan next-free-slot      # planned: dated but inert
./scripts/typefully.js drafts:plan <draft_id> --time next-free-slot --use-default
  • next-free-slot lets Typefully pick the optimal time.
  • Publishing is irreversible and public — unless the user says "publish now" / "post immediately", confirm first. Creating a draft is safe.
  • Planned drafts sit on the queue/calendar at their date but never auto-publish. Confirm one into a real schedule with drafts:schedule (or publish it with drafts:publish). A planned draft whose date has passed is not overdue and not a failure — it simply hasn't been confirmed; replan or confirm it. --plan/--schedule are mutually exclusive; drafts:update --plan null returns the draft to plain draft status.
  • Single-arg commands require --use-default when a default social set is configured (see the safety note below).

Common actions

User says...Action
"Draft a tweet about X"drafts:create --text "..."
"Post this to LinkedIn"drafts:create --platform linkedin --text "..."
"Post a Substack Note"drafts:create --platform substack --text "..." (single post, no threads)
"Post to X and LinkedIn" (same content)drafts:create --platform x,linkedin --text "..."
"X thread + tailored LinkedIn post"One draft, then drafts:update to add the platform
"What's scheduled?" / "Recent posts?"drafts:list --status scheduled / --status published
"Schedule this for tomorrow"drafts:create --text "..." --schedule "<ISO time>"
"Post this now"drafts:create --text "..." --schedule now or drafts:publish <id> --use-default
"Pencil this in for Tuesday" (no commitment to publish)drafts:create --text "..." --plan "<ISO time>", confirm later with drafts:schedule
"Check available tags"tags:list
"Check my publishing quota"social-sets:getpublishing_quota
"Draft an X Article"See references/platforms/x-articles.md
"Mention a company on LinkedIn"See references/platforms/linkedin.md
"Show my X analytics / followers"See references/platforms/x.md
"Comment on / resolve a comment"See references/comments.md

Commands

All commands output JSON. Every [social_set_id] is optional and falls back to the configured default.

Safety note: drafts:get, drafts:update, drafts:delete, drafts:schedule, drafts:plan, and drafts:publish require --use-default when you pass a single argument (the draft_id) while a default social set is configured.

Platform- and workflow-specific commands live in their guides: platforms/x.md (analytics, quotes, replies, communities, disclosures), platforms/linkedin.md (mentions), platforms/x-articles.md, comments.md, and setup.md.

User & social sets

CommandDescription
me:getGet authenticated user info
social-sets:listList all social sets you can access
social-sets:get <id>Social set details including connected platforms and publishing_quota

social-sets:get returns a publishing_quota object when available: used, remaining (or "unlimited"), and resets_at. Check it before publishing/scheduling when the user asks about capacity or when a publish/schedule fails with quota copy.

Drafts

Every draft command accepts an optional leading [social_set_id] that falls back to the configured default. The four base commands:

CommandDescription
drafts:list [social_set_id]List drafts. Filter with --status scheduled|published|..., order with --sort
drafts:get [social_set_id] <draft_id>Get a draft with full content. Add --exclude-comment-markers to render posts[*].text without comment anchors (display only)
drafts:create [social_set_id] --text "<post text>"Create a draft (auto-selects platform if --platform omitted)
drafts:update [social_set_id] <draft_id> --text "<post text>"Replace a draft's content

Add any of these flags to a drafts:create or drafts:update command. The Applies to column shows where each is valid:

FlagEffectApplies to
--platform x,linkedinTarget specific platform(s), comma-separatedcreate, update
--allAll connected platforms (excludes x_article)create
--file <path>Read content from a file instead of --textcreate, update
--append --text "<text>"Append to an existing threadupdate
--media <media_ids>Attach media (comma-separated)create, update
--tags "tag1,tag2"Set tags (content stays unchanged if this is the only change on update)create, update
--title "<internal title>"Internal draft title (not posted)create, update
--scratchpad "<notes>"Attach internal notes (see Scratchpad notes)create, update
--shareGenerate a public share URLcreate, update
--schedule <iso|next-free-slot|now>Schedule or reschedule the draftcreate, update
--plan <iso|next-free-slot>Plan the draft: dated but inert until confirmed (mutually exclusive with --schedule; null on update returns it to plain draft)create, update
--hide-link-previewSuppress the link-preview card (LinkedIn/Threads/Substack only — see Link previews)create, update
--exclude-comment-markersRender response without anchors (display only; validation still applies)update
--force-overwrite-commentsDestructive last resort — see comments.mdupdate

For example, combine the base command with flags like this:

./scripts/typefully.js drafts:create --text "Launch day!" --platform x,linkedin --tags product --schedule next-free-slot
./scripts/typefully.js drafts:update 456 --text "Revised copy" --media abc-123 --use-default

X-only draft flags (--reply-to, --quote-post-url, --community, --paid-partnership, --made-with-ai): see platforms/x.md. X Article flags (--content-markdown, --cover-media-id): see platforms/x-articles.md.

Scheduling & publishing

Single-arg forms require --use-default when a default social set is configured.

CommandDescription
drafts:schedule <social_set_id> <draft_id> --time <iso|next-free-slot>Schedule to a time or the next available slot (also confirms a planned draft)
drafts:plan <social_set_id> <draft_id> --time <iso|next-free-slot>Plan to a date without arming auto-publish; confirm later with drafts:schedule
drafts:publish <social_set_id> <draft_id>Publish immediately
drafts:delete <social_set_id> <draft_id>Delete a draft

Queue

The queue is a social-set-specific timeline: free queue slots (from the social set's queue schedule) plus scheduled and planned drafts/posts for that same social set. Use queue:get when the user asks what is scheduled or free for an account in a date range.

CommandDescription
queue:get [social_set_id] --start-date <YYYY-MM-DD> --end-date <YYYY-MM-DD>Queue timeline: free slots + scheduled/planned drafts and posts in a date range (check each draft's status — planned drafts never auto-publish)
queue:schedule:get [social_set_id]Get queue schedule rules
queue:schedule:put [social_set_id] --rules '[{"h":9,"m":30,"days":["mon","wed","fri"]}]'Replace queue schedule rules (full replacement)

Snake-case date aliases (--start_date, --end_date) are accepted.

Tags

Tags are scoped per social set — a tag in one social set doesn't appear in another. Check existing tags before creating.

CommandDescription
tags:list [social_set_id]List all tags
tags:create [social_set_id] --name "Tag Name"Create a new tag

Media

CommandDescription
media:upload [social_set_id] <file_path>Upload media, wait for processing, return ready media_id
media:upload ... --no-waitUpload and return immediately (poll with media:status)
media:upload ... --timeout <seconds>Custom processing timeout (default 60)
media:status [social_set_id] <media_id>Check upload status

Examples

# Create a tweet (default social set)
./scripts/typefully.js drafts:create --text "Hello, world!"

# Explicit social_set_id
./scripts/typefully.js drafts:create 123 --text "Hello, world!"

# Cross-platform, same content
./scripts/typefully.js drafts:create --platform x,linkedin,threads --text "Big announcement!"
./scripts/typefully.js drafts:create --all --text "Posting everywhere!"

# Create and schedule for the next slot
./scripts/typefully.js drafts:create --text "Scheduled post" --schedule next-free-slot

# Create with tags
./scripts/typefully.js drafts:create --text "Marketing post" --tags marketing,product

# List scheduled posts, newest scheduled first
./scripts/typefully.js drafts:list --status scheduled --sort scheduled_date

# Queue view for a date range
./scripts/typefully.js queue:get --start-date 2026-02-01 --end-date 2026-02-29

# Replace queue schedule rules
./scripts/typefully.js queue:schedule:put --rules '[{"h":9,"m":30,"days":["mon","wed","fri"]}]'

# Draft with scratchpad notes
./scripts/typefully.js drafts:create --text "Launching next week!" --scratchpad "Coordinate with marketing before publishing."

# Upload media, then attach it
./scripts/typefully.js media:upload ./image.jpg          # -> {"media_id": "abc-123", "status": "ready"}
./scripts/typefully.js drafts:create --text "Check out this image!" --media abc-123

# Add media to an existing draft
./scripts/typefully.js drafts:update 456 --text "Updated post with image" --media xyz --use-default

Reference

Character limits

X 280 · LinkedIn 3000 · Threads 500 · Bluesky 300 · Mastodon 500 · Substack Notes 10000.

Draft URLs

Typefully draft URLs encode the social set and draft IDs: https://typefully.com/?a=<social_set_id>&d=<draft_id> (e.g. a=12345 → social_set_id, d=67890 → draft_id). See Dropped Typefully draft URLs for the command mapping.

Automation guidelines

To keep accounts in good standing, especially on X:

  • No duplicate content across accounts.
  • No unsolicited automated replies — only reply when the user explicitly requests it.
  • No trending manipulation, no fake engagement (likes/reposts/follows).
  • Respect rate limits; drafts stay private until published or explicitly shared.

When in doubt, create drafts for user review rather than publishing directly.

Frequently asked questions

What to verify before installation and use

What does the typefully source document cover?

Create, schedule, and publish social media content across X, LinkedIn, Threads, Bluesky, Mastodon, and Substack Notes using Typefully. Run everything through ./scripts/typefully.js (Node.js 18+, no dependencies). All commands output JSON.

How do I install typefully?

The source record exposes this install command: npx skills add https://github.com/typefully/agent-skills --skill "skills/typefully". Inspect the command and pinned source before running it.

Which permission-related actions were detected?

Static rules flagged read-files, network in the source; the page lists the matching lines and excerpts.

Alternatives

Compare before choosing

Computed 952,634

aaron-he-zhu/aaron-marketing-skills

social-calendar-builder

Use when the user asks to "build our social posting calendar", "set weekly slots and queue depth per channel", or "plan the evergreen recycle rotation"; produces the always-on brand calendar — pillar allocation with hero/hub/help balance and give:ask targets (all labeled Estimated starting heuristics to calibrate against own analytics, never scored rules), per-channel recurring slots with queue depth, a batching workflow, an evergreen recycle cycle with freshness re-checks, deliberate open slots

Computed 95733

rampstackco/claude-skills

media-asset-management

Plan and run a media pipeline for images, video, and downloadable assets. Use this skill when designing image storage and delivery, choosing formats (WebP, AVIF), setting up responsive images, picking a video host, organizing a brand asset library, or auditing a slow image pipeline. Triggers on image pipeline, asset library, DAM, image optimization, WebP, AVIF, responsive images, video hosting, image CDN, asset workflow, media management. Also triggers when images are slow, broken, or scattered

Computed 9439,098

wshobson/agents

brand-landingpage

Brand-first landing page designer — runs a brand-identity interview (colors, typography, shape language), then generates and iterates on a polished landing page via Stitch with deployment-ready HTML. Use when the user asks to create, design, or build a landing page, homepage, or marketing page and has no established visual direction. Skip when they have a design mockup, need a dashboard or app UI, are working at component level, building a multi-page app, or restyling with known design tokens —

Computed 9338,209

github/awesome-copilot

flowstudio-power-automate-build

Build, scaffold, and deploy Power Automate cloud flows using the FlowStudio MCP server. Your agent constructs flow definitions, wires connections, deploys, and tests — all via MCP without opening the portal. Load this skill when asked to: create a flow, build a new flow, deploy a flow definition, scaffold a Power Automate workflow, construct a flow JSON, update an existing flow's actions, patch a flow definition, add actions to a flow, wire up connections, or generate a workflow definition from