[
  {
    "id": "memory",
    "title": "Memory Summary",
    "path": "notes/memory.html",
    "category": "root",
    "tags": [
      "summary"
    ],
    "text": "Memory Summary This vault is the durable memory for a small team of AI agents that ship a SaaS product. Humans and agents both read and write here. It's compiled into the public demo at <https://nikopastore.github.io/agent-memory-site/ so you can see exactly what a real \"agent operating system\" looks like as a published bundle. What lives here projects/ — active work with goals, status, next actions decisions/ — durable decisions and the reasoning behind them procedures/ — repeatable workflows incident response, deploys, weekly review facts/ — things an agent should never re-derive versioned constants, defaults people/ — collaborators and context about them one is intentionally private handoffs/ — session-to-session continuity notes Three things every agent should know first 1. We use the Customer Support Agent v2 for tier-1 inbound and escalate to humans through the Incident Response Handoff procedure. 2. The current data pipeline rewrite is tracked in Data Pipeline Refactor — chunks.",
    "updated": "2026-05-24T04:31:34.093Z"
  },
  {
    "id": "decisions-separate-private-and-public-memory",
    "title": "Separate Private and Public Memory",
    "path": "notes/decisions-separate-private-and-public-memory.html",
    "category": "decisions",
    "tags": [
      "decision",
      "privacy",
      "security"
    ],
    "text": "Separate Private and Public Memory Decision Every note in this vault declares visibility and sensitivity in frontmatter. We do not rely on directory layout, file naming, or copy-paste discipline. --mode public ships only visibility: public notes with sensitivity: none . --mode redacted ships more, but scrubs emails / API-key shapes / JWTs / phone numbers via Redaction patterns. --mode private is the internal default. Why this and not directories Notes move. Frontmatter survives moves; directories don't. Wiki-links cross categories naturally. A decisions/ note linking to a people/ note shouldn't break because someone reorganized. The compiler resolves wiki-links AFTER privacy filtering, so a public note linking to a private note collapses to redacted-link — the target's title never leaks. Enforcement agent-memory publish-check runs in CI before any public deploy and refuses if a public note links to a private one. agent-memory validate --strict runs in pre-commit. Related Use chunks.jso",
    "updated": "2026-05-24T04:31:34.093Z"
  },
  {
    "id": "decisions-use-chunks-as-rag-substrate",
    "title": "Use chunks.jsonl as the canonical RAG substrate",
    "path": "notes/decisions-use-chunks-as-rag-substrate.html",
    "category": "decisions",
    "tags": [
      "decision",
      "rag",
      "architecture"
    ],
    "text": "Use chunks.jsonl as the canonical RAG substrate Decision Every retrieval-augmented surface in the company support agent, internal helpdesk, the docs chatbot reads from the same chunks.jsonl produced by agent-memory build . We do not run separate per-app embedding pipelines. Why One source of truth. A change to a procedure note propagates to every agent in one rebuild. Reproducible. content hash and stable chunk id let us cache embeddings safely and diff \"what did the agent see today vs last week\". Auditable. Provenance metadata source path , canonical url , visibility survives end-to-end, so we can answer \"where did the agent get that answer from?\" in one query. Privacy-aware. Build modes private/public/redacted compose with our Separate Private and Public Memory decision — we can hand the same pipeline a public-mode call for the customer-facing chatbot and a private-mode call for the internal helpdesk. Consequences We hard-depend on agent-memory-site . We mitigate by pinning the versi",
    "updated": "2026-05-24T04:31:34.093Z"
  },
  {
    "id": "facts-redaction-patterns",
    "title": "Redaction patterns",
    "path": "notes/facts-redaction-patterns.html",
    "category": "facts",
    "tags": [
      "fact",
      "privacy",
      "redaction"
    ],
    "text": "Redaction patterns What --mode redacted catches today: | Class | Pattern | Replacement | |---|---|---| | Email | RFC-ish + unicode | redacted-email | | OpenAI keys | sk-… | redacted-secret | | GitHub tokens | gh pousr … , github pat … | redacted-secret | | AWS access keys | AKIA… | redacted-secret | | Slack tokens | xox baprs -… | redacted-secret | | JWTs | header.payload.sig | redacted-secret | | Generic key/value | api key = … , bearer … | redacted-secret | | Private keys | -----BEGIN … PRIVATE KEY----- | redacted-secret | With --strict-redact | Phone | US-shaped 10+ digit | redacted-phone | | Credit-card-ish | 13–19 digits | redacted-cc | | IPv4 | \\d.\\d.\\d.\\d | redacted-ip | Per-note deny-list Add literal strings to a note's frontmatter: Anything matching is replaced with redacted-denylist in every output artifact for that note. What we DON'T catch automatically Free-text names, addresses, DOBs Customer codenames use deny-list Proprietary numeric IDs use deny-list Trust the gate, ve",
    "updated": "2026-05-24T04:31:34.093Z"
  },
  {
    "id": "facts-vault-frontmatter-standard",
    "title": "Vault frontmatter standard",
    "path": "notes/facts-vault-frontmatter-standard.html",
    "category": "facts",
    "tags": [
      "fact",
      "schema",
      "standard"
    ],
    "text": "Vault frontmatter standard The minimum a note must have: Optional, used by tooling | Field | Used for | |---|---| | related: slugs | Soft links surfaced in the dashboard | | redact: 'literal', ... | Per-note deny-list | | keywords: ... | Stronger search match weight | | supersedes: slugs | This note replaces N others; agent should prefer THIS one | | superseded by: slug | Don't use this note; use the one in superseded by | | created at: ISO8601 | Override file birthtime | Why this matters The build emits all of these as chunk-level metadata. A downstream retrieval pipeline can filter by visibility, prefer non-superseded chunks, and de-prioritize archived content automatically. Related Use chunks.jsonl as the canonical RAG substrate Separate Private and Public Memory",
    "updated": "2026-05-24T04:31:34.093Z"
  },
  {
    "id": "handoffs-frontend-agent-handoff-2026-05",
    "title": "Frontend Agent Handoff — 2026-05",
    "path": "notes/handoffs-frontend-agent-handoff-2026-05.html",
    "category": "handoffs",
    "tags": [
      "handoff",
      "frontend"
    ],
    "text": "Frontend Agent Handoff — 2026-05 Pattern handoff not a customer ticket handoff . Shows what cross-session continuity looks like in this vault. Where we left off Frontend agent finished migrating the customer-support-v2 chat widget from /legacy-chat → /chat-v2 . New widget uses MCP to call search memory on each turn rather than embedding chunks in the prompt. Verified working x MCP server wired: claude mcp add agent-memory \"npx -y agent-memory-site mcp --site ./site\" x search memory returns ≤ 8 chunks under 200ms x Eval suite green on the 200-ticket cohort x CSP on the embed page allows only mcp:// for the agent connection Open Tail-latency p99 is 480ms — investigate cold-start of the MCP server when the chat widget hasn't been visited in 10+ min Tone-of-voice eval — see [redacted-link] when it lands Next session — start here 1. Read Customer Support Agent v2 for goal + status. 2. Run agent-memory stats --source memory and skim broken links. 3. Open the cold-start investigation under pr",
    "updated": "2026-05-24T04:31:34.093Z"
  },
  {
    "id": "people-alex-founder",
    "title": "Alex (founder)",
    "path": "notes/people-alex-founder.html",
    "category": "people",
    "tags": [
      "person",
      "leadership"
    ],
    "text": "Alex founder CEO and primary product owner. Agents should treat Alex's voice in transcripts as the authoritative tone-of-voice reference see [redacted-link] . Working style Prefers bullet-point summaries over prose. Wants citations doc id on every retrieved fact. Will challenge confident-but-wrong answers. Calibrate uncertainty explicitly. Hot topics 2026-Q2 Customer Support Agent v2 auto-resolve rate target 70% Data Pipeline Refactor backfill timeline Note This note is intentionally visibility: public to demo cross-linking from public-mode builds. A real founder note would be visibility: team with sensitivity: personal .",
    "updated": "2026-05-24T04:31:34.093Z"
  },
  {
    "id": "procedures-incident-response-handoff",
    "title": "Incident Response Handoff",
    "path": "notes/procedures-incident-response-handoff.html",
    "category": "procedures",
    "tags": [
      "procedure",
      "incident",
      "oncall",
      "handoff"
    ],
    "text": "Incident Response Handoff When the Customer Support Agent v2 decides a ticket is beyond tier-1, it writes a handoff note into handoffs/ and pages the on-call human. What the agent writes Body fields, in order: 1. One-sentence summary — what the customer wants. 2. What the agent tried — search queries, retrieved chunk ids, why each failed. 3. What the agent thinks is needed — best-guess root cause + which procedure if any applies. 4. Customer transcript — raw, redacted on emit we ship --mode redacted for any artifact that leaves this vault . 5. Suggested next step — concrete, human-actionable. What the on-call human does 1. Read the summary. 2. Skim sections 2–3 to decide if the agent's diagnosis is right. 3. Take over the ticket. Update the handoff with the actual resolution. 4. If a new pattern is emerging, file a new note under procedures/ or amend an existing one — the agent learns next rebuild. Related Frontend Agent Handoff — 2026-05 Weekly Agent Memory Review",
    "updated": "2026-05-24T04:31:34.094Z"
  },
  {
    "id": "procedures-weekly-agent-memory-review",
    "title": "Weekly Agent Memory Review",
    "path": "notes/procedures-weekly-agent-memory-review.html",
    "category": "procedures",
    "tags": [
      "procedure",
      "ops",
      "review"
    ],
    "text": "Weekly Agent Memory Review Friday, 60 minutes. Two humans, one agent. The point is to keep this vault from rotting. Inputs agent-memory stats --source ./memory — vault size, broken-link count, tag coverage. agent-memory validate --source ./memory --strict --json — any errors, warnings, missing visibility. This week's handoffs/ .md — patterns we should promote to procedures. Last week's review note. Agenda 1. Validate 5 min . Run validate --strict . Resolve every error before standup. 2. Backlog 15 min . Walk handoffs from the week. Promote any pattern that hit ≥2 times into a procedure or fact. 3. Stale notes 10 min . Find notes updated 90 days ago with status: active . Update or archive status: archived . 4. Broken links 10 min . Fix wiki-links → 404 targets. 5. Privacy audit 10 min . Run agent-memory publish-check --mode public . Inspect anything new. 6. Notes for next week 10 min . Capture themes, deferred items. Output A single note in daily/ titled {{ date }} — Weekly Review , wit",
    "updated": "2026-05-24T04:31:34.094Z"
  },
  {
    "id": "projects-customer-support-agent",
    "title": "Customer Support Agent v2",
    "path": "notes/projects-customer-support-agent.html",
    "category": "projects",
    "tags": [
      "project",
      "agent",
      "support",
      "rag"
    ],
    "text": "Customer Support Agent v2 Goal Replace v1 rule-based zendesk macros with a retrieval-grounded LLM that handles tier-1 inbound and escalates cleanly via the Incident Response Handoff procedure. Status x Index public knowledge base via this vault → chunks.jsonl see Use chunks.jsonl as the canonical RAG substrate x Wire up Claude with agent-memory mcp --site ./site for live read access x Eval suite: 200 historical tickets, target 70% auto-resolve Add tone-of-voice constraint per [redacted-link] Ship behind feature flag support agent v2 Eval results last run | Cohort | Tickets | Auto-resolve | CSAT | |---|---|---|---| | Onboarding | 80 | 78% | 4.6 | | Billing | 60 | 64% | 4.4 | | Bugs | 60 | 41% | 4.1 | Risks Public knowledge base is incomplete in the billing area; see Data Pipeline Refactor for the fix. Privacy: customers' email addresses arrive in transcripts. We use --mode redacted for all chunks we re-index from transcripts see Separate Private and Public Memory . Related Weekly Agent ",
    "updated": "2026-05-24T04:31:34.094Z"
  },
  {
    "id": "projects-data-pipeline-refactor",
    "title": "Data Pipeline Refactor",
    "path": "notes/projects-data-pipeline-refactor.html",
    "category": "projects",
    "tags": [
      "project",
      "data",
      "pipeline"
    ],
    "text": "Data Pipeline Refactor Goal Cut billing-area ticket-to-knowledge time from 14 days → 24 hours so the Customer Support Agent v2 has fresh context when CSAT-impacting issues land. Current state Old pipeline: New pipeline: Status x Webhook receiver shipped apps/ingest/ x Markdown emitter normalizes Salesforce fields to our Vault frontmatter standard Backfill historical 18 months of billing tickets Validate redaction quality on PII-heavy notes see Separate Private and Public Memory Why static compile instead of live DB See the Use chunks.jsonl as the canonical RAG substrate decision. Short version: every agent reads the same bundle; reproducible across CI, prod, and local dev. Related Customer Support Agent v2 Weekly Agent Memory Review",
    "updated": "2026-05-24T04:31:34.094Z"
  }
]