Working draft. Not a frozen specification.
Knowledge OS is a system for managing the lifecycle of knowledge objects.
Its minimal public language is built around four object families:
- Claim
- Evidence
- Dissent
- Verdict
Documents remain important, but they are downstream artifacts. A paper, memo, appendix, or white paper is a snapshot over a deeper object graph.
The workspace where a person or small team drafts, maps, argues, and governs a project.
The layer where permissions, review, assignment, and audit become explicit.
The layer where selected objects become public snapshots, living pages, or public cases.
These are not three separate products. They are three surfaces over the same evolving object graph.
- Object-first, document-second
- Lifecycle-first, not storage-first
- Governance over generation
- Protocol grows from use
- Private by default, public by deliberate release
- Model-agnostic by design
- Solo-founder buildability
- Claim — a formally stated proposition under governance
- Evidence — a supporting or weakening artifact
- Dissent — a structured challenge, reservation, attack, or unresolved concern
- Verdict — the current institutional judgment on a target claim
- Snapshot — a frozen publication package derived from live objects
- Lineage — ancestry and descent relations between claims or snapshots
- Actor — a human or agent that creates, transforms, or reviews objects
- Action — a governed operation performed on an object
- Object Protocol Layer
- Knowledge Graph / Storage Layer
- Action + Governance Layer
- Skill Runtime Layer
- Product Surfaces (Private / Team / Public)
┌──────────────────────────────────────────────────────┐
│ Public Surface │
│ snapshots · living pages · public dissent input │
├──────────────────────────────────────────────────────┤
│ Team Surface │
│ review · assignment · audit · permissions │
├──────────────────────────────────────────────────────┤
│ Private Cockpit │
│ drafting · mapping · triage · exploration │
├──────────────────────────────────────────────────────┤
│ Skill Runtime │
│ extraction · scanning · challenge · export │
├──────────────────────────────────────────────────────┤
│ Action + Governance Layer │
│ state transition · logging · validation │
├──────────────────────────────────────────────────────┤
│ Object Protocol + Graph Storage │
│ claims · evidence · dissent · verdicts · links │
└──────────────────────────────────────────────────────┘
BaseObject {
id: string
object_type: "claim" | "evidence" | "dissent" | "verdict"
project_id: string
title: string
summary: string
body: RichContent
created_at: ISODateTime
updated_at: ISODateTime
created_by: ActorRef
updated_by: ActorRef
visibility: "private" | "team" | "public"
labels: string[]
links: Link[]
revisions: RevisionRef[]
lifecycle_state: string
}The revisions field is not only an audit convenience.
It is the semantic history of the object.
Current compact rule:
- every substantive object change creates a new revision state,
- new objects begin at version
1.0, - revisions use a simple
MAJOR.MINORmodel, - minor means the same governed object with the same semantic identity, now clarified or enriched,
- major means the same governed object but a materially changed governed semantic state,
- lineage remains distinct from revision history,
- snapshots should pin exact revisions rather than only floating object ids.
Use the detailed companion note for the current working rule:
revision-model-v1.md
The id field is currently repo-local and project-contextual rather than globally prefixed.
Current compact rule:
- repo-local object ids remain lawful while the repository still functions as one active governed project environment,
- short ids such as
C-0001remain acceptable while routing stays unambiguous inside that scope, - explicit project-prefixed ids become necessary only when multiple active project namespaces or cross-project routing make current ids collision-prone,
- migration to prefixed ids should be threshold-driven, not anticipatory churn.
Use the detailed companion note for the current working rule:
object-id-namespace-policy-v1.md
Do not collapse object lifecycle and epistemic standing into one status field.
This is about the operational state of the object inside the system.
Examples: draft, active, paused, superseded, withdrawn, archived.
This is about how the claim currently stands as knowledge.
Examples: under_evaluation, supported, contested, weakened, rejected, split, stabilized.
A claim can be:
activeandcontested,archivedand historicallyrejected,supersededbecause it split into descendants, not because it was false.
Knowledge OS should not treat the whole object universe as a DAG. That will become false in real use.
Use a general directed graph. Some validated subgraphs may obey stricter constraints:
- dependency graphs may be DAG-like,
- lineage graphs may be partially ordered,
- response and publication graphs may form cycles at the broader system level.
A formally introduced proposition with boundaries, assumptions, dependencies, and a target verdict level.
An accountable support object with links to claims, source references, artifacts, reproducibility notes, and custody.
A first-class governance object for attack, reservation, methodological challenge, boundary concern, or unresolved objection.
An institutional judgment about a claim, with a current level, rationale, supporting basis, and conditions for upgrade or downgrade.
The front-end interaction model should be organized around actions on objects, not generic prompting.
Examples:
- create claim
- attach evidence
- raise dissent
- request verdict update
- scan for missing support
- scan for unresolved dissent
- export snapshot
- split claim
- supersede claim
AI enters through governed actions, not as the center of the interface.
The current action model distinguishes six compact families:
- object creation
- object revision
- relation
- lifecycle
- epistemic / institutional
- publication
- skill-run
Current compact rule:
- actions must not collapse lifecycle change, epistemic change, relation change, and publication change into one undifferentiated event,
- object revision is distinct from graph mutation,
- lifecycle change is distinct from epistemic standing,
- publication actions are distinct from object semantic history,
- skill-run outputs must remain governed rather than self-authorizing.
Use the detailed companion note for the current working rule:
action-governance-grammar-v1.md
Turn raw notes, transcripts, or paper excerpts into candidate objects.
Analyze a claim neighborhood for unsupported assumptions, missing evidence, unresolved dissent, and blocked verdict upgrades.
Generate candidate dissent objects rather than freeform criticism prose.
Build a publication-ready snapshot from selected objects.
Render a public living knowledge page from a snapshot or claim lineage.
All skill calls must create audit records.
For V1, the realistic approach is hosted-first with strong exportability, not full local-first.
That means:
- server-hosted app is acceptable,
- project export must be easy,
- snapshot export must be durable,
- the object graph must remain portable,
- protocol artifacts must not be trapped in a black box.
Do not claim local-first unless the implementation truly supports offline-authoritative workflows.
- Frontend: Next.js + React
- Styling: Tailwind CSS
- Backend: Next.js route handlers / server actions
- Database: PostgreSQL
- ORM: Prisma or Drizzle
- Auth: NextAuth or Clerk
- Storage: S3-compatible object storage
- AI orchestration: Vercel AI SDK or equivalent model-agnostic layer
- Deployment: Vercel or equivalent simple deployment platform
Start with a relational core and explicit link tables. Do not over-engineer a graph database in V1.
Suggested core tables:
projectsobjectsobject_linksrevisionsactorsskill_runssnapshotssnapshot_objectsactions
The key is not storage purity. The key is preserving object identity, history, links, and governed operations.
The revisions table should hold append-only semantic revision history rather than acting as a loose edit-log catchall.
Operational logging may be richer than revision history, but revision history itself should stay accountable and interpretable.
The id field should not be prematurely globalized.
Namespace upgrades should occur only when the repository crosses from repo-local project context into genuinely multi-project identity pressure.
The actions table should preserve governed action history rather than collapsing every object event into an untyped audit stream.
- Do not become a glorified note app.
- Do not become a generic chat wrapper.
- Do not pretend to be local-first when it is not.
- Do not freeze the protocol before real use.
- Do not confuse publication with truth.