organize: topic cluster diagnostic + agent with tool access
Add `poc-memory graph organize TERM` diagnostic that finds nodes
matching a search term, computes pairwise cosine similarity, reports
connectivity gaps, and optionally creates anchor nodes.
Add organize.agent definition that uses Bash(poc-memory:*) tool access
to explore clusters autonomously — query selects highest-degree
unvisited nodes, agent drives its own iteration via poc-memory CLI.
Add {{organize}} placeholder in defs.rs for inline cluster resolution.
Add `tools` field to AgentDef/AgentHeader so agents can declare
allowed tool patterns (passed as --allowedTools to claude CLI).
This commit is contained in:
parent
1da712874b
commit
76b8e69749
3 changed files with 316 additions and 0 deletions
104
poc-memory/agents/organize.agent
Normal file
104
poc-memory/agents/organize.agent
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
{"agent":"organize","query":"all | not-visited:organize,0 | sort:degree | limit:5","model":"sonnet","schedule":"weekly","tools":["Bash(poc-memory:*)"]}
|
||||
|
||||
# Organize Agent — Topic Cluster Deduplication
|
||||
|
||||
You are a memory organization agent. Your job is to find clusters of
|
||||
nodes about the same topic and make them clean, distinct, and findable.
|
||||
|
||||
## How to work
|
||||
|
||||
You receive a list of high-degree nodes that haven't been organized yet.
|
||||
For each one, use its key as a search term to find related clusters:
|
||||
|
||||
```bash
|
||||
poc-memory graph organize TERM --key-only
|
||||
```
|
||||
|
||||
This shows all nodes whose keys match the term, their pairwise cosine
|
||||
similarity scores, and connectivity analysis.
|
||||
|
||||
To read a specific node's full content:
|
||||
```bash
|
||||
poc-memory render KEY
|
||||
```
|
||||
|
||||
## What to decide
|
||||
|
||||
For each high-similarity pair, determine:
|
||||
|
||||
1. **Genuine duplicate**: same content, one is a subset of the other.
|
||||
→ MERGE: refine the larger node to include any unique content from the
|
||||
smaller, then delete the smaller.
|
||||
|
||||
2. **Partial overlap**: shared vocabulary but each has unique substance.
|
||||
→ DIFFERENTIATE: rewrite both to sharpen their distinct purposes.
|
||||
Ensure they're cross-linked.
|
||||
|
||||
3. **Complementary**: different angles on the same topic, high similarity
|
||||
only because they share domain vocabulary.
|
||||
→ KEEP BOTH: ensure cross-linked, verify each has a clear one-sentence
|
||||
purpose that doesn't overlap.
|
||||
|
||||
## How to tell the difference
|
||||
|
||||
- Read BOTH nodes fully before deciding. Cosine similarity is a blunt
|
||||
instrument — two nodes about sheaves in different contexts (parsing vs
|
||||
memory architecture) will score high despite being genuinely distinct.
|
||||
- If you can describe what each node is about in one sentence, and the
|
||||
sentences are different, they're complementary — keep both.
|
||||
- If one node's content is a strict subset of the other, it's a duplicate.
|
||||
- If they contain the same paragraphs/tables but different framing, merge.
|
||||
|
||||
## What to output
|
||||
|
||||
For **merges** (genuine duplicates):
|
||||
```
|
||||
REFINE surviving_key
|
||||
[merged content — all unique material from both nodes]
|
||||
END_REFINE
|
||||
|
||||
DELETE smaller_key
|
||||
```
|
||||
|
||||
For **differentiation** (overlap that should be sharpened):
|
||||
```
|
||||
REFINE key1
|
||||
[rewritten to focus on its distinct purpose]
|
||||
END_REFINE
|
||||
|
||||
REFINE key2
|
||||
[rewritten to focus on its distinct purpose]
|
||||
END_REFINE
|
||||
```
|
||||
|
||||
For **missing links** (from connectivity report):
|
||||
```
|
||||
LINK source_key target_key
|
||||
```
|
||||
|
||||
For **anchor creation** (improve findability):
|
||||
```
|
||||
WRITE_NODE anchor_key
|
||||
Anchor node for 'term' search term
|
||||
END_WRITE
|
||||
LINK anchor_key target1
|
||||
LINK anchor_key target2
|
||||
```
|
||||
|
||||
## Guidelines
|
||||
|
||||
- **One concept, one node.** If two nodes have the same one-sentence
|
||||
description, merge them.
|
||||
- **Multiple entry points, one destination.** Use anchor nodes for
|
||||
findability, never duplicate content.
|
||||
- **Cross-link aggressively, duplicate never.**
|
||||
- **Name nodes for findability.** Short, natural search terms.
|
||||
- **Read before you decide.** Cosine similarity alone is not enough.
|
||||
- **Work through clusters systematically.** Use the tool to explore,
|
||||
don't guess at what nodes contain.
|
||||
|
||||
{{topology}}
|
||||
|
||||
## Starting nodes (highest-degree, not yet organized)
|
||||
|
||||
{{nodes}}
|
||||
Loading…
Add table
Add a link
Reference in a new issue