← All ivy-agents
IVYXSTUDIO · IVY AGENT
S

Social copywriter

ivy.agent.social-copywriter · v0.1.1

ivyx

Writes a brand's post from a brief: the brand's voice, audience and pillar go into the model's context with the accounts to write for, the model answers one variant per account (the text, hashtags, a first comment where the platform wants one), and the variants are packed as kind content-draft, which IVYX Social's intake fills a content item with for a person to approve. The model writes words, never a figure; the draft publishes nothing.

Steps

In the order the agent's file lists them, each with where its inputs come from and the values the file fixes. A branch or a loop is a step too.

  1. 01
    The request as the model's context
    ivy.node.copy-brief

    Puts a content request together as one text for the model's turn: the brand, its voice and audience, the pillar, the format, the accounts to write for with each platform's length, the brief.

    takes
    brief from the agent's input
    client from the agent's input
    tone from the agent's input
    audience from the agent's input
    pillar from the agent's input
    format from the agent's input
    title from the agent's input
    accounts from the agent's input
    Ivy Node
  2. 02
    Write one variant per account

    The context is a social media content request: the brand, its voice and audience, the pillar, the format, the accounts to write for with each platform's character limit, and the brief. Return a JSON object with variants: an object with one entry per account named, its key the account copied exactly, each {text, hashtags, first_comment}. The text is the caption or post in the brand's voice, within the platform's limit, no emojis unless the voice asks, no claims the brief does not make, no figures. hashtags is one string of 3 to 8 words separated by spaces, without the #. first_comment is for Instagram only (the hashtags may go there) and empty otherwise. Answer with the JSON object only.

    takes
    context from step 1
    outputSchema from step 1, output_schema
    Model turn
  3. 03
    Pack the texts as a draft
    ivy.node.content-pack

    Turns the model's variants into one answer of kind content-draft keyed by account, each text held to its platform's length, the hashtags without their #; what IVYX Social's intake fills a content item with.

    takes
    spec from step 2, output
    accounts from the agent's input
    request_id from the agent's input
    client from the agent's input
    title from the agent's input
    format from the agent's input
    pillar from the agent's input
    brief from the agent's input
    returns
    kind, request_id, client, title, format, pillar, brief, variants, count
    Ivy Node

Nodes it brings

Adding this agent in IVYX Studio adds these nodes with it. A node your workspace already has is kept as it is, even at another version.

What it touches

Collected from what each of its nodes declares, plus the model call when a step is a model turn. A declaration is the author's statement, and it is what policy rules select on.

Calls a model

Inputs

FieldTypeDescription
firmstringThe firm's slug in IVYX Social; the destination routes the delivery by it.
briefrequiredstringWhat the post should say and do.
clientrequiredstringNot declared
request_idstringThe content item's request id; the key that keeps one request from running twice.
titlestringNot declared
formatstringreel, image, carousel, text, thread, video, short, document, story.
pillarstringNot declared
tonestringThe brand's voice.
audiencestringWho the brand speaks to.
accountsrequiredarrayThe accounts to write for: key (the collector key), platform.

Outputs

FieldTypeDescription
kindrequiredstringcontent-draft
request_idstringNot declared
clientstringNot declared
titlestringNot declared
formatstringNot declared
pillarstringNot declared
briefstringNot declared
variantsrequiredobjectNot declared
countintegerNot declared

Tests

2 of 2 test cases passed on Oct 25, 2026, in the publisher's own environment, before this version was published. The registry keeps that record; it does not run the cases again.

Requires: python:3.9, a model core

  • two-accounts

    A teaser for Instagram and LinkedIn is one variant per account, X's limit left alone since X was not asked.

    given
    firm ivyx
    brief Show the new report in fifteen seconds.
    client IVYX
    request_id case-copy-1
    title Launch teaser
    format reel
    pillar product
    tone Confident, plain, a little dry.
    accounts [{"key":"ig_ivyxai","platform":"instagram"},{"key":"li_ivyx","platform":"linkedin"}]
    expects
    kind equals content-draft
    count equals 2
    request_id equals case-copy-1
    variants.ig_ivyxai.text matches \S
    variants.li_ivyx.text matches \S
  • x-only

    One X account is one variant within 280 characters.

    given
    brief We moved the webinar to Thursday.
    client IVYX
    accounts [{"key":"x_ivyxai","platform":"x"}]
    expects
    kind equals content-draft
    count equals 1
    variants.x_ivyxai.text matches ^[\s\S]{1,280}$