Files
GEWU/docs/PRD.md
T

461 lines
24 KiB
Markdown
Raw Normal View History

2026-10-12 15:45:08 +08:00
# Multi-Project Knowledge Base for Humans and AI Agents
Working name: KB | Version 0.2 (draft) | 12 Oct 2026 | Status: for review
## Summary
KB is a local-first, git-based knowledge base that turns collected material (web pages, papers, reviews, NotebookLM exports, talks, internal notes) into verified, linked, reusable knowledge. It serves two kinds of readers equally: people (through a web UI) and AI agents (through MCP and an HTTP API). One installation hosts many projects, each identified by a project_id (for example interactive-video, dome-performance, agentic-design). Projects keep their own goals, taxonomies and curated notes, and can draw on a shared library of sources, entities and concepts.
The core idea is three layers: immutable sources, atomic notes extracted from them with evidence, and compiled syntheses (briefs, market overviews, timelines, comparison tables) built from the notes. Agents write only by submitting proposals that pass a validator.
## Problem and opportunity
- Research for a project is scattered across browser tabs, PDFs, NotebookLM notebooks and chat histories, and is hard to reuse by a different person, agent or project.
- AI agents working on development, writing, presentations, budgets or marketing plans start each session without the project's accumulated knowledge, or get it as unverified summaries.
- Existing note tools store text but do not enforce provenance, evidence strength, freshness or typed relationships, so market numbers go stale, contradictions go unnoticed and claims lose their sources.
- Knowledge that applies to several projects (for example agentic design patterns used in both an interactive video tool and a dome show pipeline) is duplicated or lost.
## Goals and non-goals
Goals
1. One knowledge base, many projects. Every node belongs to exactly one project or to the shared library, and queries can be scoped accordingly.
2. Evidence-backed knowledge. Every claim traces to a source and a quote location that a validator can check.
3. Dual-audience access. Humans browse, learn and search in a UI. Agents retrieve cited, budgeted, structured answers through MCP and API.
4. Agent-agnostic. Works from OpenCode, Claude, Codex and Antigravity through shared files, skills and MCP, with no logic locked inside one tool.
5. Goal-aware ingestion. A local agent pipeline digests new material against the project's goal (three horizons) and proposes notes, links and insights.
6. Multi-audience value. The same nodes serve developers, product managers, project managers and sales through facets and saved lenses.
7. Trustworthy over time. Dated claims, staleness tracking, contradiction links and a full audit trail.
Non-goals (v1)
- Real-time multi-user collaborative editing (git-based collaboration only).
- Hosting copyrighted source texts for redistribution. KB stores notes, short quotes and links, and keeps archived copies private.
- Replacing project management, CRM or code search tools. KB feeds them knowledge but does not manage tasks or deals.
- A general-purpose chatbot. Agents use KB as a tool, and the UI is for navigation, review and reading.
- A story-map authoring editor (a canvas for drawing branching story flows) and an embedded in-UI copilot. Agents reach KB through MCP, and story authoring is a separate product.
## Users and use cases
User
Typical needs
Example
Developer
Problems and proven techniques, architecture precedents, case studies
How do interactive movies avoid combinatorial explosion of branches?
Product manager
Market shape, competitors, user problems, feature precedents, comparisons
Compare how three titles handled player choice pacing.
Project manager
History, timelines, cost and schedule datapoints, risks
Timeline of interactive film production tooling for a kickoff deck.
Sales
Market overview, positioning, proof points, objections, as-of numbers
Current market size claims and who made them.
Ingest agent
Digest a source against the project goal and propose notes
Process a new paper into proposals with evidence and edges.
Consumer agent
Retrieve cited knowledge during coding, writing, budgeting, marketing
Fetch a brief for a presentation with token budget 2,000.
Curator agent
Find stale, duplicate, contradictory or orphan nodes
Weekly report of stale market datapoints.
Project owner
Define the goal, review proposals, set autonomy levels
Approve new notes, update the north star.
## Multi-project model
This section defines how one database serves many projects.
### 5.1 Project registry
Each project has a registry entry projects/<project_id>/project.md with frontmatter:
- project_id: lowercase slug, unique, immutable (for example interactive-video, dome-performance, agentic-design).
- title, description, status (active, paused, archived), owners.
- north_star: the project's main goal (Horizon 3), human-owned. Agents may propose edits through review, never change it directly.
- key_questions, watch_list (competitors, technologies, titles, people), out_of_scope.
- audiences: which audiences the project cares about.
- taxonomy_extensions: project-specific domain tags and node subtypes added to the core vocabulary.
- autonomy_policy: per node type, one of suggest, auto-merge-safe, research-on-gap.
- default_includes: other projects or shared whose nodes appear in this project's searches by default.
Horizons 1 (current request) and 2 (session objective) are not stored in the registry. The agent derives them per task and records them in the run log.
### 5.2 Scope of every node
Every node has project_id, which is either a registered project or the reserved value shared.
Scope
What lives there
Rule
Project
Notes, syntheses, project-specific cases and datapoints
Owned by one project. Reviewed against that project's lens.
Shared
Sources, entities (companies, people, tools, titles), general concepts, cross-domain techniques
Deduplicated globally. Any project can reference them.
Rules:
1. Sources and entities default to shared, so one paper or company is stored once and referenced by many projects.
2. Notes default to the project that triggered ingestion. A note can be promoted to shared when it is useful beyond the project, through a review action that records who promoted it and why.
3. Cross-project links are allowed and explicit. A project node can link to a shared node or to a node in another project with a typed edge. The edge records the project pair, and the UI and API mark it as cross-project.
4. Relevance is per project. A node has lens_fit keyed by project: a note about agentic design patterns can carry a high score for agentic-design and a medium score for interactive-video, without being copied.
5. Default query scope is the active project plus its default_includes and shared. Other scopes are opt-in (projects=[...] or all).
### 5.3 Identity and layout
- Node IDs are globally unique and stable: <project_id>:<slug> for project nodes and shared:<slug> for shared nodes. Renames create redirects.
- Repository layout (single repo, namespaced):
kb/
shared/{sources,entities,notes,synthesis}/
projects/<project_id>/{project.md,notes,synthesis,staging,runs,lens/}
schema/ protocols/ skills/ src/ docs/
- A separate repo per project is not used in v1, because shared sources and cross-project links would need duplication or submodules. The repo can still be split later because every node carries its project_id.
### 5.4 Isolation and export
- v1 is a single-owner or small-team setup. Isolation is logical: every API call takes an explicit scope, and the validator rejects nodes with an unknown project_id.
- Per-project export (nodes, linked shared nodes, and an index) must be possible so a project can be handed over or archived.
- Per-project access control (read, propose, merge) is a P2 requirement and the schema must not block it.
## Content model
### 6.1 Layers
1. Source (immutable): archived snapshot or reference, hash, bibliographic and reliability metadata. Never edited by agents.
2. Note (atomic): one finding, claim, problem, technique, case, datapoint or event, with evidence quote and location.
3. Synthesis (compiled): topic pages, briefs, market overviews, timelines and comparisons, regenerated from notes.
### 6.2 Node types
Source, Finding/Claim, Problem, Technique/Solution, Case, Entity, Datapoint, Event, Concept, Synthesis. Projects may add subtypes through taxonomy_extensions.
Project subtype packs. A project adds subtypes and fields through its registry, and the same validator checks them. The interactive-video pack starts with these four, taken from the deep-research report:
Subtype
Based on
Key fields
Production case
Case
release year, studio, delivery medium (FMV, real-time 3D, streaming player, theatrical), budget, reported revenue, units sold, total and average playthrough runtime, shooting ratio, decision points, endings
Narrative mechanism
Technique
paradigm (branch-and-bottleneck, state variable, storylet, database cinema, foldback), complexity class, authoring overhead, agency profile
Technical constraint
Problem
domain (buffering, state storage, bandwidth, platform parity), severity 1-5, mitigation
Market metric
Datapoint
metric type (market size, conversion, ticket premium, completion drop-off), demographic, value, unit, sample size, reporting year
Other projects define their own packs. All subtype fields follow the evidence rules in 6.3.
### 6.3 Metadata
All nodes: id, project_id, type, title, summary (1-2 sentences for agents to scan), created, updated, status (draft, reviewed, stale, superseded), confidence (low, medium, high), tags, schema_version.
Facets: audience (dev, product, pm, sales), domain (project-extensible core set: tech, design, market, history, legal, production, marketing), use_for (presentation, budget, comparison, architecture decision, pitch).
Lens fit: lens_fit: {<project_id>: {score, horizon, key_question, reason}}.
Provenance: derived_from: [{source, quote, loc}], run_id of the agent run that proposed it, agent and model identity.
Source-specific: URL, author, publisher, publication date, access date, source type (paper, review, press, vendor, internal), reliability grade, archive path, license note.
Claims and datapoints: evidence_quote (short, with page or timestamp), evidence_type (measured, reported, opinion, vendor marketing), as_of, stale_after.
Datapoint values: value, unit, sample_size, reporting_year and demographic (where relevant) are separate fields from the quote, so numbers can be compared and charted.
Entities: aliases (alternate names) and merged_from (IDs merged into this node, so a merge can be undone).
### 6.4 Typed edges
solves, causes, supports, contradicts, instance_of, part_of, precedes, supersedes, compared_with, derived_from, plus applies_to (node to project) for cross-project relevance. Edges live in frontmatter and are validated: the target must exist and the edge type must be allowed between the two node types.
Projects add extension edges in their registry, each with allowed source and target types. The interactive-video pack adds implements (case to mechanism), introduces (mechanism to constraint, a project-level form of causes), mitigates (technique to constraint), has_metric (case to datapoint) and incurs_cost (problem to datapoint). documented_in is the core derived_from edge. The core set stays small so other projects are not forced to carry these.
## Functional requirements
Priority: P0 required for v1, P1 important, P2 later.
### 7.1 Project management
ID
Requirement
Pri
FR-P1
Create, archive and list projects from a registry entry, and the validator rejects nodes with unregistered project_id.
P0
FR-P2
Every read and write API takes a project scope, with the documented default scope.
P0
FR-P3
Shared library with global dedupe of sources and entities.
P0
FR-P4
Promote a note to shared, and mark links as cross-project in API and UI.
P1
FR-P5
Per-project lens (north-star, key questions, watch list) read by ingest and curation.
P0
FR-P6
Per-project export and import.
P1
FR-P7
Per-project access control.
P2
### 7.2 Ingestion
ID
Requirement
Pri
FR-I1
Capture from URL, PDF, file, text paste and NotebookLM export through an inbox/ folder, CLI and API.
P0
FR-I2
Archive source snapshot, hash, normalize metadata, dedupe by hash and URL across the whole base.
P0
FR-I3
Triage against the project lens: relevant or skip, with score and reason.
P0
FR-I4
Digest extracts schema-valid notes with quote and location for every claim.
P0
FR-I5
Analyze writes learnings and points of interest per horizon, labeled as the agent's interpretation and kept separate from source claims.
P1
FR-I6
Link resolves entities to a canonical name plus aliases (name normalization and embedding similarity find candidates, the agent judges borderline matches), logs every merge so it can be undone, proposes typed edges and flags contradictions.
P0
FR-I7
Verify re-checks quotes, numbers and dates against the archived source and assigns evidence grade.
P0
FR-I8
All writes go to staging/ as proposals, with a run log.
P0
FR-I9
Tag each source with the projects it was ingested for, so one source can serve several projects.
P0
FR-I10
Task brief: agent derives H1 and H2 for each run and stores them in the run record.
P1
### 7.3 Validation and review
ID
Requirement
Pri
FR-V1
kb validate checks schema, required fields, link resolution, edge-type rules, project scope and that every quote appears in the archived source. A proposal that fails cannot be committed.
P0
FR-V2
Review inbox with accept, edit, reject and merge-duplicate actions. Decisions are logged and reused as examples for the skills.
P0
FR-V3
Autonomy policy per node type and per project, with graduated promotion from suggest to auto-merge once acceptance rate is demonstrated.
P1
FR-V4
Contradictions are linked, never overwritten. Superseded nodes stay with superseded_by.
P0
### 7.4 Retrieval and agent interface
ID
Requirement
Pri
FR-A1
MCP server and HTTP API expose: search, get_node, neighbors, timeline, compare, brief, list_projects, propose_note, flag_stale. All take project scope.
P0
FR-A2
Hybrid retrieval: keyword plus embeddings, then graph expansion by typed edges.
P0
FR-A3
Responses are structured JSON with citations, confidence, as_of and project of origin, bounded by a token budget parameter.
P0
FR-A4
brief(topic, audience, purpose, budget) returns a compiled, cited summary for one audience.
P1
FR-A5
Agents cannot write to notes/ or synthesis/ directly. They can only submit proposals.
P0
FR-A6
Single canonical AGENTS.md, with thin CLAUDE.md and GEMINI.md pointers, a shared skills folder, and an install script that links skills and MCP config into OpenCode, Claude, Codex and Antigravity.
P0
FR-A7
Optional hook integration so a coding harness can inject relevant KB nodes at turn start, with high-confidence full items and low-confidence hints.
P2
FR-A8
MCP resources (schema, project registry, node by ID) and prompts (per-project roles, for example an architecture advisor) alongside the tools.
P1
FR-A9
Typed tools only. No raw query language (Cypher, SQL) is exposed to agents, and every write goes through a proposal.
P0
### 7.5 Compilation and curation
ID
Requirement
Pri
FR-C1
Regenerate affected syntheses when notes change and show a diff for review.
P1
FR-C2
Curator agent reports stale nodes, duplicates, orphans, contradictions and cross-project promotion candidates.
P1
FR-C3
Staleness: nodes past stale_after are flagged in the UI and returned with a warning by the API.
P0
FR-C4
Optional topic-cluster summaries: detect clusters in the graph and write a summary per cluster for broad questions. Enabled only when a project outgrows its syntheses.
P2
### 7.6 Web UI
ID
Requirement
Pri
FR-U1
Project switcher, with an "all projects" view and clear marking of shared and cross-project items.
P0
FR-U2
Global search with filters for type, audience, domain, date, confidence and project.
P0
FR-U3
Node pages with summary, evidence, source links, typed neighbors and history.
P0
FR-U4
Problem to solutions to cases matrix, market datapoint table with as-of badges, timeline view, comparison view.
P1
FR-U5
Graph explorer.
P1
FR-U6
Review inbox and staleness list.
P0
FR-U7
Audience lenses: saved filters plus brief templates for developers, product, project managers and sales.
P1
FR-U8
Export a synthesis or timeline to slides or markdown.
P2
## Architecture summary
1. Source of truth: markdown and YAML files in git.
2. Derived index: SQLite (full text and vectors) or Postgres plus pgvector, with an edges table. It is disposable and can always be rebuilt from the files.
3. KB service: one core with MCP, HTTP and CLI transports derived from a single registry of tools. It is the only code path that reads the index and commits to the repo.
4. Skills: judgment procedures (capture, triage, digest, analyze, link, verify, compile, report), kept as one canonical set with a shared concerns to protocol mapping.
5. UI: a client of the same API with no privileged access.
6. Principle: deterministic strictness lives in code (validator, indexer), not in prompts, so different agents and models are held to the same floor.
Reuse from existing work: the one-core-with-thin-adapters and registry pattern, confidence tiers, observe-then-enforce promotion and acceptance receipts from Jev, and the skill template, state-machine pipelines and symlink-based cross-agent setup from Winnow.
Storage decision (v1). Files in git plus SQLite (full text, vectors and an edges table). A graph database such as Neo4j was evaluated and is not used in v1: it adds a server to run and back up, and it moves the source of truth out of git, which loses diffs, undo and direct file access for agents. A graph engine can be added later as a second derived index. Revisit when the base passes the 100,000-node target, when multi-hop path queries become too slow in SQLite, or when live multi-user editing is required. Also left out of v1: cloud document parsers (local-first), separate entity-tagging models and heavy entity-matching pipelines. Agents get typed tools only, never a raw query language.
## Non-functional requirements
Area
Requirement
Performance
Search under 300 ms for a project of 10,000 nodes on a laptop. brief under 5 s excluding model time.
Scale targets
10,000 nodes per project and 100,000 total, with full index rebuild under 10 minutes.
Local-first
Everything runs offline with local models as an option. Cloud models are configurable.
Portability
Plain files, no lock-in. Works on Windows, macOS and Linux. No required symlinks.
Reliability
Index is rebuildable. Every write is a git commit. Ingest runs are resumable from file artifacts.
Auditability
Every node records run, agent and model. Every proposal decision is logged.
Security
Source text is treated as data, never as instructions. Ingest agents have no write access beyond proposals. Secrets are kept out of the repo.
Legal
Store notes, short quotes and links. Archived copies stay private. License field on every source.
Versioning
schema_version on every node and run record, with migration scripts.
Agent-agnostic
No required use of tool-specific hooks, plugins or subagents in the core pipeline.
## Success metrics
Metric
Target
Citation validity (quotes found at stated location)
100% of merged notes
Proposal acceptance rate after tuning
At least 70% for notes, tracked per skill and per agent
Retrieval quality on a per-project question set of 20-30 questions
Correct source in the top 5 for at least 80% of questions
Cross-agent convergence
Same 5 documents through two different agents give validator-clean, mostly overlapping notes
Freshness
No datapoint older than its stale_after served without a warning
Reuse
At least one project reuses shared nodes from another project in its first month
Time to answer
A person finds a cited answer to a typical question in under 2 minutes
## Milestones
Milestone
Scope
Exit criteria
M0 Foundations
Node schema, edge vocabulary, project registry, validator, 20 hand-guided sources across two projects, starting with the deep-research report as the first ingest test (graded as a secondary, AI-synthesized source)
Validator catches seeded errors. Notes validate. Verify flags unsupported claims in the report.
M1 Service
Index, hybrid search, MCP and HTTP with project scoping, proposals to staging/
Agents can search and propose from all four tools.
M2 Ingest
capture, triage, digest, verify, link, run logs, task brief
Cross-agent convergence test passes.
M3 UI
Project switcher, search, node pages, review inbox, staleness
A person reviews and navigates without touching files.
M4 Synthesis
analyze, compile, brief, matrix, timeline, curator report
Briefs produced for each audience.
M5 Multi-project hardening
Promotion to shared, cross-project edges, export and import, acceptance receipts per agent
Three projects live on one base without cross-contamination.
## Risks and mitigations
Risk
Mitigation
Different agents extract inconsistent notes
Shared schema, validator gate, golden test documents, short example-driven skills
Hallucinated or misquoted claims
Quote-location validation, separate verify step, second agent for verification where possible
Low-value auto-captured notes
Lens-based triage, relevance thresholds, review-first autonomy
Projects pollute each other
Required project_id, scoped queries, per-project lens fit, explicit cross-project edges, promotion only through review
Duplicate sources and entities across projects
Global dedupe on hash, URL and entity resolution in the shared layer
Prompt injection from ingested sources
Treat source text as data, restrict ingest agent permissions, no direct writes
Market data goes stale
as_of and stale_after required for datapoints, curator reports, API warnings
Vendor or tool lock-in
Files plus MCP, no dependence on any one agent's hooks or plugins
Index drift
Index is derived and rebuilt from files, with a doctor command to check it
Over-building the stack (graph server, extra pipeline stages)
Start with files, SQLite and typed tools. Add a graph engine, clustering or heavier entity matching only when a revisit trigger in section 8 is hit.
## Open questions
1. Should KB live in its own repo or inside one of the existing agent repos?
2. Embedding model: local or API, and how to handle re-embedding when the model changes?
3. UI stack and hosting: local web app only, or also hosted for a team?
4. Do projects ever need hard isolation (separate access rules), or is logical separation enough?
5. Should shared notes require two-step review (project owner plus a shared curator)?
6. How should NotebookLM exports be captured: manual export, or an automated step?
7. Which node subtypes does each of the three starting projects need beyond the core set?
## Appendix A. Example project registry entry
---
project_id: interactive-video
title: Interactive video knowledge
status: active
north_star: <main goal, human-owned>
key_questions:
- How do others control branch explosion at feature-film scale?
- Who pays for interactive video, and how much?
audiences: [dev, product, pm, sales]
default_includes: [shared, agentic-design]
autonomy_policy: {source: auto-merge-safe, note: suggest, datapoint: suggest}
---
Other starting projects: dome-performance, agentic-design.
## Appendix B. Example note
---
id: interactive-video:state-variables-vs-branching
project_id: interactive-video
type: technique
title: Track state variables instead of multiplying branches
summary: Store choices as flags or values and vary scenes by state so paths do not multiply with each choice.
audience: [dev, product]
domain: [tech, design]
confidence: medium
status: reviewed
solves: [interactive-video:combinatorial-explosion]
lens_fit:
interactive-video: {score: 0.9, horizon: H3, key_question: branch explosion}
agentic-design: {score: 0.4, horizon: H2, reason: state tracking in agent workflows}
derived_from:
- {source: shared:src-example-talk, quote: "...", loc: "t=14:32"}
schema_version: 1
---
## Appendix C. Agent tool signatures (illustrative)
search(query, project="interactive-video", scope="project+shared", filters={type, audience, domain, since}, limit=10)
get_node(id)
neighbors(id, edge_types=[], depth=2, scope="project+shared")
timeline(topic, project, from, to)
compare(ids)
brief(topic, project, audience, purpose, token_budget)
list_projects()
propose_note(project, node_bundle, run_id)
flag_stale(id, reason)
Resources: kb://schema, kb://projects/{project_id}, kb://nodes/{id}. Prompts: per-project roles, for example architecture_advisor(project_type, budget_tier) for interactive-video.