Tune adaptive recall with brain profiles — inspect profiles and posteriors, manage lifecycle (activate/deactivate/archive/reset), emit feedback (brain.feedback / brain.auto_feedback) to shift recall weights, and wire actors to profiles via bind/unbind/resolve/bindings. Use whenever recall behavior feels off, a new tuning profile is needed, or you need to confirm which profile serves a given caller.
Install
npx skillscat add ohdearquant/khive/marketplace-khive-skills-brain Install via the SkillsCat registry.
Tune adaptive recall with brain profiles
The brain pack is the adaptive layer that adjusts how memory.recall ranks results. It holds
Bayesian profiles whose posteriors shift with every feedback signal. The verbs arebrain.create_profile, brain.profiles, brain.profile, brain.activate, brain.deactivate,brain.archive, brain.reset, brain.feedback, brain.auto_feedback, brain.resolve,brain.bind, brain.unbind, and brain.bindings. Per-verb param detail is one help=true away:request(ops="brain.feedback(help=true)").
The pattern
1. Orient: which profile is active and who does it serve?
Start every session with a single batch call to see the current state:
request(ops="[brain.profiles(lifecycle=\"active\"), brain.resolve(consumer_kind=\"recall\")]")The built-in profile is balanced-recall-v1. Inspect current posterior values (relevance,
salience, temporal weights) with:
request(ops="brain.profile(profile_id=\"balanced-recall-v1\")")2. Feed signal back after recall
After memory.recall returns results, emit a signal on each result you can evaluate. The
convenience verb handles the common case:
request(ops="brain.auto_feedback(query=\"<the recall query>\", results=[{\"id\":\"<uuid-1>\"}], target_id=\"<uuid-1>\", signal=\"implicit_positive\")")Both query (the recall query that produced the results) and results are required. A supplied
signal also requires target_id to exactly match one result; rank position never creates a
judgment. Omit signal to abstain without emitting a feedback event. For direct per-item control, usebrain.feedback. Eight signals are available: useful,not_useful, wrong, explicit_positive, explicit_negative, implicit_positive,implicit_negative, correction. Batch across multiple results in one call:
request(ops="[brain.feedback(target_id=\"<uuid-1>\", signal=\"useful\"), brain.feedback(target_id=\"<uuid-2>\", signal=\"not_useful\")]")3. Manage lifecycle when behavior drifts
Posteriors that have drifted can be reset without losing event history:
request(ops="brain.reset()")To pause live updates while inspecting a profile, deactivate it first:
request(ops="brain.deactivate(profile_id=\"balanced-recall-v1\")")Then reactivate when ready:
request(ops="brain.activate(profile_id=\"balanced-recall-v1\")")To retire a profile permanently, deactivate it before archiving — the runtime rejects a directactive to archived transition:
request(ops="brain.deactivate(profile_id=\"balanced-recall-v1\") | brain.archive(profile_id=$prev.profile_id)")4. Wire a new profile to actors or namespaces
When you need a separate tuning profile for a specific actor or context, create it (startsInactive), activate it, then bind it:
request(ops="brain.create_profile(name=\"research-v1\", consumer_kind=\"recall\")")
request(ops="brain.activate(profile_id=\"research-v1\")")
request(ops="brain.bind(profile_id=\"research-v1\", actor=\"researcher\", consumer_kind=\"recall\")")Confirm the binding resolves correctly before relying on it:
request(ops="brain.resolve(consumer_kind=\"recall\", actor=\"researcher\")")Resolution priority: exact (actor+namespace+consumer_kind) then namespace wildcard, actor
wildcard, and finally global wildcard. NotFound means no binding covers that combination.
Anti-patterns
- Short UUID in
brain.feedback.target_idrequires the full UUID from the recall result.
Short prefix IDs are rejected without a helpful error. - Archiving the only active profile. If
balanced-recall-v1is the sole active binding forrecall, archiving it makesbrain.resolve(consumer_kind="recall")returnNotFoundfor all
callers until a replacement is bound and activated. - Calling
brain.unbind()with no args. At least one filter (profile_id,actor,namespace, orconsumer_kind) is required. A bare call is rejected. - Resetting mid-session.
brain.resetdiscards posteriors accumulated in the current session.
Reset between sessions or after deliberate behavioral experiments, not while actively recalling. - Binding before activating. A binding to an
Inactiveprofile is valid but the profile will
not receive live updates untilbrain.activateis called.