HOME
WHAT IS THIS?
ghostwriter is a tool i built to write my daily status updates at work. every weekday morning it looks at my pull requests, git checkouts and claude code sessions from the day before and drafts the slack update, clickup comments and priorities sheet notes i would otherwise write by hand. nothing gets sent until i review it and click apply. the repo is private so everything below is a replay with made up data.
Figure 1 - a slack update ghostwriter drafted, sent after i reviewed it.
THE BUILD
NOTE:
this project and the page itself is hard churned slop. it is heavily reviewed, manually edited, over thought, and worked through many turns. it is a human project at the end of the day, albeit one with intentionally heavy AI assistance, intended to explore AI assisted project management workflow efficiency opportunities for developers working in teams on big projects with many stakeholders.
the repo is private. if you want a walkthrough of the real thing, ask me.
ONE MORNING, REPLAYED
click the orbs or use next to step through one morning. each step has an > under the hood section if you want the details.
launchd runs the daily job every hour. it checks the config, exits if today's draft already exists and takes a lock so two runs can't overlap. so the first run of the day writes the draft and every run after that just exits.
09:00:01 launchd: starting daily-sync 09:00:01 config complete 09:00:01 no draft for 2026-10-21 yet 09:00:01 lock taken ... 10:00:01 launchd: starting daily-sync 10:00:01 draft for 2026-10-21 exists, done
i used launchd instead of cron because cron jobs can't read the macOS login keychain, so claude and gh would be logged out.
the log only keeps the first line of claude's answer, the cost and the exit code since the full answer can include details that shouldn't be sitting in a log file.