Public engineering notebook by Alex Lennon (@embedded_iot) under the Chop Wood Carry Water brand — building a durable working relationship with AI coding agents.
🌐 Site: https://chopwoodcarrywater.uk/
📦 Repo: https://github.com/DynamicDevices/durable-agent-harness
🏷️ Baseline: v1.2 (2026-09-12) in BASELINE-v1.2.md · previous v1.1
🤖 Agents: AGENTS.md · https://chopwoodcarrywater.uk/agents.html
First-person voice, short blog, playbook, patterns, and honest measurement — personal brand, not a company brochure.
Here, the working relationship is the human experience and the durable agent harness is the versioned, tested mechanism that makes it repeatable. Portable skills are its core; product-specific guidance and controls are host adapters; Codex and Cursor are the cockpits in which it runs.
| Layer | Meaning in this notebook |
|---|---|
| Working relationship | The human experience: purpose, judgement, collaboration and learning |
| Durable harness | Skills, policy, memory, tools, gates, tests and feedback that should survive a host change |
| Host adapter | Codex- or Cursor-specific guidance, hooks, permissions and task integration |
| Cockpit / host | Codex or Cursor: the agent runtime and interface supplying native controls |
Topics: ai · agents · cursor · developer-tools · llm · engineering · documentation · productivity
Site SEO includes canonical URLs, per-insight Open Graph / Twitter cards,
BlogPosting JSON-LD, RSS, robots.txt, llms.txt, and a real-URL sitemap.
Contract: docs/NOTES-SOCIAL-SHARING.md.
| Area | What you get |
|---|---|
| 60 minutes | Timed checklist + Codex starter pack (Cursor pack retained) |
| Codex migration | Portable Agent Skills, AGENTS.md, worktrees/handoff, host-native controls, self-evals |
| Playbook | Twelve steps to build a thin harness from scratch |
| Learning | MemPalace memory + Kaizen → Hansei → Toyota Way Practices |
| Runtime | Preloop (policy/audit under P0) + OpenRouter (multi-model routing) + PR commit checks (preloop status) |
| Channels & lean | WhatsApp/Briar triage, media ingest, token-lean skills, desktop MCQ, voice, CI checks |
| Starter kit | Copy-paste templates for skills, rules, patterns, lanes, clocks, capability maps (starters/) |
| Explore | Timeline, stack, capability map, patterns, glossary/FAQ, research |
| Cases | Before/after outcomes that show the harness at work |
| Measure | Tenure clocks, metrics that aren’t fake multipliers, weekly ritual |
| Insights | What broke / locked / earned a place on disk — sparks in blog-inbox.md, published at EOW |
| About | Notebook blurb; contributor notes in PRIVACY.md |
npm install
npx playwright install chromium
npm run cards # regenerate 1200×627 insight cards (Pillow)
npm test # sync + privacy gate + Playwright (desktop + mobile)
npm run serve # http://127.0.0.1:4173Start a private insight package from a rough thought or UTF-8 transcript:
npm run insight:new -- --title "The working title" --text "The first thought"
npm run insight:new -- --title "The working title" --input ~/Downloads/transcript.txtDrafts default to a private directory outside this public repository and are
not published automatically. Use --output-root to select another private
location. After publishing the associated LinkedIn post, add its HTTPS URL as
discussionUrl so the article invites readers to join that conversation.
Create or refresh a public-but-unlisted review page from a private package:
npm run insight:review -- --package /path/to/private-package
npm run insight:review -- --package /path/to/private-package --replace
npm run syncThe review URL is /review/the-working-title.html. Only the CWCW insight draft section and publication metadata are copied into this public repository;
research notes, raw material and social copy stay in the private package. Review
pages are visibly marked as drafts, carry noindex,nofollow, and are excluded
from Insights, RSS, the sitemap, llms.txt and social-card generation. They are
unlisted, not confidential: anyone with the URL or repository access can read
them. Every review requires a newly generated, post-specific 1200×627 editorial
image derived from that draft's image brief; reusable generic cards are not an
acceptable substitute. The generated-image disclosure, meaningful alt text and
the exact ../assets/review/<slug>.png path must be present in the manifest
before insight:review will promote it. Publishing remains a separate,
deliberate edit to content/blog.json.
content/blog.json is the insight source of truth. npm run sync renders static
docs/notes/*.html, feed.xml, sitemap.xml and llms.txt; GitHub Pages
serves docs/ from main. Review the PR and local Lighthouse results before
merging. After production publish, run new URLs through LinkedIn Post Inspector.
| Clock | Start |
|---|---|
| Serious hands-on AI | 2025-06-06 |
| Cursor as cockpit | 2025-07-23 |
| Codex as cockpit | 2026-08-30 |
| Versioned harness | 2026-05-31 |
- Notebook content: CC BY-SA 4.0
- Site code / scripts / tests: MIT
See LICENSE for the split.
AI-assisted (Codex) under Alex’s direction. Use at your own risk.