← CitunaCONTENT HISTORY
WHAT CHANGED
Update to Cituna
Snapshot Nov 12, 2026 · 00:09 UTC · version 0.2.2
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save Cituna and check future changes in Following.
Up to 3 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Run Cituna Autopilot, the weekly plan built only from evidence (Search Console queries, tracked prompts the brand is not named on, verified source gaps). It holds pages inside their 28-day window and proposes enrich, publish, title, pitch, fix or skip; nothing is written until the user picks rows. Use for \"run the autopilot\", \"weekly SEO or AEO plan\", \"what should we work on this week\", \"get us cited\".",
"included_files": [],
"name": "autopilot",
"skill_md_contents": "---\r\nname: autopilot\r\ndescription: Run Cituna Autopilot, the weekly plan built only from evidence (Search Console queries, tracked prompts the brand is not named on, verified source gaps). It holds pages inside their 28-day window and proposes enrich, publish, title, pitch, fix or skip; nothing is written until the user picks rows. Use for \"run the autopilot\", \"weekly SEO or AEO plan\", \"what should we work on this week\", \"get us cited\".\r\n---\r\n\r\n# Cituna Autopilot: plan the week from evidence\r\n\r\nRead [connection and evidence rules](../../references/connection-and-evidence.md) and\r\n[autopilot rules](../../references/autopilot-rules.md). Writing goes to the sibling\r\n`autopilot-write` skill; logging and the 28-day re-check to `autopilot-measure`.\r\n\r\nOne rule decides everything: **no evidence, no work.** Evidence is a Search Console query\r\nwith impressions, a tracked prompt the brand is not named on, or a verified source gap.\r\nEverything else is enriched into an existing page or skipped. Building the plan costs only\r\nreads (stored Cituna data is free; Search Console reads are metered but cheap). Model\r\nwriting happens only for the rows the user picks.\r\n\r\nOptions the user may add: `dry` (show the plan and stop, no question), `write N` (new pages\r\nthis week, default 2), `enrich N` (default 2), a brand or domain.\r\n\r\n## 1 · Connect and load last week\r\n\r\n1. `whoami`, `list_brands`, `gsc_status`, once per conversation. Use the named brand, the\r\n only brand, or ask. On Starter, say once that the plan and drafts work but applying needs\r\n Pro. If Search Console is not connected for the domain, drop the Search Console lanes, say\r\n the plan covers AI answers and sources only, and point to https://cituna.com/integrations.\r\n2. Read the change log and last plan if they exist (see autopilot-measure): pages whose\r\n `hold_until` has not passed are held; open rows from last week come back first. If\r\n re-checks are due, run autopilot-measure first so this week's plan learns from them.\r\n\r\n## 2 · Read (about ten calls)\r\n\r\n| Call | Arguments | Keep |\r\n| --- | --- | --- |\r\n| `gsc_striking_distance` | `domain`, `days: 28`, `minPosition: 4`, `maxPosition: 60`, `limit: 40` | query, page, position, impressions |\r\n| `gsc_zero_click_pages` | `domain`, `days: 28`, `limit: 20` | `snippet` and `page-two` rows with top queries |\r\n| `gsc_cannibalisation` | `domain`, `days: 28`, `limit: 20` | non-brand queries split across pages |\r\n| `gsc_coverage_gap` | `domain`, `days: 90`, `limit: 50` | silent URLs: page inventory, not work by itself |\r\n| `get_visibility` | `brand` | prompts answered and not cited, per engine |\r\n| `list_citation_sources` | `domain`, `range: \"30d\"`, `gapsOnly: true`, `limit: 15` | verified gaps, `yourPagesEnginesCite`, `whatEachEngineReads` |\r\n| `list_keywords` | `domain`, `stage: \"none\"` | `content.existingUrl`: the page that already serves a keyword |\r\n| `list_content_queue` | `domain`, `limit: 5` | `enabled`, `destination`, the `queued` topics |\r\n| `list_articles` | `domain`, `status: \"live\"` | AutoSEO pages: `url`, `lastSentAt`, `editsNotSent`, `enrich.eligible` |\r\n| `list_gaps` | `domain` | Cituna's own fix list |\r\n\r\nRead every `history` block first. `windowTruncated: true` means a young property: deep\r\npositions there mean Google barely knows the site, not that the content is weak. Do not page\r\nthrough `list_content_queue` articles for the plan; they are large. `list_articles` gives the\r\nAutoSEO pages as short rows, 50 a call; pass `nextCursor` as `before` only when an older page\r\nis a candidate.\r\n\r\n## 3 · Candidates\r\n\r\nSort every signal into the lanes in the rules:\r\n\r\n- **Near page one:** striking rows at 4 to 20 with 20+ impressions, grouped by page. The\r\n page's searches are the evidence; what they ask that the page does not answer is the work.\r\n- **Seen, not clicked:** zero-click rows with cause `snippet`. `page-two` rows go to\r\n enrichment, `ranking` rows are not title work, `branded` rows are skipped.\r\n- **Unserved demand:** striking rows at 20 to 60 with 50+ impressions. If the page Google\r\n shows fits the intent, enrich it; if it is off-intent and no page fits, a new page.\r\n- **Source only:** for each page in `yourPagesEnginesCite`, its `queries` are tracked prompts.\r\n Where today's grid shows the brand not cited by the engines in that page's `byEngine`, the\r\n engines read the page and recommend others.\r\n- **Absent:** prompts answered by 3+ engines with no cell cited and no page in\r\n `yourPagesEnginesCite`. Find the brand's page for the intent (`list_keywords.existingUrl`,\r\n the striking and coverage URLs, or one fetch of the sitemap). Found: enrich. None: new page.\r\n- **Verified source gaps:** targets with `outreachStatus` `none` or `planned`, ranked by\r\n engines citing them, then citations; publisher, directory and roundup roles first.\r\n- **Twins:** cannibalisation rows on non-brand queries.\r\n- **Not evidence:** queued topics whose `source` is a planner or manual idea with no query or\r\n prompt behind it, queued topics a page already serves, and silent pages with no query or\r\n prompt pointing at them. List them as skipped and never write more like them. The queued\r\n topics among them are `skip` rows the user can pick.\r\n\r\n## 4 · Gates and cheap confirmation\r\n\r\nApply the gates in the rules in order: 28-day hold, already owned or in flight, twins\r\nfirst, doorway test, plan and permission, weekly budget. A page's change date comes from the\r\nlog, the repository's git history for its source when Claude Code works in it, the page's\r\n`dateModified`, or Cituna's article record (`list_articles.lastSentAt`), in that order.\r\n\r\nOnly for candidates that pass, confirm cheaply:\r\n\r\n- Up to 3 AI candidates: `get_engine_answers` with `brand`, the exact `prompt` and one\r\n `engine` that answered without the brand. Note who is named and whether the brand's URL is\r\n in `cited_urls` (source only) or not (absent).\r\n- Each twin: fetch the weaker URL once. If it already redirects to the other, mark it\r\n resolved and waiting for Search Console.\r\n- Each title candidate: fetch the page once for its live title, H1, description and\r\n `dateModified`.\r\n\r\n## 5 · The weekly plan\r\n\r\nOrder, as in the founder's loop: twins first, then source-only enrichments (the cheapest AI\r\nfix), enrichments near page one, titles, new pages, with pitches alongside. Cap new pages and\r\nenrichments at the budget; the rest goes to next week with its reason.\r\n\r\nPresent:\r\n\r\n1. One line: brand, data window, Search Console state, plan tier.\r\n2. **This week:** a table of `# | lane | target | evidence (numbers and window) | outcome |\r\n model writing | re-check on`.\r\n3. **Held:** each page inside its window with its change date and re-check date (group by\r\n date when there are many).\r\n4. **Skipped:** counts by reason (no evidence, already owned, doorway, planner topics).\r\n5. **Learned since last run:** results and early reads from autopilot-measure, if any. Early\r\n reads are directions, never evidence.\r\n\r\nWith a filesystem, save the plan to `~/.cituna/autopilot/<domain>/plan-<YYYY-MM-DD>.md`.\r\nAn empty week is a valid result: say so, name the next re-check dates, and stop.\r\n\r\n## 6 · Ask once, then apply only what was picked\r\n\r\nUnless `dry`, ask one multi-select question (a picker where the host has one, otherwise a\r\nnumbered list): which rows to apply now. Then, per picked row:\r\n\r\n| Outcome | What happens |\r\n| --- | --- |\r\n| enrich, publish | autopilot-write, one row at a time; the claims ledger and fact check are not optional |\r\n| title | Propose a title and description from the page's own queries (`gsc_query` with a `page` equals filter) and its live title, under the page rules; apply in the repository or tell the user where; log it |\r\n| title, on an AutoSEO page that is due | `enrich_article` with the article `id` from `list_articles` (`enrich.eligible: true`): Cituna writes the title, description and up to two FAQ answers from the page's own queries and updates the live page. It uses one AutoSEO generation; a refusal spends nothing. Log it as a `refresh` with the returned `before` |\r\n| pitch | Draft a short ask: what the cited page covers, the fact that earns the brand a place, the link. Never send it. On the user's word, `set_outreach_status` with `status: \"planned\"`; `pitched` only after they send it |\r\n| fix | Recommend the owner page by clicks, then position, and what happens to the other (301 or a different intent); a pull request in the repository or written steps; log it |\r\n| queue | `queue_article` with `domain`, `keyword`, `impressions`, `position` only when AutoSEO is `enabled` and the user wants Cituna to write it. Never also draft it here |\r\n| Cituna fix | `set_gap_status` to `doing` or `done` on the user's word |\r\n| skip a queued topic | `skip_queued_topics` with the picked `queued[].id` values; queueing the same text again brings one back |\r\n\r\nEvery applied change goes into the change log the day it goes live. Never call `run_scan`\r\nor `set_prompts` from the autopilot, and never `enrich_article` for a row the user did not\r\npick.\r\n\r\n## Relevant tools\r\n\r\n`whoami`, `list_brands`, `gsc_status`, `gsc_striking_distance`, `gsc_zero_click_pages`,\r\n`gsc_cannibalisation`, `gsc_coverage_gap`, `gsc_query`, `get_visibility`,\r\n`get_engine_answers`, `list_citation_sources`, `list_keywords`, `list_content_queue`,\r\n`list_articles`, `list_gaps`, `queue_article`, `enrich_article`, `skip_queued_topics`,\r\n`set_outreach_status`, `set_gap_status`.\r\n"
}SHA-256 of public snapshot: b6bcbb31e50bf4c446254b06a5bc3f3c9fb023dbd3803bca324c82aa299ece65