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-updateddate 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:
-
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
-
Requirements: Node.js 18+ (for built-in fetch API). No other dependencies needed.
Config priority (highest to lowest):
TYPEFULLY_API_KEYenvironment variable./.typefully/config.json(project-local, in user's working directory)~/.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:
-
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 -
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.
-
DO NOT attempt any of the following:
- Searching for API keys in macOS Keychain,
.envfiles, 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
- Searching for API keys in macOS Keychain,
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:
-
Check for a configured default first - Run
config:showto see if a default is already set:./scripts/typefully.js config:showIf
default_social_setis configured, the CLI uses it automatically when you omit the social_set_id. -
Check project context - Look for configuration in project files like
CLAUDE.mdorAGENTS.md:## Typefully Default social set ID: 12345 -
Single social set shortcut - If the user only has one social set and no default is configured, use it automatically
-
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-defaultThis command lists available social sets and saves the choice to the config file.
-
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:
-
Check if a default social set is configured:
./scripts/typefully.js config:showIf
default_social_setshows an ID, skip to step 3. -
If no default, list social sets to find available options:
./scripts/typefully.js social-sets:listIf multiple exist, ask the user which to use and offer to set it as default:
./scripts/typefully.js config:set-default -
Create drafts (social_set_id is optional if default is configured):
./scripts/typefully.js drafts:create --text "Your post"Note: If
--platformis 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.
-
Schedule or publish as needed
Working with Tags
Tags help organize drafts within Typefully. Always check existing tags before creating new ones:
-
List existing tags first:
./scripts/typefully.js tags:list -
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 -
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