adversarial-reviewer
Stress-test a code change for concrete correctness defects, unsafe assumptions, and failure…
Use the EmDash CLI to inspect and manage an EmDash instance from the command line, including content, schema, media, taxonomies, menus, search, authentication, seeds, migrations, generated types, and whole-site export and import.
$ npx -y skills add emdash-cms/emdash --skill emdash-cli --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/emdash-cliContext preview
The summary Claude sees to decide when to auto-load this skill.
Use the EmDash CLI to inspect and manage an EmDash instance from the command line, including content, schema, media, taxonomies, menus, search, authentication, seeds, migrations, generated types, and whole-site export and import.
name: emdash-cli description: Use the EmDash CLI to inspect and manage an EmDash instance from the command line, including content, schema, media, taxonomies, menus, search, authentication, seeds, migrations, generated types, and whole-site export and import.
The EmDash CLI (`emdash`, with the short alias `em`) manages EmDash CMS instances. Commands fall into two categories:
Run `npx emdash --help` and `npx emdash <command> --help` for the installed version's exact commands and flags. Resolve the current target with a read command before a destructive or bulk mutation; examples in this skill do not authorize changing an instance the user did not place in scope.
Remote commands resolve auth automatically:
1. `--token` flag 2. `EMDASH_TOKEN` env var 3. Stored credentials from `emdash login` 4. Dev bypass (localhost only — no token needed)
For a localhost development server with the development bypass enabled, the client can authenticate automatically. For a remote instance, run `emdash login --url https://example.com` or provide a scoped token.
Sites behind Cloudflare Access or other reverse proxies need auth headers on every request. The CLI supports this via `--header` flags and environment variables.
# Provide sensitive headers through the environment in CI. export EMDASH_HEADERS="CF-Access-Client-Id: xxx CF-Access-Client-Secret: yyy" npx emdash whoami --url https://example.com
`emdash login --header` persists custom headers to `~/.config/emdash/auth.json` for later commands. Prefer environment-provided headers in CI so a service secret is not written to the credential file or shell history.
If you don't have service tokens and `cloudflared` is installed, the CLI will automatically:
1. Detect when Access blocks the request 2. Try to get a cached JWT via `cloudflared access token` 3. Fall back to `cloudflared access login` for browser-based auth
This works for interactive use but isn't suitable for CI. Use service tokens for automation.
The `--header` flag works with any auth scheme:
# Basic auth npx emdash login --url https://example.com -H "Authorization: Basic dXNlcjpwYXNz" # Custom auth header npx emdash login --url https://example.com -H "X-API-Key: secret123"
For normal site startup, use the project's package script. The first request runs pending migrations and, before setup is completed, applies the bundled seed's schema and structure once; sample content comes from the setup wizard, `/_emdash/api/setup/dev-bypass`, or `emdash seed`. The Astro integration generates `emdash-env.d.ts` when the server starts.
# Start the site with its package script pnpm dev # Export an existing database as a seed file # (the runtime auto-discovers .emdash/seed.json on first boot; # `mkdir -p` because the directory may not exist yet) mkdir -p .emdash npx emdash export-seed > .emdash/seed.json npx emdash export-seed --with-content=all > .emdash/seed.json
# Generate types from local dev server npx emdash types # Generate from remote npx emdash types --url https://example.com # Custom output path npx emdash types --output src/types/cms.ts
Writes `.emdash/types.ts` (TypeScript interfaces) and `.emdash/schema.json`.
# Login (OAuth Device Flow) npx emdash login --url https://example.com # Check current user npx emdash whoami # Logout npx emdash logout # Generate an encryption key for deployment npx emdash secrets generate
The CLI is designed for agents. Create and update auto-publish by default so agents get read-after-write consistency without managing drafts.
# List content
npx emdash content list posts
npx emdash content list posts --status published --limit 10
# Get a single item (Portable Text fields converted to markdown)
# Returns draft data if a pending draft exists
npx emdash content get posts 01ABC123
npx emdash content get posts 01ABC123 --raw # skip PT->markdown conversion
npx emdash content get posts 01ABC123 --published # ignore pending drafts
# Create content (auto-publishes by default)
npx emdash content create posts --data '{"title": "Hello", "body": "# World"}'
npx emdash content create posts --file post.json --slug hello-world
npx emdash content create posts --draft --data '...' # keep as draft
cat post.json | npx emdash content create posts --stdin
# Update (requires --rev from a prior get, auto-publishes by default)
npx emdash content update posts 01ABC123 --rev MToyMDI2... --data '{"title": "Updated"}'
npx emdash content update posts 01ABC123 --rev MToyMDI2... --draft --data '...' # keep as draft
# Delete (soft delete)
npx emdash content delete posts 01ABC123
# Lifecycle
npx emdash content publish posts 01ABC123
npx emdash content unpublish posts 01ABC123
npx emdash content schedule posts 01ABC123 --at 2026-03-01T09:00:00Z
npx emdash content restore posts 01ABC123# List collections npx emdash schema list # Get collection with fields npx emdash schema get posts # Create collection npx emdash schema create articles --label Articles --description "Blog articles" # Delete a collection after inspecting it and confirming the target npx emdash schema get articles npx emdash schema delete articles # Add field npx emdash schema add-field posts body --type portableText --label "Body Content" npx emdash schema add-field posts featured --type boolean --required # Remove
A full-stack TypeScript CMS built on Astro. EmDash takes the ideas that made WordPress dominant -- extensibility, admin UX, a plugin ecosystem -- and rebuilds them on serverless, type-safe foundations.
Repo: emdash-cms/emdash
Stress-test a code change for concrete correctness defects, unsafe assumptions, and failure…
Use the agent-browser CLI to exercise web interfaces, inspect rendered accessibility state,…
Build the site-facing parts of an EmDash CMS project on Astro, including schema and seeds,…
Create EmDash CMS plugins with sandboxed hooks, routes, storage, content and media APIs, MCP…
Coordinate black-box, agent-driven UX acceptance journeys against a disposable EmDash admin…
Analyze and port WordPress plugin behavior, custom post types, shortcodes, admin workflows,…