All work
Case study · Janus · 2026

The personal historian
for makers.

Other tools compile what you know. Janus records what you did. A nightly agent that reads your git log and coding-agent session transcripts and compounds them into a five-tier narrative — daily pulse, weekly arc, yearly Wrapped, per-project spine — straight into your Obsidian vault.

Role
Solo · architecture · prompts · ops
Stack
Bun · TypeScript · SQLite + FTS5 · launchd / systemd
License
MIT · open source
$0 API tokens · Claude Max OAuth
6 temporal tiers · daily → spine
2 runners · claude-code · gemini-cli
4 MCP tools · agent-native
02 / Compaction hierarchy

Six tiers of compounded narrative.

Each tier is a different abstraction over the same evidence — your git log and your coding-agent transcripts. Every night, Janus walks each tracked project and compounds the narrative one tier higher.

Tier 01 / Daily

Daily pulse

A per-project pulse and a cross-project rollup. What shipped, what got stuck, what was decided, what stayed in flight. Prose, not bullets.

Tier 02 / Weekly

Weekly arcs

Five pulses become one arc. Tracks materialize across projects. Open loops surface from one week to the next.

Tier 03 / Monthly

Monthly digests

Themes compress into one digest. Decisions promote into ADRs. The narrative gets a shape.

Tier 04 / Quarterly

Quarterly retros

Three months become one retrospective. Outcomes vs. intent, scoped against open loops from the period.

Tier 05 / Yearly

Yearly retrospective

The full year as one continuous narrative — themes, archetype, the work that defined the year.

Tier 06 / Spine

Per-project spine

A continuous Wikipedia-style note that explains the project from scratch in 600 words. Updated, not regenerated.

03 / Flagship · Janus Wrapped

A yearly flagship, generated from your own evidence.

At year close and on project anniversaries, Janus emits a yearly retrospective: top tracks, biggest decision, maker personality archetype, themes of the year. Markdown, HTML and PNG export.

  • Personality Archetype derived from your behavior, not your stated intent.
  • Trickle Release window from T-7 to T-0 around year-end to keep the reveal ritual.
  • Demo Synthetic janus demo runs against three fake projects — no Obsidian or Claude Max required.
04 / Architecture

Built like an instrument,
not a SaaS.

01

Runtime

Janus invokes claude -p headless and strips ANTHROPIC_API_KEY from the spawned env. The runner authenticates against your Claude Max OAuth session — no API tokens billed.

02

Adapters

LLMRunner abstraction with swappable adapters. claude-code primary, gemini-cli fallback. Both shell out to the local CLI — provider-portable by design.

03

Storage

bun:sqlite for checkpoint state and FTS5 search. Tracks project metadata, decision graph, track lineage, and dead-letter queue for retries.

04

Prompts

Eta-templated, versioned v1.mdv8.md. Old prompts stay in-tree so the voice evolution is documented and A/B evaluation stays possible.

05

Scheduler

Cross-platform nightly cycle. launchd plist on macOS, systemd-user timer on Linux and WSL. Both use absolute paths and a cleaned env.

06

Sink

Obsidian vault. Idempotent Markdown artifacts in Timeline/, Projects/, MOCs/, Dashboards/, Wrapped/. Re-runs overwrite, never duplicate.

05 / MCP server

Agent-native by default.

Janus exposes itself as a stdio JSON-RPC MCP server. Other coding- agent sessions can query the synthesized narrative directly — not the raw logs.

janus_ask(query, project?, since?, kind?)

FTS5 search across narrative artifacts. Returns excerpts, not raw logs.

janus_get_spine(project)

The continuous Wikipedia-style narrative for one project.

janus_get_pulse(project, date)

A specific historical pulse, by project and date.

janus_list_projects()

Projects with status and last-pulse timestamp.

For you if
  • You're running two or more projects in parallel and lose the thread by Friday.
  • You already live in Obsidian — Markdown is your native medium.
  • You'd rather read a paragraph than scan a dashboard.
  • You already pay for Claude Max, or you're set up with the gemini-cli fallback.
Not for you if
  • You work on a team and need shared workspaces — Janus is single-user by design.
  • You don't use Obsidian — the Markdown-everywhere sink and wikilinks assume it.
  • You want push-button reports into Notion, Linear, or Confluence — Janus owns the narrative layer, not the routing.
  • You want an encyclopedia of what you've learned — Janus writes the journal, not the wiki.
  • You want a dashboard of AI session cost and tokens — Janus writes prose, not metrics.
06 / Install

Paste once into your AI agent.

Janus is agent-native, so install is too. Drop the prompt into a fresh Claude Code, Codex, or Cursor session — it detects your platform, downloads and SHA-verifies the binary, then hands off to janus init so you finish interactively.

paste · into your AI agent
Janus is a personal historian for makers — a nightly agent that reads my git log and coding-agent session transcripts and compounds them into daily pulses, weekly arcs, monthly digests, quarterly retros, and a yearly Wrapped, straight into my Obsidian vault.

Read https://github.com/crewtives/janus#with-an-ai-coding-agent-one-shot and follow the one-shot install prompt step by step. Detect my OS + arch, verify the SHA256, install to ~/.local/bin/janus, then stop and tell me to run `janus init` myself — it's interactive.
Or install yourself one curl, then janus init
install · ~/.local/bin/janus
$ curl -fsSL https://raw.githubusercontent.com/crewtives/janus/main/scripts/install-binary.sh | bash
$ janus init

Detects your OS and architecture, downloads the matching binary from the latest release, verifies the SHA256, installs to ~/.local/bin/janus. Source at scripts/install-binary.sh.