{"id":11881,"plugin_id":"plugin_asdk_app_6a77e3320e108191b0955377b387accf","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:00:28.525Z","digest":"6bb9b125d061a9d57f9398a75d32e0292e2a3fa9a5de8c748cedee3c07c8cd1e","against":null,"payload":{"description":"Write, edit and publish articles for a brand. Use for drafting an article, generating a brief or topic ideas, bulk creating content, adding a featured image, translating an article, exporting, or publishing to a connected CMS such as WordPress, Webflow, Shopify or Squarespace. Do not use for keyword research or for measuring how content performs.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":2450}],"name":"content-production","skill_md_contents":"---\nname: content-production\ndescription: Write, edit and publish articles for a brand. Use for drafting an article, generating a brief or topic ideas, bulk creating content, adding a featured image, translating an article, exporting, or publishing to a connected CMS such as WordPress, Webflow, Shopify or Squarespace. Do not use for keyword research or for measuring how content performs.\n---\n\n# Content production\n\nTake an article from idea to published, using the brand's own voice and connected CMS.\n\nEvery tool here is scoped to one brand and takes `brand_id`.\n\n## Step 1: resolve the brand\n\nCall `list_brands`. If more than one, ask which. Keep `brand_id` for every later call.\n\n## Step 2: agree the subject before generating\n\nGeneration costs credits and takes minutes, so settle the subject first.\n\n- The user has a topic: use it.\n- The user wants ideas: call `generate_topic_suggestions` and let them choose.\n- The user wants to close an AI visibility gap: get the gap from the ai-visibility-report skill first, then write against it.\n\nSet the title deliberately. `create_content` accepts both `title` and `prompt`, and they do different jobs:\n\n- `title` is the exact headline to publish under.\n- `prompt` is the brief for the writer, for example \"cover ROI, include two case studies\".\n\nIf the user gives an exact headline, pass it as `title`. Do not paraphrase it into the brief, and do not let the brief overwrite it. The title also steers the featured image, so a wrong title produces a wrong image.\n\n## Step 3: generate\n\nCall `create_content` with `brand_id` and the agreed `title` and `prompt`. Optional: `type` (how_to, listicle, comparison) and `model` from `list_ai_models`.\n\nGeneration is asynchronous:\n\n1. Note the returned content id.\n2. Poll `get_content_job_status` with `content_id`. Do not poll faster than every 20 seconds.\n3. When it completes, call `get_content` to read the draft.\n\nFor many articles at once use `bulk_create_content`, but confirm the full list with the user first. It multiplies both credits and review effort. Check the plan's remaining usage with `get_workspace_details` before a large batch, so the limit is known before the spend rather than after it.\n\n## Step 4: revise\n\n- `update_content` for edits you can make directly, including the title and body.\n- `regenerate_article` to rewrite from a changed brief. This replaces the draft, so confirm before calling it.\n- `bulk_update_content` for the same change across several articles, for example a status move.\n\n## Step 5: add the image\n\n1. `generate_image` with a prompt describing the subject. Base it on the article title, not the brief.\n2. `set_article_image` to attach it.\n\n## Step 6: publish\n\n1. `list_connectors` to see which CMS destinations the brand has connected. If none, tell the user to connect one in the brand's Connectors settings and stop.\n2. `publish_content` with `content_id` and the chosen `integration_id`.\n3. `list_publications` to confirm it landed and to get the live URL.\n\nSquarespace is the exception. It exposes no API for creating posts, so use `export_content` to produce an import file that the user uploads themselves. Say this plainly rather than implying an automatic publish.\n\nOther paths: `import_content` brings existing articles in, `manage_translations` produces other language versions.\n\n## Boundaries\n\n- Never publish without explicit confirmation. Publishing is public and hard to undo. Show the title, the destination and the URL, then wait for a yes.\n- Never bulk create or regenerate without confirming scope, for the same reason.\n- `delete_content` is destructive. Confirm, and list exactly what will be deleted.\n- Do not claim an article is live until `list_publications` shows it. A queued publish is not a published one.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}