proof
Proof - Collaborative Markdown Editor
Proof is a collaborative document editor for humans and agents. It supports two modes:
- Web API - Create and edit shared documents via HTTP (no install needed)
- Local Bridge - Drive the macOS Proof app via localhost:9847
Web API (Primary for Sharing)
Create a Shared Document
No authentication required. Returns a shareable URL with access token.
curl -X POST https://www.proofeditor.ai/share/markdown \
-H "Content-Type: application/json" \
-d '{"title":"My Doc","markdown":"# Hello\n\nContent here."}'
Response format:
{
"slug": "abc123",
"tokenUrl": "https://www.proofeditor.ai/d/abc123?token=xxx",
"accessToken": "xxx",
"ownerSecret": "yyy",
"_links": {
"state": "https://www.proofeditor.ai/api/agent/abc123/state",
"ops": "https://www.proofeditor.ai/api/agent/abc123/ops"
}
}
Use the tokenUrl as the shareable link. The _links give you the exact API paths.
Read a Shared Document
curl -s "https://www.proofeditor.ai/api/agent/{slug}/state" \
-H "x-share-token: <token>"
Edit a Shared Document
All operations go to POST https://www.proofeditor.ai/api/agent/{slug}/ops
Note: Use the /api/agent/{slug}/ops path (from _links in create response), NOT /api/documents/{slug}/ops.
Authentication for protected docs:
- Header:
x-share-token: <token>orAuthorization: Bearer <token> - Token comes from the URL parameter:
?token=xxxor theaccessTokenfrom create response
Comment on text:
{"op": "comment.add", "quote": "text to comment on", "by": "ai:<agent-name>", "text": "Your comment here"}
Reply to a comment:
{"op": "comment.reply", "markId": "<id>", "by": "ai:<agent-name>", "text": "Reply text"}
Resolve a comment:
{"op": "comment.resolve", "markId": "<id>", "by": "ai:<agent-name>"}
Suggest a replacement:
{"op": "suggestion.add", "kind": "replace", "quote": "original text", "by": "ai:<agent-name>", "content": "replacement text"}
Suggest a deletion:
{"op": "suggestion.add", "kind": "delete", "quote": "text to delete", "by": "ai:<agent-name>"}
Bulk rewrite:
{"op": "rewrite.apply", "content": "full new markdown", "by": "ai:<agent-name>"}
Known Limitations (Web API)
suggestion.addwithkind: "insert"returns Bad Request on the web ops endpoint. Usekind: "replace"with a broader quote instead, or userewrite.applyfor insertions.- Bridge-style endpoints (
/d/{slug}/bridge/*) require client version headers (x-proof-client-version,x-proof-client-build,x-proof-client-protocol) and return 426 CLIENT_UPGRADE_REQUIRED without them. Use the/api/agent/{slug}/opsendpoint instead.
Local Bridge (macOS App)
Requires Proof.app running. Bridge at http://localhost:9847.
Required headers:
X-Agent-Id: claude(identity for presence)Content-Type: application/jsonX-Window-Id: <uuid>(when multiple docs open)
Key Endpoints
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /windows |
List open documents |
| GET | /state |
Read markdown, cursor, word count |
| GET | /marks |
List all suggestions and comments |
| POST | /marks/suggest-replace |
{"quote":"old","by":"ai:<agent-name>","content":"new"} |
| POST | /marks/suggest-insert |
{"quote":"after this","by":"ai:<agent-name>","content":"insert"} |
| POST | /marks/suggest-delete |
{"quote":"delete this","by":"ai:<agent-name>"} |
| POST | /marks/comment |
{"quote":"text","by":"ai:<agent-name>","text":"comment"} |
| POST | /marks/reply |
{"markId":"<id>","by":"ai:<agent-name>","text":"reply"} |
| POST | /marks/resolve |
{"markId":"<id>","by":"ai:<agent-name>"} |
| POST | /marks/accept |
{"markId":"<id>"} |
| POST | /marks/reject |
{"markId":"<id>"} |
| POST | /rewrite |
{"content":"full markdown","by":"ai:<agent-name>"} |
| POST | /presence |
{"status":"reading","summary":"..."} |
| GET | /events/pending |
Poll for user actions |
Presence Statuses
thinking, reading, idle, acting, waiting, completed
Workflow: Review a Shared Document
When given a Proof URL like https://www.proofeditor.ai/d/abc123?token=xxx:
- Extract the slug (
abc123) and token from the URL - Read the document state via the API
- Add comments or suggest edits using the ops endpoint
- The author sees changes in real-time
# Read
curl -s "https://www.proofeditor.ai/api/agent/abc123/state" \
-H "x-share-token: xxx"
# Comment
curl -X POST "https://www.proofeditor.ai/api/agent/abc123/ops" \
-H "Content-Type: application/json" \
-H "x-share-token: xxx" \
-d '{"op":"comment.add","quote":"text","by":"ai:compound","text":"comment"}'
# Suggest edit
curl -X POST "https://www.proofeditor.ai/api/agent/abc123/ops" \
-H "Content-Type: application/json" \
-H "x-share-token: xxx" \
-d '{"op":"suggestion.add","kind":"replace","quote":"old","by":"ai:compound","content":"new"}'
Workflow: Create and Share a New Document
# 1. Create
RESPONSE=$(curl -s -X POST https://www.proofeditor.ai/share/markdown \
-H "Content-Type: application/json" \
-d '{"title":"My Doc","markdown":"# Title\n\nContent here."}')
# 2. Extract URL and token
URL=$(echo "$RESPONSE" | jq -r '.tokenUrl')
SLUG=$(echo "$RESPONSE" | jq -r '.slug')
TOKEN=$(echo "$RESPONSE" | jq -r '.accessToken')
# 3. Share the URL
echo "$URL"
# 4. Make edits using the ops endpoint
curl -X POST "https://www.proofeditor.ai/api/agent/$SLUG/ops" \
-H "Content-Type: application/json" \
-H "x-share-token: $TOKEN" \
-d '{"op":"comment.add","quote":"Content here","by":"ai:compound","text":"Added a note"}'
Safety
- Use
/statecontent as source of truth before editing - Prefer suggest-replace over full rewrite for small changes
- Don't span table cells in a single replace
- Always include
byfield for attribution tracking
More from everyinc/every-marketplace
coding-tutor
Personalized coding tutorials that build on your existing knowledge and use your actual codebase for examples. Creates a persistent learning trail that compounds over time using the power of AI, spaced repetition and quizes.
24agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.
24orchestrating-swarms
This skill should be used when orchestrating multi-agent swarms using Claude Code's TeammateTool and Task system. It applies when coordinating multiple agents, running parallel code reviews, creating pipeline workflows with dependencies, building self-organizing task queues, or any task benefiting from divide-and-conquer patterns.
23agent-native-architecture
Build applications where agents are first-class citizens. Use this skill when designing autonomous agents, creating MCP tools, implementing self-modifying systems, or building apps where features are outcomes achieved by agents operating in a loop.
23dhh-rails-style
This skill should be used when writing Ruby and Rails code in DHH's distinctive 37signals style. It applies when writing Ruby code, Rails applications, creating models, controllers, or any Ruby file. Triggers on Ruby/Rails code generation, refactoring requests, code review, or when the user mentions DHH, 37signals, Basecamp, HEY, or Campfire style. Embodies REST purity, fat models, thin controllers, Current attributes, Hotwire patterns, and the "clarity over cleverness" philosophy.
23frontend-design
Build web interfaces with genuine design quality, not AI slop. Use for any frontend work - landing pages, web apps, dashboards, admin panels, components, interactive experiences. Activates for both greenfield builds and modifications to existing applications. Detects existing design systems and respects them. Covers composition, typography, color, motion, and copy. Verifies results via screenshots before declaring done.
23