Agent setup guide
Evergreen Post Recycler
Twice a week, an evergreen post you haven't used in 60 days gets fresh wording and goes out on Bluesky and Mastodon after your approval.
What it does
Twice a week, an evergreen post you haven't used in 60 days gets fresh wording and goes out on Bluesky and Mastodon after your approval.
- On Tuesdays and Thursdays, reads your sheet of evergreen posts in Google Sheets.
- Picks in code the first post not posted for 60 days (or never), so posts take turns from the top. Dates are worked out in code, never by the AI: days until or since each date, the window and business days are computed in your workflow's time zone, and records outside the window are skipped before the AI sees them.
- AI refreshes the wording: a new opening with the same message, facts and link, as a Bluesky version (300 characters) and a Mastodon version (500).
- Waits for your approval unless you switch review off; code checks both versions before posting.
- Posts to Bluesky and Mastodon (only the ones you connected; the run history names where it went out) and writes today's date into the row's Last posted cell.
What it needs
- A paid plan (agents run live on paid plans).
- An AI provider key (Settings → AI Providers).
- Google Sheets, connected in Settings → Integrations.
- Bluesky, Mastodon or both, connected in Settings → Integrations (the steps for a network you don't connect are skipped).
- An evergreen tab with the columns Text | Topic | Link | Last posted.
What it doesn't do
- One post per run; it doesn't write new posts from scratch.
- Text only: no images. On Bluesky, #hashtags and @mentions appear as plain text (links are clickable).
- Bluesky and Mastodon only.
Availability and plans
Available
Its workflow is built and tested, and every app it needs is live. You can get it and set it up now.
Included free on the Enterprise plan; on other paid plans it's a one-time purchase per workspace (the price is on the Agents page). The Agents page in the app always shows its current status.
Before you start
- A paid plan: agents run live, and the Free plan only runs Dry Runs.
- An AI provider key (OpenAI, Anthropic, Google and more) in Settings → AI Providers. AI usage is billed by your provider.
- These apps, connected in Settings → Integrations: Google Sheets, Bluesky and Mastodon.
- Nothing to send: the agent runs on a schedule.
- About 12 minutes.
Set it up step by step
Get the agent first (buy it, or it's already yours when your plan includes it), then in Agents → My agents press “Set up this agent”. That creates the agent's workflow in your workspace (it counts towards your plan's workflow limit) and opens the canvas with a setup checklist above it. Each item links to the exact place to go and ticks itself off when it's done.
1. Connect your AI provider
The AI steps run on your own key (OpenAI, Anthropic, Google and more). Add one in Settings → AI Providers.
2. Connect Google Sheets
Connect the Google account that can open your evergreen sheet (Settings → Integrations → Google Sheets).
3. Connect Bluesky, Mastodon or both
Connect the networks you use: Bluesky with your handle and an app password, Mastodon with your server and an access token with read and write scopes (Settings → Integrations). One is enough; the steps for a network you don't connect are skipped.
4. Pick the evergreen sheet
Open “Read your evergreen posts” and pick the account, spreadsheet and tab (columns Text | Topic | Link | Last posted).
| Setting | What to enter | In step |
|---|---|---|
| Google account (Evergreen posts) | The Google account that can open the spreadsheet. Pick your connected Google Sheets account. | “Read your evergreen posts” |
| Evergreen posts spreadsheet | Paste the link of the spreadsheet. | “Read your evergreen posts” |
| Evergreen tab | The tab with your evergreen posts (columns Text | Topic | Link | Last posted). | “Read your evergreen posts” |
5. Describe your voice
Open “Refresh the wording” and replace the placeholder with your voice and review switch.
| Setting | What to enter | In step |
|---|---|---|
| Your voice and review switch | Replace the placeholder with your business, tone, Mastodon hashtags, words you never use and REVIEW BEFORE POSTING: yes or no. It starts as “[DESCRIBE YOUR BUSINESS, YOUR TONE, HASHTAGS YOU USE ON MASTODON, WORDS YOU NEVER USE AND WHETHER EACH REFRESHED POST NEEDS YOUR APPROVAL. REVIEW BEFORE POSTING: yes]” until you replace it. | “Refresh the wording” |
6. Pick your accounts
Open “Post to Bluesky” and “Post to Mastodon” and pick your accounts. Leave a network empty if you don't use it: its step is skipped.
| Setting | What to enter | In step |
|---|---|---|
| Bluesky account | The Bluesky account the posts go out from. Leave it empty if you don't use Bluesky: the step is then skipped. Pick your connected Bluesky account, or leave it empty if you don't use Bluesky (the step is then skipped). | “Post to Bluesky” |
| Mastodon account | The Mastodon account the posts go out from. Leave it empty if you don't use Mastodon: the step is then skipped. Pick your connected Mastodon account, or leave it empty if you don't use Mastodon (the step is then skipped). | “Post to Mastodon” |
7. Where to write the date
Open “Write the Last posted date”: the same account, spreadsheet and tab, and the letter of the Last posted column.
| Setting | What to enter | In step |
|---|---|---|
| Google account (Last posted, same one) | The same Google account. Pick your connected Google Sheets account. | “Write the Last posted date” |
| Evergreen spreadsheet (same one) | The same spreadsheet. | “Write the Last posted date” |
| Evergreen tab (same one) | The same tab. | “Write the Last posted date” |
| Last posted column letter | The letter of your Last posted column, e.g. D. | “Write the Last posted date” |
8. Test it with Dry Run
Press Dry Run: the agent runs on sample data with no messages sent and nothing written to your apps.
9. Switch the trigger on
Open the trigger, set your time zone and switch the schedule on. It runs on Tuesdays and Thursdays at 10:00.
How it works
The agent is a normal workflow with 18 steps (1 AI step, with a person approving in Reviews). You can open, edit and monitor it like any other workflow.
- Tuesdays and Thursdays at 10:00 — Runs on a schedule (cron 0 10 * * 2,4, UTC — change it in the trigger's settings). Runs on Tuesday and Thursday mornings. Change the days or time on the trigger, and set your time zone there.
- Read your evergreen posts — Google Sheets: Read rows. Reads your evergreen tab (Text | Topic | Link | Last posted).
- Not posted for 60 days — Step. In code, not AI: keeps the posts whose Last posted date is at least 60 days ago, or empty. Change the number of days in this step.
- Refresh the wording — AI step (runs on your AI provider key). AI rewrites the first rested post so it doesn't read as a copy: a new opening, the same message and facts, a Bluesky version (300 characters) and a Mastodon version (500).
- Pick the next one — Step. In code: takes the first rested post in sheet order, so posts take turns from the top. None rested (or that row's Text is empty): nothing is posted this time.
- Post it, and review first? — Decision: picks the branch to follow. Nothing to post: the run ends. With review on (the default) the refreshed post waits for approval; with review off it goes straight to the checks.
- Nothing to post — Kept in the run history. Branch: Nothing to post. Every post was used recently (add more evergreen posts), or the next row's Text is empty.
- Approve the refreshed post — A person approves or rejects it in Reviews (the run waits). Branch: Review first. The refreshed versions wait in Reviews: edit either, approve to post both, or reject to skip it this time.
- Check before posting — Step. Branch: No review / Approved. In code: both versions are there, fit (300 / 500 characters) and have no leftover placeholders.
- Passed the checks? — Decision: picks the branch to follow. Passed: posted. Otherwise nothing is posted and the post stays rested for next time.
- Held: nothing posted — Kept in the run history. Branch: Held. A version was blank, too long or had a placeholder.
- Post to Bluesky — Bluesky: Create a post. Branch: Post. Publishes the Bluesky version. Skipped when Bluesky isn't connected.
- Post to Mastodon — Mastodon: Publish a post. Publishes the Mastodon version (public). Skipped when Mastodon isn't connected.
- Posted on Bluesky? — Step. In code: did Bluesky return a post link? (No when Bluesky isn't connected.)
- What went out? — Decision: picks the branch to follow. In code: names only the networks the post really went out on (a network that isn't connected was skipped).
- Nothing posted — Kept in the run history. Branch: Nothing posted / Other. Neither network is connected any more: connect Bluesky or Mastodon. The post stays rested for next time.
- Write the Last posted date — Google Sheets: Update a row. Branch: Both / Bluesky / Mastodon. Writes today's date (worked out in code) into the post's Last posted cell, so it rests again.
- Posted — Kept in the run history. The run history says where it went out (“What went out?”: Bluesky, Mastodon or both) and keeps both versions and the post links.
Test it with Dry Run
Press Dry Run in the canvas. The agent runs on the sample data stored on its trigger (the “Sample data for Dry Run” box), so you can check every step's output before anything is live.
- Nothing is sent or written: app actions, emails and Slack posts are simulated, and AI steps don't call your AI provider.
- Approval steps use the Dry Run decision you pick in the step's settings (approved, rejected or timeout), so you can try each branch.
Go live
- Open the trigger, set your time zone and switch the schedule on. It runs on Tuesdays and Thursdays at 10:00.
- Scheduled runs start only once the schedule is activated, and can't repeat faster than your plan's minimum interval.
- The setup checklist adds a “paid plan” item before activation: live runs need a paid plan (the Free plan only runs Dry Runs).
- When every checklist item is done and the trigger is on, the checklist says “Live — this agent is running”. Follow its runs in the workflow's History tab and in Analytics → Agents.
Questions
Which post does it pick?
The first row (from the top) whose Last posted date is at least 60 days ago or empty. After posting, that row gets today's date, so the next run picks the next one. Change the 60 days in the “Not posted for 60 days” step.
Can it post without me?
Yes, if you write REVIEW BEFORE POSTING: no in your rules. By default each refreshed post waits for approval.
Does it change the facts?
No: only the wording changes. Code checks the lengths and leftover placeholders before posting, and you see both versions when review is on.
Troubleshooting
- “No AI provider connected” or a rejected key: connect or fix the key in Settings → AI Providers, then press Test there.
- A checklist item stays unticked: the setting is still empty or still contains its placeholder text. Open the step from the checklist and fill it in.
- An app step fails with “Needs reconnect”: the account's access was revoked or expired. Reconnect it in Settings → Integrations.
- It didn't run at the expected time: the schedule must be activated, and its time is in the trigger's timezone.
- A run shows as paused: it's waiting for someone in Reviews to approve or reject it.
- A step failed: open the run in History and check that step in the Trace tab for the error and what it received.
Generated from the agent's own workflow, so it always matches what the agent does. Last updated .