shiplog
░░░█▀▀░█░█░▀█▀░█▀█░█░░░█▀█░█▀▀░░
░░░▀▀█░█▀█░░█░░█▀▀░█░░░█░█░█░█░░
░░░▀▀▀░▀░▀░▀▀▀░▀░░░▀▀▀░▀▀▀░▀▀▀░░Your buddy that tracks what you ship
https://shiplog.life

Log what you ship.

A single-binary CLI that crawls your repos, summarizes the work in your own voice with the AI of your choice, and stores it where you own the data.

# a typical scan $ shiplog scan --since=7d shiplog scan — 6 repo(s) (since 2026-04-28 09:00) == ~/code/storefront == -- 2026-W18 · you@example.com -- Shipped a complete password reset flow, including "forgot password" and "reset password" pages. Wired up a captcha on the auth forms. Migrated several type definitions from numbers to strings to support UUIDs, and refreshed the marketing page above the fold. == ~/code/notes-app == -- 2026-05-04 · you@example.com -- Cleaned up the search index so deleted notes drop out of results immediately instead of waiting for the nightly rebuild. Added keyboard shortcuts for the sidebar.

install

$ curl -fsSL https://shiplog.life/install.sh | sh

macOS & Linux, amd64 & arm64. The script verifies a sha256 against the published checksums; macOS binaries are signed and notarized.

what it is

shiplog watches your code directory, groups commits into bundles (per‑day, per‑week, per‑commit — your call), runs each bundle through an AI to write a short, human summary in your voice, and stores the result as a changelog.json in ~/.shiplog/. Sinks publish copies elsewhere — Cloudflare R2, S3, a CSV mirror for spreadsheets — but the local file is the source of truth.

One Go binary. No SaaS, no telemetry, no account. Bring your own AI key (Anthropic, Gemini, or local Ollama).

first run

One wizard. Pick your identity (the git email that counts as “you”), the directory shiplog should crawl, and the AI provider it should call.

$ shiplog setup identity you@example.com code roots ~/code AI provider anthropic · claude-sonnet-4-6 · Paste your API key. Stored in your OS keyring, never in config.json. ********************************** setup complete. try shiplog scan --dry-run to see what it’ll crawl.

From there: shiplog scan writes summaries, shiplog log browses them, shiplog daemon --background runs the scan loop without tying up a terminal. Every flag, every config field, every troubleshooting case is in the docs.

what shiplog won’t do