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.
What this skill does
# Typefully Skill Create, schedule, and publish social media content across multiple platforms using [Typefully](https://typefully.com). > **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 **Source**: [github.com/typefully/agent-skills](https://github.com/typefully/agent-skills) **API docs**: [typefully.com/docs/api](https://typefully.com/docs/api) Update methods by installation type: | Installation | How to update | |--------------|---------------| | CLI (`npx skills`) | `npx skills update` | | Claude Code plugin | `/plugin update typefully@typefully-skills` | | Cursor | Remote rules auto-sync from GitHub | | Manual | Pull latest from repo or re-copy `skills/typefully/` | API changes ship independently—updating the skill ensures you have the latest commands and workflows. ## 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: ```bash <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: ```bash ./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`: ```markdown ## 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**: ```bash ./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 "..."` | | "Mention a company on LinkedIn" | `linkedin:organizations:resolve --organization-url "<linkedin_url>"` then use returned `mention_text` in `drafts:create` | | "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](#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` | | "Show my X post analytics for last week" | `analytics:posts:list --start-date YYYY-MM-DD --end-date YYYY-MM-DD` | | "Show my X post analytics including replies" | `analytics:posts:list --start-date YYYY-MM-DD --end-date YYYY-MM-DD --include-replies` | | "Show my queue for next week" | `queue:get --start-date YYYY-MM-DD --end-date YYYY-MM-DD` | ## Workflow Follow this workflow when creating posts: 1. **Check if a default social set is configured**: ```bash ./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: ```bash ./scripts/typefully.js social-sets:list ``` If multiple exist, ask the user which to use and offer to set it as default: ```bash ./scripts/typefully.js config:set-default ``` 3. **Create drafts** (social_set_id is optional if default is configured): ```bash ./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](#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**: ```bash ./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: ```bash ./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: ```bash ./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: ```bash # Specific platforms ./scripts/typefully.js drafts:create --platform x,linkedin --text "Big announcement!" # All conn
Related in Writing & Docs
jax-development
IncludedUse this skill when the user is writing, debugging, profiling, refactoring, reviewing, benchmarking, parallelising, exporting, or explaining JAX code, or when they mention JAX, jax.numpy, jit, grad, value_and_grad, vmap, scan, lax, random keys, pytrees, jax.Array, sharding, Mesh, PartitionSpec, NamedSharding, pmap, shard_map, Pallas, XLA, StableHLO, checkify, profiler, or the JAX repo. It helps turn NumPy or PyTorch-style code into pure functional JAX, fix tracer/control-flow/shape/PRNG bugs, remove recompiles and host-device syncs, choose transforms and sharding strategies, inspect jaxpr/lowering/IR, and benchmark compiled code correctly.
nature-article-writer
IncludedDrafts, rewrites, diagnostically critiques, and style-calibrates primary research manuscripts for Nature and Nature Portfolio journals. Use when the user wants a Nature-style title, summary paragraph or abstract, introduction, results, discussion, methods, figure legends, presubmission enquiry, cover letter, reviewer response, or when a scientific draft sounds generic, jargon-heavy, structurally weak, or AI-ish and needs precise, broad-reader-friendly prose without inventing data, analyses, or references. Best for primary research articles and letters rather than reviews or press releases unless explicitly adapting one.
deckrd
IncludedDocument-driven framework that derives requirements, specifications, implementation plans, and executable tasks from goals through structured AI dialogue. Use when user says "write requirements", "create spec", "plan implementation", "derive tasks", "structure this feature", "break down into tasks", or "document this module". Also use for reverse engineering existing code into docs (/deckrd rev). Do NOT use for direct code writing — use /deckrd-coder after tasks are generated. Do NOT use when the user only wants to run or fix existing code without planning.
clinical-decision-support
IncludedGenerate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug development, clinical research, and evidence synthesis.
handling-sf-data
IncludedSalesforce data operations with 130-point scoring. Use this skill to create, update, delete, bulk import/export, generate test data, and clean up org records using sf CLI and anonymous Apex. TRIGGER when: user creates test data, performs bulk import/export, uses sf data CLI commands, needs data factory patterns for Apex tests, or needs to seed/clean records in a Salesforce org. DO NOT TRIGGER when: SOQL query writing only (use querying-soql), Apex test execution (use running-apex-tests), or metadata deployment (use deploying-metadata).
accelint-ac-to-playwright
IncludedConvert and validate acceptance criteria for Playwright test automation. Use when user asks to (1) review/evaluate/check if AC are ready for automation, (2) assess if AC can be converted as-is, (3) validate AC quality for Playwright, (4) turn AC into tests, (5) generate tests from acceptance criteria, (6) convert .md bullets or .feature Gherkin files to Playwright specs, (7) create test automation from requirements. Handles both bullet-style markdown and Gherkin syntax with JSON test plan generation and validation.