Viewmark
Agent-led Athena project for the Viewmark Cursor / VS Code extension: markdown editing that fits a vertical one-column layout.
Viewmark is a same-column WYSIWYG markdown editor for Cursor and VS Code.
Markdown style for repo docs: STYLE.md.
Project relationships
Pantheon context
Parent goddess: Athena.
worship for this repo means advancing this project's work under Athena privacy boundaries.
Whole-life context: /home/david/pantheon/PROFILE.md only when needed.
Why
Cursor’s built-in Preview | Markdown toggle and third-party markdown extensions did not meet the workflow needed here:
- one intentional click
- same editor column (no side split on a vertical monitor)
- natural UI buttons, not palette-only or shortcut-only workflows
Viewmark owns that extension end to end.
Install
Install Viewmark from the VS Code Marketplace or Open VSX.
That is the path for VS Code, Cursor, and other compatible editors.
On this machine during development, package a VSIX:
npm run package
Then install the VSIX locally:
cursor --install-extension viewmark-0.0.4.vsix
Reload the window after install.
In Cursor, editor title actions stay under the ... menu until you turn them on.
Open a markdown file, open ..., choose Configure Icon Visibility, and enable Viewmark: Toggle editor.
Spec and development
Viewmark follows strict SDD and TDD.
- UX.md is the sole source of truth for how the app works. It stores a human-friendly description of the user-facing interface, and nothing else. Necessary technical details go in this README. The spec is UX.md plus this entire README.
- Tests are generated from the spec, and nothing else
- Code is generated to make failing tests pass, and nothing else
Testing
Extension integration tests use @vscode/test-cli with @vscode/test-electron and Mocha.
The test command is:
npx vscode-test
Tests compile to out/test/**/*.test.js.
This runner launches VS Code Desktop, not Cursor.
npx vscode-test asserts Viewmark behavior in VS Code, including that a WYSIWYG selection is forwarded to aichat.newchataction.
That command is absent in VS Code Desktop, so the automated test spies on the executeCommand call.
A manual Cursor check confirms Ctrl+L inserts that selection into agent chat.
Cursor reads the active text-editor selection, so a WYSIWYG Ctrl+L may briefly reveal the code tab before returning to Viewmark.
Edits in the Viewmark webview write back to the markdown TextDocument.
Opening a remembered file with showTextDocument or vscode.open restores Viewmark.
Repository layout
New inbox and outbox items are named YYYY-MM-DD-HHMM-slug.md, or a folder of the same shape when the item is a bundle.
| Path |
Owner |
Purpose |
| UX.md |
This project |
Sole source of truth for how the app works |
| src/ |
This project |
Extension TypeScript source |
| media/ |
This project |
Extension icons and webview assets |
| PLAN.md |
Agent (user requests edits) |
Extension build and ship plan |
| PLAYGROUND.md |
User |
Unstable, unsafe, or out of date scratch notes |
| outbox/ |
Shared queue |
Agent may create files, you own the queue. Named YYYY-MM-DD-HHMM-slug.md. Agent does not triage unprompted. |
| inbox/ |
User → agent |
Task briefs named YYYY-MM-DD-HHMM-slug.md |
| archive/ |
User |
Your scratch and legacy dumps at repo root |