openwriter

openwriter is a skill for Claude Code, Codex from travsteward/openwriter. It costs 184 tokens per session (12,567 once invoked), scanned A, original, MIT.

A browser-based writing workspace where an AI agent edits Markdown documents and people review those edits before accepting or rejecting them. It also supports organizing multiple documents and publishing to some platforms.

In plain words
What is it for?
Use it to draft, rewrite, organize, review, and publish documents with visible, user-approved changes.
Why use it?
It keeps drafts and revisions in one reviewable place, instead of leaving important writing buried in chat or terminal output.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/travsteward/openwriter/skill
Any agent
npx skills add travsteward/openwriter --skill skill
Clone the repo
git clone --depth 1 https://github.com/travsteward/openwriter

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for openwriter

README.md
[![agentmods](https://agentmods.dev/badge/skills/travsteward/openwriter/skill.svg)](https://agentmods.dev/skills/travsteward/openwriter/skill)
Your own site
<a href="https://agentmods.dev/skills/travsteward/openwriter/skill"><img src="https://agentmods.dev/badge/skills/travsteward/openwriter/skill.svg" alt="Measured on agentmods" height="20"></a>
Per session 184 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 12,567 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00184 $0.12567
Opus 5 $0.00092 $0.06284
Sonnet 5 $0.00037 $0.02513
Haiku 4.5 $0.00018 $0.01257

Measured 5d ago against content hash 0c6c7a6f4e69, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

openwriter scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

Origin

Copies of this mod

1 near-identical copy found in the catalogue:

packages/openwriter/skill/SKILL.md · 679 lines

How it starts

The opening of the file, as written. The whole thing — 679 lines — stays where its author put it; the contents beside it link to each section on GitHub.

OpenWriter Skill

You are a writing collaborator. You read documents and make edits exclusively via MCP tools. Edits appear as pending decorations (colored highlights) in the user's browser that they accept or reject.

FIRM RULES

  1. ALWAYS write content in the editor, never in the terminal. OpenWriter is a collaborative writing surface. All content — drafts, rewrites, brainstorms, outlines — goes on the pad via write_to_pad or populate_document. Dumping content into the chat/terminal is bad UX: it's hard to read, ugly, and the user can't accept/reject or iterate on it. If you're generating text the user will read, it goes in the editor.
  2. The terminal is for discussion only. Use chat messages to explain your edits, ask questions, discuss direction, or summarize what you changed. Never use it as the writing surface.
  3. Name every document. When you encounter a generically named doc ("Quote Tweet", "Article", "Untitled", etc.), rename it based on its content before proceeding. Titles are the human scanning layer — a sidebar full of "Quote Tweet" is useless. Use rename_item with the docId. Short, descriptive titles: "Venezuela Proxy States QT", "Feature Blindness Article".
  4. Metadata first. When the user asks you to work on a document, call get_metadata immediately after read_pad. Tweet docs store the parent URL in tweetContext.url, article docs store context in articleContext. Never search externally for a tweet URL that's already in the document metadata. This prevents wasting paid API calls on information you already have.
  5. Dispatch the enrichment minion when openwriter says so. OpenWriter surfaces stale enrichment two ways: (a) ENRICHMENT_STATUS: ... in the MCP server's session-start instructions; (b) a ⚠ N docs need enrichment. Dispatch: footer on list_documents, list_workspaces, and get_workspace_structure responses. Both signals include the complete dispatch call inline — copy it verbatim and fire the Agent tool with those exact field values. When you see either signal, dispatch the minion immediately, before responding to the user's request. The minion is orchestrator-mode by default: it calls list_dirty_docs itself, self-bounds the batch, reads each doc, writes a logline, calls mark_enriched once with the whole batch, and returns a short summary. v0.19.0 schema: the minion writes ONE field — logline. The agent owns status (canonical / draft); the system owns enrichmentStale. The legacy fields domain, concepts, and docRole were dropped. The prompt field in the dispatch line is a placeholder — the minion ignores its content because its full procedure lives in its system prompt at ~/.claude/agents/openwriter-enrichment-minion.md.

Read the full file on GitHub · 679 lines

Files

What ships with it

2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 5d ago First seen · 679 lines · 184 tokens per session scan A 0c6c7a6f4e69

Subscribe to this mod's changes

openwriter is a skill published in the GitHub repository travsteward/openwriter (27 stars, last pushed 1mo ago), licensed MIT. It adds 184 tokens to every session and 12,567 once invoked, about $0.0009 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

story-import

逆向导入已有小说。将已写好的小说(半成品或完本)反向解析为标准项目目录结构,兼容 story-long-write / story-short-write 后续写作流程;内部复用 story-long-analyze / story-short-analyze 的拆解管道,按篇幅自动分流。触发方式:/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。.

zenstory-ai/oh-story-claudecode · 98 tokens

story-deslop

网文去AI味。检测并清除文本中的AI写作痕迹,让文字回归自然、非模板化。触发方式:/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。.

zenstory-ai/oh-story-claudecode · 62 tokens

story-long-analyze

长篇网文拆文。深度拆解爆款长篇小说的黄金三章、人设架构、爽点设计、节奏控制。单一深度拆解管道:跑完黄金三章(Stage 1)后产出快速预览报告并询问是否继续全量拆解,确认后从 Stage 2 续跑逐章摘要、聚合分析、设定关系、汇总报告,全程产物落盘 拆文库/{书名}/。触发方式:/story-long-analyze、/长篇拆文、「帮我拆这本书」「拆这本书」「分析黄金三章」「深度拆解」「完整拆解」「系统拆解」或提供小说文本文件路径——全部进入同一管道。.

zenstory-ai/oh-story-claudecode · 173 tokens

story-long-write

长篇网文写作。从大纲到正文,辅助长篇网络小说的创作,包括世界观、人物、情节线管理。触发方式:/story-long-write、/写长篇、「帮我开书」「写大纲」「日更」「续写」「继续写」「修改第X章」「回炉」「重写第X章」。.

zenstory-ai/oh-story-claudecode · 81 tokens

story-short-analyze

短篇网文拆文。拆解爆款短篇小说(番茄短篇 / 故事会 / 知乎盐选 / 追妻 / 世情 / 重生 / 虐渣等通俗题材)的故事核、结构、情感线、反转设计、写作手法、共鸣层次。单一全量拆解管道:跑完 Stage 2-6 产出完整拆文报告,落盘到 拆文库/{书名}/,下游 story-short-write 同时读拆文报告 + 情节节点 + 写作手法 + 原文 + meta.json 写下一篇。触发方式:/story-short-analyze、/短篇拆文、「拆短篇」「拆这篇短文」「短篇拆文」「精细拆解短篇」「8000 字短篇拆解」「番茄短篇拆文」「故事会拆解」「盐言故事拆解」「分析这篇短篇」——均进入同一管道。.

zenstory-ai/oh-story-claudecode · 226 tokens

story

网络小说工具箱主入口。根据用户需求自动路由到对应 skill,并可管理作者习惯、启动本地 Dashboard。触发方式:/story、$story、/story dashboard、/网文、「我想写小说」「记住我的写作习惯」「打开工作台」「检查更新」。.

zenstory-ai/oh-story-claudecode · 68 tokens