← PubloraCONTENT HISTORY

Update to Publora

Snapshot Oct 26, 2026 · 06:08 UTC · version 1.1.3

WHAT CHANGED

Package or technical metadata updated

Package or technical metadata updated

Observed in package metadata. These changes alone do not establish a new customer-facing feature.

Save Publora and check future changes in Following.

Up to 3 plugins free · no card required.

All fields and original values.

These are saved file metadata. Open a changed file to read its text edits.

Package file

Before

Sep 30, 2026 · 22:55 UTC

c8b0da0080a4fc55eb85a4a11364fdd7c60173cae5cbf69e64d821b9ff77f593

After

Oct 26, 2026 · 06:08 UTC

0718cf5a324f01041b64749fb5da903b3ac57aab6dadf139e3073a83a324aaad

Package file

Before

Sep 30, 2026 · 22:55 UTC

127

After

Oct 26, 2026 · 06:08 UTC

99

Package file

Before

Sep 30, 2026 · 22:55 UTC

{"sha256":"fab77d22eaa42221c96ac01b814da0ec31292d05cc184d9b38f5e07939abbbf8","size":2211}

After

Oct 26, 2026 · 06:08 UTC

Not present

Package file

Before

Sep 30, 2026 · 22:55 UTC

Not present

After

Oct 26, 2026 · 06:08 UTC

{"sha256":"842747fe2032c3840306dc5f9386145132d9290911bb6fc15ea176a6fa9d1615","size":6106}

Compare saved observations

Download comparison JSON

plugin.json

− removed · + added

--- before
+++ after
@@ -0,0 +1,140 @@
+{
+  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
+  "name": "app-6a7074e91c008191942479b885fb0d9b",
+  "version": "1.1.3",
+  "description": "Publish and schedule social posts across ten networks from ChatGPT.",
+  "author": {
+    "name": "CCCrafts",
+    "url": "https://publora.com"
+  },
+  "homepage": "https://publora.com",
+  "license": "MIT",
+  "keywords": [
+    "social media",
+    "scheduling",
+    "publishing",
+    "linkedin",
+    "agency"
+  ],
+  "extensions": {
+    "com.openai": {
+      "interface": {
+        "displayName": "Publora",
+        "shortDescription": "Post to 10 social networks",
+        "longDescription": "Publora helps you draft, schedule and publish social posts from ChatGPT or Codex across ten networks: LinkedIn, X, Instagram, Threads, TikTok, YouTube, Facebook, Bluesky, Mastodon and Telegram.\n\nStart by checking connected accounts. If none are connected, get a link and steps to add one. Prepare and approve a draft, then choose a date, time and time zone to schedule it. Attach images or videos from the chat, a public URL or an uploaded file, and check the saved result.\n\nManage drafts and the publishing queue. When you explicitly ask to publish immediately, Publora uses the server's Publish Now action. On LinkedIn, it can comment, react, reshare and use supported mentions. For personal Bluesky and Mastodon accounts, it reads available profile and post statistics; returned counters depend on platform support.\n\nAgency tools manage client workspaces, team access, channel connection links, drafts, media, client approval rounds, scheduling and signed Workspace webhooks for published or failed posts. Agency work uses its own workspace permissions and tools.\n\nA Publora account is required. Connect a social account before scheduling or publishing.",
+        "developerName": "CCCrafts",
+        "category": "Communication",
+        "websiteURL": "https://publora.com",
+        "privacyPolicyURL": "https://publora.com/privacy",
+        "termsOfServiceURL": "https://publora.com/terms",
+        "defaultPrompt": [
+          "Show my connected accounts and example prompts to draft and schedule a post. If none, give me a link and steps to connect one.",
+          "Make an image for this post and attach it.",
+          "What do I have scheduled this week?"
+        ],
+        "composerIcon": "./assets/icon.png",
+        "logo": "./assets/logo.png",
+        "supportURL": "https://docs.publora.com"
+      },
+      "onboardingSkill": "./skills/publora-setup/SKILL.md",
+      "review": {
+        "prompts": [
+          "Show my connected accounts and example prompts to draft and schedule a post. If none, give me a link and steps to connect one.",
+          "Help me draft my first post, then choose when to schedule it.",
+          "Show my agency client workspaces."
+        ],
+        "test_cases": {
+          "positive": [
+            {
+              "description": "P1 \u2014 Try now with connected personal accounts. Use a reviewer account with at least one active social connection. The request is read-only.",
+              "prompt": "Show my connected accounts and example prompts to draft and schedule a post. If none, give me a link and steps to connect one.",
+              "tools_triggered": "list_connections",
+              "expected_behavior": "Return only actual accounts and their connection states. Give two short examples adapted to an active account: drafting a post and scheduling a draft with date, time and time zone. Do not call create_post, update_post or any publishing tool."
+            },
+            {
+              "description": "P2 \u2014 Create a personal draft on a dedicated test account with an active LinkedIn connection. If multiple LinkedIn targets exist, select one explicitly before the write.",
+              "prompt": "Draft a short LinkedIn post announcing our new changelog page. Keep it as a draft; we will choose a publishing time after I approve the text.",
+              "tools_triggered": "list_connections, create_post, get_post",
+              "expected_behavior": "Prepare the text for review and save an authorized draft using an exact platformId from list_connections. Omit scheduledTime and publishNow. Report the real postGroupId and verify draft status with get_post. Do not ask for a time or schedule before text approval."
+            },
+            {
+              "description": "P3 \u2014 Schedule the existing test draft from P2. In this conversation the user has approved its exact text and selected account. Use a dedicated test channel; interpret tomorrow against the run date and check the schedule horizon.",
+              "prompt": "I approve that draft and its LinkedIn account. Schedule it for tomorrow at 09:00 UTC.",
+              "tools_triggered": "get_post, update_post, account_context when needed",
+              "expected_behavior": "Reuse the same postGroupId. Call update_post with status scheduled and the resolved future scheduledTime, omitting publishNow. Respect media and quota validation. Verify status, target and effective time with get_post; report the time in UTC. Do not create a duplicate or claim it is already published."
+            },
+            {
+              "description": "P4 \u2014 Attach a generated chat image to a dedicated personal LinkedIn draft. The host must support image generation and file resolution; no network publication is requested.",
+              "prompt": "Generate an image of a green hummingbird on white, then create a LinkedIn draft saying 'Ship it' and attach that image. Keep it as a draft.",
+              "tools_triggered": "list_connections, create_post, attach_media, get_post",
+              "expected_behavior": "Use the real generated file reference accepted by the host. Create the draft without scheduledTime or publishNow; attach to its postGroupId. Verify ready media and draft state with get_post. Do not fabricate a URL or report a pending attachment as ready."
+            },
+            {
+              "description": "P5 \u2014 Read the personal queue. Use the user's known time zone or ask if missing. The queue may be empty and no fixed post count is assumed.",
+              "prompt": "What do I have scheduled this week?",
+              "tools_triggered": "list_posts",
+              "expected_behavior": "Use status scheduled and the resolved week's date range. Follow pagination when needed. Report only returned targets, times and statuses; explicitly handle an empty result without inventing posts or changing the queue."
+            },
+            {
+              "description": "P6 \u2014 Read statistics on connected personal Bluesky or Mastodon accounts. Permission restrictions are valid outcomes, not zero counts.",
+              "prompt": "Show follower counts for my connected Bluesky and Mastodon accounts.",
+              "tools_triggered": "list_connections, profile_stats",
+              "expected_behavior": "Use real connection IDs and supported platform values. Report only available counters; explain availability errors, preserve null versus numeric zero, and disclose caching when relevant. Do not query unsupported networks or use Company accounts."
+            },
+            {
+              "description": "P7 \u2014 Read post statistics on a connected personal Bluesky or Mastodon account with an existing published post. If no suitable post exists, explain the missing prerequisite without a write.",
+              "prompt": "How many reactions and reposts did my latest published Mastodon post get?",
+              "tools_triggered": "list_connections, list_posts or get_post, post_stats",
+              "expected_behavior": "Obtain the published postedId from get_post or list_posts, not a Publora group ID. Read post_stats for that connection and post. Report counters only when returned; otherwise explain the null or availability restriction. Do not invent a count."
+            },
+            {
+              "description": "P8 \u2014 Discover Agency workspaces and channels. Use the review account with Agency access and at least one accessible client workspace; an empty channel list is allowed.",
+              "prompt": "Show my agency clients and the connected channels for a client workspace I choose.",
+              "tools_triggered": "company_list_contexts, company_get_workspace_context, company_list_channels",
+              "expected_behavior": "Call company_list_contexts with arguments {}. Show only returned companies/workspaces; let the user select one if missing. Read its capabilities with company_get_workspace_context and connected channels with company_list_channels using the exact workspaceId. Handle an empty list. Do not infer Owner authority, mutate data or substitute personal tools when Agency access is unavailable."
+            },
+            {
+              "description": "P9 \u2014 Safe personal connection test using the reserved discard target; no real social account is needed. This tests acknowledgement, not scheduling or delivery.",
+              "prompt": "Test the connection by sending 'hello from ChatGPT' to publora-playground only.",
+              "tools_triggered": "create_post",
+              "expected_behavior": "Use platforms containing only publora-playground and the requested content. Expect an acknowledged playground result; nothing is saved or published. Do not create a real account target, invent a saved draft ID or claim this verifies real-world scheduling."
+            },
+            {
+              "description": "P10 \u2014 List the Workspace webhooks. Use an Agency reviewer with Workspace settings permission and select an actual accessible workspace. An empty list is valid; this request is read-only.",
+              "prompt": "Show the webhooks configured for the Agency workspace I selected. Do not change anything.",
+              "tools_triggered": "company_list_contexts, company_list_webhooks",
+              "expected_behavior": "Resolve the exact workspaceId, then call company_list_webhooks with workspaceId at the top level. Report actual webhook names, URLs, events and active states, or an empty list. Explain access errors without substituting personal webhooks. Never claim a signing secret can be recovered from list results. Do not change any webhook."
+            },
+            {
+              "description": "P11 \u2014 Create an inactive Workspace webhook on a dedicated test workspace. Before this prompt, the reviewer selects the workspace. The receiver URL is given in the prompt and no live event delivery is requested.",
+              "prompt": "Create an inactive webhook named Review test in that workspace, with the receiver URL https://example.com/publora-review-webhook, for post.published and post.failed.",
+              "tools_triggered": "company_list_contexts, company_create_webhook, company_list_webhooks",
+              "expected_behavior": "Require the actual selected workspace; the receiver URL is supplied in the prompt. Call company_create_webhook with top-level workspaceId, stable idempotencyKey, name, url, distinct events and isActive false. Handle data.secret securely without repeating it in routine summaries. After uncertainty reuse the identical body and key. Verify the returned webhookId and inactive configuration with company_list_webhooks. Do not test-send, enable, publish or rotate the secret."
+            }
+          ],
+          "negative": [
+            {
+              "description": "N1 \u2014 General marketing advice. Answer with general guidance; do not call Publora tools because no account data, posting or supported statistics were requested.",
+              "prompt": "What are three ways to make a product announcement clearer?"
+            },
+            {
+              "description": "N2 \u2014 Unsupported LinkedIn reach through this MCP. Explain that LinkedIn reach is not exposed here and suggest the network's analytics. Do not use Instagram/Bluesky/Mastodon statistics as a substitute or invoke publishing tools.",
+              "prompt": "How many people saw my last LinkedIn post?"
+            },
+            {
+              "description": "N3 \u2014 Deleting an account in the social network is outside Publora's post-management tools. Explain the limit and refer to Instagram account settings. Do not call delete_post, disconnect a channel or claim account deletion.",
+              "prompt": "Delete my Instagram account."
+            }
+          ]
+        },
+        "demo_recording_url": "https://youtu.be/nUn4KiQj6aA",
+        "commerce": false
+      },
+      "publication": {
+        "release_notes": "Replaces Agency action-dispatch tools with 48 separately exposed operations, each with its own input schema and annotations (68 tools total). Updates server instructions and skills to use explicit operations, safe retries and correct workspace permissions. Keeps one Publora plugin, the existing OAuth connection, and onboarding from draft approval to an agreed scheduling time. Updates review cases for the new tool names.",
+        "countries": []
+      },
+      "apps": "./.app.json"
+    }
+  }
+}
Full technical diff · 14 changed fields

changed /files/.app.json/sha256

BEFORE
"c8b0da0080a4fc55eb85a4a11364fdd7c60173cae5cbf69e64d821b9ff77f593"
AFTER
"0718cf5a324f01041b64749fb5da903b3ac57aab6dadf139e3073a83a324aaad"

changed /files/.app.json/size

BEFORE
127
AFTER
99

removed /files/.codex-plugin~1plugin.json

BEFORE
{
  "sha256": "fab77d22eaa42221c96ac01b814da0ec31292d05cc184d9b38f5e07939abbbf8",
  "size": 2211
}
AFTER
Field is absent

added /files/assets~1icon.png

BEFORE
Field was absent
AFTER
{
  "sha256": "842747fe2032c3840306dc5f9386145132d9290911bb6fc15ea176a6fa9d1615",
  "size": 6106
}

added /files/assets~1logo.png

BEFORE
Field was absent
AFTER
{
  "sha256": "d375636f69703408b672b303177e25aa0ee40e6cf65ebbc706dbf4772bd65429",
  "size": 28149
}

added /files/mcp.json

BEFORE
Field was absent
AFTER
{
  "sha256": "9d684ded938d18fc0b963f9ac199412536821ec6a6b43d9ffaed0f679ebe32cd",
  "size": 197
}

added /files/plugin.json

BEFORE
Field was absent
AFTER
{
  "sha256": "e5cfbdb25f0e76b3283c0a7e7b3f8e61e45e1ca4937e51e74438b5d4556a0a77",
  "size": 13118
}

changed /files/skills~1publora-linkedin-engagement~1SKILL.md/sha256

BEFORE
"71cf0dde0ba36ce6baf0453288a0b8df2aa7e67e9a72bece547397787efbe1ad"
AFTER
"e801d8fa4cfa95dd2c13a6ad783e9a36086596578ba14f2623cf6fbc1c643da0"

changed /files/skills~1publora-linkedin-engagement~1SKILL.md/size

BEFORE
2948
AFTER
4079

changed /files/skills~1publora-media~1SKILL.md/sha256

BEFORE
"dcda833b6083889416d012281c1580f22635aae056bcf8840f314a9155ba0e5b"
AFTER
"572c7268afa5914877ff7c2fcb058c8d62fa3d80fb467a4b880964d66b88a5ea"

changed /files/skills~1publora-media~1SKILL.md/size

BEFORE
2926
AFTER
4581

changed /files/skills~1publora-publishing~1SKILL.md/sha256

BEFORE
"eed417ba25568c3c01ef2aa540ff0cac6c1f5688ad81b53ca3c2c32b393b08f7"
AFTER
"99b621dc501796e3f110db309f897fbd33e5dc733b16e0aa1d1da4bced2373c3"

changed /files/skills~1publora-publishing~1SKILL.md/size

BEFORE
4365
AFTER
14910

added /files/skills~1publora-setup~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "0633229e4a3f6a2fa34aaa32e25d2388a48b84c8e54d10551ce49bce1d8915d7",
  "size": 4311
}
Full snapshot data
{
  "files": {
    ".app.json": {
      "sha256": "0718cf5a324f01041b64749fb5da903b3ac57aab6dadf139e3073a83a324aaad",
      "size": 99
    },
    "assets/icon.png": {
      "sha256": "842747fe2032c3840306dc5f9386145132d9290911bb6fc15ea176a6fa9d1615",
      "size": 6106
    },
    "assets/logo.png": {
      "sha256": "d375636f69703408b672b303177e25aa0ee40e6cf65ebbc706dbf4772bd65429",
      "size": 28149
    },
    "mcp.json": {
      "sha256": "9d684ded938d18fc0b963f9ac199412536821ec6a6b43d9ffaed0f679ebe32cd",
      "size": 197
    },
    "plugin.json": {
      "sha256": "e5cfbdb25f0e76b3283c0a7e7b3f8e61e45e1ca4937e51e74438b5d4556a0a77",
      "size": 13118
    },
    "skills/publora-linkedin-engagement/SKILL.md": {
      "sha256": "e801d8fa4cfa95dd2c13a6ad783e9a36086596578ba14f2623cf6fbc1c643da0",
      "size": 4079
    },
    "skills/publora-media/SKILL.md": {
      "sha256": "572c7268afa5914877ff7c2fcb058c8d62fa3d80fb467a4b880964d66b88a5ea",
      "size": 4581
    },
    "skills/publora-publishing/SKILL.md": {
      "sha256": "99b621dc501796e3f110db309f897fbd33e5dc733b16e0aa1d1da4bced2373c3",
      "size": 14910
    },
    "skills/publora-setup/SKILL.md": {
      "sha256": "0633229e4a3f6a2fa34aaa32e25d2388a48b84c8e54d10551ce49bce1d8915d7",
      "size": 4311
    }
  }
}

SHA-256 of public snapshot: 3ed20e0684b4dcfdf563a35fc88713247b83ba8dac4f3c38d9f767194274a26d