# Obsidian Cloudflare Pages

> Publish selected Obsidian markdown from a vault to a static site and deploy to Cloudflare Pages.

- Skill: `dvcrn/obsidian-cloudflare-pages-2` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add dvcrn/obsidian-cloudflare-pages-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/obsidian-cloudflare-pages-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/dvcrn/obsidian-cloudflare-pages-2

---


# OpenClaw Skill: Obsidian/Markdown → Cloudflare Pages

This is an **OpenClaw Skill** for publishing Markdown to Cloudflare Pages.

- Works with Obsidian vault folders **or any Markdown folder**
- Originally built for reading Obsidian Web Clipper output:
  - https://obsidian.md/clipper

Automates a safe publishing flow:
1. Select notes from your source folder
2. Sync to a publish workspace
3. Build static HTML with Quartz
4. Deploy to Cloudflare Pages

## Commands

- `node skills/obsidian-cloudflare-pages/bin/publishmd-cf.js init`
  - Creates `config/config.json` from example
- `node skills/obsidian-cloudflare-pages/bin/publishmd-cf.js wizard`
  - Interactive setup wizard for config (vault, folders, site/domain, Cloudflare project)
- `node skills/obsidian-cloudflare-pages/bin/publishmd-cf.js setup-project`
  - Initializes Quartz project in configured workspace if missing
- `node skills/obsidian-cloudflare-pages/bin/publishmd-cf.js doctor`
  - Validates paths + required binaries
- `node skills/obsidian-cloudflare-pages/bin/publishmd-cf.js sync`
  - Syncs selected notes/assets into publish content folder
- `node skills/obsidian-cloudflare-pages/bin/publishmd-cf.js build`
  - Runs Quartz build in project dir
- `node skills/obsidian-cloudflare-pages/bin/publishmd-cf.js deploy`
  - Deploys to Cloudflare Pages with wrangler
- `node skills/obsidian-cloudflare-pages/bin/publishmd-cf.js run`
  - sync → build → deploy
- `node skills/obsidian-cloudflare-pages/bin/publishmd-cf.js run --dry-run`
  - previews actions without mutating files or deploying

## Config

Copy and edit:

`skills/obsidian-cloudflare-pages/config/config.example.json` → `skills/obsidian-cloudflare-pages/config/config.json`

### Safety defaults
- Publish allowlist by folder
- Optional `publish: true` frontmatter gate
- Exclude private folders by default

## Requirements

- `node` 20+
- `rsync`
- `npm`
- `npx quartz`
- `wrangler`

## Cloudflare API token setup (recommended)

Create a Cloudflare API token with at least:
- **Account → Cloudflare Pages:Edit**
- (Optional) **Zone → DNS:Edit** if you want DNS automation elsewhere

You can either export env vars in your shell profile (`~/.zshrc`) or use the skill-local `.env` file.

### Option A: shell profile (`~/.zshrc`)

```bash
export CLOUDFLARE_API_TOKEN="<your-token>"
export CLOUDFLARE_ACCOUNT_ID="<your-account-id>"
```

Reload shell:

```bash
source ~/.zshrc
```

### Option B: skill-local env file (recommended for this skill)

```bash
cp skills/obsidian-cloudflare-pages/.env.example skills/obsidian-cloudflare-pages/.env
# then edit .env
# optional auth envs: BASIC_AUTH_USERNAME / BASIC_AUTH_PASSWORD
```

The CLI auto-loads `skills/obsidian-cloudflare-pages/.env` (without overriding existing shell env vars).

Wizard now asks for:
- Full production domain (e.g. `YOURDOMAIN.COM`)
- Branding settings (root source folder, source index label, root index label, sidebar title HTML)
- Token/account env var names (defaults above)
- Optional basic-auth protection (username/password)


## Notes

- ⚠️ `setup-project` fallback behavior: if the direct Quartz bootstrap command fails, the fallback path may clear files in the configured workspace directory before cloning Quartz. Use a dedicated workspace path for this skill.
- Fallback cleanup is guarded and requires `ALLOW_DESTRUCTIVE=1` when workspace is non-empty.
- Dry-run output redacts sensitive values such as API tokens.

## OpenClaw usage tips

Example prompts:
- “Set up obsidian-cloudflare-pages wizard for my markdown folder.”
- “Run doctor and tell me what dependency is missing.”
- “Sync, build, and deploy to Cloudflare Pages.”
- “Enable basic auth and redeploy.”

Best practices:
- Keep secrets in `.env` (never in chat logs)
- Prefer env-backed basic auth (`BASIC_AUTH_USERNAME` / `BASIC_AUTH_PASSWORD`)
- Commit `config.example.json`, not personal `config.json`
- Use a scoped Cloudflare token (Pages edit, DNS edit only if needed)
- Start on a test subdomain before production

## Standalone usage (outside OpenClaw)

This works as a plain Node CLI too:

```bash
node bin/publishmd-cf.js init
node bin/publishmd-cf.js wizard
cp .env.example .env
# fill .env values
node bin/publishmd-cf.js run
```

## Security note

Basic auth in this skill is intentionally simple and optional. Do not publish highly sensitive content unless you fully understand your security model and hardening choices.

Safety switches:
- `--dry-run` (or `DRY_RUN=1`) to preview actions without mutating/deploying
- `ALLOW_DESTRUCTIVE=1` only when you intentionally allow fallback setup to clear a non-empty workspace directory


