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.

Goes inThe other agents’ own records, all files already in the repository: three posting calendars, three registries, the X reply ledger, the blog posts, four outbound tracking tables, and the latest Google, Bing and AI visibility snapshots; plus three optional network reads for Reddit scores, X impressions and the lead count
Comes outOne summary a day for the seven days ending on the run day: published counts per agent, the outbound funnel as counts, the traffic the latest Google and Bing snapshots recorded, five separate leaderboards and the paths newly cited in AI answers; its run record for the public log; and, on Fridays, the week’s report with its brackets filled and its two narrative sections written
Human stepA person reads the Friday report, decides which topic suggestions to act on and writes each as a row with a check rule the next records evaluate. The agent never changes a page or a calendar
Runs onA machine you control: Node for the script and an agent runner for the judgement step. No browser

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.

Counts per agent and per source

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.

summary.md

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.

Filled brackets and the narrative

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.

tools/weekly/summarize.mjsDefinitions in the script

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.

Read from the scriptEvery summary names its window, its traffic window and the snapshots it read

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.

Goes in

Files already in the repository, read where they are

Comes out

Published counts per agent and the funnel as counts

Where a person steps in

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.

Goes in

The three snapshot folders, newest first

Comes out

Traffic by page, Copilot citations by page, the AI numbers copied not recomputed, the newly cited paths

Where a person steps in

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.

Goes in

The post addresses from the calendar and the registry; the X credentials file; AWS credentials if present

Comes out

Reddit score and comments per post, X impressions per post, the lead count, or null for each that could not be read

Where a person steps in

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.

Goes in

Everything read so far and the previous record

Comes out

summary.md in a dated folder, counts only

Where a person steps in

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.

Goes in

The week’s report skeleton, written by a person

Comes out

The report with its brackets filled, and the list of the ones it left

Where a person steps in

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.

Goes in

summary.md, the previous summary, the week’s report

Comes out

The narrative on the record and, on Fridays, sections 5 and 6 of the report

Where a person steps in

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 log
Latest 2 runsAs of Oct 16, 2026
SucceededOct 16, 2026, 10:45Weekly report · Friday · report daySummary written. Published nine blog posts, six LinkedIn posts, six Reddit posts, three X posts, 12 X replies and three Medium stories (Oct 10 to Oct 16). Outbound: 22 connection requests, seven accepted, zero replies in the window; 164, 60 and zero since Sep 22. Google recorded 23 clicks on 133 pages (Sep 15 to Oct 13) and Bing two on 13 for the seven settled days to Oct 13 (last record: 21 and two); Copilot cited our pages 167 times in 28 days. Reddit scores for the window’s posts could not be read, X posts at 68 impressions. The AI readout over 7 days: zero of 80 answers mentioned us and zero cited us. zero leads came in. Referral traffic from LinkedIn, Reddit, X and Medium is not measured yet.SucceededOct 15, 2026, 17:44Weekly report · ThursdaySummary written. Published 10 blog posts, seven LinkedIn posts, six Reddit posts, three X posts, 10 X replies and three Medium stories (Oct 9 to Oct 15). Outbound: 22 connection requests, seven accepted, zero replies in the window; 164, 60 and zero since Sep 22. Google recorded 21 clicks on 121 pages (Sep 12 to Oct 10) and Bing two on 13 for the seven settled days to Oct 12; Copilot cited our pages 156 times in 28 days. Reddit scores for the window’s posts could not be read, X posts at 61 impressions. The AI readout : zero of 40 answers mentioned us and zero cited us. zero leads came in. Referral traffic from LinkedIn, Reddit, X and Medium is not measured yet.

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 written workflow for the judgement session plus one Node script, the summariser, which shares the record, check and frontmatter library with the three visibility readouts. Not packaged for public download yet — the setup guide below describes what they do; the managed tier runs it for you today.
Setup guide
  1. 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.
  2. 02

    Browser setup

    • None. Every source is a file in the repository or a public API; nothing in this agent opens a browser.
  3. 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.
  4. 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.
  5. 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.
Files · 7

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.

Script

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.

Workflow

changes.md

Status table · Markdown. The topic suggestions a person acted on, each with a check rule the next records evaluate.

Status table

record.mjs

Script · Node. Appends steps and the narrative to the run record in the summary’s frontmatter; shared with the three visibility readouts.

Script

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.

Script

frontmatter.mjs

Script · Node. Reads and writes the run record at the top of summary.md; shared with the visibility readouts.

Script

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.

Scheduler

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.