The plans your agents write
A link instead of terminal output. Mark what is wrong and your agent rewrites it, then point an agent at the same note to build it.
The loop
The loop
You read it and mark the parts that are wrong. Your agent pulls those marks, rewrites the file, and pushes the clean revision back. The note stays clean markdown: your marks live beside it, never inside it.
You mark what is wrong. Your agent pulls the marks and pushes the fix. The note stays clean markdown: your marks live beside it, never inside it.
Quickstart
Create an account
Sign in with Google. Your workspace is created on the spot.
Connect your agent
One line installs the skill for Claude Code and Codex, then signs you in through the browser.
Over SSH, in the Claude app, or from CI? Every way in.
Ask your agent to publish
“Publish this plan to markup.” You get a link. Mark it up, then ask the agent to handle the annotations.
Connect
Every way in signs in through your browser, to the workspaces and access you approve, never more than your role. Agents never get a browser session, and you can revoke one at any time.
Claude Code or Codex, on the machine in front of you.
Run the installer where your agent works.
Your browser opens on markup. Pick the workspaces and approve.
The terminal says who you are signed in as. Nothing to paste.
It installs into ~/.claude/skills and ~/.codex/skills. The login lives in ~/.config/markup/credentials.json and refreshes itself.
A server, a VM or a container with no browser of its own.
Run the same installer on the remote machine. It prints a link.
Open the link on your laptop or phone and approve.
Paste the code the page shows back into the terminal.
The code works once, for a few minutes. Force this flow anywhere with login --no-browser. With nothing to paste into, finish with login --code.
Claude on desktop, web or mobile, as a connector.
SettingsthenConnectorsthenAdd custom connector. Paste the URL.Connect. A markup tab opens; pick the workspaces and approve.
Back in Claude, markup is connected and its tools work in any chat.
Any app that adds remote MCP servers with OAuth works the same way. In Cursor, add the URL to .cursor/mcp.json.
Claude Code or Codex as an MCP client, without the skill.
Add markup as a remote server.
Sign in:
/mcpinside Claude Code, orcodex mcp login markup.Approve in the browser. The markup tools show up in the session.
For a file on disk the tools upload the exact bytes, so a document is never retyped.
Pipelines and scripts that never see a browser.
A workspace admin creates a key under settings, agent access.
Store it as
MARKUP_TOKEN, next toMARKUP_URLandMARKUP_WORKSPACE.Install without signing in, then push.
Keys are shown once, scoped, expiring, rate limited and revocable.
Plan, then build
The note is the plan of record. When it reads right, point an agent, the same one or another, at the note and it pulls the clean markdown to build from.
Or just ask for it: “read the auth plan from markup and implement it”. The marks stay behind; the agent gets the document.
What you get
- Rendered, not raw
- Tables, syntax highlighting and mermaid diagrams, sized to read on a phone.
- Every push versioned
- The text it replaced stays as a full revision, with its diff and provenance.
- Projects, not a pile
- Notes group under the git remote the file came from.
- Marks stay outside
- Annotations sit beside the note, so the markdown stays clean.
- Keyboard first
⌘Kjumps to any note,/filters,fleaves the document alone.- Yours offline
- An installable app that keeps your notes readable offline.
Questions
Claude Code or Codex?
Both. One SKILL.md serves them, and the installer writes to whichever agent home exists. It needs Node and no checkout.
Signing in over SSH?
Run the same installer. With no browser to open, it prints a link to approve on any device and asks for the code that page shows. In a shell with nothing to paste into, such as an agent's, login --code <code> finishes it.
Where does the login live?
In ~/.config/markup/credentials.json, for your user only. It holds a short-lived token that refreshes itself. CI sets MARKUP_TOKEN to a key instead.
What can an agent do?
What you approved, in the workspaces you picked, never more than your role: read notes and marks, or also publish revisions. It never opens a browser session or dismisses a mark.
Claude.ai, ChatGPT or Cursor?
Add markup.hesennivas.com/mcp as a remote MCP server and approve it in the browser. The quickstart has the steps.
Can another agent build from it?
Yes. Point any agent at the note URL and it pulls the clean markdown to work from. The marks stay behind.
Same file pushed twice?
It updates that note in place and keeps the previous text as a full revision.
Can an agent overwrite my edit?
No. A push carries the version it read, so a stale one fails without touching the note.
Who can read my notes?
People signed in to the workspace. This page is the only public route.
Does it work offline?
Reading does. The installed app keeps every note on the device by default; in a browser tab you switch it on. Marks queue until markup answers.
Your next plan arrives as terminal output a link.