The problem¶
AI coding agents ship as a conversational interface and a file tool. That's enough for a demo. It's not enough for a daily driver.
What's missing out of the box¶
When you move from "occasionally ask Claude to explain a diff" to "pair with Claude for 8 hours a day across three projects", a collection of predictable problems emerge:
- Session amnesia. Each conversation starts from nothing. You re-explain the project, the conventions, the constraints, the person you are. You paste the same context every day.
- No multi-context isolation. One global
~/.claude/directory mixes your personal experiments, your employer's private code, your client work, and your weekend side project. There is no way to switch cleanly. - No observability. How much did last week cost? Which sessions actually changed the repo? Which tools were called? You can't answer any of these.
- Knowledge is write-only. You learn something in a session and it dies when the window closes. There is no loop back into future sessions.
- Recurring jobs are yours to build. Want a pre-compact summary? A weekly knowledge review? A nightly QMD re-index? You write the scheduler glue yourself, per platform.
- Migration is all-or-nothing. Adopting a new convention — moving knowledge, renaming profiles, splitting a setup — means editing many files by hand and praying.
Every one of these is solvable with enough shell scripts, cron entries, and discipline. That's what lazy-harness is: the shell scripts, the schedulers, and the discipline, packaged.
Why a framework and not a set of dotfiles¶
The early versions of this codebase lived as a personal dotfiles-style repo. That worked for one user and one machine. It broke down at the seams:
- Every improvement was tangled with personal config. Sharing required untangling.
- There was no abstraction boundary between "the harness" and "the user's setup".
- Multi-agent portability was impossible. Every path assumed Claude Code.
Extracting lazy-harness as a generic framework made the boundary explicit: the framework knows about profiles, hooks, knowledge, monitoring, scheduling — agent-agnostic concepts. Personal config (the actual CLAUDE.md, the specific hook scripts you want) lives in ~/.config/lazy-harness/profiles/ and is versioned with your dotfiles, completely separate from the framework code.
What lazy-harness is not¶
- It is not a Claude Code fork. It wraps Claude Code (and in the future other agents) without modifying them.
- It is not a chat wrapper. It never proxies your messages. It only manipulates the environment around the agent.
- It is not an MCP server. It interacts with Claude Code via settings, hooks, and the filesystem.
- It is not opinionated about your workflow. Every default is overridable; every feature is opt-in via
config.toml.