{"slug": "i-built-a-daily-work-log-for-claude-code-and-it-never-leaves-my-machines", "title": "I built a daily work log for Claude Code, and it never leaves my machines", "summary": "A developer released worklog-for-claude-code, an MIT-licensed Linux tool that reads Claude Code session transcripts via hooks and an hourly systemd timer to produce a daily Markdown work log. Each session is stored as a small JSON record in a user-owned git repo, with per-device file paths to avoid merge conflicts across machines, and a loopback-only web UI protected by Host/Origin checks, CSRF tokens and a strict Content-Security-Policy. The tool is at version 0.1.0 and can be tried with a fake-data demo via pipx.", "body_md": "I use Claude Code for most of my day, on a laptop and a desktop, with a work account and a personal one. At 6 pm I often couldn't answer two simple questions: what did I actually get done today, and how much did it use?\n\nToken counters answer the second question. I wanted an answer to the first, so I built **worklog-for-claude-code**, a small open-source tool for Linux.\n\nOnce a day you get a simple page with:\n\nAfter setup it runs in the background. You don't have to remember anything.\n\nClaude Code writes a local transcript for every session. The tool reads those transcripts in two ways: through Claude Code hooks that fire when a session starts and ends, and through an hourly systemd timer that catches anything the hooks missed.\n\nFor each session it writes one small JSON record into a git repo you own. Every file path is written by exactly one device, so several machines can push to the same repo without merge conflicts. A nightly job turns the records into a Markdown report, and a local web UI shows it.\n\nTranscripts contain everything you typed, so the tool is built to keep as little as possible:\n\n`claude -p`. Turn them off to keep everything fully local.\nThe web UI listens on loopback only, and checks the Host and Origin headers, uses CSRF tokens and sends a strict Content-Security-Policy.\n\nThis runs the UI on fake data and doesn't touch your files:\n\n```\npipx run --spec worklog-for-claude-code claude-worklog demo\n```\n\nThen open [http://localhost:8766](http://localhost:8766).\n\nTo install it for real:\n\n```\npipx install worklog-for-claude-code\ngit init ~/claude-worklog-data\nclaude-worklog install-service\n```\n\nOpen [http://worklog.localhost:8765](http://worklog.localhost:8765), fill in the short setup form and click **Install hook**. For several machines, put the data folder in a private GitHub or GitLab repo.\n\nIt's MIT licensed and version 0.1.0. If you try it, I'd love to hear what's missing.", "url": "https://wpnews.pro/news/i-built-a-daily-work-log-for-claude-code-and-it-never-leaves-my-machines", "canonical_source": "https://dev.to/urvin/i-built-a-daily-work-log-for-claude-code-and-it-never-leaves-my-machines-45on", "published_at": "2026-09-26 18:02:21+00:00", "updated_at": "2026-09-26 18:31:22.127642+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-agents", "mlops"], "entities": ["Claude Code", "worklog-for-claude-code", "GitHub", "GitLab", "pipx"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-built-a-daily-work-log-for-claude-code-and-it-never-leaves-my-machines", "markdown": "https://wpnews.pro/news/i-built-a-daily-work-log-for-claude-code-and-it-never-leaves-my-machines.md", "text": "https://wpnews.pro/news/i-built-a-daily-work-log-for-claude-code-and-it-never-leaves-my-machines.txt", "jsonld": "https://wpnews.pro/news/i-built-a-daily-work-log-for-claude-code-and-it-never-leaves-my-machines.jsonld"}}