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.
/plugin marketplace add shalintripathi/organic-os/plugin install organic-osWrote 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.
[](https://agentmods.dev/skills/shalintripathi/organic-os/hoo-daily)<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.
<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>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.
| Model | Per session | Once 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 |
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.
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.
-
Run
core.contracts.check_schema(brain_path)first. If not compatible, relay the action string and stop before any of the steps below. -
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.
-
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 - writeai_referrals: 0. GA4 unreachable means noai_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 tokensclicks: N,impressions: N,sessions: Non a single line (site-wide daily totals; a source that was not pulled omits its token, never writes 0). Together with step 2.5'sai_referrals: Nthese 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 "..."importingcore.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 nostage: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.
-
Write one
append_signalline 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 thanverifiedinconnectors:), write the literal lineno-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 acreate_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 viaappend_signal- this is the state marker; do not create a new state file for it.
- 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
-
If an observation crosses P1 (drop > 30% on a money page), also
create_item(kind="onpage-fix"...)orkind="strategy"and notify per the approval channel with one call:PYTHONPATH="$CLAUDE_PLUGIN_ROOT/lib" python3 -c "..."importingcore.approvaland callingnotify_pending(<brain>, send), wheresenddelivers 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 callis_notifiedormark_notifiedby hand. -
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: scanoutcomes/for records with areverify:block whoseuntilis still in the future (written by skills/onsite-apply after a successful verify; see site-repo-contract.md). For each withdue<= 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. Onceuntilpasses, stop re-checking: the drift watch owns the long horizon (the baseline was already refreshed at apply time). Records without areverify:block are never re-checked this way. -
If brain mode is git: commit and push with message "signals: YYYY-MM-DD".
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.
- 11d ago First seen · 289 lines · 45 tokens per session scan A 893e5cc11f16
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.
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.
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…
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…
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.…
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…
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…