LinkedIn video post agent

Each explainer that went public on YouTube is uploaded to the ClawWorld AEO company page, posted as the page, with a post written from the video’s own facts.

A video that lives only on YouTube reaches the people who search YouTube. The buyers we write for, founders and growth leads at B2B startups, spend their working day on LinkedIn, where a natively uploaded video plays in the feed with its captions on. Putting each explainer on the company page by hand means downloading the file, writing a post, setting a title and a thumbnail, and remembering to do it on the day the video goes public.

Running on our own company since Oct 24, 2026 · LinkedIn · Risk: Medium. Everything on this page is public; there is nothing to sign in for.

Goes inThe oldest explainer that is public on YouTube and not yet on the page, with its file, thumbnail, title and facts list
Comes outOne post on the company page with the video uploaded, its title and thumbnail set, and one entry in the registry this log is built from
Human stepNobody, on a normal day. A person keeps the agent’s Chrome signed in to LinkedIn and checks a post the run could not confirm; nothing is retried on its own
Runs onA machine you control, Monday to Friday at 12:30 PM US Eastern, through a Chrome profile of its own signed in as a page admin

Tasks and outputs

What it takes on

Pick the video

Reads the YouTube registry for public videos, drops the ones already on the page, takes the oldest, and checks that its Chrome opens the composer as the page.

One video

Write and check

Writes the post from the video’s facts in a session that cannot post, then the text check and the content review read it: no link, every number sourced, the disclosure line, two to four hashtags.

One accepted post

Upload, post and record

Uploads final.mp4 in the page composer, sets the title and thumbnail, types the post, posts as the page, finds the new post by its first line, reads it back and records it.

Post + registry entry

Who it is for: Teams that publish explainer videos on YouTube and want each one on their LinkedIn company page as a native upload, posted as the page with a post of its own, without a person at the keyboard.

How we use it: We built it on 2026-10-24 for the ClawWorld AEO company page. The first post, A01 (AEO vs SEO for a startup), went out that day from the real scheduled wrapper with the founder watching. From 2026-10-26 it runs Monday to Friday at 12:30 PM US Eastern plus a random delay of up to 25 minutes: each run takes the oldest explainer that is public on YouTube and not yet on the page, one a run, so once the queue has caught up a video reaches the page around midday on the day it went public. Most days nothing is waiting and the run ends at once.

Workflows/linkedin-video/linkedin-video.mdRules the post is written to

What a video post looks like

01The first line is the most surprising finding in the video, with its number, in at most 200 characters: it is all that shows before “see more”.

02Four to six short paragraphs, 150 to 230 words in all. Each opens with its fact, never with a signpost such as “This video”.

03Every number above 12 is in the video’s facts list or its YouTube description; the check refuses any other.

04No link of any kind, no domain name, no dash or hyphen, no call to action, no question to the reader at the end.

05The line “Narration is synthesized.” on its own, above two to four hashtags.

06Posted as the ClawWorld AEO page, never as a person: the script reads the composer’s actor line and refuses anything else.

Read from the workflow, the text check and the posting scriptOne video a run, on weekdays

The rules the agent’s output is written to, from the file named above. This site prints no example output; what the agent has shipped is in its run log.

Workflow

How a run goes, step by step

Pick a step to see what goes in, what comes out, and where a person is involved.

Step 1 of 6

Pick the oldest public video not yet on the page

On weekdays at 12:30 PM US Eastern plus up to 25 minutes, the wrapper brings its checkout to the latest main and reads the YouTube distribution agent’s registry. A video counts once it has been read back as live, or once its publish time has passed and YouTube’s oEmbed endpoint answers for it, which it does only for public videos. Videos already in this agent’s registry are dropped and the oldest by publish time is taken. Nothing waiting ends the run.

Goes in

web/content/youtube-videos.json and web/content/linkedin-videos.json

Comes out

One video folder, such as 2026-10-18-A01, or no run

Where a person steps in

Nobody.

Step 2 of 6

Check the browser and who it posts as

Starts the agent’s own Chrome if it is not running and opens the company page’s composer in a new tab. The composer’s first line names who the post would go out as; anything but the ClawWorld AEO page, or a sign-in page, stops the run before any session starts.

Goes in

The agent’s Chrome on its debugging port

Comes out

A go, or a stop that the watchdog emails about

Where a person steps in

A person signs in to LinkedIn in that Chrome once, and again if the sign-in expires.

Step 3 of 6

Write the post

A session starts with the video’s handoff, facts list and narration script copied into a scratch folder, reads the workflow’s rules and the shared voice guide, writes the post and runs the text check on it until it passes or has failed twice. The session can read the repository, write that one file and run that one check: no browser, no git, no way to post.

Goes in

handoff.json, facts.md and SCRIPT.md of the video

Comes out

An accepted post text

Where a person steps in

Nobody. A session that leaves no accepted text ends the run with no post.

Step 4 of 6

Check again, then the content review

The wrapper runs the text check on the accepted post, then the content review: the LinkedIn lint and a separate session that names the weakest sentences, answers five questions with quotes and gives a verdict. A pass goes on; a send-back holds the video, the wrapper commits only the review row, and the next run writes a new post.

Goes in

The accepted post

Comes out

A row in the review ledger, and a go or a hold

Where a person steps in

Nobody.

Step 5 of 6

Upload and post as the page

In a new tab the script opens the composer, intercepts the file picker and gives it final.mp4, sets the video title and the custom thumbnail in LinkedIn’s video editor, types the post and reads it back word for word, waits for Post to be enabled, and clicks it. It then reloads the page’s admin list until the post carrying the first line appears, for up to 90 seconds, and opens that post to read it back: by the page, the first line, the video.

Goes in

final.mp4, thumbnail.jpg, the title and the accepted post

Comes out

The post’s link, or a named stop

Where a person steps in

When a post cannot be confirmed after Post: a person checks the page and fixes the entry with the verify mode.

Step 6 of 6

Record and commit

The registry entry is written the moment Post is clicked, keyed by the video’s folder: the link, the date and time, the first line, whether the read-back passed, the thumbnail. If anything fails after the click, the entry says unknown, so no later run posts the video again. The wrapper commits exactly the registry and the review row and pushes; this log picks the entry up on the next deploy of the site.

Goes in

The link and the read-back

Comes out

One entry in web/content/linkedin-videos.json, and this record

Where a person steps in

When the push fails: the next run pushes it first.

Before you start

What you’ll need to bring

Company material

Explainer videos of your own that are public on YouTube, each with a facts list its post’s numbers can be traced to. Ours are the video creation agent’s, published by the YouTube distribution agent.

Source material

The YouTube registry (which video is public and since when) and the media folder with each video’s file, thumbnail, title and facts. The agent reads both and writes only its own registry.

Platform account

A LinkedIn account with the Content admin or Super admin role on your company page, signed in once in the agent’s own Chrome profile. No API access and no developer app.

Run environment

A machine that is on around midday on weekdays and can keep that Chrome open: Node.js with playwright-core, an agent runner for the writing step, and a scheduler. We use Claude Code under Windows Task Scheduler.

Run log

Recent runs, as they happened

The full log is public and read-only. It holds every run on record, including the ones that stopped to wait for a person.

View the full run log

Guides and files

Set it up yourself

The setup guide, and the files the agent is built from. You run it in your own environment, with your own accounts.

Open · no account neededA Claude Code workflow (markdown instructions) for the writing session, three Node scripts (the browser script that uploads, posts and records, the text check, and an inspect script for maintaining the browser script) and the PowerShell wrapper the scheduler runs. Not packaged for public download yet; the setup guide below describes what they do.
Setup guide
  1. 01

    Runtime

    • Node.js 22 with playwright-core, which attaches to a Chrome that is already running and downloads no browser of its own.
    • Claude Code for the writing session and the content review session. The upload itself runs no model.
  2. 02

    Browser setup

    • A Chrome profile of its own with remote debugging on a fixed port, signed in once by a person who is an admin of the company page. LinkedIn asked us to confirm the new device the first time.
    • The script intercepts the file pickers, so no system dialog opens on the screen of whoever is at the machine.
  3. 03

    Account setup

    • A LinkedIn account with the Content admin or Super admin role on the company page. The post appears as the page; which admin posted it is shown only to the page’s other admins.
    • Nothing else. Posting as a company page through LinkedIn’s API needs the Community Management API, which LinkedIn grants after an application review; this agent does not use it.
  4. 04

    Configuration

    • The page id and name, as constants at the top of the browser script; the identity check compares the composer’s actor line with that name.
    • The YouTube distribution agent’s registry and the video creation agent’s media folder (the video, its thumbnail, its handoff with the title, its facts list), read and never written.
    • The schedule, in the Task Scheduler registration written at the top of the wrapper.
  5. 05

    First run

    • Run the browser script on one video without --publish: it uploads the video into the composer, sets the title and thumbnail, types the post and stops with Post enabled. Look at the composer in that Chrome.
    • Run the wrapper with -DryRun: the session writes, the check and the review read the post, and the composer is filled and closed again without posting.
    • Post the first video with the real wrapper while you watch, open the post on the page, then register the schedule.
Files · 6

linkedin-video.md

Workflow · Markdown. The decisions and the rules the writing session writes the post to.

Workflow

post-video.mjs

Script · Node. The queue, the identity check, the upload, the title and thumbnail, the post, the read-back and the registry entry. A dry run unless told to publish; never retries a post.

Script

check-text.mjs

Script · Node. The text check: the LinkedIn lint, the length, no link, the disclosure line, the hashtags, every number traced to the facts list.

Script

inspect.mjs

Script · Node. Prints a LinkedIn page’s or dialog’s text and controls, for maintaining the browser script and for repair sessions. Never clicks Post.

Script

run-linkedin-video.ps1

Scheduler · PowerShell. The weekday run: the checkout, the pick, the browser check, the writing session, the check, the content review, the post, the self-repair loop and one commit of the registry and the review row.

Scheduler

linkedin-videos.json

Registry · JSON. One entry per video posted, keyed by the video’s folder. The file this log is built from.

Registry

Not packaged for public download yet. The guide on the left describes what each one does, step by step, so you can rebuild the setup; the Hosted and Fully managed tiers run them for you today.

Rather have us run it?

Hosted: your accounts in a cloud browser we run, and you review what goes out. Fully managed: we set the strategy and run the agents.

Good to know

Where it stops and asks for you

  • No video is public on YouTube without a post on the page. The run ends before any session, with a line in the log. Nothing is posted.
  • The agent’s Chrome is not signed in, or its composer would not post as the page. The run ends before any session and the watchdog emails a person to sign in.
  • The session did not leave an accepted post. Nothing is posted; the video waits for the next run.
  • The text check or the content review refused the post. Nothing is posted. The review row is committed on its own; the next run writes the post again.
  • LinkedIn changed the composer and an element was not found. The run stops before Post and starts up to two repair sessions. A repair that passes the gate and a dry run is committed and the post step runs again; otherwise the watchdog emails a person.
  • Post was clicked but the post could not be confirmed. The entry is recorded as unknown so the video is never posted twice; a person checks the page and fixes the entry with the verify mode.

Risk notice

What to watch for

  • LinkedIn’s User Agreement does not allow bots or other unauthorized automated methods to create posts. The agent posts at most one video a day through the ordinary page composer, but the account signed in to its Chrome, a person’s own LinkedIn account, carries the risk of a restriction.
  • No person reads the post or watches the video before it goes out. The checks catch a number without a source, a link or a missing disclosure; they do not judge whether the post is good. Every public video goes, including those the video reviewer scored 6 out of 10.
  • The music in the videos comes from the YouTube Audio Library, whose terms are written for YouTube. The founder chose on 2026-10-24 to post the same cut on LinkedIn and accept that risk; a claim against a post would take it down.
  • The narration is synthetic, and every post says so on a line of its own.
  • A post the run could not confirm after Post is recorded as unknown and never retried; a person checks the page. On the first run the link was recorded wrong and corrected the same day with the script’s verify mode.

FAQ

Questions about this agent

Does the post show which person made it?

No. It goes out as the company page, and the script refuses to post when the composer names anyone else. LinkedIn shows the admin who posted it only to the page’s other admins.

Why a browser and not the API?

Posting a video as a company page through LinkedIn’s API needs the Community Management API, which LinkedIn grants after an application review. Until that is in place the agent uses the page composer the way a person does; the cost of that is the first risk below.

Why around midday?

The YouTube distribution agent makes a video public between 9:00 and 12:00 US Eastern, so 12:30 is after it. Other scheduled agents on the same machine start at 1:00 PM and later and share one lock with this one, and a run that waits 20 minutes for the lock gives up. The daily text post to the same page goes out at about 5 PM.

What happens when LinkedIn changes the composer?

The script stops before Post with a page-changed code and leaves the page’s text and controls behind. The wrapper starts up to two repair sessions that may change only how the script finds elements, checks each with a dry run that never posts, and commits a repair only when it passes. The identity check, the Post click and the registry write are locked against repair.