This briefs an AI assistant that the operator has asked to analyse visitor
trends for this site. You get the data from the analyse_visitors tool (it needs
the analytics capability). The operator directs the analysis - this doc tells
you how to read the data and what you can honestly report.
Call analyse_visitors with an optional window (days, 1-365, default 30). It
returns a sanitised JSON summary built from lazysite's first-party access log
(recorded by the site itself, anonymised at write; the web-server access log
is the fallback source when no first-party data exists). You never
see the raw log, any filesystem path, or a visitor's IP address: the tool
aggregates and anonymises before anything reaches you. Repeated calls are cheap -
the data is cached and only new log lines are processed each time.
The response has these fields:
window { days, from, to } the period covered
totals { human_visits, unique_visitors, pageviews }
traffic_classes { human|ai|bot|noise: { visits, share } }
by_day [ { date, human, ai, bot, noise } ] the trend, one row per day
top_pages [ { key: "/path", count } ] most-visited pages (people only)
referrers { direct, internal, external: [ { key: host, count } ] }
status_codes { "200": n, "404": n, ... } people's responses
events [ { t, class, path, status, visitor } ] recent requests
events_capped true if the event stream hit its size limit
unique_visitors is approximate - it counts anonymised networks, not people.
visitor in an event is a short, non-reversible token for the request's network,
so you can group events into rough sessions/flows without identifying anyone. t
is a Unix timestamp.
Every request is classified by a log-only heuristic (user-agent + path + status):
/wp-login.php, /.env, *.php on a
Markdown site). Background abuse, not audience - usually report it only if it
spikes.
When the operator asks about "traffic" or "visitors", they almost always mean the human class. Call out the AI share separately when it is interesting.
by_day.ai share and its trend - useful as AI search grows.Lead with the answer to what the operator asked, backed by the specific numbers. Prefer a short narrative plus the few figures that matter over dumping the whole JSON. Flag a caveat when a number is approximate or the window is short.