{"slug": "skills-and-hooks-that-make-claude-code-finish-what-it-starts", "title": "Skills and hooks that make Claude Code finish what it starts", "summary": "A developer built agent-harness, an open-source set of Agent Skills, rules and hooks for Claude Code and Codex that scales the agent's behavior to the request—from a simple fix to a full product or company workflow—and enforces completion with a Stop hook (done-check.py) that sends the agent back to work when results aren't verifiably finished. The harness adds evidence-based ledgers (READINESS.md, COMPANY.md, PORTFOLIO.md), standing approvals in OWNER.md with money, signing and new accounts reserved for the owner, and a scheduler that runs 'continue' in a project every few hours without a chat open. It installs idempotently via install.sh, works with any agent reading AGENTS.md and ~/.agents/skills, and ships an offline test suite.", "body_md": "The most expensive thing a coding agent does is not writing a bug. It is ending a turn that sounds finished when it is not: \"Deployed!\" with no URL checked, three requests with one done, or a list of \"next steps for you\" that the agent could have done itself.\n\nI run many projects through Claude Code and Codex at the same time, so I built [agent-harness](https://github.com/fainir/agent-harness): a set of Agent Skills, rules and hooks that change how the agent sizes, finishes and reports work. There is no service behind it; it is files in your agent's config.\n\nThe harness reads what you asked and picks how to act:\n\n| You type | The agent acts as | It keeps | \n|---|---|---|\n| a question or a tiny edit | an engineer | nothing extra | \n| \"fix the login bug\" | engineer + QA | the matching row, if a ledger exists | \n| \"make it production ready\" | the whole product team: spec, build, UX review, QA of every flow, release gates, deploy | `READINESS.md` | \n| \"get customers\" | the CEO: product, growth, sales, support, money | `COMPANY.md` | \n| \"finish all my projects\" | a portfolio head with bounded parallel workers | `PORTFOLIO.md` | \n\nA fix stays a fix. A product request gets a ledger of every user flow and release gate.\n\nEvery row in a ledger is verified only with evidence: a test run, phone and desktop screenshots, or a URL check. A Stop hook (`done-check.py`) reads your last request when the agent tries to stop and sends it back when the work is not verifiably finished.\n\nYou write standing approvals once in `OWNER.md`: money caps, which accounts and channels the agent may use, which decisions it makes alone. Inside them it acts. Outside them it asks one exact thing:\n\n``` php\nNEEDS YOU (1 of 3): Stripe -> create the account -> unblocks checkout\n```\n\nMoving money, signing and creating new third-party accounts always stay yours.\n\n`run-company/scripts/schedule.sh` installs a launchd or cron job that runs `continue` in a project every few hours, with no chat open. Every friction and every owner ask is logged, and a weekly review tests one harness change against the current version on the same task before keeping it.\n\n```\ngit clone https://github.com/fainir/agent-harness ~/agent-harness && ~/agent-harness/install.sh\n```\n\nThe installer is idempotent and keeps your own content; `./install.sh --uninstall` removes everything it added. It works with Claude Code and Codex, and with any agent that reads `AGENTS.md` and `~/.agents/skills`. `bash tests/test.sh` runs the offline test suite (hooks, learn scripts and a full install and uninstall cycle in a throwaway home).\n\nLimits, honestly: the agent is only as good as the model and the accounts it can reach, and background runs spend model usage while they run. Pause one with `schedule.sh --remove <dir>`.", "url": "https://wpnews.pro/news/skills-and-hooks-that-make-claude-code-finish-what-it-starts", "canonical_source": "https://dev.to/nir_feinstein_9a91c1c2428/skills-and-hooks-that-make-claude-code-finish-what-it-starts-45fc", "published_at": "2026-11-03 17:39:55+00:00", "updated_at": "2026-11-03 17:53:12.149868+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["Claude Code", "Codex", "agent-harness", "Stripe"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/skills-and-hooks-that-make-claude-code-finish-what-it-starts", "markdown": "https://wpnews.pro/news/skills-and-hooks-that-make-claude-code-finish-what-it-starts.md", "text": "https://wpnews.pro/news/skills-and-hooks-that-make-claude-code-finish-what-it-starts.txt", "jsonld": "https://wpnews.pro/news/skills-and-hooks-that-make-claude-code-finish-what-it-starts.jsonld"}}