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.
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.
A per-project pulse and a cross-project rollup. What shipped, what got stuck, what was decided, what stayed in flight. Prose, not bullets.
Five pulses become one arc. Tracks materialize across projects. Open loops surface from one week to the next.
Themes compress into one digest. Decisions promote into ADRs. The narrative gets a shape.
Three months become one retrospective. Outcomes vs. intent, scoped against open loops from the period.
The full year as one continuous narrative — themes, archetype, the work that defined the year.
A continuous Wikipedia-style note that explains the project from scratch in 600 words. Updated, not regenerated.
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.
LLMRunner abstraction with swappable adapters.
claude-code
primary, gemini-cli fallback. Both shell out to the
local CLI — provider-portable by design.
bun:sqlite for checkpoint state and FTS5 search.
Tracks project metadata, decision graph, track lineage, and
dead-letter queue for retries.
Eta-templated, versioned v1.md →
v8.md. Old prompts stay in-tree so the voice
evolution is documented and A/B evaluation stays possible.
Cross-platform nightly cycle. launchd plist on
macOS, systemd-user timer on Linux and WSL. Both use
absolute paths and a cleaned env.
Obsidian vault. Idempotent Markdown artifacts in
Timeline/, Projects/,
MOCs/, Dashboards/,
Wrapped/. Re-runs overwrite, never duplicate.
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.
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.
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. janus init $ 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.