← CitunaCONTENT HISTORY

Update to Cituna

Snapshot Nov 12, 2026 · 00:09 UTC · version 0.2.2

Collection source: downloaded plugin package.

WHAT CHANGED

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 JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Write one page or enrichment a Cituna Autopilot plan approved, with a claims ledger for every fact and a separate fact-check pass, then publish through the user's repository or CMS, or Cituna's copy of an AutoSEO page, and record it in Cituna. Never writes without evidence or publishes by itself. Use for \"write the approved page\", \"draft the enrichment\", \"fact-check this draft\".",
  "included_files": [],
  "name": "autopilot-write",
  "skill_md_contents": "---\r\nname: autopilot-write\r\ndescription: Write one page or enrichment a Cituna Autopilot plan approved, with a claims ledger for every fact and a separate fact-check pass, then publish through the user's repository or CMS, or Cituna's copy of an AutoSEO page, and record it in Cituna. Never writes without evidence or publishes by itself. Use for \"write the approved page\", \"draft the enrichment\", \"fact-check this draft\".\r\n---\r\n\r\n# Write, check and publish one approved row\r\n\r\nRead [connection and evidence rules](../../references/connection-and-evidence.md),\r\n[autopilot rules](../../references/autopilot-rules.md) and\r\n[page rules](../../references/autopilot-pages.md). Work one row at a time and finish it\r\nbefore the next.\r\n\r\n## 0 · Pick the lane before writing a word\r\n\r\nNothing generated may be thrown away, so the publishing route is chosen first:\r\n\r\n- **Write here:** draft with a ledger, fact-check, the user publishes (repository or CMS),\r\n  then `mark_article_published` records the live URL.\r\n- **Queue for AutoSEO:** `queue_article` hands the keyword to Cituna's AutoSEO, which writes\r\n  its own draft. Check `list_content_queue.enabled` first: when AutoSEO is off the topic only\r\n  waits. Never draft here as well; that draft would be discarded.\r\n- **Enrichments are written here.** For a page AutoSEO wrote (it is in `list_articles`), the\r\n  approved blocks go into Cituna's copy with `update_article`, and the page changes when the\r\n  user sends the article from the Cituna app. Keep its edits in Cituna: `enrich_article`\r\n  refuses a page edited on the site since Cituna sent it.\r\n- **A refresh is Cituna's, not a draft:** a `title` row on an AutoSEO page that\r\n  `list_articles` shows with `enrich.eligible: true` goes to `enrich_article`, which writes the\r\n  title, description and up to two FAQ answers from the page's own queries and updates the\r\n  live page. Draft nothing here for it.\r\n\r\n## 1 · Re-check the row (free)\r\n\r\nThe row must carry its evidence: the queries with impressions and position, the prompt with\r\nthe engines that answered without the brand, or the source host with its `absent` check. A\r\nrequest without evidence goes back through the autopilot gates; if none applies, stop and\r\noffer to enrich an existing page or skip.\r\n\r\nThe plan may be days old, so re-run two gates for this row: the 28-day hold on the target\r\npage, and `list_keywords` (`content.stage`, `content.existingUrl`) for the keyword. Queued,\r\ndrafted or published means stop and report the existing work. For an AutoSEO page, read its\r\nrow again with `list_articles`: `lastSentAt` for the hold, `enrich.eligible` for a refresh.\r\n\r\n## 2 · Brief (reads only)\r\n\r\n- **Searches** for an enrichment: `gsc_query` with `domain`, `dimensions: [\"query\"]`,\r\n  `days: 28`, `rowLimit: 25` and a filter `{dimension: \"page\", operator: \"equals\",\r\n  expression: <url>}`. For a new page: `dimensions: [\"query\", \"page\"]` with a `query`\r\n  `contains` filter on its core words, to see what Google shows of the brand today.\r\n- **Prompts:** `get_engine_answers` with `brand` and the exact `prompt`, all engines, once:\r\n  who is named, which pages are cited, whether the brand's page is among them. For more on a\r\n  cited host, `list_citation_sources` with `search` set to it.\r\n- **The brand's facts:** in a repository, its facts files (pricing, plans, product docs) with\r\n  `path:line`; otherwise the brand's own pages (fetch) or the user. Never from memory.\r\n- **Link targets:** only URLs seen in this run (Search Console page rows, the coverage list,\r\n  the sitemap).\r\n- **What wins:** one web search for the primary query or prompt. Note the type of the top\r\n  results (list, guide, tool, official page), their count, table, method and FAQ. Read at\r\n  most 3 winners, headings only. Learn the shape; never copy text.\r\n- **The live page** for an enrichment: one fetch for title, H1, description, H2s, opening.\r\n  For an AutoSEO page, `get_article` also gives the stored text the blocks will change.\r\n\r\n## 3 · Draft with the ledger\r\n\r\nFollow the page rules. A new page gets front matter (`title`, `description`, `slug`,\r\n`author`, `primary_query`, `type`, `evidence`, `cta`). An enrichment is written as blocks\r\n(`REPLACE: opening`, `ADD AFTER: <heading>`, `REPLACE: title`, `LINKS TO ADD`) and leaves\r\nwhat works alone. A source-only row leads with the scoped verdict.\r\n\r\nAdd every fact to the claims ledger the moment it is collected. Where drafts live: with a\r\nfilesystem, outside the site repository until approved, at\r\n`~/.cituna/autopilot/<domain>/drafts/<slug>.md` beside `<slug>.claims.md`; otherwise in the\r\nconversation, with the ledger as a table under the draft.\r\n\r\nThen run the mechanical check from the page rules and fix every failure.\r\n\r\n## 4 · Fact check\r\n\r\nRun the editor pass from the page rules as a separate pass (in Claude Code, a subagent that\r\ngets only the draft, the ledger and the fact-check section). Exact wording fixes are applied\r\nand listed in the ledger; fact, list and structure fixes go back for one revision and one\r\nre-check. Report the verdict, how many claims were checked, and what the owner must confirm\r\n(the author, any fact listed for confirmation). A rejected draft stops here.\r\n\r\n## 5 · Publish, only on the user's go-ahead\r\n\r\n- **Repository** (Claude Code or Codex in the brand's site repository): a branch, the\r\n  approved draft (never the ledger) converted into the repository's own content format, a\r\n  build, and a pull request with at most ten pages. Never push to the default branch or merge.\r\n- **CMS without a repository:** hand over the approved draft; the user publishes it.\r\n- **AutoSEO page:** `get_article`, then `update_article` with only the fields the approved\r\n  blocks change (`sections`, `faqs` and `tags` replace whole lists, so send every section to\r\n  keep). The user sends it from the Cituna app; `list_articles` then shows a new\r\n  `lastSentAt` and `editsNotSent: false`.\r\n- **Refresh:** `enrich_article` with the article `id`. `refreshed: true` returns the `before`\r\n  and `after`; `refreshed: false` has a `reason` and spent nothing (not due, edited on the\r\n  site, or the allowance is used up).\r\n- **Once the URL is live** for a page that is not AutoSEO's (the user confirms it, or a fetch\r\n  returns 200):\r\n  `mark_article_published` with `domain`, `keyword` (the primary query, or the board keyword\r\n  it serves), the full `url` and `title`, so Cituna stops suggesting a competing page.\r\n- **Log it** with autopilot-measure, dated the day it went live, with the `before` numbers.\r\n\r\nIf write access is missing (Starter, or no write consent), stop after the approved draft:\r\nthe user publishes, and the recording waits until a Pro connection can make it.\r\n\r\n## Relevant tools\r\n\r\n`gsc_query`, `get_engine_answers`, `list_citation_sources`, `list_keywords`,\r\n`list_content_queue`, `list_articles`, `get_article`, `queue_article`, `update_article`,\r\n`enrich_article`, `mark_article_published`.\r\n"
}

SHA-256 of public snapshot: fc1881066fc1c5e05ba141441fce32e251bd6bd7c82e9c844e98e6b7c8dedfc7