skills/collaboration/proof/SKILL.md
Web-first skill for working with Proof documents via proofeditor.ai. Use when a Proof URL is shared, when creating collaborative docs in Proof, or when an installed Proof preference says new docs should live there.
npx skillsauth add The-Utopia-Studio/skills proofInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Proof is a collaborative markdown editor for agents and humans. Use the hosted web API at https://www.proofeditor.ai.
Every write must include by: "ai:<agent-name>" so Proof can track who wrote what.
This skill is web-only. Do not use a local Mac app bridge or localhost:9847 from this skill.
If the user shares a Proof URL:
When creating new docs, follow this priority order:
collaborative_docs.Supported default modes:
all_new_markdown: new markdown artifacts you create go to Proof by default.collaborative_docs: plans, specs, bug writeups, reports, memos, proposals, drafts, and similar iterative docs go to Proof by default.explicit_only: only use Proof when the user explicitly asks.Boundary rules:
Shared URL format:
https://www.proofeditor.ai/d/<slug>?token=<token>
Use one of:
Authorization: Bearer <token> (preferred)x-share-token: <token>?token=<token>by controls authorship. X-Agent-Id controls presence identity.
Use one reporting tool call:
curl -sS -X POST "https://www.proofeditor.ai/api/bridge/report_bug" \
-H "Content-Type: application/json" \
-d '{
"summary":"Short bug summary",
"context":"What you were trying to do and what looked wrong.",
"slug":"<slug-if-you-have-it>",
"evidence":[
{
"kind":"http_response",
"method":"POST",
"url":"https://www.proofeditor.ai/api/agent/<slug>/edit/v2",
"status":500,
"requestId":"<x-request-id>"
}
]
}'
If the response returns status: "needs_more_info", ask the suggested questions and call the same endpoint again.
If you want reference code while debugging or preparing the report, you can optionally inspect:
https://github.com/EveryInc/proof-sdkWhen a Proof URL is provided:
slug and token.X-Agent-Id or by posting presence.Connected in Proof and ready.Read state and show presence on read:
Preferred presence identity: X-Agent-Id.
Compatibility: /presence also accepts agentId or agent.id in the JSON body.
by controls authorship on mutations, not presence identity.
curl -sS "https://www.proofeditor.ai/api/agent/<slug>/state" \
-H "Authorization: Bearer <token>" \
-H "X-Agent-Id: <your-agent-id>"
Update presence explicitly:
POST /api/agent/<slug>/presence requires explicit agent identity.
Preferred: X-Agent-Id: <your-agent-id>.
Also accepted: agentId or agent.id in the JSON body.
curl -sS -X POST "https://www.proofeditor.ai/api/agent/<slug>/presence" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-H "X-Agent-Id: <your-agent-id>" \
-d '{
"agentId":"<your-agent-id>",
"status":"reading",
"summary":"Joining the doc"
}'
Common statuses: reading, thinking, acting, waiting, completed, error.
Read comment threads from:
GET /api/agent/<slug>/state
Comment bodies, replies, and resolved state live in marks on the state response.
state.marks for comment text and thread metadata./snapshot for block refs and edit/v2 only. It does not include comment thread bodies./queue/pending as the primary "what changed?" feed and /events/pending as raw activity. Do not treat either as the source of comment text.Create a shared document:
curl -sS -X POST https://www.proofeditor.ai/share/markdown \
-H "Content-Type: application/json" \
-d '{"title":"My Document","markdown":"# Hello\n\nFirst draft."}'
Save:
slugaccessTokenshareUrltokenUrl_linksWhen Proof is the default for the task:
| Task | Recommended API | Why |
|---|---|---|
| Precise paragraph or section rewrite | edit/v2 | Block refs plus authoritative token locking |
| Simple append, replace, or insert | edit/v2 | Stable block operations; legacy /edit is removed |
| Human-reviewed edits | ops | Suggestions and comments in track changes |
| Large rewrite proposal | ops + rewrite.apply | Produces reviewable changes |
Get a snapshot:
curl -sS "https://www.proofeditor.ai/api/agent/<slug>/snapshot" \
-H "Authorization: Bearer <token>"
Apply block operations:
curl -sS -X POST "https://www.proofeditor.ai/api/agent/<slug>/edit/v2" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-H "Idempotency-Key: <unique-key>" \
-d '{
"by":"ai:codex",
"baseToken":"mt1:<token-from-state-or-snapshot>",
"operations":[
{"op":"replace_block","ref":"b3","block":{"markdown":"Updated paragraph."}},
{"op":"insert_after","ref":"b3","blocks":[{"markdown":"## New section"}]}
]
}'
Supported ops:
replace_blockinsert_beforeinsert_afterdelete_blockreplace_rangefind_replace_in_blockSchema reminder:
/ops uses a top-level type./edit/v2 uses top-level operations, and each entry uses op.replace_range uses fromRef and toRef./editPOST /api/agent/<slug>/edit has been removed.
Older callers receive 410 LEGACY_EDIT_REMOVED with guidance to re-read /state and switch to /edit/v2.
Primary endpoint:
POST /api/agent/<slug>/ops
Use baseToken from /state or /snapshot on every ops request.
Legacy compatibility alias for older callers only:
POST /api/documents/<slug>/ops
Supported op types:
comment.addcomment.replycomment.resolvecomment.unresolvesuggestion.add with kind: "insert" | "delete" | "replace"suggestion.acceptsuggestion.rejectrewrite.applysuggestion.resolve is not supported. Use suggestion.accept or suggestion.reject instead.
For comments, the public API supports resolve/unresolve, not delete.
Examples:
{"type":"comment.add","by":"ai:codex","baseToken":"mt1:<token-from-state-or-snapshot>","quote":"anchor text","text":"Comment body"}
{"type":"comment.reply","by":"ai:codex","baseToken":"mt1:<token-from-state-or-snapshot>","markId":"comment-123","text":"Reply text"}
{"type":"suggestion.add","by":"ai:codex","baseToken":"mt1:<token-from-state-or-snapshot>","kind":"replace","quote":"old text","content":"new text"}
{"type":"suggestion.accept","by":"ai:codex","baseToken":"mt1:<token-from-state-or-snapshot>","markId":"mark-123"}
{"type":"suggestion.reject","by":"ai:codex","baseToken":"mt1:<token-from-state-or-snapshot>","markId":"mark-123"}
{"type":"suggestion.add","by":"ai:codex","baseToken":"mt1:<token-from-state-or-snapshot>","kind":"replace","quote":"old text","content":"new text","status":"accepted"}
{"type":"rewrite.apply","by":"ai:codex","baseToken":"mt1:<token-from-state-or-snapshot>","content":"# Rewritten markdown"}
Use the comment mark's markId when calling comment.reply.
comment.resolve keeps the comment in marks metadata and flips resolved: true; it does not delete the comment.
Use ops when you want the human to review changes in track changes.
Poll summarized queue items:
curl -sS "https://www.proofeditor.ai/api/agent/<slug>/queue/pending?after=0" \
-H "Authorization: Bearer <token>"
Poll for pending events:
curl -sS "https://www.proofeditor.ai/api/agent/<slug>/events/pending?after=0" \
-H "Authorization: Bearer <token>"
Ack processed events:
curl -sS -X POST "https://www.proofeditor.ai/api/agent/<slug>/events/ack" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"upToId":123,"by":"ai:codex"}'
If you are staying in the loop while a human reviews changes, keep presence updated so the doc shows what you are doing.
| Error | Meaning | Action |
|---|---|---|
| 401/403 | Bad or missing auth | Re-read token from URL and retry with bearer token |
| 404 | Slug not found | Verify slug and environment |
| 409 PROJECTION_STALE | Metadata catching up | Re-read state or snapshot, then retry |
| 409 BASE_TOKEN_REQUIRED | Route requires baseToken | Re-read state or snapshot and send mutationBase.token |
| 409 ANCHOR_NOT_FOUND | V1 search anchor missing | Re-read state and choose a tighter anchor |
| 422 | Invalid payload | Fix required fields and schema |
| 429 | Rate limit | Back off and retry with jitter |
Guidelines:
POST /api/bridge/report_bug with the request/response, request ID, slug, and a short context note.by on every write.content and markdown payloads as canonical text input.Idempotency-Key on edit/v2 requests so retries stay safe.https://www.proofeditor.ai/.well-known/agent.jsonhttps://www.proofeditor.ai/agent-docshttps://www.proofeditor.ai/agent-setuphttps://www.proofeditor.ai/api/bridge/report_bughttps://github.com/EveryInc/proof-sdkdevelopment
Create professional equity research earnings update reports (8-12 pages, 3,000-5,000 words) analyzing quarterly results for companies already under coverage. Fast-turnaround format focusing on beat/miss analysis, key metrics, updated estimates, and revised thesis. Includes 1-3 summary tables and 8-12 charts. Use when user requests "earnings update", "quarterly update", "earnings analysis", "Q1/Q2/Q3/Q4 results", or post-earnings report.
development
Updates a presentation with new numbers — quarterly refreshes, earnings updates, comp rolls, rebased market data. Use whenever the user asks to "update the deck with Q4 numbers", "refresh the comps", "roll this forward", "swap in the new earnings", "change all the $485M to $512M", or any request to swap figures across an existing deck without rebuilding it.
development
Real DCF (Discounted Cash Flow) model creation for equity valuation. Retrieves financial data from SEC filings and analyst reports, builds comprehensive cash flow projections with proper WACC calculations, performs sensitivity analysis, and outputs professional Excel models with executive summaries. Use when users need to value a company using DCF methodology, request intrinsic value analysis, or ask for detailed financial modeling with growth projections and terminal value calculations.
tools
Build professional financial services data packs from various sources including CIMs, offering memorandums, SEC filings, web search, or MCP servers. Extract, normalize, and standardize financial data into investment committee-ready Excel workbooks with consistent structure, proper formatting, and documented assumptions. Use for M&A due diligence, private equity analysis, investment committee materials, and standardizing financial reporting across portfolio companies. Do not use for simple financial calculations or working with already-completed data packs.