Your agent writes. You decide. The open-source writing surface for the agentic era. OpenWriter is a markdown-native rich text editor built for humans and agents working side by side. Your agent writes, and you review and approve every change before it lands.
FAQ
openwriter is a Claude Code plugin with 8 hand-picked skills for content work, indexed on Flowy. Install it with the command on its page. It includes anti-ai, beat-writer, blog-writer. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
$ npx -y skills add travsteward/openwriter --agent claude-code
Repo: travsteward/openwriter
Your agent writes. You decide.
The open-source writing surface for the agentic era.
OpenWriter is a markdown-native rich text editor built for humans and agents working side by side. Your agent writes, and you review and approve every change before it lands. Documents are plain .md files on disk, so there's no database and no lock-in, and it works with any MCP-compatible agent.

Coding agents like Claude Code, Codex, and OpenCode changed how people build software. That power never reached writing. Ask an agent to edit your essay and you're stuck reading raw markdown in a terminal, with no surface to review changes and no real workflow.
Every writing tool is racing to bolt on its own weak agent. They have it backwards. The strongest agents already exist, and they're built to drive tools rather than sit trapped inside one. OpenWriter ships no agent of its own. It's the writing surface built for the agent you already run, with a review system that keeps you the author of every word.
Markdown is the native language of AI. Every model reads it, writes it, works in it. OpenWriter treats .md as a first-class citizen. Your documents are plain markdown on disk, and the editor adds rich formatting, workspaces, version history, and agent review on top. No proprietary format. No database. Just files.
The agent writes. You accept or reject. That's it.
One command installs the skill, wires up the MCP server, and gets your agent (Claude Code, Cursor, Codex, and 20+ others) ready to write:
npx openwriter setup
That's everything. Restart your agent and start writing — your agent drives the editor, opens documents, and proposes changes you accept or reject.
Just want to see the editor first?
npm install -g openwriter && openwriteropens it atlocalhost:5050— no agent needed. Documents save as markdown files in~/.openwriter/; open any.mdfrom disk or drag files into the sidebar.
Install the skill:
npx skills add https://github.com/travsteward/openwriter --skill openwriter
Then add the MCP server for the editing tools:
claude mcp add -s user openwriter -- openwriter --no-open
The skill teaches your agent how to use OpenWriter well. The MCP server gives it the document-editing tools. For other MCP agents and the full setup, see the reference.
Markdown native, agent first, no lock-in.
See the reference for the full MCP tool list, the review hotkeys, the token-efficient wire format, the plugin API, and architecture.
Contributions welcome. Please open an issue first to discuss what you'd like to change. Local development setup is in the reference.
MIT, by Travis Steward
.claude/
project.json
.gitignore
adr/
active-doc-watcher.md
agent-lock-per-doc.md
agent-stub-model.md
blog-compose-save-loop.md
blog-image-contract.md
blog-publish-schema-gate.md
browser-write-fidelity.md
create-document-placement-contract.md
document-history-attribution.md
external-write-guard.md
footnote-system.md
logging-system.md
manuscript-engine.md
node-identity-matcher.md
path-canonicalization.md
pending-overlay-model.md
plugin-metadata-broadcast.md
plugin-slot-nested-data.md
responsive-overlay-layout.md
right-rail.md
sidebar-spinner-placement.md
sort-minion-drain.md
tweet-paragraph-convention.md
assets/
screenshot.png
audit/
av-plugin-architecture.md
CHANGELOG.md
CONTRIBUTING.md
LICENSE
mockup-files-tree.html
opencode.json
package-lock.json
package.json
packages/
openwriter/
bin/
pad.ts
index.html
LICENSE
package.json
public/
apple-touch-icon.png
favicon-16.png
favicon-32.png
favicon.ico
icon-192.png
icon-512.png
README.md
scripts/
build-plugins.cjs
measure-frontmatter-bytes.mjs
migrate-references.mjs
prepublish.cjs
scrub-legacy-enrichment-fields.mjs
strip-self-links.mjs
test-active-doc-watcher.mjs
test-applyids-position-alignment.mjs
test-attribution-integration.mjs
test-attribution.mjs
test-autoplug-enroll.mjs
test-backlinks-integration.mjs
test-backlinks.mjs
test-blog-cover-path.mjs
test-blog-schema-gate.mjs
test-bug1-populate-accept.mjs
test-clobber-guard.mjs
test-comments-integration.mjs
test-commits.mjs
test-debounced-save.mjs
test-enrichment-staleness.mjs
test-enrichment-surfacing.mjs
test-external-doc-titles.mjs
test-external-write-guard.mjs
test-findnode-opaque-tables.mjs
test-footnote-roundtrip.mjs
test-id-rewrite-broadcast.mjs
test-id-rewrite-convergence.mjs
test-lifecycle-overlay.mjs
test-link-href.mjs
test-link-to-integrity.mjs
test-list-dirty-and-crawl.mjs
test-logger.mjs
test-manuscript-assemble.mjs
test-manuscript-render.mjs
test-mark-enriched.mjs
test-matcher-preserves-ids.mjs
test-matcher-stress.mjs
test-no-op-save.mjs
test-node-mapping/
corpus/
stage1-flat/
mutations/
01-no-change.md
02-edit-one-paragraph.md
03-insert-paragraph.md
04-delete-paragraph.md
05-reorder.md
06-split-paragraph.md
07-merge-paragraphs.md
original.md
stage1b-flat-adversarial/
mutations/
08-punctuation-only-change.md
09-add-sentence-to-paragraph.md
10-remove-sentence-from-paragraph.md
11-mass-delete-three.md
12-mass-insert-three.md
13-cut-and-paste-far.md
14-duplicate-paragraph.md
15-triple-split.md
16-triple-merge.md
17-wholesale-rewrite.md
18-paste-back-undo.md
19-edit-keeps-charcount.md
20-empty-paragraph-inserted.md
21-scramble-heavy.md
original.md
stage2-structured/
mutations/
01-heading-rename.md
02-heading-level-change.md
03-list-item-edit.md
04-list-item-added.md
05-list-item-deleted.md
06-list-reorder.md
07-whole-list-deleted.md
08-blockquote-edit.md
09-code-block-edit.md
10-section-reorder.md
11-hr-deleted.md
original.md
stage3-inline-marks/
mutations/
01-bold-added.md
02-italic-added.md
03-link-added.md
04-inline-code.md
original.md
stage4-nested/
mutations/
01-nested-list-item-edit.md
02-blockquote-internal-edit.md
original.md
stage5-adversarial/
mutations/
01-identical-paragraphs-edit.md
02-gibberish-typing.md
03-single-letter-edit.md
04-complete-replacement.md
05-everything-deleted.md
06-duplicates-then-one-edited.md
original.md
stage6-type-changes/
mutations/
01-paragraph-to-heading.md
02-heading-to-paragraph.md
03-heading-level-promotion.md
04-listitem-to-paragraph.md
05-paragraph-to-listitem.md
06-bullet-to-ordered.md
07-blockquote-to-paragraph.md
original.md
stage7-graveyard/
mutations/
01-delete-then-restore/
step1-delete.md
step2-restore.md
02-cut-and-paste-elsewhere/
step1-cut.md
step2-paste-at-end.md
03-delete-and-edit-then-restore/
step1-delete-and-edit.md
step2-restore-deleted.md
original.md
stage8-large-doc/
_generate.mjs
mutations/
01-scattered-edits.md
02-delete-section.md
03-insert-section.md
04-section-reorder.md
05-mass-split.md
06-mass-merge.md
07-mass-type-change.md
08-mixed-everything.md
09-bulk-insert-paragraphs.md
10-scattered-deletes.md
original.md
stage9a-single-block/
mutations/
01-edit.md
02-split.md
03-type-change-to-heading.md
04-delete-everything.md
original.md
stage9b-all-headings/
mutations/
01-rename-one.md
02-reorder-sections.md
03-level-changes.md
04-insert-paragraphs.md
original.md
stage9c-math-collisions/
mutations/
01-edit-middle-collider.md
02-delete-one-collider.md
03-insert-new-collider.md
04-reorder-colliders.md
original.md
stage9d-long-paragraph/
mutations/
01-tiny-edit.md
02-massive-truncation.md
03-split-into-pieces.md
original.md
stage9e-empty-doc/
mutations/
01-add-one-paragraph.md
02-add-mixed-structure.md
original.md
stage9f-deeply-nested/
mutations/
01-edit-innermost.md
02-delete-innermost.md
03-promote-nested-out.md
original.md
stage9g-tiny-blocks/
mutations/
01-edit-one-tiny.md
02-delete-three-tiny.md
03-reorder-tiny.md
original.md
fingerprint.mjs
GAPS.md
matcher.mjs
README.md
results/
latest.json
runner.mjs
walker.mjs
test-nodeid-roundtrip.mjs
test-nonactive-overlay-symmetry.mjs
test-paragraph-fusion-heal.mjs
test-path-canonicalization.mjs
test-pending-classification.mjs
test-pending-integration.mjs
test-populate-container-overlay.mjs
test-references.mjs
test-reload-refreshes-frontmatter.mjs
test-restore-version-autoaccept.mjs
test-restore-version-pending.mjs
test-save-time-matcher.mjs
test-split-merged-roundtrip.mjs
test-stale-baseline-repro.mjs
test-state-integration.mjs
test-sync-check.mjs
test-sync-merge.mjs
test-table-headerless-roundtrip.mjs
test-tables-roundtrip.mjs
test-tiptap-draftjs.mjs
test-versions-integration.mjs
verify-live-integrity.mjs
server/
activity-log.ts
attribution.ts
autoplug-enroll.ts
backlinks.ts
billing-routes.ts
blog-schema-gate.ts
comments.ts
commits.ts
compact.ts
connection-routes.ts
connections.ts
content-type-meta.ts
documents.ts
enrichment.ts
export-html-template.ts
export-routes.ts
gdoc-import.ts
helpers.ts
image-upload.ts
index.ts
install-skill.ts
link-routes.ts
logger.ts
manuscript/
manuscript-routes.ts
assemble.ts
index.ts
load.ts
parse.ts
render/
css.ts
docx.ts
epub.ts
html.ts
md.ts
resolve.ts
markdown-parse.ts
markdown-plugins.d.ts
markdown-serialize.ts
markdown.ts
mcp-client.ts
mcp.ts
node-blocks.ts
node-fingerprint.ts
node-matcher.ts
node-sync-check.ts
peek-outline.ts
pending-metadata.ts
pending-overlay.ts
plugin-discovery.ts
plugin-install.ts
plugin-loader.ts
plugin-manager.ts
plugin-types.ts
post-sync.ts
prompt-debug.ts
scheduler-routes.ts
state.ts
task-routes.ts
tasks.ts
text-edit.ts
tiptap-draftjs.ts
title-from-body.ts
title-resolve.ts
tweet-routes.ts
update-check.ts
version-routes.ts
versions.ts
workspace-routes.ts
workspace-tree.ts
workspace-types.ts
workspaces.ts
ws.ts
skill/
agents/
openwriter-enrichment-minion.md
openwriter-sort-minion.md
SKILL.md
src/
App.css
App.tsx
article-compose/
ArticleComposeView.css
ArticleComposeView.tsx
useArticleCopy.ts
blog-compose/
BlogComposeView.css
BlogComposeView.tsx
comment-popover/
CommentPopover.tsx
components/
PendingTitleField.tsx
connections/
ConnectionConfigModal.css
ConnectionConfigModal.tsx
NewsletterSetupModal.tsx
context-menu/
ContextMenu.tsx
selection-markers.ts
decorations/
apply.ts
attribution-plugin.ts
backlinks-plugin.ts
bridge.ts
comments-plugin.ts
plugin.ts
resolve.ts
styles.css
editor/
BlurredLoadingNode.ts
extensions.ts
floating-toolbar.css
FloatingToolbar.tsx
footnotes.css
Footnotes.ts
format-toolbar.css
FormatToolbar.tsx
ImageLoadingNode.ts
InsertionLoadingNode.ts
link-href.ts
PadEditor.tsx
pasteCleanup.ts
PendingAttributes.ts
uploadImage.ts
hooks/
useAutoGrowTitle.ts
usePendingState.ts
useTweetEmbed.ts
main.tsx
manuscript-compose/
ChapterTickRail.css
ChapterTickRail.tsx
... 257 more© 2026 Flowy · Free and open source
Built for Claude Code · Not affiliated with Anthropic