Publish Markdown to Symposium

Require one existing Markdown source file. When the user asks to delete, remove, or
withdraw its current Symposium page, do not generate HTML. Run the host wrapper with
only the vault-relative source-note path. Obsidian reads the note’s current identity
and opens its existing management modal; the user alone chooses Update or Delete.
Never tell the user to delete the page at its public URL.

For publishing or updating, finish a complete, self-contained,
passive HTML document before asking Obsidian to review it. Render source-specific
content such as Mermaid and Obsidian Bases into static HTML or SVG, embed images,
and include no scripts, frames, forms, handlers, redirects, or external assets. Treat
YAML frontmatter as note metadata: never render the raw frontmatter block as page
content. The exact UTF-8 HTML must not exceed 10485760 bytes.

Write those final bytes to a new unique .html file under
SYMPOSIUM_WORKSPACE_ROOT/.symposium/handoffs/, creating that
directory first when it does not exist. Do not show a prose substitute or ask
for confirmation in chat. Instead run the host wrapper with exactly two
vault-relative paths: the source note and the staged HTML.

On macOS or Linux:

sh "/absolute/path/to/this/skill/directory/symposium-publish.sh" "Notes/source.md" ".symposium/handoffs/unique.html"

For withdrawal, omit the staged-HTML argument:

sh "/absolute/path/to/this/skill/directory/symposium-publish.sh" "Notes/source.md"

On Windows, use the .cmd wrapper (prefix it with & in PowerShell):

& "/absolute/path/to/this/skill/directory/symposium-publish.cmd" "Notes/source.md" ".symposium/handoffs/unique.html"

Omit the staged-HTML argument on Windows for withdrawal as well.

With only the source path, the wrapper blocks while Obsidian shows its host-owned
Update/Delete management modal. With a staged HTML path, it blocks while Obsidian
consumes the artifact and shows its source, title, and a link to a sandboxed
local-browser rendering of the exact captured page. Obsidian rejects active or
externally loaded content, prevents navigation from the browser preview, removes the
original artifact, removes its temporary browser preview after review, and alone reads
the current note identity to choose whether confirmation publishes or updates; never
choose an action or document id.

  • cancelled: stop. No request was sent.
  • regenerate: create a new complete artifact and run the wrapper again. The
    previous confirmation never applies to regenerated bytes.
  • published or updated: return the host-provided public URL verbatim.
  • deleted: report that the host withdrew the page and removed its note identity.
  • failed: if the host says to edit the staged file, address every listed issue in
    that same file and retry exactly once. Otherwise, or if that retry fails, stop and
    report the exact host message. Never invent a cause, change unrelated styling, create
    another filename, bypass the review, or publish directly.