Dual-layer memory with fact extraction, Streamable HTTP transport, 28 credential detection patterns, turn-level chunking, keyword boost, same config set, and two new MCP tools.
- Atomic fact extraction —
same reindex --extract-facts extracts searchable facts from notes via LLM. Facts are independently searchable and boost source notes in search results. The right answer surfaces even when the fact is buried in an unrelated conversation.
same facts command — view, search, and manage extracted facts.
- Fact-boosted search — hybrid search now includes fact matching as an additional signal.
$ same reindex --extract-facts
Extracting facts from 142 notes...
847 facts extracted
$ same facts search "JWT expiry"
auth-decisions.md: JWT tokens expire after 15 minutes
api-design.md: Refresh tokens use 7-day sliding window
same web --mcp enables HTTP MCP endpoint — MCP clients can connect over HTTP instead of stdio. Bearer token authentication. Ready-to-copy config snippets for Claude Code and Cursor.
- Unlocks Open WebUI and LobeChat — previously blocked by stdio-only transport. Any HTTP-capable MCP client can now connect.
$ same web --mcp --fg
MCP endpoint: http://localhost:21415/mcp
Bearer token: same_abc123...
Copy config for Claude Code or Cursor below.
- Turn-level chunking — conversational content (User/Assistant patterns) is now chunked by turn-pair instead of by heading, making individual facts in chat logs independently searchable.
- Keyword boost in hybrid search — literal text matches get a 1.5x score boost, preventing strong keyword matches from being buried by semantically similar but wrong results.
- Embedding model comparison — Qwen3-Embedding-0.6B and snowflake-arctic-embed2 both outperform nomic-embed-text on SAME's eval suite.
same config set — set config values from CLI using dot notation: same config set ollama.url http://host.docker.internal:11434.
- Global config —
~/.config/same/config.toml applies to all vaults. Set Ollama endpoint once.
same config edit --global — edit global config directly.
- Vault feedback on every command — "Using vault: name (path)" so you always know which vault is active.
- Ambiguity warning — warns when cwd has multiple vault children.
- Container support —
host.docker.internal allowed as Ollama endpoint.
- Claude Code memory import —
same import detects and imports .claude/memory/ files with provenance tracking.
- Build hash in version —
same 0.12.5+abc1234 distinguishes builds.
- Binary shadowing detection —
same doctor warns about duplicate binaries in PATH.
- Embedding errors logged — no more silent degradation to keyword search.
- Reindex lockfile — prevents concurrent reindex from overloading Ollama.
- 28 credential detection patterns — AI APIs, cloud providers, git tokens, payment keys, observability tools.
- Guard on MCP
save_note — warns on detected credentials before write.
- Provenance trust boundary —
provenance_source only trusted for imports/ directory.
- Agent ownership on
mem_forget — agents can only suppress their own notes.
- Path validation hardening — URL-encoded traversal, Unicode fullwidth, symlink escape detection.
- MCP error sanitization — no internal paths leaked in error responses.
mem_restore — undo mem_forget (unsuppress a note).
mem_list_suppressed — show hidden notes.
same index aliased to same reindex — one canonical command.
--content-type, --relationship, --direction flag aliases — clearer naming.
--sources flag on same add — CLI provenance tracking.
same display shows current mode — no-arg invocation prints state.
- Improved search fallback messaging — actionable instructions when using keyword mode.
Container support, Claude Code memory import, same config set, vault UX improvements, build hash in version output, security hardening, and reindex lockfile.
host.docker.internal as trusted Ollama endpoint — container users (Docker, OrbStack, Codespaces, devcontainers) can now point SAME at the host machine's Ollama.
- Set
[ollama] url = "http://host.docker.internal:11434" in .same/config.toml or ~/.config/same/config.toml.
$ same config set ollama.url http://host.docker.internal:11434
same import — detects Claude Code memory files in ~/.claude/memory/ and .claude/projects/*/memory/. Imports with provenance tracking and trust_state: unknown.
- Provenance pipeline —
provenance_source and provenance_hash frontmatter parsed by the indexer and recorded in note_sources. same health detects when imported source files change.
- Auto-indexes after import — imported files are immediately searchable without needing a separate
same reindex.
$ same import
Found 12 Claude Code memory files
Imported 12 notes to imports/
Provenance tracked for all sources
same config set <key> <value> — set any config value from the command line. No more hand-editing TOML files.
- Works with dotted keys:
same config set ollama.url http://host.docker.internal:11434, same config set embedding.model nomic-embed-text.
same config set --global — set values in the global config (~/.config/same/config.toml).
- Vault feedback on every command — prints "Using vault: <name> (<path>)" so you always know which vault is active.
- Ambiguity warnings — when cwd has multiple vault children, shows a clear warning with options instead of silently picking one.
- Global config —
~/.config/same/config.toml provides defaults for all vaults. Set Ollama endpoint once instead of per-vault.
same config show — displays global and vault config sources with effective merged values.
- Build hash in version output —
same version now shows same 0.12.2+abc1234 so different builds from the same version are distinguishable.
- Binary shadowing detection —
same doctor warns when multiple same binaries exist in PATH with different checksums.
- Reindex lockfile — prevents concurrent
same reindex runs from overloading Ollama. Stale locks from dead processes are automatically reclaimed.
- Embedding & graph LLM errors logged — provider failures now print the actual error to stderr instead of silently degrading.
- Provenance trust boundary —
provenance_source frontmatter is only trusted for notes in the imports/ directory. MCP save_note cannot write to imports/ and cannot plant external provenance.
- Agent ownership on
mem_forget — when called with an agent parameter, only the creating agent can suppress a note. Vault owner can still suppress anything.
- Decision attribution preserved on append —
save_decision no longer rewrites file-level agent frontmatter when appending.
- Context usage path validation — auto-injected provenance paths validated against vault boundaries before reading or hashing.
- Import file permissions — imported files use
0600 and directories use 0700.
Stale note detection, .sameignore support, search filters, progressive reindex, interactive graph visualization, and typed contradiction detection.
same stale — list all stale notes in your vault. Shortcut for same search --trust stale.
same ignore — view and manage .sameignore exclusion patterns. Gitignore-style syntax for excluding files from indexing.
.sameignore auto-created on same init with smart defaults (node_modules, .git, binaries, lock files, media).
$ same stale
3 stale notes found:
decisions/auth-approach.md — source changed 2d ago
architecture/db-schema.md — source changed 5d ago
setup/env-config.md — source changed 1w ago
--trust filter — filter search results by trust state: validated, stale, contradicted, unknown.
--type filter — filter by content type: decision, handoff, kaizen, note.
--tag filter — filter by tag metadata. Combine with other filters for precise queries.
$ same search "auth" --trust validated --type decision
same brief --no-llm — generate a structured orientation briefing without any LLM dependency. Works even without Ollama installed.
- Uses vault metadata, recent activity, and trust state to produce a useful briefing from structured data alone.
- Index-now-embed-later — notes are indexed immediately via FTS5 keyword search. Embeddings are generated in the background.
- Search works instantly after adding notes. Semantic search catches up as embeddings complete.
- Significantly faster perceived reindex time for large vaults.
- Tag-based graph connections — notes with shared tags are automatically connected in the knowledge graph, improving traversal and discovery.
- Interactive graph visualization — the
same web dashboard now includes a force-directed graph view for exploring note relationships visually.
- Typed contradiction detection — automatically detects and flags contradictions between notes based on content type.
- Decisions that supersede each other, conflicting architecture notes, and inconsistent configuration docs are surfaced in
same health.
Memory integrity, trust-aware retrieval, kaizen tracking, five new MCP tools, and significant performance improvements.
- Provenance tracking — new
note_sources table records what files and notes each memory was derived from, with SHA-256 hashes at capture time
- Trust state — every note carries a
trust_state: validated, stale, contradicted, or unknown
- Health score updated to a 5-factor model (added trust factor);
same health now shows a Trust section with validated/stale/unknown counts
- Source divergence detection — the staleness hook detects when source files change after a note was captured
- MCP
save_note accepts a sources parameter for explicit provenance
- Graph extraction records discovered file references as provenance sources
- Trust penalties in search scoring — stale notes rank 25% lower, contradicted notes 60% lower. Validated and unknown notes are unaffected.
trust_state returned on all search results (vector, keyword, hybrid, FTS5, federated) — MCP clients can caveat answers based on trust
- Context surfacing tags stale/contradicted notes visibly so agents know when retrieved knowledge may be outdated
- Graph 1-hop expansion — top vector results expand through graph edges to surface related notes (decisions, references, dependencies). Max 2 supplemental results at 60% dampened score.
same kaizen command — continuous improvement tracking: log friction, bugs, and ideas as you work
save_kaizen MCP tool for agent-driven improvement logging with provenance tracking
- Kaizen items surface in
same health recommendations
$ same kaizen "Reindex is slow on large vaults — investigate batch size"
save_kaizen — log improvement items with provenance
mem_consolidate — merge related notes into structured knowledge using LLM
mem_brief — generate an orientation briefing of what matters right now
mem_health — vault health score with actionable recommendations
mem_forget — mark notes as suppressed (hidden from search, not deleted)
- Batch embeddings — Ollama switched from
/api/embeddings to /api/embed; OpenAI batching added — 50 chunks per request instead of 1
- SQLite pragmas — 64 MB page cache, 256 MB mmap, temp_store in memory
- Covering index for incremental reindex hash comparison
- Parallel reindex —
ReindexLite parallelized with 4-worker goroutine pool
- PreCompact hook for session checkpointing — handoff notes saved before context compaction, not just on session stop
- Separate debounce timers: 2 min for checkpoint, 5 min for full handoff
same tips — vault hygiene, security, and model selection guidance
same graph enable / same graph disable to toggle graph mode without editing config
- Automatic container detection (Docker, Kubernetes, Codespaces, Gitpod)
- Graceful Ctrl+C cancellation during reindex and init — first press stops cleanly, second force-quits
- Human-readable error messages for common embedding failures
- Thinking model compatibility — strips
<think>, <reasoning>, <reflection> tags from LLM responses
- Graph extraction:
[graph] model config key and SAME_GRAPH_MODEL env var
- Graph extraction:
--abort-on-error flag; Ollama structured output with JSON schema
- Multi-stage Dockerfile with non-root user and OCI labels
- Command aliases:
same s (search), same st (status), same vault ls (vault list)
same consolidate, same brief, same health commands (experimental)
- Note suppression and reconsolidation dynamics (frequently accessed notes rank higher)
- Windows ARM64 release binary
- Windows self-update no longer fails when a stale
.old backup is locked
- Migration failure upgrading from v0.9.1 to v0.10.0 —
entry_kind index no longer created before the column exists
same graph stats reads from config.toml instead of only the environment variable
- Graph extraction works with thinking/reasoning models (DeepSeek-R1, QwQ, etc.)
same ask, demo, and tutorial commands no longer display thinking tokens
- Ollama and OpenAI response paths strip thinking tags at the transport layer
- URL redirect vulnerability fixed with page whitelist in web dashboard
- MCP SDK bumped to v1.4.0 (security fix)
- Demo rewritten with 5 realistic sample notes and a narrative arc
- Init onboarding redesigned: detects project language, AI tools, and git state; suggests seed vaults
install.sh messaging updated to honestly communicate Ollama's role in semantic search
- Output consistency polish: standardized checkmarks, hint capitalization, footer formatting
- Search results factor in access frequency (subtle log-scaled boost)
- Schema migration v8: adds
suppressed column to vault_notes
- All search paths filter suppressed notes by default