Install
$ agentstack add skill-aiengkenn-agent-skills-sanity-editor-ux ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Sanity Editor UX
Make Sanity Studio usable for non-technical editors in any editorial language.
Prefer this skill over ad-hoc label tweaks. Follow the workflow end-to-end.
Skill vs prompt
| Deliverable | When to use | |-------------|-------------| | This skill (SKILL.md) | Cursor / Claude Code / Copilot agents — auto-discovered, repeatable | | PROMPT.md | Paste into any chat model that cannot load skills | | Code starter | Optional TypeScript helpers under sanity/starters/sanity-editor-ux (or installed package) |
Verdict: Ship a skill as the public artifact. Include PROMPT.md for portability.
Before you start — ask the user
Collect (do not guess):
- Editorial language for Studio labels + help panel: any BCP-47 / short code (
en,fr,es,de,pt-BR, …). Built-in packs are only examples — register any language viaregisterEditorUxLocalePartial(seelocales.md). - Brand / studio title
- Greenfield vs existing Sanity project
- Document types + which are singletons
- Whether they need generic managed page copy (
pageContent) or only classic documents - Where fallback / hardcoded copy lives today
- Sanity project id / dataset / write token availability (names only)
Never tell the user that only English/French/Spanish are supported. If a pack is missing, create one by merging translations onto English and install the matching @sanity/locale-* chrome plugin.
Non-negotiable principles
- Technical
name, humantitle— never show camelCase to editors - Lock what can break the site —
readOnly/hiddenfor keys / ids - One editable affordance for managed copy — only Content (EN) / Contenu (FR) / Contenido (ES)
- Describe placement — every field says where it appears on the site
- Publish is sacred — help panel + badges reinforce Publish vs Save
- Daily work first in the desk — help → numbered lists → singletons → settings
- Fallbacks + safe bootstrap — empty CMS must not blank the site; bootstrap must not wipe editors (
setIfMissing) - Never rename technical field
names on existing projects (breaks GROQ, types, seeds) - Match Studio chrome language to content language (locale plugin + labels)
- Do not require
.agents— install skill to.cursor/skills/or project.agents/skills/
Workflow (execute in order)
0. Inventory (existing repos)
- List schema document types and field
names - Find fallbacks / hardcoded UI strings / seeds
- Note dual Studio configs (Next embedded + standalone) — wire both if present
- Propose desk map + bootstrap scope
1. Install skill / starter files
- Skill: already installed if user ran
npx skills add …or the package installer - Optional code kit: copy
sanity/starters/sanity-editor-ux→ projectsanity/editor-ux/
2. Dependencies
npm install sanity @sanity/icons @sanity/ui @sanity/client
npm install -D tsx
# Locale plugin for editorial language (skip for English):
npm install @sanity/locale-fr-fr # French
npm install @sanity/locale-es-es # Spanish
# See locales.md for de, it, pt, pt-BR, nl, …
3. Copy pack + locale plugin
import {
createEditorUxCopy,
registerEditorUxLocalePartial,
resolveSanityLocalePlugin,
} from "./editor-ux/src";
// Any language — register if not built-in:
registerEditorUxLocalePartial({
locale: "de",
studioTitle: "Redaktionsbereich {BRAND}",
labels: { placement: "Platzierung", content: "Inhalt" },
// …translate help/ui as needed (untranslated keys stay English)
});
const copy = createEditorUxCopy("de", {
studioTitle: "Redaktion {BRAND}",
});
const chrome = resolveSanityLocalePlugin("de");
// npm i @sanity/locale-de-de → deDELocale({ title: "Deutsch" })
Built-ins en/fr/es are pre-registered examples only.
4. Desk structure
Help panel (item 0) → numbered daily document lists with @sanity/icons → singletons → taxonomies/settings. Customize type names to the real schema — do not force LEGALI type names.
5. Relabel schemas
Rewrite every title / description in the editorial language. Prefer helpers:
humanString/humanText/humanSlugimageWithAlt/ctaFields/seoObjectFielddefinePageContentTypewhen managed page copy is neededsectionPrefixedFieldsfor long singletons
6. Bootstrap (mandatory for client handoff)
- Code-owned fallbacks (managed-pages definitions and/or
fallback*objects) - Script using
ensureDocument+setIfMissing+seedManagedPages --dry-runsupport + deterministic ids- Runtime
fetchOrFallback/ merge so empty CMS cannot blank pages - npm scripts:
sanity:bootstrap/sanity:bootstrap:dry
If the project already has a safe seed script, extend it instead of creating a parallel one.
7. Verify
- [ ] Studio opens without schema errors
- [ ] Sidebar: help + icons + numbered groups
- [ ] Locale plugin active when language ≠ English
- [ ] Managed copy (if used): Placement read-only + Content editable
- [ ] Badges show Draft / Published in the editorial language
- [ ] No camelCase titles for editors
- [ ] Bootstrap dry-run is safe; live run does not overwrite editors
- [ ] Site still renders with Sanity empty
Anti-patterns (refuse these)
- Requiring
.agentsto proceed - Renaming schema
names “to look nicer” - Editable
pageKey/ internal keys - Bootstrap with
createOrReplacethat wipes fields - Empty CMS with no fallbacks on production
- English Studio chrome with Spanish/French content labels (or the reverse) without approval
- Adding generic
pageContentwhen dedicated page types already exist and work
Read next
locales.md— language packs + Sanity locale pluginsreference.md— patterns, desk, bootstrap, dual-config pitfallsexamples.md— paste prompts for en/fr/es and existing projectsPROMPT.md— single paste block for agents without skill support
Deliverable summary (always reply with)
- Language + locale plugin used
- Files touched
- Desk map (0…n)
- Bootstrap dry-run / live summary
- Anything left for the human (token, roles, first Publish checklist)
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: AIEngKenn
- Source: AIEngKenn/agent-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.