14 KiB
name, description, metadata
| name | description | metadata | ||||
|---|---|---|---|---|---|---|
| cog | Persistent knowledge graph memory via Cog MCP. Use when recording insights, querying prior knowledge, or managing memory consolidation. |
|
Cog Memory System
Persistent knowledge graph for teams. Concepts (engrams) linked via relationships (synapses). Spreading activation surfaces connected knowledge.
Core Workflow
1. UNDERSTAND task (read files, parse request)
2. QUERY Cog with specific keywords <- MANDATORY, no exceptions
3. WAIT for results
4. EXPLORE/IMPLEMENT guided by Cog knowledge
5. RECORD insights as short-term memories during work
6. CONSOLIDATE memories after work (reinforce valid, flush invalid)
Hierarchy of truth: Current code > User statements > Cog knowledge
Visual Indicators (MANDATORY)
Print before EVERY Cog tool call:
| Tool | |
|---|---|
cog_recall |
Querying Cog... |
cog_learn |
Recording to Cog... |
cog_associate |
Linking concepts... |
cog_update |
Updating engram... |
cog_trace |
Tracing connections... |
cog_connections |
Exploring connections... |
cog_unlink |
Removing link... |
cog_list_short_term |
Listing short-term memories... |
cog_reinforce |
Reinforcing memory... |
cog_flush |
Flushing invalid memory... |
cog_verify |
Verifying synapse... |
cog_stale |
Listing stale synapses... |
Tools Reference
| Tool | Purpose |
|---|---|
cog_recall |
Search with spreading activation |
cog_learn |
Create memory with chains (sequential) or associations (hub) |
cog_get |
Retrieve engram by ID |
cog_associate |
Link two existing concepts |
cog_trace |
Find paths between concepts |
cog_update |
Modify engram term/definition |
cog_unlink |
Remove synapse |
cog_connections |
List engram connections |
cog_bootstrap |
Exploration prompt for empty brains |
cog_list_short_term |
List pending consolidations |
cog_reinforce |
Convert short-term to long-term |
cog_flush |
Delete invalid short-term memory |
cog_verify |
Confirm synapse is still accurate |
cog_stale |
List synapses needing verification |
Querying Rules
Before exploring code, ALWAYS query Cog first
Even for "trivial" tasks. The 2-second query may reveal gotchas, prior solutions, or context that changes your approach.
Query Reformulation (Critical for Recall)
Before calling cog_recall, transform your query from question-style to definition-style. You are an LLM -- use that capability to bridge the vocabulary gap between how users ask questions and how knowledge is stored.
Think like a definition, not a question
| User Intent | Don't Query | Do Query |
|---|---|---|
| "How do I handle stale data?" | "handle stale data" |
"cache invalidation event-driven TTL expiration data freshness" |
| "Why does auth break after a while?" | "auth breaks" |
"token expiration refresh timing session timeout JWT lifecycle" |
| "Where should validation go?" | "where validation" |
"input validation system boundaries sanitization defense in depth" |
The reformulation process
- Identify the concept -- What is the user actually asking about?
- Generate canonical terms -- What would an engram about this be titled?
- Add related terminology -- What words would the DEFINITION use?
- Include synonyms -- What other terms describe the same thing?
Example transformation
User asks: "Why is the payment service sometimes charging twice?"
Your thinking:
- Concept: duplicate charges, idempotency
- Canonical terms: "idempotency", "duplicate prevention", "payment race condition"
- Definition words: "idempotent", "transaction", "mutex", "lock", "retry"
- Synonyms: "double charge", "duplicate transaction"
Query: "payment idempotency duplicate transaction race condition mutex retry"
Query with specific keywords
| Task Type | Understand First | Then Query With |
|---|---|---|
| Bug fix | Error message, symptoms | "canonical error name component pattern race condition" |
| Feature | User's description | "domain terms design patterns architectural concepts" |
| Test fix | Read the test file | "API names assertion patterns test utilities" |
| Architecture | System area | "component relationships boundaries dependencies" |
Bad: "authentication" (too vague)
Good: "JWT refresh token expiration session lifecycle OAuth flow" (definition-style)
Use Cog results
- Follow paths Cog reveals
- Read components Cog mentions first
- Heed gotchas Cog warns about
- If Cog is wrong, correct it immediately with
cog_update
Recording Rules
CRITICAL: Chains vs Associations
Before recording, ask: Is this sequential or hub-shaped?
| Structure | Use | Example |
|---|---|---|
| Sequential (A -> B -> C) | chain_to |
Technology enables Pattern enables Feature |
| Hub (A, B, C all connect to X) | associations |
Meeting connects to Participants, Outcomes |
Default to chains for:
- Technology dependencies (DB -> ORM -> API)
- Causal sequences (Cause -> Effect -> Consequence)
- Architectural decisions (ADR -> Technology -> Feature)
- Enabling relationships (Infrastructure -> enables -> Capability)
- Reasoning paths (Premise -> implies -> Conclusion)
Use associations for:
- Hub/star patterns (one thing connects to many unrelated things)
- Linking to existing concepts in the graph
- Multi-party contexts (meetings, decisions with stakeholders)
Chain Example (PREFERRED for dependencies)
cog_learn({
"term": "PostgreSQL",
"definition": "Relational database with ACID guarantees",
"chain_to": [
{"term": "Ecto ORM", "definition": "Elixir database wrapper with changesets", "predicate": "enables"},
{"term": "Phoenix Contexts", "definition": "Business logic boundaries in Phoenix", "predicate": "enables"}
]
})
Creates: PostgreSQL ->[enables]-> Ecto ORM ->[enables]-> Phoenix Contexts
Association Example (for hubs)
cog_learn({
"term": "Auth Review 2024-01-20",
"definition": "Decided JWT with refresh tokens. Rejected session cookies.",
"associations": [
{"target": "JWT Pattern", "predicate": "leads_to"},
{"target": "Session Cookies", "predicate": "contradicts"},
{"target": "Mobile Team", "predicate": "is_component_of"}
]
})
Creates hub: JWT Pattern <-[leads_to]<- Auth Review ->[contradicts]-> Session Cookies
When to record (during work)
At these checkpoints, ask: "What did I just learn that I didn't know 5 minutes ago?"
| Checkpoint | Record |
|---|---|
| After identifying root cause | Why it was broken |
| After reading surprising code | The non-obvious behavior |
| After a failed attempt | Why it didn't work |
| Before implementing fix | The insight (freshest now) |
| After discovering connection | The relationship |
| After a meeting or decision | The context hub linking participants and outcomes |
| After researching/exploring architecture | System limits, configuration points, component boundaries |
Record immediately. Don't wait until task end -- you'll forget details.
Before calling cog_learn
- Decide: chain or hub? (see above)
- For chains: Build the sequence of steps with
chain_to - For hubs: Identify association targets from source material or Cog query
Skip the query when:
- Source material explicitly names related concepts (ADRs, documentation, structured data)
- You already know target terms from conversation context
- The insight references specific concepts by name
Query first when:
- Recording an insight and unsure what it relates to
- Source is vague about connections
- Exploring a new domain with unknown existing concepts
After calling cog_learn
The operation is complete. Do NOT verify your work by:
- Calling
cog_recallto check the engram exists - Calling
cog_connectionsto verify associations were created - Calling
cog_traceto see if paths formed
Trust the response confirmation. Verification wastes turns and adds no value -- if the operation failed, you'll see an error.
Recording Efficiency
One operation = one tool call. Use chain_to for sequences, associations for hubs.
Never follow cog_learn with separate cog_associate calls -- put all relationships in the original call.
Writing good engrams
Terms (2-5 words):
- "Session Token Refresh Timing"
- "Why We Chose PostgreSQL"
- NOT "Architecture" (too broad)
- NOT "Project Overview" (super-hub)
Definitions (1-3 sentences):
- What it is
- Why it matters / consequences
- Related keywords for search
Never create super-hubs -- engrams so generic everything connects to them (e.g., "Overview", "Main System"). They pollute search results.
Relationship predicates
| Predicate | Meaning | Best for | Use in |
|---|---|---|---|
enables |
A makes B possible | Tech dependencies | chain_to |
requires |
A is prerequisite for B | Dependencies | chain_to |
implies |
If A then B | Logical consequences | chain_to |
leads_to |
A flows to B | Outcomes, consequences | chain_to |
precedes |
A comes before B | Sequencing, timelines | chain_to |
derived_from |
A is based on B | Origins | chain_to |
contradicts |
A and B mutually exclusive | Rejected alternatives | associations |
is_component_of |
A is part of B | Parts to whole | associations |
contains |
A includes B | Whole to parts | associations |
example_of |
A demonstrates pattern B | Instances of patterns | associations |
generalizes |
A is broader than B | Abstract concepts | associations |
supersedes |
A replaces B | Deprecations | associations |
similar_to |
A and B are closely related | Related approaches | associations |
contrasts_with |
A is alternative to B | Different approaches | associations |
related_to |
General link (use sparingly) | When nothing else fits | associations |
Chain predicates (enables, requires, implies, leads_to, precedes, derived_from) express flow -- use them in chain_to to build traversable paths.
Modeling Complex Contexts (Hub Node Pattern)
Synapses are binary (one source, one target). For multi-party relationships, use a hub engram connecting all participants.
When to use hub nodes
| Scenario | Hub Example | Connected Concepts |
|---|---|---|
| Meeting with outcomes | "Q1 Planning 2024-01" | Participants, decisions |
| Decision with stakeholders | "Decision: Adopt GraphQL" | Pros, cons, voters |
| Feature with components | "User Auth Feature" | OAuth, session, UI |
| Incident with timeline | "2024-01 Payment Outage" | Cause, systems, fix |
Consolidation (MANDATORY)
Every task must end with consolidation. Short-term memories decay in 24 hours.
After work is complete:
cog_list_short_term({"limit": 20})
For each memory:
- Valid and useful? ->
cog_reinforce(makes permanent) - Wrong or not useful? ->
cog_flush(deletes)
When to reinforce immediately
- Insights from code you just wrote (you know it's correct)
- Gotchas you just hit and fixed
- Patterns you just applied successfully
When to wait for validation
- Hypotheses about why something is broken
- Assumptions about unfamiliar code
- Solutions you haven't tested
Verification (Prevents Staleness)
Synapses decay if not verified as still semantically accurate.
When to verify
- After using
cog_traceand confirming paths are correct - When reviewing
cog_connectionsand relationships hold - After successfully using knowledge from a synapse
Staleness levels
| Level | Months Unverified | Score | Behavior |
|---|---|---|---|
| Fresh | < 3 | 0.0-0.49 | Normal |
| Warning | 3-6 | 0.5-0.79 | Appears in cog_stale |
| Critical | 6+ | 0.8-0.99 | Penalty in path scoring |
| Deprecated | 12+ | 1.0 | Excluded from spreading activation |
Periodic maintenance
Run cog_stale({"level": "all"}) periodically to review relationships that may have become outdated. For each stale synapse:
- Still accurate? ->
cog_verifyto reset staleness - No longer true? ->
cog_unlinkto remove
Validation & Correction
Cog is hints, not truth
Always verify against current code. If Cog is wrong:
| Scenario | Action |
|---|---|
| Minor inaccuracy | cog_update to fix |
| Pattern changed significantly | Unlink old, create new engram |
| Completely obsolete | Update to note "DEPRECATED: [reason]" |
Subagents
Subagents MUST query Cog before exploring. Same rules apply:
- Understand task
- Reformulate query to definition-style
- Query Cog with reformulated keywords
- Wait for results
- Then explore
Summary Reporting
Only mention Cog when relevant:
| Condition | Include |
|---|---|
| Cog helped | **Cog helped by:** [specific value] |
| Memories created | **Recorded to Cog:** [term names] |
| Cog not used | Nothing (don't mention Cog) |
| Cog queried but unhelpful | Don't mention the empty query, but still record new knowledge you discovered through exploration |
Never Store
- Passwords, API keys, tokens, secrets
- SSH/PGP keys, certificates
- Connection strings with credentials
- PII (emails, SSNs, credit cards)
.envfile contents
Server auto-rejects sensitive content.
Limitations
- No engram deletion -- use
cog_updateorcog_unlink - No multi-query -- chain manually
- One synapse per direction -- repeat calls strengthen existing link
Spreading Activation
cog_recall returns:
- Seeds -- direct matches
- Paths -- engrams connecting seeds (built from chains!)
- Synapses -- relationships along paths
This surfaces the "connective tissue" between results. Chains create these traversable paths.