Like a trail cairn, stack one mark of work each day — and leave a path behind.
cairn turns your daily dev activity — GitHub PRs and local Git commits across multiple repos — into a Claude-summarized worklog published to Notion, with automatic weekly and monthly rollups.
It runs as an Electron desktop app on top of a headless engine. Everything stays on your machine: it uses the Claude Agent SDK (no direct Anthropic API calls) and never sends source code or diffs to external services.
- Aggregate — GitHub PRs (authored + assigned) and local Git commits across multiple repositories and accounts
- Summarize — Claude (Agent SDK) writes the worklog in your language (Korean or English), with the summary model you choose
- Publish — to Notion: daily logs + automatic weekly/monthly rollups
- Desktop app — guided first-run setup, one-click publish, opt-in auto-publish at a time you choose (your local timezone), in-app Notion viewer, a stats dashboard, dark/light/system themes, ko/en
- Local-first & private — machine-local secrets, no server, no code-body egress (ADR 0003)
- macOS
- Claude Pro/Max subscription or Anthropic API key (for the Agent SDK)
- GitHub fine-grained PAT (read-only)
- Notion internal integration token
The desktop app's first-run setup walks you through connecting these and writes the config for you.
Grab the latest .dmg from the Releases page.
-
macOS (Apple Silicon / arm64) for now. Intel and other platforms may follow.
-
The app is not yet code-signed (no paid Apple Developer ID), so macOS Gatekeeper blocks it on first launch. After dragging it to Applications, clear the quarantine flag once:
xattr -cr /Applications/Cairn.app
then open it normally. (Alternatively, on macOS Sequoia/Tahoe: System Settings → Privacy & Security → Open Anyway.)
-
It checks for new versions and notifies you when one is available — download the new
.dmgto update. (Seamless auto-update will come once the app is signed.)
Prefer building it yourself? You can.
- Node 24 LTS (see .nvmrc), pnpm 10+
git clone https://github.com/ldhbenecia/cairn.git
cd cairn
nvm use
pnpm install
pnpm --filter @cairn/desktop dev # run the desktop app (dev)Headless engine only (CLI):
pnpm build
node packages/core/dist/main.js --mode=daily --date=$(date +%F) --dry-runModes: daily, weekly, monthly. Manual setup of .env + worklog.config.json is documented in docs/SETUP.md (한국어) — though the desktop app generates both.
The
launchdjobs under ops/ are deprecated — auto-publish is owned by the desktop app (ADR 0015). They remain only for headless/CLI-only setups.
pnpm monorepo:
packages/core— headless engine (collectors → Claude summarizer → Notion publisher), runnable as a CLIpackages/desktop— Electron app (setup wizard, manual/auto publishing, in-app log viewer, stats dashboard, preferences)packages/web— marketing site (Next.js, deployed on Vercel); also hosts the optional cross-device sync backend (auth + stats API)
- Engine (
packages/core) — TypeScript · NestJS (standalone) · Octokit · Notion SDK · Claude Agent SDK - Desktop (
packages/desktop) — Electron · React 19 · Tailwind CSS v4 · electron-vite · electron-updater - Web (
packages/web) — Next.js · Tailwind CSS v4 · Better Auth + Drizzle ORM + Postgres (cross-device sync) - Tooling — pnpm workspaces · ESLint/Prettier · Husky + lint-staged · GitHub Actions
| Path | Contents |
|---|---|
| docs/SETUP.md (한국어) | Manual setup guide |
| CLAUDE.md / AGENTS.md | Working context for Claude Code / Codex |
| .claude/rules/ | Project rules |
Your worklogs, code, and tokens stay on your machine. They are only sent to the services you configure (Notion, GitHub, Claude) — never anywhere else.
cairn sends anonymous usage telemetry (PostHog) to understand how many people use it and which versions are active. It is enabled by default and can be turned off in Preferences → About → Anonymous usage stats.
- Sent: a random anonymous install id, app version, OS/arch, and event names (
app_launched,publishwith mode + outcome). - Never sent: worklog content, PR titles, repo names, commit messages, file paths, tokens, or any personal information.
AGPL-3.0-or-later. Copyright (C) 2026 Donghyeok Lim.
Source code is public for reference and forks. Any derivative work — including modifications and any service that exposes this software over a network — must also be licensed under AGPL-3.0-or-later and provide its full source to users.
