Skip to content
Back to skills

Verify Markdown Viewer

ASecurity

Drive Markdown Viewer Pro (Vite + vanilla JS) like a user and capture proof. Use when verifying UI changes, markdown rendering, themes, view modes, or any feature in this repo's web app.

  • 3 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 9, 2026
testinggobashgit

Works with

  • cursor
  • cli

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned September 9, 2026

npx -y skills add praxstack/markdown-viewer-app --skill verify-markdown-viewer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Verify Markdown Viewer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Verify Markdown Viewer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/praxstack-verify-markdown-viewer/badge)](https://www.skillsdirectory.com/skills/praxstack-verify-markdown-viewer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: verify-markdown-viewer
description: Drive Markdown Viewer Pro (Vite + vanilla JS) like a user and capture proof. Use when verifying UI changes, markdown rendering, themes, view modes, or any feature in this repo's web app.
---

# Verify Markdown Viewer Pro

Project-local verification for the primary surface: **web UI** at `http://127.0.0.1:3000/markdown-viewer-app/`.
Secondary surfaces: Vitest (`npm test`), ESLint (`npm run lint`) — use those for unit checks; this skill drives the real browser path.

Read `.cursor/skills/verify-markdown-viewer/features/README.md` before driving. One feature file per user-facing capability.

## Launch

Start an isolated dev instance (never reuse the user's personal dev server):

```bash
export RUN_ID="verify-$(date +%s)"
bash .cursor/skills/verify-markdown-viewer/scripts/control-viewer.sh launch
```

Ready when `control-viewer.sh doctor` prints `HTTP: OK` and `TITLE: OK` (Vite listening on port 3000).

Teardown after every run (success or failure):

```bash
bash .cursor/skills/verify-markdown-viewer/scripts/control-viewer.sh cleanup
```

## Doctor

Run first whenever anything looks off:

```bash
export RUN_ID=<same id used for launch>
bash .cursor/skills/verify-markdown-viewer/scripts/control-viewer.sh doctor
```

Requires: HTTP 200 at the app URL, page contains `Markdown Viewer Pro`, vite process on port 3000 owned by this run's tmux session `mv-$RUN_ID`.

## Drive

Harness: **agent-browser** (repo devDependency). Load core patterns before guessing commands:

```bash
npx agent-browser skills get core
```

Typical session:

```bash
URL=$(RUN_ID=$RUN_ID bash .cursor/skills/verify-markdown-viewer/scripts/control-viewer.sh url)
npx agent-browser open "$URL"
npx agent-browser wait "#markdown-editor"
npx agent-browser snapshot --json   # accessibility tree with @refs
npx agent-browser fill "#markdown-editor" "# Hello\n\n**bold** text"
npx agent-browser wait "h1"         # preview rendered heading
npx agent-browser screenshot /opt/cursor/artifacts/verify-preview.png
```

Stable handles (prefer over coordinates):

| Element | Handle |
| --- | --- |
| Editor | `#markdown-editor` or `[aria-label="Markdown editor input"]` |
| Preview pane | `#markdown-preview` |
| Split view | `#split-view-btn` / `[aria-label="Split View"]` |
| Preview only | `#preview-only-btn` |
| Editor only | `#editor-only-btn` |
| Theme picker | `#theme-picker-trigger` / `[aria-label="Select theme"]` |
| Zen mode | `#zen-mode-btn` / `[aria-label="Enter Distraction Free Mode"]` |

Do not drive a dev server you did not start with `control-viewer.sh launch` for this `RUN_ID`.

## Evidence

Proof artifacts go to `/opt/cursor/artifacts/` (survive cleanup).

Standards:

- Exercise the real user path (type in editor, click toolbar) — not internal setters or test-only hooks.
- Capture the action **and** resulting DOM state, not only a final screenshot.
- For markdown rendering: show editor source and preview output (screenshot + ARIA snapshot or `innerHTML` check via snapshot).
- Record feature ID and entry point in artifact filenames, e.g. `verify-markdown-preview-split.png`.
- Side effects: localStorage auto-save is acceptable; do not mutate git state.

Minimum proof set per feature: one screenshot + one accessibility snapshot or structured assertion output.

## Cleanup

Always run after verification (keeps evidence, removes instances):

```bash
bash .cursor/skills/verify-markdown-viewer/scripts/control-viewer.sh cleanup
```

Confirm evidence still exists:

```bash
ls -la /opt/cursor/artifacts/verify-*
```

Never `pkill -f vite`; kill only via `control-viewer.sh cleanup` (tmux session `mv-$RUN_ID`).

## Helpers

| Script | Purpose |
| --- | --- |
| `scripts/control-viewer.sh launch` | Start vite on port 3000 in isolated tmux session |
| `scripts/control-viewer.sh doctor` | Read-only health check |
| `scripts/control-viewer.sh cleanup` | Stop instance and scratch state |
| `scripts/control-viewer.sh url` | Print app URL |

All helpers require `RUN_ID` in the environment for isolation.

## Maintenance

Re-run `/create-verification-skill` or `/maintain-verification-skill` when routes, selectors, or ports change.

Files in this skill

  • SKILL.md4.1 KB
  • features/README.md1.4 KB
  • features/live-preview.md937 B
  • features/markdown-preview.md1.6 KB
  • features/theme-selection.md839 B
  • features/theme-switching.md1.1 KB
  • features/view-modes.md1.2 KB
  • features/zen-mode.md1 KB
  • scripts/control-viewer.sh3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.