Source profileQuality 90/100Review permissions

MoizIbnYousaf/marketing-cli/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, or Mastodon.

Source repository stars
27
Declared platforms
0
Static risk flags
4
Last source update
2026-07-28
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Create, schedule, and publish social media content across multiple platforms using Typefully.

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, or Mastodon.

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/MoizIbnYousaf/marketing-cli --skill "skills/typefully"
Safe inspection promptEditorial

Inspect the Agent Skill "typefully" from https://github.com/MoizIbnYousaf/marketing-cli/blob/f12fbcbe4929584697b309b9096c9427b0cfce8e/skills/typefully/SKILL.md at commit f12fbcbe4929584697b309b9096c9427b0cfce8e. 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

    Setup

    Before using this skill, ensure:

    API Key: Run the setup command to configure your API key securelyGet your key at https://typefully.com/?settings=apiRun: /scripts/typefully.js setup (where is the directory containing this SKILL.md)
  2. 02

    Workflow

    Follow this workflow when creating posts:

    Check if a default social set is configured:If no default, list social sets to find available options:Create drafts (socialsetid is optional if default is configured):
  3. 03

    Setup & Configuration

    Review the “Setup & Configuration” section in the pinned source before continuing.

    Review and apply the “Setup & Configuration” source section.
  4. 04

    Keeping This Skill Updated

    This skill is managed by mktg. Run mktg update to get the latest version.

    This skill is managed by mktg. Run mktg update to get the latest version.Source: github.com/typefully/agent-skills API docs: typefully.com/docs/api
  5. 05

    Handling "API key not found" errors

    CRITICAL: When you receive an "API key not found" error from the CLI:

    Tell the user to run the setup command - The setup is interactive and requires user input, so you cannot run it on their behalf. Recommend they run it themselves, using the correct path based on where this skill was loa…Stop and wait - After telling the user to run setup, do not continue with the task. You cannot create drafts, upload media, or perform any API operations without a valid API key. Wait for the user to complete setup and…DO NOT attempt any of the following:

Permission review

Static risk signals and limitations

Runs scripts

medium · line 18

The documentation asks the agent to run terminal commands or scripts.

**API Key**: Run the setup command to configure your API key securely

Network access

medium · line 23

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

**Requirements**: Node.js 18+ (for built-in fetch API). No other dependencies needed.

Runs scripts

medium · line 34

The documentation asks the agent to run terminal commands or scripts.

**Tell the user to run the setup command** - The setup is interactive and requires user input, so you cannot run it on their behalf. Recommend they run it themselves, using the correct path based on where this skill was loaded:

Writes files

medium · line 211

The documentation asks the agent to create, modify, or delete local files.

| `drafts:create [social_set_id] --file <path>` | Create draft from file content |

Network access

medium · line 295

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

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

Reads files

low · line 370

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

**Read from file**: Use `--file ./post.txt` instead of `--text` to read content from a file

Evidence record

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score90/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars27SourceRepository 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
MoizIbnYousaf/marketing-cli
Skill path
skills/typefully/SKILL.md
Commit
f12fbcbe4929584697b309b9096c9427b0cfce8e
License
MIT
Collected
2026-07-28
Default branch
main
View the original SKILL.md

Typefully Skill

Create, schedule, and publish social media content across multiple platforms using Typefully.

Freshness check: If more than 30 days have passed since the last-updated date above, inform the user that this skill may be outdated and point them to the update options below.

Keeping This Skill Updated

This skill is managed by mktg. Run mktg update to get the latest version.

Source: github.com/typefully/agent-skills API docs: typefully.com/docs/api

Setup

Before using this skill, ensure:

  1. API Key: Run the setup command to configure your API key securely

    • Get your key at https://typefully.com/?settings=api
    • Run: <skill-path>/scripts/typefully.js setup (where <skill-path> is the directory containing this SKILL.md)
    • Or set environment variable: export TYPEFULLY_API_KEY=your_key
  2. Requirements: Node.js 18+ (for built-in fetch API). No other dependencies needed.

Config priority (highest to lowest):

  1. TYPEFULLY_API_KEY environment variable
  2. ./.typefully/config.json (project-local, in user's working directory)
  3. ~/.config/typefully/config.json (user-global)

Handling "API key not found" errors

CRITICAL: When you receive an "API key not found" error from the CLI:

  1. Tell the user to run the setup command - The setup is interactive and requires user input, so you cannot run it on their behalf. Recommend they run it themselves, using the correct path based on where this skill was loaded:

    <skill-path>/scripts/typefully.js setup
    
  2. Stop and wait - After telling the user to run setup, do not continue with the task. You cannot create drafts, upload media, or perform any API operations without a valid API key. Wait for the user to complete setup and confirm before proceeding.

  3. DO NOT attempt any of the following:

    • Searching for API keys in macOS Keychain, .env files, or other locations
    • Grepping through config files or directories
    • Looking in the user's Trash or other system folders
    • Constructing complex shell commands to find credentials
    • Drafting content or preparing posts before setup is complete

The setup command will interactively guide the user through configuration. Trust the CLI's error messages and follow their instructions.

Note for agents: All script paths in this document (e.g., ./scripts/typefully.js) are relative to the skill directory where this SKILL.md file is located. Resolve them accordingly based on where the skill is installed.

Social Sets

The Typefully API uses the term "social set" to refer to what users commonly call an "account". A social set contains the connected social media platforms (X, LinkedIn, Threads, etc.) for a single identity.

The CLI supports a default social set - once configured, most commands work without specifying the social_set_id.

You can pass the social set either way:

  • Positional: drafts:list 123
  • Flag: drafts:list --social-set-id 123 (also supports --social_set_id)

When determining which social set to use:

  1. Check for a configured default first - Run config:show to see if a default is already set:

    ./scripts/typefully.js config:show
    

    If default_social_set is configured, the CLI uses it automatically when you omit the social_set_id.

  2. Check project context - Look for configuration in project files like CLAUDE.md or AGENTS.md:

    ## Typefully
    Default social set ID: 12345
    
  3. Single social set shortcut - If the user only has one social set and no default is configured, use it automatically

  4. Multiple social sets, no default - Ask the user which to use, then offer to save their choice as the default:

    ./scripts/typefully.js config:set-default
    

    This command lists available social sets and saves the choice to the config file.

  5. Reuse previously resolved social set - If determined earlier in the session, use it without asking again

Common Actions

User says...Action
"Draft a tweet about X"drafts:create --text "..." (uses default social set)
"Post this to LinkedIn"drafts:create --platform linkedin --text "..."
"Post to X and LinkedIn" (same content)drafts:create --platform x,linkedin --text "..."
"X thread + LinkedIn post" (different content)Create one draft, then drafts:update to add platform (see Publishing to Multiple Platforms)
"What's scheduled?"drafts:list --status scheduled
"Show my recent posts"drafts:list --status published
"Schedule this for tomorrow"drafts:create ... --schedule "2025-01-21T09:00:00Z"
"Post this now"drafts:create ... --schedule now or drafts:publish <draft_id> --use-default
"Add notes/ideas to the draft"drafts:create ... --scratchpad "Your notes here"
"Check available tags"tags:list

Brand Integration

Before writing post content, check for brand/voice-profile.md in the project. If it exists, calibrate tone and vocabulary to the brand voice. This skill handles the Typefully integration — voice guidance comes from brand context.

If no brand files exist, proceed normally — the user provides the content directly or another skill handles voice.

Workflow

Follow this workflow when creating posts:

  1. Check if a default social set is configured:

    ./scripts/typefully.js config:show
    

    If default_social_set shows an ID, skip to step 3.

  2. If no default, list social sets to find available options:

    ./scripts/typefully.js social-sets:list
    

    If multiple exist, ask the user which to use and offer to set it as default:

    ./scripts/typefully.js config:set-default
    
  3. Create drafts (social_set_id is optional if default is configured):

    ./scripts/typefully.js drafts:create --text "Your post"
    

    Note: If --platform is omitted, the first connected platform is auto-selected.

    For multi-platform posts: See Publishing to Multiple Platforms — always use a single draft, even when content differs per platform.

  4. Schedule or publish as needed

Working with Tags

Tags help organize drafts within Typefully. Always check existing tags before creating new ones:

  1. List existing tags first:

    ./scripts/typefully.js tags:list
    
  2. Use existing tags when available - if a tag with the desired name already exists, use it directly when creating drafts:

    ./scripts/typefully.js drafts:create --text "..." --tags existing-tag-name
    
  3. Only create new tags if needed - if the tag doesn't exist, create it:

    ./scripts/typefully.js tags:create --name "New Tag"
    

Important: Tags are scoped to each social set. A tag created for one social set won't appear in another.

Publishing to Multiple Platforms

If a single draft needs to be created for different platforms, you need to make sure to create a single draft and not multiple drafts.

When the content is the same across platforms, create a single draft with multiple platforms:

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

# All connected platforms
./scripts/typefully.js drafts:create --all --text "Posting everywhere!"

IMPORTANT: When content should be tailored (e.g., X thread with a LinkedIn post version), still use a single draft — create with one platform first, then update to add the other:

# 1. Create draft with the primary platform first
./scripts/typefully.js drafts:create --platform linkedin --text "Excited to share our new feature..."
# Returns: { "id": "draft-123", ... }

# 2. Update the same draft to add another platform with different content
./scripts/typefully.js drafts:update draft-123 --platform x --text "🧵 Thread time!

---

Here's what we shipped and why it matters..." --use-default

So make sure to NEVER create multiple drafts unless the user explicitly wants separate drafts for each platform.

Commands Reference

User & Social Sets

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

Drafts

All drafts commands support an optional [social_set_id] - if omitted, the configured default is used. Safety note: For commands that take [social_set_id] <draft_id>, if you pass only a single argument (the draft_id) while a default social set is configured, you must add --use-default to confirm intent.

CommandDescription
drafts:list [social_set_id]List drafts (add --status scheduled to filter, --sort to order)
drafts:get [social_set_id] <draft_id>Get a specific draft with full content (single-arg requires --use-default if a default is configured)
drafts:create [social_set_id] --text "..."Create a new draft (auto-selects platform)
drafts:create [social_set_id] --platform x --text "..."Create a draft for specific platform(s)
drafts:create [social_set_id] --all --text "..."Create a draft for all connected platforms
drafts:create [social_set_id] --file <path>Create draft from file content
drafts:create ... --media <media_ids>Create draft with attached media
drafts:create ... --reply-to <url>Reply to an existing X post
drafts:create ... --community <id>Post to an X community
drafts:create ... --shareGenerate a public share URL for the draft
drafts:create ... --scratchpad "..."Add internal notes/scratchpad to the draft
drafts:update [social_set_id] <draft_id> --text "..."Update an existing draft (single-arg requires --use-default if a default is configured)
drafts:update [social_set_id] <draft_id> --tags "tag1,tag2"Update tags on an existing draft (content unchanged)
drafts:update ... --shareGenerate a public share URL for the draft
drafts:update ... --scratchpad "..."Update internal notes/scratchpad
drafts:update [social_set_id] <draft_id> --append --text "..."Append to existing thread

Scheduling & Publishing

Safety note: These commands require --use-default when using the default social set with a single argument (to prevent accidental operations from ambiguous syntax).

CommandDescription
drafts:delete <social_set_id> <draft_id>Delete a draft (explicit IDs)
drafts:delete <draft_id> --use-defaultDelete using default social set
drafts:schedule <social_set_id> <draft_id> --time next-free-slotSchedule to next available slot
drafts:schedule <draft_id> --time next-free-slot --use-defaultSchedule using default social set
drafts:publish <social_set_id> <draft_id>Publish immediately
drafts:publish <draft_id> --use-defaultPublish using default social set

Tags

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 (use media:status to poll)
media:upload ... --timeout <seconds>Set custom timeout (default: 60)
media:status [social_set_id] <media_id>Check media upload status

Setup & Configuration

CommandDescription
setupInteractive setup - prompts for API key, storage location, and default social set
setup --key <key> --location <global|local>Non-interactive setup for scripts/CI (auto-selects default if only one social set)
setup --key <key> --default-social-set <id>Non-interactive setup with explicit default social set
setup --key <key> --no-defaultNon-interactive setup, skip default social set selection
config:showShow current config, API key source, and default social set
config:set-default [social_set_id]Set default social set (interactive if ID omitted)

Examples

See references/examples.md for the full example library (drafts, media, setup, scheduling). Quick essentials:

# Create a tweet
./scripts/typefully.js drafts:create --text "Hello, world!"

# Cross-platform post
./scripts/typefully.js drafts:create --platform x,linkedin --text "Big announcement!"

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

# Upload media and attach to post
./scripts/typefully.js media:upload ./image.jpg  # Returns media_id
./scripts/typefully.js drafts:create --text "Check this out!" --media <media_id>

Platform Names

Use these exact names for the --platform option:

  • x - X (formerly Twitter)
  • linkedin - LinkedIn
  • threads - Threads
  • bluesky - Bluesky
  • mastodon - Mastodon

Draft URLs

Typefully draft URLs contain the social set and draft IDs:

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

Example: https://typefully.com/?a=12345&d=67890

  • a=12345 → social_set_id
  • d=67890 → draft_id

Draft Scratchpad

When the user explictly asked to add notes, ideas, or anything else in the draft scratchpad, use the --scratchpad flag—do NOT write to local files!

The --scratchpad option attaches internal notes directly to the Typefully draft. These notes:

  • Are visible in the Typefully UI alongside the draft
  • Stay attached to the draft permanently
  • Are private and never published to social media
  • Are perfect for storing thread expansion ideas, research notes, context, etc.
# CORRECT: Notes attached to the draft in Typefully
./scripts/typefully.js drafts:create 123 --text "My post" --scratchpad "Ideas for expanding: 1) Add stats 2) Include quote"

# WRONG: Do NOT write notes to local files when the user wants them in Typefully
# Writing to /tmp/scratchpad/ or any local file is NOT the same thing

Output Logging

After scheduling or creating drafts, log what was done to maintain a paper trail:

Write a summary to marketing/social/typefully-log.md (append, don't overwrite):

## [Date] — [Campaign/Context]

| # | Draft ID | Platform | Scheduled | Text Preview (first 60 chars) |
|---|----------|----------|-----------|-------------------------------|
| 1 | draft-123 | x,linkedin | 2026-03-25T09:00:00Z | "Here's what we learned..." |

This ensures continuity across sessions — the agent can check what's already been scheduled.

Anti-Patterns

Anti-PatternWhy It FailsInstead
Creating multiple drafts for the same cross-platform postClutters the Typefully queue, can't be managed as one unitAlways use a single draft — create with one platform, then update to add others
Publishing without user confirmationIrreversible, goes public instantlyDefault to drafts. Only publish when user explicitly says "post now"
Searching keychains or .env files for API keysWastes time, security risk, unreliableTell user to run the setup command and wait
Writing scratchpad content to local filesNotes get lost, not attached to the draft in TypefullyUse --scratchpad flag to attach notes to the draft

Automation Guidelines

When automating posts, especially on X, follow these rules to keep accounts in good standing:

  • No duplicate content across multiple accounts
  • No unsolicited automated replies - only reply when explicitly requested by the user
  • No trending manipulation - don't mass-post about trending topics
  • No fake engagement - don't automate likes, reposts, or follows
  • Respect rate limits - the API has rate limits, don't spam requests
  • Drafts are private - content stays private until published or explicitly shared

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

Publishing confirmation: Unless the user explicitly asks to "publish now" or "post immediately", always confirm before publishing. Creating a draft is safe; publishing is irreversible and goes public instantly.

Tips

  • Smart platform default: If --platform is omitted, the first connected platform is auto-selected
  • All platforms: Use --all to post to all connected platforms at once
  • Character limits: X (280), LinkedIn (3000), Threads (500), Bluesky (300), Mastodon (500)
  • Thread creation: Use --- on its own line to split into multiple posts (thread)
  • Scheduling: Use next-free-slot to let Typefully pick the optimal time
  • Cross-posting: List multiple platforms separated by commas: --platform x,linkedin
  • Draft titles: Use --title for internal organization (not posted to social media)
  • Draft scratchpad: Use --scratchpad to attach notes to the draft in Typefully (NOT local files!) - perfect for thread ideas, research, context
  • Read from file: Use --file ./post.txt instead of --text to read content from a file
  • Sorting drafts: Use --sort with values like created_at, -created_at, scheduled_date, etc.

Alternatives

Compare before choosing

Computed 9438,313

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 9427

MoizIbnYousaf/marketing-cli

cmo-remotion

Brand-grounded Remotion video pipeline. Take a brief, ground it in `brand/` (voice, audience, positioning, creative-kit), write a beat sheet, scaffold a fresh Remotion project, generate any required assets, compose with frame-driven animations, and bake a final MP4. Use this skill whenever the user wants to build a NEW Remotion video from scratch — product films, motion graphics, code-driven shaders, CRT/glitch effects, HTML-in-canvas demos, React video. Triggers on requests like "make a remotio

Computed 9337,126

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

Computed 9242,015

coreyhaines31/marketingskills

sms

When the user wants to plan, build, or optimize SMS or MMS marketing — including welcome flows, abandoned cart texts, post-purchase, win-back, promotional sends, or transactional/auth SMS. Also use when the user mentions "SMS marketing," "text message campaigns," "SMS sequence," "SMS automation," "abandoned cart text," "post-purchase SMS," "Klaviyo SMS," "Postscript," "Attentive," "Twilio," "A2P 10DLC," "TCPA," "SMS compliance," "short code," "toll-free SMS," "MMS campaign," "should I do SMS," o