← Files StrunkARCHIVED FILE

.codex-plugin/plugin.json

6.68 KB · Nov 11, 2026 · 13:21 UTC

↓ Download file

{
  "name": "strunk",
  "version": "1.0.0",
  "description": "Strunk carries a draft you wrote in ChatGPT out to Google Docs for human review, then brings your reviewers' comments back with the exact spans they anchored to. You triage and revise here, while your reviewers keep commenting where they already work.\n\nExisting comments and their anchors survive a re-publish. Revisions land as targeted edits instead of a full replace, so a thread your reviewer opened last week still points at the text it was about. Google Docs stays the source of truth and its version history is the revert path.\n\nYou approve every substantive change before it lands, and every reply and revision goes out under your name. Your saved writing rules reach the model before it drafts, and Strunk checks each publish, revision and reply on the way out for the tells that give AI writing away: em dashes, contrastive antithesis, transition scaffolding, repeated sentence openings and hedge words. Strunk reports what it found and leaves the decision to you.",
  "author": {
    "name": "First Crack Studio Ltd",
    "url": "https://strunk.io"
  },
  "mcpServers": "./.mcp.json",
  "interface": {
    "capabilities": [],
    "category": "Productivity",
    "defaultPrompt": [
      "Publish my draft to Google Docs so I can share it for review. If I haven't given you one, ask what it should cover.",
      "Pull the latest reviewer comments from my Google Doc and, for each one, tell me what it asks for and suggest a fix.",
      "Apply the reviewer fixes I approve, reply and resolve those comments, then republish to the same doc without losing the rest."
    ],
    "displayName": "Strunk",
    "longDescription": "Strunk carries a draft you wrote in ChatGPT out to Google Docs for human review, then brings your reviewers' comments back with the exact spans they anchored to. You triage and revise here, while your reviewers keep commenting where they already work.\n\nExisting comments and their anchors survive a re-publish. Revisions land as targeted edits instead of a full replace, so a thread your reviewer opened last week still points at the text it was about. Google Docs stays the source of truth and its version history is the revert path.\n\nYou approve every substantive change before it lands, and every reply and revision goes out under your name. Your saved writing rules reach the model before it drafts, and Strunk checks each publish, revision and reply on the way out for the tells that give AI writing away: em dashes, contrastive antithesis, transition scaffolding, repeated sentence openings and hedge words. Strunk reports what it found and leaves the decision to you.",
    "privacyPolicyURL": "https://strunk.io/privacy",
    "shortDescription": "Review drafts in Google Docs",
    "supportURL": "https://strunk.io/docs",
    "termsOfServiceURL": "https://strunk.io/terms",
    "websiteURL": "https://strunk.io",
    "composerIcon": "./assets/icon.png",
    "composerIconDark": "./assets/icon-dark.png",
    "logo": "./assets/logo.png",
    "logoDark": "./assets/logo-dark.png",
    "developerName": "First Crack Studio Ltd"
  },
  "extensions": {
    "com.openai": {
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "Publish a new draft to Google Docs for human review",
              "prompt": "Draft a short post about product management and publish it to Google Docs so I can share it for review.",
              "tools_triggered": "publish_doc",
              "expected_behavior": "The agent drafts the post, then Strunk creates a new Google Doc and returns its URL and version number. Any voice or style notes come back as warnings; the document itself is published unchanged."
            },
            {
              "description": "Pull reviewer comments back with their anchored spans",
              "prompt": "Pull the reviewer comments from my Strunk doc.",
              "tools_triggered": "pull_comments",
              "expected_behavior": "A list of open comment threads, each with the reviewer's text, the exact quoted span it is anchored to, and the tab that span is in."
            },
            {
              "description": "Apply an author-approved fix on one specific commented span, then reply and resolve just that thread",
              "prompt": "Take the first unresolved reviewer comment: apply the fix it asks for, reply to it, then resolve that one comment.",
              "tools_triggered": "apply_revisions, reply_comment, resolve_comment",
              "expected_behavior": "The agent applies the edit for that one comment, posts a reply on its thread, and resolves only that thread. The other comments stay open and intact, so it never silently closes a comment the author did not name."
            },
            {
              "description": "Re-publish a revised draft without destroying existing comments or anchors",
              "prompt": "Publish my revised draft back to the same Google Doc.",
              "tools_triggered": "publish_doc",
              "expected_behavior": "The same doc is updated with a targeted diff and its version increments, while existing reviewer comments and their anchors are preserved."
            },
            {
              "description": "Connect an existing Google Doc, then pull its comments",
              "prompt": "Connect my existing Google Doc to Strunk and pull its comments.",
              "tools_triggered": "pick_google_doc, pull_comments",
              "expected_behavior": "Strunk returns a secure Google Picker link; after the author selects the doc, its comments are pulled with their anchored spans under the given localId."
            }
          ],
          "negative": [
            {
              "description": "A request to summarize a document's contents, which Strunk does not do",
              "prompt": "Summarize what this Google Doc says."
            },
            {
              "description": "A request to edit a Google Sheet, which Strunk does not support (Google Docs only)",
              "prompt": "Add a column to my Google Sheet."
            },
            {
              "description": "A request to change a document's sharing or permissions, which Strunk does not manage",
              "prompt": "Share my Google Doc with alex@example.com."
            }
          ]
        },
        "demo_recording_url": "https://screen.studio/share/9G3zeWiT"
      },
      "publication": {
        "release_notes": "First release of Strunk. Publish a draft you wrote in ChatGPT to Google Docs for human review, pull your reviewers' comments back with the exact spans they anchored to, revise from the same session, and re-publish without disturbing existing comments or their anchors."
      }
    }
  },
  "apps": "./.app.json"
}

SHA-256: e8ffd73480f8584fa0ab6fff06ca94362e928cc477f73335e0d97e2fd6677080