Skip to content

dbrami/temporiki

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Temporiki

A personal knowledge base that gets smarter every time you use it.

Clip articles, save meeting notes, drop transcripts and files — Temporiki automatically organizes, connects, and remembers everything so you can ask questions and get answers with full context of when and why.

Built on Karpathy's LLM Wiki pattern. Runs locally with Obsidian. Works with any MCP-capable AI agent.

License: MIT Version Python 3.11+ GitHub stars

How It Works

1. Capture — Clip web pages with Obsidian Web Clipper, paste meeting notes, or drop any file into raw/. raw/webclips/ is ingress-only.

2. Organize — Temporiki reads your sources, extracts key facts and decisions, creates linked wiki pages, indexes everything for search, and auto-moves processed webclips to raw/webclips/_archive/YYYY-MM/ (with wiki sources: links rewritten). Ingest is driven by a tiny in-vault Obsidian plugin while Obsidian is open, and by a lazy staleness check at query time when it isn't — no OS-level watcher, no resident daemon.

3. Ask — Query your knowledge base in natural language. Get answers grounded in your own material, with citations and timestamps so you know where it came from and when. High-confidence palace-search results are auto-saved into wiki/queries/ so insights compound instead of staying in chat.

Quick Start

# Clone and enter
git clone https://github.com/dbrami/temporiki.git
cd temporiki

# Bootstrap (creates venv, installs deps, sets up Obsidian vault)
./.temporiki/hooks/obsidian-zero.sh

That's it. Drop files into raw/, clip pages with Web Clipper to raw/webclips/, and ask your agent questions. Temporiki handles the rest, including auto-archiving processed clips. ./.temporiki/hooks/obsidian-zero.sh also auto-sets Obsidian Attachment folder path to raw/webclips.

Prefer a guided walkthrough? Run uv --project .temporiki run temporiki onboard for an interactive checklist.

Demo

Coming soon.

Why Temporiki?

Plain Obsidian Original Memoriki Temporiki
Knowledge pattern Manual notes Karpathy LLM Wiki LLM Wiki + temporal Context Graph
Memory None — files only Wiki-first, manual Dual-store: SQLite FTS5 + Chroma (auto-routed)
Daily workflow Manual organization Python commands Zero-command (clip, drop, ask)
Guided onboarding None Manual docs-led temporiki onboard checklist
Web capture Web Clipper to a folder Not included Web Clipper inbox with auto-ingest
Inbox clutter User-managed User-managed raw/webclips/ ingress + immediate auto-archive
Temporal reasoning None Limited Time-scoped decisions with as-of queries
Background automation None Partial In-vault plugin + router-lazy ingest (no OS watcher, no daemon)
Agent support N/A Claude-only Any MCP-capable agent

Works With

Any MCP-capable coding agent (Claude Code, Codex, Cursor, Gemini CLI, OpenCode, OpenClaw).

Under the Hood

Architecture, CLI, and developer details

Architecture

temporiki/
  raw/                    # Immutable sources
  wiki/                   # LLM-maintained compiled knowledge
    index.md              # Catalog
    log.md                # Chronological operations
    entities/
    concepts/
    sources/
    synthesis/
    decisions/
    queries/
    meta/                 # Dashboards (webclips activity, stale pages, etc.)
    _templates/           # Canonical page templates
  .temporiki/AGENTS.md               # Agent schema (Codex/OpenCode/Cursor)
  .temporiki/CLAUDE.md               # Claude compatibility mirror
  .temporiki/mempalace.yaml
  .memplite/palace.sqlite3 # Lightweight memory DB (created on demand)

Zero-Command UX (full detail)

One-time Obsidian setup:

  1. Open Obsidian and create/select a vault from the repo folder.
  2. Install/enable Obsidian Terminal and Web Clipper.
  3. (Optional) confirm Web Clipper target folder is raw/webclips/ (Temporiki auto-sets Obsidian attachment path there).

Daily use:

  1. Open Obsidian vault.
  2. Open a terminal inside Obsidian, launch your LLM CLI (claude, codex, gemini, etc.), and chat.
  3. Clip content to raw/webclips/; the Temporiki Auto-Ingest plugin fires within ~2s and indexes the new source.
  4. Processed clips are moved to raw/webclips/_archive/YYYY-MM/ automatically.
  5. Files dropped into raw/ via Finder or CLI while Obsidian is closed get picked up on the next palace-search / palace-kg-query via a lazy staleness check — no missing context.

No manual uv run ... commands are required for normal use.

Optional Developer CLI

uv --project .temporiki run temporiki ingest
uv --project .temporiki run temporiki onboard
uv --project .temporiki run temporiki palace-mine
uv --project .temporiki run temporiki palace-search "auth decision"
uv --project .temporiki run temporiki palace-kg-query --as-of 2026-04-13
uv --project .temporiki run temporiki lint
uv --project .temporiki run temporiki lint --autofix
uv --project .temporiki run temporiki query "What decisions are active?" --answer "..."

What Is Implemented

  • Hash-based delta ingest tracked in .manifest.json
  • Query save-back to wiki/queries/ (compounding knowledge)
  • High-confidence auto-save from palace-search to wiki/queries/
  • Wiki linting for missing frontmatter, broken links, and orphans
  • Lint checks for pages missing from wiki/index.md
  • Lint contradiction watch for overlapping active decisions on the same topic
  • Built-in mempalace-lite (SQLite FTS5 memory search + temporal decision query)
  • Thin Chroma integration via chromadb-client (HTTP mode)
  • Hybrid retrieval reranking with confidence + citation rationale
  • Intelligent query routing (KG -> Hybrid -> SQLite fallback)
  • Pydantic + YAML schema validation with lint autofix support
  • Context Graph mode guidance in .temporiki/AGENTS.md (wiki/decisions/ + temporal precedence)
  • Session-launch hook for local Chroma Docker autostart
  • In-vault Obsidian plugin (.temporiki/obsidian-plugin/) for eager ingest on vault create/modify events
  • Router-lazy ingest guard (.temporiki/temporiki_tools/stale.py) ensures palace-search and palace-kg-query run against a fresh manifest even when Obsidian never opened
  • Web Clipper inbox at raw/webclips/ with automatic ingest/index loop
  • Webclips activity dashboard at wiki/meta/webclips-activity.md (inbox + recent archives)
  • Lightweight default install: no chromadb/kubernetes stack unless --extra mempalace is requested

Why RAG Alone Isn't Enough

Most retrieval-augmented-generation systems rely on similarity in high-dimensional embedding spaces to pull context for the LLM. This has a well-known weakness — the curse of dimensionality: as dimensions grow, distances between points become less discriminating, and "semantically similar" can drift from "actually relevant."

A Stanford RegLab study of commercial legal RAG tools (Magesh et al. 2025, Journal of Empirical Legal Studies) measured hallucination rates of 17–33% on systems marketed as "hallucination-free." The paper identifies three failure modes that trace back to retrieval limitations:

  1. Text-similar but irrelevant retrieval — shared surface tokens (a name, a word) pulling unrelated sources
  2. Temporal drift — retrieved sources that were once correct but have been superseded
  3. Misgrounding — citations to real sources that don't actually support the claim

Temporiki mitigates each of these with structural, not purely statistical, choices:

Failure mode Temporiki's mitigation
Embedding-only retrieval is fragile Hybrid routing — KG-first for decision queries, then lexical + vector rerank, then SQLite FTS5 fallback. No single similarity metric decides what's retrieved.
Temporal drift Time-scoped decisions with validity_until and as-of query filters. Superseded content is surfaced as such, not returned as current.
Misgrounding Immutable raw/ sources + YAML provenance on every wiki page. Every claim links back to a specific source file; reasoning (why_this_choice, precedent_references) is stored separately from extracted facts.
"Distracting" similar documents Context Graph layer — explicit entity/decision/concept links, not just embedding proximity. Relevance is graph-walkable, not purely statistical.

Temporiki does not eliminate hallucinations — no RAG system does. It narrows the surface area where the common failure modes live.

Versioning

  • SemVer tags are used (vMAJOR.MINOR.PATCH).
  • .temporiki/pyproject.toml is the authoritative package version.
  • .temporiki/CHANGELOG.md tracks release notes.
  • GitHub Releases are auto-created when a SemVer tag is pushed.
  • Version Guard CI fails if impactful runtime changes are made without a version bump and changelog update.

Release command:

./.temporiki/scripts/release.sh 0.1.3
git push origin main --follow-tags

For day-to-day work:

# Bump version based on change scope
./.temporiki/scripts/bump_version.sh patch   # bugfix/small behavior change
./.temporiki/scripts/bump_version.sh minor   # backward-compatible feature
./.temporiki/scripts/bump_version.sh major   # breaking change

Sources

License

MIT

About

Temporiki — Lightweight temporal Context Graph + Obsidian-native LLM Wiki with real memory (SQLite + Chroma). Zero-command daily flow.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Python 81.5%
  • Shell 13.2%
  • JavaScript 3.6%
  • Makefile 1.7%