Personal context management system: wiki-style knowledge base and task management.
  • Rust 90.5%
  • JavaScript 7.6%
  • CSS 1%
  • Shell 0.4%
  • Python 0.4%
Find a file
Erich Blume e65e2d3910 feat(hephd): sync observability — recovery, per-cycle volume, throttled failures
Background sync now logs cycles that move ops at info (pulled/applied/
pushed + the cursors they advanced to), announces recovery with the
length of the failure streak it ends, and suppresses repeats of an
identical failure to one warn per ten cycles. SyncReport carries the
advanced cursors (additive, wire-compatible).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-09 10:49:37 -07:00
.dagger C0: pin Quartz docs build to v4.5.2 (v5.0.0 broke build) 2026-06-04 08:11:59 -07:00
.forgejo/workflows fix: --version reports release version + build SHA; release tags a version-bump commit 2026-06-04 09:43:10 -07:00
.gitea Initial commit 2026-05-31 06:13:36 -07:00
.github Initial commit 2026-05-31 06:13:36 -07:00
crates feat(hephd): sync observability — recovery, per-cycle volume, throttled failures 2026-06-09 10:49:37 -07:00
docs docs: task-sweep end state — wiki-links explanation + changelog fragments 2026-06-09 10:33:59 -07:00
heph-pwa feat(attention): set bands directly as a1–a4 instead of cycling 2026-06-09 07:50:53 -07:00
mise-tasks infra: extract heph.nvim into its own forge repo 2026-06-03 22:42:39 -07:00
.gitignore heph: dev/installed isolation — mise run dev task + install how-to 2026-06-02 09:39:59 -07:00
.yamllint.yaml Initial commit 2026-05-31 06:13:36 -07:00
AGENTS.md infra: extract heph.nvim into its own forge repo 2026-06-03 22:42:39 -07:00
Cargo.lock fix(hephd): https hub urls work; sync errors name the phase and hub 2026-06-09 10:45:56 -07:00
Cargo.toml fix(hephd): https hub urls work; sync errors name the phase and hub 2026-06-09 10:45:56 -07:00
CHANGELOG.md Update changelog for v1.4.2 [skip ci] 2026-06-09 09:16:12 -07:00
CLAUDE.md Initial commit 2026-05-31 06:13:36 -07:00
dagger.json Initial commit 2026-05-31 06:13:36 -07:00
LICENSE Set up hephaestus from template and add design + tech spec 2026-05-31 09:37:28 -07:00
mise.toml Initial commit 2026-05-31 06:13:36 -07:00
prek.toml infra: add cargo-fmt-check pre-push prek hook (mirror CI) 2026-06-04 12:36:12 -07:00
README.md infra: extract heph.nvim into its own forge repo 2026-06-03 22:42:39 -07:00
towncrier.toml Initial commit 2026-05-31 06:13:36 -07:00

hephaestus

A personal context management system — a single, self-hosted Rust application that fuses a wiki-style knowledge base (Zettelkasten) with task management. Notes and tasks are first-class, cross-linkable entities in one database, so a task like "Fix the roof leak" stays coupled to the home-repair log and contractor-call notes that give it context.

It is offline-first: fully useful on a laptop with no network, and (when the distributed layer lands) auto-syncing to a central instance hosted in blumeops. The primary surface will be a Neovim plugin (heph.nvim, an obsidian.nvim replacement); a CLI (heph) is the utility/scripting surface.

Why "what is next?" is the flagship. heph is organized around concise, honest answers to recurring questions — above all "what do I do right now?" — built from ~10 years of the owner's lived prioritization discipline: projects-as-contexts; attention colors (white/orange/red/blue, where red = a consequence exists if late, not importance); do-dates, not due-dates (earliest-actionable, never a deadline alarm); and working-set tensions surfaced honestly (no "fake happy", no overwhelm).

See docs/explanation/design.md for the vision and rationale, and docs/reference/v1-prototype-tech-spec.md for the implementation-facing specification.

Status

Phase 1 (v1 prototype) — at Todoist feature-parity (2026-06-03) on branch feature/v1-prototype. The Rust backend is feature-complete and all three surfaces are installed daily-drivers: the heph CLI (capture/scripting + the complete daemon API), heph-tui (the agenda/triage surface — attention-colored views, fzf move-to-project, undo/redo, an Inbox), and heph.nvim (the context/knowledge base — journals, wiki-links by id with conceal, a [[ picker, YAML-frontmatter task editing). A global ⌘' quick-capture popover (heph-quickadd) rounds out capture. Under the hood: all three runtime modes work, replicas sync through a hub over HTTP, authenticated end-to-end with OIDC (Authentik; JWKS/RS256, single-tenant), the offline-first config (local + hub_url) converges with a yrs text-CRDT, and the daemon runs as an OS service. CI is green, fully through Dagger; built test-first.

heph now self-hosts its roadmap. With parity reached, remaining and future work is tracked in heph itself — as tasks in the Hephaestus project (heph view ondeck, or the On Deck view in heph-tui) — rather than in a document. The v1-prototype tech-spec is now the historical build record (its §14 tracker); the design doc remains the living rationale.

Area State
Data model, markdown extraction, wiki-links, export done
Tasks, links, "what is next?" ranking, recurrence, per-task logs done
hephd daemon — local mode (file lock + JSON-RPC over a unix socket) done
heph CLI; list / health / journal / full-text search (FTS5) done
Sync engine — HLC, op-log, converging merge + conflict queue (no network yet) done
yrs text-CRDT for body merge done
server (hub) mode + spoke push/pull sync over HTTP (axum) done
client mode + RemoteStore (online-only, no replica) done
OIDC hub auth — bearer-token verification + owner gate done
OIDC client — device-code login, keyring token cache done
heph.nvim (primary surface) — RPC client, buffer-backed editing, wiki-link follow, journal (slice 11a) done
heph.nvim — Tactical/Organizational task views, capture, attention, done/drop, log (slice 11b) done
heph.nvim — context-item promotion + Dagger headless-nvim CI (slice 11c) done
heph.nvim — managed daemon (plug-and-play, self-heal), follow-or-create, home/index, dailies picker, interactive views; installed + dev-isolated done

Architecture

A Cargo workspace, layered so the same core runs from a laptop to a hub:

  • crates/heph-core — the library: data model, the Store trait + SQLite store, markdown parsing/extraction, recurrence, the "what is next?" engine, and the sync engine (op-log, hybrid logical clocks, CRDT/LWW merge, conflict detection). Synchronous and clock-injected (no ambient wall-clock reads) so ranking and merge are deterministic.
  • crates/hephd — the per-device daemon. One binary, three modes — local (own SQLite replica; a syncing spoke when given --hub-url), server (also the sync hub: an HTTP endpoint others sync against), client (thin, remote, no replica — proxies to a --server-url) — selected by configuration via a targetable Store backend. Surfaces connect to it over a unix socket; it owns the DB handle and background sync.
  • crates/heph — the CLI: a thin client of the daemon (no direct DB access).
  • hephaestus.nvim (its own forge repo, eblume/hephaestus.nvim) — the Neovim editing/knowledge-base surface, a thin client of the daemon; see docs/reference/heph-nvim.md and docs/how-to/install-heph.md.

Storage: SQLite is the source of truth; a node's body is markdown; export materializes the whole store as a directory of .md files. Sync: each device holds a full replica + an append-only op-log; devices reconcile through a hub with automatic merge (text-CRDT bodies, last-writer-wins scalars, OR-set links) and a conflict queue for the ambiguous remainder. Auth: the hub verifies an OIDC bearer token (Authentik) on every op exchange — RS256/JWKS verification + a single-tenant owner gate — and clients obtain tokens via the OAuth 2.0 device-code flow (heph auth login), cached in the OS keyring. Local-only instances need no auth.

Build & run

Requires a Rust toolchain (stable). The build is a standard Cargo workspace:

cargo build              # build all crates
cargo test --all         # run the full test suite
cargo clippy --all-targets -- -D warnings

Run the daemon in local mode, then drive it with the CLI:

# Terminal 1 — start the daemon (creates ~/.local/share/heph/heph.db and a socket)
cargo run -p hephd

# Terminal 2 — talk to it
cargo run -p heph -- task "Fix the roof leak" --attention red
cargo run -p heph -- next                 # the "what is next?" ranking
cargo run -p heph -- doc "Roof log" --body "Called the contractor."
cargo run -p heph -- search roof          # full-text search
cargo run -p heph -- journal 2026-06-01   # open/create today's journal
cargo run -p heph -- export ./snapshot    # write the store as a .md tree

The daemon takes an exclusive lock on its DB file; --db and --socket override the defaults.

Development

  • Test-driven. Every feature has tests at the appropriate layer(s) — unit, property tests, real-socket daemon integration, and CLI process tests. No feature is "done" without them.
  • Change process. Changes are classified C0 / C1 / C2 (quick fix / human-review PR / Mikado chain). The v1 prototype is a single long-lived C1. See docs/how-to/agent-change-process.md.
  • Git hooks & tooling. prek runs formatting, linting, and secret detection; mise runs repo automation; CI (Forgejo) runs prek plus cargo fmt/clippy/test via .forgejo/scripts/build.
prek install && prek install --hook-type commit-msg   # set up hooks
prek run --all-files                                  # run all checks
mise tasks                                            # list automation tasks
mise run ai-docs                                      # docs AI agents read first
  • Documentation is Diataxis-structured and built with Quartz; changelog fragments use Towncrier under docs/changelog.d/. Working agents should read AGENTS.md first.

Repository layout

./Cargo.toml            # workspace manifest
./crates/heph-core/     # core library: model, store, extraction, recurrence, ranking, sync
./crates/hephd/         # daemon: local/server/client modes — unix-socket RPC + HTTP sync/rpc
./crates/heph/          # CLI: thin client of the daemon
./docs/                 # Diataxis docs (design, v1-prototype-tech-spec, how-to), Quartz config
./.forgejo/             # CI build + release workflows and hooks
./.dagger/              # Dagger module backing docs builds/releases
./mise-tasks/           # repo automation via `mise run`

License

All rights reserved. This is a personal, private project — not licensed for use, copying, modification, or distribution. Open-sourcing may be considered in the future. See LICENSE.