Weekly performance report agent
Every agent’s last seven days in one record: what went out, what Google, Bing, Reddit and X recorded for it, and where the outbound funnel stands.
Nine agents each keep their own log of what they did. Nobody reads them side by side, so a week with six Reddit posts and zero replies looks the same as a week with one post and a lead.
Running on our own company since Oct 16, 2026 · Search Console · Bing Webmaster Tools · Reddit · X · Risk: Low. Everything on this page is public; there is nothing to sign in for.
Tasks and outputs
What it takes on
Read every agent’s records
Reads the posting calendars, the registries, the reply ledger, the blog posts, the outbound tracking tables and the three visibility snapshots as they are, and counts what fell in the seven days ending on the run day. Three optional network reads add Reddit scores, X impressions and the lead count; one that fails leaves its number null.
Summarise
Writes one summary for the window, opening with the run record: published counts, the funnel, the settled traffic, five leaderboards of at most five entries each and the paths newly cited in AI answers since the previous record. No composite score.
Fill the report and write the judgement
On Fridays, fills the brackets of the week’s report where section number and row label match; then a judgement session writes the record’s narrative and the report’s two narrative sections, pointing every topic suggestion at a leaderboard entry or a newly cited path.
Who it is for: Teams running several publishing and outreach agents who want one record every morning of what each agent published in the last seven days, what Google, Bing, Reddit and X recorded for it, and where the outbound funnel stands, with every number kept apart rather than rolled into a score.
How we use it: We run it on ClawWorld’s own eight-week growth plan, which began on 2026-09-22. Four weeks in, the agents’ own records added up to 164 connection requests sent, 60 accepted and 0 replies from the list; 0 of 200 AI answers mentioning us in each of two deep rounds; 11 new pages with no citation; and 1 lead. Until now those numbers were gathered by hand every Friday, and the half of growth that happens after publishing was not measured at all. The first record is the dry run of 2026-10-15; from 2026-10-16 it runs every morning, and the Friday run fills the week’s report.
What each number is counted to
01The window is the seven calendar days ending on the run day. Every published count, the week’s funnel row and the Reddit and X readings are taken inside it.
02Traffic is read from the latest Google and Bing snapshots, never fetched by this agent. Google: the readout’s 28-day per-page file, over the file’s own date range, which the record names. Bing: per-page daily rows summed over the seven settled days ending three days before the run.
03A piece published this week shows its traffic in a later record. The settled days end before the window does, and an unsettled number is not reported.
04Counts are added, never rates averaged: across pages, across posts, across the four tracking tables.
05null is not zero. A source that could not be read is recorded as not read, with the step that failed. Four weeks of real readings were mostly zero, and the two must stay apart.
06No composite score. Five leaderboards stand alone, each at most five entries: Google clicks by page, Bing clicks by page, Copilot citations by page, Reddit score by post, X impressions by post.
07Company and founder names from the outbound tables never reach the public page; the funnel is counts only.
08Referral traffic from LinkedIn, Reddit, X and Medium is not measured. It needs GA4 access we do not have, and the record says so instead of printing a zero.
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
Read the records
Reads the three posting calendars, the three registries, the X reply ledger, the blog post files and the four outbound tracking tables as they are in the repository, and counts what fell in the seven days ending on the run day: posts per agent, and the funnel from the dates in the tracking tables, this week and since the plan began.
Files already in the repository, read where they are
Published counts per agent and the funnel as counts
None. A tracking-table cell that does not start with a date counts as empty.
Step 2 of 6
Read the snapshots
Opens the latest Google, Bing and AI visibility snapshots. From Google, the 28-day per-page clicks and impressions over the file’s own range; from Bing, the per-page daily rows summed over the seven settled days ending three days before the run, and the Copilot citations by page; from the AI readout, its numbers copied as they are and the paths it recorded as cited, compared with the previous record’s for newly cited ones.
The three snapshot folders, newest first
Traffic by page, Copilot citations by page, the AI numbers copied not recomputed, the newly cited paths
None. A snapshot that is missing leaves its numbers null and a wait in the steps.
Step 3 of 6
Three network reads
Asks Reddit’s public JSON for the score and comment count of each Reddit post in the window, the X API for the public metrics of each X post in the window (one owned read a post, $0.005 each), and the site’s lead table for the leads that came in. Each read is wrapped on its own: a failure leaves that number null and records a wait, and the run goes on.
The post addresses from the calendar and the registry; the X credentials file; AWS credentials if present
Reddit score and comments per post, X impressions per post, the lead count, or null for each that could not be read
None.
Step 4 of 6
Summarise
Writes one summary for the window, opening with the run record the public log is built from: the published counts, the funnel as counts, the traffic, the Reddit and X readings, the AI numbers, the leads, and five leaderboards of at most five entries each with the newly cited paths beside them. A check then confirms that every number in the record appears in the summary’s text.
Everything read so far and the previous record
summary.md in a dated folder, counts only
None.
Step 5 of 6
Fill the report
On Fridays, opens the week’s report and fills its brackets: the funnel table and the rate table in section 1, the delivery table in section 2, the measurement list in section 4. Only brackets are replaced, matched by section number and first-column label; a bracket filled once is never overwritten; a label it cannot match is recorded as a wait, never guessed.
The week’s report skeleton, written by a person
The report with its brackets filled, and the list of the ones it left
A person fills the brackets that have no machine source, and any row whose label the script could not match.
Step 6 of 6
Write the judgement
A judgement session reads the summary and the previous one and writes the record’s narrative: what was not read or did not match, what was handled, what comes next, and topic suggestions. On Fridays it also writes the report’s two narrative sections. A suggestion may only point at an entry on one of the leaderboards or a newly cited path; when every board is empty it writes the fixed sentence that no piece published in the window registered a click, a citation or a score above zero. It never runs the script and never computes a number.
summary.md, the previous summary, the week’s report
The narrative on the record and, on Fridays, sections 5 and 6 of the report
A person reads the Friday report, decides which suggestions to act on, and writes each as a row with a check rule the next records evaluate.
Before you start
What you’ll need to bring
Company material
The agents whose records it reads and the plan they serve: which calendars, registries and tracking tables exist, and the date the plan began, so the cumulative funnel has a start.
Source material
The other agents’ own records, kept where they write them, and the weekly report skeleton a person writes, whose row labels are the interface. The agent reads the records and fills the report’s brackets; it writes nothing on your site and nothing in a calendar.
Platform account
None for Reddit. For X, the account’s OAuth 1.0a credentials file outside the repository, which pays $0.005 a post read. AWS credentials only for the lead count, and only if you want it. No password handed over.
Run environment
A machine with Node.js for the script and an agent runner that follows a written workflow for the judgement step. We use Claude Code. No browser is kept open.
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 logGuides 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.
- 01
Runtime
- Node.js 20 or later, for the summariser.
- An agent runner that follows a written workflow, for the judgement step — we use Claude Code. It runs after the script and never computes a number itself.
- 02
Browser setup
- None. Every source is a file in the repository or a public API; nothing in this agent opens a browser.
- 03
Account setup
- Reddit: none. A post’s score and comment count come from its public JSON, without credentials.
- X: the account’s OAuth 1.0a credentials file, kept outside the repository. Each post read costs $0.005 on the pay-per-use API.
- AWS credentials, only for the lead count. Leave them out and that number is recorded as not read.
- 04
Configuration
- Where the other agents keep their records: the posting calendars, the registries, the reply ledger, the blog posts, the outbound tracking tables and the three visibility snapshot folders. The script reads them where they are; nothing is copied.
- The weekly report skeleton: a document a person writes, whose row labels are the interface. The script fills a bracket only where the section number and the first-column label match exactly.
- The folder the daily summaries go to.
- 05
First run
- Run once by hand with the network reads switched off and check every published count against the calendar or registry it came from.
- Run once with the network reads on and check that a read which failed shows as null in the record, not as zero.
- On the first Friday, read the report before and after: only brackets changed, and every bracket it could not match is listed as a wait.
summarize.mjs
Script · Node. Reads every agent’s records and the three snapshots, makes the three network reads, writes summary.md and, on Fridays, fills the report’s brackets. The window and every count are defined here and nowhere else.
weekly-performance-report.md
Workflow · Markdown. The judgement session’s instructions: read the summary, write the narrative and the report’s two narrative sections, point every topic at a leaderboard entry or a newly cited path.
changes.md
Status table · Markdown. The topic suggestions a person acted on, each with a check rule the next records evaluate.
record.mjs
Script · Node. Appends steps and the narrative to the run record in the summary’s frontmatter; shared with the three visibility readouts.
check.mjs
Script · Node. Checks that every number in the record appears in the summary’s text and that every filled bracket equals the record; shared with the visibility readouts.
frontmatter.mjs
Script · Node. Reads and writes the run record at the top of summary.md; shared with the visibility readouts.
run-weekly-report.ps1
Scheduler · PowerShell. What the scheduler calls every morning: pulls, runs the script, starts the judgement session, commits the summary and the report, deploys.
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
- A report row label does not match. The bracket stays empty and the record says which label it could not find. Nothing is guessed into the table the week’s decisions are made from.
- Reddit answers 429, X refuses the read, or the AWS credentials are missing. That number is null, recorded as not read, and the run goes on. Nothing is retried.
- The week’s report skeleton does not exist yet. The summary is written anyway. The report is a person’s document and the agent does not create it; the record says it waited for one.
- Every leaderboard is empty. The judgement session writes the fixed sentence that nothing registered a click, a citation or a score above zero, and suggests no topic. That is a reading, not a failure.
Risk notice
What to watch for
- The report skeleton’s row labels are the interface, and nothing stops a person from rewording them. When they change, the script fills nothing for that row and records a wait; a person fills it by hand that week.
- GA4 stays unreachable. The referral column stays null, and how many people LinkedIn, Reddit, X and Medium sent to the site stays unmeasured until someone with access grants a viewer seat.
- Reddit answers 429 to non-browser user agents now and then. That post is recorded as null, not retried.
- Most weeks every leaderboard is empty, and that is the honest finding: four weeks of readings were mostly zero. The value is seeing the week a zero becomes non-zero, not having something to say every week.
FAQ
Questions about this agent
Why no single score for the week?
A Google click and a Reddit upvote are not the same thing, and a number that adds them cannot be explained to anyone. Each leaderboard stands alone, and every reader of the page can rebuild it from the files it was counted from.
Why does a piece published this week show no traffic?
Search Console’s last days are not settled when the run happens, so traffic is read for the seven settled days ending three days before the run. A piece published this week shows its first traffic in a later record rather than an unsettled number in this one.
Why is referral traffic missing?
How many people LinkedIn, Reddit, X and Medium sent to the site is a question only GA4 answers, and we do not have access to it. The column is recorded as not measured, with the reason, rather than left at zero.
What happens when the report’s row labels change?
The script fills nothing for that row and records a wait naming it. A fuzzy match would put a number in the wrong row of the table the week’s decisions are made from, so it never guesses.
Would you rather we ran this agent for you? There is a managed service for that.
Talk to us