Kijito Recall — aiming retrieval, not widening it
kijito_recall embeds ONE query vector per call. A question that bundles several facts — "where
did X move after the job Y mentioned, and who introduced them?" — retrieves a single compromise
neighborhood that can miss every one of its parts. The fix is not a deeper recall; it is more,
better-aimed recalls.
The decomposition pattern (multi-part questions)
- Split the question into at most 3 self-contained sub-queries, each phrased in the words its answer was likely stored under (recall matches wording — front-loaded concrete terms beat abstractions). YOU do the decomposition, in your own reasoning — the engine makes no LLM call.
- Recall them in ONE call with the native parameter:
kijito_recall(query=<the original question>, sub_queries=[<sub-query 1>, <sub-query 2>, ...]). Each sub-query runs the normal recall pipeline server-side and the ranked lists are merged for you — round-robin interleave, dedup, truncated tolimit— so the result is already the aimed, budget-bounded set. The reply names the merge (subquery_merge); if it instead says it degraded to a plain recall (blank list, or a single entry equal toquery), your decomposition was not used — fix the sub-queries rather than reading the plain result as decomposed. Fallback only — on a server whosekijito_recallhas nosub_queriesparameter, recall each sub-query separately with a smallerlimitper call (e.g. 3 recalls × limit 8 instead of 1 × 24) and merge + dedup the results yourself. Doing that against a server that HAS the parameter re-implements, client-side and less well, a merge the server has already measured. - Keep the budget fixed. Whichever path ran, keep the TOTAL context you carry no larger than
what one deep recall would have given you (
limitis the cap on the merged set). Decomposition is for aiming, not for smuggling a bigger context load. - Chain the hops. When an early hop's answer names the entity the next hop needs, rewrite the next sub-query around that entity and recall again — chaining is a second call, not a bigger first one.
When NOT to decompose
Leave single-part questions alone. A decomposition step on a simple lookup adds latency and near-miss context and helps nothing. Decompose only when the question genuinely needs several distinct facts joined together.
Abstention discipline
Abstain as readily as you would with a single recall. Decomposed retrieval surfaces more adjacent-but-wrong material, and near-miss context is exactly what tempts a confident answer to a question whose true answer is "that isn't in memory". If the merged results don't actually contain a hop, say so — don't bridge the gap with plausibility.
Related
kijito_guide(topic="recall")— how recall scoring works (semantic + graph traversal + keyword boost) and why wording decides findability; this pattern is documented there too.kijito_guide(topic="writing")— writing memories so future sub-queries can find them.