惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
The Register - Security
The Register - Security
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
博客园 - 司徒正美
罗磊的独立博客
U
Unit 42
S
SegmentFault 最新的问题
Y
Y Combinator Blog
博客园_首页
Hugging Face - Blog
Hugging Face - Blog
J
Java Code Geeks
Schneier on Security
Schneier on Security
Know Your Adversary
Know Your Adversary
C
Check Point Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
V
Vulnerabilities – Threatpost
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
阮一峰的网络日志
阮一峰的网络日志
The Hacker News
The Hacker News
博客园 - 叶小钗
C
Cybersecurity and Infrastructure Security Agency CISA
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
L
Lohrmann on Cybersecurity
A
About on SuperTechFans
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
S
Securelist
A
Arctic Wolf
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threatpost
Scott Helme
Scott Helme
博客园 - 聂微东
博客园 - 【当耐特】
T
Tenable Blog
I
Intezer
D
DataBreaches.Net
B
Blog RSS Feed
Security Latest
Security Latest
C
Cisco Blogs
T
Tor Project blog
N
Netflix TechBlog - Medium

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店 GitHub - EdoardoBambini/Agent-Armor-Iaga: AI agents are getting tool access — shell, file system, databases, APIs, secrets. But **nobody is governing what they actually do with it**. Frameworks like LangChain, CrewAI, AutoGen, and Claude Code give agents the power to execute. Agent Armor gives you the power to control, audit, and approve every single action before it happens. HN Vibes — Week 15, Apr 7–13 2026 GitHub - chojs23/ec: Easy terminal-native 3-way git mergetool vim-like workflow GitHub - SethPyle376/hiraeth: Local AWS emulator focused on fast integration testing, with SQS support, SQLite-backed state, and a debug-friendly web UI. GitHub - JakOb-dotcom/cloud-sandbox-security-analysis: Technical analysis and Proof of Concept (PoC) regarding environment variable exfiltration in containerized cloud sandboxes via side-channel data leaks. Springboards - Flint Alpha Show HN: A simpler coding agent harness GitHub - audiodude/sudomake-friends GitHub - 256thFission/mini-mythos: OSS clone of Anthropic’s Mythos harness to locate C/C++ memory vulnerabilities Show HN: OpenParallax: OS-level privilege separation for AI agent execution Hacker News Sorted - Chrome 应用商店 Show HN: How to Install Docker on Ubuntu 24.04 LTS: Complete 2026 Guide GitHub - himanshudongre/smriti GitHub - sverrirsig/claude-control: macOS desktop dashboard for monitoring and managing multiple Claude Code sessions GitHub - ory/dockertest: Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal work. Chiral - Chrome 应用商店 Show HN: Two Claudes collaborating through shared memory on a $100 mini-PC GitHub - pmichaillat/latex-cv: Minimalist LaTeX template for academic CVs GitHub - oguzbilgic/posse: A web UI for Anthropic Managed Agents. GitHub - sshiraz/depsly: Dependency risk analysis tool for npm packages ABI Add safari/agent-harness — Safari browser automation via safari-mcp by achiya-automation · Pull Request #212 · HKUDS/CLI-Anything GitHub - Halfblood-Prince/trustcheck: Verify PyPI package attestations and improve Python supply-chain security GitHub - oguzbilgic/kern-ai: Agents that do the work and show it. GitHub - bruits/satteri: High-performance Markdown and MDX processing for the JavaScript ecosystem GitHub - tylergibbs1/feedstock: High-performance web crawler and scraper for TypeScript, powered by Bun and Playwright GitHub - Grimm67123/grimmbot: The self-improving sandboxed and open-source AI agent. With persistent memory and scheduling. GitHub - whitevanillaskies/whitebloom: Local whiteboard that blooms. GitHub - hwdsl2/docker-whisper: Docker image for a self-hosted Whisper speech-to-text server with speaker diarization and OpenAI-compatible transcription and translation APIs. Powered by faster-whisper. Supports all Whisper models, NVIDIA GPU (CUDA) acceleration, JSON/SRT/VTT output, SSE streaming, offline mode, and multi-arch (amd64, arm64). GitHub - yisding/reviewwiggum GitHub - MarwanAlsoltany/serrors: Structured errors for Go: sentinel hierarchies, typed data, custom formatting, and slog integration. GitHub - soatok/age-php GitHub - Luthiraa/markitme GitHub - stagas/rtdiff: realtime git diff gui and AI-assisted commits GitHub - tombedor/excalicharts GitHub - wh1le/excalidraw-edit: Open and edit .excalidraw files from the terminal. Offline, auto-saves to disk. MalExt Sentry - Malicious Extension Scanner - Chrome 应用商店 GitHub - syi0808/asciianimesvg: Generate animated ASCII art SVGs from text. CLI, Rust library, WASM, and web editor. GitHub - zaina-ml/ml_forge: A visual-based graph node editor for training computer vision models. GitHub - anakin87/llm-rl-environments-lil-course: 🌱 A little course on Reinforcement Learning Environments for evaluating and training Language Models GitHub - takaakit/superpowers-uml: Superpowers-UML modifies Superpowers to ensure a software development workflow in which AI agents design through UML modeling. AdriByte Studio - Sviluppo Web e Soluzioni Digitali GitHub - chouligi/angel-copilot: Your personalized Angel Investment Advisor Show HN: MoodSense AI (ML and FastAPI and Gradio, Deployed on Hugging Face) Moodsense Ai - a Hugging Face Space by aman179102 GitHub - agenteractai/lodmem: Level Of Detail Context Management for Agents GitHub - ostefani/subnetlens: A fast, concurrent network scanner with a TUI and plain-text CLI, built in Go. It discovers live hosts on your network, scans their open ports, resolves hostnames, and fingerprints operating systems—delivered. Cyber Pulse: Agentic Intel - Apps on Google Play Whisper API: Self-Hostable Speech to Text Transcription The Agent-Web Protocol Stack: A Research Thesis GitHub - msmarkgu/RelayFreeLLM: A restful API designed to route user prompts to various AI model providers. Show HN: Provepy – A Python decorator that proves your code using Lean and LLMs Show HN: Pardonned.com – A searchable database of US Pardons GitHub - patrickdappollonio/dux: Dux is a terminal UI that lets you run multiple AI coding agents side by side, each in its own git worktree, with full companion terminals, macros, commit generation, and a command palette that knows more tricks than you do. kMC Crystal Simulator Show HN: HyperFlow – A self-improving agent framework built on LangGraph GitHub - stef41/vibescore: 🎵 Grade your vibe-coded project. One command, instant letter grade across security, quality, dependencies, and testing. GitHub - stef41/lmscan: 🔍 Detect AI-generated text and fingerprint which LLM wrote it. Open-source GPTZero alternative. Zero dependencies, works offline. imgur.com GitHub - visionscaper/collabmem: Enabling long-term collaboration with Agentic AI - building up episodic and world model memory over time with in-context awareness 在 Steam 上购买 FriedrichAI: Offline AI 立省 10% GitHub - atripati/ark: AI Runtime Kernel — a context operating system for AI agents. Eliminates tool bloat, loads only what’s needed, and gives LLMs their reasoning space back. GitHub - nowork-studio/toprank: Open-source Claude Code skills for SEO, SEM, Google Ads GitHub - tacomanator/sash: Lightweight macOS menu bar app for reliably cycling through windows of the current application. Appents | Social Media Management for Product-First Teams GitHub - pnhoang/youtube-spam-blocker: Automatically detects and hides spam messages in YouTube Live chat. Set rate limits, keyword filters, and block repeat offenders. GitHub - decisionnode/DecisionNode: CLI + Local MCP - A shared structured memory store across Claude Code, Cursor, Windsurf, Antigravity, and every MCP client. Semantically queryable. GitHub - AvaCodeSolutions/django-email-learning: An open source Django app for creating email-based learning platforms with IMAP integration and React frontend components. The $100K Gap in Kubernetes Security Tooling Function Calling Harness: From 6.75% to 100%
pmb/README.md at main · oleksiijko/pmb
oleksiibond · 2026-06-22 · via Hacker News: Show HN

PMB logo

Local-first memory for your AI coding agent.

One file on your disk. Twenty-nine MCP tools. No cloud.

PyPI Downloads Python CI License MCP

PMB - your project's memory as a live graph

Local-first memory, visualized. 3,800+ entities and 41,000+ connections, captured automatically as you work.

Quickstart · Dashboard · Why pmb-ai? · Demo · How it works · FAQ

Persistent memory for AI coding agents - local, offline, no API keys. For developers on Claude Code / Cursor / Codex who are tired of re-explaining context every session. PMB remembers your decisions, lessons, and project facts in one SQLite file on your disk and feeds them back through MCP.

Star the repo if PMB saves you a re-explanation.


PMB gives Claude Code, Cursor, Codex and the other MCP-aware agents a real memory. Decisions you made last week. Lessons you taught them. Personal facts about you. Project structure. PDFs. They survive every restart, every model upgrade, every agent switch - because they live in one SQLite file on your disk.

No API keys. No subscription. No LLM call on the read path. Just files.

Quickstart

pip install pmb-ai                 # 1. install
pmb setup                          # 2. detect your agent + wire the MCP entry
pmb warmup                         # 3. preload the model (first recall is instant)
# 4. restart your agent, then just talk to it - memory is automatic
pmb stats                          # 5. see what's stored
pmb recall "auth decision"         # 6. search memory from the terminal
pmb doctor                         # 7. confirm everything is wired

That's it - your agent now remembers. No account, no keys, nothing leaves your machine.

Command name: the CLI is pmb. Installed via pip you also get the alias pmb-ai; installed via npm (npx pmb-ai) the command is pmb-ai. Same tool - use whichever your install gave you. From npm, npx pmb-ai setup runs the full cycle: it installs the Python package, then runs setup.

Docs: oleksiijko.github.io/pmb · Getting started · Deleting memories · all documentation.


See your memory

pmb dashboard opens a local, liquid-glass UI over everything PMB captured - written automatically, just by working. It binds to 127.0.0.1 only, so nothing leaves your machine.

PMB dashboard - Map (entity graph)

Map - every entity and connection in your project, as a live graph.

PMB dashboard - Timeline (journal)

Timeline - your memory as a journal, newest first.

Watch: 2-minute setup

0621.1.mp4

Prefer text? The Quickstart above is the same flow in seven commands.


Why pmb-ai?

  • Local-first, zero-config. One SQLite file on your disk. No account, no API keys, no telemetry, no cloud to trust.
  • It actually gets used. On Claude Code / Codex, hooks inject the right memory before the model thinks - you never have to remember to call a tool.
  • Multilingual, no setup. The embedder covers 50+ languages; a Russian query finds an English fact. No per-language config.
  • MCP-native. One pmb connect wires Claude Code, Cursor, Codex, Windsurf, Zed, VS Code, and more.
  • Fast read path. Recall in ~35 ms warm; writes return in under a millisecond - no LLM call to remember.
  • Your data, in the open. pmb export dumps everything to Markdown/JSON. Apache 2.0.

What it feels like

You:    fix that LoadGuard pricing bug we hit last Tuesday

Agent:  prepare(message="fix LoadGuard pricing bug")
        ↓ (6 ms)
        → project_context: 12 events about LoadGuard,
          4 lessons (incl. "never lower NEGOTIATE/SKIP under 25%"),
          3 decisions, 2 open goals
        → active_arcs: "LoadGuard verdict-policy refactor (started Tue)"
        → lessons: 1 directly matches "pricing"
        → recent_activity: 8 commits this week

        Looking at src/engine/verdict-policy.ts (you opened it Tuesday
        14:32, last changed Wednesday). The pricing bug you mentioned
        is on line 142 where the bundle fallback was tightening below
        the rate-floor. Per the lesson you saved, we should never
        drop the threshold under 25% - let me restore the guard there.

The agent didn't ask. It didn't guess. It read its memory in 6 ms and showed up to the task already informed.


What you can put in there

# Personal facts that change                  (with time-travel: old
#                                                values archived, never lost)
record_keyed_fact("user", "city", "Warsaw")

# Project structure - symbols, imports, .gitignore-aware
pmb index project .

# PDFs (research papers, manuals, contracts)
pmb index pdf paper.pdf
pmb index pdf ~/docs --recurse

# Whatever your agent decides to log as it works
# (decisions, lessons, completed tasks, goals)

PMB is content-agnostic. If it's text the agent will care about later, PMB will remember and retrieve it.


What the agent gets back

A single MCP call - prepare(message) - returns the right things at the right level of detail, in 4-16 ms:

Field What it is
project_context Full project overview if the message mentions a project: key facts, lessons (RULES to follow), decisions, open goals, related entities, the project's narrative arc
lessons Procedural rules matching the query, each with a surface_id so the agent can confirm it followed the rule later
recent_activity Last 24 h of decisions / edits / completions for session continuity
open_goals In-progress goals so the agent knows what you're pursuing
active_arcs Narrative arcs the project is currently living in

For everything else there's recall(query) (hybrid search, 35 ms warm) and 27 other tools listed in docs/reference/COMMANDS.md.


How it works

flowchart LR
    A[Your agent] -->|MCP stdio| B[PMB MCP server]
    B --> C[Engine]
    C -->|read 35 ms| R[Hybrid recall<br/>BM25 + vector + graph + rerank]
    C -->|write under 1 ms| W[Async embed queue<br/>SQLite first, vectors later]
    R --> D[(SQLite)]
    R --> E[(LanceDB)]
    W --> D
    W --> E
    style A fill:#dbeafe,color:#1e3a8a
    style B fill:#ede9fe,color:#5b21b6
    style C fill:#dcfce7,color:#14532d
Loading

Storage - every event lives in SQLite. Vectors live in LanceDB next to it. Both are files on your disk; copy them anywhere with cp.

Recall - BM25 (lexical) + dense vector (semantic) + entity graph

  • optional cross-encoder rerank, fused via Reciprocal-Rank-Fusion.

Writes - async. The MCP tool returns in under a millisecond. The actual embed + LanceDB insert happens on a background thread.

Dedup - four layers. Exact text match → cosine ≥ 0.92 auto-merge → cosine 0.80-0.92 borderline (LLM verify later) → manual review in the dashboard. Old values get archived, never deleted; full history is queryable via keyed_fact_as_of(t).

Multilingual - no language packs. The default embedder (paraphrase-multilingual-MiniLM-L12-v2) covers 50+ languages, so a Russian query like где я живу finds an English keyed-fact stored as user.city = Warsaw with no translation. Intent detection and keyed extraction ride English semantic anchors that transfer cross-lingually through the embedder - one mechanism for every language the model knows, instead of a hand-written pack per language. The cold lexical path then self-compiles from your own traffic (anchor→lexicon distillation), so a language you actually use gets faster over time with zero configuration. Recall stays strong across ~11 languages (overall top-3 ≈ 0.9 on a 101-query eval; top-1 = 1.00 for en/fr/pt/ru, CJK weaker on exact top-1). See docs/contributing/adding-a-language.md.


Install

Or from source:

git clone https://github.com/oleksiijko/pmb.git && cd pmb
python -m venv .venv && source .venv/bin/activate
pip install -e .

Prime the model once so the first recall is fast (the multilingual embedding model is ~450 MB; without this the very first query pays a one-time cold-start load):

Running the tests? Use the venv's Python, not your system Python - .venv/bin/python -m pytest (or .venv\Scripts\python.exe -m pytest on Windows). Running bare pytest outside the venv just reports missing numpy/fastmcp/typer - that's a missing venv, not a broken project.

Wire one or more agents:

pmb connect claude-code   # Claude Code
pmb connect codex         # OpenAI Codex CLI
pmb connect cursor        # Cursor
pmb connect windsurf gemini vscode zed opencode continue   # also supported

Point several agents at the same memory:

pmb connect claude-code --workspace personal
pmb connect cursor --workspace personal
# both now read/write the same workspace

Everything above is stdio - the server runs as a child process of your agent. No network, no port, no token. That's the whole story for one person on one machine.

Sharing one memory across machines or a team? That's an optional HTTP mode with bearer-token auth - see docs/guide/TEAM.md. You don't need it for local use.

Inspect:

pmb dashboard     # http://127.0.0.1:8765
pmb tui           # terminal UI
pmb stats         # quick numbers
pmb doctor        # health check

CLI cheat sheet

# Memory
pmb stats                                  show counts and storage info
pmb recall "query"                          search with full debug
pmb tui                                     interactive terminal UI
pmb dashboard                               web UI on port 8765

# Ingest
pmb index pdf paper.pdf                     extract + chunk + embed
pmb index pdf ~/docs --recurse              entire directory
pmb index project .                         scan codebase
pmb import chatgpt ~/Downloads/export.json  bring existing history

# Maintenance
pmb regraph                                 rebuild entity graph
pmb consolidate                             run sleep pass (optional)
pmb compact                                 archive old events
pmb dedupe                                  resolve borderline duplicates

# Hooks (force-feed PMB at the protocol level - no model cooperation)
pmb hooks install claude-code               wire all 4 lifecycle hooks
pmb hooks list                              show what's installed
pmb hooks capabilities                      ambient mechanism each agent supports
pmb hooks uninstall claude-code             remove them
pmb auto-context "fix bug in PMB"           preview per-turn injection
pmb session-restore -m 180                  preview post-compaction restore
pmb lesson-followcheck --dry-run            preview follow-through scoring

# Ambient memory (the write side - memory journals the agent's work)
pmb autowrite --dry-run                     preview ambient auto-write for this turn
pmb ambient-watch .                         ambient auto-write for MCP-only hosts (git observer)
pmb forget-auto                             drop memory the ambient layer wrote itself

# Config
pmb config list                             default tier (25 keys you care about)
pmb config list --pro                       every key, including 80 advanced knobs
pmb config set recall.ppr_enabled true      toggle a feature
pmb connect --rules-only                    refresh CLAUDE.md only

Step-by-step per agent: docs/guide/usage.md. Full command reference: docs/reference/COMMANDS.md.

Settings - 25 you care about, 80 you don't

PMB has 105 tunables. The 25 that affect day-to-day quality are default-tier - visible in pmb config list. The rest are internal weights, ablation knobs, and experimental flags, hidden behind --pro so the surface stays scannable.

Default-tier highlights:

Key Default What it does
recall.top_k 5 How many results recall returns
recall.bm25_weight 0.7 BM25 vs vector mix (1.0 = pure BM25)
recall.ppr_enabled true Multi-hop graph diffusion, gated by intent
recall.keyed_fact_boost 0.35 How hard personal-attr facts win on personal queries
recall.rerank false Always-on cross-encoder (regresses LoCoMo, keep off)
embedding.model paraphrase-multilingual-MiniLM-L12-v2 The vector model
graph.extractor regex regex / spacy / llm:claude / llm:ollama / llm:codex
mcp.record_batch_async true Fire-and-forget writes (sub-ms return)
agent.active_mode false Proactive logging in pmb connect --active
agent.apply_lessons true Agent surfaces lessons before acting
agent.log_decisions true Auto-log "we chose X over Y"
agent.log_lessons true Auto-log "we always/never do X"
dedup.enable true All four dedup layers
decay.factor_per_day 0.985 Importance half-life
consolidate.auto_trigger false Run the sleep-pass automatically
chat.model haiku Default model for pmb-chat

Pro tier (pmb config list --pro) is where you go to tweak the recall scoring weights (recall.causation_boost, recall.arc_boost, recall.ppr_alpha), reranker internals (recall.rerank_top_n, recall.rerank_close_epsilon), vocab mining (recall.auto_vocab_*), dedup thresholds (dedup.cosine_high), consolidate sleep heuristics, or experimental flags (recall.pamvr_enabled, recall.adaptive_decompose, recall.typo_correction).

Every pro-tier key still reads with pmb config get <key> and writes with pmb config set <key> - they're hidden from list, not gated.


Dashboard

pmb dashboard opens a local web UI on port 8765. Nothing leaves your machine.

Nine tabs: Map (entity graph, live), Timeline (git-graph by project), Overview, Entities, Arcs (narrative threads), Lessons (per-rule follow-rate, dead-lesson detection), Duplicates (inline merge), Performance (per-tool latency), Recall (debug ranker).


Hooks - memory that doesn't wait to be asked

The hard part of agent memory isn't storing - it's getting the agent to use what's stored. Soft instructions in a rules file get skipped. So PMB wires four hooks at the protocol level (pmb hooks install claude-code), and each removes a dependency on the model remembering to act:

  • UserPromptSubmit → auto-recall. Every message is classified (regex, multilingual, sub-ms) and the matching memory is fetched for the agent - lessons, past decisions, recall hits, project overview - and injected before the model thinks. The agent never has to decide to call recall. Trivial messages inject nothing.
  • PostToolUse → ambient observe. Every tool the agent runs is appended to a lightweight action journal (pmb track-action - a single SQLite INSERT, no model, no vectors). Reads and ls are filtered out; edits, tests and commits are kept. This is the raw material the Stop hook turns into a memory if the agent never journals its own work.
  • SessionStart → session-restore. When the context window compacts, the agent normally forgets what it just did. This hook rebuilds "where you left off" from what the session recorded - decisions, completed work, lessons, open goals - so it picks the thread back up instead of re-asking you.
  • Stop → follow-through + ambient auto-write. At turn end PMB does two things. (a) Follow-through: it checks which surfaced lessons actually showed up in what the agent did (token overlap, gated on distinctive tokens) and marks them followed - deterministically, without the model self-reporting. (b) Ambient auto-write: if the agent did NOT call a record_* tool this turn, it synthesizes one activity entry from the observed actions, so real work is captured even when the agent stays silent. See Ambient memory below.

Preview any of them without an agent: pmb auto-context "...", pmb session-restore -m 180, pmb lesson-followcheck --dry-run, pmb autowrite --dry-run.


Ambient memory - the write side

Auto-recall fixed the read side: the agent no longer has to remember to call recall. Ambient memory does the same for the write side - the memory journals the agent's work even when it forgets record_batch:

  • Coordinated - never a duplicate. If the agent already called a record_* tool this turn, ambient stays silent; the agent's own summary is richer. It only fills the gap.
  • Outcome-scored, not churn. A turn is journaled only if it clears a quality bar driven by results - tests passed, a failure got fixed, a deploy/migrate ran, the breadth of edits - not by how many files were touched alone. Two mechanical edits and nothing else are dropped.
  • Honest + reversible. Every ambient entry is tagged source=autowrite, shown as auto in the dashboard, and removable in one command (pmb forget-auto). ON by default - capturing work the agent forgot is PMB's signature; turn it off with pmb config set autowrite.enabled false.
  • Works on every host. Claude Code via the PostToolUse + Stop hooks; OpenAI Codex by parsing its session rollout on agent-turn-complete (pmb codex-notify); MCP-only hosts (Cursor, Zed, VS Code) via a git observer that watches the working tree (pmb ambient-watch .). See what your agent supports with pmb hooks capabilities.

Synthesis is template-based by default (instant, deterministic, no model). Opt into a nicer one-line summary from a local/CLI model with pmb config set autowrite.synthesizer llm:ollama (or llm:claude / llm:codex) - it has a timeout and falls back to the template, so it never blocks the turn.


Self-improvement loop

Every lesson the agent surfaces carries a surface_id. Follow-through is recorded two ways: the agent can confirm explicitly via mark_lesson_followed(surface_id, True), and the Stop hook infers it automatically from recorded activity. The Lessons tab then shows, per rule:

  • How often it was shown to the agent
  • How often it was followed (confirmed or auto-detected)
  • 💀 DEAD only when a rule is repeatedly ignored (✗ ≥ 2) - surfaced- but-unconfirmed is shown as ? UNVERIFIED, never punished as dead
  • ★ USEFUL for rules followed ≥ 2×

You see which rules actually help and prune the ones that don't.


Numbers

Recall p50 / p95 warm 35 ms / 110 ms
prepare(message) warm 4-16 ms
record_batch_async < 1 ms
MCP cold boot 3.7 s
LoCoMo recall@10 (n=10) 94.5 % (reproducible - see below)
Multilingual mega-stress top-10 (900 q) 99.2 %

Reproduce locally:

python scripts/benchmarks/benchmark_locomo.py --n-conversations 10
python scripts/benchmarks/mega_stress_test.py

Privacy

  • 100 % offline by default. No network calls from the engine.
  • Zero telemetry. There is no call-home to add later, because there is no PMB server to call.
  • Workspace = directory under ~/.pmb/<name>/. Copy it to Dropbox, push it to git, share it on a USB drive. Your call.
  • Secrets are auto-redacted at write time (OpenAI / Anthropic / AWS / Stripe / GitHub keys; configurable).
  • Apache 2.0 licensed. Forks welcome.

FAQ

Does PMB call an LLM? On read: never. On write: never by default. Optional: pmb consolidate can run a local Ollama or Claude CLI pass over recent events to write short reflections - opt-in, never required.

What about cost? $0. There is no PMB service.

Does the agent need to know about PMB? After pmb connect, the right rules are appended to CLAUDE.md / AGENTS.md automatically. The agent learns the 29 default MCP tools (of 64 total - the rest are admin/sleep-mode ops, gated behind the full tool profile) and the prepare() pattern from those rules.

Will it slow my agent down? The MCP tools return in single-digit milliseconds for everything except recall (35-110 ms warm), which is below human perception.

Can two agents share one memory? Yes. Point them at the same workspace with pmb connect <agent> --workspace personal. SQLite's WAL mode + a 10 s busy-timeout (set automatically) handle the concurrent writes.

What if I want to wipe a fact? pmb forget <ulid> archives it. Archives are excluded from recall but survive on disk - you can always restore. Hard-delete is pmb forget <ulid> --hard.

Will this work on Windows? Yes. PMB is tested on Windows 11, macOS 14, and Ubuntu 22.04. Cyrillic paths and console encoding are handled.

What if I leave a project? pmb workspace archive <name> puts that memory on ice. pmb workspace restore <name> brings it back six months later.

Does it work with PDFs / code / Markdown? PDFs: pmb index pdf paper.pdf. Code: pmb index project .. Markdown: pmb import markdown ~/notes/. ChatGPT / Claude exports: pmb import chatgpt path.json.

Cold start is slow. First recall after a fresh boot loads the embedding model (~3 s). Run pmb warmup once or just let the prewarm thread on MCP server boot do its job in the background.

Roadmap? See docs/ROADMAP.md. Highlights: hosted backup via litestream, optional cloud-sync (BYO bucket), tree-sitter for Rust/TS project indexing, image OCR.


Contributing

Issues and PRs welcome. There's one full-time maintainer; please open a discussion before a large change so we can align on direction.

git clone https://github.com/oleksiijko/pmb.git && cd pmb
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest                  # full suite, ~4 minutes
pytest -k recall        # fast subset, ~12 s

License: Apache 2.0.