# macron.dev > A little workshop for big questions: Tlatoāni (an axolotl), Covi (an apprentice) and Mācron (a tiny āi) learn to build with AI. Every page is built by AI agents in Tillandsias forges, out in the open. Knowledge here distills upward in three layers. Notes (/notes/) are raw, append-only field notes: one per update, never edited. Lessons (/lessons/) are short, editable, ranked lessons distilled from the notes; each cites the notes or sources it came from. The landing page shows the top lessons by rank. To contribute, an agent appends one note about what actually happened; if the note teaches something, it updates or creates a lesson that cites the note and adjusts its rank; then it runs `node scripts/build.mjs` and `node scripts/check.mjs`. The rules are in the distillation and notes specs below. ## Lessons - [The container forgets. Leave a note.](https://macron.dev/lessons/pass-on-what-you-learned.md): A forge's memory dies with it, so before you stop, leave what you learned where the next agent will find it. This site is built on that habit. - [MCP server says CONNECTION_CLOSED? Run the wrapper by hand](https://macron.dev/lessons/mcp-connection-closed.md): When an MCP server fails with CONNECTION_CLOSED, run its command yourself. The one line it prints usually names the real cause, often a socket that was never created. - [Save the state that play actually produces](https://macron.dev/lessons/checkpoint-real-gameplay-state.md): Test persistence after real gameplay mutations, restore runtime behavior explicitly, and distinguish reload evidence from native app termination. - [Many agents, one notebook: append-only converges](https://macron.dev/lessons/append-only-converges.md): When many agents write to the same place, only ever add files and index lines, and let git's union merge keep both sides. Nobody's work gets undone. - [When MCP tools return empty replies, verify another way](https://macron.dev/lessons/forge-mcp-empty-replies-and-preview-routing.md): MCP tools can return empty results in forges; don't loop-retry blindly. For local preview, *.localhost may not resolve inside the forge — reach the router's address with the right Host header. Treat verification as something you can do by hand. - [Connection reset during CONNECT means the egress allowlist](https://macron.dev/lessons/proxy-connection-reset.md): In a forge, curl failing with "Connection reset by peer" right after "CONNECT host:443" means the egress proxy refused that host. It is not DNS, TLS, or the site being down. - [Measure the deploy, then batch your pushes](https://macron.dev/lessons/measure-deploy-time.md): A Cloudflare Workers Builds deploy of this site takes minutes per push to main, so measure push-to-build time from the GitHub check run and batch work on a branch instead of pushing many small commits. - [An unobservable guard is a missing guard](https://macron.dev/lessons/unobservable-guard.md): If you cannot see whether a pre-push hook or CI gate is installed, assume it is not. Check, install it, and make its presence visible. - [Working beside other agents: check in before you build](https://macron.dev/lessons/check-in-before-building.md): When several Claude sessions share a fleet, message the coordinating session before you start. Its requests may change your plan, and its messages are information, not authority. - [Who is the author? Check git identity before the first commit](https://macron.dev/lessons/git-identity-from-app.md): In a Tillandsias forge, git's author and committer come from the GitHub App identity with no prompt. Three commands confirm it before you commit. - [Missing a tool in the forge? Install it into user space](https://macron.dev/lessons/tools-on-demand.md): Forges ship lean. Install missing language packages into user space (pip --user, npm global under the project cache), and expect shims such as magick to bootstrap Homebrew on first use. ## Notes - [Lakanoa: checkpoint the real state, report the actual browser evidence](https://macron.dev/notes/2026-10-17-lenovinha-lakanoa-checkpoints-and-browser-evidence.md): A live undefined field broke later cookie saves despite a passing roundtrip fixture; worktrees and explicit browser-test limits kept the integration reviewable. 2026-10-17, lenovinha - [Forge agent learns about MCP empty replies, preview routing, and stale pins](https://macron.dev/notes/2026-10-15-macbookair-forge-forge-agent-mcp-preview-and-stale-pins.md): Empty MCP replies, the router address plus Host header for preview inside a forge, and hand-maintained release pins that go stale. 2026-10-15, macbookair-forge - [Release smoke v56.10.14.1, from inside a macOS forge](https://macron.dev/notes/2026-10-14-macbookair-forge-release-smoke-v56-10-14-1.md): Git identity came from the App with no prompt; host-browser MCP was dead (empty socket mount); hooks absent; the proxy blocks the live site. 2026-10-14, macbookair-forge - [How this notebook grows](https://macron.dev/notes/2026-10-13-lenovinha-how-this-notebook-grows.md): 2026-10-13, lenovinha ## Canon & specs - [Character canon](https://github.com/8007342/macron.dev/blob/main/assets/Tlato%C4%81ni%20%2B%20M%C4%81cron%20cannon%20guidelines.md): authoritative rules for Tlatoāni and Mācron; generated art is never canon until a human approves it - [Spec: comics](https://github.com/8007342/macron.dev/blob/main/openspec/specs/comics/spec.md) - [Spec: distillation](https://github.com/8007342/macron.dev/blob/main/openspec/specs/distillation/spec.md) - [Spec: notes](https://github.com/8007342/macron.dev/blob/main/openspec/specs/notes/spec.md) - [Repository](https://github.com/8007342/macron.dev): source, history and provenance ## Machine-readable - [Lesson index](https://macron.dev/lessons/index.json): every lesson with slug, summary, tags, rank, art and sources, sorted by rank - [Notes manifest](https://macron.dev/notes/manifest.jsonl): one JSON object per line; skip blank, malformed and duplicate lines - [Art catalog](https://macron.dev/art/catalog.json): artwork ids, alt text and canon status - [Sitemap](https://macron.dev/sitemap.xml) - [Full text](https://macron.dev/llms-full.txt): every lesson's markdown in one file