Adapto project define
Skill adaptocms/adapto-cms-agent-skills/plugin/skills/adapto-project-define
Build the project's "brain" — a rich, local multi-file knowledge base — through deep guided discovery (a short skippable interview plus active web/competitor/keyword research), and store a summary in Adapto as _adapto_project_config so every other skill writes on-brand. Plan-then-apply; fully optional.From its SKILL.md
npx -y skills add adaptocms/adapto-cms-agent-skills --skill adapto-project-defineAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things 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.
- runs commandsInstructs the agent to run 4 commands, including `adapto auth orgs --json` and 3 more.
SKILL.md
9.7 KB, ~2.3k tokens by cl100k_base, as published. Nobody here has run it
adapto:project-define
The most important setup step: it builds the project's brain — the local, multi-file knowledge base at
.adapto/project/ (see studio.md §2) that every content skill reads to stay
on-brand and on-scope. It works by deep guided discovery: a short, skippable interview for the things only
you know, then active research (your existing site + competitors + an initial keyword universe) to fill
in the rest. A flattened summary is stored in the CMS as _adapto_project_config; the rich facets stay
local. The whole step is optional — skills work without it, just less sharply.
When to use
- Setting up a project and you want the agent to deeply understand it before researching or writing content.
- Triggers: "define my project", "build the project brain", "tell Adapto about my product/brand/voice".
- Re-run to refresh the brain after big changes (it reconciles, never blindly clobbers your edits).
When not to use
- Consolidating findings you've already gathered while working →
adapto:project-learn. - You'd rather not answer anything → skip it; content skills fall back to neutral defaults.
- Just checking the environment →
adapto:doctor.
Inputs
- A short interview (every question optional, pickable options + free-form, asked one at a time) for the human-only facts: project type → what it does → audience/ICPs (pains, jobs-to-be-done) → brand voice → writing do's & don'ts → one-line pitch → named competitors (URLs welcome) → your existing site URL (if any).
- Research inputs the interview unlocks: competitor URLs, your site URL, and any files you drop into
.adapto/sources/(keyword lists, Search Console exports, notes) — all optional. - The tenant's language (
adapto auth orgs --json) for the CMS summary.
Outputs
- The filled
.adapto/project/brain:identity,audience,voice,glossary,competitors,pillars,seo,inventory,INDEX,open-questions(+ a seededlearnings.mdand acadence.mdstub). - The CMS
_adapto_project_configcollection with a one-item summary (identity + audience + voice + pitch), statusdraft. - A read-only cache at
.adapto/project.md. - Next step:
adapto:schema-design— propose the content schema from the brain you just built.
Discovery (the LLM + research step)
Three moves; everything is skippable; narrate briefly as you go (conventions.md §10):
-
Interview — human-only facts, one question at a time. Offer "skip all" up front. Tailor each question's examples to prior answers (don't offer fintech verticals to a food blog). Cover, in order: project type → what it does (one sentence — grounds everything) → audience/ICPs (who, their pains, jobs-to-be-done) → brand voice → do's & don'ts → one-line pitch (draft it from the answers; the user confirms) → named competitors (URLs if handy) → existing site URL (if any). Stop as soon as the user is done.
-
Research — dispatch
adapto-researcherin parallel (one angle each; it returns cited findings and never writes content — sub-agents.md):- your site URL → crawl for existing pages/URLs → the internal-link inventory;
- each named competitor → positioning, notable content, gaps → competitors;
- type + what-it-does + audience → an initial keyword universe + search intent + AEO questions → seo, and candidate content pillars → pillars;
- anything unresolved → open-questions.
Proactively offer: "drop any keyword lists / Search Console exports into
.adapto/sources/and I'll fold them in." Skip research entirely if the user prefers interview-only.
-
Synthesize the interview + research into every brain facet (Sonnet-class). Be proactive — surface domain-relevant content ideas and angles, not just recorded answers. Before writing, batch-read any facet that already exists (a re-run, or a brain the user has hand-edited) in a single call — the harness blocks a
Writeto an unread existing file, and you must merge with what's there rather than replace it (conventions §15). On a first run afteradapto:scaffoldthe directory is empty, so there's nothing to read and the writes are clean. Seedlearnings.mdwith a dated "discovery" entry; write acadence.mdstub (unset by default; optionally ask target volume/day/pillars).
Preconditions
- Preflight with the
adapto:doctorchecks. - Authenticated CLI + a selected tenant (the CMS summary write needs it; confirm the working tenant — never assume the active one).
- The
.adapto/workspace should exist (created byadapto:scaffold, withproject/empty); if missing, create the directories first — no stub facets, this skill writes the real ones. adaptoCLI>= 0.1.3.
Plan phase
After discovery (interview + research), before any writes, print a machine-parseable plan and ask as a
pickable question (Approve / Change something / Discuss this, plus free-form):
- The brain facets to be written, with a one-line summary of each (so the user sees what was learned).
- The CMS
_adapto_project_configsummary fields + values (identity/audience/voice/pitch),draft. - Whether
_adapto_project_configalready exists (reuse) or will be created, and the slug used. - The cache
.adapto/project.md. No cost/token figures. If the user skipped everything → nothing to apply; say so and stop.
Apply phase
Runs only after approval. Research already happened (read-only); now write:
- Brain files — write/update each
.adapto/project/*.mdfacet from the synthesis. Reconcile, don't clobber: if a facet already holds user content, merge rather than overwrite. - Resolve language —
adapto auth orgs --json→ the active tenant's first enabled code, verbatim. - CMS summary — find or create
_adapto_project_config:adapto collections get-by-slug _adapto_project_config --json→ reuse its id if present.- else
adapto collections create --name "Adapto Project Config" --slug _adapto_project_config --description "Project context summary for Adapto agent skills" --language <lang> --status draft --fields-json '<fields below>'. - ⚠️ Reserved-slug fallback: if
_adapto_is rejected, retry once withadapto-project-config; record which slug worked. - Write the summary item:
adapto collections items create <id> --title "Project Config" --slug project-config --language <lang> --status draft --data-json '<summary>'(oritems updateif it exists).
- Cache
.adapto/project.md(read-only): the summary + the slug used + a pointer to the local brain. - Report the brain facets written + the CMS collection/item ids. (No
--source— collections/items have no provenance.) - Next step:
adapto:schema-design.
Fields (FieldDefinitionModel[] — the CMS summary, not the whole brain):
[
{"name":"project_type","label":"Project type","type":"text"},
{"name":"summary","label":"What it does (one-sentence purpose + scope)","type":"textarea"},
{"name":"vertical","label":"Vertical / industry","type":"text"},
{"name":"icps","label":"Target audience / ICPs","type":"textarea"},
{"name":"brand_voice","label":"Brand voice","type":"text"},
{"name":"tone_rules","label":"Writing do's and don'ts","type":"textarea"},
{"name":"value_prop","label":"One-line pitch (value proposition)","type":"textarea"}
]
The item's --data-json is the keyed summary; include only fields the interview/research produced.
Errors and recovery
- Not authenticated / no tenant → stop the CMS write; offer both auth paths —
Log inorRegister(conventions §11) — thenswitch-tenant. The brain is local, so you may still write it and defer the summary until login if the user wants. _adapto_slug rejected → auto-retryadapto-project-config; if that also fails, surface the error and stop.- Research yields little (no site, no competitors, thin web results) → proceed with the interview facts,
note the gaps in
open-questions.md, and don't fabricate. - Config item already exists → update it; never duplicate.
- Language discovery fails → ask for a tenant-enabled code; don't guess.
adapto-researcherunavailable → fall back to interview-only; write the brain from the interview and log research as an open question.
Forbidden actions
- Never write without an approved plan (plan-then-apply); never assume the working tenant.
- Never pad the interview or force answers — every question and the whole step is skippable.
- Never clobber brain facets the user has edited — reconcile/merge.
- Never write CMS content beyond
_adapto_project_config; the rich facets stay local. - Never cache secrets into
.adapto/(studio.md); never fabricate competitor facts — cite via the researcher. - Plus the global list in forbidden-actions.md — notably: never delete CMS content (archive instead; conventions §9a).
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.