← SurferCONTENT HISTORY

Update to Surfer

Snapshot Oct 7, 2026 · 18:03 UTC · version 0.1.0

Collection source: downloaded plugin package.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Use when the user wants to act on Surfer's site recommendations. Triggers include \"what should I optimize next\", \"turn my Surfer recommendations into articles\", \"find a content opportunity and act on it\", and \"run the write or optimize workflow from my workspace\". It selects recommendation-led Optimize or Write work and delegates drafting and optimization to the focused Surfer skills.",
  "included_files": [
    {
      "relative_path": "LICENSE",
      "size_in_bytes": 1079
    },
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 448
    }
  ],
  "name": "surfer-content-recommendations",
  "skill_md_contents": "---\nname: surfer-content-recommendations\ndescription: >-\n  Use when the user wants to act on Surfer's site recommendations. Triggers include \"what should I\n  optimize next\", \"turn my Surfer recommendations into articles\", \"find a content opportunity and\n  act on it\", and \"run the write or optimize workflow from my workspace\". It selects\n  recommendation-led Optimize or Write work and delegates drafting and optimization to the focused\n  Surfer skills.\nlicense: MIT\n---\n\n# Surfer: Act on Content Recommendations\n\n## Overview\n\nTurn a chosen, site-level recommendation into one Content Editor workflow without creating the same\nwork twice.\n\n## Prerequisites\n\n- Require connected Surfer MCP tools. For setup or connection failures, use `surfer-connect`;\n  ask to install it if missing. If a required tool is unavailable, name it and stop.\n\n## Playbook\n\n1. **Establish scope.** Resolve an active `workspace_id` with `workspace__list`; recommendations\n   are read per workspace. If several workspaces are active, ask the caller which one to use rather\n   than guessing. If none is active, stop and report. Offer a brand review before optimizing:\n   editors opened by `recommendation__optimize` always apply the workspace's brand profile, with no\n   per-editor toggle, so read it with `brand__get` and write it with `brand__update` only with an\n   approved replacement. Write recommendations are also generated from that profile, so an update\n   shapes future generation runs, not the current list. Do not confuse \"enabled for this editor\"\n   with inspecting the profile.\n\n2. **List, explain, and select a recommendation.** Call `recommendation__list`, filtered with\n   `type` when the user already chose `optimize` or `write` work. Present each candidate's page URL\n   or keyword and its `score`. Scores order items within one type and are not comparable across\n   types; the default ordering lists optimize items before write items, each block score-descending.\n   An item whose `content_editor_id` is set is already being worked on, so offer to continue it\n   rather than start over. An empty list may mean no source is configured:\n   `meta.content_audit_configured` and `meta.topical_maps_configured` name which of Content Audit\n   or Topical Maps is missing, so report that rather than a bare \"no recommendations\". Let the user\n   choose. Auto-select only when the user states a clear rule, such as \"highest-score optimize\n   recommendation\", and rank within one type only.\n\n3. **Run the focused workflow.** The recommendation carries everything needed to act, and its\n   `content_editor_id` marks the editor already covering it — never create a second editor for a\n   covered item.\n   - For an *optimize* item, hand its editor to `surfer-optimize-content`, skipping that skill's\n     create step. Use `content_editor_id` when set. Otherwise confirm the spend, then call\n     `recommendation__optimize` — the product's Optimize button. It opens the page's own Content\n     Editor, connected to Content Audit so optimization progress tracks in the product, charges one\n     Content Editor credit unless the page's editor was already paid for, and returns the refreshed\n     item with `content_editor_id` set. Never import the page URL into a fresh editor instead; that\n     disconnects the tracking. On an already-open conflict, re-list and use its editor id. If the\n     tool explicitly says the editor is not ready yet, wait and retry `recommendation__optimize`\n     with the same workspace and recommendation ids, bounded; re-listing alone will not open it.\n     Stop on quota or other reported failures. After a lost or unclear response, re-list first and\n     reuse the editor id if present. If bounded reads cannot establish the outcome, report it as\n     indeterminate and stop instead of repeating the action.\n   - For a *write* item, pass its `content_editor_id`, `workspace_id`, `main_keyword`, and `location`\n     to `surfer-write-article` when the id is set. The writer verifies and reuses that editor before\n     considering generation. Without an editor id, pass the workspace id, keyword, and location;\n     the writer checks for existing work before creating an editor.\n\n4. **Report the lifecycle.** Return the recommendation selected, the workspace and editor ids, the\n   baseline and final score snapshot, and the changes made. An optimize item's progress also shows\n   in the product: its `optimization_status` and the linked draft's `content_score` update on\n   `recommendation__list`.\n"
}

SHA-256 of public snapshot: 988dba825d04510460174eaf6b421f2852bd7d85d1c7da6463a358fff9002879