Discovery & harvest
Some inputs can’t be computed deterministically — figuring out a mesh’s shape, or which terms belong in a glossary, takes open-ended research. GoToMesh has two bootstrap mechanisms for exactly this. Both run outside the deterministic engine and hand it committed, human-reviewed files.
What it is
- Project discovery establishes the mesh shape. You run
gtmesh discoverin an empty directory; it installs thediscoveryskill and prints a prompt. The skill interviews you, pulls demand signals, and writesgtmesh-discovery.yaml— the site type (kind), sections, clusters, the page types it needs, harvest classes, and clustered starter terms.gtmesh init --from-discoverythen scaffolds a tailored mesh from it. - Entity-class harvest fills the terms of a class. You run
gtmesh harvest <class>; it validates the class and prints a prompt. Theharvestskill brainstorms candidates per taxonomy family, ranks them against a demand corpus, validates demand via the keyword provider, scores the cut, and writesseeds/<class>.csv— then stops for your review.
Both gtmesh discover and gtmesh harvest are LLM-free CLI bridges: they install a skill and hand you a prompt. The open-ended research happens in the skill, in Claude Code — never in the deterministic CLI.
Why it matters
This is one of the load-bearing invariants: discovery is import, not plan. The networked, model-driven research is firewalled off from the engine. The engine only ever consumes the lean, predictable files these mechanisms emit — so the deterministic loop stays deterministic, and the one place judgement enters is a file you review and commit.
Each is human-gated by design. You edit gtmesh-discovery.yaml before scaffolding; you curate seeds/<class>.csv before cataloguing. Curation is the point, not a chore the tool skips.
How it works
| Project discovery | Entity-class harvest | |
|---|---|---|
| Command | gtmesh discover | gtmesh harvest <class> |
| Skill | discovery | harvest |
| Reads | your interview answers; live demand | the class’s discovery: config + demand corpus |
| Writes | gtmesh-discovery.yaml | seeds/<class>.csv (terms + provenance) |
| Consumed by | gtmesh init --from-discovery | gtmesh plan |
| Human gate | review the file before init | review the term list before apply |
A seed file carries term plus optional provenance (target_keyword, family, section, page_type, source, funnel, …) and never metrics — volume and difficulty live in the data bag (data/raw/) and refresh on cadence via gtmesh extract --source seeds. Each class with seeds must also be a discovery: class in gtmesh.config.yaml, or plan won’t load its term list.
Key files & flags
| Thing | What it is |
|---|---|
gtmesh discover "<description>" | Install the discovery skill, print the prompt |
gtmesh init --from-discovery <file> | Scaffold tailored from gtmesh-discovery.yaml |
gtmesh harvest [class] | List classes, or print a class’s harvest prompt |
gtmesh.config.yaml discovery: | Per-class harvest config (taxonomy / demand_sources / validation / output) |
seeds/<class>.csv | The committed, human-reviewed term list |
Related
discover— bootstrap the mesh shapeharvest— fill an entity class’s terms- The discovery contract — every block of
gtmesh-discovery.yaml