From remember
Capture knowledge to your Second Brain when triggered by "remember this", "save this", or "brain dump"
npx claudepluginhub remember-md/rememberThis skill uses the workspace's default tool permissions.
Immediate capture: when the user says "remember this", "save this", "brain dump", etc., route content to the right place in the Second Brain.
Expert on brain CLI for personal knowledge management: capture timestamped notes to Markdown files, semantic search with OpenAI embeddings, todo handling, and hierarchical organization.
Organizes Claude Code agent's knowledge into PARA (Projects, Areas, Resources, Archive) folders. Enables semantic search across entire notes via symlinks, session transcript indexing, and memory flush protocol.
Indexes markdown files into Postgres+pgvector knowledge base with hybrid search for AI agents. Guides CLI setup using Bun, Supabase, OpenAI embeddings.
Share bugs, ideas, or general feedback.
Immediate capture: when the user says "remember this", "save this", "brain dump", etc., route content to the right place in the Second Brain.
| Operation | ✅ Use This | ❌ NOT This |
|---|---|---|
| List files | LS tool | bash ls |
| Find files | Glob tool | bash find |
| Search content | Grep tool | bash grep |
| Read files | Read tool | bash cat |
| Create files | Write tool | bash echo > |
| Update files | Edit tool (old_string → new_string) | bash sed / rewrite |
Only use bash for: running build-index.js.
node ${CLAUDE_PLUGIN_ROOT}/scripts/build-index.js --compact
Use this to prevent duplicates and enable smart linking.
Read REMEMBER.md files (cascading):
{brain}/REMEMBER.md (global preferences)./REMEMBER.md in current project (project-specific, if exists)Apply all rules from both. Project additions layer on top of global. User instructions override defaults.
Extract from conversational input: person names, project references, tasks, decisions, learnings, area updates, URLs.
Before creating or editing any L2 file, append the user's verbatim quote to {brain}/Journal/{TODAY}.md (create the file if it doesn't exist; use the daily template from reference.md). This becomes the source-of-truth for the evidence: field on every L2 file you create in this capture.
Format inside the journal file:
## {Topic / Project name}
- "{verbatim user quote}"
The journal entry's filesystem path is what every evidence.source will reference. Never invent a chat/... or session/... path that doesn't correspond to a real file.
For every chunk of content extracted in Step 2, classify it as one of:
world-fact — verifiable claim about reality (decision, technical fact, learning)belief — subjective claim with implicit confidence (preference, hypothesis, judgment)observation — synthesized profile per entity (creates/updates People/<x>.md, Projects/<x>/<x>.md, Areas/<x>.md)experience — first-person event log (always Journal/.md)Heuristics (apply in order; first match wins):
When creating or editing a file, write/preserve the frontmatter type: field accordingly. For beliefs, confidence is REQUIRED (use your best estimate 0.0–1.0).
The same rules live in scripts/schema.js (detectType); use that as canonical reference if uncertain.
Resolve every name/reference against the knowledge index:
Edit tool to updateWrite tool to createFuzzy matching: "John", "john smith", "John S." → People/john-smith.md if exists.
Before creating a new Notes/<slug>.md for a belief or world-fact, check if a similar one already exists:
node ${CLAUDE_PLUGIN_ROOT}/scripts/append-evidence.js find-similar {brain} <slug> belief
Or for world-fact: pass world-fact as the type filter.
If no similar file → proceed to Step 4 (Write new).
If a similar file is returned → run the polarity check (Step 3.6) BEFORE appending.
Read the existing file (its body + the evidence: array). Compare the new claim's stance to the existing belief's stance. There are exactly three outcomes:
Same direction (re-affirms existing belief) → append as positive evidence:
node ${CLAUDE_PLUGIN_ROOT}/scripts/append-evidence.js append <filepath> '{"source":"Journal/<TODAY>.md","quote":"<verbatim>","date":"<TODAY>"}'
This increments sources_count, appends to evidence:, updates updated:, refuses duplicate sources (idempotent).
Opposite direction (contradicts existing belief) → append as counter-evidence and log the event:
node ${CLAUDE_PLUGIN_ROOT}/scripts/append-evidence.js append-counter <filepath> '{"source":"Journal/<TODAY>.md","quote":"<verbatim>","date":"<TODAY>"}'
node ${CLAUDE_PLUGIN_ROOT}/scripts/evolution-log.js CONTRADICT "<filepath> counter from Journal/<TODAY>.md"
The first command appends to counter_evidence:, leaves sources_count untouched, and automatically flips freshness: contradicted when counter entries outnumber positive ones. The second writes a CONTRADICT line to ~/.local/state/remember/evolution.log for audit.
Unrelated (different topic, fuzzy match was wrong) → ignore the find-similar match and create a new file via Step 4.
Existing Notes/pref-postgres.md (belief, "prefer Postgres for small projects, avoid Redis").
Existing Notes/pref-async-comms.md (belief, "prefer async comms over meetings").
If polarity is genuinely ambiguous, default to positive evidence and add a brief note in the chat confirmation so the user can re-route manually. Never guess "counter" — false contradictions corrupt the brain faster than missed ones.
For existing files → use Edit tool (surgical updates, not rewrites).
For new files → use Write tool with templates from reference.md.
Check REMEMBER.md ## Templates section for overrides before using defaults.
Use [[wikilinks]] everywhere. Link forward; Obsidian handles backlinks.
See reference.md for detailed templates and routing tables.
After all writes are done, run promote.js once. It is deterministic, fast, and zero LLM cost — so it can run on every capture without any user opt-in. This keeps Persona.md ## Top Beliefs in sync with the brain in real time.
node ${CLAUDE_PLUGIN_ROOT}/scripts/promote.js
The script no-ops if nothing crossed the threshold. If something promoted or demoted, surface the delta in Step 6.
✅ Brain updated:
- Updated People/john-smith.md (+interaction)
- Created Notes/decision-nextjs.md
- Updated Tasks/tasks.md (+1 Focus)
- Updated Journal/2026-02-15.md (+1 section)
- Notes/pref-postgres.md (+counter_evidence — freshness flipped to contradicted)
- Persona.md ## Top Beliefs: +1 promoted ([[Notes/pref-async-comms.md]])
If a polarity decision was non-obvious (close call between positive and counter), say so in the confirmation so the user can correct it before the next capture.
If the auto-promote step skipped writing (e.g. auto_promote: false in user's config, or no Persona.md), don't bother mentioning it — silent no-op is the right UX.
| Content | Destination |
|---|---|
| Person interaction | People/{name}.md |
| Task with deadline | Tasks/tasks.md (Focus) |
| Task without deadline | Tasks/tasks.md (Next Up) |
| Future/roadmap task | Projects/{name}/{name}.md |
| Project update | Projects/{name}/{name}.md |
| Decision | Notes/decision-{topic}.md |
| Learning/insight | Notes/{topic}.md |
| Area update | Areas/{area}.md |
| URL/resource | Resources/{type}/{title}.md |
| Unclear | Inbox/{topic}.md |
kebab-case/kebab-case.mdfirstname.md or firstname-lastname.mdYYYY-MM-DD.mdtype:. Use Step 2.5 heuristics or scripts/schema.js detectType().evidence entry: { source: <real-file-path>, quote: <verbatim>, date: <SESSION_DATE> }.source: MUST be a real file path inside the brain — typically Journal/<SESSION_DATE>.md (the journaled capture from Step 2.4). Never invent paths like chat/..., session/..., or anything that doesn't exist on disk.type: belief, confidence: 0.0–1.0 is REQUIRED.freshness: stable is the default for new captures. The evolve skill (Phase 2) updates this later.evidence:. New contradicting claim → counter_evidence:. Polarity is decided live in Step 3.6 — don't defer to /remember:evolve.After every Write or Edit on a brain file (Notes/, People/, Projects/, Areas/, Journal/, or Persona.md), run the validator:
node ${CLAUDE_PLUGIN_ROOT}/scripts/schema.js validate <filepath>
The output is JSON: {changed, addedFields, addedSections, warnings}.
changed: true, the file was upgraded with missing schema fields/sections — note this in your final report.warnings contains items (e.g. "confidence defaulted to 0.5 — review"), surface them in your final response so the user can refine the value.changed: false and no warnings, your write was already complete — nothing else to do.Aim to emit complete frontmatter on first write so the validator is a no-op. Skip validation for files outside the brain (Inbox/, Tasks/, Archive/, Templates/) — the validator returns passthrough anyway, but you can save the call.