{"id":27658,"plugin_id":"plugin_asdk_app_6ac4ec4eec288191b37184706855fbc4","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-07T18:03:15.025Z","digest":"e6814bfd1bb7c23cf45747bf929bb3f4814b1a9eb69dd0973eb5e36eb91c1a18","against":null,"payload":{"description":"Use when the user wants to create, inspect, update, choose, or delete a reusable Surfer content template. Triggers include \"create a custom template\", \"turn this article into a Surfer template\", \"list our templates\", \"set a default template\", and \"update or delete a content template\". For a writing style or tone profile, use custom voices. For one article's direction, use the custom instructions in surfer-write-article.","included_files":[{"relative_path":"LICENSE","size_in_bytes":1079},{"relative_path":"agents/openai.yaml","size_in_bytes":446}],"name":"surfer-manage-content-templates","skill_md_contents":"---\nname: surfer-manage-content-templates\ndescription: >-\n  Use when the user wants to create, inspect, update, choose, or delete a reusable Surfer content\n  template. Triggers include \"create a custom template\", \"turn this article into a Surfer template\",\n  \"list our templates\", \"set a default template\", and \"update or delete a content template\". For a\n  writing style or tone profile, use custom voices. For one article's direction, use the custom\n  instructions in surfer-write-article.\nlicense: MIT\n---\n\n# Surfer: Manage Content Templates\n\n## Overview\n\nManage reusable structural examples safely. A template is a reference text that future Content\nEditors reuse for structure. The Boundaries section separates it from a voice profile and a one-off\nprompt.\n\n## Boundaries\n\n- A template is the reusable organization, sections, formatting, and recurring document shape.\n- A custom voice is the reusable tone and style. Manage it with `custom_voice__*` when that is the\n  actual request.\n- Custom instructions are one editor's editorial or factual direction. Pass them through\n  `content_editor__create` or `content_editor__update`.\n- A Surfer template is a read-only predefined template from `surfer_content_template__list`. Never\n  try to update or delete it.\n\n## Prerequisites\n\n- Resolve the workspace with `workspace__list`. If several workspaces are active, ask the caller\n  which `workspace_id` to use rather than guessing.\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- Do not create a template until the user supplies or approves its name and reference text.\n\n## Playbook\n\n1. **Inspect before mutating.** Use `content_template__list` to find a similarly named custom\n   template. Use `content_template__get` before changing a specific template. List predefined options\n   with `surfer_content_template__list` when the user wants to compare rather than create a duplicate.\n\n2. **Prepare a high-signal reference.** Keep stable structure, heading hierarchy, formatting, and\n   representative phrasing. Remove stale facts, client secrets, and accidental product claims.\n   Preserve only material the user is authorized to reuse. Do not bury changing campaign details in a\n   shared template. Create and update both require a `reference_text` of 1 to 25,000 characters and\n   at least 200 words. When the reference falls short of 200 words, ask the user for more material\n   or for approval to expand it. Never pad the reference silently to clear the floor.\n\n3. **Create safely.** Call `content_template__create` with `name`, `reference_text`, and\n   `default: false` unless the user explicitly requests a workspace default. Pass an\n   `idempotency_key`. Retry a timeout or an ambiguous failure with the same key. Surfer then\n   returns the original template instead of creating a duplicate. Read the created template\n   afterward to confirm its id and stored reference text.\n\n4. **Update intentionally.** Read the target first, show the proposed changes to name, reference, and\n   default, then call `content_template__update`. Treat changing the default as a workspace-wide\n   behavior change, and require explicit user confirmation immediately before it.\n\n5. **Delete only with confirmation.** Identify the exact template by id and name, explain that\n   deletion is destructive, and call `content_template__delete` only after the user confirms that\n   exact target. Never infer a deletion from a request to \"clean up templates.\"\n\n6. **Make selection explicit.** Return the template id and workspace. To apply it to a new article,\n   pass the chosen `custom_template_id` to `content_editor__create`. Do not combine it with\n   `surfer_template`, because the two are mutually exclusive.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}