mcerqua/openvoiceui/canvas-page-visibility
Claude Code and agent skill by mcerqua/openvoiceui
- community
Checking that the SKILL.md file is still in the repository.
Make one of your OpenVoiceUI canvas pages PUBLIC (viewable without login) or PRIVATE again with one call to the canvas API. Only on an explicit user request. Use when the user asks to make a page public or shareable, or to make it private again.
Install
npx vskill@latest install mcerqua/openvoiceui/canvas-page-visibilitySKILL.md
Making a canvas page public (or private again)
Hard rule: never public on your own
Never set is_public: true automatically, while creating a page, or as part of a routine. A page goes public only when the user explicitly asks, in a separate message, after the page already exists. Before doing it, warn them: "This makes the page viewable by anyone with the link, no login required."
Visibility only matters when the install requires login (Clerk + CANVAS_REQUIRE_AUTH=true). Without login every page is already reachable by anyone who can reach the server.
Examples use http://localhost:5001; if you changed PORT, use that port. The X-Agent-Key header carries AGENT_API_KEY from the environment; on a login-required install that key is what authorizes you (set it in .env), and it is harmless otherwise.
Make a page public
<PAGE_ID> is the filename without .html. Success is HTTP 200 with "status": "ok" and the page record showing "is_public": true. The value must be a real JSON boolean (true/false), not 1 or "true" (those get a 400).
Make a page private again
Making a page private is always allowed, even on a locked page. If you realise a page exposes something it should not, close it immediately.
Errors you may see
| Response | Meaning | What to do | |
|---|---|---|---|
429 publish_cooldown | The page is less than 30 seconds old. | Wait retry_after_seconds, retry. | |
403 with is_locked | An admin locked this page. | You cannot make it public. Tell the user an admin must unlock it (admin panel, canvas pages list). You can still edit its content. | |
403 admin_only | You tried to change is_locked. | Only an admin can lock or unlock. | |
401 auth_required | No accepted credential. | AGENT_API_KEY is unset or does not match the server's. | |
404 | No such page id. | Check the id against GET /api/canvas/manifest. |
The public link
Once public the page is at https://<your-domain>/pages/<PAGE_ID>.html with no login. Before you tell the user a public link works, fetch it exactly as a stranger would:
200 with the page's own content means done. 401/403 means it is still private. 404, a wrong host, or a localhost/container path inside the link means the link is wrong.
Do not run this check on the owner's own private pages and treat the 401 as a problem: a private page answering 401 to a signed-out request is exactly right. Give the owner the link; they open it signed in.
HTML never goes into uploads
/uploads/ shows only inert media inline (images, audio, video, pdf); office files, CSV and zip download as attachments. .html, .svg, .js and other types download as plain text with nosniff, on purpose: uploaded HTML rendered in the app's origin could steal a viewer's session. So anything a person should read as a page is a canvas page (write it into the canvas pages dir or POST /api/canvas/pages), and its visibility is controlled here, not by moving it into uploads.
If the canvas write path seems broken, measure before working around it
POST /api/canvas/pages answers 405 to a GET because it is POST-only: a 405 means the route exists. Probe with a tiny throwaway file, never by re-posting a large real payload.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/canvas-page-visibility/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/mcerqua/openvoiceui/canvas-page-visibility)