Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,42 @@ All notable changes to vouch are documented here. Format follows

## [Unreleased]

### Added
- **personal catch-all KB + `vouch adopt`** (global vouch, phase 3):
`vouch hub init-personal` creates and registers a personal KB at
`~/.local/share/vouch/personal` (`XDG_DATA_HOME` honoured;
`VOUCH_PERSONAL_KB` overrides). with its opt-in flag on
(`personal.fallback_capture` in the KB's own config — one question at
`install-mcp --global`, or `--personal-fallback`, or `vouch hub
fallback on`), sessions in folders WITHOUT a project KB capture into
it instead of nowhere: every captured source records the folder it
came from (`metadata.origin_path`), the session-start banner announces
the routing, and per-prompt recall in those folders reads the same KB
back. strictly double-opt-in (registry role `personal` + the KB's own
config flag) and fail-closed: no personal KB, no flag, a corrupt
registry, or a guard refusal (discovery landing on a personal KB from
below — the hijack shape) all mean capture stays off exactly as
before. `vouch adopt`, run inside a project that now has its own KB,
drains those captures home THROUGH the project's review gate: sources
copy byte-identically (content-addressed ids are stable across KBs),
each live personal claim is re-proposed against the copied source, its
byte-offset receipt re-verifies mechanically, and the project's own
review config decides durability — auto-approve on receipt where
enabled, pending for a human otherwise; adoption never bypasses
review. idempotent in both directions (a claim already durable *or*
already queued in the project is skipped, so re-running never doubles
the review queue); `--dry-run` previews against the project's real
gate; `--from-path` adopts a moved project's captures; `--retire`
archives only the personal copies that actually landed durable —
retiring a merely-pending one would strand it if the proposal is
later rejected or expires; session rollups are reported, not moved
(an unreviewed summary is not knowledge yet, so it stays where it was
filed); both KBs log a `kb.adopt` audit event carrying the other
side's id. the personal KB is ONE store shared by every KB-less
folder — recall there reads all of it, and the digest header, the
per-prompt block, the session banner, `vouch status` and the opt-in
question all say so rather than calling it "this repo's" knowledge.

## [1.5.0] — 2026-07-20

### Added
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,9 @@ vouch install-mcp claude-code # creates .vouch/ (if missing) + wires Claud

> **What you'll see.** Every prompt is checked against the KB first. When vouch knows something relevant, the answer opens with **"From vouch memory:"**, grounded in the cited items; when it doesn't, it opens with *"Nothing in vouch on this."* — recall is visible on every turn, never silent. (A fresh KB knows almost nothing yet: work a session or two so capture fills it, then ask about the project again.)

> **Prefer one install for every project?** `vouch install-mcp claude-code --global` wires vouch once, machine-wide: user-level hooks and commands in `~/.claude/` plus a user-scope MCP server in `~/.claude.json`. Every Claude session in every folder then captures + recalls into *that folder's own* `.vouch/` — data stays per project. Run `vouch init` once in each project you want vouch in; a folder without a KB never captures anywhere — its session opens with a one-line "run `vouch init` to enable durable memory here" note and the `kb_*` tools say the same. Safe next to existing per-project installs: duplicate hooks collapse and capture dedups by event id.
> **Prefer one install for every project?** `vouch install-mcp claude-code --global` wires vouch once, machine-wide: user-level hooks and commands in `~/.claude/` plus a user-scope MCP server in `~/.claude.json`. Every Claude session in every folder then captures + recalls into *that folder's own* `.vouch/` — data stays per project. Run `vouch init` once in each project you want vouch in; by default a folder without a KB never captures anywhere — its session opens with a one-line "run `vouch init` to enable durable memory here" note and the `kb_*` tools say the same. Safe next to existing per-project installs: duplicate hooks collapse and capture dedups by event id.

> **Optionally, a personal catch-all KB.** The global install asks one question (or pass `--personal-fallback`; later: `vouch hub init-personal --fallback`): opt in, and folders *without* a project KB capture into a personal KB at `~/.local/share/vouch/personal` instead of nowhere — each captured source stamped with the folder it came from, and the session banner saying exactly where the knowledge is going. It is **one store shared by every KB-less folder**: recall in any of them reads the whole personal KB, so knowledge captured while working in one such folder can surface in another (the injected block says so). Projects with their own `.vouch/` are never affected. When such a folder later becomes a real project, `vouch init` + **`vouch adopt`** moves its captures into the new project KB *through that KB's own review gate*: sources copy byte-identically, every claim is re-proposed and its byte-offset receipt re-verified, and the project's review config decides durability — adoption never bypasses review. Strictly opt-in; without it, nothing changes.

**2. Point `compile` at an LLM** — the only step that needs a model. In `.vouch/config.yaml`:

Expand Down
17 changes: 15 additions & 2 deletions adapters/claude-code/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,26 @@ vouch **once for every project**: hooks + `/vouch-*` commands under
`~/.claude.json`; `vouch serve` starts even where no KB exists, so the
server never shows as failed in non-vouch folders). Each session still
uses the nearest project `.vouch/`, so knowledge stays per project; run
`vouch init` once in any project you want vouch in. A folder with no KB
never captures anywhere — its session-start banner says "run
`vouch init` once in any project you want vouch in. By default a folder
with no KB never captures anywhere — its session-start banner says "run
`vouch init` to enable durable memory here". This coexists safely with
per-project installs: the settings template is byte-identical (Claude
Code collapses duplicate hook commands) and capture additionally dedups
on the event's `tool_use_id`.

Optionally, the global install offers a **personal catch-all KB** (one
question at install time, or `--personal-fallback`, or later
`vouch hub init-personal --fallback`): with it enabled, KB-less folders
capture into `~/.local/share/vouch/personal` instead of nowhere — the
banner announces the routing every session and each captured source
records the folder it came from. It is one store shared by all KB-less
folders: recall in any of them reads the whole personal KB (the injected
block says so), so use a project KB — `vouch init` — wherever knowledge
should stay put. When a folder later becomes a real project, `vouch init` +
`vouch adopt` drains its captures into the project KB through that KB's
own review gate (receipts re-verify; the project's review config
decides). `vouch hub fallback on|off|status` flips it any time.

## 2. Drop the MCP server into your project

Add `.mcp.json` at the root of your project (the same directory that
Expand Down
Loading
Loading