Persistent memory for Bryan Gilliom via the goldbrain Obsidian vault over the Local REST API. Reads and writes notes across Claude/CoWork sessions — no MCP server required.
> **Security note:** This repo contains sanitized documentation only. The bearer token and fully configured file are stored privately in the CoWork folder (Bryan Gilliom, Google Drive). Do not commit credentials here.
goldbrain-memory gives Claude durable, cross-session memory by reading from and writing to Bryan Gilliom's personal Obsidian vault via a REST API hosted at `goldbrainapi.mpm.to`. Unlike MCP-based memory tools, this plugin makes direct HTTPS calls from the bash sandbox — no companion server process, no daemon, no port forwarding. The vault holds Bryan's operator preferences, active projects, session logs, daily notes, inbox captures, decisions, and person context. The plugin reads context at session start, writes facts and decisions as they emerge, and logs outcomes at session end.
---
## Skills
| Skill | What It Does |
|---|---|
| `goldbrain-memory` | Use the goldbrain Obsidian vault as persistent memory. Triggers on: remember, save, note, log, capture, "what do you know about me", "check my notes", "load my memory/profile", "what did we discuss before", "pick up where we left off", "anything on X before my meeting?", "add to my inbox", "track this project". Also fires proactively at session start (context load) and end (session log). |
- **Search before write** — always `POST /search/simple/?query=<slug>` before creating any new note. A duplicate may exist in a different lifecycle folder.
- **Read before append** — GET the target file and check for the exact line before POST-appending. POST is not idempotent.
- **PATCH heading targets** use full `::` paths (e.g. `Operator Preferences::Fact / Pattern`). Always GET the document map first. Keep heading text ASCII (no em dashes or parentheses) to avoid PATCH errors.
- **Bump `updated:`** after meaningful content changes; skip for routine log appends.
### Project Lifecycle
Projects move through `projects/incubating/` → `projects/active/` → `projects/on-hold/` → `projects/archived/`. Folder and `status:` frontmatter must always agree.
### Scope Switching
`_agent/context/current-context.md` holds a single active scope. On scope change: PATCH-prepend the prior scope to `## Scope History`, PATCH-replace `## Scope` with new scope, bump `updated:`.
### Daily Agent Log
After substantive activity, PATCH-append a one-liner to `journal/daily/YYYY-MM-DD.md` under `## Agent Log`. The skill handles auto-creation of missing daily notes and missing headings.
### Monthly Vault Health
On the first substantive session of each calendar month: check for stale active projects (>30 days), unprocessed inbox items (>14 days), duplicate slugs across lifecycle folders, and broken heading targets.
---
## Write Routing
| Situation | Path | Method |
|---|---|---|
| Quick capture / unsorted | `inbox/captures/inbox.md` | POST |
No server to install. The vault REST API is already running at `goldbrainapi.mpm.to`. The plugin is self-contained — install via CoWork Settings → Plugins → Install from file, selecting `goldbrain-memory.plugin`.
- [ ] Confirm `BOOTSTRAP.md`, `_agent/memory/semantic/operator-preferences.md`, and `_agent/context/current-context.md` exist (404 = vault not bootstrapped; see references/bootstrap.md)
---
## Troubleshooting
| Symptom | Fix |
|---|---|
| `502 Bad Gateway` from API | Obsidian is not running on the backend host — start Obsidian and the Local REST API plugin |
| `400 invalid-target` (errorCode 40080) on PATCH | Heading target is wrong — GET the document map first; check for em dashes or parentheses in the heading and percent-encode them |
| Duplicate notes appearing | Search-before-write rule was skipped — search all lifecycle folders before creating any new slug-addressed note |
| POST append created duplicate lines | Read-before-append rule was skipped — GET file and substring-check before POST |
| Session log missing HHMM | Filename must be `YYYY-MM-DD-HHMM-<slug>.md` — older logs without HHMM are legacy; all new ones require the four-digit time component |
---
## Requirements
- CoWork (Claude Desktop with plugin support)
- Obsidian running on backend with [Local REST API plugin](https://github.com/coddingtonbear/obsidian-local-rest-api) active and reverse-proxied to `goldbrainapi.mpm.to`