Installs into .claude/skills of the current project.
Are you the author of Ijfw Auto Memorize?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/ferroxlabs-ijfw-auto-memorize)
---
name: ijfw-auto-memorize
description: "Session-end auto-extraction of lessons, errors, fixes, and user feedback into structured memory. Fires at session end. Requires consent on first run."
---
Fires at session end. Reads deterministic signals captured during the session
and synthesizes structured memories. Nothing leaves the machine unless the user
explicitly configured an API model via `IJFW_AUTOMEM_MODEL`.
## Consent gate (first run only)
Before any synthesis, check `.ijfw/.automem-consent`:
- If missing: ask the user once: *"IJFW can automatically extract lessons (errors hit, fixes applied, preferences you stated) at session end into local memory. OK? (y/n). Reply `y`, `n`, or `ask` (ask again next time)."* Write answer as `{"consented": true|false, "at": "<iso>"}` to `.ijfw/.automem-consent`.
- If `"consented": false`: do nothing this session.
- If `"consented": true`: proceed.
## Inputs (all local files)
- `.ijfw/.session-signals.jsonl` -- ERROR/FAIL/Traceback lines captured by the PreToolUse hook (W3.6).
- `.ijfw/.session-feedback.jsonl` -- corrections/confirmations/preferences detected by the UserPromptSubmit hook (W3.7).
- `.ijfw/.prompt-check-state` -- last turn's intent + vague signals.
- `.ijfw/memory/project-journal.md` -- existing entries (dedupe against these).
- Transcript read via Claude Code's Stop-hook payload (`transcript_path`).
## Synthesis
For each signal cluster:
1. **Redact secrets first.** Call `redactSecrets()` from `mcp-server/src/redactor.js` on every field that came from transcript or tool output.
2. **Cap sizes.** Run `applyCaps` from `mcp-server/src/caps.js`. content ≤4KB, why/how ≤1KB, summary ≤120.
3. **Dedupe.** Use BM25 search (`mcp-server/src/search-bm25.js`) against `project-journal.md`. If score > 6 against an existing entry, skip (duplicate).
4. **Classify** into one of:
- `pattern` -- error→fix recurrence (same error type seen >=2x).
- `decision` -- an explicit user choice ("from now on X").
- `preference` -- a style/workflow preference ("I prefer Y").
- `observation` -- something worth noting, single instance.
5. **Emit** via `ijfw_memory_store` MCP tool with fields:
- `type`: one of the above
- `summary`: single sentence, ≤120 chars
- `content`: the fact + minimal context
- `why`: where this came from (e.g., "user said 'don't use X'", or "hit error Y at step Z")
- `how_to_apply`: when this should surface in future sessions
- `tags`: include `auto-memorize` and the classifier kind (`correction`, `confirmation`, `preference`, `rule`, `error`)
## Model routing
`IJFW_AUTOMEM_MODEL` env var controls synthesis:
- unset or `off` -- skip LLM synthesis; only deterministic signals promoted 1:1.
- `claude-haiku-4-5-*` -- Anthropic Haiku (~$0.001/session).
- `ollama:<model>` -- local Ollama, fully offline.
Default ship: unset. Deterministic signals still become memories; only the
richer "what did I learn" synthesis is gated on an LLM budget.
## Output to user
One-line summary in the terminal:
> *Stored 3 new memories: pagination-off-by-one fix, user prefers esbuild, stopped repeating rm -rf warnings.*
No summary on zero-emit sessions.
## Audit trail
Every auto-stored entry carries `tags: [..., "auto-memorize"]`. The
`/ijfw memory audit` command lists recent auto-entries for review/removal.
## Safety
- **Never** store raw transcript content -- only redacted + capped extracts.
- **Never** call out to an LLM unless `IJFW_AUTOMEM_MODEL` is set AND consent is `true`.
- **Never** store secrets -- the redactor runs first, always.
- **Never** silently overwrite user-authored memories -- auto-entries go into the knowledge file with their distinguishing tag.
Resume normal mode after.