Social reply
ivy.agent.social-reply · v0.1.0
ivyx
Sends an approved reply to a conversation on its platform (an Instagram comment, a LinkedIn comment, an X post, a YouTube comment), the responder behind an if, and answers whether it went. Speaks for the brand: each responder is held for a person by this project's policy, after IVYX Social's own approval.
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.
- 01Ivy NodeWhich responder?ivy.node.reply-plan
Reads an IVYX Social reply request (the conversation, its platform, the approved text, the connection) and says which responder runs.
- takes
conversation_idfrom the agent's inputplatformfrom the agent's inputpost_keyfrom the agent's inputauthorfrom the agent's inputconnectionfrom the agent's inputtextfrom the agent's input
- 02BranchInstagram?
Lets what follows run only when has_instagram of step 1 is true.
- 03Ivy NodeReply on Instagramivy.node.ig-reply
Replies to a comment on an Instagram post as the account, through the Graph API with a Meta connection.
Runs only on the then branch of step 2.
- takes
connectionfrom the agent's inputcomment_idfrom step 1textfrom step 1
- 04BranchLinkedIn?
Lets what follows run only when has_linkedin of step 1 is true.
- 05Ivy NodeReply on LinkedInivy.node.li-reply
Replies to a comment on a LinkedIn post as the company page through the Community Management API with a LinkedIn connection.
Runs only on the then branch of step 4.
- takes
connectionfrom the agent's inputpost_keyfrom the agent's inputauthorfrom the agent's inputcomment_idfrom step 1textfrom step 1
- 06BranchX?
Lets what follows run only when has_x of step 1 is true.
- 07Ivy NodeReply on Xivy.node.x-publish
Posts as the X account through the X API v2 with an X connection: one post, a thread (each text replies to the one before), or a reply to a given post.
Runs only on the then branch of step 6.
- takes
connectionfrom the agent's inputreply_tofrom step 1textfrom step 1
- 08BranchYouTube?
Lets what follows run only when has_youtube of step 1 is true.
- 09Ivy NodeReply on YouTubeivy.node.yt-reply
Replies to a comment on one of the channel's videos as the channel, through the Data API with a Google connection.
Runs only on the then branch of step 8.
- takes
connectionfrom the agent's inputcomment_idfrom step 1textfrom step 1
- 10Ivy NodeThe reply's recordivy.node.reply-pack
Packs the responder's answer as one record of kind reply-result for an IVYX Social conversation: sent or not, and why.
Runs only on the else branch of step 8.
- takes
conversation_idfrom the agent's inputreasonfrom step 1reply_afrom step 3reply_bfrom step 5reply_cfrom step 7reply_dfrom step 9- returns
kind,conversation_id,sent,id,reason
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.
- Instagram: reply to a commentivy.node.ig-reply · v0.1.0
- LinkedIn: reply to a comment as the pageivy.node.li-reply · v0.1.0
- Social: pack the reply resultivy.node.reply-pack · v0.1.0
- Social: lay a reply out for its platformivy.node.reply-plan · v0.1.0
- X: post, a thread or a replyivy.node.x-publish · v0.1.0
- YouTube: reply to a commentivy.node.yt-reply · v0.1.0
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.
Inputs
| Field | Type | Description |
|---|---|---|
| firm | string | The firm's slug in IVYX Social; the destination routes the delivery by it. |
| conversation_idrequired | string | The conversation's id as the inbox sync named it. |
| platformrequired | string | Not declared |
| post_key | string | For LinkedIn: the post the comment is under. |
| author | string | For LinkedIn: the page's URN. |
| connection | Not declared | The platform's connection, as the stored secret connection.<id>. |
| textrequired | string | The approved reply. |
Outputs
| Field | Type | Description |
|---|---|---|
| kindrequired | string | reply-result |
| conversation_id | string | Not declared |
| sentrequired | boolean | Not declared |
| id | string | Not declared |
| reason | string | Not 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, tools/connectors-standin.py on 127.0.0.1:18911, its connections stored as the secrets connection.standin-<platform>
- instagram
An approved reply to an Instagram comment is sent and carries the reply's id.
- given
firmivyxconversation_idig:c1platforminstagramconnection{"$secret":"connection.standin-meta"}textThanks, we wrote to you.- expects
kindequals reply-resultsentequals trueidequals c1-reply
- no-connection
A reply with no connection is not sent, and says which platform could not answer.
- given
firmivyxconversation_idyt:ct1platformyoutubetextThanks.- expects
kindequals reply-resultsentequals falsereasonequals No responder for youtube with what was given.