When you call get_stack with structured sub_needs, each sub-need carries a keyword_sentence. This is a short list of comma-separated terms — not prose — that describes the layer precisely enough to get back the right tool.
Why keywords, not sentences?
English sentences smuggle in filler words ("good", "works well") that the engine has to work around. A keyword list names the signal directly: the concepts a candidate tool must match on.
Shape of a good keyword sentence
{
"sub_need_type": "database",
"keyword_sentence": "sql, postgres, relational, ACID, type-safe"
}Avoid:
{
"sub_need_type": "database",
"keyword_sentence": "I need a good database that works well with TypeScript"
}Authoring tips
- 3 to 8 keywords. Fewer = ambiguous; more = overly narrow.
- Mix category terms with specific signals (
sql, postgres, ACID). - Skip brand names unless the user asked for a specific vendor.
- Lowercase; hyphenate compound concepts (
type-safe).
Why it matters
A precise keyword_sentence is the single most impactful thing an agent can control. A well-written one keeps the recommendation anchored to what the user actually needs; a sloppy one lets general popularity drag the answer toward whichever tool is most written-about.