Purpose
This SOP walks you through building a Claude agent that repurposes your saved posts to LinkedIn on its own. It opens a Google Sheet of content you have already written, takes the next post it has not used yet, rewrites it for LinkedIn in your voice, schedules it through Buffer, and writes down what it did. Every day, with you nowhere near it.
Who this is for: Founders sitting on a backlog of posts worth reusing, who never actually repurpose them because doing it by hand every day does not happen.
The whole thing runs unattended because of four parts: memory, access, skill and judgment. The rest of this SOP is those four parts, then the prompt that ties them together.
Tools needed:
- Claude with scheduled tasks (Co-Work), running inside a project
- A Google Sheet with two tabs, connected to Claude
- Buffer with your LinkedIn channel connected
- Slack, connected to Claude
- A voice skill and a LinkedIn skill (or a handful of rules pasted into the prompt)
The Four Parts
Every agent that runs without you is built from the same four things. Name them and the rest of this stops feeling technical.
Memory
The sheet. One tab is what it knows about your content, the other is what it remembers doing. It reads the first, checks the second, and never has to ask you what has been done, because it wrote the answer down itself last time.
Access
The keys. Sheets gives it memory, Buffer gives it the ability to act, Slack gives it a way to reach you. Turn off any one and the agent still runs, it just goes blind, or mute, or cannot act.
Skill
The training. One skill is how you sound, the other is how LinkedIn wants a post structured. Without them it still repurposes, it just sounds like Claude summarising your caption.
Judgment
The decision loop. A fixed sequence it runs the same way every day: find the next post, write it, schedule it, record it. It never improvises. Full loop is in Step 5.
The skills are the reason this agent can publish without you approving each post. They lock the voice and the structure so the output is safe to send every time. Take them out and you would want a human check on every post.
Build the Memory
Make a Google Sheet with two tabs. This is the agent's entire memory.
- Posts tab. One row per saved post. A column holding the full post text, the caption or script you want reused. A title or ID column helps but is optional.
- Used Posts tab. Leave it empty. The agent writes here. Give it three columns: Original Post, Date Used, LinkedIn Version.
- Fill the Posts tab with your backlog. Anything you would be happy to see go out again.
- Share the sheet so Claude can read and write to it, and copy the link.
The model is simple. It reads the Posts tab top to bottom, skips anything that already appears in Used Posts, and takes the first one left. It never double-posts because it checks its own record before it does anything.
The starter prompt in Step 6 will create the Used Posts tab for you if it is missing. Build it yourself anyway, so the columns are the shape you want rather than whatever the agent guesses.
Connect the Access
Three connections. Each one does exactly one job.
- Google Sheets. Claude reads the Posts tab and writes to Used Posts. Connect it and confirm Claude can open your sheet.
- Buffer. Claude schedules the finished post. Connect Buffer and check that your LinkedIn channel shows as connected inside it.
- Slack. Claude messages you when there is nothing left to post or when something breaks. Connect Slack and decide which channel or DM it should use.
| Connection | What it gives the agent | What breaks without it |
|---|---|---|
| Google Sheets | Memory | Goes blind. It cannot tell what it has already posted, so it repeats itself or freezes. |
| Buffer | The ability to act | It can write the post but cannot publish it. |
| Slack | A way to reach you | Goes mute. You never hear when it runs dry or fails. |
The agent keeps running with any one of these missing. It just loses that one sense. Nothing crashes, which is exactly why a missing connection can go unnoticed for a while.
Install the Skills
Two skills. One holds your voice, one holds LinkedIn's structure. Install both into the Claude project the scheduled task runs in.
- Your voice skill (in this build, ai-savvy-voice). The words you never use, how you open, paragraph length, what your call to action sounds like. This is the line between your voice and Claude summarising your caption.
- Your LinkedIn skill (in this build, aisavvy-linkedin). How a LinkedIn post is built: the hook line, the line breaks and whitespace, the length, where the link goes. This is how the output reads native rather than pasted.
No voice skill yet? Paste 5 to 10 core rules straight into the prompt as a fallback. It works, it is just less consistent run to run. Building a proper one is covered in the Create a voice skill SOP.
These two skills are why the agent can publish without approval. They are the quality bar. If you skip them, add an approval step to the loop and check every post before it goes out.
The Decision Loop
This is the sequence it runs the same way every day. It does not improvise around it.
- Open the sheet. Find the first row in the Posts tab that is not in Used Posts.
- Nothing left? Send a Slack message and stop. Found one? Continue.
- Take that post, load the two skills, write the LinkedIn version.
- Schedule it to Buffer for 8pm Dubai time, today.
- Did Buffer confirm it is scheduled? No: stop, and leave the row untouched so tomorrow's run retries it. Yes: write the row into Used Posts with the date and the LinkedIn version.
- Run again tomorrow at the same time.
Step 5 is the safety catch. A post is only recorded as used after Buffer confirms. If scheduling fails, the row stays exactly where it was and the next run picks it up again. Nothing gets silently dropped.
The Prompt
Start with the simple version. Paste it into a scheduled task in Claude and fill in your sheet link.
Open my content sheet: [paste your Google Sheet link]
The Posts tab has all my saved posts. The Used Posts tab is where you keep
track of every post you've already repurposed. If the Used Posts tab doesn't
exist yet, create it.
1. Find the first post in the Posts tab that isn't already in Used Posts.
Never use the same post twice.
2. If every post has already been used, send me a Slack message saying there
are no new posts to repurpose, and stop there.
3. Rewrite the post for LinkedIn using my voice skill and my LinkedIn
repurposing skill.
4. Schedule it in Buffer to my LinkedIn channel for 8pm Dubai time today.
5. Once Buffer confirms it's scheduled, add the original post to the Used
Posts tab with today's date and the LinkedIn version you wrote.
Once that has run clean a few times, tighten it into the production version. Same six steps, plus the rules that matter when nobody is watching the run.
You are running my daily LinkedIn repurposing routine. Run it end to end,
on your own.
RULE ZERO
Nobody is watching this run. Never ask a question, never wait for approval,
never stop because something is missing. If a step has a fallback, take it.
1. OPEN THE MEMORY
Open my content sheet: [paste your Google Sheet link]
The Posts tab is my backlog. The Used Posts tab is your record of everything
already repurposed. If Used Posts does not exist, create it with columns:
Original Post, Date Used, LinkedIn Version.
2. PICK ONE POST
Read the Posts tab top to bottom. Take the first post that does not already
appear in Used Posts. Never repurpose the same post twice.
Process exactly one post per run.
If every post has already been used, send me a Slack message saying there
are no new posts to repurpose, and stop.
3. WRITE THE LINKEDIN VERSION
Load my voice skill and my LinkedIn skill. Rewrite the post as a LinkedIn
post using both.
Never invent numbers, client results, testimonials, or dates. Use only what
is in the original. If a detail is missing, cut the claim.
Return only the finished post. No alternate hooks, no commentary, no labels.
4. SCHEDULE IT
Schedule the post in Buffer to my LinkedIn channel for 8pm Dubai time today.
If 8pm Dubai has already passed, use 8pm tomorrow.
Wait for Buffer to confirm it is scheduled.
5. RECORD IT
Only after Buffer confirms: add a row to Used Posts with the original post,
today's date, and the LinkedIn version you wrote.
If Buffer did not confirm, do not touch Used Posts. Leave the row so the
next run picks it up again.
6. REPORT
Tell me which post you used and the Buffer confirmation, or that there was
nothing to post.
Everything you need to fill in:
| Placeholder | What to put here | Example |
|---|---|---|
| [paste your Google Sheet link] | The share link to your two-tab content sheet | docs.google.com/spreadsheets/d/... |
| my voice skill | Your voice skill's name, or 5 to 10 rules inline | ai-savvy-voice |
| my LinkedIn skill | Your LinkedIn structure skill's name | aisavvy-linkedin |
| 8pm Dubai time | Your daily publish slot | 8:00 PM GST |
Schedule and Test
Set the task to run once a day, then run it once yourself before you walk away.
- Schedule the task for a time comfortably before your publish slot, for example every day at 7:00 PM Dubai so the 8pm slot is always still ahead.
- Run it manually once, now. This first run is where you approve the permissions it needs for Sheets, Buffer, and Slack.
- Watch the output. Confirm it picked the right post, it sounds like you, the LinkedIn structure is right, and it went to the correct channel.
- Open Buffer and check the post is queued for 8pm.
- Open the sheet and check the row was written into Used Posts.
Skip the manual run and the first scheduled run stalls on a permission prompt with nobody there to click it. Approve permissions first, every time you add a new connection.
Troubleshooting
None of these throw an error. They just hand you a worse result than you think you are getting.
| Symptom | Cause | Fix |
|---|---|---|
| It says there is nothing to repurpose while the Posts tab is full | It is matching posts on the wrong thing, or Used Posts has rows that should not be there. | Decide what identifies a post, the full text or an ID column, and make sure both tabs use the same one. Clear any junk rows from Used Posts. |
| The same post goes out twice | The row never made it into Used Posts. Buffer confirmed but the write was skipped, or the run failed after scheduling. | Confirm the prompt only records after Buffer confirms, and that it appends a row rather than overwriting. |
| The post reads generic, like a summary of your caption | The skills are not loading. They are not installed in the project the task runs in, or not referenced in the prompt. | Install both skills into that project and name them in the prompt. As a stopgap, paste your core voice rules inline. |
| Posts go out with alternate hooks or working notes attached | The rewrite step returned its reasoning alongside the finished post. | Add: "Return only the finished post. No alternate hooks, no commentary, no labels." |
| The run stops and asks you a question | A skill or step expects an answer that made sense in a chat window but not on a schedule. | Add Rule Zero: "Never ask a question, never wait for approval. If a step has a fallback, take it." |
| Buffer says scheduled but nothing posts at 8pm | The LinkedIn channel is disconnected inside Buffer, or 8pm Dubai had already passed when the task ran. | Reconnect the channel in Buffer. Move the scheduled task earlier so the slot is always ahead. |