URL: /cloud/rules

---
title: "Cloud Rules"
description: "Audit rules powered by cloud services - what they check and what they cost"
icon: "list-checks"
---

Cloud rules are regular audit rules that need data your machine doesn't have - AI models, full filter lists, search demand data, or a shared link cache. They run automatically when you're [logged in](/cloud) and report `skipped` when you're not.

## The rules

| Rule | What it checks | Cost |
|------|----------------|------|
| [`ai/llm-parsability`](/rules/ai/llm-parsability) | How well LLMs can parse and understand each page | 1 credit per page |
| [`ai/page-type-match`](/rules/ai/page-type-match) | AI-classified page type agrees with declared structured data | 1 credit per page (shared with parsability) |
| [`ai/site-type`](/rules/ai/site-type) | Classifies the overall site type (blog, ecommerce, saas, docs, ...) | 5 credits per audit |
| [`eeat/authority-signals`](/rules/eeat/authority-signals) | Per-page authorship, citations, and outbound references | 1 credit per page |
| [`adblock/element-hiding`](/rules/adblock/element-hiding) | Elements hidden by EasyList cosmetic rules | 5 credits per audit, shared |
| [`adblock/blocked-links`](/rules/adblock/blocked-links) | Links and resources ad blockers would block | shared with above |
| [`adblock/privacy-blocked`](/rules/adblock/privacy-blocked) | Trackers that EasyPrivacy filter lists would block | shared with above |
| [`links/dead-links`](/rules/links/dead-links) | External links verified through a shared global cache | 1 credit per 100 URLs |
| [`gaps/keywords`](/rules/gaps/keywords) | Keywords competitors rank for that you don't | 25 credits per audit, **opt-in** |
| [`gaps/content`](/rules/gaps/content) | Topic clusters with search demand you don't cover | 25 credits per audit, **opt-in** |

The three adblock rules share a single 5-credit blocklist check per audit - enabling all three costs the same as enabling one.

The two gap-analysis rules are **disabled by default** because of their cost. Enable them explicitly:

```toml squirrel.toml
[rules]
enable = ["gaps/keywords", "gaps/content"]
```

## How they run

Cloud rules match rule filters like any other rule - `enable = ["*"]` (the default) includes them. During an audit, a dedicated cloud phase batches all the required service calls, then rules read the results. You'll see the estimate in the start banner and the actual spend per service in the audit summary:

```
☁ Cloud: 67 credits spent (ai_parse 22, authority_signals 22, site_type 5, ...)
```

## Skip behavior

A cloud rule never fails your audit. When it can't run, it reports `skipped` with a reason:

| Skip reason | Meaning |
|-------------|---------|
| `not-authenticated` | Not logged in - run `squirrel auth login` |
| `insufficient-credits` | Balance too low - top up or lower the page count |
| `credit-cap-reached` | The audit hit `max_credits_per_audit`; work was truncated at the cap |
| `service-unavailable` | The cloud service errored; charges for failed calls are refunded |

## Controlling spend

The per-audit cap, confirmation threshold, and `--yes` flag are covered in [Credits & Pricing](/cloud/credits#spend-controls).

To opt out of specific cloud rules while keeping the rest:

```toml squirrel.toml
[rules]
disable = ["adblock/*", "links/dead-links"]
```

Or disable all cloud calls for a project:

```toml squirrel.toml
[cloud]
enabled = false
```
