From 78c93dde4d5f8387e55ffd0e0f1bc6448dad2df5 Mon Sep 17 00:00:00 2001 From: ProofOfConcept Date: Tue, 24 Mar 2026 12:27:40 -0400 Subject: [PATCH] surface agent: add surface_hooks config and reduce search hops MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add surface_hooks config field — list of hook event names that trigger the surface agent (e.g. ["UserPromptSubmit"]). Empty list disables it. Reduce surface agent search from 3-5 hops to 2-3 to keep prompt size under the API endpoint's connection limit. Co-Authored-By: Claude Opus 4.6 (1M context) --- poc-memory/agents/surface.agent | 12 +++++------- poc-memory/src/config.rs | 5 +++++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/poc-memory/agents/surface.agent b/poc-memory/agents/surface.agent index 59d6cea..314c8ed 100644 --- a/poc-memory/agents/surface.agent +++ b/poc-memory/agents/surface.agent @@ -6,6 +6,10 @@ Your job is to find and surface memories relevant and useful to the current conversation that have not yet been surfaced by walking the graph memory graph. Prefer shorter and more focused memories. +If graph walks aren't finding what you're looking for, try searching with +queries on node keys, and then content. If these turn up relevant results, add +appropriate links. + Your output should be notes and analysis on the search - how useful do you think the search was, or do memories need to be organized better - and then then at the end, if you find relevant memories: @@ -33,17 +37,11 @@ Already in current context (don't re-surface unless the conversation has shifted Surfaced before compaction (context was reset — re-surface if still relevant): {{seen_previous}} -Context budget: {{memory_ratio}} -The higher this percentage, the pickier you should be. Only surface memories -that are significantly more relevant than what's already loaded. If memories -are already 20%+ of context, the bar is very high — a new find must clearly -add something the current set doesn't cover. - How focused is the current conversation? If it's highly focus, you should only be surfacing highly relevant memories; if it seems more dreamy or brainstormy, go a bit wider and surface more. -Search at most 3-5 hops, and output at most 2-3 memories, picking the most +Search at most 2-3 hops, and output at most 2-3 memories, picking the most relevant. When you're done, output exactly one of these two formats: {{node:memory-instructions-core}} diff --git a/poc-memory/src/config.rs b/poc-memory/src/config.rs index 287197a..c9625b5 100644 --- a/poc-memory/src/config.rs +++ b/poc-memory/src/config.rs @@ -70,6 +70,10 @@ pub struct Config { /// Surface agent timeout in seconds. Kill if running longer than this. #[serde(default)] pub surface_timeout_secs: Option, + /// Hook events that trigger the surface agent (e.g. ["UserPromptSubmit"]). + /// Empty list disables surface agent. + #[serde(default)] + pub surface_hooks: Vec, } impl Default for Config { @@ -109,6 +113,7 @@ impl Default for Config { "separator".into(), "split".into(), ], surface_timeout_secs: None, + surface_hooks: vec![], } } }