docs(skills): encourage rich context over pre-summarized strings in retain (#594)

* docs: add config vars for local reranker FP16 and bucket batching (#588)

* fix: add missing reranker local fields to CLI config override and fix ty type error

- Add reranker_local_fp16, reranker_local_bucket_batching, reranker_local_batch_size
  to the manual HindsightConfig() constructor call in main.py (CLI override block)
- Replace direct module attribute assignment with setattr() in the transformers 5.x
  monkey-patch so ty can resolve it without raising unresolved-attribute

* docs(skills): encourage rich context over pre-summarized strings in retain

The previous guidance told agents to distill content before calling
retain (e.g. "Be specific: store X not Y"). This misrepresents the
actual architecture: the server runs a full extraction pipeline (fact
extraction, entity linking, embeddings) on whatever is passed in.

- Add "How Hindsight Works" section explaining the server-side pipeline
- Update retain examples to pass full-context observations
- Replace "Be specific" with "Pass rich context"
- Clarify that --context is metadata labeling, not a content filter

Closes #592

* docs(skills): add raw conversation transcript example for retain
This commit is contained in:
Nicolò Boschi 2026-03-16 18:37:12 +01:00 committed by GitHub
parent d2bfa84bca
commit bbcfe2f5ab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 85 additions and 22 deletions

View file

@ -38,19 +38,39 @@ cat ~/.hindsight/config
After setup, use the bank ID in all commands below. After setup, use the bank ID in all commands below.
## How Hindsight Works
When you call `retain`, Hindsight does **not** store the string as-is. The server runs an internal pipeline that:
1. **Extracts structured facts** from the content using an LLM
2. **Identifies entities** (people, tools, concepts) and links related facts
3. **Builds temporal and causal relationships** between facts
4. **Generates embeddings** for semantic search
This means you should pass **rich, full-context content** — the server is better at extracting what matters than a pre-summarized string. Your job is to decide **when** to store, not **what** to extract.
## Commands ## Commands
Replace `<bank-id>` with the user's actual bank ID (e.g., `team-frontend`). Replace `<bank-id>` with the user's actual bank ID (e.g., `team-frontend`).
### Store a memory ### Store a memory
Use `memory retain` to store what you learn: Use `memory retain` to store what you learn. Pass full context — raw observations, session notes, or detailed descriptions:
```bash ```bash
hindsight memory retain <bank-id> "Project uses ESLint with Airbnb config and Prettier for formatting" hindsight memory retain <bank-id> "The project uses ESLint configured with the Airbnb rule set and Prettier for formatting. Auto-fix on save is enabled in the editor config."
hindsight memory retain <bank-id> "Running tests requires NODE_ENV=test" --context procedures hindsight memory retain <bank-id> "Ran the test suite with NODE_ENV=test. Tests pass. Without NODE_ENV=test, the suite fails with a missing config error." --context procedures
hindsight memory retain <bank-id> "Build failed when using Node 18, works with Node 20" --context learnings hindsight memory retain <bank-id> "Build failed on Node 18 with error 'ERR_UNSUPPORTED_ESM_URL_SCHEME'. Switched to Node 20 and build succeeded." --context learnings
hindsight memory retain <bank-id> "Alice prefers verbose commit messages with context" --context preferences hindsight memory retain <bank-id> "Alice reviewed the PR and asked for verbose commit messages that explain the motivation, not just what changed." --context preferences
```
You can also pass a raw conversation transcript with timestamps:
```bash
hindsight memory retain <bank-id> "[2026-03-16T10:12:03] User: The auth tests keep failing on CI but pass locally. Any idea?
[2026-03-16T10:12:45] Assistant: Let me check the CI logs. Looks like the tests are running without the TEST_DATABASE_URL env var set — they fall back to the production DB URL and hit a connection timeout.
[2026-03-16T10:13:20] User: Ah right, I never added that to the CI secrets. Adding it now.
[2026-03-16T10:15:02] User: That fixed it. All green now." --context learnings
``` ```
### Recall memories ### Recall memories
@ -120,9 +140,10 @@ This is a **shared team bank**. Store knowledge that benefits the team. For indi
## Best Practices ## Best Practices
1. **Store immediately**: When you discover something, store it right away 1. **Store immediately**: When you discover something, store it right away
2. **Be specific**: Store "npm test requires --experimental-vm-modules flag" not "tests need a flag" 2. **Pass rich context**: Include full observations, not pre-summarized strings — the server extracts facts automatically
3. **Include outcomes**: Store what worked AND what did not work 3. **Include outcomes**: Store what happened AND why, including failures and workarounds
4. **Recall first**: Always check for relevant context before starting work 4. **Recall first**: Always check for relevant context before starting work
5. **Think team-first**: Store knowledge that would help other team members 5. **Think team-first**: Store knowledge that would help other team members
6. **Attribute individual preferences**: Store "Alice prefers X" not just "User prefers X" 6. **Attribute individual preferences**: Store "Alice reviewed the PR and asked for X" not just "User prefers X"
7. **Distinguish project vs personal**: Project conventions apply to everyone; personal preferences are per-person 7. **Distinguish project vs personal**: Project conventions apply to everyone; personal preferences are per-person
8. **Use `--context` for metadata**: The `--context` flag labels the type of memory (e.g., `procedures`, `learnings`, `preferences`), not a replacement for full content

View file

@ -23,16 +23,36 @@ uvx hindsight-embed configure
This will prompt for an LLM provider and API key. After setup, the commands below will work. This will prompt for an LLM provider and API key. After setup, the commands below will work.
## How Hindsight Works
When you call `retain`, Hindsight does **not** store the string as-is. The server runs an internal pipeline that:
1. **Extracts structured facts** from the content using an LLM
2. **Identifies entities** (people, tools, concepts) and links related facts
3. **Builds temporal and causal relationships** between facts
4. **Generates embeddings** for semantic search
This means you should pass **rich, full-context content** — the server is better at extracting what matters than a pre-summarized string. Your job is to decide **when** to store, not **what** to extract.
## Commands ## Commands
### Store a memory ### Store a memory
Use `memory retain` to store what you learn: Use `memory retain` to store what you learn. Pass the full context — raw observations, session notes, conversation excerpts, or detailed descriptions:
```bash ```bash
uvx hindsight-embed memory retain default "User prefers TypeScript with strict mode" uvx hindsight-embed memory retain default "User is working on a TypeScript project. They enabled strict mode and prefer explicit type annotations over inference."
uvx hindsight-embed memory retain default "Running tests requires NODE_ENV=test" --context procedures uvx hindsight-embed memory retain default "Ran the test suite with NODE_ENV=test. Tests pass. Without NODE_ENV=test, the suite fails with a missing config error." --context procedures
uvx hindsight-embed memory retain default "Build failed when using Node 18, works with Node 20" --context learnings uvx hindsight-embed memory retain default "Build failed on Node 18 with error 'ERR_UNSUPPORTED_ESM_URL_SCHEME'. Switched to Node 20 and build succeeded." --context learnings
```
You can also pass a raw conversation transcript with timestamps:
```bash
uvx hindsight-embed memory retain default "[2026-03-16T10:12:03] User: The auth tests keep failing on CI but pass locally. Any idea?
[2026-03-16T10:12:45] Assistant: Let me check the CI logs. Looks like the tests are running without the TEST_DATABASE_URL env var set — they fall back to the production DB URL and hit a connection timeout.
[2026-03-16T10:13:20] User: Ah right, I never added that to the CI secrets. Adding it now.
[2026-03-16T10:15:02] User: That fixed it. All green now." --context learnings
``` ```
### Recall memories ### Recall memories
@ -85,6 +105,7 @@ uvx hindsight-embed memory reflect default "How should I approach this task base
## Best Practices ## Best Practices
1. **Store immediately**: When you discover something, store it right away 1. **Store immediately**: When you discover something, store it right away
2. **Be specific**: Store "npm test requires --experimental-vm-modules flag" not "tests need a flag" 2. **Pass rich context**: Include full observations, not pre-summarized strings — the server extracts facts automatically
3. **Include outcomes**: Store what worked AND what did not work 3. **Include outcomes**: Store what happened AND why, including failures and workarounds
4. **Recall first**: Always check for relevant context before starting work 4. **Recall first**: Always check for relevant context before starting work
5. **Use `--context` for metadata**: The `--context` flag labels the type of memory (e.g., `procedures`, `learnings`, `preferences`), not a replacement for full content

View file

@ -41,19 +41,39 @@ cat ~/.hindsight/config
After setup, use the bank ID in all commands below. After setup, use the bank ID in all commands below.
## How Hindsight Works
When you call `retain`, Hindsight does **not** store the string as-is. The server runs an internal pipeline that:
1. **Extracts structured facts** from the content using an LLM
2. **Identifies entities** (people, tools, concepts) and links related facts
3. **Builds temporal and causal relationships** between facts
4. **Generates embeddings** for semantic search
This means you should pass **rich, full-context content** — the server is better at extracting what matters than a pre-summarized string. Your job is to decide **when** to store, not **what** to extract.
## Commands ## Commands
Replace `<bank-id>` with the user's actual bank ID (e.g., `team-frontend`). Replace `<bank-id>` with the user's actual bank ID (e.g., `team-frontend`).
### Store a memory ### Store a memory
Use `memory retain` to store what you learn: Use `memory retain` to store what you learn. Pass full context — raw observations, session notes, or detailed descriptions:
```bash ```bash
hindsight memory retain <bank-id> "Project uses ESLint with Airbnb config and Prettier for formatting" hindsight memory retain <bank-id> "The project uses ESLint configured with the Airbnb rule set and Prettier for formatting. Auto-fix on save is enabled in the editor config."
hindsight memory retain <bank-id> "Running tests requires NODE_ENV=test" --context procedures hindsight memory retain <bank-id> "Ran the test suite with NODE_ENV=test. Tests pass. Without NODE_ENV=test, the suite fails with a missing config error." --context procedures
hindsight memory retain <bank-id> "Build failed when using Node 18, works with Node 20" --context learnings hindsight memory retain <bank-id> "Build failed on Node 18 with error 'ERR_UNSUPPORTED_ESM_URL_SCHEME'. Switched to Node 20 and build succeeded." --context learnings
hindsight memory retain <bank-id> "Alice prefers verbose commit messages with context" --context preferences hindsight memory retain <bank-id> "Alice reviewed the PR and asked for verbose commit messages that explain the motivation, not just what changed." --context preferences
```
You can also pass a raw conversation transcript with timestamps:
```bash
hindsight memory retain <bank-id> "[2026-03-16T10:12:03] User: The auth tests keep failing on CI but pass locally. Any idea?
[2026-03-16T10:12:45] Assistant: Let me check the CI logs. Looks like the tests are running without the TEST_DATABASE_URL env var set — they fall back to the production DB URL and hit a connection timeout.
[2026-03-16T10:13:20] User: Ah right, I never added that to the CI secrets. Adding it now.
[2026-03-16T10:15:02] User: That fixed it. All green now." --context learnings
``` ```
### Recall memories ### Recall memories
@ -123,9 +143,10 @@ This is a **shared team bank**. Store knowledge that benefits the team. For indi
## Best Practices ## Best Practices
1. **Store immediately**: When you discover something, store it right away 1. **Store immediately**: When you discover something, store it right away
2. **Be specific**: Store "npm test requires --experimental-vm-modules flag" not "tests need a flag" 2. **Pass rich context**: Include full observations, not pre-summarized strings — the server extracts facts automatically
3. **Include outcomes**: Store what worked AND what did not work 3. **Include outcomes**: Store what happened AND why, including failures and workarounds
4. **Recall first**: Always check for relevant context before starting work 4. **Recall first**: Always check for relevant context before starting work
5. **Think team-first**: Store knowledge that would help other team members 5. **Think team-first**: Store knowledge that would help other team members
6. **Attribute individual preferences**: Store "Alice prefers X" not just "User prefers X" 6. **Attribute individual preferences**: Store "Alice reviewed the PR and asked for X" not just "User prefers X"
7. **Distinguish project vs personal**: Project conventions apply to everyone; personal preferences are per-person 7. **Distinguish project vs personal**: Project conventions apply to everyone; personal preferences are per-person
8. **Use `--context` for metadata**: The `--context` flag labels the type of memory (e.g., `procedures`, `learnings`, `preferences`), not a replacement for full content