{"basis":"distinct_agents_7d counts DISTINCT non-Cloudflare public client IPs that pass the canonical is_real_external de-loop. SAME identity basis as /api/v1/stats/live-proof.distinct_callers_7d but NOT the same WINDOW: the fast path reads the reach_weekly ISO-week rollup (max of the last 2 weeks), so mid-week it reports a partial week and runs BELOW the trailing-7d canonical count \u2014 64 vs 95 on 2026-07-31. For the honest trailing-7d agent count use real_agents_7d in THIS payload (or /api/v1/mcp/funnel.real_external_agents_7d \u2014 same single-sourced query). It is an IP-derived PROXY for agents, not a true agent identity: agent_id is md5(client_ip), so several agents behind one NAT count once, and one agent on a rotating proxy counts many times. Treat it as distinct calling SOURCES.","call_shape_error":null,"concentration_flag_7d":false,"distinct_agents_7d":79,"distinct_platforms":4,"distinct_platforms_basis":"distinct_platforms counts canonical VENDORS (ai_platform_canon.count_platforms over the per_platform list published in THIS payload): unrecognized ids (the `mcp` protocol bucket, connectors-manager, test harnesses) are not platforms, and claude / claude-code / anthropic-* collapse to one vendor. per_platform_client_ids is the raw row count of that same list. The two differ by construction and are NOT two answers to one question \u2014 recompute either from per_platform[] to check.","net_of_top_basis":"Same query, window and exclusions as real_calls_7d (mcp_calls_identity WHERE is_public_ip AND is_real_external, rolling 7d), so real_calls_7d == top_caller_calls_7d + real_calls_net_of_top_7d holds by construction and the two cannot drift. The subtracted caller is NOT excluded from any other field \u2014 it is a companion to the headline, not a replacement, and a gateway is not automatically a non-agent. Read the client name before calling this customer concentration. IP-derived PROXY: NAT under-counts, rotating egress over-counts.","note":"Honest reach = DISTINCT public IPs per platform (real agent sources), not cumulative request volume. The big 'requests served' counts are real traffic but loop-inflated; this is the addressable reach.","per_platform":[{"agents":34,"call_shape":"varied","call_shape_stats":{"calls":487,"distinct_tools":60,"max_over_median":27.67,"shape":"varied","top_share":0.17},"canonical_vendor":null,"client_class":"unknown","platform_id":"connectors-manager","requests":146},{"agents":15,"call_shape":"varied","call_shape_stats":{"calls":172,"distinct_tools":35,"max_over_median":11.33,"shape":"varied","top_share":0.198},"canonical_vendor":"openai","client_class":"assistant","platform_id":"chatgpt","requests":32},{"agents":13,"call_shape":"varied","call_shape_stats":{"calls":119,"distinct_tools":27,"max_over_median":15.0,"shape":"varied","top_share":0.252},"canonical_vendor":"claude","client_class":"assistant","platform_id":"anthropic/claudeai","requests":25},{"agents":4,"call_shape":"varied","call_shape_stats":{"calls":43,"distinct_tools":19,"max_over_median":10.0,"shape":"varied","top_share":0.233},"canonical_vendor":"claude","client_class":"assistant","platform_id":"claude","requests":4},{"agents":3,"call_shape":"varied","call_shape_stats":{"calls":53,"distinct_tools":16,"max_over_median":36.0,"shape":"varied","top_share":0.679},"canonical_vendor":null,"client_class":"unknown","platform_id":"unknown","requests":28},{"agents":3,"call_shape":"sweep","call_shape_stats":{"calls":41,"distinct_tools":18,"max_over_median":2.5,"shape":"sweep","top_share":0.122},"canonical_vendor":"cursor","client_class":"assistant","platform_id":"cursor","requests":10},{"agents":3,"call_shape":"insufficient_data","call_shape_stats":{"calls":8,"distinct_tools":1,"max_over_median":1.0,"shape":"insufficient_data","top_share":1.0},"canonical_vendor":null,"client_class":"unknown","platform_id":"agent-collector","requests":7},{"agents":3,"call_shape":"varied","call_shape_stats":{"calls":70,"distinct_tools":17,"max_over_median":16.0,"shape":"varied","top_share":0.457},"canonical_vendor":"claude","client_class":"assistant","platform_id":"claude-code","requests":4},{"agents":2,"call_shape":"varied","call_shape_stats":{"calls":800,"distinct_tools":60,"max_over_median":20.57,"shape":"varied","top_share":0.09},"canonical_vendor":null,"client_class":"unknown","platform_id":"mcp-generic-client","requests":120},{"agents":2,"call_shape":"insufficient_data","call_shape_stats":{"calls":7,"distinct_tools":1,"max_over_median":1.0,"shape":"insufficient_data","top_share":1.0},"canonical_vendor":null,"client_class":"unknown","platform_id":"clono","requests":4},{"agents":1,"call_shape":"sweep","call_shape_stats":{"calls":24,"distinct_tools":16,"max_over_median":4.0,"shape":"sweep","top_share":0.167},"canonical_vendor":"copilot","client_class":"assistant","platform_id":"copilot","requests":24},{"agents":1,"call_shape":"insufficient_data","call_shape_stats":{"calls":1,"distinct_tools":1,"max_over_median":1.0,"shape":"insufficient_data","top_share":1.0},"canonical_vendor":"copilot","client_class":"assistant","platform_id":"copilot-cli","requests":1}],"per_platform_client_ids":12,"period":"7d","period_basis":"?period=7d (default) serves THIS payload \u2014 the reach_weekly rollup fast path plus the canonical rolling-7d real_agents_7d/real_calls_7d. ?period=30d and ?period=all are computed live over mcp_calls_identity and return window-neutral keys (real_agents / real_calls / window_start / window_end) \u2014 deliberately NOT *_7d, so a longer window can never be read as a 7-day number. An unrecognised period returns 400, not this payload.","real_agents_7d":66,"real_agents_7d_basis":"COUNT(DISTINCT agent_id) / COUNT(*) FROM mcp_calls_identity WHERE is_public_ip AND is_real_external, rolling window ending now. Identity: agent_id = md5(first public X-Forwarded-For token), NULL for Cloudflare POP ranges (edge proxies never count as agents); is_public_ip drops private/CGNAT ranges. Exclusions: is_real_external = this module's real_calls_predicate() rendered into the view, plus the view's internal-IP and scripted-UA backstops \u2014 crawlers, probes, QA harnesses and self-traffic are OUT. calls counts every real-external call (including CF-POP rows that carry no agent identity). An IP-derived PROXY for agents: NAT under-counts, rotating egress over-counts. Rolling 7d \u2014 THE canonical figure for any '(7d)' display. distinct_agents_7d in this payload is the ISO-week rollup (max of last 2 weeks), kept for the WoW trend; label it weekly, never '(7d)'.","real_agents_net_of_top_7d":65,"real_calls_7d":370,"real_calls_net_of_top_7d":299,"requests_7d":405,"rollup_week_start":"2026-10-12","source":"rollup","supported_periods":["7d","30d","all"],"top_caller_calls_7d":71,"top_caller_pct_7d":19.2,"unrecognised_basis":"client ids that collapse to no known vendor under ai_platform_canon.canonical_platform \u2014 MCP tooling, verifiers, registry simulators and generic clients. Recognition is an allowlist, so this is where non-assistant traffic lands; it is published so the gap between per_platform_client_ids and distinct_platforms is readable without source access. See unrecognised_by_class_* for what it is actually made of \u2014 the bare count cannot distinguish a harness from an agent.","unrecognised_by_class_basis":"The unrecognised bucket, split by ai_platform_canon.client_class. It was one undifferentiated number and that number was 60% of the window (345 of 577 requests, 2026-09-07) \u2014 a reader could not tell hidden adoption from expected tooling, and those imply opposite next moves. \u2605 CLASS IS NAME-BASED AND THEREFORE A HINT: a client id is self-declared. Measured over 30d on 2026-09-07, `connectors-manager` reads like plumbing and BEHAVES like an agent doing work (execute_plan 15, why_dchub 13, then site_selection_canvas / rank_markets / analyze_site), while `chain-hire` called ONE tool 1,473 times and `actionist-apps-verification` swept the catalogue at a flat 5-15 calls across many distinct tool names. So `unknown` means UNCLASSIFIED, never 'tooling' \u2014 reading it as tooling is how a real caller stops being counted. It is the bucket to investigate. \u2605 None of these ids are vendors and none appear in the platforms headline: class and vendor are separate questions, and _VENDOR_ALIASES is deliberately untouched.","unrecognised_by_class_ids":{"unknown":5},"unrecognised_by_class_requests":{"unknown":305},"unrecognised_by_shape_basis":"The same unrecognised bucket split by ai_platform_canon.call_shape \u2014 what each caller DID, not what it calls itself. This is the stronger signal and the one that settled a case class could not: `connectors-manager` reads like plumbing and behaves like an agent (execute_plan, why_dchub, site_selection_canvas, rank_markets). single_tool = one tool takes 90%+ of calls; sweep = flat across 5+ tools (a harness walking the catalogue); varied = a steep, real-looking workload. Thresholds were measured, not chosen: over 30d the flattest arguable-tooling caller and the steepest arguable-agent caller sit either side of max/median 4.0, and both boundary cases are pinned in tests/test_call_shape_thresholds_are_measured.py. \u2605 insufficient_data is NOT a shape \u2014 below a 10-call floor the distribution is noise, and forcing a verdict there would manufacture one. Read `varied` under `unknown` as the honest estimate of real adoption we cannot yet name. Per-row call_shape_stats carries the numbers each verdict rests on.","unrecognised_by_shape_ids":{"insufficient_data":2,"varied":3},"unrecognised_by_shape_requests":{"insufficient_data":11,"varied":294},"unrecognised_client_ids":5,"unrecognised_requests":305,"window":"iso_week rollup \u2014 the latest COMPLETE week (reach_weekly \u00b7 precomputed daily), named in rollup_week_start. NOT rolling 7d; for a trailing-7d count see real_agents_7d","window_basis":"ISO calendar week (reach_weekly rollup), NOT trailing 7d"}
