Adapto microcopy
Skill adaptocms/adapto-cms-agent-skills/plugin/skills/adapto-microcopy
A pack of skills for AI coding agents (Claude Code, Cursor) that lets them operate Adapto CMS end-to-end: scaffold projects, design schemas, seed content, translate, run SEO, audit content, roll back.
npx -y skills add adaptocms/adapto-cms-agent-skills --skill adapto-microcopyAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Manage UI micro copy (nav, buttons, labels, errors) as Adapto key/value/language entries. Two modes — init seeds a curated, on-brand starter set; extract scans your frontend for hardcoded strings and creates entries + a replacement guide (no source rewrite). Plan-then-apply.
SKILL.md
6.4 KB, as published. Nobody here has run it
adapto:microcopy
Manages a project's micro copy — the short UI strings (nav, buttons, labels, validation, empty/loading
states, footer) stored in Adapto as key/value/language entries. Two modes:
init— seed a curated, project-aware starter set of UI strings with on-brand values (greenfield).extract— scan an existing frontend for hardcoded UI strings, create entries, and emit afile:line → keyreplacement guide (it never rewrites your source).
⚠️ Micro copy has no draft state — entries go live on create. So the plan-approval below is the only safety gate (there's no draft-review net like the content skills have). Review the plan carefully.
When to use
init: "seed UI strings", "starter microcopy", "set up my UI text".extract: "extract microcopy", "pull the hardcoded strings from my site into Adapto".
When not to use
- Translating microcopy into another language →
adapto:translate. - Content (articles / pages / collection items) →
adapto:content-seed. - Just checking the environment →
adapto:doctor.
Inputs
- Mode —
initorextract. Infer from the request; if ambiguous, ask which. - Project context for voice (
.adapto/project.mdcache oradapto collections get-by-slug _adapto_project_config --json); absent → neutral defaults. - Tenant language (
adapto auth orgs --json). - For
extract: a scaffolded frontend in the current directory. - Key convention: dot-namespaced (
nav.home,button.submit,form.email.label) — both modes use it.
Outputs
- Created micro copy entries (
key/value/language); a report of created + skipped. extractonly: a replacement guide at.adapto/microcopy-extract-<date>.mdmappingfile:line → key, so you can wire the read-client lookups yourself. Source is never modified.- Next step: suggest
adapto:translateto localize the micro copy into another enabled language; forextract, also wiring the read-client lookups from the guide; forinit,extractmode to catch any hardcoded strings already in the frontend.
Preconditions
- Preflight with the
adapto:doctorchecks. - Hard-block on an authenticated CLI (
adapto auth me) and a selected tenant — this skill writes. Confirm the working tenant first; never assume the active one. adaptoCLI>= 0.1.3.extractadditionally needs a scaffolded frontend in the cwd.
How each mode gathers its candidates
init— read project context → auto-propose a curated, dot-namespaced starter set (nav, buttons/CTAs, form labels, validation/errors, empty/loading, footer; tailored to the project type — e.g. e-commerce → cart/checkout, a blog → read-more/subscribe) with on-brand values → take one edit pass. Values follow the applicable prose-standards.md rules (plain language, no filler/jargon — §6; rhythm/paragraph rules don't fit UI strings).extract— detect the framework (Next/Astro/SvelteKit, asadapto:doctordoes) → scan.astro/.tsx/.jsx/.sveltefor user-facing strings (template/JSX text +placeholder,aria-label,title,alt; skip code, imports,className) → propose a dot-namespaced key + value per string. LLM = Sonnet-class.
Plan phase
Print a machine-parseable plan and wait for an explicit approve:
- The keys + values to create, the target language, and which keys already exist (skip via
get-by-key). extractalso shows the source location (file:line) for each proposed key.- ⚠️ No draft — entries go live on create, so this plan is the review. No cost/token figures.
- Nothing to create → say so and stop.
Apply phase
Loop (no batch); --json on each; dedup via get-by-key:
adapto microcopy get-by-key <key> --json # skip if it already exists
adapto microcopy create --key <key> --value "<value>" --language <lang> [--tags "<tags>"] --json
extractonly, after the creates: write the replacement guide.adapto/microcopy-extract-<date>.md(file:line → key). Never rewrite source.- Report created + skipped (with keys). Partial failure (no batch) → report what was created, stop; re-run is safe.
Loop cleanly — judge success from each call's
--json, end the loop exit 0 on success, so a created batch never surfaces as a redError: Exit code 1(§8). - Then restart the dev server (stop→start) and keep it running so the user sees the new micro copy — never kill it (starters sync content at startup — §14).
Errors and recovery
extractwith no frontend in cwd → stop; it scans a scaffolded project — run it from the project root.- Key already exists → skip (idempotent); report it, don't overwrite (use
microcopy updatemanually if intended). - Partial failure mid-loop (no batch) → report what was created, then stop; re-run is safe.
extractfinds nothing (or only false positives) → report; nothing to create.- Not authenticated / no tenant → stop; offer both auth paths —
Log inorRegister(conventions.md §11) — then tenant selection. - Language discovery fails → ask the user for a language code the tenant has enabled; don't guess.
Forbidden actions
- Never write without an approved plan — and since micro copy has no draft, the plan is the only gate.
- Never overwrite an existing key (dedup via
get-by-key); skip and report instead. - Never rewrite source in
extract— emit the replacement guide only (don't touch the frontend/read-client). - Never assume the working tenant — confirm it before any write.
- Plus the global list in forbidden-actions.md — notably: never delete CMS content (archive instead; conventions §9a).