hoo-daily

hoo-daily is a skill for Claude Code from shalintripathi/organic-os. It costs 45 tokens per session (4,104 once invoked), scanned A, original, MIT.

A daily data-collection routine for a website's search and analytics signals. It records search performance, website visits, tracked keywords, and visits referred by AI services in a central repository.

In plain words
What is it for?
Use it to pull yesterday's Google Search Console and Google Analytics data, check tracked keywords, and record selected AI-referral traffic. It can also stop safely when the repository schema is incompatible.
Why use it?
It removes the need to gather these measurements manually and keeps daily observations in one consistent place.

Skill for Claude Code

Written for Claude Code: $CLAUDE_PLUGIN_ROOT variable. Also seen: mentions Claude Code.

Runs only inside its plugin — its command needs a path that Claude Code sets for a plugin’s own hooks and for nothing else. Install the plugin, not this.

Part of the organic-os plugin — 24 skills, 24 commands, 14 agents shipped together

Good fit Use it to pull yesterday's Google Search Console and Google Analytics data, check tracked keywords, and record selected AI-referral traffic. It can also stop safely when the repository schema is incompatible.

Compare 6 skills from other repositories ↓
Install

Getting it into your agent

This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.

Claude Code
/plugin marketplace add shalintripathi/organic-os
Claude Code
/plugin install organic-os

Made for: Claude Code.

Or install organic-os, the plugin that ships this one along with the rest of its 24 skills, 24 commands, 14 agents.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for hoo-daily

README.md
[![agentmods](https://agentmods.dev/badge/skills/shalintripathi/organic-os/hoo-daily/github.svg)](https://agentmods.dev/skills/shalintripathi/organic-os/hoo-daily)
Your own site
<a href="https://agentmods.dev/skills/shalintripathi/organic-os/hoo-daily"><img src="https://agentmods.dev/badge/skills/shalintripathi/organic-os/hoo-daily/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for hoo-daily

Your own site · 80×15
<a href="https://agentmods.dev/skills/shalintripathi/organic-os/hoo-daily"><img src="https://agentmods.dev/badge/skills/shalintripathi/organic-os/hoo-daily.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 45 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 4,104 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00045 $0.04104
Opus 5 $0.00023 $0.02052
Sonnet 5 $0.00009 $0.00821
Haiku 4.5 $0.00005 $0.00410

Measured 11d ago against content hash 893e5cc11f16, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-11, from the pricing page.

Security

Grade A, and why

hoo-daily scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

plugin/skills/hoo-daily/SKILL.md · 289 lines

How it starts

The opening of the file, as written. The whole thing — 289 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Daily signal pull (Generator role - append only)

Resolve the brain: use registry.get_active() when running interactively; scheduled runs receive the brain path from the routine configuration.

  1. Run core.contracts.check_schema(brain_path) first. If not compatible, relay the action string and stop before any of the steps below.

  2. Read site-profile.yaml. Determine available sources: GSC connector, GA4 connector, tracked keywords in keywords/tracking.yaml, WordPress endpoint. The sessions and referral pulls read the analytics slot (ADR-0009) - GA4 is the adapter today; see CONTRIBUTING.md's "Contributing an analytics adapter" to add Clarity or Matomo.

  3. Pull, for yesterday (or since the last signal date - read the latest file in signals/): GSC clicks/impressions/CTR/position for top and tracked queries; GA4 sessions; spot-check 3 tracked keywords in one AI engine, rotating. 2.5. AI-referral segmentation (runs only when GA4 is reachable): segment referral sessions whose source matches a known AI surface and record one ai_referrals: line in the daily signal - the session count plus the top landing pages (cap 3, each with its count). The known AI surfaces: chatgpt.com, perplexity.ai, gemini.google.com, copilot.microsoft.com, claude.ai. This list is maintained here, in this skill, and reviewed quarterly - hoo-weekly and hoo-monday-report quote it, never extend it (see docs/INFORMATION-MAP.md in the repo). Zero matching sessions is a real value - write ai_referrals: 0. GA4 unreachable means no ai_referrals: line at all, never a guessed one. 2.6. Headline metrics line: record what steps 2 and 2.5 actually pulled as ONE structured signal line so later runs can parse it - the exact tokens clicks: N, impressions: N, sessions: N on a single line (site-wide daily totals; a source that was not pulled omits its token, never writes 0). Together with step 2.5's ai_referrals: N these are the daily's structured metric forms; the anomaly check below and the CSV export (skills/hoo-export, core.export) parse exactly these tokens. 2.7. Anomaly check: for each headline metric this run actually has - GSC clicks, GSC impressions, GA4 sessions, ai_referrals - collect the same metric's values from the trailing 7 daily signal files (parse the structured lines from steps 2.5 and 2.6; days without the metric are gaps, never zeros) and compare today's value to the median of those trailing values.

    • Baseline discipline: fewer than 4 prior daily signals carrying the metric -> skip that metric with a one-line note in today's signal ("anomaly check: skipped , no baseline yet") - no baseline, no alert.
    • Noise floor: a trailing median below 10 -> skip the metric; percent swings on single-digit medians are noise, not signals.
    • Threshold: today deviating from the median by more than 40 percent in either direction flags the metric. The default is profile-configurable via the additive alerts: {threshold_pct: 40} key in site-profile.yaml (absence means 40; see docs/site-repo-contract.md). Each flagged metric -> one P1 signal in falsifiable form: the metric, today's value, the 7-day median, the direction, and a cause line that obeys the attribution rule below. These P1 signals JOIN the daily alert below - never a separate message.

    THE ATTRIBUTION RULE, canonical here; hoo-weekly and onsite-measure quote it. A cause may not be asserted without naming the comparison that was actually run. Every causal claim carries three parts:

    • the claim: "clicks fell because it was a weekend";
    • the comparison actually performed: "today vs the 3 most recent same-weekday signals";
    • what would falsify it: "if next Saturday lands at the weekday median, seasonality was not the cause". If the comparison was not run, the cause is recorded as cause: unknown (no same-weekday comparison run) - never a plausible-sounding guess. "Weekend seasonality" is not an explanation unless the same-weekday prior-period comparison was actually made, and a deploy is not an explanation unless the deploy record was actually read. Candidates worth comparing against: same-weekday prior periods, a deploy or release record, a tracking or tag change, a SERP feature shift. An unknown cause is a complete signal, not a failed one: it says what moved and what has not yet been checked. The caveat still rides in the signal itself: this check compares one day against a 7-day median, so seasonality can trip it. Rationale: alerting is the retention feature of every commercial monitor; ours rides the existing channel taxonomy instead of adding a dashboard (ROADMAP, v0.4). 2.8. Stage classification. Every detector in this skill and in skills/hoo-weekly was written for a site that already earns clicks, so a new site trips none of them and the loop goes quiet for months. Decide which stage this site is in, from its own numbers, before reporting anything.
    • Build rows from the GSC page/query pull step 2 already made: one dict per query carrying clicks, impressions, position, and the query and page where the pull has them.
    • Call core.stage.classify(rows): PYTHONPATH="$CLAUDE_PLUGIN_ROOT/lib" python3 -c "..." importing core.stage. The thresholds live in that module, never restated here (see docs/INFORMATION-MAP.md in the repo).
    • Record it as ONE structured signal line: the exact token stage: <early|growing|established> followed by the returned reason sentence. No GSC pull this run means no stage: line at all, never a guessed one.
    • GROWING or ESTABLISHED: nothing else changes. Every section of this skill and of skills/hoo-weekly runs exactly as it runs today. This step is purely additive for a site that has clicks.
    • EARLY: run the early-stage report below instead of reporting a quiet day.
  4. Write one append_signal line per notable observation (threshold: any WoW move > 10% or position change > 2 or a new AI citation appearing/vanishing). Quiet days produce one line: "no notable movement (checked: )". EXCEPTION: on an EARLY site with any impressions this run, a day is never quiet - the early-stage report below is what gets written, and "no notable movement" is wrong on data that says the site is visible. If neither GSC nor GA4 was reachable this run (both connectors read anything other than verified in connectors:), write the literal line no-data: GSC/GA4 not reachable from this runtime (checked: none) instead

    • this exact string is what step 3.5 below counts and greps for, so do not paraphrase it. 3.5. No-data escalation. After writing today's signal, count consecutive daily signal files - today's plus however many immediately prior days' files also contain a no-data: line, walking backward by filename date and stopping at the first file that does not (a day with real data, or a missing file, breaks the streak). If that count reaches 3:
    • Check the last 7 days of signal files for a nudge-sent: line. If one is already there, skip sending - do not repeat the nudge more than once per 7 days.
    • Otherwise send one nudge through the configured approval channel. This is a plain notification, not an approval item - send_item-style text delivered directly over the channel (telegram: one sendMessage; slack: one post; email: one send; in-session: print it; pr-merge: no live channel mid-cycle, so just log it to the signal and skip delivery), not a create_item/approve-reject proposal: "3 daily runs with no analytics data - GSC/GA4 are not reachable from this runtime. Fix: run /organic-os:setup and use the connector wizard for GSC/GA4, or connect directly - claude.ai Settings -> Connectors, or /mcp / claude mcp add in Claude Code."
    • Mark the nudge sent by appending nudge-sent: no-data escalation (GSC/GA4) to today's signal file via append_signal - this is the state marker; do not create a new state file for it.
  5. If an observation crosses P1 (drop > 30% on a money page), also create_item(kind="onpage-fix"...) or kind="strategy" and notify per the approval channel with one call: PYTHONPATH="$CLAUDE_PLUGIN_ROOT/lib" python3 -c "..." importing core.approval and calling notify_pending(<brain>, send), where send delivers over the configured channel (same channel selection as skills/onsite-propose step 4). An item is marked notified ONLY after its send returns without raising, so a failed send is retried on the next run rather than lost. Do not call is_notified or mark_notified by hand.

  6. Outcome follow-ups: for items in outcomes/ with a due measurement date of today, run the measurement per skills/onsite-measure and record. 5.5. Applied-change re-verification: scan outcomes/ for records with a reverify: block whose until is still in the future (written by skills/onsite-apply after a successful verify; see site-repo-contract.md). For each with due <= now, fetch the live values via the CMS adapter - the same fields the apply verified (title, meta description, canonical) - and compare to what the outcome record says was applied. Match: note the passing re-check in the outcome record, nothing else. Mismatch: append one P1 signal - "applied change no longer live - external revert suspected; re-propose" - naming the item id, the field, the applied value, and the live value; it goes out in the daily alert below. Once until passes, stop re-checking: the drift watch owns the long horizon (the baseline was already refreshed at apply time). Records without a reverify: block are never re-checked this way.

  7. If brain mode is git: commit and push with message "signals: YYYY-MM-DD".

Read the full file on GitHub · 289 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 11d ago First seen · 289 lines · 45 tokens per session scan A 893e5cc11f16

Subscribe to this mod's changes

hoo-daily is a skill published in the GitHub repository shalintripathi/organic-os (5 stars, last pushed 3d ago), licensed MIT. It adds 45 tokens to every session and 4,104 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

seo-vertical-detect

Classify a website as ecommerce, local-business, blog-publisher, saas, docs, or generic (multiple may apply), and report detected locales, from the persisted PageSnapshot plus the platform detector's vertical hints. Used by seo-orchestrator to decide which conditional modules to run and how to reweight the scores.

Hainrixz/claude-seo-ai · 71 tokens

seo-fix-apply

Writer protocol preloaded into the seo-fixer-writer agent — how confirmed SEO/AI-search fixes are applied (git pre-flight, backup, Edit/Write for local diffs, ticketed adapter CLIs for remote targets, re-verify, publish only on a second ticket, rollback) and the findings-array output contract. Used only by the fix…

Hainrixz/claude-seo-ai · 91 tokens

audit

Audit a website or web codebase for SEO and AI-search (GEO/AEO) — produces two independent 0-100 scores (Search SEO + AI Visibility) plus a prioritized, evidence-backed report persisted on disk. Read-only; never writes to the project. Use when the user asks to audit, analyze, check, or score a site's SEO, structured…

Hainrixz/claude-seo-ai · 127 tokens

ai-visibility

Fast-path AI visibility — get a brand's 0–100 Akii Visibility Score (computed by an open-source LLM judge against the brand's public footprint) with four-dimension breakdown AND a per-engine proxy map for ChatGPT, Claude, Gemini, Perplexity, Copilot, and Google AI Overviews based on FirstPageSage signal weights.…

akii-technologies-ltd/akii-seo-ai-search-optimizer · 290 tokens

optimize-page

Comprehensive single-page optimization across all three layers — traditional SEO (title / meta / H1 / internal links), AEO (chunk quality, direct-answer leads, FAQ extraction), and GEO rewrites using the tactics published by the Princeton/IIT Delhi GEO study (citation integration, expert quotes, statistics enrichment…

akii-technologies-ltd/akii-seo-ai-search-optimizer · 199 tokens

seo-audit

Single audit entry point — surface-level scorecard or deep infrastructure dive depending on the requested mode. Default full mode produces a multi-layer scorecard across all 9 areas (crawlability, indexation, meta tags, headings, images, Core Web Vitals, JS rendering, mobile + security, structured data, internal…

akii-technologies-ltd/akii-seo-ai-search-optimizer · 321 tokens