Most people meet Claude Code as a coding assistant: open a repo, ask it to fix a bug, review the diff. That's the front door, but spend enough time in it and a different shape shows up. The same primitives that let it edit code (a filesystem it can read and write, hooks that fire on its actions, a memory it carries between sessions) are enough to run the back office of a one-person operation. For the last few months that is what I have been doing, and I wrote up the patterns in an open handbook.

The core idea is that the task list lives in the repo as plain markdown files. Every open piece of work is a file with YAML frontmatter (status, priority, due date, which project it belongs to), read and written by a handful of small scripts. Because the tasks are plain files in git, the history of what I worked on is just the commit log, and Claude can plan my day by reading the same files I do. There is no API to call and no separate database to keep in sync.

Hooks make it stop feeling like a chat box. A PreToolUse hook can block an action before it runs; a PostToolUse hook can record what just happened. I use them to auto-commit finished work scoped to exactly the files a session touched, to guard against two terminals editing the same file at once, and to stop a class of mistakes I do not trust myself to never make. The agent proposes and the hooks enforce.