← Simplified for AICONTENT HISTORY

Update to Simplified for AI

Snapshot Nov 3, 2026 · 18:19 UTC · version 2.1.0

Collection source: downloaded plugin package. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.

WHAT CHANGED

Instructions updated for simplified-social

Full description — Now says: Create, retrieve, revise, schedule, or queue Simplified social posts and drafts; manage auto-comments and review bundles; retrieve account analytics. Use for...

Observed in instructions or declared skills. Runtime behavior has not been tested.

Save Simplified for AI and check future changes in Following.

Up to 3 plugins free · no card required.

All fields and original values.

Full description

Before

Sep 30, 2026 · 22:54 UTC

Manage your entire social media from Codex with Simplified — post, schedule, queue, draft, and analyze across Facebook, Instagram, TikTok, YouTube, LinkedIn, Pinterest, Threads, Bluesky, X/Twitter, Google Business, Mastodon, Reddit, and ...

After

Nov 3, 2026 · 18:19 UTC

Create, retrieve, revise, schedule, or queue Simplified social posts and drafts; manage auto-comments and review bundles; retrieve account analytics. Use for direct social operations. For a content calendar, campaign strategy, or perform...

Skill instructions

Before

Sep 30, 2026 · 22:54 UTC

>- Manage your entire social media from Codex with Simplified — post, schedule, queue, draft, and analyze across Facebook, Instagram, TikTok, YouTube, LinkedIn, Pinterest, Threads, Bluesky, X/Twitter, Google Business, Mastodon, R...

After

Nov 3, 2026 · 18:19 UTC

Create, retrieve, revise, schedule, or queue Simplified social posts and drafts; manage auto-comments and review bundles; retrieve account analytics. Use for direct social operations. For a content calendar, campaign strategy, or perform...

Supporting files

Before

Sep 30, 2026 · 22:54 UTC

[{"relative_path":"agents/openai.yaml","size_in_bytes":634},{"relative_path":"assets/simplified-icon-256.png","size_in_bytes":8191},{"relative_path":"assets/simplified-logo.png","size_in_bytes":6726},{"relative_path":"assets/simplified-t...

After

Nov 3, 2026 · 18:19 UTC

[{"relative_path":"agents/openai.yaml","size_in_bytes":634},{"relative_path":"assets/simplified-icon-256.png","size_in_bytes":8191},{"relative_path":"assets/simplified-logo.png","size_in_bytes":6726},{"relative_path":"assets/simplified-t...

Compare saved observations

Download comparison JSON

SKILL.md text changes

− removed · + added

--- before
+++ after
@@ -1,13 +1,6 @@
 ---
 name: simplified-social
-description: >-
-  Manage your entire social media from Codex with Simplified — post, schedule,
-  queue, draft, and analyze across Facebook, Instagram, TikTok, YouTube,
-  LinkedIn, Pinterest, Threads, Bluesky, X/Twitter, Google Business, Mastodon,
-  Reddit, and Telegram. Triggers: social media, post to, schedule post, publish
-  on, social accounts, analytics, reach, impressions, engagement, followers
-  growth, content calendar, auto-comments, link in first comment, attach local
-  media, upload an image or video for a social post.
+description: Create, retrieve, revise, schedule, or queue Simplified social posts and drafts; manage auto-comments and review bundles; retrieve account analytics. Use for direct social operations. For a content calendar, campaign strategy, or performance interpretation, use social-content-planner, cross-platform-campaign, or social-performance-analyst.
 ---
 
 # Simplified Social Media
@@ -21,7 +14,7 @@
 `api_createAsset`, etc.) are provided by the **Simplified hosted MCP connector**
 (`https://apikit.simplified.com/mcp`). They are not built-in tools.
 
-The connector is **OAuth-secured** — Codex walks the OAuth flow; there is no API key to set.
+The connector is **OAuth-secured** — the connected client walks the OAuth flow; there is no API key to set.
 
 ## IMPORTANT: Before Any Operation
 
@@ -35,47 +28,46 @@
 
 1. Sign up at [simplified.com](https://simplified.com).
 2. Connect your social media accounts in the Simplified dashboard.
-3. Enable the Simplified connector in Codex and complete the OAuth authorization.
+3. Enable the Simplified connector in your client and complete the OAuth authorization.
 
 ## Core Workflow
 
-Always follow this sequence: **Discover → Select → Compose → Confirm → Publish**
+For publishing, follow **Discover → Select → Compose → Confirm → Publish**.
+For drafts, resolve workspace/teamspace scope and compose; a connected account is optional.
+Carry an explicitly selected `space_id` through every related read, write, and poll.
 
 ### Step 1: Discover Accounts
 
-Call `social_getSocialMediaAccounts` to list connected accounts. Optionally filter by network.
+Call `social_getSocialMediaAccounts` once without `network` to list connected accounts.
+The `network` filter is deprecated; filter returned accounts client-side.
 
 ```
-social_getSocialMediaAccounts({ network: "instagram" })
+social_getSocialMediaAccounts({})
 ```
 
 Returns `{ accounts: [...] }` where each account has `id` (integer), `name`, and `type` (see type values below).
 
-If `social_getSocialMediaAccounts` returns an empty list, stop and inform the user with this message:
-
-> **No social media accounts connected yet.**
->
-> You're one step away from managing your entire social media presence without leaving your editor. Connect your accounts in the [Simplified dashboard](https://app.simplified.com) and you'll be able to:
->
-> - 📅 Schedule and publish posts to Facebook, Instagram, TikTok, YouTube, LinkedIn, Pinterest, Threads, Bluesky, X/Twitter, Google Business, Mastodon, Reddit, and Telegram — with a single command
-> - 📊 Pull analytics, track reach, engagement and follower growth across all platforms
-> - 🤖 Let your AI agent run full social media campaigns autonomously
->
-> Takes 2 minutes to connect. No code required.
+If publishing or account-specific analytics requires an account and the list is empty,
+explain that an account must be connected. For a requested draft, continue with
+`action: "draft"` and omit `account_ids`; do not block accountless drafting.
+For account-dependent operations, explain which account needs connecting in [Simplified](https://app.simplified.com).
 
 ### Step 2: Select Target Accounts
 
-Pick one or more `account_ids` from the results. You can post to multiple accounts in a single call.
+Pick one or more account IDs from the results and serialize them as strings for
+posting, e.g. `account_ids: ["123"]`. Analytics `account_id` remains an integer;
+draft/post listing `account_ids` is a comma-separated string. You can post to
+multiple accounts in a single call.
 
 ### Step 3: Compose the Post
 
 Build the post payload:
 - `message` (required) — the post text, max 5000 chars at the connector boundary
   (tighter per-platform limits apply)
-- `account_ids` (required for publishing actions) — array of target account IDs
+- `account_ids` (required for publishing actions) — array of stringified target account IDs
 - `action` (required) — `schedule`, `add_to_queue`, or `draft`
 - `date` — required for `schedule`, format: `YYYY-MM-DD HH:MM`
-- `media` — array (max 10) of **Simplified asset UUIDs** or public media URLs
+- `media` — array (max 10) of **Simplified asset UUIDs**, public media URLs, or `{url, thumbUrl}` objects for video with an explicit poster
 - `comments` — ordered auto-comments, each with `message` and a nonnegative
   `delay` in seconds after the post publishes; comments cannot include media
 - `additional` — platform-specific settings (see below)
@@ -91,19 +83,21 @@
 
 ### Step 4: Confirm, then Publish
 
-Publishing is outward-facing. For `schedule` / `add_to_queue`, **show the composed post to the user and get explicit confirmation first** (drafting first with `action:"draft"` is a good way to preview). Then call `social_createSocialMediaPost`.
+Publishing is outward-facing. For `schedule` / `add_to_queue`, show the composed
+post, target accounts, timing, and auto-comments for approval. Existing explicit
+authorization covering that exact content, targets, and timing is sufficient;
+ask only when authorization is missing or the proposed publication changed.
+An internal `action:"draft"` preview is useful when content still needs review.
+Then call `social_createSocialMediaPost`.
 
-If the post includes auto-comments, the confirmation must show each comment's text
+If the post includes auto-comments, the authorized publication plan must cover each comment's text
 and post-relative delay. For “link in first comment after X minutes,” convert
 nonnegative minutes to an integer number of seconds with `delay = X * 60`.
 `delay` is measured in seconds after the post publishes, not after the previous
 comment. Comments execute in array order. Do not move the comment text into the
 main post.
 
-**Show returned URLs as links, never embed them.** Any URL these tools return
-(review-bundle links, published-post URLs, media URLs) must be presented as a plain
-URL or Markdown link — **never** Markdown image syntax (`![](url)`) and never
-inline-rendered. The user clicks the link; the agent does not render it.
+**Media presentation.** Use a native media preview when the client supports it and the user wants to review the result. Otherwise show a usable link. Refresh expired asset URLs; do not download remote media merely to bypass client display restrictions. Review bundles and other web pages remain links.
 
 ## Choosing the Right Analytics Tool
 
@@ -115,306 +109,18 @@
 | Demographics, follower origins, age/gender breakdown | `social_getSocialMediaAnalyticsAudience` |
 | "Show me analytics" with no further context | `social_getSocialMediaAnalyticsAggregated` + `social_getSocialMediaAnalyticsRange` with key metrics |
 
-## Tool Reference
-
-### `social_getSocialMediaAccounts`
-
-| Parameter | Type   | Required | Description                          |
-|-----------|--------|----------|--------------------------------------|
-| `network` | string | No       | Filter by platform (see networks)    |
-
-**Networks (filter parameter):** `facebook`, `instagram`, `linkedin`, `tiktok`,
-`tiktokBusiness`, `youtube`, `pinterest`, `threads`, `google`, `bluesky`,
-`mastodon`, `reddit`, `telegram`
-
-Returns `{ accounts: [...] }`. Each account object:
-
-| Field  | Type    | Description |
-|--------|---------|-------------|
-| `id`   | integer | Account ID — use for all analytics calls and for `account_ids` in `social_createSocialMediaPost` |
-| `name` | string  | Account display name |
-| `type` | string  | Account type — see values below |
-
-**`type` values and their meaning:**
-
-| `type` value | Platform | Notes |
-|---|---|---|
-| `Facebook page` | Facebook | — |
-| `Instagram business` / `Instagram profile` | Instagram | — |
-| `Youtube account` | YouTube | — |
-| `TikTok profile` | TikTok Personal | use `tiktok` metrics set |
-| `TikTok profile (business)` | TikTok Business | use `tiktokBusiness` metrics set |
-| `LinkedIn company` | LinkedIn | use LinkedIn Company metrics set |
-| `LinkedIn profile` | LinkedIn | use LinkedIn Personal metrics set |
-| `Pinterest board` | Pinterest | — |
-| `Threads account` | Threads | — |
-| `Bluesky account` | Bluesky | — |
-| `Google Profile` | Google Business | — |
-| `Reddit account` | Reddit | `additional.reddit.post.targets` is required |
-
-### `social_createSocialMediaPost`
-
-| Parameter     | Type     | Required | Description                              |
-|---------------|----------|----------|------------------------------------------|
-| `message`     | string   | Yes      | Post text (connector max 5000 chars; tighter platform limits apply) |
-| `account_ids` | int[]    | For publish | Target account IDs from `social_getSocialMediaAccounts`; omit/empty for an accountless `draft` |
-| `action`      | string   | Yes      | `schedule`, `add_to_queue`, or `draft`   |
-| `date`        | string   | For `schedule` | Schedule datetime: `YYYY-MM-DD HH:MM` (not in the past) |
-| `media`       | string[] | No       | Asset UUIDs or public media URLs (max 10) |
-| `tags`        | int[]    | No       | Tag IDs |
-| `comments`    | object[] | No       | Ordered auto-comments: `{message, delay}`; `delay` is seconds after publish and must be ≥ 0 |
-| `additional`  | object   | Per platform | Platform-specific settings |
-
-### `social_getSocialMediaDrafts`
-
-Lists unpublished drafts for selected accounts. `account_ids` is required and must
-be a comma-separated string of numeric IDs returned by
-`social_getSocialMediaAccounts`, for example `"123,456"`. If a multi-account lookup
-returns no rows when drafts are expected, retry once per account ID, merge the
-results, and deduplicate by exact draft ID. This per-account fallback is read-only
-and must not create replacement drafts. Optional filters are `page`, `per_page`,
-`search`, `tz`, `order_by`, and `order` (`asc` or `desc`). Omit ordering by default;
-if the connector rejects an optional filter, retry without that filter rather than
-treating the drafts as absent.
-
-### `social_updateSocialMediaDraft`
-
-Updates one draft. `draft_id` is required. Optional fields are `message`, `media`,
-`tags`, `date`, `time`, and `timezone`. Only pass fields the user asked to change.
-
-### `social_createSocialMediaReviewBundle`
-
-Creates a shareable stakeholder-review package. `title` is required; `description`
-and `draft_ids` are optional. Prefer one call containing all selected draft IDs.
-Draft IDs must come from `social_getSocialMediaDrafts`; never fabricate them. The
-response includes `linkToReview`, which must be shown as a link and never embedded.
-
-The hosted connector currently does not expose a separate tool for appending drafts
-to an existing bundle. Do not recreate an existing bundle unless the user explicitly
-asks for a replacement.
-
-### `social_getSocialMediaAnalyticsRange`
-
-Retrieves time-series data for selected metrics within a date range.
-
-| Parameter    | Type     | Required | Description                                                  |
-|--------------|----------|----------|--------------------------------------------------------------|
-| `account_id` | integer  | Yes      | Social media account ID (from `social_getSocialMediaAccounts`) |
-| `metrics`    | string[] | Yes      | List of metrics to retrieve (see `references/analytics.md`)  |
-| `date_from`  | string   | Yes      | Start date: `YYYY-MM-DD`                                     |
-| `date_to`    | string   | Yes      | End date: `YYYY-MM-DD` (never in the future)                 |
-| `tz`         | string   | No       | Timezone, e.g. `UTC`, `Europe/Warsaw` (default: `UTC`)       |
-
-Returns `data` (per-day series), `baseLine` (period totals with `prevValue`), and `additional` (windowed extras). See `references/analytics.md` for the full metric list, default metrics per network, and response examples.
-
-### `social_getSocialMediaAnalyticsPosts`
-
-Retrieves analytics for individual posts within a date range.
-
-| Parameter    | Type    | Required | Description                                             |
-|--------------|---------|----------|---------------------------------------------------------|
-| `account_id` | integer | Yes      | Social media account ID                                 |
-| `date_from`  | string  | Yes      | Start date: `YYYY-MM-DD`                                |
-| `date_to`    | string  | Yes      | End date: `YYYY-MM-DD`                                  |
-| `page`       | integer | No       | Page number (default: 1, minimum: 1)                    |
-| `per_page`   | integer | No       | Posts per page (default: 10, max: 100)                  |
-
-Returns paginated posts with per-post metrics. **Pagination:** use `per_page: 100`, start at `page: 1`, increment until `current_page >= pages_count` or `posts` is empty.
-
-### `social_getSocialMediaAnalyticsAggregated`
-
-Retrieves aggregated analytics (totals and averages) for an account within a date range.
-
-| Parameter    | Type    | Required | Description             |
-|--------------|---------|----------|-------------------------|
-| `account_id` | integer | Yes      | Social media account ID |
-| `date_from`  | string  | Yes      | Start date: `YYYY-MM-DD` |
-| `date_to`    | string  | Yes      | End date: `YYYY-MM-DD`  |
-
-Returns `data` plus `baseLine` with four KPIs: `impressions_aggregated`, `engagement_aggregated`, `followers_aggregated`, `publishing_aggregated` (each with `value` and `prevValue`).
-
-### `social_getSocialMediaAnalyticsAudience`
-
-Retrieves audience demographics and follower data for an account.
-
-| Parameter    | Type    | Required | Description                          |
-|--------------|---------|----------|--------------------------------------|
-| `account_id` | integer | Yes      | Social media account ID              |
-| `date_from`  | string  | Yes      | Start date: `YYYY-MM-DD`             |
-| `date_to`    | string  | Yes      | End date: `YYYY-MM-DD`              |
-| `tz`         | string  | No       | Timezone, e.g. `UTC`, `Europe/Warsaw` |
-
-Returns `audience_page_fans_gender_age`, `audience_page_fans_country`, `audience_page_fans_city`. Not all fields are available for every network.
-
-## Action Types
-
-| Action         | When to Use                                          | `date` Required? |
-|----------------|------------------------------------------------------|-------------------|
-| `schedule`     | Post at a specific date/time                         | Yes               |
-| `add_to_queue` | Publish as soon as possible (optimal-time queue)     | No                |
-| `draft`        | Save for later editing in the Simplified dashboard   | No                |
-
-**Default:** When the user doesn't specify timing (or says "post now"), use `add_to_queue` — it publishes ASAP; there is no separate immediate-publish action. When they give a date/time, use `schedule`. When they say "save" or "draft", use `draft`.
-
-## Platform Settings Quick Reference
-
-All platform settings go inside the `additional` object, grouped by platform name. **Bold** = required. For full details see [references/platform-settings.md](references/platform-settings.md).
-
-| Platform       | Required additionals              | Optional additionals               |
-|----------------|-----------------------------------|------------------------------------|
-| Facebook       | **`postType`**                    | —                                  |
-| Instagram      | **`postType`**, **`channel`**     | `postReel` (reel only)             |
-| TikTok         | **`postType`**, **`channel`**, **`post`** | `postPhoto` (photo only)  |
-| TikTok Biz     | **`postType`**, **`post`**        | `postPhoto` (photo only)           |
-| YouTube        | **`postType`**, **`post`**        | —                                  |
-| LinkedIn       | **`audience`**                    | —                                  |
-| Pinterest      | **`post`**                        | —                                  |
-| Threads        | **`channel`**                     | —                                  |
-| Google         | **`post`**                        | —                                  |
-| Bluesky        | —                                 | —                                  |
-| Mastodon       | —                                 | —                                  |
-| Reddit         | **`post.targets`**                | target flair, NSFW flag, link URL  |
-| Telegram       | —                                 | —                                  |
-
-Key enum values:
-
-| Platform   | Field              | Values                              |
-|------------|--------------------|-------------------------------------|
-| Facebook   | `postType.value`   | `post`\*, `reel`, `story`           |
-| Instagram  | `postType.value`   | `post`\*, `reel`, `story`           |
-| Instagram  | `channel.value`    | `direct`\*, `reminder`              |
-| TikTok     | `postType.value`   | `video`\*, `photo`                  |
-| TikTok     | `channel.value`    | `direct`\*, `reminder`              |
-| TikTok     | `post.privacyStatus` | `PUBLIC_TO_EVERYONE`\*, `MUTUAL_FOLLOW_FRIENDS`, `FOLLOWER_OF_CREATOR`, `SELF_ONLY` |
-| YouTube    | `postType.value`   | `video`\*, `short`                  |
-| YouTube    | `post.privacyStatus` | `""`, `public`, `private`, `unlisted` |
-| LinkedIn   | `audience.value`   | `PUBLIC`\*, `CONNECTIONS`, `LOGGED_IN` |
-| Threads    | `channel.value`    | `direct`\*, `reminder`              |
-| Google     | `post.topicType`   | `STANDARD`\*, `EVENT`, `OFFER`      |
-| Reddit     | `post.targets[].type` | `self`, `link`                    |
-
-\* = default
-
-## Example Workflows
-
-### Simple Queue Post
-
-```
-1. social_getSocialMediaAccounts({ network: "instagram" })
-2. social_createSocialMediaPost({
-     message: "Check out our new feature! 🚀",
-     account_ids: [123],
-     action: "add_to_queue",
-     media: ["https://cdn.example.com/image.jpg"],
-     additional: {
-       instagram: { postType: { value: "post" }, channel: { value: "direct" } }
-     }
-   })
-```
-
-### Scheduled YouTube Short
-
-```
-1. social_getSocialMediaAccounts({ network: "youtube" })
-2. social_createSocialMediaPost({
-     message: "Quick tip: how to use our API",
-     account_ids: [456],
-     action: "schedule",
-     date: "2026-06-10 14:00",
-     media: ["https://cdn.example.com/video.mp4"],
-     additional: {
-       youtube: { postType: { value: "short" },
-         post: { title: "API Quick Tip", privacyStatus: "public", selfDeclaredMadeForKids: "no" } }
-     }
-   })
-```
-
-### Post a freshly generated image
-
-```
-1. (generate-image skill) → asset_id "a1b2c3…"
-2. social_getSocialMediaAccounts({ network: "instagram" })
-3. social_createSocialMediaPost({
-     message: "Meet the new drop 👟",
-     account_ids: [123],
-     action: "draft",
-     media: ["a1b2c3…"],                       // asset UUID from generate-image
-     additional: { instagram: { postType: { value: "post" }, channel: { value: "direct" } } }
-   })
-```
+## Read details for the current operation
 
-### Reddit draft
-
-```
-1. social_getSocialMediaAccounts({ network: "reddit" })
-2. social_createSocialMediaPost({
-     message: "What we learned from shipping our new workflow",
-     account_ids: [789],
-     action: "draft",
-     additional: {
-       reddit: {
-         post: {
-           targets: [{
-             subreddit: "devtestsmp",
-             title: "What we learned from shipping our new workflow",
-             type: "self",
-             flairId: null,
-             flairText: null,
-             nsfw: false,
-             url: null
-           }]
-         }
-       }
-     }
-   })
-```
+- Accounts, draft listing/revisions, review bundles, and action selection: [references/operations.md](references/operations.md). Accountless drafts can be created, but the current draft listing requires connected account IDs; retain actual create-response IDs and disclose that listing limitation.
+- Platform-specific `additional` fields, supported media, and enums: [references/platform-settings.md](references/platform-settings.md). Read only the relevant platform before writing. Mastodon and Telegram have no dedicated additional-settings branch; Reddit requires `additional.reddit.post.targets`.
+- Analytics metrics, periods, status fields, and response shapes: [references/analytics.md](references/analytics.md). Missing/unsupported metrics are not zero; paginate comprehensive reports.
+- Local media intake and readiness: [references/assets.md](references/assets.md).
+- Concrete queue, scheduled-video, generated-image, Reddit, and auto-comment payloads: [references/examples.md](references/examples.md).
 
-### Link in the first comment after 5 minutes
+## Timing and completion
 
-```
-1. Preview and confirm both the main post and:
-   first comment: "Read the full guide: https://example.com/guide"
-   delay: 5 minutes after the post publishes
-2. social_createSocialMediaPost({
-     message: "We published a practical guide to better campaign reviews.",
-     account_ids: [123],
-     action: "schedule",
-     date: "2026-06-10 14:00",
-     comments: [{
-       message: "Read the full guide: https://example.com/guide",
-       delay: 300
-     }]
-   })
-```
-
-### Analytics: Account Overview
-
-```
-1. social_getSocialMediaAccounts({ network: "facebook" })
-2. social_getSocialMediaAnalyticsAggregated({ account_id: 789, date_from: "2026-05-01", date_to: "2026-05-31" })
-```
+For scheduling, resolve workspace settings and selected account metadata. The create tool has no timezone argument. Convert a user-specified timezone only after establishing the service's interpretation; retain a draft if a material conflict remains unresolved. Send `date` as `YYYY-MM-DD HH:MM`, with no seconds or timezone suffix.
 
-## Gotchas
+“Post now” requests `add_to_queue`; actual timing is service-determined and immediate delivery is not guaranteed. Report returned status/timing. “Save” or “draft” requests `action: "draft"`.
 
-- **Analytics `account_id` is an integer** — use the numeric `id` from `social_getSocialMediaAccounts`.
-- **Analytics date format** is `YYYY-MM-DD` (no time component, unlike post scheduling); never set `date_to` in the future.
-- **Unknown metrics are silently ignored** by `social_getSocialMediaAnalyticsRange` — check `references/analytics.md` for per-network availability.
-- **Audience data availability varies** — `social_getSocialMediaAnalyticsAudience` may return partial or empty data depending on the network.
-- **Post `date` format** must be `YYYY-MM-DD HH:MM` (24-hour, no seconds, no timezone — uses account timezone).
-- **Media** must be a Simplified asset UUID (from `generate-image` with `storage:"asset"`) or a publicly accessible URL — localhost does not work.
-- **Local media** uses `api_signAssetUpload` → direct storage PUT →
-  `api_registerAsset`; never send a local path to the hosted connector.
-- **`date` is required** when `action` is `schedule` — omit it for `add_to_queue` and `draft`.
-- **Platform character limits** — see `references/platform-settings.md`.
-- **Auto-comments** — `comments[].delay` is measured in seconds after the post
-  publishes. For X minutes use `X * 60`; the delay is not relative to the previous
-  comment, and comments do not support media.
-- **Reddit targets are required** — include at least one entry in
-  `additional.reddit.post.targets`; omit the `r/` prefix from `subreddit`.
-- **Instagram always requires `channel`** — include `channel: { value: "direct" }` for every Instagram post.
-- **TikTok `postType`** values are `video` and `photo` (not `image`); **channel** values are `direct` and `reminder` (not `business`).
-- **LinkedIn audience** value is `LOGGED_IN` (not `LOGGED_IN_MEMBERS`).
-- **Google `topicType`** only has `STANDARD`, `EVENT`, `OFFER` (no `PRODUCT`).
-- **Instagram story** — message must be empty (`""`), max 1 photo.
-- **Reels and Shorts require video** — Instagram reel, Facebook reel, YouTube short all require a video file in `media`; images are not allowed.
-- **YouTube always requires `post.title`** — include `additional.youtube.post` with a `title` for every YouTube video or short.
+For batches, retain each successful typed draft/group ID and continue only unfinished items. A successful call must still be inspected for actual output; do not invent IDs or duplicate successful drafts after a later failure. Publication and review-bundle approval remain separate.
Full technical diff · 3 changed fields

changed /description

BEFORE
"Manage your entire social media from Codex with Simplified — post, schedule, queue, draft, and analyze across Facebook, Instagram, TikTok, YouTube, LinkedIn, Pinterest, Threads, Bluesky, X/Twitter, Google Business, Mastodon, Reddit, and Telegram. Triggers: social media, post to, schedule post, publish on, social accounts, analytics, reach, impressions, engagement, followers growth, content calendar, auto-comments, link in first comment, attach local media, upload an image or video for a social post."
AFTER
"Create, retrieve, revise, schedule, or queue Simplified social posts and drafts; manage auto-comments and review bundles; retrieve account analytics. Use for direct social operations. For a content calendar, campaign strategy, or performance interpretation, use social-content-planner, cross-platform-campaign, or social-performance-analyst."

changed /included_files

BEFORE
[
  {
    "relative_path": "agents/openai.yaml",
    "size_in_bytes": 634
  },
  {
    "relative_path": "assets/simplified-icon-256.png",
    "size_in_bytes": 8191
  },
  {
    "relative_path": "assets/simplified-logo.png",
    "size_in_bytes": 6726
  },
  {
    "relative_path": "assets/simplified-treadmark-logo.png",
    "size_in_bytes": 18491
  },
  {
    "relative_path": "references/analytics.md",
    "size_in_bytes": 16686
  },
  {
    "relative_path": "references/assets.md",
    "size_in_bytes": 2762
  },
  {
    "relative_path": "references/platform-settings.md",
    "size_in_bytes": 11747
  }
]
AFTER
[
  {
    "relative_path": "agents/openai.yaml",
    "size_in_bytes": 634
  },
  {
    "relative_path": "assets/simplified-icon-256.png",
    "size_in_bytes": 8191
  },
  {
    "relative_path": "assets/simplified-logo.png",
    "size_in_bytes": 6726
  },
  {
    "relative_path": "assets/simplified-treadmark-logo.png",
    "size_in_bytes": 18491
  },
  {
    "relative_path": "references/analytics.md",
    "size_in_bytes": 18123
  },
  {
    "relative_path": "references/assets.md",
    "size_in_bytes": 3907
  },
  {
    "relative_path": "references/examples.md",
    "size_in_bytes": 2700
  },
  {
    "relative_path": "references/operations.md",
    "size_in_bytes": 5229
  },
  {
    "relative_path": "references/platform-settings.md",
    "size_in_bytes": 12448
  }
]

changed /skill_md_contents

BEFORE
"---\nname: simplified-social\ndescription: >-\n  Manage your entire social media from Codex with Simplified — post, schedule,\n  queue, draft, and analyze across Facebook, Instagram, TikTok, YouTube,\n  LinkedIn, Pinterest, Threads, Bluesky, X/Twitter, Google Business, Mastodon,\n  Reddit, and Telegram. Triggers: social media, post to, schedule post, publish\n  on, social accounts, analytics, reach, impressions, engagement, followers\n  growth, content calendar, auto-comments, link in first comment, attach local\n  media, upload an image or video for a social post.\n---\n\n# Simplified Social Media\n\nSchedule, queue, and draft social media posts, add timed auto-comments, and\nretrieve analytics across 13 platforms using Simplified.com.\n\n## Connector\n\nAll tools (`social_getSocialMediaAccounts`, `social_createSocialMediaPost`,\n`api_createAsset`, etc.) are provided by the **Simplified hosted MCP connector**\n(`https://apikit.simplified.com/mcp`). They are not built-in tools.\n\nThe connector is **OAuth-secured** — Codex walks the OAuth flow; there is no API key to set.\n\n## IMPORTANT: Before Any Operation\n\nIf any tool call returns a **401 / Unauthorized**, the Simplified connector is not authorized:\n\n1. **Stop immediately** — do not retry the failed call.\n2. **Inform the user** that they need to connect Simplified (authorize the connector) before social tools will work.\n3. **Do not proceed** with the original request until the connector is authorized.\n\n## Setup\n\n1. Sign up at [simplified.com](https://simplified.com).\n2. Connect your social media accounts in the Simplified dashboard.\n3. Enable the Simplified connector in Codex and complete the OAuth authorization.\n\n## Core Workflow\n\nAlways follow this sequence: **Discover → Select → Compose → Confirm → Publish**\n\n### Step 1: Discover Accounts\n\nCall `social_getSocialMediaAccounts` to list connected accounts. Optionally filter by network.\n\n```\nsocial_getSocialMediaAccounts({ network: \"instagram\" })\n```\n\nReturns `{ accounts: [...] }` where each account has `id` (integer), `name`, and `type` (see type values below).\n\nIf `social_getSocialMediaAccounts` returns an empty list, stop and inform the user with this message:\n\n> **No social media accounts connected yet.**\n>\n> You're one step away from managing your entire social media presence without leaving your editor. Connect your accounts in the [Simplified dashboard](https://app.simplified.com) and you'll be able to:\n>\n> - 📅 Schedule and publish posts to Facebook, Instagram, TikTok, YouTube, LinkedIn, Pinterest, Threads, Bluesky, X/Twitter, Google Business, Mastodon, Reddit, and Telegram — with a single command\n> - 📊 Pull analytics, track reach, engagement and follower growth across all platforms\n> - 🤖 Let your AI agent run full social media campaigns autonomously\n>\n> Takes 2 minutes to connect. No code required.\n\n### Step 2: Select Target Accounts\n\nPick one or more `account_ids` from the results. You can post to multiple accounts in a single call.\n\n### Step 3: Compose the Post\n\nBuild the post payload:\n- `message` (required) — the post text, max 5000 chars at the connector boundary\n  (tighter per-platform limits apply)\n- `account_ids` (required for publishing actions) — array of target account IDs\n- `action` (required) — `schedule`, `add_to_queue`, or `draft`\n- `date` — required for `schedule`, format: `YYYY-MM-DD HH:MM`\n- `media` — array (max 10) of **Simplified asset UUIDs** or public media URLs\n- `comments` — ordered auto-comments, each with `message` and a nonnegative\n  `delay` in seconds after the post publishes; comments cannot include media\n- `additional` — platform-specific settings (see below)\n\n**Attaching a generated image:** `media` accepts Simplified **asset UUIDs**, resolved server-side to fresh permanent URLs at publish time — exactly what the **generate-image** skill returns with `storage:\"asset\"`. Pass that `asset_id` straight into `media`.\n\n**Attaching a local file:** never pass a client-local path to the hosted server.\nRead [references/assets.md](references/assets.md), then follow the UI-equivalent\nflow: `api_signAssetUpload` → direct client PUT to signed storage →\n`api_registerAsset`. Poll `api_getAsset` until `status=4`, then pass that exact UUID\ninto `media`. Never expose the signed upload URL or attach Simplified auth to the\nstorage PUT.\n\n### Step 4: Confirm, then Publish\n\nPublishing is outward-facing. For `schedule` / `add_to_queue`, **show the composed post to the user and get explicit confirmation first** (drafting first with `action:\"draft\"` is a good way to preview). Then call `social_createSocialMediaPost`.\n\nIf the post includes auto-comments, the confirmation must show each comment's text\nand post-relative delay. For “link in first comment after X minutes,” convert\nnonnegative minutes to an integer number of seconds with `delay = X * 60`.\n`delay` is measured in seconds after the post publishes, not after the previous\ncomment. Comments execute in array order. Do not move the comment text into the\nmain post.\n\n**Show returned URLs as links, never embed them.** Any URL these tools return\n(review-bundle links, published-post URLs, media URLs) must be presented as a plain\nURL or Markdown link — **never** Markdown image syntax (`![](url)`) and never\ninline-rendered. The user clicks the link; the agent does not render it.\n\n## Choosing the Right Analytics Tool\n\n| User asks about... | Tool to call |\n|---|---|\n| Trends over time, charts, metric growth/decline | `social_getSocialMediaAnalyticsRange` |\n| Specific posts, best/worst performing content | `social_getSocialMediaAnalyticsPosts` |\n| Account overview, KPIs, period summary | `social_getSocialMediaAnalyticsAggregated` |\n| Demographics, follower origins, age/gender breakdown | `social_getSocialMediaAnalyticsAudience` |\n| \"Show me analytics\" with no further context | `social_getSocialMediaAnalyticsAggregated` + `social_getSocialMediaAnalyticsRange` with key metrics |\n\n## Tool Reference\n\n### `social_getSocialMediaAccounts`\n\n| Parameter | Type   | Required | Description                          |\n|-----------|--------|----------|--------------------------------------|\n| `network` | string | No       | Filter by platform (see networks)    |\n\n**Networks (filter parameter):** `facebook`, `instagram`, `linkedin`, `tiktok`,\n`tiktokBusiness`, `youtube`, `pinterest`, `threads`, `google`, `bluesky`,\n`mastodon`, `reddit`, `telegram`\n\nReturns `{ accounts: [...] }`. Each account object:\n\n| Field  | Type    | Description |\n|--------|---------|-------------|\n| `id`   | integer | Account ID — use for all analytics calls and for `account_ids` in `social_createSocialMediaPost` |\n| `name` | string  | Account display name |\n| `type` | string  | Account type — see values below |\n\n**`type` values and their meaning:**\n\n| `type` value | Platform | Notes |\n|---|---|---|\n| `Facebook page` | Facebook | — |\n| `Instagram business` / `Instagram profile` | Instagram | — |\n| `Youtube account` | YouTube | — |\n| `TikTok profile` | TikTok Personal | use `tiktok` metrics set |\n| `TikTok profile (business)` | TikTok Business | use `tiktokBusiness` metrics set |\n| `LinkedIn company` | LinkedIn | use LinkedIn Company metrics set |\n| `LinkedIn profile` | LinkedIn | use LinkedIn Personal metrics set |\n| `Pinterest board` | Pinterest | — |\n| `Threads account` | Threads | — |\n| `Bluesky account` | Bluesky | — |\n| `Google Profile` | Google Business | — |\n| `Reddit account` | Reddit | `additional.reddit.post.targets` is required |\n\n### `social_createSocialMediaPost`\n\n| Parameter     | Type     | Required | Description                              |\n|---------------|----------|----------|------------------------------------------|\n| `message`     | string   | Yes      | Post text (connector max 5000 chars; tighter platform limits apply) |\n| `account_ids` | int[]    | For publish | Target account IDs from `social_getSocialMediaAccounts`; omit/empty for an accountless `draft` |\n| `action`      | string   | Yes      | `schedule`, `add_to_queue`, or `draft`   |\n| `date`        | string   | For `schedule` | Schedule datetime: `YYYY-MM-DD HH:MM` (not in the past) |\n| `media`       | string[] | No       | Asset UUIDs or public media URLs (max 10) |\n| `tags`        | int[]    | No       | Tag IDs |\n| `comments`    | object[] | No       | Ordered auto-comments: `{message, delay}`; `delay` is seconds after publish and must be ≥ 0 |\n| `additional`  | object   | Per platform | Platform-specific settings |\n\n### `social_getSocialMediaDrafts`\n\nLists unpublished drafts for selected accounts. `account_ids` is required and must\nbe a comma-separated string of numeric IDs returned by\n`social_getSocialMediaAccounts`, for example `\"123,456\"`. If a multi-account lookup\nreturns no rows when drafts are expected, retry once per account ID, merge the\nresults, and deduplicate by exact draft ID. This per-account fallback is read-only\nand must not create replacement drafts. Optional filters are `page`, `per_page`,\n`search`, `tz`, `order_by`, and `order` (`asc` or `desc`). Omit ordering by default;\nif the connector rejects an optional filter, retry without that filter rather than\ntreating the drafts as absent.\n\n### `social_updateSocialMediaDraft`\n\nUpdates one draft. `draft_id` is required. Optional fields are `message`, `media`,\n`tags`, `date`, `time`, and `timezone`. Only pass fields the user asked to change.\n\n### `social_createSocialMediaReviewBundle`\n\nCreates a shareable stakeholder-review package. `title` is required; `description`\nand `draft_ids` are optional. Prefer one call containing all selected draft IDs.\nDraft IDs must come from `social_getSocialMediaDrafts`; never fabricate them. The\nresponse includes `linkToReview`, which must be shown as a link and never embedded.\n\nThe hosted connector currently does not expose a separate tool for appending drafts\nto an existing bundle. Do not recreate an existing bundle unless the user explicitly\nasks for a replacement.\n\n### `social_getSocialMediaAnalyticsRange`\n\nRetrieves time-series data for selected metrics within a date range.\n\n| Parameter    | Type     | Required | Description                                                  |\n|--------------|----------|----------|--------------------------------------------------------------|\n| `account_id` | integer  | Yes      | Social media account ID (from `social_getSocialMediaAccounts`) |\n| `metrics`    | string[] | Yes      | List of metrics to retrieve (see `references/analytics.md`)  |\n| `date_from`  | string   | Yes      | Start date: `YYYY-MM-DD`                                     |\n| `date_to`    | string   | Yes      | End date: `YYYY-MM-DD` (never in the future)                 |\n| `tz`         | string   | No       | Timezone, e.g. `UTC`, `Europe/Warsaw` (default: `UTC`)       |\n\nReturns `data` (per-day series), `baseLine` (period totals with `prevValue`), and `additional` (windowed extras). See `references/analytics.md` for the full metric list, default metrics per network, and response examples.\n\n### `social_getSocialMediaAnalyticsPosts`\n\nRetrieves analytics for individual posts within a date range.\n\n| Parameter    | Type    | Required | Description                                             |\n|--------------|---------|----------|---------------------------------------------------------|\n| `account_id` | integer | Yes      | Social media account ID                                 |\n| `date_from`  | string  | Yes      | Start date: `YYYY-MM-DD`                                |\n| `date_to`    | string  | Yes      | End date: `YYYY-MM-DD`                                  |\n| `page`       | integer | No       | Page number (default: 1, minimum: 1)                    |\n| `per_page`   | integer | No       | Posts per page (default: 10, max: 100)                  |\n\nReturns paginated posts with per-post metrics. **Pagination:** use `per_page: 100`, start at `page: 1`, increment until `current_page >= pages_count` or `posts` is empty.\n\n### `social_getSocialMediaAnalyticsAggregated`\n\nRetrieves aggregated analytics (totals and averages) for an account within a date range.\n\n| Parameter    | Type    | Required | Description             |\n|--------------|---------|----------|-------------------------|\n| `account_id` | integer | Yes      | Social media account ID |\n| `date_from`  | string  | Yes      | Start date: `YYYY-MM-DD` |\n| `date_to`    | string  | Yes      | End date: `YYYY-MM-DD`  |\n\nReturns `data` plus `baseLine` with four KPIs: `impressions_aggregated`, `engagement_aggregated`, `followers_aggregated`, `publishing_aggregated` (each with `value` and `prevValue`).\n\n### `social_getSocialMediaAnalyticsAudience`\n\nRetrieves audience demographics and follower data for an account.\n\n| Parameter    | Type    | Required | Description                          |\n|--------------|---------|----------|--------------------------------------|\n| `account_id` | integer | Yes      | Social media account ID              |\n| `date_from`  | string  | Yes      | Start date: `YYYY-MM-DD`             |\n| `date_to`    | string  | Yes      | End date: `YYYY-MM-DD`              |\n| `tz`         | string  | No       | Timezone, e.g. `UTC`, `Europe/Warsaw` |\n\nReturns `audience_page_fans_gender_age`, `audience_page_fans_country`, `audience_page_fans_city`. Not all fields are available for every network.\n\n## Action Types\n\n| Action         | When to Use                                          | `date` Required? |\n|----------------|------------------------------------------------------|-------------------|\n| `schedule`     | Post at a specific date/time                         | Yes               |\n| `add_to_queue` | Publish as soon as possible (optimal-time queue)     | No                |\n| `draft`        | Save for later editing in the Simplified dashboard   | No                |\n\n**Default:** When the user doesn't specify timing (or says \"post now\"), use `add_to_queue` — it publishes ASAP; there is no separate immediate-publish action. When they give a date/time, use `schedule`. When they say \"save\" or \"draft\", use `draft`.\n\n## Platform Settings Quick Reference\n\nAll platform settings go inside the `additional` object, grouped by platform name. **Bold** = required. For full details see [references/platform-settings.md](references/platform-settings.md).\n\n| Platform       | Required additionals              | Optional additionals               |\n|----------------|-----------------------------------|------------------------------------|\n| Facebook       | **`postType`**                    | —                                  |\n| Instagram      | **`postType`**, **`channel`**     | `postReel` (reel only)             |\n| TikTok         | **`postType`**, **`channel`**, **`post`** | `postPhoto` (photo only)  |\n| TikTok Biz     | **`postType`**, **`post`**        | `postPhoto` (photo only)           |\n| YouTube        | **`postType`**, **`post`**        | —                                  |\n| LinkedIn       | **`audience`**                    | —                                  |\n| Pinterest      | **`post`**                        | —                                  |\n| Threads        | **`channel`**                     | —                                  |\n| Google         | **`post`**                        | —                                  |\n| Bluesky        | —                                 | —                                  |\n| Mastodon       | —                                 | —                                  |\n| Reddit         | **`post.targets`**                | target flair, NSFW flag, link URL  |\n| Telegram       | —                                 | —                                  |\n\nKey enum values:\n\n| Platform   | Field              | Values                              |\n|------------|--------------------|-------------------------------------|\n| Facebook   | `postType.value`   | `post`\\*, `reel`, `story`           |\n| Instagram  | `postType.value`   | `post`\\*, `reel`, `story`           |\n| Instagram  | `channel.value`    | `direct`\\*, `reminder`              |\n| TikTok     | `postType.value`   | `video`\\*, `photo`                  |\n| TikTok     | `channel.value`    | `direct`\\*, `reminder`              |\n| TikTok     | `post.privacyStatus` | `PUBLIC_TO_EVERYONE`\\*, `MUTUAL_FOLLOW_FRIENDS`, `FOLLOWER_OF_CREATOR`, `SELF_ONLY` |\n| YouTube    | `postType.value`   | `video`\\*, `short`                  |\n| YouTube    | `post.privacyStatus` | `\"\"`, `public`, `private`, `unlisted` |\n| LinkedIn   | `audience.value`   | `PUBLIC`\\*, `CONNECTIONS`, `LOGGED_IN` |\n| Threads    | `channel.value`    | `direct`\\*, `reminder`              |\n| Google     | `post.topicType`   | `STANDARD`\\*, `EVENT`, `OFFER`      |\n| Reddit     | `post.targets[].type` | `self`, `link`                    |\n\n\\* = default\n\n## Example Workflows\n\n### Simple Queue Post\n\n```\n1. social_getSocialMediaAccounts({ network: \"instagram\" })\n2. social_createSocialMediaPost({\n     message: \"Check out our new feature! 🚀\",\n     account_ids: [123],\n     action: \"add_to_queue\",\n     media: [\"https://cdn.example.com/image.jpg\"],\n     additional: {\n       instagram: { postType: { value: \"post\" }, channel: { value: \"direct\" } }\n     }\n   })\n```\n\n### Scheduled YouTube Short\n\n```\n1. social_getSocialMediaAccounts({ network: \"youtube\" })\n2. social_createSocialMediaPost({\n     message: \"Quick tip: how to use our API\",\n     account_ids: [456],\n     action: \"schedule\",\n     date: \"2026-06-10 14:00\",\n     media: [\"https://cdn.example.com/video.mp4\"],\n     additional: {\n       youtube: { postType: { value: \"short\" },\n         post: { title: \"API Quick Tip\", privacyStatus: \"public\", selfDeclaredMadeForKids: \"no\" } }\n     }\n   })\n```\n\n### Post a freshly generated image\n\n```\n1. (generate-image skill) → asset_id \"a1b2c3…\"\n2. social_getSocialMediaAccounts({ network: \"instagram\" })\n3. social_createSocialMediaPost({\n     message: \"Meet the new drop 👟\",\n     account_ids: [123],\n     action: \"draft\",\n     media: [\"a1b2c3…\"],                       // asset UUID from generate-image\n     additional: { instagram: { postType: { value: \"post\" }, channel: { value: \"direct\" } } }\n   })\n```\n\n### Reddit draft\n\n```\n1. social_getSocialMediaAccounts({ network: \"reddit\" })\n2. social_createSocialMediaPost({\n     message: \"What we learned from shipping our new workflow\",\n     account_ids: [789],\n     action: \"draft\",\n     additional: {\n       reddit: {\n         post: {\n           targets: [{\n             subreddit: \"devtestsmp\",\n             title: \"What we learned from shipping our new workflow\",\n             type: \"self\",\n             flairId: null,\n             flairText: null,\n             nsfw: false,\n             url: null\n           }]\n         }\n       }\n     }\n   })\n```\n\n### Link in the first comment after 5 minutes\n\n```\n1. Preview and confirm both the main post and:\n   first comment: \"Read the full guide: https://example.com/guide\"\n   delay: 5 minutes after the post publishes\n2. social_createSocialMediaPost({\n     message: \"We published a practical guide to better campaign reviews.\",\n     account_ids: [123],\n     action: \"schedule\",\n     date: \"2026-06-10 14:00\",\n     comments: [{\n       message: \"Read the full guide: https://example.com/guide\",\n       delay: 300\n     }]\n   })\n```\n\n### Analytics: Account Overview\n\n```\n1. social_getSocialMediaAccounts({ network: \"facebook\" })\n2. social_getSocialMediaAnalyticsAggregated({ account_id: 789, date_from: \"2026-05-01\", date_to: \"2026-05-31\" })\n```\n\n## Gotchas\n\n- **Analytics `account_id` is an integer** — use the numeric `id` from `social_getSocialMediaAccounts`.\n- **Analytics date format** is `YYYY-MM-DD` (no time component, unlike post scheduling); never set `date_to` in the future.\n- **Unknown metrics are silently ignored** by `social_getSocialMediaAnalyticsRange` — check `references/analytics.md` for per-network availability.\n- **Audience data availability varies** — `social_getSocialMediaAnalyticsAudience` may return partial or empty data depending on the network.\n- **Post `date` format** must be `YYYY-MM-DD HH:MM` (24-hour, no seconds, no timezone — uses account timezone).\n- **Media** must be a Simplified asset UUID (from `generate-image` with `storage:\"asset\"`) or a publicly accessible URL — localhost does not work.\n- **Local media** uses `api_signAssetUpload` → direct storage PUT →\n  `api_registerAsset`; never send a local path to the hosted connector.\n- **`date` is required** when `action` is `schedule` — omit it for `add_to_queue` and `draft`.\n- **Platform character limits** — see `references/platform-settings.md`.\n- **Auto-comments** — `comments[].delay` is measured in seconds after the post\n  publishes. For X minutes use `X * 60`; the delay is not relative to the previous\n  comment, and comments do not support media.\n- **Reddit targets are required** — include at least one entry in\n  `additional.reddit.post.targets`; omit the `r/` prefix from `subreddit`.\n- **Instagram always requires `channel`** — include `channel: { value: \"direct\" }` for every Instagram post.\n- **TikTok `postType`** values are `video` and `photo` (not `image`); **channel** values are `direct` and `reminder` (not `business`).\n- **LinkedIn audience** value is `LOGGED_IN` (not `LOGGED_IN_MEMBERS`).\n- **Google `topicType`** only has `STANDARD`, `EVENT`, `OFFER` (no `PRODUCT`).\n- **Instagram story** — message must be empty (`\"\"`), max 1 photo.\n- **Reels and Shorts require video** — Instagram reel, Facebook reel, YouTube short all require a video file in `media`; images are not allowed.\n- **YouTube always requires `post.title`** — include `additional.youtube.post` with a `title` for every YouTube video or short.\n"
AFTER
"---\nname: simplified-social\ndescription: Create, retrieve, revise, schedule, or queue Simplified social posts and drafts; manage auto-comments and review bundles; retrieve account analytics. Use for direct social operations. For a content calendar, campaign strategy, or performance interpretation, use social-content-planner, cross-platform-campaign, or social-performance-analyst.\n---\n\n# Simplified Social Media\n\nSchedule, queue, and draft social media posts, add timed auto-comments, and\nretrieve analytics across 13 platforms using Simplified.com.\n\n## Connector\n\nAll tools (`social_getSocialMediaAccounts`, `social_createSocialMediaPost`,\n`api_createAsset`, etc.) are provided by the **Simplified hosted MCP connector**\n(`https://apikit.simplified.com/mcp`). They are not built-in tools.\n\nThe connector is **OAuth-secured** — the connected client walks the OAuth flow; there is no API key to set.\n\n## IMPORTANT: Before Any Operation\n\nIf any tool call returns a **401 / Unauthorized**, the Simplified connector is not authorized:\n\n1. **Stop immediately** — do not retry the failed call.\n2. **Inform the user** that they need to connect Simplified (authorize the connector) before social tools will work.\n3. **Do not proceed** with the original request until the connector is authorized.\n\n## Setup\n\n1. Sign up at [simplified.com](https://simplified.com).\n2. Connect your social media accounts in the Simplified dashboard.\n3. Enable the Simplified connector in your client and complete the OAuth authorization.\n\n## Core Workflow\n\nFor publishing, follow **Discover → Select → Compose → Confirm → Publish**.\nFor drafts, resolve workspace/teamspace scope and compose; a connected account is optional.\nCarry an explicitly selected `space_id` through every related read, write, and poll.\n\n### Step 1: Discover Accounts\n\nCall `social_getSocialMediaAccounts` once without `network` to list connected accounts.\nThe `network` filter is deprecated; filter returned accounts client-side.\n\n```\nsocial_getSocialMediaAccounts({})\n```\n\nReturns `{ accounts: [...] }` where each account has `id` (integer), `name`, and `type` (see type values below).\n\nIf publishing or account-specific analytics requires an account and the list is empty,\nexplain that an account must be connected. For a requested draft, continue with\n`action: \"draft\"` and omit `account_ids`; do not block accountless drafting.\nFor account-dependent operations, explain which account needs connecting in [Simplified](https://app.simplified.com).\n\n### Step 2: Select Target Accounts\n\nPick one or more account IDs from the results and serialize them as strings for\nposting, e.g. `account_ids: [\"123\"]`. Analytics `account_id` remains an integer;\ndraft/post listing `account_ids` is a comma-separated string. You can post to\nmultiple accounts in a single call.\n\n### Step 3: Compose the Post\n\nBuild the post payload:\n- `message` (required) — the post text, max 5000 chars at the connector boundary\n  (tighter per-platform limits apply)\n- `account_ids` (required for publishing actions) — array of stringified target account IDs\n- `action` (required) — `schedule`, `add_to_queue`, or `draft`\n- `date` — required for `schedule`, format: `YYYY-MM-DD HH:MM`\n- `media` — array (max 10) of **Simplified asset UUIDs**, public media URLs, or `{url, thumbUrl}` objects for video with an explicit poster\n- `comments` — ordered auto-comments, each with `message` and a nonnegative\n  `delay` in seconds after the post publishes; comments cannot include media\n- `additional` — platform-specific settings (see below)\n\n**Attaching a generated image:** `media` accepts Simplified **asset UUIDs**, resolved server-side to fresh permanent URLs at publish time — exactly what the **generate-image** skill returns with `storage:\"asset\"`. Pass that `asset_id` straight into `media`.\n\n**Attaching a local file:** never pass a client-local path to the hosted server.\nRead [references/assets.md](references/assets.md), then follow the UI-equivalent\nflow: `api_signAssetUpload` → direct client PUT to signed storage →\n`api_registerAsset`. Poll `api_getAsset` until `status=4`, then pass that exact UUID\ninto `media`. Never expose the signed upload URL or attach Simplified auth to the\nstorage PUT.\n\n### Step 4: Confirm, then Publish\n\nPublishing is outward-facing. For `schedule` / `add_to_queue`, show the composed\npost, target accounts, timing, and auto-comments for approval. Existing explicit\nauthorization covering that exact content, targets, and timing is sufficient;\nask only when authorization is missing or the proposed publication changed.\nAn internal `action:\"draft\"` preview is useful when content still needs review.\nThen call `social_createSocialMediaPost`.\n\nIf the post includes auto-comments, the authorized publication plan must cover each comment's text\nand post-relative delay. For “link in first comment after X minutes,” convert\nnonnegative minutes to an integer number of seconds with `delay = X * 60`.\n`delay` is measured in seconds after the post publishes, not after the previous\ncomment. Comments execute in array order. Do not move the comment text into the\nmain post.\n\n**Media presentation.** Use a native media preview when the client supports it and the user wants to review the result. Otherwise show a usable link. Refresh expired asset URLs; do not download remote media merely to bypass client display restrictions. Review bundles and other web pages remain links.\n\n## Choosing the Right Analytics Tool\n\n| User asks about... | Tool to call |\n|---|---|\n| Trends over time, charts, metric growth/decline | `social_getSocialMediaAnalyticsRange` |\n| Specific posts, best/worst performing content | `social_getSocialMediaAnalyticsPosts` |\n| Account overview, KPIs, period summary | `social_getSocialMediaAnalyticsAggregated` |\n| Demographics, follower origins, age/gender breakdown | `social_getSocialMediaAnalyticsAudience` |\n| \"Show me analytics\" with no further context | `social_getSocialMediaAnalyticsAggregated` + `social_getSocialMediaAnalyticsRange` with key metrics |\n\n## Read details for the current operation\n\n- Accounts, draft listing/revisions, review bundles, and action selection: [references/operations.md](references/operations.md). Accountless drafts can be created, but the current draft listing requires connected account IDs; retain actual create-response IDs and disclose that listing limitation.\n- Platform-specific `additional` fields, supported media, and enums: [references/platform-settings.md](references/platform-settings.md). Read only the relevant platform before writing. Mastodon and Telegram have no dedicated additional-settings branch; Reddit requires `additional.reddit.post.targets`.\n- Analytics metrics, periods, status fields, and response shapes: [references/analytics.md](references/analytics.md). Missing/unsupported metrics are not zero; paginate comprehensive reports.\n- Local media intake and readiness: [references/assets.md](references/assets.md).\n- Concrete queue, scheduled-video, generated-image, Reddit, and auto-comment payloads: [references/examples.md](references/examples.md).\n\n## Timing and completion\n\nFor scheduling, resolve workspace settings and selected account metadata. The create tool has no timezone argument. Convert a user-specified timezone only after establishing the service's interpretation; retain a draft if a material conflict remains unresolved. Send `date` as `YYYY-MM-DD HH:MM`, with no seconds or timezone suffix.\n\n“Post now” requests `add_to_queue`; actual timing is service-determined and immediate delivery is not guaranteed. Report returned status/timing. “Save” or “draft” requests `action: \"draft\"`.\n\nFor batches, retain each successful typed draft/group ID and continue only unfinished items. A successful call must still be inspected for actual output; do not invent IDs or duplicate successful drafts after a later failure. Publication and review-bundle approval remain separate.\n"
Full snapshot data
{
  "description": "Create, retrieve, revise, schedule, or queue Simplified social posts and drafts; manage auto-comments and review bundles; retrieve account analytics. Use for direct social operations. For a content calendar, campaign strategy, or performance interpretation, use social-content-planner, cross-platform-campaign, or social-performance-analyst.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 634
    },
    {
      "relative_path": "assets/simplified-icon-256.png",
      "size_in_bytes": 8191
    },
    {
      "relative_path": "assets/simplified-logo.png",
      "size_in_bytes": 6726
    },
    {
      "relative_path": "assets/simplified-treadmark-logo.png",
      "size_in_bytes": 18491
    },
    {
      "relative_path": "references/analytics.md",
      "size_in_bytes": 18123
    },
    {
      "relative_path": "references/assets.md",
      "size_in_bytes": 3907
    },
    {
      "relative_path": "references/examples.md",
      "size_in_bytes": 2700
    },
    {
      "relative_path": "references/operations.md",
      "size_in_bytes": 5229
    },
    {
      "relative_path": "references/platform-settings.md",
      "size_in_bytes": 12448
    }
  ],
  "name": "simplified-social",
  "skill_md_contents": "---\nname: simplified-social\ndescription: Create, retrieve, revise, schedule, or queue Simplified social posts and drafts; manage auto-comments and review bundles; retrieve account analytics. Use for direct social operations. For a content calendar, campaign strategy, or performance interpretation, use social-content-planner, cross-platform-campaign, or social-performance-analyst.\n---\n\n# Simplified Social Media\n\nSchedule, queue, and draft social media posts, add timed auto-comments, and\nretrieve analytics across 13 platforms using Simplified.com.\n\n## Connector\n\nAll tools (`social_getSocialMediaAccounts`, `social_createSocialMediaPost`,\n`api_createAsset`, etc.) are provided by the **Simplified hosted MCP connector**\n(`https://apikit.simplified.com/mcp`). They are not built-in tools.\n\nThe connector is **OAuth-secured** — the connected client walks the OAuth flow; there is no API key to set.\n\n## IMPORTANT: Before Any Operation\n\nIf any tool call returns a **401 / Unauthorized**, the Simplified connector is not authorized:\n\n1. **Stop immediately** — do not retry the failed call.\n2. **Inform the user** that they need to connect Simplified (authorize the connector) before social tools will work.\n3. **Do not proceed** with the original request until the connector is authorized.\n\n## Setup\n\n1. Sign up at [simplified.com](https://simplified.com).\n2. Connect your social media accounts in the Simplified dashboard.\n3. Enable the Simplified connector in your client and complete the OAuth authorization.\n\n## Core Workflow\n\nFor publishing, follow **Discover → Select → Compose → Confirm → Publish**.\nFor drafts, resolve workspace/teamspace scope and compose; a connected account is optional.\nCarry an explicitly selected `space_id` through every related read, write, and poll.\n\n### Step 1: Discover Accounts\n\nCall `social_getSocialMediaAccounts` once without `network` to list connected accounts.\nThe `network` filter is deprecated; filter returned accounts client-side.\n\n```\nsocial_getSocialMediaAccounts({})\n```\n\nReturns `{ accounts: [...] }` where each account has `id` (integer), `name`, and `type` (see type values below).\n\nIf publishing or account-specific analytics requires an account and the list is empty,\nexplain that an account must be connected. For a requested draft, continue with\n`action: \"draft\"` and omit `account_ids`; do not block accountless drafting.\nFor account-dependent operations, explain which account needs connecting in [Simplified](https://app.simplified.com).\n\n### Step 2: Select Target Accounts\n\nPick one or more account IDs from the results and serialize them as strings for\nposting, e.g. `account_ids: [\"123\"]`. Analytics `account_id` remains an integer;\ndraft/post listing `account_ids` is a comma-separated string. You can post to\nmultiple accounts in a single call.\n\n### Step 3: Compose the Post\n\nBuild the post payload:\n- `message` (required) — the post text, max 5000 chars at the connector boundary\n  (tighter per-platform limits apply)\n- `account_ids` (required for publishing actions) — array of stringified target account IDs\n- `action` (required) — `schedule`, `add_to_queue`, or `draft`\n- `date` — required for `schedule`, format: `YYYY-MM-DD HH:MM`\n- `media` — array (max 10) of **Simplified asset UUIDs**, public media URLs, or `{url, thumbUrl}` objects for video with an explicit poster\n- `comments` — ordered auto-comments, each with `message` and a nonnegative\n  `delay` in seconds after the post publishes; comments cannot include media\n- `additional` — platform-specific settings (see below)\n\n**Attaching a generated image:** `media` accepts Simplified **asset UUIDs**, resolved server-side to fresh permanent URLs at publish time — exactly what the **generate-image** skill returns with `storage:\"asset\"`. Pass that `asset_id` straight into `media`.\n\n**Attaching a local file:** never pass a client-local path to the hosted server.\nRead [references/assets.md](references/assets.md), then follow the UI-equivalent\nflow: `api_signAssetUpload` → direct client PUT to signed storage →\n`api_registerAsset`. Poll `api_getAsset` until `status=4`, then pass that exact UUID\ninto `media`. Never expose the signed upload URL or attach Simplified auth to the\nstorage PUT.\n\n### Step 4: Confirm, then Publish\n\nPublishing is outward-facing. For `schedule` / `add_to_queue`, show the composed\npost, target accounts, timing, and auto-comments for approval. Existing explicit\nauthorization covering that exact content, targets, and timing is sufficient;\nask only when authorization is missing or the proposed publication changed.\nAn internal `action:\"draft\"` preview is useful when content still needs review.\nThen call `social_createSocialMediaPost`.\n\nIf the post includes auto-comments, the authorized publication plan must cover each comment's text\nand post-relative delay. For “link in first comment after X minutes,” convert\nnonnegative minutes to an integer number of seconds with `delay = X * 60`.\n`delay` is measured in seconds after the post publishes, not after the previous\ncomment. Comments execute in array order. Do not move the comment text into the\nmain post.\n\n**Media presentation.** Use a native media preview when the client supports it and the user wants to review the result. Otherwise show a usable link. Refresh expired asset URLs; do not download remote media merely to bypass client display restrictions. Review bundles and other web pages remain links.\n\n## Choosing the Right Analytics Tool\n\n| User asks about... | Tool to call |\n|---|---|\n| Trends over time, charts, metric growth/decline | `social_getSocialMediaAnalyticsRange` |\n| Specific posts, best/worst performing content | `social_getSocialMediaAnalyticsPosts` |\n| Account overview, KPIs, period summary | `social_getSocialMediaAnalyticsAggregated` |\n| Demographics, follower origins, age/gender breakdown | `social_getSocialMediaAnalyticsAudience` |\n| \"Show me analytics\" with no further context | `social_getSocialMediaAnalyticsAggregated` + `social_getSocialMediaAnalyticsRange` with key metrics |\n\n## Read details for the current operation\n\n- Accounts, draft listing/revisions, review bundles, and action selection: [references/operations.md](references/operations.md). Accountless drafts can be created, but the current draft listing requires connected account IDs; retain actual create-response IDs and disclose that listing limitation.\n- Platform-specific `additional` fields, supported media, and enums: [references/platform-settings.md](references/platform-settings.md). Read only the relevant platform before writing. Mastodon and Telegram have no dedicated additional-settings branch; Reddit requires `additional.reddit.post.targets`.\n- Analytics metrics, periods, status fields, and response shapes: [references/analytics.md](references/analytics.md). Missing/unsupported metrics are not zero; paginate comprehensive reports.\n- Local media intake and readiness: [references/assets.md](references/assets.md).\n- Concrete queue, scheduled-video, generated-image, Reddit, and auto-comment payloads: [references/examples.md](references/examples.md).\n\n## Timing and completion\n\nFor scheduling, resolve workspace settings and selected account metadata. The create tool has no timezone argument. Convert a user-specified timezone only after establishing the service's interpretation; retain a draft if a material conflict remains unresolved. Send `date` as `YYYY-MM-DD HH:MM`, with no seconds or timezone suffix.\n\n“Post now” requests `add_to_queue`; actual timing is service-determined and immediate delivery is not guaranteed. Report returned status/timing. “Save” or “draft” requests `action: \"draft\"`.\n\nFor batches, retain each successful typed draft/group ID and continue only unfinished items. A successful call must still be inspected for actual output; do not invent IDs or duplicate successful drafts after a later failure. Publication and review-bundle approval remain separate.\n"
}

SHA-256 of public snapshot: cd42c1cf911549df1718f6c4237a114a5ac96218bac3177ba308acb21694aab4